Compare commits
935 Commits
Author | SHA1 | Date | |
---|---|---|---|
c3c885de47 | |||
8a8c079b2f | |||
b4a30e2a25 | |||
f19f92c538 | |||
e1a946ab45 | |||
aa1817737e | |||
25ec5a24ab | |||
2118fadc48 | |||
ca2230f690 | |||
0ed197d4d9 | |||
046976dffc | |||
bb8139196e | |||
1fea2cdcbe | |||
fe3dd25bc3 | |||
5b09209ef9 | |||
62db650e3c | |||
b847886254 | |||
c6e69ffae4 | |||
b24f368d3f | |||
4dc8351f56 | |||
f3ab8199a5 | |||
28d953933a | |||
77d9ae92f6 | |||
7d00754587 | |||
982b5eb698 | |||
20a9c25d70 | |||
eebed9944c | |||
507a192489 | |||
689dc3b9d5 | |||
d765803b83 | |||
0fabb6a057 | |||
23efaae85e | |||
5b2f15726f | |||
bc3a5f3512 | |||
ba05f236bd | |||
6ac92ac4b8 | |||
d9a1cd082c | |||
a32071541a | |||
eb4f625bbd | |||
e36d45507a | |||
e32884f07f | |||
1344ffa67d | |||
e07210524f | |||
6f3996c061 | |||
fd06fd4dc1 | |||
d86d5feae3 | |||
0e20a8f07b | |||
a40d784e3a | |||
e145131b95 | |||
92873b8bb5 | |||
d359b71c81 | |||
f1a0bf4257 | |||
ea4e2da58d | |||
1301b3b49e | |||
424625846e | |||
0790dd7a2c | |||
b238d7b934 | |||
011e4fded2 | |||
2fe872a9c9 | |||
02c1515a0f | |||
408118a1e8 | |||
6a45bb21c3 | |||
5d4e9aa949 | |||
c87b98c2af | |||
5a13c38a6d | |||
67f60ab307 | |||
08c278578d | |||
5e9d2d079d | |||
0e01fb5fc3 | |||
d44dc7e00d | |||
82ee3a538b | |||
fdc16253d1 | |||
7e83cd2d74 | |||
083eb75eff | |||
f50afa768f | |||
1a80fe91ce | |||
4de1a5ef6c | |||
d0d389299b | |||
dc70804350 | |||
78d691571b | |||
b7cbf4a42a | |||
87ca7c50b4 | |||
6c7550b3f3 | |||
4239ffa13f | |||
c6cfb0df76 | |||
380cf0de69 | |||
11f25ea2e7 | |||
ef62497777 | |||
2824d8a5b6 | |||
1c84c0828e | |||
39e4494836 | |||
dc174ca759 | |||
b61cfd0407 | |||
53405e54a8 | |||
c7ef7531a9 | |||
626b4bf314 | |||
323d0e0154 | |||
6d1338317b | |||
1ce26d8aec | |||
7ba3d3ec98 | |||
24f58b3ecb | |||
d1d8587096 | |||
96db630f5e | |||
91fae0ae8b | |||
bfa1235b48 | |||
95d324a413 | |||
ef3535319b | |||
e9c04f4fa0 | |||
e7180d529a | |||
b8cd872738 | |||
efaaa76185 | |||
19e1f996a6 | |||
40a69bf200 | |||
9e3abb9989 | |||
5ba48e06f7 | |||
8b3a0a524b | |||
d9fe9cc5df | |||
b202c7906a | |||
b9c868cac6 | |||
33adf3c88d | |||
8b84f40975 | |||
fa131d2023 | |||
a83b38b50a | |||
dcd7b286ef | |||
b85bf769cd | |||
630a20d61e | |||
88c3794cf1 | |||
42eb457ad0 | |||
d153a8de20 | |||
7f7551f44c | |||
23082b55a4 | |||
dac7387a7f | |||
8c6856d894 | |||
2c0e514fb2 | |||
1917b0339e | |||
c05419f223 | |||
e0deaec695 | |||
d70e2a788e | |||
7343e6e2e8 | |||
106d4cc0d6 | |||
c98879cb7a | |||
9ca755c313 | |||
25e0b98840 | |||
5599c43c71 | |||
eb7597d7e4 | |||
d5767e92c4 | |||
ba3749d373 | |||
d8088acdf2 | |||
ad93e0aa3d | |||
691e58f03d | |||
95d5bccfca | |||
2aa8e0a4bf | |||
6e96d6677d | |||
8816c20f51 | |||
e955fe1ffd | |||
5cbcac713a | |||
2b50364ab4 | |||
fa04ac789e | |||
95ce8dce3d | |||
0b5eec4ca8 | |||
6d9716f90e | |||
aa31061d90 | |||
acc7797dff | |||
7959196dc7 | |||
c6ff6939a5 | |||
769960f29e | |||
d92e9759f3 | |||
bf7e19b288 | |||
98954cd6d4 | |||
538bb978ed | |||
10232c5866 | |||
5cd6a0db16 | |||
ff0a05a2d6 | |||
e34b264af2 | |||
00d79487cd | |||
3cace734c7 | |||
f428372869 | |||
5dd2feba9b | |||
a1b026239e | |||
40735ce76b | |||
4a00c13b33 | |||
8e359d54bd | |||
fb76dff836 | |||
2448bf4e4e | |||
91e0fc8c62 | |||
b4f86feddb | |||
7167c8c593 | |||
51b79d4250 | |||
925fcc1c64 | |||
fcdc14862c | |||
dac2844cae | |||
706b0cea16 | |||
842e7844c7 | |||
1dceda50d8 | |||
af8b9abba4 | |||
07b07685fa | |||
cde43fe3c8 | |||
2fe84aa75b | |||
7d79a4840d | |||
3ee9479572 | |||
ccf8e44acc | |||
451acb77df | |||
e2c6227f47 | |||
ebd1c877ad | |||
498094b3c7 | |||
1cc183ecdb | |||
e8948452fd | |||
ade7e62836 | |||
395cfa6108 | |||
b5ff2abdb9 | |||
229e85b2c5 | |||
37058e3480 | |||
a1b82e9723 | |||
db943df0c8 | |||
ff8d300ea8 | |||
8b490b9b94 | |||
f83f8631ac | |||
16da91d8d1 | |||
8ffd62b462 | |||
935367e167 | |||
00618260f2 | |||
77d66fac7b | |||
17d7f59b06 | |||
2561547db1 | |||
7738438616 | |||
3d8fc4a794 | |||
87b4e7905e | |||
13c5d4985a | |||
f0df4096fd | |||
5044424549 | |||
8ce67cdcd6 | |||
1915ccabdd | |||
6fea2f52f1 | |||
f77eaaa08a | |||
7c5bc03492 | |||
72a1af6cd4 | |||
4bce6f14f3 | |||
a38ce86f87 | |||
f539491502 | |||
d279f8e9ff | |||
eaec936fa6 | |||
a0735b0e7a | |||
5b039a1bee | |||
921609cab1 | |||
199573ccee | |||
977200b7cd | |||
6abff253ea | |||
ba64de334a | |||
dc1d7fa9d7 | |||
f42665d4bc | |||
a5eb19c878 | |||
60fa8e13d6 | |||
ecbaea463b | |||
814ddeb436 | |||
d6466106e8 | |||
633f5384f9 | |||
fa7989772c | |||
0e395612a6 | |||
fb3f52f3ad | |||
ba11c71d65 | |||
bdc3081167 | |||
430efcf1b9 | |||
996450dd7c | |||
fa779f0417 | |||
25cec6d28a | |||
c5f8403cea | |||
a9ae9a65c8 | |||
3698c679e2 | |||
881df20f1b | |||
7d269c0441 | |||
ba38f64353 | |||
db3ae303cb | |||
66f3a155e6 | |||
639b483e6c | |||
09843a409b | |||
e894ed5a8b | |||
d7808299fd | |||
f92e0c16d2 | |||
d94b3757be | |||
13e822cba6 | |||
c57bf87f52 | |||
99fbd60265 | |||
ea9b48db3c | |||
c145c994a9 | |||
d033998b56 | |||
3136c714bf | |||
c0ee134f19 | |||
d15ebe5732 | |||
ef630195fa | |||
e31921151e | |||
f94992abbe | |||
b00060c09c | |||
f6217d96d2 | |||
3a6947c7ed | |||
0fb528ddf8 | |||
14c03f226d | |||
4f0d844b43 | |||
b93395fc4c | |||
34eacb7e2d | |||
0177023ead | |||
a4678e45de | |||
f24869625e | |||
01beb705a2 | |||
ce28c70c35 | |||
5e0f5c31e7 | |||
b28dd4be52 | |||
291beb45fc | |||
ffb345ccb5 | |||
d2abe2cd81 | |||
acffc3e522 | |||
0962e62b8c | |||
91ebd310b7 | |||
2974c74b4e | |||
3d24112d2d | |||
4a977cd523 | |||
4b1886990f | |||
f3499b787c | |||
5209a584a2 | |||
57a63d38aa | |||
3efffbcf22 | |||
15eaebe522 | |||
eee98358ac | |||
795fc5e7bc | |||
70ac668474 | |||
1004e0d6e8 | |||
52aa64fcb6 | |||
7860d97a10 | |||
409b37b271 | |||
ad9b9964fa | |||
d2b5276f43 | |||
7204e2a84c | |||
1377fa3332 | |||
bf087bfccf | |||
e846e3d571 | |||
d646e62888 | |||
c008154d18 | |||
29bd4de26a | |||
7559b8da6c | |||
35218e84fc | |||
2c135fa2f6 | |||
21da6bd047 | |||
f1d65a66b4 | |||
63e2dbbb0d | |||
a228c522f1 | |||
a951c337b8 | |||
db3efb3791 | |||
8ee771ca77 | |||
488bbc9651 | |||
29b2bdf613 | |||
7e35048829 | |||
4d6b9f62e5 | |||
5f9a9867eb | |||
059a8e07d2 | |||
cf82f56e66 | |||
2778bd14d4 | |||
5b0446739c | |||
55f235d0ac | |||
4ec44c68e9 | |||
e6952d499a | |||
e0b82f827b | |||
0bccb17e82 | |||
b251b8c6a9 | |||
c2a62f632b | |||
359da9a5a1 | |||
2a235151ed | |||
9e318d5ebc | |||
6819eb3b4d | |||
4c6fb60dd2 | |||
bffb9a5c45 | |||
dca4053a67 | |||
fd07f00d14 | |||
bbeb6d534e | |||
37b5afa1a3 | |||
63b8af4531 | |||
e89e76076a | |||
18b4f74cdb | |||
b80d0a3b12 | |||
e53dde385c | |||
6a7a4c20e6 | |||
6434dac04d | |||
5deb1bf40e | |||
9cd334576c | |||
ae36bf301a | |||
9f60688d37 | |||
6a5a9de795 | |||
ca0ea9e57c | |||
a77a7e8112 | |||
b26ea2edc0 | |||
02b99dfd76 | |||
af02b0f115 | |||
9b3c379678 | |||
a423fd7695 | |||
de6e1d8c9b | |||
d9db3e8629 | |||
ac1c81b7d6 | |||
49b2eec534 | |||
f0abc46429 | |||
9fd4f5ee0a | |||
5e202c3def | |||
48223c1c76 | |||
dddf7834cc | |||
66ef30b2cc | |||
f802fe57b9 | |||
ead884ce89 | |||
6a87e9f690 | |||
5b943722fb | |||
4d92b14308 | |||
167c96d14e | |||
8a42373753 | |||
c1751a9b84 | |||
4e11da98d9 | |||
1b7d98c17e | |||
3038434712 | |||
117ab633a1 | |||
e50fa4762d | |||
aed1e839ba | |||
00f2974a2a | |||
073c96af47 | |||
71da498364 | |||
8e9c11f160 | |||
98f6b23249 | |||
89288d8e0d | |||
724121eeaa | |||
edee95a5ca | |||
0c2361bf72 | |||
92f8dc48e3 | |||
06a0fff4b0 | |||
d55e4621ac | |||
bc6bda3714 | |||
d3aafd3f13 | |||
1a508de1c4 | |||
768cc0aff5 | |||
67f4c1f429 | |||
2d4ceec0a5 | |||
3e2a0cd89a | |||
d1f4f2f663 | |||
6e3bf26cad | |||
672377f116 | |||
80ee5afba7 | |||
f55fcd3305 | |||
64fc14ade5 | |||
807f245657 | |||
62f966dc27 | |||
09f97bf7a7 | |||
69460e494c | |||
9bef723346 | |||
b99eabb2cf | |||
17be3f3d0f | |||
05fe2cb173 | |||
428be14c27 | |||
a04fa8441e | |||
7bcfa84e1a | |||
1cc5986df3 | |||
7aa5d03875 | |||
a59fbfac19 | |||
677f9ee8f6 | |||
f4a16be2b4 | |||
46b967ee4a | |||
78568accd1 | |||
e9f20a0fad | |||
bbd9894e6b | |||
f92745e381 | |||
2762b78bcc | |||
2d4ed2c8c2 | |||
2de8e8c358 | |||
eb7b638db3 | |||
321e851b26 | |||
f8340be3bf | |||
02341ceb6e | |||
3dcdd7a5d7 | |||
85188b5de2 | |||
b721d049c6 | |||
e518fff944 | |||
048128c7e1 | |||
d3717449c2 | |||
04de6218d3 | |||
0082473d78 | |||
77baca8e6e | |||
6a7169630c | |||
6b2089e043 | |||
14ad3af30d | |||
e7e6d833b7 | |||
d1a9561135 | |||
c7bda6f908 | |||
ef43721e32 | |||
ba6cd874aa | |||
f283d2423f | |||
c07f668f14 | |||
596524a63c | |||
975e4dd285 | |||
09b05c8552 | |||
530ee6f80e | |||
6ad31dca76 | |||
d423f8ae57 | |||
8e5ce7f8e3 | |||
33dfc21e4b | |||
3266f3948a | |||
7259887124 | |||
800de03187 | |||
78ba305e5c | |||
bfed1475bb | |||
3281d263c4 | |||
a9a1798e3a | |||
6806eafaed | |||
3e20ea5b2e | |||
3f30a69b8b | |||
2d2e16d9f6 | |||
9c32118b77 | |||
ecf2eb4738 | |||
3d754ea7eb | |||
f755f24560 | |||
699879d95d | |||
6677508ba7 | |||
58da32358b | |||
491bc75095 | |||
b9eafeee3f | |||
c56ff5d88d | |||
f5dd83a44a | |||
9a295a85b1 | |||
8e06d93c31 | |||
1a42200137 | |||
bbf33d2475 | |||
93203ebfd1 | |||
67053eeaa0 | |||
43baf4ad6a | |||
5b2a36e47b | |||
2a0862a24e | |||
ce31027b2e | |||
3f66c77821 | |||
bc713656ec | |||
46d89faebc | |||
7135c0e308 | |||
1962bfb4a5 | |||
a1fca2550e | |||
c17f99b7a5 | |||
7cd76d60c2 | |||
fa7c8cfe5b | |||
05fb8d35af | |||
eaa827e2d9 | |||
f365ea4585 | |||
5d2e43ffb9 | |||
e9a97ed99a | |||
fe98102600 | |||
aae8845664 | |||
81a4388ecc | |||
be3ab026fd | |||
f92f9d8cb0 | |||
08a59591ae | |||
a09a244242 | |||
483a61d90d | |||
385fb7586b | |||
c624da70ef | |||
675668c395 | |||
bc9c7efe85 | |||
2488d40421 | |||
bf7875bfaa | |||
a84fa30774 | |||
c19a763b3d | |||
0875460974 | |||
f0b08d3936 | |||
16520c7b4c | |||
65549d06d9 | |||
52da66d550 | |||
251c3c3fe4 | |||
ce2d2a10c1 | |||
3b6d242ef6 | |||
0ebe801af4 | |||
05daa7ac7d | |||
990a583e5e | |||
d9b02a18bf | |||
30aae79e5c | |||
a149c121fb | |||
47f4b51207 | |||
79f4d886d0 | |||
2b556aba03 | |||
4f62043b0c | |||
b1ae304c51 | |||
425bc032d0 | |||
0156b75bde | |||
8bc8fc58de | |||
9bf847b1fb | |||
0b078d203b | |||
df59018b47 | |||
b2681dcb5d | |||
46fa471636 | |||
5f2c441996 | |||
a79cc42b26 | |||
739c993911 | |||
cb180e00de | |||
4d46a61051 | |||
81969ea8b2 | |||
ac474f3884 | |||
a39aaf6eb1 | |||
68a7661f08 | |||
ffcb2f755c | |||
366e0d6bde | |||
b3a3238e43 | |||
92828028db | |||
bd97e315ff | |||
51083419f5 | |||
b23bfd4d86 | |||
7de3e847bd | |||
0d1a541dba | |||
2717109fe2 | |||
60ca0626ce | |||
15dae0ae65 | |||
1c680118a0 | |||
ad5efbba59 | |||
6dc7baa5e9 | |||
c2b886e750 | |||
edb61e52c5 | |||
ded297b04c | |||
65e1d5978a | |||
86e76358b1 | |||
435e0257a4 | |||
1c45cc808b | |||
ed27a2f963 | |||
1f53d1a149 | |||
8295f6d7a3 | |||
b02f6341c9 | |||
f6d577d411 | |||
db3e73318e | |||
29c2071711 | |||
3acd524d09 | |||
dae65cc123 | |||
695f154d87 | |||
59dca9a812 | |||
b9f04f8f53 | |||
0985f14f18 | |||
56684dd7c3 | |||
47a5f3bc67 | |||
1c1e3009e9 | |||
c7c3f6999b | |||
fb4aa9bc1c | |||
ef57f5907b | |||
eff44f9cd1 | |||
d7fa92d58f | |||
4e8033d5a4 | |||
8a207d8311 | |||
94ba9c8437 | |||
88c71c2998 | |||
7b6e55047f | |||
9d85d0bb08 | |||
27ac0bbc00 | |||
affde9b4e2 | |||
88324b6dd9 | |||
9b95ffe6c6 | |||
6b137f8d69 | |||
e78b2b0ab8 | |||
8b51428347 | |||
b8d53a7b40 | |||
b0d9e9caa2 | |||
1fc4ec8dc1 | |||
a1e1e25800 | |||
3b020732ec | |||
dcf92945fe | |||
f9f33903d4 | |||
d8bf06ab0f | |||
806dabe58b | |||
a17b8c56d7 | |||
0eaaaba8f2 | |||
f359d79d36 | |||
1d84000d94 | |||
b70e22c150 | |||
0774ffe376 | |||
0096d7d8ac | |||
38db966b3d | |||
cb7d313a66 | |||
91b7905f3f | |||
9a81fba992 | |||
43553d5c09 | |||
e0ca8ce173 | |||
13624ea7c2 | |||
9502586c8b | |||
d6753f2cf2 | |||
5ba36efcd2 | |||
fd497ef105 | |||
9c4a7bf94c | |||
91f8adc138 | |||
69fa2373cb | |||
8b37fc4772 | |||
81e4ed9591 | |||
9cda89ec04 | |||
fc180f030f | |||
a827b6028d | |||
4517bf7342 | |||
b21287262e | |||
a60ae130c1 | |||
dd88acd411 | |||
b63fc1a9e5 | |||
17f143cfb2 | |||
cf57d847d1 | |||
7c4c7bea14 | |||
e5ec47fc75 | |||
ad91dc2423 | |||
7acbe53948 | |||
fe1b8ba0cb | |||
b0a8a51b69 | |||
c3ca21e610 | |||
c1b47a2119 | |||
caf625afee | |||
2bad3865a3 | |||
3f7d248684 | |||
4e7382b793 | |||
552ff4a044 | |||
afb52a0cd5 | |||
1ac89b0f5b | |||
5039ca7ee1 | |||
a48fd9ce18 | |||
58859c4811 | |||
5988fb3111 | |||
8dce821789 | |||
16fde0b507 | |||
9723662706 | |||
df4415b4fe | |||
6e179e7cde | |||
87f248b8ec | |||
027140eccc | |||
92cf205c66 | |||
fa3299840f | |||
f54529d46f | |||
b772add064 | |||
231f2e77a4 | |||
a000a9e607 | |||
e8da15ab1e | |||
e070ccb313 | |||
2b06579228 | |||
853c847ba1 | |||
e852680b0a | |||
0b0ee915b3 | |||
516d1d093f | |||
aee9c79c0f | |||
2d4b183c14 | |||
03b20e11ca | |||
e0e006e284 | |||
a294a881ec | |||
53926082e7 | |||
2d185becc3 | |||
67fff324b0 | |||
f64b7fcabc | |||
4cefa16db6 | |||
22722379df | |||
b2b83dc45d | |||
ebf6f8bbfd | |||
3e1631d180 | |||
97cb3c8613 | |||
6dda3a5d8a | |||
e50b0540f5 | |||
63b4aee9bd | |||
5b5de6a89c | |||
a11c991f83 | |||
a0adcf0d1a | |||
93b2b82993 | |||
4dee7d91b1 | |||
839be6477d | |||
59e2ed8ab0 | |||
83790004dd | |||
b70e9824ac | |||
155d49e8ac | |||
4ae10ab33d | |||
7124586eb1 | |||
74f6ed1851 | |||
efae7a7bce | |||
e59f13e8ff | |||
31ed8949b9 | |||
f1174a15e0 | |||
912ffae600 | |||
71a5662195 | |||
774834a31f | |||
91f1c3a10a | |||
8fc1e07136 | |||
a62e2b83ff | |||
e31a2f7e55 | |||
1598e996b1 | |||
4fb7ee760a | |||
37865cb381 | |||
ab8b882435 | |||
1b2996947e | |||
1d9c88e9a1 | |||
ea56d368e3 | |||
dbd3a750f5 | |||
f41818141f | |||
d2f576accd | |||
4e483856d4 | |||
2997f26e3c | |||
cdab596240 | |||
fca7a9da94 | |||
8ba178f795 | |||
8eb8243153 | |||
b4967b862c | |||
aee3517736 | |||
52ff8e84fa | |||
9bb6db649c | |||
da99be9897 | |||
2d7ec8a471 | |||
4cbbfdad1a | |||
2924858311 | |||
85916bfea1 | |||
38ccd9e794 | |||
c64b6be915 | |||
d98c67e13c | |||
d129151fdf | |||
1b9c69f793 | |||
42dd092334 | |||
8dc9ec06f8 | |||
ae5da782e5 | |||
313b0cec65 | |||
12a51972ed | |||
a2f3b2966f | |||
0c2627f08b | |||
9535df12dd | |||
2400471a0d | |||
784da8c37b | |||
3778f9c521 | |||
e1cec85f1e | |||
ca9c087060 | |||
5b2d91baad | |||
08e099b88d | |||
4153b0db38 | |||
88701a21bb | |||
3ddc73ca94 | |||
693d793265 | |||
5d685233dd | |||
16575751d9 | |||
1f6295f437 | |||
6737fe2ead | |||
4e77939fca | |||
21f528c07d | |||
23f835fac0 | |||
f21343225c | |||
f13a59f7db | |||
0315b9274c | |||
da88043962 | |||
0352bf0cc2 | |||
baa71070a8 | |||
2713064f27 | |||
f6387ac115 | |||
d704aca035 | |||
2b54b4ac06 | |||
7410f2f4c0 | |||
99c3c1258a | |||
e51184931d | |||
3bc9a40b48 | |||
9f49ca8fdb | |||
550d1547b4 | |||
ca0b56ee57 | |||
ef1d854f2c | |||
a5023271ef | |||
c3747db670 | |||
fe1e60a28c | |||
f91d2e8c8d | |||
dccc2c60e3 | |||
933e25804c | |||
0b503661af | |||
58082431ff | |||
2536bfb5f5 | |||
6428066552 | |||
4bf3827b73 | |||
3cad494404 | |||
ef0793311f | |||
6f3e341e89 | |||
2fea3be7c0 | |||
82059d4fd9 | |||
07ddeae2f1 | |||
f2279758b2 | |||
1ed189a518 | |||
137741d307 | |||
d702f6e090 | |||
f33701233c | |||
70003269e5 | |||
61896d2386 | |||
52d640c5a7 | |||
c65f5761e1 | |||
3016ac4805 | |||
28a47cd331 | |||
6ecb88b0d1 | |||
8df1278c8e | |||
52bec430d4 | |||
da4cec8767 | |||
ad0087d7dd | |||
9630860035 | |||
75e4c8d74d | |||
1a5ee81e7e | |||
3476be16ab | |||
c42f61a0f4 | |||
b42a9e1c4e | |||
4495525705 | |||
a603602f32 | |||
67b28f9b6e | |||
fd947407af | |||
30444e5f1a | |||
f0d818de24 | |||
3fb98e808f | |||
2c9bacfcea | |||
ae0284b1b1 | |||
166c4ebda0 | |||
319eed029b | |||
ec5aa10167 | |||
a542765cf8 | |||
fd3f8d43db | |||
4f4496078a | |||
8f4f5b4ce0 | |||
bdc6718ae5 | |||
09d1f1c20d | |||
0efb7af17b | |||
a45a78b94f | |||
6337c26cf0 | |||
208dec25d9 | |||
7d65a0c3d5 | |||
bb925e5de3 | |||
c9de5b65d4 | |||
9bc3fcf74f | |||
19d979c330 | |||
bb7b335491 | |||
be5a0b4794 | |||
48eea03386 | |||
566317dc83 | |||
d4334645c2 | |||
d60c3c4ee3 | |||
452514f7fe | |||
58abb0ce8f | |||
000d9cc1ce | |||
8cc017354a | |||
7caa083612 | |||
68e1b00eb1 | |||
1d904c756a | |||
0a1db1f595 | |||
e30e8267dd | |||
288a881817 | |||
f593790872 | |||
1044ad8589 | |||
6e24015e68 | |||
b9a2c449ff | |||
7c390cbf7b | |||
a657d1c774 |
87
.autogen/autogen.sh
Executable file
87
.autogen/autogen.sh
Executable file
@ -0,0 +1,87 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# __MISSKEY_BEARER_TOKEN=
|
||||||
|
# __MISSKEY_CAMPAIGN_ID=
|
||||||
|
# __MISSKEY_GITHUB_TOKEN=
|
||||||
|
# __MISSKEY_HEAD=acid-chicken:patch-autogen
|
||||||
|
# __MISSKEY_REPO=syuilo/misskey
|
||||||
|
# __MISSKEY_BRANCH=develop
|
||||||
|
test "$(curl -LSs -w '\n' -- "https://api.github.com/repos/$REPO/pulls?access_token=$__MISSKEY_GITHUB_TOKEN" | jq -r '.[].head.label' | grep $__MISSKEY_HEAD)" && exit 1
|
||||||
|
cd "$(dirname $0)/.." && \
|
||||||
|
touch null.cache && \
|
||||||
|
rm *.cache && \
|
||||||
|
git checkout $__MISSKEY_BRANCH && \
|
||||||
|
git pull origin $__MISSKEY_BRANCH && \
|
||||||
|
git pull upstream $__MISSKEY_BRANCH && \
|
||||||
|
git stash && \
|
||||||
|
git rebase -f upstream/$__MISSKEY_BRANCH && \
|
||||||
|
git branch patch-autogen && \
|
||||||
|
git checkout patch-autogen && \
|
||||||
|
git reset --hard HEAD || \
|
||||||
|
exit 1
|
||||||
|
touch patreon.md.cache && \
|
||||||
|
rm patreon.md.cache && \
|
||||||
|
echo '<!-- PATREON_START -->' > patreon.md.cache && \
|
||||||
|
url="https://www.patreon.com/api/oauth2/v2/campaigns/$__MISSKEY_CAMPAIGN_ID/members?include=currently_entitled_tiers,user&fields%5Btier%5D=title&fields%5Buser%5D=full_name,thumb_url,url,hide_pledges"
|
||||||
|
while :
|
||||||
|
do
|
||||||
|
touch patreon.raw.cache && \
|
||||||
|
rm patreon.raw.cache && \
|
||||||
|
curl -LSs -w '\n' -H "Authorization: Bearer $__MISSKEY_BEARER_TOKEN" -- $url > patreon.raw.cache && \
|
||||||
|
touch patreon.cache && \
|
||||||
|
rm patreon.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 && \
|
||||||
|
echo '<table><tr>' >> patreon.md.cache && \
|
||||||
|
cat patreon.cache | \
|
||||||
|
awk -F'\t' '{print $2,$1}' | \
|
||||||
|
sed -e 's/ /\\" alt=\\"/' | \
|
||||||
|
xargs -I% echo '<td><img src="%"></td>' >> patreon.md.cache && \
|
||||||
|
echo '</tr><tr>' >> patreon.md.cache && \
|
||||||
|
cat patreon.cache | \
|
||||||
|
awk -F'\t' '{print $3,$1}' | \
|
||||||
|
sed -e 's/ /\\">/' | \
|
||||||
|
xargs -I% echo '<td><a href="%</a></td>' >> patreon.md.cache && \
|
||||||
|
echo '</tr></table>' >> patreon.md.cache || \
|
||||||
|
exit 1
|
||||||
|
new_url="$(cat patreon.raw.cache | jq -r '.links.next')"
|
||||||
|
test "$new_url" = 'null' && \
|
||||||
|
break || \
|
||||||
|
URL="$url"
|
||||||
|
done
|
||||||
|
ignore= && \
|
||||||
|
echo -e "\n**Last updated:** $(date -uR | sed 's/\+0000/UTC/')\n<!-- PATREON_END -->" >> patreon.md.cache && \
|
||||||
|
touch README.md && \
|
||||||
|
touch .autogen/README.md && \
|
||||||
|
rm .autogen/README.md && \
|
||||||
|
mv README.md .autogen/README.md && \
|
||||||
|
cat .autogen/README.md | while IFS= read line;
|
||||||
|
do
|
||||||
|
if [[ -z "$ignore" ]]
|
||||||
|
then
|
||||||
|
if [[ "$line" = '<!-- PATREON_START -->' ]]
|
||||||
|
then
|
||||||
|
ignore='PATREON_INSIDE'
|
||||||
|
else
|
||||||
|
echo "$line" >> README.md
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [[ "$LINE" = '<!-- PATREON_END -->' ]]
|
||||||
|
then
|
||||||
|
ignore=
|
||||||
|
cat patreon.md.cache >> README.md
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
cat patreon.md.cache
|
||||||
|
touch null.cache && \
|
||||||
|
rm *.cache && \
|
||||||
|
diff .autogen/README.md README.md > diff.cache
|
||||||
|
cat diff.cache && \
|
||||||
|
test 4 -lt $(cat diff.cache | wc -l) && \
|
||||||
|
git add README.md && \
|
||||||
|
git commit -m 'Update README.md [AUTOGEN]' && \
|
||||||
|
git push -f origin patch-autogen && \
|
||||||
|
curl -LSs -w '\n' -X POST -d '{"title":"[AUTOMATED] Update README.md","body":"*This pull request was created by a tool.*","head":"'$__MISSKEY_HEAD'","base":"'$__MISSKEY_BRANCH'"}' -- "https://api.github.com/repos/$__MISSKEY_REPO/pulls?access_token=$__MISSKEY_GITHUB_TOKEN"
|
||||||
|
git stash
|
||||||
|
git checkout $__MISSKEY_BRANCH
|
||||||
|
git branch -D patch-autogen
|
@ -138,3 +138,6 @@ drive:
|
|||||||
|
|
||||||
# Clustering
|
# Clustering
|
||||||
# clusterLimit: 1
|
# clusterLimit: 1
|
||||||
|
|
||||||
|
# Summaly proxy
|
||||||
|
# summalyProxy: "http://example.com"
|
||||||
|
2
.npmrc
2
.npmrc
@ -1,2 +1,2 @@
|
|||||||
save-exact=true
|
save-exact = true
|
||||||
package-lock = false
|
package-lock = false
|
||||||
|
14
CHANGELOG.md
14
CHANGELOG.md
@ -5,6 +5,16 @@ ChangeLog
|
|||||||
|
|
||||||
This document describes breaking changes only.
|
This document describes breaking changes only.
|
||||||
|
|
||||||
|
8.0.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
### Migration
|
||||||
|
|
||||||
|
起動する前に、`node cli/migration/8.0.0`してください。
|
||||||
|
|
||||||
|
Please run `node cli/migration/8.0.0` before launch.
|
||||||
|
|
||||||
|
|
||||||
7.0.0
|
7.0.0
|
||||||
-----
|
-----
|
||||||
|
|
||||||
@ -37,13 +47,13 @@ Please run `node cli/migration/5.0.0` before launch.
|
|||||||
|
|
||||||
オセロがリバーシに変更されました。
|
オセロがリバーシに変更されました。
|
||||||
|
|
||||||
Othello is now Reversi.
|
Othello is rename to Reversi.
|
||||||
|
|
||||||
### Migration
|
### Migration
|
||||||
|
|
||||||
MongoDBの、`othelloGames`と`othelloMatchings`コレクションをそれぞれ`reversiGames`と`reversiMatchings`にリネームしてください。
|
MongoDBの、`othelloGames`と`othelloMatchings`コレクションをそれぞれ`reversiGames`と`reversiMatchings`にリネームしてください。
|
||||||
|
|
||||||
You need to rename `othelloGames` and `othelloMatchings` MongoDB collections to `reversiGames` and `reversiMatchings`.
|
Please rename `othelloGames` and `othelloMatchings` MongoDB collections to `reversiGames` and `reversiMatchings` respectively.
|
||||||
|
|
||||||
3.0.0
|
3.0.0
|
||||||
-----
|
-----
|
||||||
|
@ -1,27 +1,27 @@
|
|||||||
# Contribution guide
|
# Contribution guide
|
||||||
:v: Misskeyへの貢献ありがとうございます。 :v:
|
:v: Thanks for your contributions :v:
|
||||||
|
|
||||||
## Issueの報告
|
## Issues
|
||||||
新機能の提案や不具合の報告は https://github.com/syuilo/misskey/issues で管理しています。
|
Feature suggestions and bug reports are filed in https://github.com/syuilo/misskey/issues .
|
||||||
Issueを作成する前に、既に同じIssueが作成されていないかご確認ください。
|
Before creating a new issue, please search existing issues to avoid duplication.
|
||||||
もし既にIssueが作成されている場合は、既存のIssueにコメントをしたりリアクションをするようお願いします。
|
If you find the existing issue, please add your reaction or comment to the issue.
|
||||||
|
|
||||||
## Issueの解決
|
## Internationalization (i18n)
|
||||||
[pr-welcomeのラベルがついているIssue](https://github.com/syuilo/misskey/labels/pr-welcome)
|
Please see [Translation guide](./docs/translate.en.md).
|
||||||
の解決を目的としたPull Requestを作成してくださると非常にありがたいです。
|
|
||||||
|
|
||||||
## 翻訳の改善
|
## Localization (l10n)
|
||||||
ソースコード中の `%i18n:id%` という形の文字列は、言語ファイルの対応するテキストに置換されます。
|
Please use [Crowdin](https://crowdin.com/project/misskey) for localization.
|
||||||
言語ファイルは /locales ディレクトリに存在します。
|
|
||||||
|
|
||||||
## ドキュメントの編集
|

|
||||||
現在Misskeyはドキュメントが大きく不足しています。
|
|
||||||
ドキュメントは /docs ディレクトリに存在します。
|
|
||||||
|
|
||||||
## テストの追加
|
## Documentation
|
||||||
現在Misskeyはテストが大きく不足しています。
|
* Documents for contributors are located in `/docs`.
|
||||||
テストコードは /test ディレクトリに存在します。
|
* Documents for instance admins are located in `/docs`.
|
||||||
|
* Documents for end users are located in `src/docs`.
|
||||||
|
|
||||||
## 自動テスト及び自動リリース
|
## Test
|
||||||
Travis CIで行っています。
|
* Test codes are located in `/test`.
|
||||||
設定ファイルは /.travis に存在します。
|
|
||||||
|
## Continuous integration
|
||||||
|
Misskey uses Travis for automated test.
|
||||||
|
Configuration files are located in `/.travis`.
|
||||||
|
41
README.md
41
README.md
@ -1,4 +1,4 @@
|
|||||||
<img src="https://github.com/syuilo/misskey/blob/b3f42e62af698a67c2250533c437569559f1fdf9/src/himasaku/resources/himasaku.png?raw=true" align="right" width="320px"/>
|
<img src="https://github.com/syuilo/misskey/blob/develop/assets/ai-orig.png?raw=true" align="right" height="320px"/>
|
||||||
|
|
||||||
[](https://misskey.xyz/)
|
[](https://misskey.xyz/)
|
||||||
================================================================
|
================================================================
|
||||||
@ -7,7 +7,7 @@
|
|||||||
[![][dependencies-badge]][dependencies-link]
|
[![][dependencies-badge]][dependencies-link]
|
||||||
[](http://makeapullrequest.com) [](https://greenkeeper.io/)
|
[](http://makeapullrequest.com) [](https://greenkeeper.io/)
|
||||||
|
|
||||||
Sophisticated microblogging platform, evolving forever.
|
**Sophisticated microblogging platform, evolving forever.**
|
||||||
|
|
||||||
[Misskey](https://misskey.xyz) is a decentralized microblogging platform born on Earth.
|
[Misskey](https://misskey.xyz) is a decentralized microblogging platform born on Earth.
|
||||||
Since it exists within the Fediverse (a universe where various social media platforms are organized),
|
Since it exists within the Fediverse (a universe where various social media platforms are organized),
|
||||||
@ -24,7 +24,7 @@ Why don't you take a short break from the hustle and bustle of the city, and div
|
|||||||
* Reactions
|
* Reactions
|
||||||
* User lists
|
* User lists
|
||||||
* Customizable column view (called MisskeyDeck)
|
* Customizable column view (called MisskeyDeck)
|
||||||
* and widgets!
|
* Customizable widgets
|
||||||
* Private messages
|
* Private messages
|
||||||
* ActivityPub support
|
* ActivityPub support
|
||||||
|
|
||||||
@ -32,52 +32,49 @@ and more! You can see it with your own eyes at [misskey.xyz](https://misskey.xyz
|
|||||||
|
|
||||||
:package: Create your own instance
|
:package: Create your own instance
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
If you want to run your own instance of Misskey,
|
Please see [Setup and installation guide](./docs/setup.en.md).
|
||||||
please see [Setup and installation guide](./docs/setup.en.md).
|
|
||||||
|
|
||||||
:wrench: Contribute
|
:wrench: Contribution
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
**[PR](https://github.com/syuilo/misskey/pulls)s welcome!**
|
Please see [Contribution guide](./CONTRIBUTING.md).
|
||||||
|
|
||||||
If you want to...
|
|
||||||
* i18n ... please see [Translation guide](./docs/translate.en.md).
|
|
||||||
* l10n ... please visit https://crowdin.com/project/misskey
|
|
||||||
|
|
||||||
:heart: Backers & Sponsors
|
:heart: Backers & Sponsors
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
<!-- PATREON_START -->
|
<!-- PATREON_START -->
|
||||||
<table><tr>
|
<table><tr>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12378075/0156f769e20f412594fa6b87d85fe228/1?token-time=2145916800&token-hash=IsIJRUXszzoD6-7pDnRY8I05T9nSznc4GTaxj7C9SwU%3D" alt="39ff"></td>
|
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12731202/0995c46cdcb54153ab5f073f5869b70a/1?token-time=2145916800&token-hash=Yd60FK_SWfQO56SeiJpy1tDHOnCV4xdEywQe8gn5_Wo%3D" alt="negao"></td>
|
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12731202/0995c46cdcb54153ab5f073f5869b70a/1?token-time=2145916800&token-hash=Yd60FK_SWfQO56SeiJpy1tDHOnCV4xdEywQe8gn5_Wo%3D" alt="negao"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13099460/43cecdbaa63a40d79bf50a96b9910b9d/1?token-time=2145916800&token-hash=d6P5MWHHsCMxUuBAEPAoVc5wLUR19mIhqAq7Ma9h9rI%3D" alt="ne_moni"></td>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/1?token-time=2145916800&token-hash=f03BFb4S2FUx9YEt87TnEmifb4h33OywGBW2akQVtQY%3D" alt="Melilot"></td>
|
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/1?token-time=2145916800&token-hash=f03BFb4S2FUx9YEt87TnEmifb4h33OywGBW2akQVtQY%3D" alt="Melilot"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12999811/5f349fafcce44dd1824a8b1ebbec4564/2?token-time=2145916800&token-hash=rwZ8qvbm_kpA4ib3kc07tVKupXeySpY5ATQFGxfL9v0%3D" alt="Axella"></td>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/3384329/8b713330cb27404ea6e9fac50ff96efe/1?token-time=2145916800&token-hash=0eu4-m1gTWA9PhptVZt6rdKcusqcD7RB87rJT23VVFI%3D" alt="べすれい"></td>
|
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/3384329/8b713330cb27404ea6e9fac50ff96efe/1?token-time=2145916800&token-hash=0eu4-m1gTWA9PhptVZt6rdKcusqcD7RB87rJT23VVFI%3D" alt="べすれい"></td>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1?token-time=2145916800&token-hash=GgJ_NmUB6_nnRNLVGUWjV-WX91On7BOu59LKncYV9fE%3D" alt="gutfuckllc"></td>
|
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1?token-time=2145916800&token-hash=GgJ_NmUB6_nnRNLVGUWjV-WX91On7BOu59LKncYV9fE%3D" alt="gutfuckllc"></td>
|
||||||
<td><img src="https://c8.patreon.com/2/100/12718187" alt="Peter G."></td>
|
<td><img src="https://c8.patreon.com/2/100/12718187" alt="Peter G."></td>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/2?token-time=2145916800&token-hash=zElv7ZcPL3viGsXbNG_KWiKrbV0vvw1gk0panx8DJoo%3D" alt="Naoki Kosaka"></td>
|
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13039004/509d0c412eb14ae08d6a812a3054f7d6/1?token-time=2145916800&token-hash=zwSu01tOtn5xTUucDZHuPsCxF2HBEMVs9ROJKTlEV_o%3D" alt="nemu"></td>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12931605/ead494101f364dffa90efe49e36fb494/1?token-time=2145916800&token-hash=NzSFPjIlodXyv41rwK61aZWVZWfI4surJaNj8vWKvqM%3D" alt="Reiju"></td>
|
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td><a href="https://www.patreon.com/user?u=12378075">39ff</a></td>
|
|
||||||
<td><a href="https://www.patreon.com/user?u=12731202">negao</a></td>
|
<td><a href="https://www.patreon.com/user?u=12731202">negao</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=13099460">ne_moni</a></td>
|
||||||
<td><a href="https://www.patreon.com/user?u=12913507">Melilot</a></td>
|
<td><a href="https://www.patreon.com/user?u=12913507">Melilot</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/AxellaMC">Axella</a></td>
|
||||||
<td><a href="https://www.patreon.com/user?u=3384329">べすれい</a></td>
|
<td><a href="https://www.patreon.com/user?u=3384329">べすれい</a></td>
|
||||||
<td><a href="https://www.patreon.com/gutfuckllc">gutfuckllc</a></td>
|
<td><a href="https://www.patreon.com/gutfuckllc">gutfuckllc</a></td>
|
||||||
<td><a href="https://www.patreon.com/user?u=12718187">Peter G.</a></td>
|
<td><a href="https://www.patreon.com/user?u=12718187">Peter G.</a></td>
|
||||||
<td><a href="https://www.patreon.com/user?u=5881381">Naoki Kosaka</a></td>
|
<td><a href="https://www.patreon.com/user?u=13039004">nemu</a></td>
|
||||||
<td><a href="https://www.patreon.com/user?u=12931605">Reiju</a></td>
|
|
||||||
</tr></table>
|
</tr></table>
|
||||||
<table><tr>
|
<table><tr>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/2?token-time=2145916800&token-hash=zElv7ZcPL3viGsXbNG_KWiKrbV0vvw1gk0panx8DJoo%3D" alt="Naoki Kosaka"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12931605/ead494101f364dffa90efe49e36fb494/1?token-time=2145916800&token-hash=NzSFPjIlodXyv41rwK61aZWVZWfI4surJaNj8vWKvqM%3D" alt="Reiju"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1?token-time=2145916800&token-hash=UERBN4OyP7Nh5XwwdDg0N0IE5cD6_qUQMO81Z5Wizso%3D" alt="Hiratake"></td>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=S1zP0QyLU52Dqq6dtc9qNYyWfW86XrYHiR4NMbeOrnA%3D" alt="dansup"></td>
|
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=S1zP0QyLU52Dqq6dtc9qNYyWfW86XrYHiR4NMbeOrnA%3D" alt="dansup"></td>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/4950409/28e7d016209243759d9316be2e21381d/2?token-time=2145916800&token-hash=LuEaDkchH3GQWUcTOhBQ8xfKQYF0s5FjlZRd7Yduia8%3D" alt="mikan54951"></td>
|
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=tMosUojzUYJCH_3t--tvYA-SMCyrS__hzSndyaRSnbo%3D" alt="Takashi Shibuya"></td>
|
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=tMosUojzUYJCH_3t--tvYA-SMCyrS__hzSndyaRSnbo%3D" alt="Takashi Shibuya"></td>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12959468/c249e15aebec4424b5c0f427173671b6/1?token-time=2145916800&token-hash=lubpCEdxAkxPlpR2O6bvZ7BIh8Q4nGf-U_mE1qpjVAQ%3D" alt="fujishan"></td>
|
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=5881381">Naoki Kosaka</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=12931605">Reiju</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/hiratake">Hiratake</a></td>
|
||||||
<td><a href="https://www.patreon.com/dansup">dansup</a></td>
|
<td><a href="https://www.patreon.com/dansup">dansup</a></td>
|
||||||
<td><a href="https://www.patreon.com/user?u=4950409">mikan54951</a></td>
|
|
||||||
<td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
|
<td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
|
||||||
<td><a href="https://www.patreon.com/fujishan">fujishan</a></td>
|
|
||||||
</tr></table>
|
</tr></table>
|
||||||
|
|
||||||
**Last updated:** Sat, 18 Aug 2018 02:02:58 UTC
|
**Last updated:** Sun, 02 Sep 2018 05:30:06 UTC
|
||||||
<!-- PATREON_END -->
|
<!-- PATREON_END -->
|
||||||
|
|
||||||
:four_leaf_clover: Copyright
|
:four_leaf_clover: Copyright
|
||||||
|
BIN
assets/about/drive.png
Normal file
BIN
assets/about/drive.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 110 KiB |
BIN
assets/about/post.png
Normal file
BIN
assets/about/post.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 344 KiB |
BIN
assets/about/reaction.png
Normal file
BIN
assets/about/reaction.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
BIN
assets/about/ui.png
Normal file
BIN
assets/about/ui.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 125 KiB |
BIN
assets/ai-orig.png
Normal file
BIN
assets/ai-orig.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 256 KiB |
BIN
assets/ai.png
Normal file
BIN
assets/ai.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 243 KiB |
@ -1,40 +0,0 @@
|
|||||||
const { default: User, deleteUser } = require('../built/models/user');
|
|
||||||
const { default: zip } = require('@prezzemolo/zip')
|
|
||||||
|
|
||||||
const migrate = async (user) => {
|
|
||||||
try {
|
|
||||||
await deleteUser(user._id);
|
|
||||||
return true;
|
|
||||||
} catch (e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function main() {
|
|
||||||
const count = await User.count({
|
|
||||||
uri: /#/
|
|
||||||
});
|
|
||||||
|
|
||||||
const dop = 1
|
|
||||||
const idop = ((count - (count % dop)) / dop) + 1
|
|
||||||
|
|
||||||
return zip(
|
|
||||||
1,
|
|
||||||
async (time) => {
|
|
||||||
console.log(`${time} / ${idop}`)
|
|
||||||
const doc = await User.find({
|
|
||||||
uri: /#/
|
|
||||||
}, {
|
|
||||||
limit: dop, skip: time * dop
|
|
||||||
})
|
|
||||||
return Promise.all(doc.map(migrate))
|
|
||||||
},
|
|
||||||
idop
|
|
||||||
).then(a => {
|
|
||||||
const rv = []
|
|
||||||
a.forEach(e => rv.push(...e))
|
|
||||||
return rv
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
main().then(console.dir).catch(console.error)
|
|
144
cli/migration/8.0.0.js
Normal file
144
cli/migration/8.0.0.js
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
const { default: Stats } = require('../../built/models/stats');
|
||||||
|
const { default: User } = require('../../built/models/user');
|
||||||
|
const { default: Note } = require('../../built/models/note');
|
||||||
|
const { default: DriveFile } = require('../../built/models/drive-file');
|
||||||
|
|
||||||
|
const now = new Date();
|
||||||
|
const y = now.getFullYear();
|
||||||
|
const m = now.getMonth();
|
||||||
|
const d = now.getDate();
|
||||||
|
const h = now.getHours();
|
||||||
|
const date = new Date(y, m, d, h);
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
await Stats.update({}, {
|
||||||
|
$set: {
|
||||||
|
span: 'day'
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
multi: true
|
||||||
|
});
|
||||||
|
|
||||||
|
const localUsersCount = await User.count({
|
||||||
|
host: null
|
||||||
|
});
|
||||||
|
|
||||||
|
const remoteUsersCount = await User.count({
|
||||||
|
host: { $ne: null }
|
||||||
|
});
|
||||||
|
|
||||||
|
const localNotesCount = await Note.count({
|
||||||
|
'_user.host': null
|
||||||
|
});
|
||||||
|
|
||||||
|
const remoteNotesCount = await Note.count({
|
||||||
|
'_user.host': { $ne: null }
|
||||||
|
});
|
||||||
|
|
||||||
|
const localDriveFilesCount = await DriveFile.count({
|
||||||
|
'metadata._user.host': null
|
||||||
|
});
|
||||||
|
|
||||||
|
const remoteDriveFilesCount = await DriveFile.count({
|
||||||
|
'metadata._user.host': { $ne: null }
|
||||||
|
});
|
||||||
|
|
||||||
|
const localDriveFilesSize = await DriveFile
|
||||||
|
.aggregate([{
|
||||||
|
$match: {
|
||||||
|
'metadata._user.host': null,
|
||||||
|
'metadata.deletedAt': { $exists: false }
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
$project: {
|
||||||
|
length: true
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
$group: {
|
||||||
|
_id: null,
|
||||||
|
usage: { $sum: '$length' }
|
||||||
|
}
|
||||||
|
}])
|
||||||
|
.then(aggregates => {
|
||||||
|
if (aggregates.length > 0) {
|
||||||
|
return aggregates[0].usage;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
|
||||||
|
const remoteDriveFilesSize = await DriveFile
|
||||||
|
.aggregate([{
|
||||||
|
$match: {
|
||||||
|
'metadata._user.host': { $ne: null },
|
||||||
|
'metadata.deletedAt': { $exists: false }
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
$project: {
|
||||||
|
length: true
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
$group: {
|
||||||
|
_id: null,
|
||||||
|
usage: { $sum: '$length' }
|
||||||
|
}
|
||||||
|
}])
|
||||||
|
.then(aggregates => {
|
||||||
|
if (aggregates.length > 0) {
|
||||||
|
return aggregates[0].usage;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
|
||||||
|
await Stats.insert({
|
||||||
|
date: date,
|
||||||
|
span: 'hour',
|
||||||
|
users: {
|
||||||
|
local: {
|
||||||
|
total: localUsersCount,
|
||||||
|
diff: 0
|
||||||
|
},
|
||||||
|
remote: {
|
||||||
|
total: remoteUsersCount,
|
||||||
|
diff: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
notes: {
|
||||||
|
local: {
|
||||||
|
total: localNotesCount,
|
||||||
|
diff: 0,
|
||||||
|
diffs: {
|
||||||
|
normal: 0,
|
||||||
|
reply: 0,
|
||||||
|
renote: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
remote: {
|
||||||
|
total: remoteNotesCount,
|
||||||
|
diff: 0,
|
||||||
|
diffs: {
|
||||||
|
normal: 0,
|
||||||
|
reply: 0,
|
||||||
|
renote: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
drive: {
|
||||||
|
local: {
|
||||||
|
totalCount: localDriveFilesCount,
|
||||||
|
totalSize: localDriveFilesSize,
|
||||||
|
diffCount: 0,
|
||||||
|
diffSize: 0
|
||||||
|
},
|
||||||
|
remote: {
|
||||||
|
totalCount: remoteDriveFilesCount,
|
||||||
|
totalSize: remoteDriveFilesSize,
|
||||||
|
diffCount: 0,
|
||||||
|
diffSize: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('done');
|
||||||
|
}
|
||||||
|
|
||||||
|
main();
|
@ -1,3 +1,3 @@
|
|||||||
files:
|
files:
|
||||||
- source: /locales/ja.yml
|
- source: /locales/ja-JP.yml
|
||||||
translation: /locales/%two_letters_code%.yml
|
translation: /locales/%locale%.yml
|
||||||
|
@ -54,7 +54,7 @@ Please visit https://www.google.com/recaptcha/intro/ and generate keys.
|
|||||||
|
|
||||||
*(optional)* Generating VAPID keys
|
*(optional)* Generating VAPID keys
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
If you want to enable ServiceWroker, you need to generate VAPID keys:
|
If you want to enable ServiceWorker, you need to generate VAPID keys:
|
||||||
Unless you have set your global node_modules location elsewhere, you need to run this in root.
|
Unless you have set your global node_modules location elsewhere, you need to run this in root.
|
||||||
|
|
||||||
``` shell
|
``` shell
|
||||||
@ -131,6 +131,7 @@ You can check if the service is running with `systemctl status misskey`.
|
|||||||
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
|
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
|
||||||
3. `npm install`
|
3. `npm install`
|
||||||
4. `npm run build`
|
4. `npm run build`
|
||||||
|
5. Check [ChangeLog](../CHANGELOG.md) for migration information
|
||||||
|
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ Misskeyサーバーの構築にご関心をお寄せいただきありがとう
|
|||||||
|
|
||||||
*1.* Misskeyユーザーの作成
|
*1.* Misskeyユーザーの作成
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
Misskeyのrootで実行しない方がよいため、代わりにユーザーを作成します。
|
Misskeyはrootユーザーで実行しない方がよいため、代わりにユーザーを作成します。
|
||||||
Debianの例:
|
Debianの例:
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -109,6 +109,7 @@ Restart=always
|
|||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
```
|
```
|
||||||
|
CentOSで1024以下のポートを使用してMisskeyを使用する場合は`ExecStart=/usr/bin/sudo /usr/bin/npm start`に変更する必要があります。
|
||||||
|
|
||||||
3. `systemctl daemon-reload ; systemctl enable misskey` systemdを再読み込みしmisskeyサービスを有効化
|
3. `systemctl daemon-reload ; systemctl enable misskey` systemdを再読み込みしmisskeyサービスを有効化
|
||||||
4. `systemctl start misskey` misskeyサービスの起動
|
4. `systemctl start misskey` misskeyサービスの起動
|
||||||
@ -120,6 +121,7 @@ WantedBy=multi-user.target
|
|||||||
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
|
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
|
||||||
3. `npm install`
|
3. `npm install`
|
||||||
4. `npm run build`
|
4. `npm run build`
|
||||||
|
5. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する
|
||||||
|
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -11,12 +11,12 @@ If you find an untranslated part on Misskey:
|
|||||||
- In fact, `foo` should be a word that is appropriate for the situation and is easy to understand in English.
|
- In fact, `foo` should be a word that is appropriate for the situation and is easy to understand in English.
|
||||||
- For example, if the untranslated portion is the following "タイムライン" you must write: `%i18n:@timeline%`.
|
- For example, if the untranslated portion is the following "タイムライン" you must write: `%i18n:@timeline%`.
|
||||||
|
|
||||||
3. Open the `locales/ja.yml`, check whether the <strong>file name (path)</strong> found in step 1 exists, if not, create it.
|
3. Open the `locales/ja-JP.yml`, check whether the <strong>file name (path)</strong> found in step 1 exists, if not, create it.
|
||||||
- Do not put the beginning of the path `src/client/app/` in the locale file.
|
- Do not put the beginning of the path `src/client/app/` in the locale file.
|
||||||
- For example, in this case we want to modify untranslated parts of `src/client/app/mobile/views/pages/home.vue`, so the key is `mobile/views/pages/home.vue`.
|
- For example, in this case we want to modify untranslated parts of `src/client/app/mobile/views/pages/home.vue`, so the key is `mobile/views/pages/home.vue`.
|
||||||
|
|
||||||
4. Add the text property using the `foo` keyword below the path that you found or created in step 2. Make sure to type your text in quotation marks. Text should always be inside of quotes.
|
4. Add the text property using the `foo` keyword below the path that you found or created in step 2. Make sure to type your text in quotation marks. Text should always be inside of quotes.
|
||||||
- For example, in this case we add timeline: `timeline: "タイムライン"` to `locales/ja.yml`.
|
- For example, in this case we add timeline: `timeline: "タイムライン"` to `locales/ja-JP.yml`.
|
||||||
|
|
||||||
5. And done!
|
5. And done!
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ Si vous trouvez un segment non-traduit sur Misskey :
|
|||||||
- Par exemple, dans ce cas de figure, nous voulons modifier le segment non-traduit de : `src/client/app/mobile/views/pages/home.vue`donc il faut juste écrire : `mobile/views/pages/home.vue` dans les fichiers linguistiques.
|
- Par exemple, dans ce cas de figure, nous voulons modifier le segment non-traduit de : `src/client/app/mobile/views/pages/home.vue`donc il faut juste écrire : `mobile/views/pages/home.vue` dans les fichiers linguistiques.
|
||||||
|
|
||||||
4. Ajoutez la propriété du texte traduit grâce à la clef `foo`, en-dessous du chemin correspondant à votre modification que vous avez trouvé ou créé dans l'étape 2. À côté, veuillez indiquer entre "guillemets" la valeur de votre traduction.
|
4. Ajoutez la propriété du texte traduit grâce à la clef `foo`, en-dessous du chemin correspondant à votre modification que vous avez trouvé ou créé dans l'étape 2. À côté, veuillez indiquer entre "guillemets" la valeur de votre traduction.
|
||||||
- Par exemple, dans ce cas de figure, nous ajoutons la propriété et la traduction `timeline: "Timeline"` à `locales/fr.yml`, mais aussi la propriété et la version originale `timeline: "タイムライン"` à `locales/ja.yml`.
|
- Par exemple, dans ce cas de figure, nous ajoutons la propriété et la traduction `timeline: "Timeline"` à `locales/fr.yml`, mais aussi la propriété et la version originale `timeline: "タイムライン"` à `locales/ja-JP.yml`.
|
||||||
|
|
||||||
5. Vous avez réussi à traduire une portion de misskey !
|
5. Vous avez réussi à traduire une portion de misskey !
|
||||||
|
|
||||||
|
@ -11,12 +11,12 @@ Misskey内の未翻訳箇所を見つけたら
|
|||||||
- `foo`は実際にはその場に適したわかりやすい(英語の)名前にしてください。
|
- `foo`は実際にはその場に適したわかりやすい(英語の)名前にしてください。
|
||||||
- 例えば未翻訳箇所が「タイムライン」というテキストだった場合、`%i18n:@timeline%`のようにします。
|
- 例えば未翻訳箇所が「タイムライン」というテキストだった場合、`%i18n:@timeline%`のようにします。
|
||||||
|
|
||||||
3. `locales/ja.yml`を開き、1.で見つけた<strong>ファイル名(パス)</strong>のキーが存在するか確認し、無ければ作成してください。
|
3. `locales/ja-JP.yml`を開き、1.で見つけた<strong>ファイル名(パス)</strong>のキーが存在するか確認し、無ければ作成してください。
|
||||||
- パスの`src/client/app/`は省略してください。
|
- パスの`src/client/app/`は省略してください。
|
||||||
- 例えば、今回の例では`src/client/app/mobile/views/pages/home.vue`の未翻訳箇所を修正したいので、キーは`mobile/views/pages/home.vue`になります。
|
- 例えば、今回の例では`src/client/app/mobile/views/pages/home.vue`の未翻訳箇所を修正したいので、キーは`mobile/views/pages/home.vue`になります。
|
||||||
|
|
||||||
4. そのキーの直下に2.で置換した`foo`の部分をキーとし、テキストを値とするプロパティを追加します。
|
4. そのキーの直下に2.で置換した`foo`の部分をキーとし、テキストを値とするプロパティを追加します。
|
||||||
- 例えば、今回の例で言うと`locales/ja.yml`に`timeline: "タイムライン"`を追加します。
|
- 例えば、今回の例で言うと`locales/ja-JP.yml`に`timeline: "タイムライン"`を追加します。
|
||||||
|
|
||||||
5. 完了です!
|
5. 完了です!
|
||||||
|
|
||||||
|
13
gulpfile.ts
13
gulpfile.ts
@ -23,7 +23,6 @@ const uglifyes = require('uglify-es');
|
|||||||
|
|
||||||
const locales = require('./locales');
|
const locales = require('./locales');
|
||||||
import { fa } from './src/misc/fa';
|
import { fa } from './src/misc/fa';
|
||||||
import config from './src/config';
|
|
||||||
|
|
||||||
const uglify = uglifyComposer(uglifyes, console);
|
const uglify = uglifyComposer(uglifyes, console);
|
||||||
|
|
||||||
@ -60,7 +59,16 @@ gulp.task('build:copy:views', () =>
|
|||||||
gulp.src('./src/server/web/views/**/*').pipe(gulp.dest('./built/server/web/views'))
|
gulp.src('./src/server/web/views/**/*').pipe(gulp.dest('./built/server/web/views'))
|
||||||
);
|
);
|
||||||
|
|
||||||
gulp.task('build:copy', ['build:copy:views'], () =>
|
// 互換性のため
|
||||||
|
gulp.task('build:copy:lang', () =>
|
||||||
|
gulp.src(['./built/client/assets/*.*-*.js'])
|
||||||
|
.pipe(rename(path => {
|
||||||
|
path.basename = path.basename.replace(/\-(.*)$/, '');
|
||||||
|
}))
|
||||||
|
.pipe(gulp.dest('./built/client/assets/'))
|
||||||
|
);
|
||||||
|
|
||||||
|
gulp.task('build:copy', ['build:copy:views', 'build:copy:lang'], () =>
|
||||||
gulp.src([
|
gulp.src([
|
||||||
'./build/Release/crypto_key.node',
|
'./build/Release/crypto_key.node',
|
||||||
'./src/const.json',
|
'./src/const.json',
|
||||||
@ -118,7 +126,6 @@ gulp.task('build:client:script', () => {
|
|||||||
const client = require('./built/client/meta.json');
|
const client = require('./built/client/meta.json');
|
||||||
return gulp.src(['./src/client/app/boot.js', './src/client/app/safe.js'])
|
return gulp.src(['./src/client/app/boot.js', './src/client/app/safe.js'])
|
||||||
.pipe(replace('VERSION', JSON.stringify(client.version)))
|
.pipe(replace('VERSION', JSON.stringify(client.version)))
|
||||||
.pipe(replace('API', JSON.stringify(config.api_url)))
|
|
||||||
.pipe(replace('ENV', JSON.stringify(env)))
|
.pipe(replace('ENV', JSON.stringify(env)))
|
||||||
.pipe(replace('LANGS', JSON.stringify(Object.keys(locales))))
|
.pipe(replace('LANGS', JSON.stringify(Object.keys(locales))))
|
||||||
.pipe(isProduction ? uglify({
|
.pipe(isProduction ? uglify({
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
# **Please DO NOT edit these files** except `ja.yml`.
|
# **DO NOT edit locale files** except `ja-JP.yml`.
|
||||||
|
|
||||||
If you want to...
|
Please see [Contribution guide](../CONTRIBUTING.md) for more information.
|
||||||
* i18n ... please see [Translation guide](../docs/translate.en.md).
|
|
||||||
* l10n ... please visit https://crowdin.com/project/misskey
|
|
||||||
|
@ -6,6 +6,19 @@ common:
|
|||||||
misskey: "A ⭐ of fediverse"
|
misskey: "A ⭐ of fediverse"
|
||||||
about-title: "A ⭐ of fediverse."
|
about-title: "A ⭐ of fediverse."
|
||||||
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
||||||
|
intro:
|
||||||
|
title: "Misskeyって?"
|
||||||
|
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
|
||||||
|
features: "特徴"
|
||||||
|
rich-contents: "投稿"
|
||||||
|
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
|
||||||
|
reaction: "リアクション"
|
||||||
|
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
|
||||||
|
ui: "インターフェース"
|
||||||
|
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
|
||||||
|
drive: "ドライブ"
|
||||||
|
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
|
||||||
|
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
|
||||||
adblock:
|
adblock:
|
||||||
detected: "広告ブロッカーを無効にしてください"
|
detected: "広告ブロッカーを無効にしてください"
|
||||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
@ -68,6 +81,15 @@ common:
|
|||||||
confused: "こまこまのこまり"
|
confused: "こまこまのこまり"
|
||||||
rip: "RIP"
|
rip: "RIP"
|
||||||
pudding: "Pudding"
|
pudding: "Pudding"
|
||||||
|
note-visibility:
|
||||||
|
public: "公開"
|
||||||
|
home: "ホーム"
|
||||||
|
home-desc: "ホームタイムラインにのみ公開"
|
||||||
|
followers: "フォロワー"
|
||||||
|
followers-desc: "自分のフォロワーにのみ公開"
|
||||||
|
specified: "ダイレクト"
|
||||||
|
specified-desc: "指定したユーザーにのみ公開"
|
||||||
|
private: "非公開"
|
||||||
note-placeholders:
|
note-placeholders:
|
||||||
a: "今どうしてる?"
|
a: "今どうしてる?"
|
||||||
b: "何かありましたか?"
|
b: "何かありましたか?"
|
||||||
@ -84,8 +106,10 @@ common:
|
|||||||
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
||||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||||
|
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||||
verified-user: "公式アカウント"
|
verified-user: "公式アカウント"
|
||||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||||
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@ -259,6 +283,8 @@ common/views/components/nav.vue:
|
|||||||
develop: "開発者"
|
develop: "開発者"
|
||||||
feedback: "フィードバック"
|
feedback: "フィードバック"
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
|
detail: "詳細"
|
||||||
|
copy-link: "リンクをコピー"
|
||||||
favorite: "お気に入り"
|
favorite: "お気に入り"
|
||||||
pin: "ピン留め"
|
pin: "ピン留め"
|
||||||
delete: "削除"
|
delete: "削除"
|
||||||
@ -336,6 +362,9 @@ common/views/components/visibility-chooser.vue:
|
|||||||
specified: "ダイレクト"
|
specified: "ダイレクト"
|
||||||
specified-desc: "指定したユーザーにのみ公開"
|
specified-desc: "指定したユーザーにのみ公開"
|
||||||
private: "非公開"
|
private: "非公開"
|
||||||
|
common/views/components/trends.vue:
|
||||||
|
count: "{}人が投稿"
|
||||||
|
empty: "トレンドなし"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "確認中"
|
fetching: "確認中"
|
||||||
no-broadcasts: "お知らせはありません"
|
no-broadcasts: "お知らせはありません"
|
||||||
@ -359,8 +388,6 @@ common/views/widgets/posts-monitor.vue:
|
|||||||
toggle: "表示を切り替え"
|
toggle: "表示を切り替え"
|
||||||
common/views/widgets/hashtags.vue:
|
common/views/widgets/hashtags.vue:
|
||||||
title: "ハッシュタグ"
|
title: "ハッシュタグ"
|
||||||
count: "{}人が投稿"
|
|
||||||
empty: "トレンドなし"
|
|
||||||
common/views/widgets/server.vue:
|
common/views/widgets/server.vue:
|
||||||
title: "サーバー情報"
|
title: "サーバー情報"
|
||||||
toggle: "表示を切り替え"
|
toggle: "表示を切り替え"
|
||||||
@ -410,6 +437,7 @@ desktop:
|
|||||||
uploading-avatar: "新しいアバターをアップロードしています"
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
avatar-updated: "アバターを更新しました"
|
avatar-updated: "アバターを更新しました"
|
||||||
choose-avatar: "アバターにする画像を選択"
|
choose-avatar: "アバターにする画像を選択"
|
||||||
|
invalid-filetype: "この形式のファイルはサポートされていません"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
@ -423,6 +451,24 @@ desktop/views/components/calendar.vue:
|
|||||||
prev: "前の月"
|
prev: "前の月"
|
||||||
next: "次の月"
|
next: "次の月"
|
||||||
go: "クリックして時間遡行"
|
go: "クリックして時間遡行"
|
||||||
|
desktop/views/components/charts.vue:
|
||||||
|
title: "チャート"
|
||||||
|
per-day: "1日ごと"
|
||||||
|
per-hour: "1時間ごと"
|
||||||
|
notes: "投稿"
|
||||||
|
users: "ユーザー"
|
||||||
|
drive: "ドライブ"
|
||||||
|
charts:
|
||||||
|
notes: "投稿の増減 (統合)"
|
||||||
|
local-notes: "投稿の増減 (ローカル)"
|
||||||
|
remote-notes: "投稿の増減 (リモート)"
|
||||||
|
notes-total: "投稿の累計"
|
||||||
|
users: "ユーザーの増減"
|
||||||
|
users-total: "ユーザーの累計"
|
||||||
|
drive: "ドライブ使用量の増減"
|
||||||
|
drive-total: "ドライブ使用量の累計"
|
||||||
|
drive-files: "ドライブのファイル数の増減"
|
||||||
|
drive-files-total: "ドライブのファイル数の累計"
|
||||||
desktop/views/components/choose-file-from-drive-window.vue:
|
desktop/views/components/choose-file-from-drive-window.vue:
|
||||||
choose-file: "ファイル選択中"
|
choose-file: "ファイル選択中"
|
||||||
upload: "PCからドライブにファイルをアップロード"
|
upload: "PCからドライブにファイルをアップロード"
|
||||||
@ -616,6 +662,9 @@ desktop/views/components/settings.vue:
|
|||||||
behaviour: "動作"
|
behaviour: "動作"
|
||||||
fetch-on-scroll: "スクロールで自動読み込み"
|
fetch-on-scroll: "スクロールで自動読み込み"
|
||||||
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
|
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
auto-popout: "ウィンドウの自動ポップアウト"
|
auto-popout: "ウィンドウの自動ポップアウト"
|
||||||
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
||||||
advanced: "詳細設定"
|
advanced: "詳細設定"
|
||||||
@ -627,9 +676,11 @@ desktop/views/components/settings.vue:
|
|||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
circle-icons: "円形のアイコンを使用"
|
circle-icons: "円形のアイコンを使用"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
|
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
|
||||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
@ -754,6 +805,7 @@ desktop/views/components/ui.header.account.vue:
|
|||||||
lists: "リスト"
|
lists: "リスト"
|
||||||
follow-requests: "フォロー申請"
|
follow-requests: "フォロー申請"
|
||||||
customize: "ホームのカスタマイズ"
|
customize: "ホームのカスタマイズ"
|
||||||
|
admin: "管理"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
dark: "闇に飲まれる"
|
dark: "闇に飲まれる"
|
||||||
@ -799,8 +851,8 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
all-notes: "全てのノート"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスのノート"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
@ -818,18 +870,6 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
desktop/views/pages/admin/admin.notes-chart.vue:
|
|
||||||
title: "投稿"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.users-chart.vue:
|
|
||||||
title: "ユーザー"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.drive-chart.vue:
|
|
||||||
title: "ドライブ"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
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: "メディアビュー"
|
||||||
@ -838,6 +878,11 @@ desktop/views/pages/deck/deck.note.vue:
|
|||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
|
desktop/views/pages/stats/stats.vue:
|
||||||
|
all-users: "全てのユーザー"
|
||||||
|
original-users: "このインスタンスのユーザー"
|
||||||
|
all-notes: "全ての投稿"
|
||||||
|
original-notes: "このインスタンスの投稿"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "詳しく..."
|
about: "詳しく..."
|
||||||
gotit: "わかった"
|
gotit: "わかった"
|
||||||
@ -846,7 +891,10 @@ desktop/views/pages/welcome.vue:
|
|||||||
signin-button: "やってる"
|
signin-button: "やってる"
|
||||||
signup-button: "やる"
|
signup-button: "やる"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
photos: "最近の画像"
|
||||||
powered-by-misskey: "Powered by <b>Misskey</b>."
|
powered-by-misskey: "Powered by <b>Misskey</b>."
|
||||||
|
info: "情報"
|
||||||
desktop/views/pages/drive.vue:
|
desktop/views/pages/drive.vue:
|
||||||
title: "Misskey Drive"
|
title: "Misskey Drive"
|
||||||
desktop/views/pages/favorites.vue:
|
desktop/views/pages/favorites.vue:
|
||||||
@ -1044,6 +1092,7 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "ゲーム"
|
game: "ゲーム"
|
||||||
darkmode: "ダークモード"
|
darkmode: "ダークモード"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
|
admin: "管理"
|
||||||
about: "Misskeyについて"
|
about: "Misskeyについて"
|
||||||
mobile/views/components/user-timeline.vue:
|
mobile/views/components/user-timeline.vue:
|
||||||
no-notes: "このユーザーは投稿していないようです。"
|
no-notes: "このユーザーは投稿していないようです。"
|
||||||
@ -1133,6 +1182,7 @@ mobile/views/pages/settings.vue:
|
|||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
i-am-under-limited-internet: "私は通信を制限されている"
|
i-am-under-limited-internet: "私は通信を制限されている"
|
||||||
circle-icons: "円形のアイコンを使用"
|
circle-icons: "円形のアイコンを使用"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||||
@ -1141,8 +1191,14 @@ mobile/views/pages/settings.vue:
|
|||||||
post-style: "投稿の表示スタイル"
|
post-style: "投稿の表示スタイル"
|
||||||
post-style-standard: "標準"
|
post-style-standard: "標準"
|
||||||
post-style-smart: "スマート"
|
post-style-smart: "スマート"
|
||||||
|
notification-position: "通知の表示"
|
||||||
|
notification-position-bottom: "下"
|
||||||
|
notification-position-top: "上"
|
||||||
behavior: "動作"
|
behavior: "動作"
|
||||||
fetch-on-scroll: "スクロールで自動読み込み"
|
fetch-on-scroll: "スクロールで自動読み込み"
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||||
load-raw-images: "添付された画像を高画質で表示する"
|
load-raw-images: "添付された画像を高画質で表示する"
|
||||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||||
@ -1161,6 +1217,8 @@ mobile/views/pages/settings.vue:
|
|||||||
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
|
sound: "サウンド"
|
||||||
|
enable-sounds: "サウンドを有効にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
@ -6,6 +6,19 @@ common:
|
|||||||
misskey: "A ⭐ of fediverse"
|
misskey: "A ⭐ of fediverse"
|
||||||
about-title: "A ⭐ of fediverse."
|
about-title: "A ⭐ of fediverse."
|
||||||
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
||||||
|
intro:
|
||||||
|
title: "Misskeyって?"
|
||||||
|
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
|
||||||
|
features: "特徴"
|
||||||
|
rich-contents: "投稿"
|
||||||
|
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
|
||||||
|
reaction: "リアクション"
|
||||||
|
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
|
||||||
|
ui: "インターフェース"
|
||||||
|
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
|
||||||
|
drive: "ドライブ"
|
||||||
|
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
|
||||||
|
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
|
||||||
adblock:
|
adblock:
|
||||||
detected: "広告ブロッカーを無効にしてください"
|
detected: "広告ブロッカーを無効にしてください"
|
||||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
@ -58,7 +71,7 @@ common:
|
|||||||
friday: "金曜日"
|
friday: "金曜日"
|
||||||
saturday: "土曜日"
|
saturday: "土曜日"
|
||||||
reactions:
|
reactions:
|
||||||
like: "Gefällt mir"
|
like: "いいね"
|
||||||
love: "Lieben"
|
love: "Lieben"
|
||||||
laugh: "Lachen"
|
laugh: "Lachen"
|
||||||
hmm: "Hmm...?"
|
hmm: "Hmm...?"
|
||||||
@ -68,6 +81,15 @@ common:
|
|||||||
confused: "Verwirrt"
|
confused: "Verwirrt"
|
||||||
rip: "RIP"
|
rip: "RIP"
|
||||||
pudding: "Pudding"
|
pudding: "Pudding"
|
||||||
|
note-visibility:
|
||||||
|
public: "公開"
|
||||||
|
home: "ホーム"
|
||||||
|
home-desc: "ホームタイムラインにのみ公開"
|
||||||
|
followers: "フォロワー"
|
||||||
|
followers-desc: "自分のフォロワーにのみ公開"
|
||||||
|
specified: "ダイレクト"
|
||||||
|
specified-desc: "指定したユーザーにのみ公開"
|
||||||
|
private: "非公開"
|
||||||
note-placeholders:
|
note-placeholders:
|
||||||
a: "Was machst du gerade?"
|
a: "Was machst du gerade?"
|
||||||
b: "Was ist so passiert?"
|
b: "Was ist so passiert?"
|
||||||
@ -84,8 +106,10 @@ common:
|
|||||||
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: "私は(プリンよりむしろ)寿司が好き"
|
||||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||||
|
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||||
verified-user: "公式アカウント"
|
verified-user: "公式アカウント"
|
||||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||||
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@ -259,6 +283,8 @@ common/views/components/nav.vue:
|
|||||||
develop: "Entwickler"
|
develop: "Entwickler"
|
||||||
feedback: "Feedback"
|
feedback: "Feedback"
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
|
detail: "詳細"
|
||||||
|
copy-link: "リンクをコピー"
|
||||||
favorite: "Diese Anmerkung favorisieren"
|
favorite: "Diese Anmerkung favorisieren"
|
||||||
pin: "An die Profilseite pinnen"
|
pin: "An die Profilseite pinnen"
|
||||||
delete: "Löschen"
|
delete: "Löschen"
|
||||||
@ -336,6 +362,9 @@ common/views/components/visibility-chooser.vue:
|
|||||||
specified: "Direkt"
|
specified: "Direkt"
|
||||||
specified-desc: "Poste nur für bestimmte Benutzer"
|
specified-desc: "Poste nur für bestimmte Benutzer"
|
||||||
private: "Privat"
|
private: "Privat"
|
||||||
|
common/views/components/trends.vue:
|
||||||
|
count: "{}人が投稿"
|
||||||
|
empty: "トレンドなし"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Laden"
|
fetching: "Laden"
|
||||||
no-broadcasts: "Keine Broadcasts"
|
no-broadcasts: "Keine Broadcasts"
|
||||||
@ -359,8 +388,6 @@ common/views/widgets/posts-monitor.vue:
|
|||||||
toggle: "表示を切り替え"
|
toggle: "表示を切り替え"
|
||||||
common/views/widgets/hashtags.vue:
|
common/views/widgets/hashtags.vue:
|
||||||
title: "ハッシュタグ"
|
title: "ハッシュタグ"
|
||||||
count: "{}人が投稿"
|
|
||||||
empty: "トレンドなし"
|
|
||||||
common/views/widgets/server.vue:
|
common/views/widgets/server.vue:
|
||||||
title: "Serverinformationen"
|
title: "Serverinformationen"
|
||||||
toggle: "Sicht umschalten"
|
toggle: "Sicht umschalten"
|
||||||
@ -410,6 +437,7 @@ desktop:
|
|||||||
uploading-avatar: "新しいアバターをアップロードしています"
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
avatar-updated: "アバターを更新しました"
|
avatar-updated: "アバターを更新しました"
|
||||||
choose-avatar: "アバターにする画像を選択"
|
choose-avatar: "アバターにする画像を選択"
|
||||||
|
invalid-filetype: "この形式のファイルはサポートされていません"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Schwarz ... komplett"
|
total: "Schwarz ... komplett"
|
||||||
notes: "Blau ... Hinweise"
|
notes: "Blau ... Hinweise"
|
||||||
@ -423,6 +451,24 @@ desktop/views/components/calendar.vue:
|
|||||||
prev: "Vorheriger Monat"
|
prev: "Vorheriger Monat"
|
||||||
next: "Nächster Monat"
|
next: "Nächster Monat"
|
||||||
go: "Klicke zur Navigation"
|
go: "Klicke zur Navigation"
|
||||||
|
desktop/views/components/charts.vue:
|
||||||
|
title: "チャート"
|
||||||
|
per-day: "1日ごと"
|
||||||
|
per-hour: "1時間ごと"
|
||||||
|
notes: "投稿"
|
||||||
|
users: "ユーザー"
|
||||||
|
drive: "ドライブ"
|
||||||
|
charts:
|
||||||
|
notes: "投稿の増減 (統合)"
|
||||||
|
local-notes: "投稿の増減 (ローカル)"
|
||||||
|
remote-notes: "投稿の増減 (リモート)"
|
||||||
|
notes-total: "投稿の累計"
|
||||||
|
users: "ユーザーの増減"
|
||||||
|
users-total: "ユーザーの累計"
|
||||||
|
drive: "ドライブ使用量の増減"
|
||||||
|
drive-total: "ドライブ使用量の累計"
|
||||||
|
drive-files: "ドライブのファイル数の増減"
|
||||||
|
drive-files-total: "ドライブのファイル数の累計"
|
||||||
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"
|
||||||
@ -443,6 +489,7 @@ desktop/views/components/drive-window.vue:
|
|||||||
desktop/views/components/drive.file.vue:
|
desktop/views/components/drive.file.vue:
|
||||||
avatar: "Avatar"
|
avatar: "Avatar"
|
||||||
banner: "Banner"
|
banner: "Banner"
|
||||||
|
nsfw: "閲覧注意"
|
||||||
contextmenu:
|
contextmenu:
|
||||||
rename: "Umbenennen"
|
rename: "Umbenennen"
|
||||||
mark-as-sensitive: "閲覧注意に設定"
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
@ -615,6 +662,9 @@ desktop/views/components/settings.vue:
|
|||||||
behaviour: "Verhalten"
|
behaviour: "Verhalten"
|
||||||
fetch-on-scroll: "Aktualisieren beim scrollen"
|
fetch-on-scroll: "Aktualisieren beim scrollen"
|
||||||
fetch-on-scroll-desc: "Wenn du runterscrollst empfängt die Seite automatisch zusätzliche Inhalte."
|
fetch-on-scroll-desc: "Wenn du runterscrollst empfängt die Seite automatisch zusätzliche Inhalte."
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
auto-popout: "Automatische Pop-out Fenster"
|
auto-popout: "Automatische Pop-out Fenster"
|
||||||
auto-popout-desc: "Pop-out ein offenes Fenster wenn möglich. Diese Einstellung wird im Browser gespeichert."
|
auto-popout-desc: "Pop-out ein offenes Fenster wenn möglich. Diese Einstellung wird im Browser gespeichert."
|
||||||
advanced: "Erweiterte Einstellungen"
|
advanced: "Erweiterte Einstellungen"
|
||||||
@ -626,9 +676,11 @@ desktop/views/components/settings.vue:
|
|||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "Nacht Modus"
|
dark-mode: "Nacht Modus"
|
||||||
circle-icons: "Kreisförmige Icons"
|
circle-icons: "Kreisförmige Icons"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
gradient-window-header: "Übergang in Fensterköpfen"
|
gradient-window-header: "Übergang in Fensterköpfen"
|
||||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "Zeige Antworten"
|
show-reply-target: "Zeige Antworten"
|
||||||
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をタイムラインに表示する"
|
||||||
@ -753,6 +805,7 @@ desktop/views/components/ui.header.account.vue:
|
|||||||
lists: "Listen"
|
lists: "Listen"
|
||||||
follow-requests: "フォロー申請"
|
follow-requests: "フォロー申請"
|
||||||
customize: "ホームのカスタマイズ"
|
customize: "ホームのカスタマイズ"
|
||||||
|
admin: "管理"
|
||||||
settings: "Einstellungen"
|
settings: "Einstellungen"
|
||||||
signout: "Ausloggen"
|
signout: "Ausloggen"
|
||||||
dark: "Verdunkeln"
|
dark: "Verdunkeln"
|
||||||
@ -798,8 +851,8 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
all-notes: "全てのノート"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスのノート"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
@ -817,18 +870,6 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
desktop/views/pages/admin/admin.notes-chart.vue:
|
|
||||||
title: "投稿"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.users-chart.vue:
|
|
||||||
title: "ユーザー"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.drive-chart.vue:
|
|
||||||
title: "ドライブ"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
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: "メディアビュー"
|
||||||
@ -837,6 +878,11 @@ desktop/views/pages/deck/deck.note.vue:
|
|||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
|
desktop/views/pages/stats/stats.vue:
|
||||||
|
all-users: "全てのユーザー"
|
||||||
|
original-users: "このインスタンスのユーザー"
|
||||||
|
all-notes: "全ての投稿"
|
||||||
|
original-notes: "このインスタンスの投稿"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "詳しく..."
|
about: "詳しく..."
|
||||||
gotit: "わかった"
|
gotit: "わかった"
|
||||||
@ -845,7 +891,10 @@ desktop/views/pages/welcome.vue:
|
|||||||
signin-button: "やってる"
|
signin-button: "やってる"
|
||||||
signup-button: "やる"
|
signup-button: "やる"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
photos: "最近の画像"
|
||||||
powered-by-misskey: "Powered by <b>Misskey</b>."
|
powered-by-misskey: "Powered by <b>Misskey</b>."
|
||||||
|
info: "情報"
|
||||||
desktop/views/pages/drive.vue:
|
desktop/views/pages/drive.vue:
|
||||||
title: "Misskey Drive"
|
title: "Misskey Drive"
|
||||||
desktop/views/pages/favorites.vue:
|
desktop/views/pages/favorites.vue:
|
||||||
@ -954,12 +1003,15 @@ mobile/views/components/drive-file-chooser.vue:
|
|||||||
select-file: "ファイルを選択"
|
select-file: "ファイルを選択"
|
||||||
mobile/views/components/drive-folder-chooser.vue:
|
mobile/views/components/drive-folder-chooser.vue:
|
||||||
select-folder: "フォルダーを選択"
|
select-folder: "フォルダーを選択"
|
||||||
|
mobile/views/components/drive.file.vue:
|
||||||
|
nsfw: "閲覧注意"
|
||||||
mobile/views/components/drive.file-detail.vue:
|
mobile/views/components/drive.file-detail.vue:
|
||||||
download: "ダウンロード"
|
download: "ダウンロード"
|
||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
move: "移動"
|
move: "移動"
|
||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
|
nsfw: "閲覧注意"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@ -1040,6 +1092,7 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "ゲーム"
|
game: "ゲーム"
|
||||||
darkmode: "ダークモード"
|
darkmode: "ダークモード"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
|
admin: "管理"
|
||||||
about: "Misskeyについて"
|
about: "Misskeyについて"
|
||||||
mobile/views/components/user-timeline.vue:
|
mobile/views/components/user-timeline.vue:
|
||||||
no-notes: "このユーザーは投稿していないようです。"
|
no-notes: "このユーザーは投稿していないようです。"
|
||||||
@ -1129,6 +1182,7 @@ mobile/views/pages/settings.vue:
|
|||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
i-am-under-limited-internet: "私は通信を制限されている"
|
i-am-under-limited-internet: "私は通信を制限されている"
|
||||||
circle-icons: "円形のアイコンを使用"
|
circle-icons: "円形のアイコンを使用"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||||
@ -1137,8 +1191,14 @@ mobile/views/pages/settings.vue:
|
|||||||
post-style: "投稿の表示スタイル"
|
post-style: "投稿の表示スタイル"
|
||||||
post-style-standard: "標準"
|
post-style-standard: "標準"
|
||||||
post-style-smart: "スマート"
|
post-style-smart: "スマート"
|
||||||
|
notification-position: "通知の表示"
|
||||||
|
notification-position-bottom: "下"
|
||||||
|
notification-position-top: "上"
|
||||||
behavior: "動作"
|
behavior: "動作"
|
||||||
fetch-on-scroll: "スクロールで自動読み込み"
|
fetch-on-scroll: "スクロールで自動読み込み"
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||||
load-raw-images: "添付された画像を高画質で表示する"
|
load-raw-images: "添付された画像を高画質で表示する"
|
||||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||||
@ -1157,6 +1217,8 @@ mobile/views/pages/settings.vue:
|
|||||||
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
|
sound: "サウンド"
|
||||||
|
enable-sounds: "サウンドを有効にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
@ -6,6 +6,19 @@ common:
|
|||||||
misskey: "A ⭐ of the fediverse"
|
misskey: "A ⭐ of the fediverse"
|
||||||
about-title: "A ⭐ of the fediverse."
|
about-title: "A ⭐ of the fediverse."
|
||||||
about: "Thank you for finding Misskey. Misskey is a <b>decentralized microblogging platform</b> born on Earth. Since it exists within the Fediverse (a universe where various social media platforms are organized), it is mutually linked with other social media platforms. Why don't you take a short break from the hustle and bustle of the city, and dive into a new Internet?"
|
about: "Thank you for finding Misskey. Misskey is a <b>decentralized microblogging platform</b> born on Earth. Since it exists within the Fediverse (a universe where various social media platforms are organized), it is mutually linked with other social media platforms. Why don't you take a short break from the hustle and bustle of the city, and dive into a new Internet?"
|
||||||
|
intro:
|
||||||
|
title: "What is Misskey?"
|
||||||
|
about: "Misskey is a open-source <b>decentralized microblogging service</b>. Sophisticated fully customizable Ui, varieties of reaction for posts, free file storage providing integrated management system and other advancing functions are available. Also, network system called “Fediverse” enables us to communicate with users on other SNSs. Like, if you post something, then your posts will sent not only to Misskey but also mastodon. Just imagine that the planet is sending a microwave to other planet to communication."
|
||||||
|
features: "Features"
|
||||||
|
rich-contents: "Post"
|
||||||
|
rich-contents-desc: "Just post your idea, hot topics and anything you want to share. You may want to decorate your words, attach your favorite pictures, send files including movies and create a poll - those are the things you can do on Misskey!"
|
||||||
|
reaction: "Reactions"
|
||||||
|
reaction-desc: "Easiest way to tell your emotions. Misskey allows you to add various type of reactions to other’s post. The emotional experience on Misskey will never be on other SNSs which only able to push “likes”."
|
||||||
|
ui: "Interface"
|
||||||
|
ui-desc: "No UI fits for everyone. Therefore, Misskey has a highly customizable UI for your taste. You can edit layouts of your timeline, place selectable widgets you can easily move and create your unique home as this place will be your home."
|
||||||
|
drive: "Misskey Drive"
|
||||||
|
drive-desc: "Wanna post a picture you have already uploaded? Wish to organize, name and create a folder for your uploaded files? Misskey Drive is the best solution for you. Very easy to share your files online."
|
||||||
|
outro: "Check further Misskey-unique features on your eyes! Feeling like this is not for you, try other instances as Misskey is a decentralized SNS so that you can easily find your mates. Then, GLHF!"
|
||||||
adblock:
|
adblock:
|
||||||
detected: "Please disable ad blocker."
|
detected: "Please disable ad blocker."
|
||||||
warning: "Some features may be unavailable or cause malfunctions if ad blocking features are enabled. <strong>Misskey is not running ads</strong>."
|
warning: "Some features may be unavailable or cause malfunctions if ad blocking features are enabled. <strong>Misskey is not running ads</strong>."
|
||||||
@ -68,6 +81,15 @@ common:
|
|||||||
confused: "Confused"
|
confused: "Confused"
|
||||||
rip: "RIP"
|
rip: "RIP"
|
||||||
pudding: "Pudding"
|
pudding: "Pudding"
|
||||||
|
note-visibility:
|
||||||
|
public: "Public"
|
||||||
|
home: "Home"
|
||||||
|
home-desc: "Post to the home timeline only"
|
||||||
|
followers: "Followers"
|
||||||
|
followers-desc: "Post to followers only"
|
||||||
|
specified: "Direct"
|
||||||
|
specified-desc: "Post to specified users only"
|
||||||
|
private: "Private"
|
||||||
note-placeholders:
|
note-placeholders:
|
||||||
a: "What are you doing?"
|
a: "What are you doing?"
|
||||||
b: "What's happening?"
|
b: "What's happening?"
|
||||||
@ -84,8 +106,10 @@ common:
|
|||||||
my-token-regenerated: "Your token has been regenerated, so you will be signed out."
|
my-token-regenerated: "Your token has been regenerated, so you will be signed out."
|
||||||
i-like-sushi: "I prefer sushi rather than pudding"
|
i-like-sushi: "I prefer sushi rather than pudding"
|
||||||
show-reversi-board-labels: "Show row and column labels in Reversi"
|
show-reversi-board-labels: "Show row and column labels in Reversi"
|
||||||
|
use-contrast-reversi-stones: "Make the stone color clear in reversi"
|
||||||
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"
|
||||||
|
do-not-use-in-production: 'As this is for development, do not use this in production.'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "Draw"
|
drawn: "Draw"
|
||||||
my-turn: "Your turn"
|
my-turn: "Your turn"
|
||||||
@ -259,6 +283,8 @@ common/views/components/nav.vue:
|
|||||||
develop: "Developers"
|
develop: "Developers"
|
||||||
feedback: "Feedback"
|
feedback: "Feedback"
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
|
detail: "Details"
|
||||||
|
copy-link: "Copy link"
|
||||||
favorite: "Favorite this note"
|
favorite: "Favorite this note"
|
||||||
pin: "Pin to your profile"
|
pin: "Pin to your profile"
|
||||||
delete: "Delete"
|
delete: "Delete"
|
||||||
@ -336,6 +362,9 @@ common/views/components/visibility-chooser.vue:
|
|||||||
specified: "Direct"
|
specified: "Direct"
|
||||||
specified-desc: "Post to specified users only"
|
specified-desc: "Post to specified users only"
|
||||||
private: "Private"
|
private: "Private"
|
||||||
|
common/views/components/trends.vue:
|
||||||
|
count: "{} users mentioned"
|
||||||
|
empty: "No popular hashtag trends"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Fetching"
|
fetching: "Fetching"
|
||||||
no-broadcasts: "No announcements"
|
no-broadcasts: "No announcements"
|
||||||
@ -359,8 +388,6 @@ common/views/widgets/posts-monitor.vue:
|
|||||||
toggle: "Toggle views"
|
toggle: "Toggle views"
|
||||||
common/views/widgets/hashtags.vue:
|
common/views/widgets/hashtags.vue:
|
||||||
title: "Hashtags"
|
title: "Hashtags"
|
||||||
count: "{} users mentioned"
|
|
||||||
empty: "No popular hashtag trends"
|
|
||||||
common/views/widgets/server.vue:
|
common/views/widgets/server.vue:
|
||||||
title: "Server info"
|
title: "Server info"
|
||||||
toggle: "Toggle views"
|
toggle: "Toggle views"
|
||||||
@ -410,6 +437,7 @@ desktop:
|
|||||||
uploading-avatar: "Uploading a new avatar"
|
uploading-avatar: "Uploading a new avatar"
|
||||||
avatar-updated: "Successfully updated the avatar"
|
avatar-updated: "Successfully updated the avatar"
|
||||||
choose-avatar: "Select an image for the avatar"
|
choose-avatar: "Select an image for the avatar"
|
||||||
|
invalid-filetype: "This filetype is not acceptable here"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
@ -423,6 +451,24 @@ desktop/views/components/calendar.vue:
|
|||||||
prev: "Previous month"
|
prev: "Previous month"
|
||||||
next: "Next month"
|
next: "Next month"
|
||||||
go: "Click to navigate"
|
go: "Click to navigate"
|
||||||
|
desktop/views/components/charts.vue:
|
||||||
|
title: "Charts"
|
||||||
|
per-day: "per Day"
|
||||||
|
per-hour: "per Hour"
|
||||||
|
notes: "Posts"
|
||||||
|
users: "Users"
|
||||||
|
drive: "Drive"
|
||||||
|
charts:
|
||||||
|
notes: "The number of posts: increase/decrease (Combined)"
|
||||||
|
local-notes: "The number of posts: increase/decrease (Local)"
|
||||||
|
remote-notes: "The number of posts: increase/decrease (Remote)"
|
||||||
|
notes-total: "The number of posts: cumulative total"
|
||||||
|
users: "The number of users: increase/decrease"
|
||||||
|
users-total: "The number of users: cumulative total"
|
||||||
|
drive: "Capacity used as the storage: increase/decrease"
|
||||||
|
drive-total: "Capacity used as the storage: cumulative total"
|
||||||
|
drive-files: "The number of files on the storage: increase/decrease"
|
||||||
|
drive-files-total: "The number of files on the storage: cumulative total"
|
||||||
desktop/views/components/choose-file-from-drive-window.vue:
|
desktop/views/components/choose-file-from-drive-window.vue:
|
||||||
choose-file: "Choose files"
|
choose-file: "Choose files"
|
||||||
upload: "Upload files from your device"
|
upload: "Upload files from your device"
|
||||||
@ -443,6 +489,7 @@ desktop/views/components/drive-window.vue:
|
|||||||
desktop/views/components/drive.file.vue:
|
desktop/views/components/drive.file.vue:
|
||||||
avatar: "Avatar"
|
avatar: "Avatar"
|
||||||
banner: "Banner"
|
banner: "Banner"
|
||||||
|
nsfw: "NSFW"
|
||||||
contextmenu:
|
contextmenu:
|
||||||
rename: "Rename"
|
rename: "Rename"
|
||||||
mark-as-sensitive: "Mark as 'sensitive'"
|
mark-as-sensitive: "Mark as 'sensitive'"
|
||||||
@ -615,6 +662,9 @@ desktop/views/components/settings.vue:
|
|||||||
behaviour: "Behavior"
|
behaviour: "Behavior"
|
||||||
fetch-on-scroll: "Endless loading on scroll"
|
fetch-on-scroll: "Endless loading on scroll"
|
||||||
fetch-on-scroll-desc: "When you scroll down the page, it automatically fetches additional content."
|
fetch-on-scroll-desc: "When you scroll down the page, it automatically fetches additional content."
|
||||||
|
note-visibility: "Post visibility"
|
||||||
|
default-note-visibility: "Default visibility"
|
||||||
|
remember-note-visibility: "Remember post visibility"
|
||||||
auto-popout: "Auto pop-out window"
|
auto-popout: "Auto pop-out window"
|
||||||
auto-popout-desc: "If it's possible, pop-out display will be used instead of opening a new window. This setting is stored in your browser."
|
auto-popout-desc: "If it's possible, pop-out display will be used instead of opening a new window. This setting is stored in your browser."
|
||||||
advanced: "Advanced settings"
|
advanced: "Advanced settings"
|
||||||
@ -626,9 +676,11 @@ desktop/views/components/settings.vue:
|
|||||||
delete-wallpaper: "Remove background"
|
delete-wallpaper: "Remove background"
|
||||||
dark-mode: "Dark Mode"
|
dark-mode: "Dark Mode"
|
||||||
circle-icons: "Use circle icons"
|
circle-icons: "Use circle icons"
|
||||||
|
contrasted-acct: "Add contrast to username"
|
||||||
gradient-window-header: "Use gradients on window headers"
|
gradient-window-header: "Use gradients on window headers"
|
||||||
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-reply-target: "Display reply target"
|
show-reply-target: "Display reply target"
|
||||||
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 my posts in timelines"
|
||||||
@ -753,6 +805,7 @@ desktop/views/components/ui.header.account.vue:
|
|||||||
lists: "Lists"
|
lists: "Lists"
|
||||||
follow-requests: "Follow requests"
|
follow-requests: "Follow requests"
|
||||||
customize: "Customize home layout"
|
customize: "Customize home layout"
|
||||||
|
admin: "Admin"
|
||||||
settings: "Settings"
|
settings: "Settings"
|
||||||
signout: "Sign out"
|
signout: "Sign out"
|
||||||
dark: "Submerge in dark"
|
dark: "Submerge in dark"
|
||||||
@ -798,7 +851,7 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
dashboard: "Dashboard"
|
dashboard: "Dashboard"
|
||||||
all-users: "All Users"
|
all-users: "All Users"
|
||||||
original-users: "Users on this instance"
|
original-users: "Users on this instance"
|
||||||
all-notes: "All Posts"
|
all-notes: "All the posts"
|
||||||
original-notes: "Posts on this instance"
|
original-notes: "Posts on this instance"
|
||||||
invite: "Invite"
|
invite: "Invite"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
@ -817,18 +870,6 @@ 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.notes-chart.vue:
|
|
||||||
title: "Posts"
|
|
||||||
local: "Local"
|
|
||||||
remote: "Remote"
|
|
||||||
desktop/views/pages/admin/admin.users-chart.vue:
|
|
||||||
title: "Users"
|
|
||||||
local: "Local"
|
|
||||||
remote: "Remote"
|
|
||||||
desktop/views/pages/admin/admin.drive-chart.vue:
|
|
||||||
title: "Drive"
|
|
||||||
local: "Local"
|
|
||||||
remote: "Remote"
|
|
||||||
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"
|
||||||
@ -837,6 +878,11 @@ desktop/views/pages/deck/deck.note.vue:
|
|||||||
reposted-by: "Reposted by {}"
|
reposted-by: "Reposted by {}"
|
||||||
private: "This post is private"
|
private: "This post is private"
|
||||||
deleted: "This post has been deleted"
|
deleted: "This post has been deleted"
|
||||||
|
desktop/views/pages/stats/stats.vue:
|
||||||
|
all-users: "All Users"
|
||||||
|
original-users: "Users on this instance"
|
||||||
|
all-notes: "All the posts"
|
||||||
|
original-notes: "Posts on this instance"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "More details..."
|
about: "More details..."
|
||||||
gotit: "Got it!"
|
gotit: "Got it!"
|
||||||
@ -845,7 +891,10 @@ desktop/views/pages/welcome.vue:
|
|||||||
signin-button: "Logging in..."
|
signin-button: "Logging in..."
|
||||||
signup-button: "Sign up"
|
signup-button: "Sign up"
|
||||||
timeline: "Timeline"
|
timeline: "Timeline"
|
||||||
|
announcements: "Announcements"
|
||||||
|
photos: "Recent uploaded"
|
||||||
powered-by-misskey: "Powered by <b>Misskey</b>."
|
powered-by-misskey: "Powered by <b>Misskey</b>."
|
||||||
|
info: "Information"
|
||||||
desktop/views/pages/drive.vue:
|
desktop/views/pages/drive.vue:
|
||||||
title: "Misskey storage"
|
title: "Misskey storage"
|
||||||
desktop/views/pages/favorites.vue:
|
desktop/views/pages/favorites.vue:
|
||||||
@ -881,7 +930,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: "The user is a remote user. The profile that you see here may not complete."
|
is-remote: "This profile belongs to a remote user. The profile that you see here may not be complete. "
|
||||||
view-remote: "See their complete profile"
|
view-remote: "See their complete profile"
|
||||||
desktop/views/pages/user/user.home.vue:
|
desktop/views/pages/user/user.home.vue:
|
||||||
last-used-at: "Last active:"
|
last-used-at: "Last active:"
|
||||||
@ -954,12 +1003,15 @@ mobile/views/components/drive-file-chooser.vue:
|
|||||||
select-file: "Choose files"
|
select-file: "Choose files"
|
||||||
mobile/views/components/drive-folder-chooser.vue:
|
mobile/views/components/drive-folder-chooser.vue:
|
||||||
select-folder: "Choose a folder"
|
select-folder: "Choose a folder"
|
||||||
|
mobile/views/components/drive.file.vue:
|
||||||
|
nsfw: "NSFW"
|
||||||
mobile/views/components/drive.file-detail.vue:
|
mobile/views/components/drive.file-detail.vue:
|
||||||
download: "Download"
|
download: "Download"
|
||||||
rename: "Rename"
|
rename: "Rename"
|
||||||
move: "Move"
|
move: "Move"
|
||||||
hash: "Hash (md5)"
|
hash: "Hash (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
|
nsfw: "NSFW"
|
||||||
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"
|
||||||
@ -1040,6 +1092,7 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "Games"
|
game: "Games"
|
||||||
darkmode: "Dark theme"
|
darkmode: "Dark theme"
|
||||||
settings: "Settings"
|
settings: "Settings"
|
||||||
|
admin: "Admin"
|
||||||
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."
|
||||||
@ -1053,7 +1106,7 @@ mobile/views/pages/favorites.vue:
|
|||||||
title: "Favorites"
|
title: "Favorites"
|
||||||
mobile/views/pages/user-lists.vue:
|
mobile/views/pages/user-lists.vue:
|
||||||
title: "Lists"
|
title: "Lists"
|
||||||
enter-list-name: "Enter list name"
|
enter-list-name: "Enter a name of the list to make"
|
||||||
mobile/views/pages/drive.vue:
|
mobile/views/pages/drive.vue:
|
||||||
drive: "Drive"
|
drive: "Drive"
|
||||||
more: "Load more"
|
more: "Load more"
|
||||||
@ -1129,6 +1182,7 @@ mobile/views/pages/settings.vue:
|
|||||||
dark-mode: "Dark Mode"
|
dark-mode: "Dark Mode"
|
||||||
i-am-under-limited-internet: "I'm in limited bandwidth"
|
i-am-under-limited-internet: "I'm in limited bandwidth"
|
||||||
circle-icons: "Use circle icons"
|
circle-icons: "Use circle icons"
|
||||||
|
contrasted-acct: "Add contrast to username"
|
||||||
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"
|
||||||
@ -1137,8 +1191,14 @@ mobile/views/pages/settings.vue:
|
|||||||
post-style: "Post design"
|
post-style: "Post design"
|
||||||
post-style-standard: "Standard"
|
post-style-standard: "Standard"
|
||||||
post-style-smart: "Smart"
|
post-style-smart: "Smart"
|
||||||
|
notification-position: "Notification style"
|
||||||
|
notification-position-bottom: "Bottom"
|
||||||
|
notification-position-top: "Top"
|
||||||
behavior: "Behavior"
|
behavior: "Behavior"
|
||||||
fetch-on-scroll: "Endless loading on scroll"
|
fetch-on-scroll: "Endless loading on scroll"
|
||||||
|
note-visibility: "Post visibility"
|
||||||
|
default-note-visibility: "Default visibility"
|
||||||
|
remember-note-visibility: "Remember post visibility"
|
||||||
disable-via-mobile: "Don't mark the post as 'from mobile'"
|
disable-via-mobile: "Don't mark the post as 'from mobile'"
|
||||||
load-raw-images: "Show attached images in original quality"
|
load-raw-images: "Show attached images in original quality"
|
||||||
load-remote-media: "Show media from a remote server"
|
load-remote-media: "Show media from a remote server"
|
||||||
@ -1157,6 +1217,8 @@ mobile/views/pages/settings.vue:
|
|||||||
update-available-desc: "Updates will be applied after reloading the page"
|
update-available-desc: "Updates will be applied after reloading the page"
|
||||||
settings: "Settings"
|
settings: "Settings"
|
||||||
signout: "Sign out"
|
signout: "Sign out"
|
||||||
|
sound: "Sounds"
|
||||||
|
enable-sounds: "Enable sounds"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "Follows you"
|
follows-you: "Follows you"
|
||||||
following: "Following"
|
following: "Following"
|
@ -6,12 +6,25 @@ common:
|
|||||||
misskey: "Una ⭐️ del fediverso"
|
misskey: "Una ⭐️ del fediverso"
|
||||||
about-title: "Una ⭐️ del fediverso"
|
about-title: "Una ⭐️ del fediverso"
|
||||||
about: "Gracias por encontrae Misskey. Misskey es una <b>plataforma descentralizada de microblogging</b> nacida en la Tierra. Gracias a existir dentro del Fediverso (un universo donde se organizan varias plataformas sociales) se encuentra enlazada mutuamente con otras plataformas sociales. ¿Por què no te tomas un respiro del caos de la ciudad y te sumerges es una nueva manera de entender Internet?"
|
about: "Gracias por encontrae Misskey. Misskey es una <b>plataforma descentralizada de microblogging</b> nacida en la Tierra. Gracias a existir dentro del Fediverso (un universo donde se organizan varias plataformas sociales) se encuentra enlazada mutuamente con otras plataformas sociales. ¿Por què no te tomas un respiro del caos de la ciudad y te sumerges es una nueva manera de entender Internet?"
|
||||||
|
intro:
|
||||||
|
title: "Misskeyって?"
|
||||||
|
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
|
||||||
|
features: "特徴"
|
||||||
|
rich-contents: "投稿"
|
||||||
|
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
|
||||||
|
reaction: "リアクション"
|
||||||
|
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
|
||||||
|
ui: "インターフェース"
|
||||||
|
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
|
||||||
|
drive: "ドライブ"
|
||||||
|
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
|
||||||
|
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
|
||||||
adblock:
|
adblock:
|
||||||
detected: "Por favor, desactive el bloqueador de publicidad."
|
detected: "Por favor, desactive el bloqueador de publicidad."
|
||||||
warning: "<strong>Misskey no tiene anuncios publicitarios.</strong> Sin embargo, algunas características podrían no estar disponibles si el bloqueador de publicidad está habilitado."
|
warning: "<strong>Misskey no tiene anuncios publicitarios.</strong> Sin embargo, algunas características podrían no estar disponibles si el bloqueador de publicidad está habilitado."
|
||||||
application-authorization: "Autorizaciones de la aplicación."
|
application-authorization: "Autorizaciones de la aplicación."
|
||||||
close: "Cerrar"
|
close: "Cerrar"
|
||||||
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
do-not-copy-paste: "Por favor no copies código aquí. Tu cuenta puede resultar comprometida."
|
||||||
got-it: "¡Listo!"
|
got-it: "¡Listo!"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "Consejos de personalización"
|
title: "Consejos de personalización"
|
||||||
@ -58,7 +71,7 @@ common:
|
|||||||
friday: "Viernes"
|
friday: "Viernes"
|
||||||
saturday: "Sábado"
|
saturday: "Sábado"
|
||||||
reactions:
|
reactions:
|
||||||
like: "me gusta"
|
like: "Me gusta"
|
||||||
love: "amor"
|
love: "amor"
|
||||||
laugh: "risa"
|
laugh: "risa"
|
||||||
hmm: "hmm"
|
hmm: "hmm"
|
||||||
@ -68,6 +81,15 @@ common:
|
|||||||
confused: "confundido"
|
confused: "confundido"
|
||||||
rip: "RIP"
|
rip: "RIP"
|
||||||
pudding: "Chafado"
|
pudding: "Chafado"
|
||||||
|
note-visibility:
|
||||||
|
public: "公開"
|
||||||
|
home: "ホーム"
|
||||||
|
home-desc: "ホームタイムラインにのみ公開"
|
||||||
|
followers: "フォロワー"
|
||||||
|
followers-desc: "自分のフォロワーにのみ公開"
|
||||||
|
specified: "ダイレクト"
|
||||||
|
specified-desc: "指定したユーザーにのみ公開"
|
||||||
|
private: "非公開"
|
||||||
note-placeholders:
|
note-placeholders:
|
||||||
a: "¿Qué haces?"
|
a: "¿Qué haces?"
|
||||||
b: "¿Qué está pasando?"
|
b: "¿Qué está pasando?"
|
||||||
@ -84,8 +106,10 @@ common:
|
|||||||
my-token-regenerated: "Tu token se ha regenerado vas a ser desconectado."
|
my-token-regenerated: "Tu token se ha regenerado vas a ser desconectado."
|
||||||
i-like-sushi: "Prefiero sushi a pudín"
|
i-like-sushi: "Prefiero sushi a pudín"
|
||||||
show-reversi-board-labels: "Mostrar etiquetas de filas y columnas en Reversi"
|
show-reversi-board-labels: "Mostrar etiquetas de filas y columnas en Reversi"
|
||||||
verified-user: "公式アカウント"
|
use-contrast-reversi-stones: "Hacer el color de la piedra claro en Reversi"
|
||||||
|
verified-user: "Cuenta verificada"
|
||||||
disable-animated-mfm: "Desactivar texto animado en una publicación"
|
disable-animated-mfm: "Desactivar texto animado en una publicación"
|
||||||
|
do-not-use-in-production: 'Esto está en desarrollo, no usarlo para producción.'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "Empatado"
|
drawn: "Empatado"
|
||||||
my-turn: "Mi turno"
|
my-turn: "Mi turno"
|
||||||
@ -169,9 +193,9 @@ common/views/components/games/reversi/reversi.vue:
|
|||||||
common/views/components/games/reversi/reversi.game.vue:
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
surrender: "Rendirse"
|
surrender: "Rendirse"
|
||||||
surrendered: "Por rendirse"
|
surrendered: "Por rendirse"
|
||||||
is-llotheo: "石の少ない方が勝ち(ロセオ)"
|
is-llotheo: "El último gana (Llotheo)"
|
||||||
looped-map: "ループマップ"
|
looped-map: "Mapa en bucle"
|
||||||
can-put-everywhere: "どこでも置けるモード"
|
can-put-everywhere: "Puedes colocar donde quieras"
|
||||||
common/views/components/games/reversi/reversi.index.vue:
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
title: "Misskey Reversi"
|
title: "Misskey Reversi"
|
||||||
sub-title: "¡Juega Reversi con tus amigos!"
|
sub-title: "¡Juega Reversi con tus amigos!"
|
||||||
@ -259,6 +283,8 @@ common/views/components/nav.vue:
|
|||||||
develop: "Desarrolladores"
|
develop: "Desarrolladores"
|
||||||
feedback: "Opiniones"
|
feedback: "Opiniones"
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
|
detail: "Detalles"
|
||||||
|
copy-link: "Copiar enlace"
|
||||||
favorite: "Me gusta esta nota"
|
favorite: "Me gusta esta nota"
|
||||||
pin: "Fijar en el perfil"
|
pin: "Fijar en el perfil"
|
||||||
delete: "Borrar"
|
delete: "Borrar"
|
||||||
@ -287,10 +313,10 @@ common/views/components/signin.vue:
|
|||||||
signin: "Entra"
|
signin: "Entra"
|
||||||
or: "O"
|
or: "O"
|
||||||
signin-with-twitter: "Ingresar con Twitter"
|
signin-with-twitter: "Ingresar con Twitter"
|
||||||
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
|
login-failed: "Autenticación fallida. Asegúrate de haber usado el nombre de usuario y contraseña correctos."
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
invitation-code: "招待コード"
|
invitation-code: "Código de invitación"
|
||||||
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
|
invitation-info: "Si no tienes un código de invitación, por favor contacta un <a href=\"{}\">administrador</a>."
|
||||||
username: "Usuario"
|
username: "Usuario"
|
||||||
checking: "Comprobando..."
|
checking: "Comprobando..."
|
||||||
available: "Disponible"
|
available: "Disponible"
|
||||||
@ -336,6 +362,9 @@ common/views/components/visibility-chooser.vue:
|
|||||||
specified: "Directo"
|
specified: "Directo"
|
||||||
specified-desc: "Publica solo para los seguidores que quieras"
|
specified-desc: "Publica solo para los seguidores que quieras"
|
||||||
private: "Privada"
|
private: "Privada"
|
||||||
|
common/views/components/trends.vue:
|
||||||
|
count: "{}人が投稿"
|
||||||
|
empty: "トレンドなし"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Recuperando"
|
fetching: "Recuperando"
|
||||||
no-broadcasts: "Sin emisión"
|
no-broadcasts: "Sin emisión"
|
||||||
@ -359,8 +388,6 @@ common/views/widgets/posts-monitor.vue:
|
|||||||
toggle: "Alternar vistas"
|
toggle: "Alternar vistas"
|
||||||
common/views/widgets/hashtags.vue:
|
common/views/widgets/hashtags.vue:
|
||||||
title: "Etiquetas"
|
title: "Etiquetas"
|
||||||
count: "{} usuarios mencionados"
|
|
||||||
empty: "Ninguna tendencia popular ahora"
|
|
||||||
common/views/widgets/server.vue:
|
common/views/widgets/server.vue:
|
||||||
title: "Información del servidor"
|
title: "Información del servidor"
|
||||||
toggle: "Alternar vistas"
|
toggle: "Alternar vistas"
|
||||||
@ -410,6 +437,7 @@ desktop:
|
|||||||
uploading-avatar: "Cargando un nuevo avatar"
|
uploading-avatar: "Cargando un nuevo avatar"
|
||||||
avatar-updated: "Avatar actualizado"
|
avatar-updated: "Avatar actualizado"
|
||||||
choose-avatar: "Escoge una imagen de avatar"
|
choose-avatar: "Escoge una imagen de avatar"
|
||||||
|
invalid-filetype: "Este tipo de archivo no es compatible aquí"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Negro ... Total"
|
total: "Negro ... Total"
|
||||||
notes: "Azul ... Notas"
|
notes: "Azul ... Notas"
|
||||||
@ -423,6 +451,24 @@ desktop/views/components/calendar.vue:
|
|||||||
prev: "Mes anterior"
|
prev: "Mes anterior"
|
||||||
next: "Próximo mes"
|
next: "Próximo mes"
|
||||||
go: "Click para navegar"
|
go: "Click para navegar"
|
||||||
|
desktop/views/components/charts.vue:
|
||||||
|
title: "Gráficos"
|
||||||
|
per-day: "por día"
|
||||||
|
per-hour: "por hora"
|
||||||
|
notes: "Publicaciones"
|
||||||
|
users: "Usuarios"
|
||||||
|
drive: "Unidad"
|
||||||
|
charts:
|
||||||
|
notes: "Número de publicaciones: aumentar/disminuir (Combinado)"
|
||||||
|
local-notes: "Número de publicaciones: aumentar/disminuir (Local)"
|
||||||
|
remote-notes: "Número de publicaciones: aumentar/disminuir (Remoto)"
|
||||||
|
notes-total: "Número de publicaciones: Acumulativo total"
|
||||||
|
users: "Número de usuarios: aumentar/disminuir"
|
||||||
|
users-total: "Número de usuarios: Acumulativo total"
|
||||||
|
drive: "Capacidad de almacenamiento usada: aumentar/disminuir"
|
||||||
|
drive-total: "Capacidad de almacenamiento usada: Acumulativa total"
|
||||||
|
drive-files: "Número de archivos almacenados: aumentar/disminuir"
|
||||||
|
drive-files-total: "Número de archivos almacenados: Acumulativo total"
|
||||||
desktop/views/components/choose-file-from-drive-window.vue:
|
desktop/views/components/choose-file-from-drive-window.vue:
|
||||||
choose-file: "Escoger archivos"
|
choose-file: "Escoger archivos"
|
||||||
upload: "Cargar archivos de tu dispositivo"
|
upload: "Cargar archivos de tu dispositivo"
|
||||||
@ -443,6 +489,7 @@ desktop/views/components/drive-window.vue:
|
|||||||
desktop/views/components/drive.file.vue:
|
desktop/views/components/drive.file.vue:
|
||||||
avatar: "Avatar"
|
avatar: "Avatar"
|
||||||
banner: "Banner"
|
banner: "Banner"
|
||||||
|
nsfw: "Ver más"
|
||||||
contextmenu:
|
contextmenu:
|
||||||
rename: "Renombrar"
|
rename: "Renombrar"
|
||||||
mark-as-sensitive: "Marcar como 'sensible'"
|
mark-as-sensitive: "Marcar como 'sensible'"
|
||||||
@ -494,31 +541,31 @@ desktop/views/components/media-image.vue:
|
|||||||
sensitive: "El contenido es NSFW (no seguro para ver en el trabajo, 'not safe for work')"
|
sensitive: "El contenido es NSFW (no seguro para ver en el trabajo, 'not safe for work')"
|
||||||
click-to-show: "Click para mostrar"
|
click-to-show: "Click para mostrar"
|
||||||
desktop/views/components/media-video.vue:
|
desktop/views/components/media-video.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "Este contenido no es apropiado para ver en el trabajo"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "Click para mostrar"
|
||||||
desktop/views/components/follow-button.vue:
|
desktop/views/components/follow-button.vue:
|
||||||
following: "Siguiendo"
|
following: "Siguiendo"
|
||||||
follow: "Sigue"
|
follow: "Sigue"
|
||||||
request-pending: "Pendiente de aprobación"
|
request-pending: "Pendiente de aprobación"
|
||||||
follow-request: "フォロー申請"
|
follow-request: "Solicitud de seguir"
|
||||||
desktop/views/components/followers-window.vue:
|
desktop/views/components/followers-window.vue:
|
||||||
followers: "{} のフォロワー"
|
followers: "{} seguidores"
|
||||||
desktop/views/components/followers.vue:
|
desktop/views/components/followers.vue:
|
||||||
empty: "フォロワーはいないようです。"
|
empty: "Parece que no tienes seguidores aún."
|
||||||
desktop/views/components/following-window.vue:
|
desktop/views/components/following-window.vue:
|
||||||
following: "{} のフォロー"
|
following: "Siguiendo {}"
|
||||||
desktop/views/components/following.vue:
|
desktop/views/components/following.vue:
|
||||||
empty: "フォロー中のユーザーはいないようです。"
|
empty: "Parece que aún no sigues a nadie."
|
||||||
desktop/views/components/friends-maker.vue:
|
desktop/views/components/friends-maker.vue:
|
||||||
title: "気になるユーザーをフォロー:"
|
title: "Usuarios recomendados:"
|
||||||
empty: "おすすめのユーザーは見つかりませんでした。"
|
empty: "No se pudieron encontrar usuarios para recomendar"
|
||||||
fetching: "読み込んでいます"
|
fetching: "Cargando"
|
||||||
refresh: "もっと見る"
|
refresh: "Más"
|
||||||
close: "閉じる"
|
close: "Cerrar"
|
||||||
desktop/views/components/game-window.vue:
|
desktop/views/components/game-window.vue:
|
||||||
game: "リバーシ"
|
game: "Reversi"
|
||||||
desktop/views/components/home.vue:
|
desktop/views/components/home.vue:
|
||||||
done: "完了"
|
done: "Listo"
|
||||||
add-widget: "Agregar accesorio:"
|
add-widget: "Agregar accesorio:"
|
||||||
add: "Agregar"
|
add: "Agregar"
|
||||||
desktop/views/input-dialog.vue:
|
desktop/views/input-dialog.vue:
|
||||||
@ -544,8 +591,8 @@ desktop/views/components/notes.note.vue:
|
|||||||
detail: "Mostrar detalles"
|
detail: "Mostrar detalles"
|
||||||
private: "Esta publicación es privada"
|
private: "Esta publicación es privada"
|
||||||
deleted: "Esta publicación ha sido borrada"
|
deleted: "Esta publicación ha sido borrada"
|
||||||
hide: "隠す"
|
hide: "Esconder"
|
||||||
see-more: "もっと見る"
|
see-more: "Ver más"
|
||||||
desktop/views/components/notes.vue:
|
desktop/views/components/notes.vue:
|
||||||
error: "Error al cargar."
|
error: "Error al cargar."
|
||||||
retry: "Reintentar"
|
retry: "Reintentar"
|
||||||
@ -581,7 +628,7 @@ desktop/views/components/post-form.vue:
|
|||||||
geolocation-alert: "Tu dispositivo no tiene soporte de geolocalización."
|
geolocation-alert: "Tu dispositivo no tiene soporte de geolocalización."
|
||||||
error: "Error"
|
error: "Error"
|
||||||
enter-username: "Por favor escribe un nombre de usuario..."
|
enter-username: "Por favor escribe un nombre de usuario..."
|
||||||
annotations: "内容への注釈 (オプション)"
|
annotations: "Anotaciones a la publicación (opcional)"
|
||||||
desktop/views/components/post-form-window.vue:
|
desktop/views/components/post-form-window.vue:
|
||||||
note: "Nota nueva"
|
note: "Nota nueva"
|
||||||
reply: "Responder"
|
reply: "Responder"
|
||||||
@ -615,6 +662,9 @@ desktop/views/components/settings.vue:
|
|||||||
behaviour: "Acciones"
|
behaviour: "Acciones"
|
||||||
fetch-on-scroll: "Desplazamiento infinito"
|
fetch-on-scroll: "Desplazamiento infinito"
|
||||||
fetch-on-scroll-desc: "Cuando te deslizas al final de la página nuevo contenido se carga automáticamente."
|
fetch-on-scroll-desc: "Cuando te deslizas al final de la página nuevo contenido se carga automáticamente."
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
auto-popout: "Ventana emergente automática"
|
auto-popout: "Ventana emergente automática"
|
||||||
auto-popout-desc: "Muestra una ventana emergente si es posible. Esta configuración depende del navegador."
|
auto-popout-desc: "Muestra una ventana emergente si es posible. Esta configuración depende del navegador."
|
||||||
advanced: "Configuración avanzada"
|
advanced: "Configuración avanzada"
|
||||||
@ -626,9 +676,11 @@ desktop/views/components/settings.vue:
|
|||||||
delete-wallpaper: "Suprimir fondo"
|
delete-wallpaper: "Suprimir fondo"
|
||||||
dark-mode: "Modo Nocturno"
|
dark-mode: "Modo Nocturno"
|
||||||
circle-icons: "Usar iconos circulares"
|
circle-icons: "Usar iconos circulares"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
gradient-window-header: "Usar degradados en las cabeceras de las páginas"
|
gradient-window-header: "Usar degradados en las cabeceras de las páginas"
|
||||||
post-form-on-timeline: "Mostrar el formulario de las entradas encima de la línea de tiempo"
|
post-form-on-timeline: "Mostrar el formulario de las entradas encima de la línea de tiempo"
|
||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
@ -744,39 +796,40 @@ desktop/views/components/timeline.vue:
|
|||||||
global: "グローバル"
|
global: "グローバル"
|
||||||
list: "リスト"
|
list: "リスト"
|
||||||
desktop/views/components/ui.header.vue:
|
desktop/views/components/ui.header.vue:
|
||||||
welcome-back: "おかえりなさい、"
|
welcome-back: "Bienvenido/a de vuelta,"
|
||||||
adjective: "さん"
|
adjective: "-san"
|
||||||
desktop/views/components/ui.header.account.vue:
|
desktop/views/components/ui.header.account.vue:
|
||||||
profile: "プロフィール"
|
profile: "Tu perfil"
|
||||||
drive: "ドライブ"
|
drive: "Unidad"
|
||||||
favorites: "お気に入り"
|
favorites: "Favoritos"
|
||||||
lists: "リスト"
|
lists: "Listas"
|
||||||
follow-requests: "フォロー申請"
|
follow-requests: "Solicitudes de seguimiento"
|
||||||
customize: "ホームのカスタマイズ"
|
customize: "Personalizar la página de inicio"
|
||||||
settings: "設定"
|
admin: "Admin"
|
||||||
signout: "サインアウト"
|
settings: "Configuraciones"
|
||||||
dark: "闇に飲まれる"
|
signout: "Desconectarse"
|
||||||
|
dark: "Sumergirse en la oscuridad"
|
||||||
desktop/views/components/ui.header.nav.vue:
|
desktop/views/components/ui.header.nav.vue:
|
||||||
home: "ホーム"
|
home: "Inicio"
|
||||||
deck: "デッキ"
|
deck: "Cubierta"
|
||||||
messaging: "メッセージ"
|
messaging: "Mensajes"
|
||||||
game: "ゲーム"
|
game: "Juegos"
|
||||||
desktop/views/components/ui.header.notifications.vue:
|
desktop/views/components/ui.header.notifications.vue:
|
||||||
title: "通知"
|
title: "Notificaciones"
|
||||||
desktop/views/components/ui.header.post.vue:
|
desktop/views/components/ui.header.post.vue:
|
||||||
post: "新規投稿"
|
post: "Crear una publicación"
|
||||||
desktop/views/components/ui.header.search.vue:
|
desktop/views/components/ui.header.search.vue:
|
||||||
placeholder: "検索"
|
placeholder: "Buscar"
|
||||||
desktop/views/components/received-follow-requests-window.vue:
|
desktop/views/components/received-follow-requests-window.vue:
|
||||||
title: "フォロー申請"
|
title: "Solicitudes de seguidores"
|
||||||
accept: "承認"
|
accept: "Aceptar"
|
||||||
reject: "拒否"
|
reject: "Rechazar"
|
||||||
desktop/views/components/user-lists-window.vue:
|
desktop/views/components/user-lists-window.vue:
|
||||||
title: "リスト"
|
title: "Listas de usuario"
|
||||||
create-list: "リストを作成"
|
create-list: "Crear lista"
|
||||||
list-name: "リスト名"
|
list-name: "Nombre de lista"
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "投稿"
|
notes: "Publicaciones"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
desktop/views/components/users-list.vue:
|
desktop/views/components/users-list.vue:
|
||||||
@ -798,8 +851,8 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
all-notes: "全てのノート"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスのノート"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
@ -817,18 +870,6 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
desktop/views/pages/admin/admin.notes-chart.vue:
|
|
||||||
title: "投稿"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.users-chart.vue:
|
|
||||||
title: "ユーザー"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.drive-chart.vue:
|
|
||||||
title: "ドライブ"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
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: "メディアビュー"
|
||||||
@ -837,6 +878,11 @@ desktop/views/pages/deck/deck.note.vue:
|
|||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
|
desktop/views/pages/stats/stats.vue:
|
||||||
|
all-users: "全てのユーザー"
|
||||||
|
original-users: "このインスタンスのユーザー"
|
||||||
|
all-notes: "全ての投稿"
|
||||||
|
original-notes: "このインスタンスの投稿"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "詳しく..."
|
about: "詳しく..."
|
||||||
gotit: "わかった"
|
gotit: "わかった"
|
||||||
@ -845,7 +891,10 @@ desktop/views/pages/welcome.vue:
|
|||||||
signin-button: "やってる"
|
signin-button: "やってる"
|
||||||
signup-button: "やる"
|
signup-button: "やる"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
photos: "最近の画像"
|
||||||
powered-by-misskey: "Powered by <b>Misskey</b>."
|
powered-by-misskey: "Powered by <b>Misskey</b>."
|
||||||
|
info: "情報"
|
||||||
desktop/views/pages/drive.vue:
|
desktop/views/pages/drive.vue:
|
||||||
title: "Misskey Drive"
|
title: "Misskey Drive"
|
||||||
desktop/views/pages/favorites.vue:
|
desktop/views/pages/favorites.vue:
|
||||||
@ -954,12 +1003,15 @@ mobile/views/components/drive-file-chooser.vue:
|
|||||||
select-file: "ファイルを選択"
|
select-file: "ファイルを選択"
|
||||||
mobile/views/components/drive-folder-chooser.vue:
|
mobile/views/components/drive-folder-chooser.vue:
|
||||||
select-folder: "フォルダーを選択"
|
select-folder: "フォルダーを選択"
|
||||||
|
mobile/views/components/drive.file.vue:
|
||||||
|
nsfw: "閲覧注意"
|
||||||
mobile/views/components/drive.file-detail.vue:
|
mobile/views/components/drive.file-detail.vue:
|
||||||
download: "ダウンロード"
|
download: "ダウンロード"
|
||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
move: "移動"
|
move: "移動"
|
||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
|
nsfw: "閲覧注意"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@ -1040,6 +1092,7 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "ゲーム"
|
game: "ゲーム"
|
||||||
darkmode: "ダークモード"
|
darkmode: "ダークモード"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
|
admin: "管理"
|
||||||
about: "Misskeyについて"
|
about: "Misskeyについて"
|
||||||
mobile/views/components/user-timeline.vue:
|
mobile/views/components/user-timeline.vue:
|
||||||
no-notes: "このユーザーは投稿していないようです。"
|
no-notes: "このユーザーは投稿していないようです。"
|
||||||
@ -1129,6 +1182,7 @@ mobile/views/pages/settings.vue:
|
|||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
i-am-under-limited-internet: "私は通信を制限されている"
|
i-am-under-limited-internet: "私は通信を制限されている"
|
||||||
circle-icons: "円形のアイコンを使用"
|
circle-icons: "円形のアイコンを使用"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||||
@ -1137,8 +1191,14 @@ mobile/views/pages/settings.vue:
|
|||||||
post-style: "投稿の表示スタイル"
|
post-style: "投稿の表示スタイル"
|
||||||
post-style-standard: "標準"
|
post-style-standard: "標準"
|
||||||
post-style-smart: "スマート"
|
post-style-smart: "スマート"
|
||||||
|
notification-position: "通知の表示"
|
||||||
|
notification-position-bottom: "下"
|
||||||
|
notification-position-top: "上"
|
||||||
behavior: "動作"
|
behavior: "動作"
|
||||||
fetch-on-scroll: "スクロールで自動読み込み"
|
fetch-on-scroll: "スクロールで自動読み込み"
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||||
load-raw-images: "添付された画像を高画質で表示する"
|
load-raw-images: "添付された画像を高画質で表示する"
|
||||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||||
@ -1157,6 +1217,8 @@ mobile/views/pages/settings.vue:
|
|||||||
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
|
sound: "サウンド"
|
||||||
|
enable-sounds: "サウンドを有効にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
@ -6,6 +6,19 @@ 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 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 ?"
|
||||||
|
intro:
|
||||||
|
title: "C’est quoi Misskey ?"
|
||||||
|
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
|
||||||
|
features: "Fonctionnalités"
|
||||||
|
rich-contents: "Notes"
|
||||||
|
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
|
||||||
|
reaction: "Réactions"
|
||||||
|
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
|
||||||
|
ui: "Interface utilisateur"
|
||||||
|
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
|
||||||
|
drive: "Drive"
|
||||||
|
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
|
||||||
|
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
|
||||||
adblock:
|
adblock:
|
||||||
detected: "Veuillez désactiver votre bloqueur de publicités"
|
detected: "Veuillez désactiver votre bloqueur de publicités"
|
||||||
warning: "<strong>Misskey n'utilise pas de publicités</strong>, mais quelques options peuvent être non disponibles ou fonctionneraient mal si un bloqueur de publicités est activé."
|
warning: "<strong>Misskey n'utilise pas de publicités</strong>, mais quelques options peuvent être non disponibles ou fonctionneraient mal si un bloqueur de publicités est activé."
|
||||||
@ -30,7 +43,7 @@ common:
|
|||||||
quoted-by: "Cité·e par {} :"
|
quoted-by: "Cité·e par {} :"
|
||||||
time:
|
time:
|
||||||
unknown: "inconnu"
|
unknown: "inconnu"
|
||||||
future: "future"
|
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"
|
||||||
@ -58,21 +71,30 @@ common:
|
|||||||
friday: "Vendredi"
|
friday: "Vendredi"
|
||||||
saturday: "Samedi"
|
saturday: "Samedi"
|
||||||
reactions:
|
reactions:
|
||||||
like: "Aime"
|
like: "J'aime"
|
||||||
love: "Adore"
|
love: "Adore"
|
||||||
laugh: "Rire"
|
laugh: "Rire"
|
||||||
hmm: "Hmm ... ?"
|
hmm: "Hmm … ?"
|
||||||
surprise: "Wow"
|
surprise: "Wow"
|
||||||
congrats: "Félicitations !"
|
congrats: "Félicitations !"
|
||||||
angry: "En colère"
|
angry: "En colère"
|
||||||
confused: "Confus"
|
confused: "Confus"
|
||||||
rip: "RIP"
|
rip: "RIP"
|
||||||
pudding: "Pudding"
|
pudding: "Pudding"
|
||||||
|
note-visibility:
|
||||||
|
public: "Public"
|
||||||
|
home: "Accueil"
|
||||||
|
home-desc: "Publier sur le fil local uniquement"
|
||||||
|
followers: "Abonnés·es"
|
||||||
|
followers-desc: "Publier à vos abonnés·es uniquement"
|
||||||
|
specified: "Direct"
|
||||||
|
specified-desc: "Publier aux utilisateurs·trices mentionnés·es"
|
||||||
|
private: "Privé"
|
||||||
note-placeholders:
|
note-placeholders:
|
||||||
a: "Que faites vous maintenant ?"
|
a: "Que faites-vous maintenant ?"
|
||||||
b: "Quoi de neuf ?"
|
b: "Quoi de neuf ?"
|
||||||
c: "Qu'avez-vous en tête ?"
|
c: "Qu'avez-vous en tête ?"
|
||||||
d: "Voulez-vous exprimer quelque chose ?"
|
d: "Désirez-vous publier quelques mots ?"
|
||||||
e: "Écrivez ici"
|
e: "Écrivez ici"
|
||||||
f: "En attente de vos écrits"
|
f: "En attente de vos écrits"
|
||||||
search: "Recherche"
|
search: "Recherche"
|
||||||
@ -84,8 +106,10 @@ common:
|
|||||||
my-token-regenerated: "Votre token vient d'être généré, vous allez maintenant être déconnecté."
|
my-token-regenerated: "Votre token 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: "リバーシのアイコンにコントラストを付ける"
|
||||||
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"
|
||||||
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "Partie nulle"
|
drawn: "Partie nulle"
|
||||||
my-turn: "C’est votre tour"
|
my-turn: "C’est votre tour"
|
||||||
@ -171,7 +195,7 @@ common/views/components/games/reversi/reversi.game.vue:
|
|||||||
surrendered: "Par abandon"
|
surrendered: "Par abandon"
|
||||||
is-llotheo: "石の少ない方が勝ち(ロセオ)"
|
is-llotheo: "石の少ない方が勝ち(ロセオ)"
|
||||||
looped-map: "Carte en boucle"
|
looped-map: "Carte en boucle"
|
||||||
can-put-everywhere: "どこでも置けるモード"
|
can-put-everywhere: "Peut poser partout"
|
||||||
common/views/components/games/reversi/reversi.index.vue:
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
title: "Misskey Reversi"
|
title: "Misskey Reversi"
|
||||||
sub-title: "Jouer à Reversi avec vos ami·e·s !"
|
sub-title: "Jouer à Reversi avec vos ami·e·s !"
|
||||||
@ -230,7 +254,7 @@ common/views/components/connect-failed.troubleshooter.vue:
|
|||||||
flush: "Vider le cache"
|
flush: "Vider le cache"
|
||||||
set-version: "Choisissez une version"
|
set-version: "Choisissez une version"
|
||||||
common/views/components/messaging.vue:
|
common/views/components/messaging.vue:
|
||||||
search-user: "Trouver un·e utilisateur·rice"
|
search-user: "Trouver un·e utilisateur·trice"
|
||||||
you: "Vous"
|
you: "Vous"
|
||||||
no-history: "Pas d'historique"
|
no-history: "Pas d'historique"
|
||||||
common/views/components/messaging-room.vue:
|
common/views/components/messaging-room.vue:
|
||||||
@ -259,6 +283,8 @@ common/views/components/nav.vue:
|
|||||||
develop: "Développeur·se·s"
|
develop: "Développeur·se·s"
|
||||||
feedback: "Remarques"
|
feedback: "Remarques"
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
|
detail: "Détails"
|
||||||
|
copy-link: "Copier le lien"
|
||||||
favorite: "Mettre cette note en favoris"
|
favorite: "Mettre cette note en favoris"
|
||||||
pin: "Épingler sur votre profil"
|
pin: "Épingler sur votre profil"
|
||||||
delete: "Supprimer"
|
delete: "Supprimer"
|
||||||
@ -287,7 +313,7 @@ common/views/components/signin.vue:
|
|||||||
signin: "Se connecter"
|
signin: "Se connecter"
|
||||||
or: "Ou"
|
or: "Ou"
|
||||||
signin-with-twitter: "Se connecter via Twitter"
|
signin-with-twitter: "Se connecter via Twitter"
|
||||||
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
|
login-failed: "Échec d'authentification. Veuillez vérifier que votre nom d'utilisateur et mot de passe sont corrects."
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
invitation-code: "Code d’invitation"
|
invitation-code: "Code d’invitation"
|
||||||
invitation-info: "Si vous n’avez pas de code d’invitation, contactez un·e <a href=\"{}\">administrateur·rice</a>."
|
invitation-info: "Si vous n’avez pas de code d’invitation, contactez un·e <a href=\"{}\">administrateur·rice</a>."
|
||||||
@ -336,6 +362,9 @@ common/views/components/visibility-chooser.vue:
|
|||||||
specified: "Direct"
|
specified: "Direct"
|
||||||
specified-desc: "Publier aux utilisateur·rice·s mentionné·e·s"
|
specified-desc: "Publier aux utilisateur·rice·s mentionné·e·s"
|
||||||
private: "Privé"
|
private: "Privé"
|
||||||
|
common/views/components/trends.vue:
|
||||||
|
count: "{} utilisateurs·trices mentionnés·es"
|
||||||
|
empty: "Aucune tendance"
|
||||||
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"
|
||||||
@ -359,8 +388,6 @@ common/views/widgets/posts-monitor.vue:
|
|||||||
toggle: "Basculer entre les vues"
|
toggle: "Basculer entre les vues"
|
||||||
common/views/widgets/hashtags.vue:
|
common/views/widgets/hashtags.vue:
|
||||||
title: "Étiquettes"
|
title: "Étiquettes"
|
||||||
count: "{} utilisateur·rice·s mentionné·e·s"
|
|
||||||
empty: "Aucune tendance"
|
|
||||||
common/views/widgets/server.vue:
|
common/views/widgets/server.vue:
|
||||||
title: "Informations sur le serveur"
|
title: "Informations sur le serveur"
|
||||||
toggle: "Afficher les vues"
|
toggle: "Afficher les vues"
|
||||||
@ -378,7 +405,7 @@ common/views/widgets/tips.vue:
|
|||||||
tips-line3: "Vous pouvez glisser et déposer des fichiers sur la fenêtre de la note"
|
tips-line3: "Vous pouvez glisser et déposer des fichiers sur la fenêtre de la note"
|
||||||
tips-line4: "Vous pouvez coller des images à partir du presse-papier sur la fenêtre de la note"
|
tips-line4: "Vous pouvez coller des images à partir du presse-papier sur la fenêtre de la note"
|
||||||
tips-line5: "Vous pouvez téléverser des fichiers sur le Drive en faisant un glisser-déposer"
|
tips-line5: "Vous pouvez téléverser des fichiers sur le Drive en faisant un glisser-déposer"
|
||||||
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
|
tips-line6: "Vous pouvez déplacer un dossier en le glissant dans le Drive"
|
||||||
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
|
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
|
||||||
tips-line8: "Vous pouvez personnaliser l'Accueil via les paramètres"
|
tips-line8: "Vous pouvez personnaliser l'Accueil via les paramètres"
|
||||||
tips-line9: "Misskey est sous licence AGPLv3"
|
tips-line9: "Misskey est sous licence AGPLv3"
|
||||||
@ -390,7 +417,7 @@ common/views/widgets/tips.vue:
|
|||||||
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
||||||
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
|
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
|
||||||
tips-line21: "Vous pouvez aussi utiliser l'API pour développer des Bots."
|
tips-line21: "Vous pouvez aussi utiliser l'API pour développer des Bots."
|
||||||
tips-line23: "まゆかわいいよまゆ"
|
tips-line23: "Mayu est mignone avec ses sourcils."
|
||||||
tips-line24: "Misskey a vu le jour en 2014"
|
tips-line24: "Misskey a vu le jour en 2014"
|
||||||
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
|
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
|
||||||
common/views/pages/follow.vue:
|
common/views/pages/follow.vue:
|
||||||
@ -410,6 +437,7 @@ desktop:
|
|||||||
uploading-avatar: "Téléversement du nouvel avatar"
|
uploading-avatar: "Téléversement du nouvel avatar"
|
||||||
avatar-updated: "L'avatar est mis à jour"
|
avatar-updated: "L'avatar est mis à jour"
|
||||||
choose-avatar: "Choisir un avatar"
|
choose-avatar: "Choisir un avatar"
|
||||||
|
invalid-filetype: "この形式のファイルはサポートされていません"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Noirs ... Total"
|
total: "Noirs ... Total"
|
||||||
notes: "Bleu ... Notes"
|
notes: "Bleu ... Notes"
|
||||||
@ -423,6 +451,24 @@ desktop/views/components/calendar.vue:
|
|||||||
prev: "Mois dernier"
|
prev: "Mois dernier"
|
||||||
next: "Mois prochain"
|
next: "Mois prochain"
|
||||||
go: "Cliquez pour naviguer"
|
go: "Cliquez pour naviguer"
|
||||||
|
desktop/views/components/charts.vue:
|
||||||
|
title: "Graphiques"
|
||||||
|
per-day: "par jour"
|
||||||
|
per-hour: "par heure"
|
||||||
|
notes: "Publications"
|
||||||
|
users: "Utilisateurs"
|
||||||
|
drive: "Drive"
|
||||||
|
charts:
|
||||||
|
notes: "投稿の増減 (統合)"
|
||||||
|
local-notes: "投稿の増減 (ローカル)"
|
||||||
|
remote-notes: "投稿の増減 (リモート)"
|
||||||
|
notes-total: "投稿の累計"
|
||||||
|
users: "Nombre d’utilisateurs·trices : augmentation/diminution"
|
||||||
|
users-total: "Nombre total d’utilisateurs·trices : total cumulé"
|
||||||
|
drive: "ドライブ使用量の増減"
|
||||||
|
drive-total: "ドライブ使用量の累計"
|
||||||
|
drive-files: "ドライブのファイル数の増減"
|
||||||
|
drive-files-total: "ドライブのファイル数の累計"
|
||||||
desktop/views/components/choose-file-from-drive-window.vue:
|
desktop/views/components/choose-file-from-drive-window.vue:
|
||||||
choose-file: "Sélection de fichiers"
|
choose-file: "Sélection de fichiers"
|
||||||
upload: "Téléverser des fichiers à partir de votre ordinateur"
|
upload: "Téléverser des fichiers à partir de votre ordinateur"
|
||||||
@ -443,6 +489,7 @@ desktop/views/components/drive-window.vue:
|
|||||||
desktop/views/components/drive.file.vue:
|
desktop/views/components/drive.file.vue:
|
||||||
avatar: "Avatar"
|
avatar: "Avatar"
|
||||||
banner: "Bannière"
|
banner: "Bannière"
|
||||||
|
nsfw: "CW"
|
||||||
contextmenu:
|
contextmenu:
|
||||||
rename: "Renommer"
|
rename: "Renommer"
|
||||||
mark-as-sensitive: "Marquer comme sensible"
|
mark-as-sensitive: "Marquer comme sensible"
|
||||||
@ -511,7 +558,7 @@ desktop/views/components/following.vue:
|
|||||||
empty: "Vous ne suivez aucun compte."
|
empty: "Vous ne suivez aucun compte."
|
||||||
desktop/views/components/friends-maker.vue:
|
desktop/views/components/friends-maker.vue:
|
||||||
title: "Utilisateurs recommandés :"
|
title: "Utilisateurs recommandés :"
|
||||||
empty: "Impossible de trouver des utilisateurs à recommander."
|
empty: "Impossible de trouver des utilisateurs·trices à recommander."
|
||||||
fetching: "Chargement"
|
fetching: "Chargement"
|
||||||
refresh: "Plus"
|
refresh: "Plus"
|
||||||
close: "Fermer"
|
close: "Fermer"
|
||||||
@ -615,6 +662,9 @@ desktop/views/components/settings.vue:
|
|||||||
behaviour: "Comportement"
|
behaviour: "Comportement"
|
||||||
fetch-on-scroll: "Chargement lors du défilement"
|
fetch-on-scroll: "Chargement lors du défilement"
|
||||||
fetch-on-scroll-desc: "Chargement automatique du contenu lors du défilement de la page."
|
fetch-on-scroll-desc: "Chargement automatique du contenu lors du défilement de la page."
|
||||||
|
note-visibility: "Visibilité de la publication"
|
||||||
|
default-note-visibility: "Visibilité par défaut"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
auto-popout: "Fenêtre contextuelle automatique"
|
auto-popout: "Fenêtre contextuelle automatique"
|
||||||
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
||||||
advanced: "Paramètres avancés"
|
advanced: "Paramètres avancés"
|
||||||
@ -626,9 +676,11 @@ desktop/views/components/settings.vue:
|
|||||||
delete-wallpaper: "Supprimer le fond d'écran"
|
delete-wallpaper: "Supprimer le fond d'écran"
|
||||||
dark-mode: "Mode nuit"
|
dark-mode: "Mode nuit"
|
||||||
circle-icons: "Utiliser des icônes circulaires"
|
circle-icons: "Utiliser des icônes circulaires"
|
||||||
|
contrasted-acct: "Nom d’utilisateur contrasté"
|
||||||
gradient-window-header: "Utiliser les dégradés sur la barre de titre de la fenêtre"
|
gradient-window-header: "Utiliser les dégradés sur la barre de titre de la fenêtre"
|
||||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
post-form-on-timeline: "Afficher le formulaire en haut du fil"
|
||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
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-reply-target: "Afficher les réponses"
|
show-reply-target: "Afficher les réponses"
|
||||||
show-my-renotes: "Afficher mes republications dans le fil"
|
show-my-renotes: "Afficher mes republications dans le fil"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
@ -637,7 +689,7 @@ desktop/views/components/settings.vue:
|
|||||||
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
|
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
|
||||||
sound: "Son"
|
sound: "Son"
|
||||||
enable-sounds: "Activer le son"
|
enable-sounds: "Activer le son"
|
||||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
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"
|
mobile: "Mobile"
|
||||||
@ -698,7 +750,7 @@ desktop/views/components/settings.2fa.vue:
|
|||||||
desktop/views/components/settings.api.vue:
|
desktop/views/components/settings.api.vue:
|
||||||
intro: "APIを利用するには、上記のトークンを「i」というキーでパラメータに付加してリクエストします。"
|
intro: "APIを利用するには、上記のトークンを「i」というキーでパラメータに付加してリクエストします。"
|
||||||
caution: "アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。"
|
caution: "アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。"
|
||||||
regeneration-of-token: "万が一このトークンが漏れたりその可能性がある場合はトークンを再生成できます。"
|
regeneration-of-token: "Si votre jeton est compromis, vous pouvez le régénérer."
|
||||||
regenerate-token: "Regenerer le token"
|
regenerate-token: "Regenerer le token"
|
||||||
token: "Jeton :"
|
token: "Jeton :"
|
||||||
enter-password: "Veuillez entrer le mot de passe"
|
enter-password: "Veuillez entrer le mot de passe"
|
||||||
@ -753,6 +805,7 @@ desktop/views/components/ui.header.account.vue:
|
|||||||
lists: "Listes"
|
lists: "Listes"
|
||||||
follow-requests: "Demandes de suivi"
|
follow-requests: "Demandes de suivi"
|
||||||
customize: "Personnaliser l'Accueil"
|
customize: "Personnaliser l'Accueil"
|
||||||
|
admin: "Admin"
|
||||||
settings: "Réglages"
|
settings: "Réglages"
|
||||||
signout: "Déconnexion"
|
signout: "Déconnexion"
|
||||||
dark: "Fall in dark"
|
dark: "Fall in dark"
|
||||||
@ -790,14 +843,14 @@ desktop/views/components/window.vue:
|
|||||||
popout: "ポップアウト"
|
popout: "ポップアウト"
|
||||||
close: "Fermer"
|
close: "Fermer"
|
||||||
desktop/views/pages/admin/admin.vue:
|
desktop/views/pages/admin/admin.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "Tableau de bord"
|
||||||
drive: "Drive"
|
drive: "Drive"
|
||||||
users: "Utilisateur·rice·s"
|
users: "Utilisateur·rice·s"
|
||||||
update: "Mises à jour"
|
update: "Mises à jour"
|
||||||
desktop/views/pages/admin/admin.dashboard.vue:
|
desktop/views/pages/admin/admin.dashboard.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "Tableau de bord"
|
||||||
all-users: "Tou·te·s les utilisateur·rice·s"
|
all-users: "Toutes les utilisateurrices"
|
||||||
original-users: "Utilisateur·rice·s sur cette instance"
|
original-users: "Utilisateurrices sur cette instance"
|
||||||
all-notes: "Toutes les publications"
|
all-notes: "Toutes les publications"
|
||||||
original-notes: "Publication sur cette instance"
|
original-notes: "Publication sur cette instance"
|
||||||
invite: "Invitation"
|
invite: "Invitation"
|
||||||
@ -810,25 +863,13 @@ desktop/views/pages/admin/admin.unsuspend-user.vue:
|
|||||||
unsuspend: "Suspension levée"
|
unsuspend: "Suspension levée"
|
||||||
unsuspended: "La suspension de l’utilisateur·rice a été levée avec succès"
|
unsuspended: "La suspension de l’utilisateur·rice a été levée avec succès"
|
||||||
desktop/views/pages/admin/admin.verify-user.vue:
|
desktop/views/pages/admin/admin.verify-user.vue:
|
||||||
verify-user: "ユーザーの公式アカウント設定"
|
verify-user: "Paramètres de vérification du compte utilisateur"
|
||||||
verify: "Vérification du compte"
|
verify: "Vérification du compte"
|
||||||
verified: "Le compte a été vérifié"
|
verified: "Le compte a été vérifié"
|
||||||
desktop/views/pages/admin/admin.unverify-user.vue:
|
desktop/views/pages/admin/admin.unverify-user.vue:
|
||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "Ôter la vérification du compte"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "Ce compte n'est pas vérifié"
|
||||||
desktop/views/pages/admin/admin.notes-chart.vue:
|
|
||||||
title: "投稿"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.users-chart.vue:
|
|
||||||
title: "ユーザー"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.drive-chart.vue:
|
|
||||||
title: "ドライブ"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
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"
|
||||||
@ -837,6 +878,11 @@ desktop/views/pages/deck/deck.note.vue:
|
|||||||
reposted-by: "Reposté par {}"
|
reposted-by: "Reposté 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"
|
||||||
|
desktop/views/pages/stats/stats.vue:
|
||||||
|
all-users: "Toutes les utilisateurrices"
|
||||||
|
original-users: "Utilisateurrices sur cette instance"
|
||||||
|
all-notes: "Toutes les publications"
|
||||||
|
original-notes: "Publication sur cette instance"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "à propos"
|
about: "à propos"
|
||||||
gotit: "J'ai compris !"
|
gotit: "J'ai compris !"
|
||||||
@ -845,7 +891,10 @@ desktop/views/pages/welcome.vue:
|
|||||||
signin-button: "Se connecter"
|
signin-button: "Se connecter"
|
||||||
signup-button: "S'inscrire"
|
signup-button: "S'inscrire"
|
||||||
timeline: "Fil d'actualité"
|
timeline: "Fil d'actualité"
|
||||||
|
announcements: "Notices"
|
||||||
|
photos: "Images récentes"
|
||||||
powered-by-misskey: "Propulsé par <b>Misskey</b>."
|
powered-by-misskey: "Propulsé par <b>Misskey</b>."
|
||||||
|
info: "Informations"
|
||||||
desktop/views/pages/drive.vue:
|
desktop/views/pages/drive.vue:
|
||||||
title: "Lecteur de Misskey"
|
title: "Lecteur de Misskey"
|
||||||
desktop/views/pages/favorites.vue:
|
desktop/views/pages/favorites.vue:
|
||||||
@ -954,12 +1003,15 @@ mobile/views/components/drive-file-chooser.vue:
|
|||||||
select-file: "Choisissez un fichier"
|
select-file: "Choisissez un fichier"
|
||||||
mobile/views/components/drive-folder-chooser.vue:
|
mobile/views/components/drive-folder-chooser.vue:
|
||||||
select-folder: "Choisissez un dossier"
|
select-folder: "Choisissez un dossier"
|
||||||
|
mobile/views/components/drive.file.vue:
|
||||||
|
nsfw: "CW"
|
||||||
mobile/views/components/drive.file-detail.vue:
|
mobile/views/components/drive.file-detail.vue:
|
||||||
download: "Télécharger"
|
download: "Télécharger"
|
||||||
rename: "Renommer"
|
rename: "Renommer"
|
||||||
move: "Déplacer"
|
move: "Déplacer"
|
||||||
hash: "Hash (md5)"
|
hash: "Hash (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
|
nsfw: "CW"
|
||||||
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"
|
||||||
@ -973,7 +1025,7 @@ mobile/views/components/follow-button.vue:
|
|||||||
follow-request: "Demande d'abonnement"
|
follow-request: "Demande d'abonnement"
|
||||||
mobile/views/components/friends-maker.vue:
|
mobile/views/components/friends-maker.vue:
|
||||||
title: "Abonnez-vous aux utilisateurs"
|
title: "Abonnez-vous aux utilisateurs"
|
||||||
empty: "Impossible de trouver des utilisateurs à recommander."
|
empty: "Impossible de trouver des utilisateurs·trices à recommander."
|
||||||
fetching: "Chargement"
|
fetching: "Chargement"
|
||||||
refresh: "Voir plus"
|
refresh: "Voir plus"
|
||||||
close: "Fermer"
|
close: "Fermer"
|
||||||
@ -1026,7 +1078,7 @@ mobile/views/components/timeline.vue:
|
|||||||
load-more: "Afficher plus"
|
load-more: "Afficher plus"
|
||||||
mobile/views/components/ui.header.vue:
|
mobile/views/components/ui.header.vue:
|
||||||
welcome-back: "Content de vous revoir ! "
|
welcome-back: "Content de vous revoir ! "
|
||||||
adjective: "さん"
|
adjective: "M."
|
||||||
mobile/views/components/ui.nav.vue:
|
mobile/views/components/ui.nav.vue:
|
||||||
timeline: "Fil d'actualité"
|
timeline: "Fil d'actualité"
|
||||||
notifications: "Notifications"
|
notifications: "Notifications"
|
||||||
@ -1040,6 +1092,7 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "Jeux"
|
game: "Jeux"
|
||||||
darkmode: "Mode nuit"
|
darkmode: "Mode nuit"
|
||||||
settings: "Réglages"
|
settings: "Réglages"
|
||||||
|
admin: "Admin"
|
||||||
about: "À propose de Misskey"
|
about: "À propose de Misskey"
|
||||||
mobile/views/components/user-timeline.vue:
|
mobile/views/components/user-timeline.vue:
|
||||||
no-notes: "Cette utilisateur semble n'avoir rien poster pour le moment"
|
no-notes: "Cette utilisateur semble n'avoir rien poster pour le moment"
|
||||||
@ -1129,6 +1182,7 @@ mobile/views/pages/settings.vue:
|
|||||||
dark-mode: "Mode nuit"
|
dark-mode: "Mode nuit"
|
||||||
i-am-under-limited-internet: "J'ai un accès Internet limité"
|
i-am-under-limited-internet: "J'ai un accès Internet limité"
|
||||||
circle-icons: "Utiliser des icônes circulaires"
|
circle-icons: "Utiliser des icônes circulaires"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
timeline: "Fil d'actualité"
|
timeline: "Fil d'actualité"
|
||||||
show-reply-target: "Afficher les réponses"
|
show-reply-target: "Afficher les réponses"
|
||||||
show-my-renotes: "Afficher mes republications"
|
show-my-renotes: "Afficher mes republications"
|
||||||
@ -1137,8 +1191,14 @@ mobile/views/pages/settings.vue:
|
|||||||
post-style: "Style de la publication"
|
post-style: "Style de la publication"
|
||||||
post-style-standard: "Standard"
|
post-style-standard: "Standard"
|
||||||
post-style-smart: "Intelligent"
|
post-style-smart: "Intelligent"
|
||||||
|
notification-position: "Style de notification"
|
||||||
|
notification-position-bottom: "en bas"
|
||||||
|
notification-position-top: "en haut"
|
||||||
behavior: "Comportement"
|
behavior: "Comportement"
|
||||||
fetch-on-scroll: "Chargement lors du défilement"
|
fetch-on-scroll: "Chargement lors du défilement"
|
||||||
|
note-visibility: "Visibilité de la publication"
|
||||||
|
default-note-visibility: "Visibilité par défaut"
|
||||||
|
remember-note-visibility: "Se souvenir du mode de visibilité de la publication"
|
||||||
disable-via-mobile: "Ne pas mentionner que ma publication provient d'un 'périphérique mobile'"
|
disable-via-mobile: "Ne pas mentionner que ma publication provient d'un 'périphérique mobile'"
|
||||||
load-raw-images: "Afficher les photos jointes en haute qualité"
|
load-raw-images: "Afficher les photos jointes en haute qualité"
|
||||||
load-remote-media: "Afficher les médias sur le serveur distant"
|
load-remote-media: "Afficher les médias sur le serveur distant"
|
||||||
@ -1157,6 +1217,8 @@ mobile/views/pages/settings.vue:
|
|||||||
update-available-desc: "Les mises à jour seront appliquées une fois la page est rechargée."
|
update-available-desc: "Les mises à jour seront appliquées une fois la page est rechargée."
|
||||||
settings: "Réglages"
|
settings: "Réglages"
|
||||||
signout: "Déconnexion"
|
signout: "Déconnexion"
|
||||||
|
sound: "Sons"
|
||||||
|
enable-sounds: "Activer les sons"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "vous suit"
|
follows-you: "vous suit"
|
||||||
following: "Abonnements"
|
following: "Abonnements"
|
||||||
@ -1201,7 +1263,7 @@ docs:
|
|||||||
res: "Réponse"
|
res: "Réponse"
|
||||||
require-credential: "Ce point de communication nécessite une authentification."
|
require-credential: "Ce point de communication nécessite une authentification."
|
||||||
require-permission: "Ce point de communication nécessite la permission {permission}."
|
require-permission: "Ce point de communication nécessite la permission {permission}."
|
||||||
has-limit: "レートリミットがあります。"
|
has-limit: "Il y’a un taux limite."
|
||||||
duration-limit: "直近{duration}ミリ秒の間のこのエンドポイントへのリクエスト数の合計が{max}を超える場合はリクエストできません。"
|
duration-limit: "直近{duration}ミリ秒の間のこのエンドポイントへのリクエスト数の合計が{max}を超える場合はリクエストできません。"
|
||||||
min-interval-limit: "前回のリクエストから{interval}ミリ秒経っていない場合はリクエストできません。"
|
min-interval-limit: "前回のリクエストから{interval}ミリ秒経っていない場合はリクエストできません。"
|
||||||
show-src: "Vous pouvez voir le code source ce point de communication."
|
show-src: "Vous pouvez voir le code source ce point de communication."
|
@ -5,24 +5,9 @@
|
|||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const yaml = require('js-yaml');
|
const yaml = require('js-yaml');
|
||||||
|
|
||||||
const loadLang = lang => yaml.safeLoad(
|
const langs = ['de-DE', 'en-US', 'fr-FR', 'ja-JP', 'ja-KS', 'pl-PL', 'es-ES', 'nl-NL'];
|
||||||
fs.readFileSync(`${__dirname}/${lang}.yml`, 'utf-8'));
|
|
||||||
|
|
||||||
const native = loadLang('ja');
|
const loadLocale = lang => yaml.safeLoad(fs.readFileSync(`${__dirname}/${lang}.yml`, 'utf-8'));
|
||||||
|
const locales = langs.map(lang => ({ [lang]: loadLocale(lang) }));
|
||||||
|
|
||||||
const langs = {
|
module.exports = locales.reduce((a, b) => ({ ...a, ...b }));
|
||||||
'de': loadLang('de'),
|
|
||||||
'en': loadLang('en'),
|
|
||||||
'fr': loadLang('fr'),
|
|
||||||
'ja': native,
|
|
||||||
'ja-ks': loadLang('ja-ks'),
|
|
||||||
'pl': loadLang('pl'),
|
|
||||||
'es': loadLang('es')
|
|
||||||
};
|
|
||||||
|
|
||||||
Object.values(langs).forEach(locale => {
|
|
||||||
// Extend native language (Japanese)
|
|
||||||
locale = Object.assign({}, native, locale);
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = langs;
|
|
||||||
|
@ -6,6 +6,19 @@ common:
|
|||||||
misskey: "A ⭐ of fediverse"
|
misskey: "A ⭐ of fediverse"
|
||||||
about-title: "A ⭐ of fediverse."
|
about-title: "A ⭐ of fediverse."
|
||||||
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
||||||
|
intro:
|
||||||
|
title: "Misskeyって?"
|
||||||
|
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
|
||||||
|
features: "特徴"
|
||||||
|
rich-contents: "投稿"
|
||||||
|
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
|
||||||
|
reaction: "リアクション"
|
||||||
|
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
|
||||||
|
ui: "インターフェース"
|
||||||
|
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
|
||||||
|
drive: "ドライブ"
|
||||||
|
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
|
||||||
|
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
|
||||||
adblock:
|
adblock:
|
||||||
detected: "広告ブロッカーを無効にしてください"
|
detected: "広告ブロッカーを無効にしてください"
|
||||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
@ -68,6 +81,15 @@ common:
|
|||||||
confused: "こまこまのこまり"
|
confused: "こまこまのこまり"
|
||||||
rip: "RIP"
|
rip: "RIP"
|
||||||
pudding: "Pudding"
|
pudding: "Pudding"
|
||||||
|
note-visibility:
|
||||||
|
public: "公開"
|
||||||
|
home: "ホーム"
|
||||||
|
home-desc: "ホームタイムラインにのみ公開"
|
||||||
|
followers: "フォロワー"
|
||||||
|
followers-desc: "自分のフォロワーにのみ公開"
|
||||||
|
specified: "ダイレクト"
|
||||||
|
specified-desc: "指定したユーザーにのみ公開"
|
||||||
|
private: "非公開"
|
||||||
note-placeholders:
|
note-placeholders:
|
||||||
a: "今どうしてる?"
|
a: "今どうしてる?"
|
||||||
b: "何かありましたか?"
|
b: "何かありましたか?"
|
||||||
@ -84,8 +106,10 @@ common:
|
|||||||
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
||||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||||
|
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||||
verified-user: "公式アカウント"
|
verified-user: "公式アカウント"
|
||||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||||
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@ -259,6 +283,8 @@ common/views/components/nav.vue:
|
|||||||
develop: "開発者"
|
develop: "開発者"
|
||||||
feedback: "フィードバック"
|
feedback: "フィードバック"
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
|
detail: "詳細"
|
||||||
|
copy-link: "リンクをコピー"
|
||||||
favorite: "お気に入り"
|
favorite: "お気に入り"
|
||||||
pin: "ピン留め"
|
pin: "ピン留め"
|
||||||
delete: "削除"
|
delete: "削除"
|
||||||
@ -336,6 +362,9 @@ common/views/components/visibility-chooser.vue:
|
|||||||
specified: "ダイレクト"
|
specified: "ダイレクト"
|
||||||
specified-desc: "指定したユーザーにのみ公開"
|
specified-desc: "指定したユーザーにのみ公開"
|
||||||
private: "非公開"
|
private: "非公開"
|
||||||
|
common/views/components/trends.vue:
|
||||||
|
count: "{}人が投稿"
|
||||||
|
empty: "トレンドなし"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "確認中"
|
fetching: "確認中"
|
||||||
no-broadcasts: "お知らせはありません"
|
no-broadcasts: "お知らせはありません"
|
||||||
@ -359,8 +388,6 @@ common/views/widgets/posts-monitor.vue:
|
|||||||
toggle: "表示を切り替え"
|
toggle: "表示を切り替え"
|
||||||
common/views/widgets/hashtags.vue:
|
common/views/widgets/hashtags.vue:
|
||||||
title: "ハッシュタグ"
|
title: "ハッシュタグ"
|
||||||
count: "{}人が投稿"
|
|
||||||
empty: "トレンドなし"
|
|
||||||
common/views/widgets/server.vue:
|
common/views/widgets/server.vue:
|
||||||
title: "サーバー情報"
|
title: "サーバー情報"
|
||||||
toggle: "表示を切り替え"
|
toggle: "表示を切り替え"
|
||||||
@ -410,6 +437,7 @@ desktop:
|
|||||||
uploading-avatar: "新しいアバターをアップロードしています"
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
avatar-updated: "アバターを更新しました"
|
avatar-updated: "アバターを更新しました"
|
||||||
choose-avatar: "アバターにする画像を選択"
|
choose-avatar: "アバターにする画像を選択"
|
||||||
|
invalid-filetype: "この形式のファイルはサポートされていません"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
@ -423,6 +451,24 @@ desktop/views/components/calendar.vue:
|
|||||||
prev: "前の月"
|
prev: "前の月"
|
||||||
next: "次の月"
|
next: "次の月"
|
||||||
go: "クリックして時間遡行"
|
go: "クリックして時間遡行"
|
||||||
|
desktop/views/components/charts.vue:
|
||||||
|
title: "チャート"
|
||||||
|
per-day: "1日ごと"
|
||||||
|
per-hour: "1時間ごと"
|
||||||
|
notes: "投稿"
|
||||||
|
users: "ユーザー"
|
||||||
|
drive: "ドライブ"
|
||||||
|
charts:
|
||||||
|
notes: "投稿の増減 (統合)"
|
||||||
|
local-notes: "投稿の増減 (ローカル)"
|
||||||
|
remote-notes: "投稿の増減 (リモート)"
|
||||||
|
notes-total: "投稿の累計"
|
||||||
|
users: "ユーザーの増減"
|
||||||
|
users-total: "ユーザーの累計"
|
||||||
|
drive: "ドライブ使用量の増減"
|
||||||
|
drive-total: "ドライブ使用量の累計"
|
||||||
|
drive-files: "ドライブのファイル数の増減"
|
||||||
|
drive-files-total: "ドライブのファイル数の累計"
|
||||||
desktop/views/components/choose-file-from-drive-window.vue:
|
desktop/views/components/choose-file-from-drive-window.vue:
|
||||||
choose-file: "ファイル選択中"
|
choose-file: "ファイル選択中"
|
||||||
upload: "PCからドライブにファイルをアップロード"
|
upload: "PCからドライブにファイルをアップロード"
|
||||||
@ -443,6 +489,7 @@ desktop/views/components/drive-window.vue:
|
|||||||
desktop/views/components/drive.file.vue:
|
desktop/views/components/drive.file.vue:
|
||||||
avatar: "アイコン"
|
avatar: "アイコン"
|
||||||
banner: "バナー"
|
banner: "バナー"
|
||||||
|
nsfw: "閲覧注意"
|
||||||
contextmenu:
|
contextmenu:
|
||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
mark-as-sensitive: "閲覧注意に設定"
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
@ -615,6 +662,9 @@ desktop/views/components/settings.vue:
|
|||||||
behaviour: "動作"
|
behaviour: "動作"
|
||||||
fetch-on-scroll: "スクロールで自動読み込み"
|
fetch-on-scroll: "スクロールで自動読み込み"
|
||||||
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
|
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
auto-popout: "ウィンドウの自動ポップアウト"
|
auto-popout: "ウィンドウの自動ポップアウト"
|
||||||
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
||||||
advanced: "詳細設定"
|
advanced: "詳細設定"
|
||||||
@ -626,9 +676,11 @@ desktop/views/components/settings.vue:
|
|||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
circle-icons: "円形のアイコンを使用"
|
circle-icons: "円形のアイコンを使用"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
|
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
|
||||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
@ -753,6 +805,7 @@ desktop/views/components/ui.header.account.vue:
|
|||||||
lists: "リスト"
|
lists: "リスト"
|
||||||
follow-requests: "フォロー申請"
|
follow-requests: "フォロー申請"
|
||||||
customize: "ホームのカスタマイズ"
|
customize: "ホームのカスタマイズ"
|
||||||
|
admin: "管理"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
dark: "闇に飲まれる"
|
dark: "闇に飲まれる"
|
||||||
@ -798,8 +851,8 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
all-notes: "全てのノート"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスのノート"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
@ -817,18 +870,6 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
desktop/views/pages/admin/admin.notes-chart.vue:
|
|
||||||
title: "投稿"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.users-chart.vue:
|
|
||||||
title: "ユーザー"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.drive-chart.vue:
|
|
||||||
title: "ドライブ"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
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: "メディアビュー"
|
||||||
@ -837,6 +878,11 @@ desktop/views/pages/deck/deck.note.vue:
|
|||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
|
desktop/views/pages/stats/stats.vue:
|
||||||
|
all-users: "全てのユーザー"
|
||||||
|
original-users: "このインスタンスのユーザー"
|
||||||
|
all-notes: "全ての投稿"
|
||||||
|
original-notes: "このインスタンスの投稿"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "詳しく..."
|
about: "詳しく..."
|
||||||
gotit: "わかった"
|
gotit: "わかった"
|
||||||
@ -845,7 +891,10 @@ desktop/views/pages/welcome.vue:
|
|||||||
signin-button: "やってる"
|
signin-button: "やってる"
|
||||||
signup-button: "やる"
|
signup-button: "やる"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
photos: "最近の画像"
|
||||||
powered-by-misskey: "Powered by <b>Misskey</b>."
|
powered-by-misskey: "Powered by <b>Misskey</b>."
|
||||||
|
info: "情報"
|
||||||
desktop/views/pages/drive.vue:
|
desktop/views/pages/drive.vue:
|
||||||
title: "Misskey Drive"
|
title: "Misskey Drive"
|
||||||
desktop/views/pages/favorites.vue:
|
desktop/views/pages/favorites.vue:
|
||||||
@ -954,12 +1003,15 @@ mobile/views/components/drive-file-chooser.vue:
|
|||||||
select-file: "ファイルを選択"
|
select-file: "ファイルを選択"
|
||||||
mobile/views/components/drive-folder-chooser.vue:
|
mobile/views/components/drive-folder-chooser.vue:
|
||||||
select-folder: "フォルダーを選択"
|
select-folder: "フォルダーを選択"
|
||||||
|
mobile/views/components/drive.file.vue:
|
||||||
|
nsfw: "閲覧注意"
|
||||||
mobile/views/components/drive.file-detail.vue:
|
mobile/views/components/drive.file-detail.vue:
|
||||||
download: "ダウンロード"
|
download: "ダウンロード"
|
||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
move: "移動"
|
move: "移動"
|
||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
|
nsfw: "閲覧注意"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@ -1040,6 +1092,7 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "ゲーム"
|
game: "ゲーム"
|
||||||
darkmode: "ダークモード"
|
darkmode: "ダークモード"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
|
admin: "管理"
|
||||||
about: "Misskeyについて"
|
about: "Misskeyについて"
|
||||||
mobile/views/components/user-timeline.vue:
|
mobile/views/components/user-timeline.vue:
|
||||||
no-notes: "このユーザーは投稿していないようです。"
|
no-notes: "このユーザーは投稿していないようです。"
|
||||||
@ -1129,6 +1182,7 @@ mobile/views/pages/settings.vue:
|
|||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
i-am-under-limited-internet: "私は通信を制限されている"
|
i-am-under-limited-internet: "私は通信を制限されている"
|
||||||
circle-icons: "円形のアイコンを使用"
|
circle-icons: "円形のアイコンを使用"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||||
@ -1137,8 +1191,14 @@ mobile/views/pages/settings.vue:
|
|||||||
post-style: "投稿の表示スタイル"
|
post-style: "投稿の表示スタイル"
|
||||||
post-style-standard: "標準"
|
post-style-standard: "標準"
|
||||||
post-style-smart: "スマート"
|
post-style-smart: "スマート"
|
||||||
|
notification-position: "通知の表示"
|
||||||
|
notification-position-bottom: "下"
|
||||||
|
notification-position-top: "上"
|
||||||
behavior: "動作"
|
behavior: "動作"
|
||||||
fetch-on-scroll: "スクロールで自動読み込み"
|
fetch-on-scroll: "スクロールで自動読み込み"
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||||
load-raw-images: "添付された画像を高画質で表示する"
|
load-raw-images: "添付された画像を高画質で表示する"
|
||||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||||
@ -1157,6 +1217,8 @@ mobile/views/pages/settings.vue:
|
|||||||
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
|
sound: "サウンド"
|
||||||
|
enable-sounds: "サウンドを有効にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
File diff suppressed because it is too large
Load Diff
1277
locales/ja-KS.yml
Normal file
1277
locales/ja-KS.yml
Normal file
File diff suppressed because it is too large
Load Diff
1412
locales/ja-ks.yml
1412
locales/ja-ks.yml
File diff suppressed because it is too large
Load Diff
@ -6,6 +6,19 @@ common:
|
|||||||
misskey: "A ⭐ of fediverse"
|
misskey: "A ⭐ of fediverse"
|
||||||
about-title: "A ⭐ of fediverse."
|
about-title: "A ⭐ of fediverse."
|
||||||
about: "Misskey를 찾아 주셔서 감사합니다. Misskey은 지구에서 태어난 <b>분산 마이크로 블로그 SNS </b> 입니다. Fediverse (다양한 SNS로 구성되는 우주)에 존재하는 다른 SNS와 상호 연결되어 있습니다. 잠시 도시의 번잡함에서 벗어나 새로운 인터넷에 다이브 해 보지 않겠습니까."
|
about: "Misskey를 찾아 주셔서 감사합니다. Misskey은 지구에서 태어난 <b>분산 마이크로 블로그 SNS </b> 입니다. Fediverse (다양한 SNS로 구성되는 우주)에 존재하는 다른 SNS와 상호 연결되어 있습니다. 잠시 도시의 번잡함에서 벗어나 새로운 인터넷에 다이브 해 보지 않겠습니까."
|
||||||
|
intro:
|
||||||
|
title: "Misskeyって?"
|
||||||
|
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
|
||||||
|
features: "特徴"
|
||||||
|
rich-contents: "投稿"
|
||||||
|
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
|
||||||
|
reaction: "リアクション"
|
||||||
|
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
|
||||||
|
ui: "インターフェース"
|
||||||
|
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
|
||||||
|
drive: "ドライブ"
|
||||||
|
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
|
||||||
|
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
|
||||||
adblock:
|
adblock:
|
||||||
detected: "광고 차단기를 해제하십시오"
|
detected: "광고 차단기를 해제하십시오"
|
||||||
warning: "<strong>Misskey는 광고를 게재하지 않습니다</strong> 그러나 광고를 차단하는 기능 기능을 사용할 경우 일부 기능을 사용할 수 없게 될 가능성이나 결함이 발생하는 경우가 있습니다."
|
warning: "<strong>Misskey는 광고를 게재하지 않습니다</strong> 그러나 광고를 차단하는 기능 기능을 사용할 경우 일부 기능을 사용할 수 없게 될 가능성이나 결함이 발생하는 경우가 있습니다."
|
||||||
@ -58,7 +71,7 @@ common:
|
|||||||
friday: "금요일"
|
friday: "금요일"
|
||||||
saturday: "토요일"
|
saturday: "토요일"
|
||||||
reactions:
|
reactions:
|
||||||
like: "좋네"
|
like: "いいね"
|
||||||
love: "좋아"
|
love: "좋아"
|
||||||
laugh: "크크"
|
laugh: "크크"
|
||||||
hmm: "음..."
|
hmm: "음..."
|
||||||
@ -68,6 +81,15 @@ common:
|
|||||||
confused: "곤란하고 있어"
|
confused: "곤란하고 있어"
|
||||||
rip: "RIP"
|
rip: "RIP"
|
||||||
pudding: "Pudding"
|
pudding: "Pudding"
|
||||||
|
note-visibility:
|
||||||
|
public: "公開"
|
||||||
|
home: "ホーム"
|
||||||
|
home-desc: "ホームタイムラインにのみ公開"
|
||||||
|
followers: "フォロワー"
|
||||||
|
followers-desc: "自分のフォロワーにのみ公開"
|
||||||
|
specified: "ダイレクト"
|
||||||
|
specified-desc: "指定したユーザーにのみ公開"
|
||||||
|
private: "非公開"
|
||||||
note-placeholders:
|
note-placeholders:
|
||||||
a: "지금 어떻게하고있어?"
|
a: "지금 어떻게하고있어?"
|
||||||
b: "뭔가 있었습니까?"
|
b: "뭔가 있었습니까?"
|
||||||
@ -84,8 +106,10 @@ common:
|
|||||||
my-token-regenerated: "당신의 토큰이 업데이트되어 있기 때문에 로그 아웃합니다."
|
my-token-regenerated: "당신의 토큰이 업데이트되어 있기 때문에 로그 아웃합니다."
|
||||||
i-like-sushi: "나는(푸딩보다 오히려)스시가 좋아"
|
i-like-sushi: "나는(푸딩보다 오히려)스시가 좋아"
|
||||||
show-reversi-board-labels: "리버시 보드의 행과 열 레이블을 표시"
|
show-reversi-board-labels: "리버시 보드의 행과 열 레이블을 표시"
|
||||||
|
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||||
verified-user: "公式アカウント"
|
verified-user: "公式アカウント"
|
||||||
disable-animated-mfm: "게시물의 문자 애니메이션을 비활성화 할"
|
disable-animated-mfm: "게시물의 문자 애니메이션을 비활성화 할"
|
||||||
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "무승부"
|
drawn: "무승부"
|
||||||
my-turn: "당신의 차례입니다"
|
my-turn: "당신의 차례입니다"
|
||||||
@ -259,6 +283,8 @@ common/views/components/nav.vue:
|
|||||||
develop: "開発者"
|
develop: "開発者"
|
||||||
feedback: "フィードバック"
|
feedback: "フィードバック"
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
|
detail: "詳細"
|
||||||
|
copy-link: "リンクをコピー"
|
||||||
favorite: "お気に入り"
|
favorite: "お気に入り"
|
||||||
pin: "ピン留め"
|
pin: "ピン留め"
|
||||||
delete: "削除"
|
delete: "削除"
|
||||||
@ -336,6 +362,9 @@ common/views/components/visibility-chooser.vue:
|
|||||||
specified: "ダイレクト"
|
specified: "ダイレクト"
|
||||||
specified-desc: "指定したユーザーにのみ公開"
|
specified-desc: "指定したユーザーにのみ公開"
|
||||||
private: "非公開"
|
private: "非公開"
|
||||||
|
common/views/components/trends.vue:
|
||||||
|
count: "{}人が投稿"
|
||||||
|
empty: "トレンドなし"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "確認中"
|
fetching: "確認中"
|
||||||
no-broadcasts: "お知らせはありません"
|
no-broadcasts: "お知らせはありません"
|
||||||
@ -359,8 +388,6 @@ common/views/widgets/posts-monitor.vue:
|
|||||||
toggle: "表示を切り替え"
|
toggle: "表示を切り替え"
|
||||||
common/views/widgets/hashtags.vue:
|
common/views/widgets/hashtags.vue:
|
||||||
title: "ハッシュタグ"
|
title: "ハッシュタグ"
|
||||||
count: "{}人が投稿"
|
|
||||||
empty: "トレンドなし"
|
|
||||||
common/views/widgets/server.vue:
|
common/views/widgets/server.vue:
|
||||||
title: "サーバー情報"
|
title: "サーバー情報"
|
||||||
toggle: "表示を切り替え"
|
toggle: "表示を切り替え"
|
||||||
@ -410,6 +437,7 @@ desktop:
|
|||||||
uploading-avatar: "新しいアバターをアップロードしています"
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
avatar-updated: "アバターを更新しました"
|
avatar-updated: "アバターを更新しました"
|
||||||
choose-avatar: "アバターにする画像を選択"
|
choose-avatar: "アバターにする画像を選択"
|
||||||
|
invalid-filetype: "この形式のファイルはサポートされていません"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
@ -423,6 +451,24 @@ desktop/views/components/calendar.vue:
|
|||||||
prev: "前の月"
|
prev: "前の月"
|
||||||
next: "次の月"
|
next: "次の月"
|
||||||
go: "クリックして時間遡行"
|
go: "クリックして時間遡行"
|
||||||
|
desktop/views/components/charts.vue:
|
||||||
|
title: "チャート"
|
||||||
|
per-day: "1日ごと"
|
||||||
|
per-hour: "1時間ごと"
|
||||||
|
notes: "投稿"
|
||||||
|
users: "ユーザー"
|
||||||
|
drive: "ドライブ"
|
||||||
|
charts:
|
||||||
|
notes: "投稿の増減 (統合)"
|
||||||
|
local-notes: "投稿の増減 (ローカル)"
|
||||||
|
remote-notes: "投稿の増減 (リモート)"
|
||||||
|
notes-total: "投稿の累計"
|
||||||
|
users: "ユーザーの増減"
|
||||||
|
users-total: "ユーザーの累計"
|
||||||
|
drive: "ドライブ使用量の増減"
|
||||||
|
drive-total: "ドライブ使用量の累計"
|
||||||
|
drive-files: "ドライブのファイル数の増減"
|
||||||
|
drive-files-total: "ドライブのファイル数の累計"
|
||||||
desktop/views/components/choose-file-from-drive-window.vue:
|
desktop/views/components/choose-file-from-drive-window.vue:
|
||||||
choose-file: "ファイル選択中"
|
choose-file: "ファイル選択中"
|
||||||
upload: "PCからドライブにファイルをアップロード"
|
upload: "PCからドライブにファイルをアップロード"
|
||||||
@ -443,6 +489,7 @@ desktop/views/components/drive-window.vue:
|
|||||||
desktop/views/components/drive.file.vue:
|
desktop/views/components/drive.file.vue:
|
||||||
avatar: "アイコン"
|
avatar: "アイコン"
|
||||||
banner: "バナー"
|
banner: "バナー"
|
||||||
|
nsfw: "閲覧注意"
|
||||||
contextmenu:
|
contextmenu:
|
||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
mark-as-sensitive: "閲覧注意に設定"
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
@ -615,6 +662,9 @@ desktop/views/components/settings.vue:
|
|||||||
behaviour: "動作"
|
behaviour: "動作"
|
||||||
fetch-on-scroll: "スクロールで自動読み込み"
|
fetch-on-scroll: "スクロールで自動読み込み"
|
||||||
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
|
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
auto-popout: "ウィンドウの自動ポップアウト"
|
auto-popout: "ウィンドウの自動ポップアウト"
|
||||||
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
||||||
advanced: "詳細設定"
|
advanced: "詳細設定"
|
||||||
@ -626,9 +676,11 @@ desktop/views/components/settings.vue:
|
|||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
circle-icons: "円形のアイコンを使用"
|
circle-icons: "円形のアイコンを使用"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
|
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
|
||||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
@ -753,6 +805,7 @@ desktop/views/components/ui.header.account.vue:
|
|||||||
lists: "リスト"
|
lists: "リスト"
|
||||||
follow-requests: "フォロー申請"
|
follow-requests: "フォロー申請"
|
||||||
customize: "ホームのカスタマイズ"
|
customize: "ホームのカスタマイズ"
|
||||||
|
admin: "管理"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
dark: "闇に飲まれる"
|
dark: "闇に飲まれる"
|
||||||
@ -798,8 +851,8 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
all-notes: "全てのノート"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスのノート"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
@ -817,18 +870,6 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
desktop/views/pages/admin/admin.notes-chart.vue:
|
|
||||||
title: "投稿"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.users-chart.vue:
|
|
||||||
title: "ユーザー"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.drive-chart.vue:
|
|
||||||
title: "ドライブ"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
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: "メディアビュー"
|
||||||
@ -837,6 +878,11 @@ desktop/views/pages/deck/deck.note.vue:
|
|||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
|
desktop/views/pages/stats/stats.vue:
|
||||||
|
all-users: "全てのユーザー"
|
||||||
|
original-users: "このインスタンスのユーザー"
|
||||||
|
all-notes: "全ての投稿"
|
||||||
|
original-notes: "このインスタンスの投稿"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "詳しく..."
|
about: "詳しく..."
|
||||||
gotit: "わかった"
|
gotit: "わかった"
|
||||||
@ -845,7 +891,10 @@ desktop/views/pages/welcome.vue:
|
|||||||
signin-button: "やってる"
|
signin-button: "やってる"
|
||||||
signup-button: "やる"
|
signup-button: "やる"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
photos: "最近の画像"
|
||||||
powered-by-misskey: "Powered by <b>Misskey</b>."
|
powered-by-misskey: "Powered by <b>Misskey</b>."
|
||||||
|
info: "情報"
|
||||||
desktop/views/pages/drive.vue:
|
desktop/views/pages/drive.vue:
|
||||||
title: "Misskey Drive"
|
title: "Misskey Drive"
|
||||||
desktop/views/pages/favorites.vue:
|
desktop/views/pages/favorites.vue:
|
||||||
@ -954,12 +1003,15 @@ mobile/views/components/drive-file-chooser.vue:
|
|||||||
select-file: "ファイルを選択"
|
select-file: "ファイルを選択"
|
||||||
mobile/views/components/drive-folder-chooser.vue:
|
mobile/views/components/drive-folder-chooser.vue:
|
||||||
select-folder: "フォルダーを選択"
|
select-folder: "フォルダーを選択"
|
||||||
|
mobile/views/components/drive.file.vue:
|
||||||
|
nsfw: "閲覧注意"
|
||||||
mobile/views/components/drive.file-detail.vue:
|
mobile/views/components/drive.file-detail.vue:
|
||||||
download: "ダウンロード"
|
download: "ダウンロード"
|
||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
move: "移動"
|
move: "移動"
|
||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
|
nsfw: "閲覧注意"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@ -1040,6 +1092,7 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "ゲーム"
|
game: "ゲーム"
|
||||||
darkmode: "ダークモード"
|
darkmode: "ダークモード"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
|
admin: "管理"
|
||||||
about: "Misskeyについて"
|
about: "Misskeyについて"
|
||||||
mobile/views/components/user-timeline.vue:
|
mobile/views/components/user-timeline.vue:
|
||||||
no-notes: "このユーザーは投稿していないようです。"
|
no-notes: "このユーザーは投稿していないようです。"
|
||||||
@ -1129,6 +1182,7 @@ mobile/views/pages/settings.vue:
|
|||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
i-am-under-limited-internet: "私は通信を制限されている"
|
i-am-under-limited-internet: "私は通信を制限されている"
|
||||||
circle-icons: "円形のアイコンを使用"
|
circle-icons: "円形のアイコンを使用"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||||
@ -1137,8 +1191,14 @@ mobile/views/pages/settings.vue:
|
|||||||
post-style: "投稿の表示スタイル"
|
post-style: "投稿の表示スタイル"
|
||||||
post-style-standard: "標準"
|
post-style-standard: "標準"
|
||||||
post-style-smart: "スマート"
|
post-style-smart: "スマート"
|
||||||
|
notification-position: "通知の表示"
|
||||||
|
notification-position-bottom: "下"
|
||||||
|
notification-position-top: "上"
|
||||||
behavior: "動作"
|
behavior: "動作"
|
||||||
fetch-on-scroll: "スクロールで自動読み込み"
|
fetch-on-scroll: "スクロールで自動読み込み"
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||||
load-raw-images: "添付された画像を高画質で表示する"
|
load-raw-images: "添付された画像を高画質で表示する"
|
||||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||||
@ -1157,6 +1217,8 @@ mobile/views/pages/settings.vue:
|
|||||||
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
|
sound: "サウンド"
|
||||||
|
enable-sounds: "サウンドを有効にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
1277
locales/nl-NL.yml
Normal file
1277
locales/nl-NL.yml
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,11 +1,24 @@
|
|||||||
---
|
---
|
||||||
meta:
|
meta:
|
||||||
lang: "Português"
|
lang: "norsk"
|
||||||
divider: ""
|
divider: ""
|
||||||
common:
|
common:
|
||||||
misskey: "A ⭐ of fediverse"
|
misskey: "A ⭐ of fediverse"
|
||||||
about-title: "A ⭐ of fediverse."
|
about-title: "A ⭐ of fediverse."
|
||||||
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
||||||
|
intro:
|
||||||
|
title: "Misskeyって?"
|
||||||
|
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
|
||||||
|
features: "特徴"
|
||||||
|
rich-contents: "投稿"
|
||||||
|
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
|
||||||
|
reaction: "リアクション"
|
||||||
|
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
|
||||||
|
ui: "インターフェース"
|
||||||
|
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
|
||||||
|
drive: "ドライブ"
|
||||||
|
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
|
||||||
|
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
|
||||||
adblock:
|
adblock:
|
||||||
detected: "広告ブロッカーを無効にしてください"
|
detected: "広告ブロッカーを無効にしてください"
|
||||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
@ -29,26 +42,26 @@ common:
|
|||||||
reply-from: "{}さんから返信:"
|
reply-from: "{}さんから返信:"
|
||||||
quoted-by: "{}さんが引用:"
|
quoted-by: "{}さんが引用:"
|
||||||
time:
|
time:
|
||||||
unknown: "なぞのじかん"
|
unknown: "ukjent"
|
||||||
future: "未来"
|
future: "fremtidig"
|
||||||
just_now: "たった今"
|
just_now: "akkurat nå"
|
||||||
seconds_ago: "{}秒前"
|
seconds_ago: "{} sekunder siden"
|
||||||
minutes_ago: "{}分前"
|
minutes_ago: "{} minutter siden"
|
||||||
hours_ago: "{}時間前"
|
hours_ago: "{} time siden"
|
||||||
days_ago: "{}日前"
|
days_ago: "{} dag siden"
|
||||||
weeks_ago: "{}週間前"
|
weeks_ago: "{} uke(r) siden"
|
||||||
months_ago: "{}ヶ月前"
|
months_ago: "{} måned(er) siden"
|
||||||
years_ago: "{}年前"
|
years_ago: "{} år siden"
|
||||||
month-and-day: "{month}月 {day}日"
|
month-and-day: "{month}月 {day}日"
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "日"
|
sunday: "S"
|
||||||
monday: "月"
|
monday: "M"
|
||||||
tuesday: "火"
|
tuesday: "T"
|
||||||
wednesday: "水"
|
wednesday: "O"
|
||||||
thursday: "木"
|
thursday: "T"
|
||||||
friday: "金"
|
friday: "F"
|
||||||
saturday: "土"
|
saturday: "L"
|
||||||
weekday:
|
weekday:
|
||||||
sunday: "日曜日"
|
sunday: "日曜日"
|
||||||
monday: "月曜日"
|
monday: "月曜日"
|
||||||
@ -58,16 +71,25 @@ common:
|
|||||||
friday: "金曜日"
|
friday: "金曜日"
|
||||||
saturday: "土曜日"
|
saturday: "土曜日"
|
||||||
reactions:
|
reactions:
|
||||||
like: "いいね"
|
like: "Lik"
|
||||||
love: "しゅき"
|
love: "Elsk"
|
||||||
laugh: "笑"
|
laugh: "Le"
|
||||||
hmm: "ふぅ~む"
|
hmm: "Hmm…?"
|
||||||
surprise: "わお"
|
surprise: "Wow"
|
||||||
congrats: "おめでとう"
|
congrats: "Gratulerer!"
|
||||||
angry: "おこ"
|
angry: "Sint"
|
||||||
confused: "こまこまのこまり"
|
confused: "Forvirret"
|
||||||
rip: "RIP"
|
rip: "RIP"
|
||||||
pudding: "Pudding"
|
pudding: "Pudding"
|
||||||
|
note-visibility:
|
||||||
|
public: "公開"
|
||||||
|
home: "ホーム"
|
||||||
|
home-desc: "ホームタイムラインにのみ公開"
|
||||||
|
followers: "フォロワー"
|
||||||
|
followers-desc: "自分のフォロワーにのみ公開"
|
||||||
|
specified: "ダイレクト"
|
||||||
|
specified-desc: "指定したユーザーにのみ公開"
|
||||||
|
private: "非公開"
|
||||||
note-placeholders:
|
note-placeholders:
|
||||||
a: "今どうしてる?"
|
a: "今どうしてる?"
|
||||||
b: "何かありましたか?"
|
b: "何かありましたか?"
|
||||||
@ -80,12 +102,14 @@ common:
|
|||||||
loading: "読み込み中"
|
loading: "読み込み中"
|
||||||
ok: "わかった"
|
ok: "わかった"
|
||||||
update-available-title: "更新があります"
|
update-available-title: "更新があります"
|
||||||
update-available: "Misskeyの新しいバージョンがあります({newer}。現在{current}を利用中)。ページを再度読み込みすると更新が適用されます。"
|
update-available: "En ny versjon av Misskey er nå tilgjengelig ({newer}, nåværende versjon er {current}). Last inn siden igjen for at oppdateringen skal tre i kraft."
|
||||||
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
my-token-regenerated: "Ditt synbol har blitt generert. Du vil nå bli utlogget."
|
||||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||||
|
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||||
verified-user: "公式アカウント"
|
verified-user: "公式アカウント"
|
||||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||||
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@ -206,8 +230,8 @@ common/views/components/games/reversi/reversi.room.vue:
|
|||||||
ready: "準備完了"
|
ready: "準備完了"
|
||||||
cancel-ready: "準備続行"
|
cancel-ready: "準備続行"
|
||||||
common/views/components/connect-failed.vue:
|
common/views/components/connect-failed.vue:
|
||||||
title: "サーバーに接続できません"
|
title: "Kunne ikke koble til tjeneren."
|
||||||
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
|
description: "Det er enten et problem med internettilknytningen din, eller så har tjeneren blitt tatt ned for vedlikehold. {Prøv igjen} senere."
|
||||||
thanks: "いつもMisskeyをご利用いただきありがとうございます。"
|
thanks: "いつもMisskeyをご利用いただきありがとうございます。"
|
||||||
troubleshoot: "トラブルシュート"
|
troubleshoot: "トラブルシュート"
|
||||||
common/views/components/connect-failed.troubleshooter.vue:
|
common/views/components/connect-failed.troubleshooter.vue:
|
||||||
@ -259,6 +283,8 @@ common/views/components/nav.vue:
|
|||||||
develop: "開発者"
|
develop: "開発者"
|
||||||
feedback: "フィードバック"
|
feedback: "フィードバック"
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
|
detail: "詳細"
|
||||||
|
copy-link: "リンクをコピー"
|
||||||
favorite: "お気に入り"
|
favorite: "お気に入り"
|
||||||
pin: "ピン留め"
|
pin: "ピン留め"
|
||||||
delete: "削除"
|
delete: "削除"
|
||||||
@ -336,6 +362,9 @@ common/views/components/visibility-chooser.vue:
|
|||||||
specified: "ダイレクト"
|
specified: "ダイレクト"
|
||||||
specified-desc: "指定したユーザーにのみ公開"
|
specified-desc: "指定したユーザーにのみ公開"
|
||||||
private: "非公開"
|
private: "非公開"
|
||||||
|
common/views/components/trends.vue:
|
||||||
|
count: "{}人が投稿"
|
||||||
|
empty: "トレンドなし"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "確認中"
|
fetching: "確認中"
|
||||||
no-broadcasts: "お知らせはありません"
|
no-broadcasts: "お知らせはありません"
|
||||||
@ -359,8 +388,6 @@ common/views/widgets/posts-monitor.vue:
|
|||||||
toggle: "表示を切り替え"
|
toggle: "表示を切り替え"
|
||||||
common/views/widgets/hashtags.vue:
|
common/views/widgets/hashtags.vue:
|
||||||
title: "ハッシュタグ"
|
title: "ハッシュタグ"
|
||||||
count: "{}人が投稿"
|
|
||||||
empty: "トレンドなし"
|
|
||||||
common/views/widgets/server.vue:
|
common/views/widgets/server.vue:
|
||||||
title: "サーバー情報"
|
title: "サーバー情報"
|
||||||
toggle: "表示を切り替え"
|
toggle: "表示を切り替え"
|
||||||
@ -410,6 +437,7 @@ desktop:
|
|||||||
uploading-avatar: "新しいアバターをアップロードしています"
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
avatar-updated: "アバターを更新しました"
|
avatar-updated: "アバターを更新しました"
|
||||||
choose-avatar: "アバターにする画像を選択"
|
choose-avatar: "アバターにする画像を選択"
|
||||||
|
invalid-filetype: "この形式のファイルはサポートされていません"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
@ -423,6 +451,24 @@ desktop/views/components/calendar.vue:
|
|||||||
prev: "前の月"
|
prev: "前の月"
|
||||||
next: "次の月"
|
next: "次の月"
|
||||||
go: "クリックして時間遡行"
|
go: "クリックして時間遡行"
|
||||||
|
desktop/views/components/charts.vue:
|
||||||
|
title: "チャート"
|
||||||
|
per-day: "1日ごと"
|
||||||
|
per-hour: "1時間ごと"
|
||||||
|
notes: "投稿"
|
||||||
|
users: "ユーザー"
|
||||||
|
drive: "ドライブ"
|
||||||
|
charts:
|
||||||
|
notes: "投稿の増減 (統合)"
|
||||||
|
local-notes: "投稿の増減 (ローカル)"
|
||||||
|
remote-notes: "投稿の増減 (リモート)"
|
||||||
|
notes-total: "投稿の累計"
|
||||||
|
users: "ユーザーの増減"
|
||||||
|
users-total: "ユーザーの累計"
|
||||||
|
drive: "ドライブ使用量の増減"
|
||||||
|
drive-total: "ドライブ使用量の累計"
|
||||||
|
drive-files: "ドライブのファイル数の増減"
|
||||||
|
drive-files-total: "ドライブのファイル数の累計"
|
||||||
desktop/views/components/choose-file-from-drive-window.vue:
|
desktop/views/components/choose-file-from-drive-window.vue:
|
||||||
choose-file: "ファイル選択中"
|
choose-file: "ファイル選択中"
|
||||||
upload: "PCからドライブにファイルをアップロード"
|
upload: "PCからドライブにファイルをアップロード"
|
||||||
@ -443,6 +489,7 @@ desktop/views/components/drive-window.vue:
|
|||||||
desktop/views/components/drive.file.vue:
|
desktop/views/components/drive.file.vue:
|
||||||
avatar: "アイコン"
|
avatar: "アイコン"
|
||||||
banner: "バナー"
|
banner: "バナー"
|
||||||
|
nsfw: "閲覧注意"
|
||||||
contextmenu:
|
contextmenu:
|
||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
mark-as-sensitive: "閲覧注意に設定"
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
@ -615,6 +662,9 @@ desktop/views/components/settings.vue:
|
|||||||
behaviour: "動作"
|
behaviour: "動作"
|
||||||
fetch-on-scroll: "スクロールで自動読み込み"
|
fetch-on-scroll: "スクロールで自動読み込み"
|
||||||
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
|
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
auto-popout: "ウィンドウの自動ポップアウト"
|
auto-popout: "ウィンドウの自動ポップアウト"
|
||||||
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
||||||
advanced: "詳細設定"
|
advanced: "詳細設定"
|
||||||
@ -626,9 +676,11 @@ desktop/views/components/settings.vue:
|
|||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
circle-icons: "円形のアイコンを使用"
|
circle-icons: "円形のアイコンを使用"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
|
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
|
||||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
@ -753,6 +805,7 @@ desktop/views/components/ui.header.account.vue:
|
|||||||
lists: "リスト"
|
lists: "リスト"
|
||||||
follow-requests: "フォロー申請"
|
follow-requests: "フォロー申請"
|
||||||
customize: "ホームのカスタマイズ"
|
customize: "ホームのカスタマイズ"
|
||||||
|
admin: "管理"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
dark: "闇に飲まれる"
|
dark: "闇に飲まれる"
|
||||||
@ -798,8 +851,8 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
all-notes: "全てのノート"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスのノート"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
@ -817,18 +870,6 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
desktop/views/pages/admin/admin.notes-chart.vue:
|
|
||||||
title: "投稿"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.users-chart.vue:
|
|
||||||
title: "ユーザー"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.drive-chart.vue:
|
|
||||||
title: "ドライブ"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
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: "メディアビュー"
|
||||||
@ -837,6 +878,11 @@ desktop/views/pages/deck/deck.note.vue:
|
|||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
|
desktop/views/pages/stats/stats.vue:
|
||||||
|
all-users: "全てのユーザー"
|
||||||
|
original-users: "このインスタンスのユーザー"
|
||||||
|
all-notes: "全ての投稿"
|
||||||
|
original-notes: "このインスタンスの投稿"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "詳しく..."
|
about: "詳しく..."
|
||||||
gotit: "わかった"
|
gotit: "わかった"
|
||||||
@ -845,7 +891,10 @@ desktop/views/pages/welcome.vue:
|
|||||||
signin-button: "やってる"
|
signin-button: "やってる"
|
||||||
signup-button: "やる"
|
signup-button: "やる"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
photos: "最近の画像"
|
||||||
powered-by-misskey: "Powered by <b>Misskey</b>."
|
powered-by-misskey: "Powered by <b>Misskey</b>."
|
||||||
|
info: "情報"
|
||||||
desktop/views/pages/drive.vue:
|
desktop/views/pages/drive.vue:
|
||||||
title: "Misskey Drive"
|
title: "Misskey Drive"
|
||||||
desktop/views/pages/favorites.vue:
|
desktop/views/pages/favorites.vue:
|
||||||
@ -954,12 +1003,15 @@ mobile/views/components/drive-file-chooser.vue:
|
|||||||
select-file: "ファイルを選択"
|
select-file: "ファイルを選択"
|
||||||
mobile/views/components/drive-folder-chooser.vue:
|
mobile/views/components/drive-folder-chooser.vue:
|
||||||
select-folder: "フォルダーを選択"
|
select-folder: "フォルダーを選択"
|
||||||
|
mobile/views/components/drive.file.vue:
|
||||||
|
nsfw: "閲覧注意"
|
||||||
mobile/views/components/drive.file-detail.vue:
|
mobile/views/components/drive.file-detail.vue:
|
||||||
download: "ダウンロード"
|
download: "ダウンロード"
|
||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
move: "移動"
|
move: "移動"
|
||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
|
nsfw: "閲覧注意"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@ -1040,6 +1092,7 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "ゲーム"
|
game: "ゲーム"
|
||||||
darkmode: "ダークモード"
|
darkmode: "ダークモード"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
|
admin: "管理"
|
||||||
about: "Misskeyについて"
|
about: "Misskeyについて"
|
||||||
mobile/views/components/user-timeline.vue:
|
mobile/views/components/user-timeline.vue:
|
||||||
no-notes: "このユーザーは投稿していないようです。"
|
no-notes: "このユーザーは投稿していないようです。"
|
||||||
@ -1129,6 +1182,7 @@ mobile/views/pages/settings.vue:
|
|||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
i-am-under-limited-internet: "私は通信を制限されている"
|
i-am-under-limited-internet: "私は通信を制限されている"
|
||||||
circle-icons: "円形のアイコンを使用"
|
circle-icons: "円形のアイコンを使用"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||||
@ -1137,8 +1191,14 @@ mobile/views/pages/settings.vue:
|
|||||||
post-style: "投稿の表示スタイル"
|
post-style: "投稿の表示スタイル"
|
||||||
post-style-standard: "標準"
|
post-style-standard: "標準"
|
||||||
post-style-smart: "スマート"
|
post-style-smart: "スマート"
|
||||||
|
notification-position: "通知の表示"
|
||||||
|
notification-position-bottom: "下"
|
||||||
|
notification-position-top: "上"
|
||||||
behavior: "動作"
|
behavior: "動作"
|
||||||
fetch-on-scroll: "スクロールで自動読み込み"
|
fetch-on-scroll: "スクロールで自動読み込み"
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||||
load-raw-images: "添付された画像を高画質で表示する"
|
load-raw-images: "添付された画像を高画質で表示する"
|
||||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||||
@ -1157,6 +1217,8 @@ mobile/views/pages/settings.vue:
|
|||||||
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
|
sound: "サウンド"
|
||||||
|
enable-sounds: "サウンドを有効にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
@ -6,6 +6,19 @@ common:
|
|||||||
misskey: "⭐ Fediwersum"
|
misskey: "⭐ Fediwersum"
|
||||||
about-title: "⭐ Fediwersum"
|
about-title: "⭐ Fediwersum"
|
||||||
about: "Dziękujemy za znalezienie Misskey. Misskey jest <b>zdecentralizowaną platformą mikroblogową</b> powstałą na Ziemi. Ponieważ działa ona w Fediwersum (uniwersum, w którego skład wchodzi wiele sieci społecznościowych), jest ona połączona z innymi platformami społecznościowymi. Spróbujesz odpocząć od zatłoczoneo miasta i zanurzyć się w nowym Internecie?"
|
about: "Dziękujemy za znalezienie Misskey. Misskey jest <b>zdecentralizowaną platformą mikroblogową</b> powstałą na Ziemi. Ponieważ działa ona w Fediwersum (uniwersum, w którego skład wchodzi wiele sieci społecznościowych), jest ona połączona z innymi platformami społecznościowymi. Spróbujesz odpocząć od zatłoczoneo miasta i zanurzyć się w nowym Internecie?"
|
||||||
|
intro:
|
||||||
|
title: "Misskeyって?"
|
||||||
|
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
|
||||||
|
features: "特徴"
|
||||||
|
rich-contents: "投稿"
|
||||||
|
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
|
||||||
|
reaction: "リアクション"
|
||||||
|
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
|
||||||
|
ui: "インターフェース"
|
||||||
|
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
|
||||||
|
drive: "ドライブ"
|
||||||
|
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
|
||||||
|
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
|
||||||
adblock:
|
adblock:
|
||||||
detected: "Spróbuj wyłączyć blokadę reklam."
|
detected: "Spróbuj wyłączyć blokadę reklam."
|
||||||
warning: "<strong>Misskey nie zawiera reklam</strong>, ale część funkcji może nie działać prawidłowo z włączonym blokowaniem reklam."
|
warning: "<strong>Misskey nie zawiera reklam</strong>, ale część funkcji może nie działać prawidłowo z włączonym blokowaniem reklam."
|
||||||
@ -58,7 +71,7 @@ common:
|
|||||||
friday: "Piątek"
|
friday: "Piątek"
|
||||||
saturday: "Sobota"
|
saturday: "Sobota"
|
||||||
reactions:
|
reactions:
|
||||||
like: "Lubię"
|
like: "いいね"
|
||||||
love: "Kocham"
|
love: "Kocham"
|
||||||
laugh: "Śmieszne"
|
laugh: "Śmieszne"
|
||||||
hmm: "Hmm…?"
|
hmm: "Hmm…?"
|
||||||
@ -68,6 +81,15 @@ common:
|
|||||||
confused: "Zmieszany"
|
confused: "Zmieszany"
|
||||||
rip: "RIP"
|
rip: "RIP"
|
||||||
pudding: "Pudding"
|
pudding: "Pudding"
|
||||||
|
note-visibility:
|
||||||
|
public: "公開"
|
||||||
|
home: "ホーム"
|
||||||
|
home-desc: "ホームタイムラインにのみ公開"
|
||||||
|
followers: "フォロワー"
|
||||||
|
followers-desc: "自分のフォロワーにのみ公開"
|
||||||
|
specified: "ダイレクト"
|
||||||
|
specified-desc: "指定したユーザーにのみ公開"
|
||||||
|
private: "非公開"
|
||||||
note-placeholders:
|
note-placeholders:
|
||||||
a: "Co robisz?"
|
a: "Co robisz?"
|
||||||
b: "Co się wydarzyło?"
|
b: "Co się wydarzyło?"
|
||||||
@ -84,8 +106,10 @@ common:
|
|||||||
my-token-regenerated: "Twój token został wygenerowany. Zostaniesz wylogowany."
|
my-token-regenerated: "Twój token został wygenerowany. Zostaniesz wylogowany."
|
||||||
i-like-sushi: "Wolę sushi od puddingu"
|
i-like-sushi: "Wolę sushi od puddingu"
|
||||||
show-reversi-board-labels: "Pokazuj podpisy wierszy i kolumn w Reversi"
|
show-reversi-board-labels: "Pokazuj podpisy wierszy i kolumn w Reversi"
|
||||||
|
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||||
verified-user: "公式アカウント"
|
verified-user: "公式アカウント"
|
||||||
disable-animated-mfm: "Wyłącz animowany tekst we wpisach"
|
disable-animated-mfm: "Wyłącz animowany tekst we wpisach"
|
||||||
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "Remis"
|
drawn: "Remis"
|
||||||
my-turn: "Twoja kolej"
|
my-turn: "Twoja kolej"
|
||||||
@ -259,6 +283,8 @@ common/views/components/nav.vue:
|
|||||||
develop: "Autorzy"
|
develop: "Autorzy"
|
||||||
feedback: "Podziel się opinią"
|
feedback: "Podziel się opinią"
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
|
detail: "詳細"
|
||||||
|
copy-link: "リンクをコピー"
|
||||||
favorite: "Dodaj do ulubionych"
|
favorite: "Dodaj do ulubionych"
|
||||||
pin: "Przypnij do profilu"
|
pin: "Przypnij do profilu"
|
||||||
delete: "Usuń"
|
delete: "Usuń"
|
||||||
@ -336,6 +362,9 @@ common/views/components/visibility-chooser.vue:
|
|||||||
specified: "Bezpośredni"
|
specified: "Bezpośredni"
|
||||||
specified-desc: "Tylko dla określonych użytkowników"
|
specified-desc: "Tylko dla określonych użytkowników"
|
||||||
private: "Prywatny"
|
private: "Prywatny"
|
||||||
|
common/views/components/trends.vue:
|
||||||
|
count: "{}人が投稿"
|
||||||
|
empty: "トレンドなし"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Sprawdzanie"
|
fetching: "Sprawdzanie"
|
||||||
no-broadcasts: "Brak transmisji"
|
no-broadcasts: "Brak transmisji"
|
||||||
@ -359,8 +388,6 @@ common/views/widgets/posts-monitor.vue:
|
|||||||
toggle: "Przełącz widok"
|
toggle: "Przełącz widok"
|
||||||
common/views/widgets/hashtags.vue:
|
common/views/widgets/hashtags.vue:
|
||||||
title: "Hashtagi"
|
title: "Hashtagi"
|
||||||
count: "Wspomniany przez {} użytkowników"
|
|
||||||
empty: "Brak popularnych hashtagów"
|
|
||||||
common/views/widgets/server.vue:
|
common/views/widgets/server.vue:
|
||||||
title: "Informacje o serwerze"
|
title: "Informacje o serwerze"
|
||||||
toggle: "Przełącz widok"
|
toggle: "Przełącz widok"
|
||||||
@ -410,6 +437,7 @@ desktop:
|
|||||||
uploading-avatar: "Wysyłanie awatara"
|
uploading-avatar: "Wysyłanie awatara"
|
||||||
avatar-updated: "Wysłano awatar"
|
avatar-updated: "Wysłano awatar"
|
||||||
choose-avatar: "Wybierz awatar"
|
choose-avatar: "Wybierz awatar"
|
||||||
|
invalid-filetype: "この形式のファイルはサポートされていません"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Czarny … Łącznie"
|
total: "Czarny … Łącznie"
|
||||||
notes: "Niebieski … Wpisy"
|
notes: "Niebieski … Wpisy"
|
||||||
@ -423,6 +451,24 @@ desktop/views/components/calendar.vue:
|
|||||||
prev: "Poprzedni miesiąc"
|
prev: "Poprzedni miesiąc"
|
||||||
next: "Następny miesiąc"
|
next: "Następny miesiąc"
|
||||||
go: "Naciśnij, aby przejść"
|
go: "Naciśnij, aby przejść"
|
||||||
|
desktop/views/components/charts.vue:
|
||||||
|
title: "チャート"
|
||||||
|
per-day: "1日ごと"
|
||||||
|
per-hour: "1時間ごと"
|
||||||
|
notes: "投稿"
|
||||||
|
users: "ユーザー"
|
||||||
|
drive: "ドライブ"
|
||||||
|
charts:
|
||||||
|
notes: "投稿の増減 (統合)"
|
||||||
|
local-notes: "投稿の増減 (ローカル)"
|
||||||
|
remote-notes: "投稿の増減 (リモート)"
|
||||||
|
notes-total: "投稿の累計"
|
||||||
|
users: "ユーザーの増減"
|
||||||
|
users-total: "ユーザーの累計"
|
||||||
|
drive: "ドライブ使用量の増減"
|
||||||
|
drive-total: "ドライブ使用量の累計"
|
||||||
|
drive-files: "ドライブのファイル数の増減"
|
||||||
|
drive-files-total: "ドライブのファイル数の累計"
|
||||||
desktop/views/components/choose-file-from-drive-window.vue:
|
desktop/views/components/choose-file-from-drive-window.vue:
|
||||||
choose-file: "Wybierz plik"
|
choose-file: "Wybierz plik"
|
||||||
upload: "Wyślij pliki z Twojego komputera"
|
upload: "Wyślij pliki z Twojego komputera"
|
||||||
@ -443,6 +489,7 @@ desktop/views/components/drive-window.vue:
|
|||||||
desktop/views/components/drive.file.vue:
|
desktop/views/components/drive.file.vue:
|
||||||
avatar: "Awatar"
|
avatar: "Awatar"
|
||||||
banner: "Baner"
|
banner: "Baner"
|
||||||
|
nsfw: "閲覧注意"
|
||||||
contextmenu:
|
contextmenu:
|
||||||
rename: "Zmień nazwę"
|
rename: "Zmień nazwę"
|
||||||
mark-as-sensitive: "Oznacz jako zawartość wrażliwą"
|
mark-as-sensitive: "Oznacz jako zawartość wrażliwą"
|
||||||
@ -615,6 +662,9 @@ desktop/views/components/settings.vue:
|
|||||||
behaviour: "Zachowanie"
|
behaviour: "Zachowanie"
|
||||||
fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół"
|
fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół"
|
||||||
fetch-on-scroll-desc: "Po przewinięciu na dół strony automatycznie zostaną załadowane nowe treści."
|
fetch-on-scroll-desc: "Po przewinięciu na dół strony automatycznie zostaną załadowane nowe treści."
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
auto-popout: "Automatycznie pojawiające się okna"
|
auto-popout: "Automatycznie pojawiające się okna"
|
||||||
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
||||||
advanced: "Ustawienia zaawansowane"
|
advanced: "Ustawienia zaawansowane"
|
||||||
@ -626,9 +676,11 @@ desktop/views/components/settings.vue:
|
|||||||
delete-wallpaper: "Usuń tło"
|
delete-wallpaper: "Usuń tło"
|
||||||
dark-mode: "Tryb ciemny"
|
dark-mode: "Tryb ciemny"
|
||||||
circle-icons: "Używaj okrągłych ikon"
|
circle-icons: "Używaj okrągłych ikon"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
gradient-window-header: "Używaj gradientów na pasku tytułu okna"
|
gradient-window-header: "Używaj gradientów na pasku tytułu okna"
|
||||||
post-form-on-timeline: "Wyświetlaj formularz tworzenia wpisu w górnej części osi czasu"
|
post-form-on-timeline: "Wyświetlaj formularz tworzenia wpisu w górnej części osi czasu"
|
||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "Pokazuj cel odpowiedzi"
|
show-reply-target: "Pokazuj cel odpowiedzi"
|
||||||
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をタイムラインに表示する"
|
||||||
@ -753,6 +805,7 @@ desktop/views/components/ui.header.account.vue:
|
|||||||
lists: "Listy"
|
lists: "Listy"
|
||||||
follow-requests: "Prośby o śledzenie"
|
follow-requests: "Prośby o śledzenie"
|
||||||
customize: "Dostosuj stronę główną"
|
customize: "Dostosuj stronę główną"
|
||||||
|
admin: "管理"
|
||||||
settings: "Ustawienia"
|
settings: "Ustawienia"
|
||||||
signout: "Wyloguj się"
|
signout: "Wyloguj się"
|
||||||
dark: "Sprowadź ciemność"
|
dark: "Sprowadź ciemność"
|
||||||
@ -798,8 +851,8 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
all-notes: "全てのノート"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスのノート"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
@ -817,18 +870,6 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
desktop/views/pages/admin/admin.notes-chart.vue:
|
|
||||||
title: "投稿"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.users-chart.vue:
|
|
||||||
title: "ユーザー"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.drive-chart.vue:
|
|
||||||
title: "ドライブ"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
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"
|
||||||
@ -837,6 +878,11 @@ desktop/views/pages/deck/deck.note.vue:
|
|||||||
reposted-by: "Udostępniono przez {}"
|
reposted-by: "Udostępniono przez {}"
|
||||||
private: "ten wpis jest prywatny"
|
private: "ten wpis jest prywatny"
|
||||||
deleted: "ten wpis został usunięty"
|
deleted: "ten wpis został usunięty"
|
||||||
|
desktop/views/pages/stats/stats.vue:
|
||||||
|
all-users: "全てのユーザー"
|
||||||
|
original-users: "このインスタンスのユーザー"
|
||||||
|
all-notes: "全ての投稿"
|
||||||
|
original-notes: "このインスタンスの投稿"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "O Misskey"
|
about: "O Misskey"
|
||||||
gotit: "Rozumiem!"
|
gotit: "Rozumiem!"
|
||||||
@ -845,7 +891,10 @@ desktop/views/pages/welcome.vue:
|
|||||||
signin-button: "Zaloguj się"
|
signin-button: "Zaloguj się"
|
||||||
signup-button: "Zarejestruj się"
|
signup-button: "Zarejestruj się"
|
||||||
timeline: "Oś czasu"
|
timeline: "Oś czasu"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
photos: "最近の画像"
|
||||||
powered-by-misskey: "Oparto o <b>Misskey</b>."
|
powered-by-misskey: "Oparto o <b>Misskey</b>."
|
||||||
|
info: "情報"
|
||||||
desktop/views/pages/drive.vue:
|
desktop/views/pages/drive.vue:
|
||||||
title: "Dysk Misskey"
|
title: "Dysk Misskey"
|
||||||
desktop/views/pages/favorites.vue:
|
desktop/views/pages/favorites.vue:
|
||||||
@ -954,12 +1003,15 @@ mobile/views/components/drive-file-chooser.vue:
|
|||||||
select-file: "Wybierz plik"
|
select-file: "Wybierz plik"
|
||||||
mobile/views/components/drive-folder-chooser.vue:
|
mobile/views/components/drive-folder-chooser.vue:
|
||||||
select-folder: "Wybierz katalog"
|
select-folder: "Wybierz katalog"
|
||||||
|
mobile/views/components/drive.file.vue:
|
||||||
|
nsfw: "閲覧注意"
|
||||||
mobile/views/components/drive.file-detail.vue:
|
mobile/views/components/drive.file-detail.vue:
|
||||||
download: "Pobierz"
|
download: "Pobierz"
|
||||||
rename: "Zmień nazwę"
|
rename: "Zmień nazwę"
|
||||||
move: "Przenieś"
|
move: "Przenieś"
|
||||||
hash: "Hash (md5)"
|
hash: "Hash (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
|
nsfw: "閲覧注意"
|
||||||
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ć"
|
||||||
@ -1040,6 +1092,7 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "Gry"
|
game: "Gry"
|
||||||
darkmode: "Tryb ciemny"
|
darkmode: "Tryb ciemny"
|
||||||
settings: "Ustawienia"
|
settings: "Ustawienia"
|
||||||
|
admin: "管理"
|
||||||
about: "O Misskey"
|
about: "O Misskey"
|
||||||
mobile/views/components/user-timeline.vue:
|
mobile/views/components/user-timeline.vue:
|
||||||
no-notes: "Wygląda na to, że ten użytkownik nie opublikował jeszcze niczego"
|
no-notes: "Wygląda na to, że ten użytkownik nie opublikował jeszcze niczego"
|
||||||
@ -1129,6 +1182,7 @@ mobile/views/pages/settings.vue:
|
|||||||
dark-mode: "Tryb ciemny"
|
dark-mode: "Tryb ciemny"
|
||||||
i-am-under-limited-internet: "Ograniczaj zużycie transferu"
|
i-am-under-limited-internet: "Ograniczaj zużycie transferu"
|
||||||
circle-icons: "Używaj okrągłych ikon"
|
circle-icons: "Używaj okrągłych ikon"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
timeline: "Oś czasu"
|
timeline: "Oś czasu"
|
||||||
show-reply-target: "Pokazuj cel odpowiedzi"
|
show-reply-target: "Pokazuj cel odpowiedzi"
|
||||||
show-my-renotes: "Pokazuj moje udostępnienia"
|
show-my-renotes: "Pokazuj moje udostępnienia"
|
||||||
@ -1137,8 +1191,14 @@ mobile/views/pages/settings.vue:
|
|||||||
post-style: "Styl wpisów"
|
post-style: "Styl wpisów"
|
||||||
post-style-standard: "Standardowy"
|
post-style-standard: "Standardowy"
|
||||||
post-style-smart: "Inteligentny"
|
post-style-smart: "Inteligentny"
|
||||||
|
notification-position: "通知の表示"
|
||||||
|
notification-position-bottom: "下"
|
||||||
|
notification-position-top: "上"
|
||||||
behavior: "Zachowanie"
|
behavior: "Zachowanie"
|
||||||
fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół"
|
fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół"
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
disable-via-mobile: "Nie oznaczaj wpisów jako „wysłane z telefonu”"
|
disable-via-mobile: "Nie oznaczaj wpisów jako „wysłane z telefonu”"
|
||||||
load-raw-images: "Wyświetlaj załączone zdjęcia w wysokiej jakości"
|
load-raw-images: "Wyświetlaj załączone zdjęcia w wysokiej jakości"
|
||||||
load-remote-media: "Wyświetlaj zawartość multimedialną ze zdalnych serwerów"
|
load-remote-media: "Wyświetlaj zawartość multimedialną ze zdalnych serwerów"
|
||||||
@ -1157,6 +1217,8 @@ mobile/views/pages/settings.vue:
|
|||||||
update-available-desc: "Odśwież stronę, aby zastosować aktualizację."
|
update-available-desc: "Odśwież stronę, aby zastosować aktualizację."
|
||||||
settings: "Ustawienia"
|
settings: "Ustawienia"
|
||||||
signout: "Wyloguj"
|
signout: "Wyloguj"
|
||||||
|
sound: "サウンド"
|
||||||
|
enable-sounds: "サウンドを有効にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "Śledzi Cię"
|
follows-you: "Śledzi Cię"
|
||||||
following: "Śledzeni"
|
following: "Śledzeni"
|
1277
locales/pt-PT.yml
Normal file
1277
locales/pt-PT.yml
Normal file
File diff suppressed because it is too large
Load Diff
@ -6,6 +6,19 @@ common:
|
|||||||
misskey: "A ⭐ of fediverse"
|
misskey: "A ⭐ of fediverse"
|
||||||
about-title: "A ⭐ of fediverse."
|
about-title: "A ⭐ of fediverse."
|
||||||
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
||||||
|
intro:
|
||||||
|
title: "Misskeyって?"
|
||||||
|
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
|
||||||
|
features: "特徴"
|
||||||
|
rich-contents: "投稿"
|
||||||
|
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
|
||||||
|
reaction: "リアクション"
|
||||||
|
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
|
||||||
|
ui: "インターフェース"
|
||||||
|
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
|
||||||
|
drive: "ドライブ"
|
||||||
|
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
|
||||||
|
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
|
||||||
adblock:
|
adblock:
|
||||||
detected: "広告ブロッカーを無効にしてください"
|
detected: "広告ブロッカーを無効にしてください"
|
||||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
@ -68,6 +81,15 @@ common:
|
|||||||
confused: "こまこまのこまり"
|
confused: "こまこまのこまり"
|
||||||
rip: "RIP"
|
rip: "RIP"
|
||||||
pudding: "Pudding"
|
pudding: "Pudding"
|
||||||
|
note-visibility:
|
||||||
|
public: "公開"
|
||||||
|
home: "ホーム"
|
||||||
|
home-desc: "ホームタイムラインにのみ公開"
|
||||||
|
followers: "フォロワー"
|
||||||
|
followers-desc: "自分のフォロワーにのみ公開"
|
||||||
|
specified: "ダイレクト"
|
||||||
|
specified-desc: "指定したユーザーにのみ公開"
|
||||||
|
private: "非公開"
|
||||||
note-placeholders:
|
note-placeholders:
|
||||||
a: "今どうしてる?"
|
a: "今どうしてる?"
|
||||||
b: "何かありましたか?"
|
b: "何かありましたか?"
|
||||||
@ -84,8 +106,10 @@ common:
|
|||||||
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
||||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||||
|
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||||
verified-user: "公式アカウント"
|
verified-user: "公式アカウント"
|
||||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||||
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@ -259,6 +283,8 @@ common/views/components/nav.vue:
|
|||||||
develop: "開発者"
|
develop: "開発者"
|
||||||
feedback: "フィードバック"
|
feedback: "フィードバック"
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
|
detail: "詳細"
|
||||||
|
copy-link: "リンクをコピー"
|
||||||
favorite: "お気に入り"
|
favorite: "お気に入り"
|
||||||
pin: "ピン留め"
|
pin: "ピン留め"
|
||||||
delete: "削除"
|
delete: "削除"
|
||||||
@ -336,6 +362,9 @@ common/views/components/visibility-chooser.vue:
|
|||||||
specified: "ダイレクト"
|
specified: "ダイレクト"
|
||||||
specified-desc: "指定したユーザーにのみ公開"
|
specified-desc: "指定したユーザーにのみ公開"
|
||||||
private: "非公開"
|
private: "非公開"
|
||||||
|
common/views/components/trends.vue:
|
||||||
|
count: "{}人が投稿"
|
||||||
|
empty: "トレンドなし"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "確認中"
|
fetching: "確認中"
|
||||||
no-broadcasts: "お知らせはありません"
|
no-broadcasts: "お知らせはありません"
|
||||||
@ -359,8 +388,6 @@ common/views/widgets/posts-monitor.vue:
|
|||||||
toggle: "表示を切り替え"
|
toggle: "表示を切り替え"
|
||||||
common/views/widgets/hashtags.vue:
|
common/views/widgets/hashtags.vue:
|
||||||
title: "ハッシュタグ"
|
title: "ハッシュタグ"
|
||||||
count: "{}人が投稿"
|
|
||||||
empty: "トレンドなし"
|
|
||||||
common/views/widgets/server.vue:
|
common/views/widgets/server.vue:
|
||||||
title: "サーバー情報"
|
title: "サーバー情報"
|
||||||
toggle: "表示を切り替え"
|
toggle: "表示を切り替え"
|
||||||
@ -410,6 +437,7 @@ desktop:
|
|||||||
uploading-avatar: "新しいアバターをアップロードしています"
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
avatar-updated: "アバターを更新しました"
|
avatar-updated: "アバターを更新しました"
|
||||||
choose-avatar: "アバターにする画像を選択"
|
choose-avatar: "アバターにする画像を選択"
|
||||||
|
invalid-filetype: "この形式のファイルはサポートされていません"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
@ -423,6 +451,24 @@ desktop/views/components/calendar.vue:
|
|||||||
prev: "前の月"
|
prev: "前の月"
|
||||||
next: "次の月"
|
next: "次の月"
|
||||||
go: "クリックして時間遡行"
|
go: "クリックして時間遡行"
|
||||||
|
desktop/views/components/charts.vue:
|
||||||
|
title: "チャート"
|
||||||
|
per-day: "1日ごと"
|
||||||
|
per-hour: "1時間ごと"
|
||||||
|
notes: "投稿"
|
||||||
|
users: "ユーザー"
|
||||||
|
drive: "ドライブ"
|
||||||
|
charts:
|
||||||
|
notes: "投稿の増減 (統合)"
|
||||||
|
local-notes: "投稿の増減 (ローカル)"
|
||||||
|
remote-notes: "投稿の増減 (リモート)"
|
||||||
|
notes-total: "投稿の累計"
|
||||||
|
users: "ユーザーの増減"
|
||||||
|
users-total: "ユーザーの累計"
|
||||||
|
drive: "ドライブ使用量の増減"
|
||||||
|
drive-total: "ドライブ使用量の累計"
|
||||||
|
drive-files: "ドライブのファイル数の増減"
|
||||||
|
drive-files-total: "ドライブのファイル数の累計"
|
||||||
desktop/views/components/choose-file-from-drive-window.vue:
|
desktop/views/components/choose-file-from-drive-window.vue:
|
||||||
choose-file: "ファイル選択中"
|
choose-file: "ファイル選択中"
|
||||||
upload: "PCからドライブにファイルをアップロード"
|
upload: "PCからドライブにファイルをアップロード"
|
||||||
@ -443,6 +489,7 @@ desktop/views/components/drive-window.vue:
|
|||||||
desktop/views/components/drive.file.vue:
|
desktop/views/components/drive.file.vue:
|
||||||
avatar: "アイコン"
|
avatar: "アイコン"
|
||||||
banner: "バナー"
|
banner: "バナー"
|
||||||
|
nsfw: "閲覧注意"
|
||||||
contextmenu:
|
contextmenu:
|
||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
mark-as-sensitive: "閲覧注意に設定"
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
@ -615,6 +662,9 @@ desktop/views/components/settings.vue:
|
|||||||
behaviour: "動作"
|
behaviour: "動作"
|
||||||
fetch-on-scroll: "スクロールで自動読み込み"
|
fetch-on-scroll: "スクロールで自動読み込み"
|
||||||
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
|
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
auto-popout: "ウィンドウの自動ポップアウト"
|
auto-popout: "ウィンドウの自動ポップアウト"
|
||||||
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
||||||
advanced: "詳細設定"
|
advanced: "詳細設定"
|
||||||
@ -626,9 +676,11 @@ desktop/views/components/settings.vue:
|
|||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
circle-icons: "円形のアイコンを使用"
|
circle-icons: "円形のアイコンを使用"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
|
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
|
||||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
@ -753,6 +805,7 @@ desktop/views/components/ui.header.account.vue:
|
|||||||
lists: "リスト"
|
lists: "リスト"
|
||||||
follow-requests: "フォロー申請"
|
follow-requests: "フォロー申請"
|
||||||
customize: "ホームのカスタマイズ"
|
customize: "ホームのカスタマイズ"
|
||||||
|
admin: "管理"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
dark: "闇に飲まれる"
|
dark: "闇に飲まれる"
|
||||||
@ -798,8 +851,8 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
all-notes: "全てのノート"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスのノート"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
@ -817,18 +870,6 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
desktop/views/pages/admin/admin.notes-chart.vue:
|
|
||||||
title: "投稿"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.users-chart.vue:
|
|
||||||
title: "ユーザー"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.drive-chart.vue:
|
|
||||||
title: "ドライブ"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
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: "メディアビュー"
|
||||||
@ -837,6 +878,11 @@ desktop/views/pages/deck/deck.note.vue:
|
|||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
|
desktop/views/pages/stats/stats.vue:
|
||||||
|
all-users: "全てのユーザー"
|
||||||
|
original-users: "このインスタンスのユーザー"
|
||||||
|
all-notes: "全ての投稿"
|
||||||
|
original-notes: "このインスタンスの投稿"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "詳しく..."
|
about: "詳しく..."
|
||||||
gotit: "わかった"
|
gotit: "わかった"
|
||||||
@ -845,7 +891,10 @@ desktop/views/pages/welcome.vue:
|
|||||||
signin-button: "やってる"
|
signin-button: "やってる"
|
||||||
signup-button: "やる"
|
signup-button: "やる"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
photos: "最近の画像"
|
||||||
powered-by-misskey: "Powered by <b>Misskey</b>."
|
powered-by-misskey: "Powered by <b>Misskey</b>."
|
||||||
|
info: "情報"
|
||||||
desktop/views/pages/drive.vue:
|
desktop/views/pages/drive.vue:
|
||||||
title: "Misskey Drive"
|
title: "Misskey Drive"
|
||||||
desktop/views/pages/favorites.vue:
|
desktop/views/pages/favorites.vue:
|
||||||
@ -954,12 +1003,15 @@ mobile/views/components/drive-file-chooser.vue:
|
|||||||
select-file: "ファイルを選択"
|
select-file: "ファイルを選択"
|
||||||
mobile/views/components/drive-folder-chooser.vue:
|
mobile/views/components/drive-folder-chooser.vue:
|
||||||
select-folder: "フォルダーを選択"
|
select-folder: "フォルダーを選択"
|
||||||
|
mobile/views/components/drive.file.vue:
|
||||||
|
nsfw: "閲覧注意"
|
||||||
mobile/views/components/drive.file-detail.vue:
|
mobile/views/components/drive.file-detail.vue:
|
||||||
download: "ダウンロード"
|
download: "ダウンロード"
|
||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
move: "移動"
|
move: "移動"
|
||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
|
nsfw: "閲覧注意"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@ -1040,6 +1092,7 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "ゲーム"
|
game: "ゲーム"
|
||||||
darkmode: "ダークモード"
|
darkmode: "ダークモード"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
|
admin: "管理"
|
||||||
about: "Misskeyについて"
|
about: "Misskeyについて"
|
||||||
mobile/views/components/user-timeline.vue:
|
mobile/views/components/user-timeline.vue:
|
||||||
no-notes: "このユーザーは投稿していないようです。"
|
no-notes: "このユーザーは投稿していないようです。"
|
||||||
@ -1129,6 +1182,7 @@ mobile/views/pages/settings.vue:
|
|||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
i-am-under-limited-internet: "私は通信を制限されている"
|
i-am-under-limited-internet: "私は通信を制限されている"
|
||||||
circle-icons: "円形のアイコンを使用"
|
circle-icons: "円形のアイコンを使用"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||||
@ -1137,8 +1191,14 @@ mobile/views/pages/settings.vue:
|
|||||||
post-style: "投稿の表示スタイル"
|
post-style: "投稿の表示スタイル"
|
||||||
post-style-standard: "標準"
|
post-style-standard: "標準"
|
||||||
post-style-smart: "スマート"
|
post-style-smart: "スマート"
|
||||||
|
notification-position: "通知の表示"
|
||||||
|
notification-position-bottom: "下"
|
||||||
|
notification-position-top: "上"
|
||||||
behavior: "動作"
|
behavior: "動作"
|
||||||
fetch-on-scroll: "スクロールで自動読み込み"
|
fetch-on-scroll: "スクロールで自動読み込み"
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||||
load-raw-images: "添付された画像を高画質で表示する"
|
load-raw-images: "添付された画像を高画質で表示する"
|
||||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||||
@ -1157,6 +1217,8 @@ mobile/views/pages/settings.vue:
|
|||||||
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
|
sound: "サウンド"
|
||||||
|
enable-sounds: "サウンドを有効にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
@ -6,6 +6,19 @@ common:
|
|||||||
misskey: "A ⭐ of fediverse"
|
misskey: "A ⭐ of fediverse"
|
||||||
about-title: "A ⭐ of fediverse."
|
about-title: "A ⭐ of fediverse."
|
||||||
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
||||||
|
intro:
|
||||||
|
title: "Misskeyって?"
|
||||||
|
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
|
||||||
|
features: "特徴"
|
||||||
|
rich-contents: "投稿"
|
||||||
|
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
|
||||||
|
reaction: "リアクション"
|
||||||
|
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
|
||||||
|
ui: "インターフェース"
|
||||||
|
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
|
||||||
|
drive: "ドライブ"
|
||||||
|
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
|
||||||
|
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
|
||||||
adblock:
|
adblock:
|
||||||
detected: "広告ブロッカーを無効にしてください"
|
detected: "広告ブロッカーを無効にしてください"
|
||||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
@ -68,6 +81,15 @@ common:
|
|||||||
confused: "こまこまのこまり"
|
confused: "こまこまのこまり"
|
||||||
rip: "RIP"
|
rip: "RIP"
|
||||||
pudding: "Pudding"
|
pudding: "Pudding"
|
||||||
|
note-visibility:
|
||||||
|
public: "公開"
|
||||||
|
home: "ホーム"
|
||||||
|
home-desc: "ホームタイムラインにのみ公開"
|
||||||
|
followers: "フォロワー"
|
||||||
|
followers-desc: "自分のフォロワーにのみ公開"
|
||||||
|
specified: "ダイレクト"
|
||||||
|
specified-desc: "指定したユーザーにのみ公開"
|
||||||
|
private: "非公開"
|
||||||
note-placeholders:
|
note-placeholders:
|
||||||
a: "今どうしてる?"
|
a: "今どうしてる?"
|
||||||
b: "何かありましたか?"
|
b: "何かありましたか?"
|
||||||
@ -84,8 +106,10 @@ common:
|
|||||||
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
||||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||||
|
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||||
verified-user: "公式アカウント"
|
verified-user: "公式アカウント"
|
||||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||||
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@ -259,6 +283,8 @@ common/views/components/nav.vue:
|
|||||||
develop: "開発者"
|
develop: "開発者"
|
||||||
feedback: "フィードバック"
|
feedback: "フィードバック"
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
|
detail: "詳細"
|
||||||
|
copy-link: "リンクをコピー"
|
||||||
favorite: "お気に入り"
|
favorite: "お気に入り"
|
||||||
pin: "ピン留め"
|
pin: "ピン留め"
|
||||||
delete: "削除"
|
delete: "削除"
|
||||||
@ -336,6 +362,9 @@ common/views/components/visibility-chooser.vue:
|
|||||||
specified: "ダイレクト"
|
specified: "ダイレクト"
|
||||||
specified-desc: "指定したユーザーにのみ公開"
|
specified-desc: "指定したユーザーにのみ公開"
|
||||||
private: "非公開"
|
private: "非公開"
|
||||||
|
common/views/components/trends.vue:
|
||||||
|
count: "{}人が投稿"
|
||||||
|
empty: "トレンドなし"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "確認中"
|
fetching: "確認中"
|
||||||
no-broadcasts: "お知らせはありません"
|
no-broadcasts: "お知らせはありません"
|
||||||
@ -359,8 +388,6 @@ common/views/widgets/posts-monitor.vue:
|
|||||||
toggle: "表示を切り替え"
|
toggle: "表示を切り替え"
|
||||||
common/views/widgets/hashtags.vue:
|
common/views/widgets/hashtags.vue:
|
||||||
title: "ハッシュタグ"
|
title: "ハッシュタグ"
|
||||||
count: "{}人が投稿"
|
|
||||||
empty: "トレンドなし"
|
|
||||||
common/views/widgets/server.vue:
|
common/views/widgets/server.vue:
|
||||||
title: "サーバー情報"
|
title: "サーバー情報"
|
||||||
toggle: "表示を切り替え"
|
toggle: "表示を切り替え"
|
||||||
@ -410,6 +437,7 @@ desktop:
|
|||||||
uploading-avatar: "新しいアバターをアップロードしています"
|
uploading-avatar: "新しいアバターをアップロードしています"
|
||||||
avatar-updated: "アバターを更新しました"
|
avatar-updated: "アバターを更新しました"
|
||||||
choose-avatar: "アバターにする画像を選択"
|
choose-avatar: "アバターにする画像を選択"
|
||||||
|
invalid-filetype: "この形式のファイルはサポートされていません"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "Black ... Total"
|
total: "Black ... Total"
|
||||||
notes: "Blue ... Notes"
|
notes: "Blue ... Notes"
|
||||||
@ -423,6 +451,24 @@ desktop/views/components/calendar.vue:
|
|||||||
prev: "前の月"
|
prev: "前の月"
|
||||||
next: "次の月"
|
next: "次の月"
|
||||||
go: "クリックして時間遡行"
|
go: "クリックして時間遡行"
|
||||||
|
desktop/views/components/charts.vue:
|
||||||
|
title: "チャート"
|
||||||
|
per-day: "1日ごと"
|
||||||
|
per-hour: "1時間ごと"
|
||||||
|
notes: "投稿"
|
||||||
|
users: "ユーザー"
|
||||||
|
drive: "ドライブ"
|
||||||
|
charts:
|
||||||
|
notes: "投稿の増減 (統合)"
|
||||||
|
local-notes: "投稿の増減 (ローカル)"
|
||||||
|
remote-notes: "投稿の増減 (リモート)"
|
||||||
|
notes-total: "投稿の累計"
|
||||||
|
users: "ユーザーの増減"
|
||||||
|
users-total: "ユーザーの累計"
|
||||||
|
drive: "ドライブ使用量の増減"
|
||||||
|
drive-total: "ドライブ使用量の累計"
|
||||||
|
drive-files: "ドライブのファイル数の増減"
|
||||||
|
drive-files-total: "ドライブのファイル数の累計"
|
||||||
desktop/views/components/choose-file-from-drive-window.vue:
|
desktop/views/components/choose-file-from-drive-window.vue:
|
||||||
choose-file: "ファイル選択中"
|
choose-file: "ファイル選択中"
|
||||||
upload: "PCからドライブにファイルをアップロード"
|
upload: "PCからドライブにファイルをアップロード"
|
||||||
@ -443,6 +489,7 @@ desktop/views/components/drive-window.vue:
|
|||||||
desktop/views/components/drive.file.vue:
|
desktop/views/components/drive.file.vue:
|
||||||
avatar: "アイコン"
|
avatar: "アイコン"
|
||||||
banner: "バナー"
|
banner: "バナー"
|
||||||
|
nsfw: "閲覧注意"
|
||||||
contextmenu:
|
contextmenu:
|
||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
mark-as-sensitive: "閲覧注意に設定"
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
@ -615,6 +662,9 @@ desktop/views/components/settings.vue:
|
|||||||
behaviour: "動作"
|
behaviour: "動作"
|
||||||
fetch-on-scroll: "スクロールで自動読み込み"
|
fetch-on-scroll: "スクロールで自動読み込み"
|
||||||
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
|
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
auto-popout: "ウィンドウの自動ポップアウト"
|
auto-popout: "ウィンドウの自動ポップアウト"
|
||||||
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
||||||
advanced: "詳細設定"
|
advanced: "詳細設定"
|
||||||
@ -626,9 +676,11 @@ desktop/views/components/settings.vue:
|
|||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
circle-icons: "円形のアイコンを使用"
|
circle-icons: "円形のアイコンを使用"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
|
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
|
||||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
@ -753,6 +805,7 @@ desktop/views/components/ui.header.account.vue:
|
|||||||
lists: "リスト"
|
lists: "リスト"
|
||||||
follow-requests: "フォロー申請"
|
follow-requests: "フォロー申請"
|
||||||
customize: "ホームのカスタマイズ"
|
customize: "ホームのカスタマイズ"
|
||||||
|
admin: "管理"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
dark: "闇に飲まれる"
|
dark: "闇に飲まれる"
|
||||||
@ -798,8 +851,8 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
all-notes: "全てのノート"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスのノート"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
@ -817,18 +870,6 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
desktop/views/pages/admin/admin.notes-chart.vue:
|
|
||||||
title: "投稿"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.users-chart.vue:
|
|
||||||
title: "ユーザー"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
desktop/views/pages/admin/admin.drive-chart.vue:
|
|
||||||
title: "ドライブ"
|
|
||||||
local: "ローカル"
|
|
||||||
remote: "リモート"
|
|
||||||
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: "メディアビュー"
|
||||||
@ -837,6 +878,11 @@ desktop/views/pages/deck/deck.note.vue:
|
|||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
|
desktop/views/pages/stats/stats.vue:
|
||||||
|
all-users: "全てのユーザー"
|
||||||
|
original-users: "このインスタンスのユーザー"
|
||||||
|
all-notes: "全ての投稿"
|
||||||
|
original-notes: "このインスタンスの投稿"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "詳しく..."
|
about: "詳しく..."
|
||||||
gotit: "わかった"
|
gotit: "わかった"
|
||||||
@ -845,7 +891,10 @@ desktop/views/pages/welcome.vue:
|
|||||||
signin-button: "やってる"
|
signin-button: "やってる"
|
||||||
signup-button: "やる"
|
signup-button: "やる"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
photos: "最近の画像"
|
||||||
powered-by-misskey: "Powered by <b>Misskey</b>."
|
powered-by-misskey: "Powered by <b>Misskey</b>."
|
||||||
|
info: "情報"
|
||||||
desktop/views/pages/drive.vue:
|
desktop/views/pages/drive.vue:
|
||||||
title: "Misskey Drive"
|
title: "Misskey Drive"
|
||||||
desktop/views/pages/favorites.vue:
|
desktop/views/pages/favorites.vue:
|
||||||
@ -954,12 +1003,15 @@ mobile/views/components/drive-file-chooser.vue:
|
|||||||
select-file: "ファイルを選択"
|
select-file: "ファイルを選択"
|
||||||
mobile/views/components/drive-folder-chooser.vue:
|
mobile/views/components/drive-folder-chooser.vue:
|
||||||
select-folder: "フォルダーを選択"
|
select-folder: "フォルダーを選択"
|
||||||
|
mobile/views/components/drive.file.vue:
|
||||||
|
nsfw: "閲覧注意"
|
||||||
mobile/views/components/drive.file-detail.vue:
|
mobile/views/components/drive.file-detail.vue:
|
||||||
download: "ダウンロード"
|
download: "ダウンロード"
|
||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
move: "移動"
|
move: "移動"
|
||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
|
nsfw: "閲覧注意"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@ -1040,6 +1092,7 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "ゲーム"
|
game: "ゲーム"
|
||||||
darkmode: "ダークモード"
|
darkmode: "ダークモード"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
|
admin: "管理"
|
||||||
about: "Misskeyについて"
|
about: "Misskeyについて"
|
||||||
mobile/views/components/user-timeline.vue:
|
mobile/views/components/user-timeline.vue:
|
||||||
no-notes: "このユーザーは投稿していないようです。"
|
no-notes: "このユーザーは投稿していないようです。"
|
||||||
@ -1129,6 +1182,7 @@ mobile/views/pages/settings.vue:
|
|||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
i-am-under-limited-internet: "私は通信を制限されている"
|
i-am-under-limited-internet: "私は通信を制限されている"
|
||||||
circle-icons: "円形のアイコンを使用"
|
circle-icons: "円形のアイコンを使用"
|
||||||
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
show-my-renotes: "自分の行ったRenoteを表示する"
|
show-my-renotes: "自分の行ったRenoteを表示する"
|
||||||
@ -1137,8 +1191,14 @@ mobile/views/pages/settings.vue:
|
|||||||
post-style: "投稿の表示スタイル"
|
post-style: "投稿の表示スタイル"
|
||||||
post-style-standard: "標準"
|
post-style-standard: "標準"
|
||||||
post-style-smart: "スマート"
|
post-style-smart: "スマート"
|
||||||
|
notification-position: "通知の表示"
|
||||||
|
notification-position-bottom: "下"
|
||||||
|
notification-position-top: "上"
|
||||||
behavior: "動作"
|
behavior: "動作"
|
||||||
fetch-on-scroll: "スクロールで自動読み込み"
|
fetch-on-scroll: "スクロールで自動読み込み"
|
||||||
|
note-visibility: "投稿の公開範囲"
|
||||||
|
default-note-visibility: "デフォルトの公開範囲"
|
||||||
|
remember-note-visibility: "投稿の公開範囲を記憶する"
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||||
load-raw-images: "添付された画像を高画質で表示する"
|
load-raw-images: "添付された画像を高画質で表示する"
|
||||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||||
@ -1157,6 +1217,8 @@ mobile/views/pages/settings.vue:
|
|||||||
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
|
sound: "サウンド"
|
||||||
|
enable-sounds: "サウンドを有効にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
47
package.json
47
package.json
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"author": "syuilo <i@syuilo.com>",
|
"author": "syuilo <i@syuilo.com>",
|
||||||
"version": "7.0.0",
|
"version": "8.35.0",
|
||||||
"clientVersion": "1.0.8654",
|
"clientVersion": "1.0.9589",
|
||||||
"codename": "nighthike",
|
"codename": "nighthike",
|
||||||
"main": "./built/index.js",
|
"main": "./built/index.js",
|
||||||
"private": true,
|
"private": true,
|
||||||
@ -32,7 +32,7 @@
|
|||||||
"@types/debug": "0.0.30",
|
"@types/debug": "0.0.30",
|
||||||
"@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.25",
|
"@types/elasticsearch": "5.0.26",
|
||||||
"@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",
|
||||||
@ -55,12 +55,12 @@
|
|||||||
"@types/koa-send": "4.1.1",
|
"@types/koa-send": "4.1.1",
|
||||||
"@types/koa-views": "2.0.3",
|
"@types/koa-views": "2.0.3",
|
||||||
"@types/koa__cors": "2.2.3",
|
"@types/koa__cors": "2.2.3",
|
||||||
"@types/minio": "6.0.2",
|
"@types/minio": "7.0.0",
|
||||||
"@types/mkdirp": "0.5.2",
|
"@types/mkdirp": "0.5.2",
|
||||||
"@types/mocha": "5.2.3",
|
"@types/mocha": "5.2.3",
|
||||||
"@types/mongodb": "3.1.4",
|
"@types/mongodb": "3.1.4",
|
||||||
"@types/ms": "0.7.30",
|
"@types/ms": "0.7.30",
|
||||||
"@types/node": "10.7.1",
|
"@types/node": "10.9.4",
|
||||||
"@types/portscanner": "2.1.0",
|
"@types/portscanner": "2.1.0",
|
||||||
"@types/pug": "2.0.4",
|
"@types/pug": "2.0.4",
|
||||||
"@types/qrcode": "1.2.0",
|
"@types/qrcode": "1.2.0",
|
||||||
@ -70,17 +70,17 @@
|
|||||||
"@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.9",
|
"@types/sharp": "0.17.10",
|
||||||
"@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",
|
||||||
"@types/systeminformation": "3.23.0",
|
"@types/systeminformation": "3.23.0",
|
||||||
"@types/tmp": "0.0.33",
|
"@types/tmp": "0.0.33",
|
||||||
"@types/uuid": "3.4.3",
|
"@types/uuid": "3.4.4",
|
||||||
"@types/webpack": "4.4.10",
|
"@types/webpack": "4.4.11",
|
||||||
"@types/webpack-stream": "3.2.10",
|
"@types/webpack-stream": "3.2.10",
|
||||||
"@types/websocket": "0.0.39",
|
"@types/websocket": "0.0.40",
|
||||||
"@types/ws": "6.0.0",
|
"@types/ws": "6.0.1",
|
||||||
"animejs": "2.2.0",
|
"animejs": "2.2.0",
|
||||||
"autosize": "4.0.2",
|
"autosize": "4.0.2",
|
||||||
"autwh": "0.1.0",
|
"autwh": "0.1.0",
|
||||||
@ -89,6 +89,7 @@
|
|||||||
"bootstrap-vue": "2.0.0-rc.11",
|
"bootstrap-vue": "2.0.0-rc.11",
|
||||||
"cafy": "11.3.0",
|
"cafy": "11.3.0",
|
||||||
"chalk": "2.4.1",
|
"chalk": "2.4.1",
|
||||||
|
"chart.js": "2.7.2",
|
||||||
"commander": "2.17.1",
|
"commander": "2.17.1",
|
||||||
"crc-32": "1.2.0",
|
"crc-32": "1.2.0",
|
||||||
"css-loader": "1.0.0",
|
"css-loader": "1.0.0",
|
||||||
@ -126,7 +127,7 @@
|
|||||||
"gulp-util": "3.0.8",
|
"gulp-util": "3.0.8",
|
||||||
"hard-source-webpack-plugin": "0.12.0",
|
"hard-source-webpack-plugin": "0.12.0",
|
||||||
"highlight.js": "9.12.0",
|
"highlight.js": "9.12.0",
|
||||||
"html-minifier": "3.5.19",
|
"html-minifier": "3.5.20",
|
||||||
"http-signature": "1.2.0",
|
"http-signature": "1.2.0",
|
||||||
"insert-text-at-cursor": "0.1.1",
|
"insert-text-at-cursor": "0.1.1",
|
||||||
"is-root": "2.0.0",
|
"is-root": "2.0.0",
|
||||||
@ -149,16 +150,18 @@
|
|||||||
"loader-utils": "1.1.0",
|
"loader-utils": "1.1.0",
|
||||||
"lodash.assign": "4.2.0",
|
"lodash.assign": "4.2.0",
|
||||||
"mecab-async": "0.1.2",
|
"mecab-async": "0.1.2",
|
||||||
"minio": "7.0.0",
|
"merge-options": "1.0.1",
|
||||||
|
"minio": "7.0.1",
|
||||||
"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.1",
|
||||||
"monk": "6.0.6",
|
"monk": "6.0.6",
|
||||||
"ms": "2.1.1",
|
"ms": "2.1.1",
|
||||||
"nan": "2.10.0",
|
"nan": "2.11.0",
|
||||||
|
"nested-property": "0.0.7",
|
||||||
"node-sass": "4.9.3",
|
"node-sass": "4.9.3",
|
||||||
"node-sass-json-importer": "3.3.1",
|
"node-sass-json-importer": "4.0.1",
|
||||||
"nprogress": "0.2.0",
|
"nprogress": "0.2.0",
|
||||||
"object-assign-deep": "0.4.0",
|
"object-assign-deep": "0.4.0",
|
||||||
"on-build-webpack": "0.1.0",
|
"on-build-webpack": "0.1.0",
|
||||||
@ -181,17 +184,17 @@
|
|||||||
"s-age": "1.1.2",
|
"s-age": "1.1.2",
|
||||||
"sass-loader": "7.1.0",
|
"sass-loader": "7.1.0",
|
||||||
"seedrandom": "2.4.4",
|
"seedrandom": "2.4.4",
|
||||||
"sharp": "0.20.5",
|
"sharp": "0.20.7",
|
||||||
"showdown": "1.8.6",
|
"showdown": "1.8.6",
|
||||||
"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",
|
||||||
"stringz": "1.0.0",
|
"stringz": "1.0.0",
|
||||||
"style-loader": "0.22.1",
|
"style-loader": "0.23.0",
|
||||||
"stylus": "0.54.5",
|
"stylus": "0.54.5",
|
||||||
"stylus-loader": "3.0.2",
|
"stylus-loader": "3.0.2",
|
||||||
"summaly": "2.1.3",
|
"summaly": "2.2.0",
|
||||||
"systeminformation": "3.42.9",
|
"systeminformation": "3.45.1",
|
||||||
"syuilo-password-strength": "0.0.1",
|
"syuilo-password-strength": "0.0.1",
|
||||||
"textarea-caret": "3.1.0",
|
"textarea-caret": "3.1.0",
|
||||||
"tmp": "0.0.33",
|
"tmp": "0.0.33",
|
||||||
@ -205,19 +208,21 @@
|
|||||||
"uuid": "3.3.2",
|
"uuid": "3.3.2",
|
||||||
"v-animate-css": "0.0.2",
|
"v-animate-css": "0.0.2",
|
||||||
"vue": "2.5.17",
|
"vue": "2.5.17",
|
||||||
|
"vue-chartjs": "3.4.0",
|
||||||
"vue-cropperjs": "2.2.1",
|
"vue-cropperjs": "2.2.1",
|
||||||
"vue-js-modal": "1.3.17",
|
"vue-js-modal": "1.3.26",
|
||||||
"vue-json-tree-view": "2.1.4",
|
"vue-json-tree-view": "2.1.4",
|
||||||
"vue-loader": "15.3.0",
|
"vue-loader": "15.4.1",
|
||||||
"vue-router": "3.0.1",
|
"vue-router": "3.0.1",
|
||||||
"vue-style-loader": "4.1.2",
|
"vue-style-loader": "4.1.2",
|
||||||
"vue-template-compiler": "2.5.17",
|
"vue-template-compiler": "2.5.17",
|
||||||
"vuedraggable": "2.16.0",
|
"vuedraggable": "2.16.0",
|
||||||
|
"vuewordcloud": "18.7.11",
|
||||||
"vuex": "3.0.1",
|
"vuex": "3.0.1",
|
||||||
"vuex-persistedstate": "2.5.4",
|
"vuex-persistedstate": "2.5.4",
|
||||||
"web-push": "3.3.2",
|
"web-push": "3.3.2",
|
||||||
"webfinger.js": "2.6.6",
|
"webfinger.js": "2.6.6",
|
||||||
"webpack": "4.16.5",
|
"webpack": "4.17.2",
|
||||||
"webpack-cli": "3.1.0",
|
"webpack-cli": "3.1.0",
|
||||||
"websocket": "1.0.26",
|
"websocket": "1.0.26",
|
||||||
"ws": "6.0.0",
|
"ws": "6.0.0",
|
||||||
|
@ -6,6 +6,10 @@ html
|
|||||||
&, *
|
&, *
|
||||||
cursor progress !important
|
cursor progress !important
|
||||||
|
|
||||||
|
html
|
||||||
|
// iOSのため
|
||||||
|
overflow auto
|
||||||
|
|
||||||
body
|
body
|
||||||
overflow-wrap break-word
|
overflow-wrap break-word
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<div class="app">
|
<div class="app">
|
||||||
<section>
|
<section>
|
||||||
<h2>{{ app.name }}</h2>
|
<h2>{{ app.name }}</h2>
|
||||||
<p class="nid">{{ app.nameId }}</p>
|
<p class="id">{{ app.id }}</p>
|
||||||
<p class="description">{{ app.description }}</p>
|
<p class="description">{{ app.description }}</p>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
|
@ -80,7 +80,7 @@ export default Vue.extend({
|
|||||||
accepted() {
|
accepted() {
|
||||||
this.state = 'accepted';
|
this.state = 'accepted';
|
||||||
if (this.session.app.callbackUrl) {
|
if (this.session.app.callbackUrl) {
|
||||||
location.href = this.session.app.callbackUrl + '?token=' + this.session.token;
|
location.href = `${this.session.app.callbackUrl}?token=${this.session.token}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const langs = LANGS;
|
||||||
|
|
||||||
//#region Load settings
|
//#region Load settings
|
||||||
let settings = null;
|
let settings = null;
|
||||||
const vuex = localStorage.getItem('vuex');
|
const vuex = localStorage.getItem('vuex');
|
||||||
@ -32,19 +34,28 @@
|
|||||||
//#region Detect app name
|
//#region Detect app name
|
||||||
let app = null;
|
let app = null;
|
||||||
|
|
||||||
if (url.pathname == '/docs' || url.pathname.startsWith('/docs/')) app = 'docs';
|
if (`${url.pathname}/`.startsWith('/docs/')) app = 'docs';
|
||||||
if (url.pathname == '/dev' || url.pathname.startsWith('/dev/')) app = 'dev';
|
if (`${url.pathname}/`.startsWith('/dev/')) app = 'dev';
|
||||||
if (url.pathname == '/auth' || url.pathname.startsWith('/auth/')) app = 'auth';
|
if (`${url.pathname}/`.startsWith('/auth/')) app = 'auth';
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region Detect the user language
|
//#region Detect the user language
|
||||||
let lang = navigator.language.split('-')[0];
|
let lang = null;
|
||||||
|
|
||||||
// The default language is English
|
if (langs.includes(navigator.language)) {
|
||||||
if (!LANGS.includes(lang)) lang = 'en';
|
lang = navigator.language;
|
||||||
|
} else {
|
||||||
|
lang = langs.find(x => x.split('-')[0] == navigator.language);
|
||||||
|
|
||||||
if (settings) {
|
if (lang == null) {
|
||||||
if (settings.device.lang) lang = settings.device.lang;
|
// Fallback
|
||||||
|
lang = 'en-US';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (settings && settings.device.lang &&
|
||||||
|
langs.includes(settings.device.lang)) {
|
||||||
|
lang = settings.device.lang;
|
||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
@ -85,7 +96,7 @@
|
|||||||
|
|
||||||
// Get salt query
|
// Get salt query
|
||||||
const salt = localStorage.getItem('salt')
|
const salt = localStorage.getItem('salt')
|
||||||
? '?salt=' + localStorage.getItem('salt')
|
? `?salt=${localStorage.getItem('salt')}`
|
||||||
: '';
|
: '';
|
||||||
|
|
||||||
// Load an app script
|
// Load an app script
|
||||||
@ -104,7 +115,7 @@
|
|||||||
// グローバルにタイマーIDを代入しておく
|
// グローバルにタイマーIDを代入しておく
|
||||||
window.mkBootTimer = window.setTimeout(async () => {
|
window.mkBootTimer = window.setTimeout(async () => {
|
||||||
// Fetch meta
|
// Fetch meta
|
||||||
const res = await fetch(API + '/meta', {
|
const res = await fetch('/api/meta', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
cache: 'no-cache'
|
cache: 'no-cache'
|
||||||
});
|
});
|
||||||
@ -131,7 +142,7 @@
|
|||||||
// Random
|
// Random
|
||||||
localStorage.setItem('salt', Math.random().toString());
|
localStorage.setItem('salt', Math.random().toString());
|
||||||
|
|
||||||
// Clear cache (serive worker)
|
// Clear cache (service worker)
|
||||||
try {
|
try {
|
||||||
navigator.serviceWorker.controller.postMessage('clear');
|
navigator.serviceWorker.controller.postMessage('clear');
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ export default async function(mios: MiOS, force = false, silent = false) {
|
|||||||
localStorage.setItem('should-refresh', 'true');
|
localStorage.setItem('should-refresh', 'true');
|
||||||
localStorage.setItem('v', newer);
|
localStorage.setItem('v', newer);
|
||||||
|
|
||||||
// Clear cache (serive worker)
|
// Clear cache (service worker)
|
||||||
try {
|
try {
|
||||||
if (navigator.serviceWorker.controller) {
|
if (navigator.serviceWorker.controller) {
|
||||||
navigator.serviceWorker.controller.postMessage('clear');
|
navigator.serviceWorker.controller.postMessage('clear');
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
const gcd = (a, b) => !b ? a : gcd(b, a % b);
|
|
||||||
export default gcd;
|
|
@ -1,53 +0,0 @@
|
|||||||
export default function(qs: string) {
|
|
||||||
const q = {
|
|
||||||
text: ''
|
|
||||||
};
|
|
||||||
|
|
||||||
qs.split(' ').forEach(x => {
|
|
||||||
if (/^([a-z_]+?):(.+?)$/.test(x)) {
|
|
||||||
const [key, value] = x.split(':');
|
|
||||||
switch (key) {
|
|
||||||
case 'user':
|
|
||||||
q['includeUserUsernames'] = value.split(',');
|
|
||||||
break;
|
|
||||||
case 'exclude_user':
|
|
||||||
q['excludeUserUsernames'] = value.split(',');
|
|
||||||
break;
|
|
||||||
case 'follow':
|
|
||||||
q['following'] = value == 'null' ? null : value == 'true';
|
|
||||||
break;
|
|
||||||
case 'reply':
|
|
||||||
q['reply'] = value == 'null' ? null : value == 'true';
|
|
||||||
break;
|
|
||||||
case 'renote':
|
|
||||||
q['renote'] = value == 'null' ? null : value == 'true';
|
|
||||||
break;
|
|
||||||
case 'media':
|
|
||||||
q['media'] = value == 'null' ? null : value == 'true';
|
|
||||||
break;
|
|
||||||
case 'poll':
|
|
||||||
q['poll'] = value == 'null' ? null : value == 'true';
|
|
||||||
break;
|
|
||||||
case 'until':
|
|
||||||
case 'since':
|
|
||||||
// YYYY-MM-DD
|
|
||||||
if (/^[0-9]+\-[0-9]+\-[0-9]+$/) {
|
|
||||||
const [yyyy, mm, dd] = value.split('-');
|
|
||||||
q[`${key}_date`] = (new Date(parseInt(yyyy, 10), parseInt(mm, 10) - 1, parseInt(dd, 10))).getTime();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
q[key] = value;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
q.text += x + ' ';
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (q.text) {
|
|
||||||
q.text = q.text.trim();
|
|
||||||
}
|
|
||||||
|
|
||||||
return q;
|
|
||||||
}
|
|
@ -3,8 +3,10 @@ import MiOS from '../../../../../mios';
|
|||||||
|
|
||||||
export class ReversiGameStream extends Stream {
|
export class ReversiGameStream extends Stream {
|
||||||
constructor(os: MiOS, me, game) {
|
constructor(os: MiOS, me, game) {
|
||||||
super(os, 'games/reversi-game', {
|
super(os, 'games/reversi-game', me ? {
|
||||||
i: me ? me.token : null,
|
i: me.token,
|
||||||
|
game: game.id
|
||||||
|
} : {
|
||||||
game: game.id
|
game: game.id
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -7,9 +7,9 @@ import MiOS from '../../../mios';
|
|||||||
*/
|
*/
|
||||||
export class LocalTimelineStream extends Stream {
|
export class LocalTimelineStream extends Stream {
|
||||||
constructor(os: MiOS, me) {
|
constructor(os: MiOS, me) {
|
||||||
super(os, 'local-timeline', {
|
super(os, 'local-timeline', me ? {
|
||||||
i: me.token
|
i: me.token
|
||||||
});
|
} : {});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { EventEmitter } from 'eventemitter3';
|
import { EventEmitter } from 'eventemitter3';
|
||||||
import * as uuid from 'uuid';
|
import * as uuid from 'uuid';
|
||||||
import Connection from './stream';
|
import Connection from './stream';
|
||||||
|
import { erase } from '../../../../../prelude/array';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ストリーム接続を管理するクラス
|
* ストリーム接続を管理するクラス
|
||||||
@ -89,7 +90,7 @@ export default abstract class StreamManager<T extends Connection> extends EventE
|
|||||||
* @param userId use で発行したユーザーID
|
* @param userId use で発行したユーザーID
|
||||||
*/
|
*/
|
||||||
public dispose(userId) {
|
public dispose(userId) {
|
||||||
this.users = this.users.filter(id => id != userId);
|
this.users = erase(userId, this.users);
|
||||||
|
|
||||||
this._connection.user = `Managed (${ this.users.length })`;
|
this._connection.user = `Managed (${ this.users.length })`;
|
||||||
|
|
||||||
|
@ -44,11 +44,11 @@ export default class Connection extends EventEmitter {
|
|||||||
|
|
||||||
const query = params
|
const query = params
|
||||||
? Object.keys(params)
|
? Object.keys(params)
|
||||||
.map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))
|
.map(k => `${encodeURIComponent(k)}=${encodeURIComponent(params[k])}`)
|
||||||
.join('&')
|
.join('&')
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
this.socket = new ReconnectingWebsocket(`${wsUrl}/${endpoint}${query ? '?' + query : ''}`);
|
this.socket = new ReconnectingWebsocket(`${wsUrl}/${endpoint}${query ? `?${query}` : ''}`);
|
||||||
this.socket.addEventListener('open', this.onOpen);
|
this.socket.addEventListener('open', this.onOpen);
|
||||||
this.socket.addEventListener('close', this.onClose);
|
this.socket.addEventListener('close', this.onClose);
|
||||||
this.socket.addEventListener('message', this.onMessage);
|
this.socket.addEventListener('message', this.onMessage);
|
||||||
|
@ -1,19 +1,25 @@
|
|||||||
<template>
|
<template>
|
||||||
<span class="mk-acct">
|
<span class="mk-acct">
|
||||||
<span class="name">@{{ user.username }}</span>
|
<span class="name">@{{ user.username }}</span>
|
||||||
<span class="host" v-if="user.host">@{{ user.host }}</span>
|
<span class="host" :class="{ fade: $store.state.settings.contrastedAcct }" v-if="user.host || detail">@{{ user.host || host }}</span>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
import { host } from '../../../config';
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
props: ['user']
|
props: ['user', 'detail'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
host
|
||||||
|
};
|
||||||
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
.mk-acct
|
.mk-acct
|
||||||
> .host
|
> .host.fade
|
||||||
opacity 0.5
|
opacity 0.5
|
||||||
</style>
|
</style>
|
||||||
|
@ -125,7 +125,7 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.type == 'user') {
|
if (this.type == 'user') {
|
||||||
const cacheKey = 'autocomplete:user:' + this.q;
|
const cacheKey = `autocomplete:user:${this.q}`;
|
||||||
const cache = sessionStorage.getItem(cacheKey);
|
const cache = sessionStorage.getItem(cacheKey);
|
||||||
if (cache) {
|
if (cache) {
|
||||||
const users = JSON.parse(cache);
|
const users = JSON.parse(cache);
|
||||||
@ -148,7 +148,7 @@ export default Vue.extend({
|
|||||||
this.hashtags = JSON.parse(localStorage.getItem('hashtags') || '[]');
|
this.hashtags = JSON.parse(localStorage.getItem('hashtags') || '[]');
|
||||||
this.fetching = false;
|
this.fetching = false;
|
||||||
} else {
|
} else {
|
||||||
const cacheKey = 'autocomplete:hashtag:' + this.q;
|
const cacheKey = `autocomplete:hashtag:${this.q}`;
|
||||||
const cache = sessionStorage.getItem(cacheKey);
|
const cache = sessionStorage.getItem(cacheKey);
|
||||||
if (cache) {
|
if (cache) {
|
||||||
const hashtags = JSON.parse(cache);
|
const hashtags = JSON.parse(cache);
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
<template>
|
<template>
|
||||||
<span class="mk-avatar" :class="{ cat }" :title="user | acct" v-if="disableLink && !disablePreview" v-user-preview="user.id" @click="onClick">
|
<span class="mk-avatar" :style="style" :class="{ cat }" :title="user | acct" v-if="disableLink && !disablePreview" v-user-preview="user.id" @click="onClick">
|
||||||
<span class="inner" :style="style"></span>
|
<span class="inner" :style="icon"></span>
|
||||||
</span>
|
</span>
|
||||||
<span class="mk-avatar" :class="{ cat }" :title="user | acct" v-else-if="disableLink && disablePreview" @click="onClick">
|
<span class="mk-avatar" :style="style" :class="{ cat }" :title="user | acct" v-else-if="disableLink && disablePreview" @click="onClick">
|
||||||
<span class="inner" :style="style"></span>
|
<span class="inner" :style="icon"></span>
|
||||||
</span>
|
</span>
|
||||||
<router-link class="mk-avatar" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && !disablePreview" v-user-preview="user.id">
|
<router-link class="mk-avatar" :style="style" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && !disablePreview" v-user-preview="user.id">
|
||||||
<span class="inner" :style="style"></span>
|
<span class="inner" :style="icon"></span>
|
||||||
</router-link>
|
</router-link>
|
||||||
<router-link class="mk-avatar" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && disablePreview">
|
<router-link class="mk-avatar" :style="style" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && disablePreview">
|
||||||
<span class="inner" :style="style"></span>
|
<span class="inner" :style="icon"></span>
|
||||||
</router-link>
|
</router-link>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -42,6 +42,11 @@ export default Vue.extend({
|
|||||||
return this.user.isCat && this.$store.state.settings.circleIcons;
|
return this.user.isCat && this.$store.state.settings.circleIcons;
|
||||||
},
|
},
|
||||||
style(): any {
|
style(): any {
|
||||||
|
return {
|
||||||
|
borderRadius: this.$store.state.settings.circleIcons ? '100%' : null
|
||||||
|
};
|
||||||
|
},
|
||||||
|
icon(): any {
|
||||||
return {
|
return {
|
||||||
backgroundColor: this.lightmode
|
backgroundColor: this.lightmode
|
||||||
? `rgb(${this.user.avatarColor.slice(0, 3).join(',')})`
|
? `rgb(${this.user.avatarColor.slice(0, 3).join(',')})`
|
||||||
|
@ -57,7 +57,7 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check internet connection
|
// Check internet connection
|
||||||
fetch('https://google.com?rand=' + Math.random(), {
|
fetch(`https://google.com?rand=${Math.random()}`, {
|
||||||
mode: 'no-cors'
|
mode: 'no-cors'
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.internet = true;
|
this.internet = true;
|
||||||
|
@ -18,11 +18,11 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="board">
|
<div class="board">
|
||||||
<div class="labels-x" v-if="this.$store.state.settings.reversiBoardLabels">
|
<div class="labels-x" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
|
||||||
<span v-for="i in game.settings.map[0].length">{{ String.fromCharCode(64 + i) }}</span>
|
<span v-for="i in game.settings.map[0].length">{{ String.fromCharCode(64 + i) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<div class="labels-y" v-if="this.$store.state.settings.reversiBoardLabels">
|
<div class="labels-y" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
|
||||||
<div v-for="i in game.settings.map.length">{{ i }}</div>
|
<div v-for="i in game.settings.map.length">{{ i }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="cells" :style="cellsStyle">
|
<div class="cells" :style="cellsStyle">
|
||||||
@ -30,15 +30,15 @@
|
|||||||
:class="{ empty: stone == null, none: o.map[i] == 'null', isEnded: game.isEnded, myTurn: !game.isEnded && isMyTurn, can: turnUser ? o.canPut(turnUser.id == blackUser.id, i) : null, prev: o.prevPos == i }"
|
:class="{ empty: stone == null, none: o.map[i] == 'null', isEnded: game.isEnded, myTurn: !game.isEnded && isMyTurn, can: turnUser ? o.canPut(turnUser.id == blackUser.id, i) : null, prev: o.prevPos == i }"
|
||||||
@click="set(i)"
|
@click="set(i)"
|
||||||
:title="`${String.fromCharCode(65 + o.transformPosToXy(i)[0])}${o.transformPosToXy(i)[1] + 1}`">
|
:title="`${String.fromCharCode(65 + o.transformPosToXy(i)[0])}${o.transformPosToXy(i)[1] + 1}`">
|
||||||
<img v-if="stone === true" :src="blackUser.avatarUrl" alt="">
|
<img v-if="stone === true" :src="blackUser.avatarUrl" alt="black" :class="{ contrast: $store.state.settings.games.reversi.useContrastStones }">
|
||||||
<img v-if="stone === false" :src="whiteUser.avatarUrl" alt="">
|
<img v-if="stone === false" :src="whiteUser.avatarUrl" alt="white" :class="{ contrast: $store.state.settings.games.reversi.useContrastStones }">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="labels-y" v-if="this.$store.state.settings.reversiBoardLabels">
|
<div class="labels-y" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
|
||||||
<div v-for="i in game.settings.map.length">{{ i }}</div>
|
<div v-for="i in game.settings.map.length">{{ i }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="labels-x" v-if="this.$store.state.settings.reversiBoardLabels">
|
<div class="labels-x" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
|
||||||
<span v-for="i in game.settings.map[0].length">{{ String.fromCharCode(64 + i) }}</span>
|
<span v-for="i in game.settings.map[0].length">{{ String.fromCharCode(64 + i) }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -159,11 +159,9 @@ export default Vue.extend({
|
|||||||
canPutEverywhere: this.game.settings.canPutEverywhere,
|
canPutEverywhere: this.game.settings.canPutEverywhere,
|
||||||
loopedBoard: this.game.settings.loopedBoard
|
loopedBoard: this.game.settings.loopedBoard
|
||||||
});
|
});
|
||||||
this.logs.forEach((log, i) => {
|
for (const log of this.logs.slice(0, v)) {
|
||||||
if (i < v) {
|
|
||||||
this.o.put(log.color, log.pos);
|
this.o.put(log.color, log.pos);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
this.$forceUpdate();
|
this.$forceUpdate();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -421,6 +419,13 @@ root(isDark)
|
|||||||
width 100%
|
width 100%
|
||||||
height 100%
|
height 100%
|
||||||
|
|
||||||
|
&.contrast
|
||||||
|
&[alt="black"]
|
||||||
|
filter brightness(.5)
|
||||||
|
|
||||||
|
&[alt="white"]
|
||||||
|
filter brightness(2)
|
||||||
|
|
||||||
> .graph
|
> .graph
|
||||||
display grid
|
display grid
|
||||||
grid-template-columns repeat(61, 1fr)
|
grid-template-columns repeat(61, 1fr)
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
|
||||||
|
import tagCloud from './tag-cloud.vue';
|
||||||
|
import trends from './trends.vue';
|
||||||
import analogClock from './analog-clock.vue';
|
import analogClock from './analog-clock.vue';
|
||||||
import menu from './menu.vue';
|
import menu from './menu.vue';
|
||||||
import noteHeader from './note-header.vue';
|
import noteHeader from './note-header.vue';
|
||||||
@ -40,6 +42,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-tag-cloud', tagCloud);
|
||||||
|
Vue.component('mk-trends', trends);
|
||||||
Vue.component('mk-analog-clock', analogClock);
|
Vue.component('mk-analog-clock', analogClock);
|
||||||
Vue.component('mk-menu', menu);
|
Vue.component('mk-menu', menu);
|
||||||
Vue.component('mk-note-header', noteHeader);
|
Vue.component('mk-note-header', noteHeader);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="mk-menu">
|
<div class="onchrpzrvnoruiaenfcqvccjfuupzzwv">
|
||||||
<div class="backdrop" ref="backdrop" @click="close"></div>
|
<div class="backdrop" ref="backdrop" @click="close"></div>
|
||||||
<div class="popover" :class="{ hukidasi }" ref="popover">
|
<div class="popover" :class="{ hukidasi }" ref="popover">
|
||||||
<template v-for="item in items">
|
<template v-for="item in items">
|
||||||
@ -119,9 +119,10 @@ export default Vue.extend({
|
|||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
@import '~const.styl'
|
@import '~const.styl'
|
||||||
|
|
||||||
$border-color = rgba(27, 31, 35, 0.15)
|
root(isDark)
|
||||||
|
$bg-color = isDark ? #2c303c : #fff
|
||||||
|
$border-color = rgba(27, 31, 35, 0.15)
|
||||||
|
|
||||||
.mk-menu
|
|
||||||
position initial
|
position initial
|
||||||
|
|
||||||
> .backdrop
|
> .backdrop
|
||||||
@ -131,14 +132,14 @@ $border-color = rgba(27, 31, 35, 0.15)
|
|||||||
z-index 10000
|
z-index 10000
|
||||||
width 100%
|
width 100%
|
||||||
height 100%
|
height 100%
|
||||||
background rgba(#000, 0.1)
|
background rgba(#000, isDark ? 0.5 : 0.1)
|
||||||
opacity 0
|
opacity 0
|
||||||
|
|
||||||
> .popover
|
> .popover
|
||||||
position absolute
|
position absolute
|
||||||
z-index 10001
|
z-index 10001
|
||||||
padding 8px 0
|
padding 8px 0
|
||||||
background #fff
|
background $bg-color
|
||||||
border 1px solid $border-color
|
border 1px solid $border-color
|
||||||
border-radius 4px
|
border-radius 4px
|
||||||
box-shadow 0 3px 12px rgba(27, 31, 35, 0.15)
|
box-shadow 0 3px 12px rgba(27, 31, 35, 0.15)
|
||||||
@ -172,12 +173,13 @@ $border-color = rgba(27, 31, 35, 0.15)
|
|||||||
border-top solid $balloon-size transparent
|
border-top solid $balloon-size transparent
|
||||||
border-left solid $balloon-size transparent
|
border-left solid $balloon-size transparent
|
||||||
border-right solid $balloon-size transparent
|
border-right solid $balloon-size transparent
|
||||||
border-bottom solid $balloon-size #fff
|
border-bottom solid $balloon-size $bg-color
|
||||||
|
|
||||||
> button
|
> button
|
||||||
display block
|
display block
|
||||||
padding 8px 16px
|
padding 8px 16px
|
||||||
width 100%
|
width 100%
|
||||||
|
color isDark ? #d6dce2 : #111
|
||||||
|
|
||||||
&:hover
|
&:hover
|
||||||
color $theme-color-foreground
|
color $theme-color-foreground
|
||||||
@ -191,6 +193,12 @@ $border-color = rgba(27, 31, 35, 0.15)
|
|||||||
> div
|
> div
|
||||||
margin 8px 0
|
margin 8px 0
|
||||||
height 1px
|
height 1px
|
||||||
background #eee
|
background isDark ? #1c2023 : #eee
|
||||||
|
|
||||||
|
.onchrpzrvnoruiaenfcqvccjfuupzzwv[data-darkmode]
|
||||||
|
root(true)
|
||||||
|
|
||||||
|
.onchrpzrvnoruiaenfcqvccjfuupzzwv:not([data-darkmode])
|
||||||
|
root(false)
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
@dragover.prevent.stop="onDragover"
|
@dragover.prevent.stop="onDragover"
|
||||||
@drop.prevent.stop="onDrop"
|
@drop.prevent.stop="onDrop"
|
||||||
>
|
>
|
||||||
<div class="stream">
|
<div class="body">
|
||||||
<p class="init" v-if="init">%fa:spinner .spin%%i18n:common.loading%</p>
|
<p class="init" v-if="init">%fa:spinner .spin%%i18n:common.loading%</p>
|
||||||
<p class="empty" v-if="!init && messages.length == 0">%fa:info-circle%%i18n:@empty%</p>
|
<p class="empty" v-if="!init && messages.length == 0">%fa:info-circle%%i18n:@empty%</p>
|
||||||
<p class="no-history" v-if="!init && messages.length > 0 && !existMoreMessages">%fa:flag%%i18n:@no-history%</p>
|
<p class="no-history" v-if="!init && messages.length > 0 && !existMoreMessages">%fa:flag%%i18n:@no-history%</p>
|
||||||
@ -77,6 +77,12 @@ export default Vue.extend({
|
|||||||
this.connection.on('message', this.onMessage);
|
this.connection.on('message', this.onMessage);
|
||||||
this.connection.on('read', this.onRead);
|
this.connection.on('read', this.onRead);
|
||||||
|
|
||||||
|
if (this.isNaked) {
|
||||||
|
window.addEventListener('scroll', this.onScroll, { passive: true });
|
||||||
|
} else {
|
||||||
|
this.$el.addEventListener('scroll', this.onScroll, { passive: true });
|
||||||
|
}
|
||||||
|
|
||||||
document.addEventListener('visibilitychange', this.onVisibilitychange);
|
document.addEventListener('visibilitychange', this.onVisibilitychange);
|
||||||
|
|
||||||
this.fetchMessages().then(() => {
|
this.fetchMessages().then(() => {
|
||||||
@ -90,6 +96,12 @@ export default Vue.extend({
|
|||||||
this.connection.off('read', this.onRead);
|
this.connection.off('read', this.onRead);
|
||||||
this.connection.close();
|
this.connection.close();
|
||||||
|
|
||||||
|
if (this.isNaked) {
|
||||||
|
window.removeEventListener('scroll', this.onScroll);
|
||||||
|
} else {
|
||||||
|
this.$el.removeEventListener('scroll', this.onScroll);
|
||||||
|
}
|
||||||
|
|
||||||
document.removeEventListener('visibilitychange', this.onVisibilitychange);
|
document.removeEventListener('visibilitychange', this.onVisibilitychange);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -226,6 +238,14 @@ export default Vue.extend({
|
|||||||
}, 4000);
|
}, 4000);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
onScroll() {
|
||||||
|
const el = this.isNaked ? window.document.documentElement : this.$el;
|
||||||
|
const current = el.scrollTop + el.clientHeight;
|
||||||
|
if (current > el.scrollHeight - 1) {
|
||||||
|
this.showIndicator = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
onVisibilitychange() {
|
onVisibilitychange() {
|
||||||
if (document.hidden) return;
|
if (document.hidden) return;
|
||||||
this.messages.forEach(message => {
|
this.messages.forEach(message => {
|
||||||
@ -251,7 +271,7 @@ root(isDark)
|
|||||||
height 100%
|
height 100%
|
||||||
background isDark ? #191b22 : #fff
|
background isDark ? #191b22 : #fff
|
||||||
|
|
||||||
> .stream
|
> .body
|
||||||
width 100%
|
width 100%
|
||||||
max-width 600px
|
max-width 600px
|
||||||
margin 0 auto
|
margin 0 auto
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import Vue from 'vue';
|
import Vue, { VNode } from 'vue';
|
||||||
import * as emojilib from 'emojilib';
|
import * as emojilib from 'emojilib';
|
||||||
import { length } from 'stringz';
|
import { length } from 'stringz';
|
||||||
import parse from '../../../../../mfm/parse';
|
import parse from '../../../../../mfm/parse';
|
||||||
@ -6,10 +6,7 @@ import getAcct from '../../../../../misc/acct/render';
|
|||||||
import { url } from '../../../config';
|
import { url } from '../../../config';
|
||||||
import MkUrl from './url.vue';
|
import MkUrl from './url.vue';
|
||||||
import MkGoogle from './google.vue';
|
import MkGoogle from './google.vue';
|
||||||
|
import { concat } from '../../../../../prelude/array';
|
||||||
const flatten = list => list.reduce(
|
|
||||||
(a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []
|
|
||||||
);
|
|
||||||
|
|
||||||
export default Vue.component('misskey-flavored-markdown', {
|
export default Vue.component('misskey-flavored-markdown', {
|
||||||
props: {
|
props: {
|
||||||
@ -32,20 +29,20 @@ export default Vue.component('misskey-flavored-markdown', {
|
|||||||
},
|
},
|
||||||
|
|
||||||
render(createElement) {
|
render(createElement) {
|
||||||
let ast;
|
let ast: any[];
|
||||||
|
|
||||||
if (this.ast == null) {
|
if (this.ast == null) {
|
||||||
// Parse text to ast
|
// Parse text to ast
|
||||||
ast = parse(this.text);
|
ast = parse(this.text);
|
||||||
} else {
|
} else {
|
||||||
ast = this.ast;
|
ast = this.ast as any[];
|
||||||
}
|
}
|
||||||
|
|
||||||
let bigCount = 0;
|
let bigCount = 0;
|
||||||
let motionCount = 0;
|
let motionCount = 0;
|
||||||
|
|
||||||
// Parse ast to DOM
|
// Parse ast to DOM
|
||||||
const els = flatten(ast.map(token => {
|
const els = concat(ast.map((token): VNode[] => {
|
||||||
switch (token.type) {
|
switch (token.type) {
|
||||||
case 'text': {
|
case 'text': {
|
||||||
const text = token.content.replace(/(\r\n|\n|\r)/g, '\n');
|
const text = token.content.replace(/(\r\n|\n|\r)/g, '\n');
|
||||||
@ -56,12 +53,12 @@ export default Vue.component('misskey-flavored-markdown', {
|
|||||||
x[x.length - 1].pop();
|
x[x.length - 1].pop();
|
||||||
return x;
|
return x;
|
||||||
} else {
|
} else {
|
||||||
return createElement('span', text.replace(/\n/g, ' '));
|
return [createElement('span', text.replace(/\n/g, ' '))];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'bold': {
|
case 'bold': {
|
||||||
return createElement('b', token.bold);
|
return [createElement('b', token.bold)];
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'big': {
|
case 'big': {
|
||||||
@ -95,23 +92,23 @@ export default Vue.component('misskey-flavored-markdown', {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case 'url': {
|
case 'url': {
|
||||||
return createElement(MkUrl, {
|
return [createElement(MkUrl, {
|
||||||
props: {
|
props: {
|
||||||
url: token.content,
|
url: token.content,
|
||||||
target: '_blank'
|
target: '_blank'
|
||||||
}
|
}
|
||||||
});
|
})];
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'link': {
|
case 'link': {
|
||||||
return createElement('a', {
|
return [createElement('a', {
|
||||||
attrs: {
|
attrs: {
|
||||||
class: 'link',
|
class: 'link',
|
||||||
href: token.url,
|
href: token.url,
|
||||||
target: '_blank',
|
target: '_blank',
|
||||||
title: token.url
|
title: token.url
|
||||||
}
|
}
|
||||||
}, token.title);
|
}, token.title)];
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'mention': {
|
case 'mention': {
|
||||||
@ -129,16 +126,16 @@ export default Vue.component('misskey-flavored-markdown', {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case 'hashtag': {
|
case 'hashtag': {
|
||||||
return createElement('a', {
|
return [createElement('a', {
|
||||||
attrs: {
|
attrs: {
|
||||||
href: `${url}/tags/${encodeURIComponent(token.hashtag)}`,
|
href: `${url}/tags/${encodeURIComponent(token.hashtag)}`,
|
||||||
target: '_blank'
|
target: '_blank'
|
||||||
}
|
}
|
||||||
}, token.content);
|
}, token.content)];
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'code': {
|
case 'code': {
|
||||||
return createElement('pre', {
|
return [createElement('pre', {
|
||||||
class: 'code'
|
class: 'code'
|
||||||
}, [
|
}, [
|
||||||
createElement('code', {
|
createElement('code', {
|
||||||
@ -146,15 +143,15 @@ export default Vue.component('misskey-flavored-markdown', {
|
|||||||
innerHTML: token.html
|
innerHTML: token.html
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
]);
|
])];
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'inline-code': {
|
case 'inline-code': {
|
||||||
return createElement('code', {
|
return [createElement('code', {
|
||||||
domProps: {
|
domProps: {
|
||||||
innerHTML: token.html
|
innerHTML: token.html
|
||||||
}
|
}
|
||||||
});
|
})];
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'quote': {
|
case 'quote': {
|
||||||
@ -164,58 +161,51 @@ export default Vue.component('misskey-flavored-markdown', {
|
|||||||
const x = text2.split('\n')
|
const x = text2.split('\n')
|
||||||
.map(t => [createElement('span', t), createElement('br')]);
|
.map(t => [createElement('span', t), createElement('br')]);
|
||||||
x[x.length - 1].pop();
|
x[x.length - 1].pop();
|
||||||
return createElement('div', {
|
return [createElement('div', {
|
||||||
attrs: {
|
attrs: {
|
||||||
class: 'quote'
|
class: 'quote'
|
||||||
}
|
}
|
||||||
}, x);
|
}, x)];
|
||||||
} else {
|
} else {
|
||||||
return createElement('span', {
|
return [createElement('span', {
|
||||||
attrs: {
|
attrs: {
|
||||||
class: 'quote'
|
class: 'quote'
|
||||||
}
|
}
|
||||||
}, text2.replace(/\n/g, ' '));
|
}, text2.replace(/\n/g, ' '))];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'title': {
|
case 'title': {
|
||||||
return createElement('div', {
|
return [createElement('div', {
|
||||||
attrs: {
|
attrs: {
|
||||||
class: 'title'
|
class: 'title'
|
||||||
}
|
}
|
||||||
}, token.title);
|
}, token.title)];
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'emoji': {
|
case 'emoji': {
|
||||||
const emoji = emojilib.lib[token.emoji];
|
const emoji = emojilib.lib[token.emoji];
|
||||||
return createElement('span', emoji ? emoji.char : token.content);
|
return [createElement('span', emoji ? emoji.char : token.content)];
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'search': {
|
case 'search': {
|
||||||
return createElement(MkGoogle, {
|
return [createElement(MkGoogle, {
|
||||||
props: {
|
props: {
|
||||||
q: token.query
|
q: token.query
|
||||||
}
|
}
|
||||||
});
|
})];
|
||||||
}
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
console.log('unknown ast type:', token.type);
|
console.log('unknown ast type:', token.type);
|
||||||
|
|
||||||
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const _els = [];
|
// el.tag === 'br' のとき i !== 0 が保証されるため、短絡評価により els[i - 1] は配列外参照しない
|
||||||
els.forEach((el, i) => {
|
const _els = els.filter((el, i) => !(el.tag === 'br' && ['div', 'pre'].includes(els[i - 1].tag)));
|
||||||
if (el.tag == 'br') {
|
|
||||||
if (!['div', 'pre'].includes(els[i - 1].tag)) {
|
|
||||||
_els.push(el);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_els.push(el);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return createElement('span', _els);
|
return createElement('span', _els);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<i>・</i>
|
<i>・</i>
|
||||||
<a :href="feedbackUrl" target="_blank">%i18n:@feedback%</a>
|
<a :href="feedbackUrl" target="_blank">%i18n:@feedback%</a>
|
||||||
<i>・</i>
|
<i>・</i>
|
||||||
<a :href="devUrl">%i18n:@develop%</a>
|
<a href="/dev">%i18n:@develop%</a>
|
||||||
<i>・</i>
|
<i>・</i>
|
||||||
<a href="https://twitter.com/misskey_xyz" target="_blank">Follow us on %fa:B twitter%</a>
|
<a href="https://twitter.com/misskey_xyz" target="_blank">Follow us on %fa:B twitter%</a>
|
||||||
</span>
|
</span>
|
||||||
@ -14,18 +14,21 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import { docsUrl, statsUrl, statusUrl, devUrl, repositoryUrl, feedbackUrl, lang } from '../../../config';
|
import { lang } from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
aboutUrl: `${docsUrl}/${lang}/about`,
|
aboutUrl: `/docs/${lang}/about`,
|
||||||
statsUrl,
|
repositoryUrl: 'https://github.com/syuilo/misskey',
|
||||||
statusUrl,
|
feedbackUrl: 'https://github.com/syuilo/misskey/issues/new'
|
||||||
devUrl,
|
|
||||||
repositoryUrl: repositoryUrl || `https://github.com/syuilo/misskey`,
|
|
||||||
feedbackUrl: feedbackUrl || `https://github.com/syuilo/misskey/issues/new`
|
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
(this as any).os.getMeta().then(meta => {
|
||||||
|
if (meta.maintainer.repository_url) this.repositoryUrl = meta.maintainer.repository_url;
|
||||||
|
if (meta.maintainer.feedback_url) this.feedbackUrl = meta.maintainer.feedback_url;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -6,17 +6,27 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
import { url } from '../../../config';
|
||||||
|
import copyToClipboard from '../../../common/scripts/copy-to-clipboard';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
props: ['note', 'source', 'compact'],
|
props: ['note', 'source', 'compact'],
|
||||||
computed: {
|
computed: {
|
||||||
items() {
|
items() {
|
||||||
const items = [];
|
const items = [{
|
||||||
items.push({
|
icon: '%fa:info-circle%',
|
||||||
|
text: '%i18n:@detail%',
|
||||||
|
action: this.detail
|
||||||
|
}, {
|
||||||
|
icon: '%fa:link%',
|
||||||
|
text: '%i18n:@copy-link%',
|
||||||
|
action: this.copyLink
|
||||||
|
}, null, {
|
||||||
icon: '%fa:star%',
|
icon: '%fa:star%',
|
||||||
text: '%i18n:@favorite%',
|
text: '%i18n:@favorite%',
|
||||||
action: this.favorite
|
action: this.favorite
|
||||||
});
|
}];
|
||||||
|
|
||||||
if (this.note.userId == this.$store.state.i.id) {
|
if (this.note.userId == this.$store.state.i.id) {
|
||||||
items.push({
|
items.push({
|
||||||
icon: '%fa:thumbtack%',
|
icon: '%fa:thumbtack%',
|
||||||
@ -42,6 +52,14 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
detail() {
|
||||||
|
this.$router.push(`/notes/${ this.note.id }`);
|
||||||
|
},
|
||||||
|
|
||||||
|
copyLink() {
|
||||||
|
copyToClipboard(`${url}/notes/${ this.note.id }`);
|
||||||
|
},
|
||||||
|
|
||||||
pin() {
|
pin() {
|
||||||
(this as any).api('i/pin', {
|
(this as any).api('i/pin', {
|
||||||
noteId: this.note.id
|
noteId: this.note.id
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
import { erase } from '../../../../../prelude/array';
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@ -53,7 +54,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
get() {
|
get() {
|
||||||
return {
|
return {
|
||||||
choices: this.choices.filter(choice => choice != '')
|
choices: erase('', this.choices)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
import { sum } from '../../../../../prelude/array';
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
props: ['note'],
|
props: ['note'],
|
||||||
data() {
|
data() {
|
||||||
@ -33,7 +34,7 @@ export default Vue.extend({
|
|||||||
return this.note.poll;
|
return this.note.poll;
|
||||||
},
|
},
|
||||||
total(): number {
|
total(): number {
|
||||||
return this.poll.choices.reduce((a, b) => a + b.votes, 0);
|
return sum(this.poll.choices.map(x => x.votes));
|
||||||
},
|
},
|
||||||
isVoted(): boolean {
|
isVoted(): boolean {
|
||||||
return this.poll.choices.some(c => c.isVoted);
|
return this.poll.choices.some(c => c.isVoted);
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
<template>
|
<template>
|
||||||
<span class="mk-reaction-icon">
|
<span class="mk-reaction-icon">
|
||||||
<img v-if="reaction == 'like'" src="/assets/reactions/like.png" alt="%i18n:common.reactions.like%">
|
<img v-if="reaction == 'like'" src="https://twemoji.maxcdn.com/2/svg/1f44d.svg" alt="%i18n:common.reactions.like%">
|
||||||
<img v-if="reaction == 'love'" src="/assets/reactions/love.png" alt="%i18n:common.reactions.love%">
|
<img v-if="reaction == 'love'" src="https://twemoji.maxcdn.com/2/svg/2764.svg" alt="%i18n:common.reactions.love%">
|
||||||
<img v-if="reaction == 'laugh'" src="/assets/reactions/laugh.png" alt="%i18n:common.reactions.laugh%">
|
<img v-if="reaction == 'laugh'" src="https://twemoji.maxcdn.com/2/svg/1f606.svg" alt="%i18n:common.reactions.laugh%">
|
||||||
<img v-if="reaction == 'hmm'" src="/assets/reactions/hmm.png" alt="%i18n:common.reactions.hmm%">
|
<img v-if="reaction == 'hmm'" src="https://twemoji.maxcdn.com/2/svg/1f914.svg" alt="%i18n:common.reactions.hmm%">
|
||||||
<img v-if="reaction == 'surprise'" src="/assets/reactions/surprise.png" alt="%i18n:common.reactions.surprise%">
|
<img v-if="reaction == 'surprise'" src="https://twemoji.maxcdn.com/2/svg/1f62e.svg" alt="%i18n:common.reactions.surprise%">
|
||||||
<img v-if="reaction == 'congrats'" src="/assets/reactions/congrats.png" alt="%i18n:common.reactions.congrats%">
|
<img v-if="reaction == 'congrats'" src="https://twemoji.maxcdn.com/2/svg/1f389.svg" alt="%i18n:common.reactions.congrats%">
|
||||||
<img v-if="reaction == 'angry'" src="/assets/reactions/angry.png" alt="%i18n:common.reactions.angry%">
|
<img v-if="reaction == 'angry'" src="https://twemoji.maxcdn.com/2/svg/1f4a2.svg" alt="%i18n:common.reactions.angry%">
|
||||||
<img v-if="reaction == 'confused'" src="/assets/reactions/confused.png" alt="%i18n:common.reactions.confused%">
|
<img v-if="reaction == 'confused'" src="https://twemoji.maxcdn.com/2/svg/1f625.svg" alt="%i18n:common.reactions.confused%">
|
||||||
<img v-if="reaction == 'rip'" src="/assets/reactions/rip.png" alt="%i18n:common.reactions.rip%">
|
<img v-if="reaction == 'rip'" src="https://twemoji.maxcdn.com/2/svg/1f607.svg" alt="%i18n:common.reactions.rip%">
|
||||||
<template v-if="reaction == 'pudding'">
|
<template v-if="reaction == 'pudding'">
|
||||||
<img v-if="$store.getters.isSignedIn && $store.state.settings.iLikeSushi" src="/assets/reactions/sushi.png" alt="%i18n:common.reactions.pudding%">
|
<img v-if="$store.getters.isSignedIn && $store.state.settings.iLikeSushi" src="https://twemoji.maxcdn.com/2/svg/1f363.svg" alt="%i18n:common.reactions.pudding%">
|
||||||
<img v-else src="/assets/reactions/pudding.png" alt="%i18n:common.reactions.pudding%">
|
<img v-else src="https://twemoji.maxcdn.com/2/svg/1f36e.svg" alt="%i18n:common.reactions.pudding%">
|
||||||
</template>
|
</template>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
|
@ -12,13 +12,13 @@
|
|||||||
</ui-input>
|
</ui-input>
|
||||||
<ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required/>
|
<ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required/>
|
||||||
<ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button>
|
<ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button>
|
||||||
<p style="margin: 8px 0;" v-if="twitterIntegration">%i18n:@or% <a :href="`${apiUrl}/signin/twitter`">%i18n:@signin-with-twitter%</a></p>
|
<p style="margin: 8px 0;">%i18n:@or% <a :href="`${apiUrl}/signin/twitter`">%i18n:@signin-with-twitter%</a></p>
|
||||||
</form>
|
</form>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import { apiUrl, host, twitterIntegration } from '../../../config';
|
import { apiUrl, host } from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
props: {
|
props: {
|
||||||
@ -36,8 +36,7 @@ export default Vue.extend({
|
|||||||
password: '',
|
password: '',
|
||||||
token: '',
|
token: '',
|
||||||
apiUrl,
|
apiUrl,
|
||||||
host,
|
host
|
||||||
twitterIntegration
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@ -79,7 +78,7 @@ export default Vue.extend({
|
|||||||
cursor wait !important
|
cursor wait !important
|
||||||
|
|
||||||
> .avatar
|
> .avatar
|
||||||
margin 16px auto 0 auto
|
margin 0 auto 0 auto
|
||||||
width 64px
|
width 64px
|
||||||
height 64px
|
height 64px
|
||||||
background #ddd
|
background #ddd
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<form class="mk-signup" @submit.prevent="onSubmit" :autocomplete="Math.random()">
|
<form class="mk-signup" @submit.prevent="onSubmit" :autocomplete="Math.random()">
|
||||||
|
<template v-if="meta">
|
||||||
<ui-input v-if="meta.disableRegistration" v-model="invitationCode" type="text" :autocomplete="Math.random()" spellcheck="false" required>
|
<ui-input v-if="meta.disableRegistration" v-model="invitationCode" type="text" :autocomplete="Math.random()" spellcheck="false" required>
|
||||||
<span>%i18n:@invitation-code%</span>
|
<span>%i18n:@invitation-code%</span>
|
||||||
<span slot="prefix">%fa:id-card-alt%</span>
|
<span slot="prefix">%fa:id-card-alt%</span>
|
||||||
@ -34,15 +35,16 @@
|
|||||||
<p slot="text" v-if="passwordRetypeState == 'not-match'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@password-not-matched%</p>
|
<p slot="text" v-if="passwordRetypeState == 'not-match'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@password-not-matched%</p>
|
||||||
</div>
|
</div>
|
||||||
</ui-input>
|
</ui-input>
|
||||||
<div v-if="recaptchaSitekey != null" class="g-recaptcha" :data-sitekey="recaptchaSitekey" style="margin: 16px 0;"></div>
|
<div v-if="meta.recaptchaSitekey != null" class="g-recaptcha" :data-sitekey="meta.recaptchaSitekey" style="margin: 16px 0;"></div>
|
||||||
<ui-button type="submit">%i18n:@create%</ui-button>
|
<ui-button type="submit">%i18n:@create%</ui-button>
|
||||||
|
</template>
|
||||||
</form>
|
</form>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
const getPasswordStrength = require('syuilo-password-strength');
|
const getPasswordStrength = require('syuilo-password-strength');
|
||||||
import { host, url, recaptchaSitekey } from '../../../config';
|
import { host, url } from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
data() {
|
data() {
|
||||||
@ -53,7 +55,6 @@ export default Vue.extend({
|
|||||||
retypedPassword: '',
|
retypedPassword: '',
|
||||||
invitationCode: '',
|
invitationCode: '',
|
||||||
url,
|
url,
|
||||||
recaptchaSitekey,
|
|
||||||
usernameState: null,
|
usernameState: null,
|
||||||
passwordStrength: '',
|
passwordStrength: '',
|
||||||
passwordRetypeState: null,
|
passwordRetypeState: null,
|
||||||
@ -73,6 +74,12 @@ export default Vue.extend({
|
|||||||
this.meta = meta;
|
this.meta = meta;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
mounted() {
|
||||||
|
const head = document.getElementsByTagName('head')[0];
|
||||||
|
const script = document.createElement('script');
|
||||||
|
script.setAttribute('src', 'https://www.google.com/recaptcha/api.js');
|
||||||
|
head.appendChild(script);
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
onChangeUsername() {
|
onChangeUsername() {
|
||||||
if (this.username == '') {
|
if (this.username == '') {
|
||||||
@ -123,7 +130,7 @@ export default Vue.extend({
|
|||||||
username: this.username,
|
username: this.username,
|
||||||
password: this.password,
|
password: this.password,
|
||||||
invitationCode: this.invitationCode,
|
invitationCode: this.invitationCode,
|
||||||
'g-recaptcha-response': recaptchaSitekey != null ? (window as any).grecaptcha.getResponse() : null
|
'g-recaptcha-response': this.meta.recaptchaSitekey != null ? (window as any).grecaptcha.getResponse() : null
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
(this as any).api('signin', {
|
(this as any).api('signin', {
|
||||||
username: this.username,
|
username: this.username,
|
||||||
@ -134,19 +141,11 @@ export default Vue.extend({
|
|||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
alert('%i18n:@some-error%');
|
alert('%i18n:@some-error%');
|
||||||
|
|
||||||
if (recaptchaSitekey != null) {
|
if (this.meta.recaptchaSitekey != null) {
|
||||||
(window as any).grecaptcha.reset();
|
(window as any).grecaptcha.reset();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
if (recaptchaSitekey != null) {
|
|
||||||
const head = document.getElementsByTagName('head')[0];
|
|
||||||
const script = document.createElement('script');
|
|
||||||
script.setAttribute('src', 'https://www.google.com/recaptcha/api.js');
|
|
||||||
head.appendChild(script);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
90
src/client/app/common/views/components/tag-cloud.vue
Normal file
90
src/client/app/common/views/components/tag-cloud.vue
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
<template>
|
||||||
|
<div class="jtivnzhfwquxpsfidertopbmwmchmnmo">
|
||||||
|
<p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
|
||||||
|
<p class="empty" v-else-if="tags.length == 0">%fa:exclamation-circle%%i18n:@empty%</p>
|
||||||
|
<div v-else>
|
||||||
|
<vue-word-cloud
|
||||||
|
:words="tags.slice(0, 20).map(x => [x.name, x.count])"
|
||||||
|
:color="color"
|
||||||
|
:spacing="1">
|
||||||
|
<template slot-scope="{word, text, weight}">
|
||||||
|
<div style="cursor: pointer;" :title="weight">
|
||||||
|
{{ text }}
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</vue-word-cloud>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
import * as VueWordCloud from 'vuewordcloud';
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
components: {
|
||||||
|
[VueWordCloud.name]: VueWordCloud
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
tags: [],
|
||||||
|
fetching: true,
|
||||||
|
clock: null
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.fetch();
|
||||||
|
this.clock = setInterval(this.fetch, 1000 * 60);
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
clearInterval(this.clock);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
fetch() {
|
||||||
|
(this as any).api('aggregation/hashtags').then(tags => {
|
||||||
|
this.tags = tags;
|
||||||
|
this.fetching = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
color([, weight]) {
|
||||||
|
const peak = Math.max.apply(null, this.tags.map(x => x.count));
|
||||||
|
const w = weight / peak;
|
||||||
|
|
||||||
|
if (w > 0.9) {
|
||||||
|
return this.$store.state.device.darkmode ? '#ff4e69' : '#ff4e69';
|
||||||
|
} else if (w > 0.5) {
|
||||||
|
return this.$store.state.device.darkmode ? '#3bc4c7' : '#3bc4c7';
|
||||||
|
} else {
|
||||||
|
return this.$store.state.device.darkmode ? '#fff' : '#555';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" scoped>
|
||||||
|
root(isDark)
|
||||||
|
height 100%
|
||||||
|
width 100%
|
||||||
|
|
||||||
|
> .fetching
|
||||||
|
> .empty
|
||||||
|
margin 0
|
||||||
|
padding 16px
|
||||||
|
text-align center
|
||||||
|
color #aaa
|
||||||
|
|
||||||
|
> [data-fa]
|
||||||
|
margin-right 4px
|
||||||
|
|
||||||
|
> div
|
||||||
|
height 100%
|
||||||
|
width 100%
|
||||||
|
|
||||||
|
.jtivnzhfwquxpsfidertopbmwmchmnmo[data-darkmode]
|
||||||
|
root(true)
|
||||||
|
|
||||||
|
.jtivnzhfwquxpsfidertopbmwmchmnmo:not([data-darkmode])
|
||||||
|
root(false)
|
||||||
|
|
||||||
|
</style>
|
105
src/client/app/common/views/components/trends.vue
Normal file
105
src/client/app/common/views/components/trends.vue
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
<template>
|
||||||
|
<div class="csqvmxybqbycalfhkxvyfrgbrdalkaoc">
|
||||||
|
<p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
|
||||||
|
<p class="empty" v-else-if="stats.length == 0">%fa:exclamation-circle%%i18n:@empty%</p>
|
||||||
|
<!-- トランジションを有効にするとなぜかメモリリークする -->
|
||||||
|
<!-- <transition-group v-else tag="div" name="chart"> -->
|
||||||
|
<div>
|
||||||
|
<div v-for="stat in stats" :key="stat.tag">
|
||||||
|
<div class="tag">
|
||||||
|
<router-link :to="`/tags/${ encodeURIComponent(stat.tag) }`" :title="stat.tag">#{{ stat.tag }}</router-link>
|
||||||
|
<p>{{ '%i18n:@count%'.replace('{}', stat.usersCount) }}</p>
|
||||||
|
</div>
|
||||||
|
<x-chart class="chart" :src="stat.chart"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- </transition-group> -->
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
import XChart from './trends.chart.vue';
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
components: {
|
||||||
|
XChart
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
stats: [],
|
||||||
|
fetching: true,
|
||||||
|
clock: null
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.fetch();
|
||||||
|
this.clock = setInterval(this.fetch, 1000 * 60);
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
clearInterval(this.clock);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
fetch() {
|
||||||
|
(this as any).api('hashtags/trend').then(stats => {
|
||||||
|
this.stats = stats;
|
||||||
|
this.fetching = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" scoped>
|
||||||
|
root(isDark)
|
||||||
|
> .fetching
|
||||||
|
> .empty
|
||||||
|
margin 0
|
||||||
|
padding 16px
|
||||||
|
text-align center
|
||||||
|
color #aaa
|
||||||
|
|
||||||
|
> [data-fa]
|
||||||
|
margin-right 4px
|
||||||
|
|
||||||
|
> div
|
||||||
|
.chart-move
|
||||||
|
transition transform 1s ease
|
||||||
|
|
||||||
|
> div
|
||||||
|
display flex
|
||||||
|
align-items center
|
||||||
|
padding 14px 16px
|
||||||
|
|
||||||
|
&:not(:last-child)
|
||||||
|
border-bottom solid 1px isDark ? #393f4f : #eee
|
||||||
|
|
||||||
|
> .tag
|
||||||
|
flex 1
|
||||||
|
overflow hidden
|
||||||
|
font-size 14px
|
||||||
|
color isDark ? #9baec8 : #65727b
|
||||||
|
|
||||||
|
> a
|
||||||
|
display block
|
||||||
|
width 100%
|
||||||
|
white-space nowrap
|
||||||
|
overflow hidden
|
||||||
|
text-overflow ellipsis
|
||||||
|
color inherit
|
||||||
|
|
||||||
|
> p
|
||||||
|
margin 0
|
||||||
|
font-size 75%
|
||||||
|
opacity 0.7
|
||||||
|
|
||||||
|
> .chart
|
||||||
|
height 30px
|
||||||
|
|
||||||
|
.csqvmxybqbycalfhkxvyfrgbrdalkaoc[data-darkmode]
|
||||||
|
root(true)
|
||||||
|
|
||||||
|
.csqvmxybqbycalfhkxvyfrgbrdalkaoc:not([data-darkmode])
|
||||||
|
root(false)
|
||||||
|
|
||||||
|
</style>
|
@ -24,17 +24,32 @@ export default Vue.extend({
|
|||||||
|
|
||||||
root(isDark)
|
root(isDark)
|
||||||
margin 16px
|
margin 16px
|
||||||
padding 16px
|
|
||||||
color isDark ? #fff : #000
|
color isDark ? #fff : #000
|
||||||
background isDark ? #282C37 : #fff
|
background isDark ? #282C37 : #fff
|
||||||
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)
|
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
|
||||||
|
padding 16px
|
||||||
|
font-weight bold
|
||||||
|
font-size 20px
|
||||||
|
color isDark ? #fff : #444
|
||||||
|
|
||||||
|
@media (min-width 500px)
|
||||||
|
padding 24px 32px
|
||||||
|
|
||||||
|
> section
|
||||||
|
padding 20px 16px
|
||||||
|
border-top solid 1px isDark ? rgba(#000, 0.3) : rgba(#000, 0.1)
|
||||||
|
|
||||||
@media (min-width 500px)
|
@media (min-width 500px)
|
||||||
padding 32px
|
padding 32px
|
||||||
|
|
||||||
|
&.fit-top
|
||||||
|
padding-top 0
|
||||||
|
|
||||||
> header
|
> header
|
||||||
font-weight normal
|
margin-bottom 16px
|
||||||
font-size 24px
|
font-weight bold
|
||||||
color isDark ? #fff : #444
|
color isDark ? #fff : #444
|
||||||
|
|
||||||
.ui-card[data-darkmode]
|
.ui-card[data-darkmode]
|
||||||
|
@ -55,7 +55,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
root(isDark)
|
root(isDark)
|
||||||
display inline-block
|
display inline-block
|
||||||
margin 32px 32px 32px 0
|
margin 0 32px 0 0
|
||||||
cursor pointer
|
cursor pointer
|
||||||
transition all 0.3s
|
transition all 0.3s
|
||||||
|
|
||||||
|
@ -64,6 +64,12 @@ root(isDark)
|
|||||||
cursor pointer
|
cursor pointer
|
||||||
transition all 0.3s
|
transition all 0.3s
|
||||||
|
|
||||||
|
&:first-child
|
||||||
|
margin-top 0
|
||||||
|
|
||||||
|
&:last-child
|
||||||
|
margin-bottom 0
|
||||||
|
|
||||||
> *
|
> *
|
||||||
user-select none
|
user-select none
|
||||||
|
|
||||||
@ -89,6 +95,7 @@ root(isDark)
|
|||||||
|
|
||||||
> .button
|
> .button
|
||||||
display inline-block
|
display inline-block
|
||||||
|
flex-shrink 0
|
||||||
margin 3px 0 0 0
|
margin 3px 0 0 0
|
||||||
width 34px
|
width 34px
|
||||||
height 14px
|
height 14px
|
||||||
|
@ -1,18 +1,20 @@
|
|||||||
<template>
|
<template>
|
||||||
<iframe v-if="player" :src="player" heigth="250" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen />
|
<div v-if="player.url" class="player" :style="`padding: ${(player.height || 0) / (player.width || 1) * 100}% 0 0`">
|
||||||
|
<iframe :src="player.url" :width="player.width || '100%'" :heigth="player.height || 250" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen />
|
||||||
|
</div>
|
||||||
<div v-else-if="tweetUrl && detail" class="twitter">
|
<div v-else-if="tweetUrl && detail" class="twitter">
|
||||||
<blockquote ref="tweet" class="twitter-tweet" :data-theme="$store.state.device.darkmode ? 'dark' : null">
|
<blockquote ref="tweet" class="twitter-tweet" :data-theme="$store.state.device.darkmode ? 'dark' : null">
|
||||||
<a :href="url"></a>
|
<a :href="url"></a>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="mk-url-preview">
|
<div v-else class="mk-url-preview">
|
||||||
<a :href="url" target="_blank" :title="url" v-if="!fetching">
|
<a :class="{ mini }" :href="url" target="_blank" :title="url" v-if="!fetching">
|
||||||
<div class="thumbnail" v-if="thumbnail" :style="`background-image: url(${thumbnail})`"></div>
|
<div class="thumbnail" v-if="thumbnail" :style="`background-image: url(${thumbnail})`"></div>
|
||||||
<article>
|
<article>
|
||||||
<header>
|
<header>
|
||||||
<h1>{{ title }}</h1>
|
<h1>{{ title }}</h1>
|
||||||
</header>
|
</header>
|
||||||
<p>{{ description }}</p>
|
<p>{{ description.length > 85 ? description.slice(0, 85) + '…' : description }}</p>
|
||||||
<footer>
|
<footer>
|
||||||
<img class="icon" v-if="icon" :src="icon"/>
|
<img class="icon" v-if="icon" :src="icon"/>
|
||||||
<p>{{ sitename }}</p>
|
<p>{{ sitename }}</p>
|
||||||
@ -26,65 +28,8 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import { url as misskeyUrl } from '../../../config';
|
import { url as misskeyUrl } from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
// THIS IS THE WHITELIST FOR THE EMBED PLAYER
|
||||||
props: {
|
const whiteList = [
|
||||||
url: {
|
|
||||||
type: String,
|
|
||||||
require: true
|
|
||||||
},
|
|
||||||
detail: {
|
|
||||||
type: Boolean,
|
|
||||||
required: false,
|
|
||||||
default: false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
fetching: true,
|
|
||||||
title: null,
|
|
||||||
description: null,
|
|
||||||
thumbnail: null,
|
|
||||||
icon: null,
|
|
||||||
sitename: null,
|
|
||||||
player: null,
|
|
||||||
tweetUrl: null,
|
|
||||||
misskeyUrl
|
|
||||||
};
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
const url = new URL(this.url);
|
|
||||||
|
|
||||||
if (this.detail && url.hostname == 'twitter.com' && /^\/.+\/status(es)?\/\d+/.test(url.pathname)) {
|
|
||||||
this.tweetUrl = url;
|
|
||||||
const twttr = (window as any).twttr || {};
|
|
||||||
const loadTweet = () => twttr.widgets.load(this.$refs.tweet);
|
|
||||||
|
|
||||||
if (twttr.widgets) {
|
|
||||||
Vue.nextTick(loadTweet);
|
|
||||||
} else {
|
|
||||||
const wjsId = 'twitter-wjs';
|
|
||||||
if (!document.getElementById(wjsId)) {
|
|
||||||
const head = document.getElementsByTagName('head')[0];
|
|
||||||
const script = document.createElement('script');
|
|
||||||
script.setAttribute('id', wjsId);
|
|
||||||
script.setAttribute('src', 'https://platform.twitter.com/widgets.js');
|
|
||||||
head.appendChild(script);
|
|
||||||
}
|
|
||||||
twttr.ready = loadTweet;
|
|
||||||
(window as any).twttr = twttr;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
fetch('/url?url=' + encodeURIComponent(this.url)).then(res => {
|
|
||||||
res.json().then(info => {
|
|
||||||
if (info.url != null) {
|
|
||||||
this.title = info.title;
|
|
||||||
this.description = info.description;
|
|
||||||
this.thumbnail = info.thumbnail;
|
|
||||||
this.icon = info.icon;
|
|
||||||
this.sitename = info.sitename;
|
|
||||||
this.fetching = false;
|
|
||||||
if ([ // THIS IS THE WHITELIST FOR THE EMBED PLAYER
|
|
||||||
'afreecatv.com',
|
'afreecatv.com',
|
||||||
'aparat.com',
|
'aparat.com',
|
||||||
'applemusic.com',
|
'applemusic.com',
|
||||||
@ -160,17 +105,99 @@ export default Vue.extend({
|
|||||||
'web.tv',
|
'web.tv',
|
||||||
'youtube.com',
|
'youtube.com',
|
||||||
'youtu.be'
|
'youtu.be'
|
||||||
].some(x => x == url.hostname || url.hostname.endsWith(`.${x}`)))
|
];
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
props: {
|
||||||
|
url: {
|
||||||
|
type: String,
|
||||||
|
require: true
|
||||||
|
},
|
||||||
|
|
||||||
|
detail: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
|
||||||
|
mini: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
fetching: true,
|
||||||
|
title: null,
|
||||||
|
description: null,
|
||||||
|
thumbnail: null,
|
||||||
|
icon: null,
|
||||||
|
sitename: null,
|
||||||
|
player: {
|
||||||
|
url: null,
|
||||||
|
width: null,
|
||||||
|
height: null
|
||||||
|
},
|
||||||
|
tweetUrl: null,
|
||||||
|
misskeyUrl
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
created() {
|
||||||
|
const url = new URL(this.url);
|
||||||
|
|
||||||
|
if (this.detail && url.hostname == 'twitter.com' && /^\/.+\/status(es)?\/\d+/.test(url.pathname)) {
|
||||||
|
this.tweetUrl = url;
|
||||||
|
const twttr = (window as any).twttr || {};
|
||||||
|
const loadTweet = () => twttr.widgets.load(this.$refs.tweet);
|
||||||
|
|
||||||
|
if (twttr.widgets) {
|
||||||
|
Vue.nextTick(loadTweet);
|
||||||
|
} else {
|
||||||
|
const wjsId = 'twitter-wjs';
|
||||||
|
if (!document.getElementById(wjsId)) {
|
||||||
|
const head = document.getElementsByTagName('head')[0];
|
||||||
|
const script = document.createElement('script');
|
||||||
|
script.setAttribute('id', wjsId);
|
||||||
|
script.setAttribute('src', 'https://platform.twitter.com/widgets.js');
|
||||||
|
head.appendChild(script);
|
||||||
|
}
|
||||||
|
twttr.ready = loadTweet;
|
||||||
|
(window as any).twttr = twttr;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch(`/url?url=${encodeURIComponent(this.url)}`).then(res => {
|
||||||
|
res.json().then(info => {
|
||||||
|
if (info.url == null) return;
|
||||||
|
this.title = info.title;
|
||||||
|
this.description = info.description;
|
||||||
|
this.thumbnail = info.thumbnail;
|
||||||
|
this.icon = info.icon;
|
||||||
|
this.sitename = info.sitename;
|
||||||
|
this.fetching = false;
|
||||||
|
if (whiteList.some(x => x == url.hostname || url.hostname.endsWith(`.${x}`))) {
|
||||||
this.player = info.player;
|
this.player = info.player;
|
||||||
} // info.url
|
}
|
||||||
}) // json
|
})
|
||||||
}); // fetch
|
});
|
||||||
} // created
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
iframe
|
.player
|
||||||
|
position relative
|
||||||
|
width 100%
|
||||||
|
|
||||||
|
> iframe
|
||||||
|
height 100%
|
||||||
|
left 0
|
||||||
|
position absolute
|
||||||
|
top 0
|
||||||
width 100%
|
width 100%
|
||||||
|
|
||||||
root(isDark)
|
root(isDark)
|
||||||
@ -272,6 +299,29 @@ root(isDark)
|
|||||||
width 12px
|
width 12px
|
||||||
height 12px
|
height 12px
|
||||||
|
|
||||||
|
&.mini
|
||||||
|
font-size 10px
|
||||||
|
|
||||||
|
> .thumbnail
|
||||||
|
position relative
|
||||||
|
width 100%
|
||||||
|
height 60px
|
||||||
|
|
||||||
|
> article
|
||||||
|
left 0
|
||||||
|
width 100%
|
||||||
|
padding 8px
|
||||||
|
|
||||||
|
> header
|
||||||
|
margin-bottom 4px
|
||||||
|
|
||||||
|
> footer
|
||||||
|
margin-top 4px
|
||||||
|
|
||||||
|
> img
|
||||||
|
width 12px
|
||||||
|
height 12px
|
||||||
|
|
||||||
.mk-url-preview[data-darkmode]
|
.mk-url-preview[data-darkmode]
|
||||||
root(true)
|
root(true)
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
import { toUnicode as decodePunycode } from 'punycode';
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
props: ['url', 'target'],
|
props: ['url', 'target'],
|
||||||
data() {
|
data() {
|
||||||
@ -27,11 +28,11 @@ export default Vue.extend({
|
|||||||
created() {
|
created() {
|
||||||
const url = new URL(this.url);
|
const url = new URL(this.url);
|
||||||
this.schema = url.protocol;
|
this.schema = url.protocol;
|
||||||
this.hostname = url.hostname;
|
this.hostname = decodePunycode(url.hostname);
|
||||||
this.port = url.port;
|
this.port = url.port;
|
||||||
this.pathname = url.pathname;
|
this.pathname = decodeURIComponent(url.pathname);
|
||||||
this.query = url.search;
|
this.query = decodeURIComponent(url.search);
|
||||||
this.hash = url.hash;
|
this.hash = decodeURIComponent(url.hash);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -47,7 +47,7 @@ export default Vue.extend({
|
|||||||
props: ['source', 'compact'],
|
props: ['source', 'compact'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
v: this.$store.state.device.visibility || 'public'
|
v: this.$store.state.settings.rememberNoteVisibility ? (this.$store.state.device.visibility || this.$store.state.settings.defaultNoteVisibility) : this.$store.state.settings.defaultNoteVisibility
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@ -97,7 +97,9 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
choose(visibility) {
|
choose(visibility) {
|
||||||
|
if (this.$store.state.settings.rememberNoteVisibility) {
|
||||||
this.$store.commit('device/setVisibility', visibility);
|
this.$store.commit('device/setVisibility', visibility);
|
||||||
|
}
|
||||||
this.$emit('chosen', visibility);
|
this.$emit('chosen', visibility);
|
||||||
this.$destroy();
|
this.$destroy();
|
||||||
},
|
},
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="mk-welcome-timeline">
|
<div class="mk-welcome-timeline">
|
||||||
<div v-for="note in notes">
|
<transition-group name="ldzpakcixzickvggyixyrhqwjaefknon" tag="div">
|
||||||
|
<div v-for="note in notes" :key="note.id">
|
||||||
<mk-avatar class="avatar" :user="note.user" target="_blank"/>
|
<mk-avatar class="avatar" :user="note.user" target="_blank"/>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<header>
|
<header>
|
||||||
@ -17,6 +18,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</transition-group>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -31,15 +33,30 @@ export default Vue.extend({
|
|||||||
default: undefined
|
default: undefined
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
fetching: true,
|
fetching: true,
|
||||||
notes: []
|
notes: [],
|
||||||
|
connection: null,
|
||||||
|
connectionId: null
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
this.fetch();
|
this.fetch();
|
||||||
|
|
||||||
|
this.connection = (this as any).os.streams.localTimelineStream.getConnection();
|
||||||
|
this.connectionId = (this as any).os.streams.localTimelineStream.use();
|
||||||
|
|
||||||
|
this.connection.on('note', this.onNote);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
beforeDestroy() {
|
||||||
|
this.connection.off('note', this.onNote);
|
||||||
|
(this as any).os.streams.localTimelineStream.dispose(this.connectionId);
|
||||||
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
fetch(cb?) {
|
fetch(cb?) {
|
||||||
this.fetching = true;
|
this.fetching = true;
|
||||||
@ -48,22 +65,38 @@ export default Vue.extend({
|
|||||||
local: true,
|
local: true,
|
||||||
reply: false,
|
reply: false,
|
||||||
renote: false,
|
renote: false,
|
||||||
media: false,
|
file: false,
|
||||||
poll: false,
|
poll: false
|
||||||
bot: false
|
|
||||||
}).then(notes => {
|
}).then(notes => {
|
||||||
this.notes = notes;
|
this.notes = notes;
|
||||||
this.fetching = false;
|
this.fetching = false;
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
|
onNote(note) {
|
||||||
|
if (note.replyId != null) return;
|
||||||
|
if (note.renoteId != null) return;
|
||||||
|
if (note.poll != null) return;
|
||||||
|
|
||||||
|
this.notes.unshift(note);
|
||||||
|
},
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
|
.ldzpakcixzickvggyixyrhqwjaefknon-enter
|
||||||
|
.ldzpakcixzickvggyixyrhqwjaefknon-leave-to
|
||||||
|
opacity 0
|
||||||
|
transform translateY(-30px)
|
||||||
|
|
||||||
root(isDark)
|
root(isDark)
|
||||||
background isDark ? #282C37 : #fff
|
background isDark ? #282C37 : #fff
|
||||||
|
|
||||||
|
> div
|
||||||
|
> *
|
||||||
|
transition transform .3s ease, opacity .3s ease
|
||||||
|
|
||||||
> div
|
> div
|
||||||
padding 16px
|
padding 16px
|
||||||
overflow-wrap break-word
|
overflow-wrap break-word
|
||||||
|
@ -191,7 +191,7 @@ class Autocomplete {
|
|||||||
const acct = renderAcct(value);
|
const acct = renderAcct(value);
|
||||||
|
|
||||||
// 挿入
|
// 挿入
|
||||||
this.text = trimmedBefore + '@' + acct + ' ' + after;
|
this.text = `${trimmedBefore}@${acct} ${after}`;
|
||||||
|
|
||||||
// キャレットを戻す
|
// キャレットを戻す
|
||||||
this.vm.$nextTick(() => {
|
this.vm.$nextTick(() => {
|
||||||
@ -207,7 +207,7 @@ class Autocomplete {
|
|||||||
const after = source.substr(caret);
|
const after = source.substr(caret);
|
||||||
|
|
||||||
// 挿入
|
// 挿入
|
||||||
this.text = trimmedBefore + '#' + value + ' ' + after;
|
this.text = `${trimmedBefore}#${value} ${after}`;
|
||||||
|
|
||||||
// キャレットを戻す
|
// キャレットを戻す
|
||||||
this.vm.$nextTick(() => {
|
this.vm.$nextTick(() => {
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
|
||||||
Vue.filter('bytes', (v, digits = 0) => {
|
Vue.filter('bytes', (v, digits = 0) => {
|
||||||
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
|
const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
|
||||||
if (v == 0) return '0Byte';
|
if (v == 0) return '0';
|
||||||
|
const isMinus = v < 0;
|
||||||
|
if (isMinus) v = -v;
|
||||||
const i = Math.floor(Math.log(v) / Math.log(1024));
|
const i = Math.floor(Math.log(v) / Math.log(1024));
|
||||||
return (v / Math.pow(1024, i)).toFixed(digits).replace(/\.0+$/, '') + sizes[i];
|
return (isMinus ? '-' : '') + (v / Math.pow(1024, i)).toFixed(digits).replace(/\.0+$/, '') + sizes[i];
|
||||||
});
|
});
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
|
||||||
Vue.filter('notePage', note => {
|
Vue.filter('notePage', note => {
|
||||||
return '/notes/' + note.id;
|
return `/notes/${note.id}`;
|
||||||
});
|
});
|
||||||
|
@ -11,5 +11,5 @@ Vue.filter('userName', user => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
Vue.filter('userPage', (user, path?) => {
|
Vue.filter('userPage', (user, path?) => {
|
||||||
return '/@' + Vue.filter('acct')(user) + (path ? '/' + path : '');
|
return `/@${Vue.filter('acct')(user)}${(path ? `/${path}` : '')}`;
|
||||||
});
|
});
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="syxhndwprovvuqhmyvveewmbqayniwkv" v-if="!fetching" :data-darkmode="$store.state.device.darkmode">
|
<div class="syxhndwprovvuqhmyvveewmbqayniwkv" v-if="!fetching" :data-darkmode="$store.state.device.darkmode">
|
||||||
<div class="signed-in-as" v-html="'%i18n:@signed-in-as%'.replace('{}', '<b>' + myName + '</b>')"></div>
|
<div class="signed-in-as" v-html="'%i18n:@signed-in-as%'.replace('{}', `<b>${myName}`)"></div>
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
<div class="banner" :style="bannerStyle"></div>
|
<div class="banner" :style="bannerStyle"></div>
|
||||||
@ -32,7 +32,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import parseAcct from '../../../../../misc/acct/parse';
|
import parseAcct from '../../../../../misc/acct/parse';
|
||||||
import getUserName from '../../../../../misc/get-user-name';
|
|
||||||
import Progress from '../../../common/scripts/loading';
|
import Progress from '../../../common/scripts/loading';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
@ -83,7 +82,7 @@ export default Vue.extend({
|
|||||||
userId: this.user.id
|
userId: this.user.id
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
if (this.user.isLocked && this.user.hasPendingFollowRequestFromYou) {
|
if (this.user.hasPendingFollowRequestFromYou) {
|
||||||
this.user = await (this as any).api('following/requests/cancel', {
|
this.user = await (this as any).api('following/requests/cancel', {
|
||||||
userId: this.user.id
|
userId: this.user.id
|
||||||
});
|
});
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="mkw-analog-clock">
|
<div class="mkw-analog-clock">
|
||||||
<mk-widget-container :naked="!(props.design % 2)" :show-header="false">
|
<mk-widget-container :naked="props.style % 2 === 0" :show-header="false">
|
||||||
<div class="mkw-analog-clock--body">
|
<div class="mkw-analog-clock--body">
|
||||||
<mk-analog-clock :dark="$store.state.device.darkmode" :smooth="!(props.design && ~props.design)"/>
|
<mk-analog-clock :dark="$store.state.device.darkmode" :smooth="props.style < 2"/>
|
||||||
</div>
|
</div>
|
||||||
</mk-widget-container>
|
</mk-widget-container>
|
||||||
</div>
|
</div>
|
||||||
@ -13,13 +13,12 @@ import define from '../../../common/define-widget';
|
|||||||
export default define({
|
export default define({
|
||||||
name: 'analog-clock',
|
name: 'analog-clock',
|
||||||
props: () => ({
|
props: () => ({
|
||||||
design: -1
|
style: 0
|
||||||
})
|
})
|
||||||
}).extend({
|
}).extend({
|
||||||
methods: {
|
methods: {
|
||||||
func() {
|
func() {
|
||||||
if (++this.props.design > 2)
|
this.props.style = (this.props.style + 1) % 4;
|
||||||
this.props.design = -1;
|
|
||||||
this.save();
|
this.save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="mkw-broadcast"
|
<div class="anltbovirfeutcigvwgmgxipejaeozxi"
|
||||||
:data-found="broadcasts.length != 0"
|
:data-found="announcements && announcements.length != 0"
|
||||||
:data-melt="props.design == 1"
|
:data-melt="props.design == 1"
|
||||||
:data-mobile="platform == 'mobile'"
|
:data-mobile="platform == 'mobile'"
|
||||||
>
|
>
|
||||||
@ -14,18 +14,17 @@
|
|||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<p class="fetching" v-if="fetching">%i18n:@fetching%<mk-ellipsis/></p>
|
<p class="fetching" v-if="fetching">%i18n:@fetching%<mk-ellipsis/></p>
|
||||||
<h1 v-if="!fetching">{{ broadcasts.length == 0 ? '%i18n:@no-broadcasts%' : broadcasts[i].title }}</h1>
|
<h1 v-if="!fetching">{{ announcements.length == 0 ? '%i18n:@no-broadcasts%' : announcements[i].title }}</h1>
|
||||||
<p v-if="!fetching">
|
<p v-if="!fetching">
|
||||||
<span v-if="broadcasts.length != 0" v-html="broadcasts[i].text"></span>
|
<span v-if="announcements.length != 0" v-html="announcements[i].text"></span>
|
||||||
<template v-if="broadcasts.length == 0">%i18n:@have-a-nice-day%</template>
|
<template v-if="announcements.length == 0">%i18n:@have-a-nice-day%</template>
|
||||||
</p>
|
</p>
|
||||||
<a v-if="broadcasts.length > 1" @click="next">%i18n:@next% >></a>
|
<a v-if="announcements.length > 1" @click="next">%i18n:@next% >></a>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import define from '../../../common/define-widget';
|
import define from '../../../common/define-widget';
|
||||||
import { lang } from '../../../config';
|
|
||||||
|
|
||||||
export default define({
|
export default define({
|
||||||
name: 'broadcast',
|
name: 'broadcast',
|
||||||
@ -37,26 +36,18 @@ export default define({
|
|||||||
return {
|
return {
|
||||||
i: 0,
|
i: 0,
|
||||||
fetching: true,
|
fetching: true,
|
||||||
broadcasts: []
|
announcements: []
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
(this as any).os.getMeta().then(meta => {
|
(this as any).os.getMeta().then(meta => {
|
||||||
let broadcasts = [];
|
this.announcements = meta.broadcasts;
|
||||||
if (meta.broadcasts) {
|
|
||||||
meta.broadcasts.forEach(broadcast => {
|
|
||||||
if (broadcast[lang]) {
|
|
||||||
broadcasts.push(broadcast[lang]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
this.broadcasts = broadcasts;
|
|
||||||
this.fetching = false;
|
this.fetching = false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
next() {
|
next() {
|
||||||
if (this.i == this.broadcasts.length - 1) {
|
if (this.i == this.announcements.length - 1) {
|
||||||
this.i = 0;
|
this.i = 0;
|
||||||
} else {
|
} else {
|
||||||
this.i++;
|
this.i++;
|
||||||
@ -75,7 +66,7 @@ export default define({
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
.mkw-broadcast
|
root(isDark)
|
||||||
padding 10px
|
padding 10px
|
||||||
border solid 1px #4078c0
|
border solid 1px #4078c0
|
||||||
border-radius 6px
|
border-radius 6px
|
||||||
@ -135,22 +126,18 @@ export default define({
|
|||||||
margin 0
|
margin 0
|
||||||
font-size 0.95em
|
font-size 0.95em
|
||||||
font-weight normal
|
font-weight normal
|
||||||
color #4078c0
|
color isDark ? #539eff : #4078c0
|
||||||
|
|
||||||
> p
|
> p
|
||||||
display block
|
display block
|
||||||
z-index 1
|
z-index 1
|
||||||
margin 0
|
margin 0
|
||||||
font-size 0.7em
|
font-size 0.7em
|
||||||
color #555
|
color isDark ? #fff : #555
|
||||||
|
|
||||||
&.fetching
|
&.fetching
|
||||||
text-align center
|
text-align center
|
||||||
|
|
||||||
a
|
|
||||||
color #555
|
|
||||||
text-decoration underline
|
|
||||||
|
|
||||||
> a
|
> a
|
||||||
display block
|
display block
|
||||||
font-size 0.7em
|
font-size 0.7em
|
||||||
@ -159,4 +146,10 @@ export default define({
|
|||||||
> p
|
> p
|
||||||
color #fff
|
color #fff
|
||||||
|
|
||||||
|
.anltbovirfeutcigvwgmgxipejaeozxi[data-darkmode]
|
||||||
|
root(true)
|
||||||
|
|
||||||
|
.anltbovirfeutcigvwgmgxipejaeozxi:not([data-darkmode])
|
||||||
|
root(false)
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
<div class="mkw-donation" :data-mobile="platform == 'mobile'">
|
<div class="mkw-donation" :data-mobile="platform == 'mobile'">
|
||||||
<article>
|
<article>
|
||||||
<h1>%fa:heart%%i18n:@title%</h1>
|
<h1>%fa:heart%%i18n:@title%</h1>
|
||||||
<p>
|
<p v-if="meta">
|
||||||
{{ '%i18n:@text%'.substr(0, '%i18n:@text%'.indexOf('{')) }}
|
{{ '%i18n:@text%'.substr(0, '%i18n:@text%'.indexOf('{')) }}
|
||||||
<a href="https://syuilo.com">@syuilo</a>
|
<a :href="meta.maintainer.url">{{ meta.maintainer.name }}</a>
|
||||||
{{ '%i18n:@text%'.substr('%i18n:@text%'.indexOf('}') + 1) }}
|
{{ '%i18n:@text%'.substr('%i18n:@text%'.indexOf('}') + 1) }}
|
||||||
</p>
|
</p>
|
||||||
</article>
|
</article>
|
||||||
@ -15,6 +15,17 @@
|
|||||||
import define from '../../../common/define-widget';
|
import define from '../../../common/define-widget';
|
||||||
export default define({
|
export default define({
|
||||||
name: 'donation'
|
name: 'donation'
|
||||||
|
}).extend({
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
meta: null
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
(this as any).os.getMeta().then(meta => {
|
||||||
|
this.meta = meta;
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -4,20 +4,7 @@
|
|||||||
<template slot="header">%fa:hashtag%%i18n:@title%</template>
|
<template slot="header">%fa:hashtag%%i18n:@title%</template>
|
||||||
|
|
||||||
<div class="mkw-hashtags--body" :data-mobile="platform == 'mobile'">
|
<div class="mkw-hashtags--body" :data-mobile="platform == 'mobile'">
|
||||||
<p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
|
<mk-trends/>
|
||||||
<p class="empty" v-else-if="stats.length == 0">%fa:exclamation-circle%%i18n:@empty%</p>
|
|
||||||
<!-- トランジションを有効にするとなぜかメモリリークする -->
|
|
||||||
<!-- <transition-group v-else tag="div" name="chart"> -->
|
|
||||||
<div>
|
|
||||||
<div v-for="stat in stats" :key="stat.tag">
|
|
||||||
<div class="tag">
|
|
||||||
<router-link :to="`/tags/${ encodeURIComponent(stat.tag) }`" :title="stat.tag">#{{ stat.tag }}</router-link>
|
|
||||||
<p>{{ '%i18n:@count%'.replace('{}', stat.usersCount) }}</p>
|
|
||||||
</div>
|
|
||||||
<x-chart class="chart" :src="stat.chart"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- </transition-group> -->
|
|
||||||
</div>
|
</div>
|
||||||
</mk-widget-container>
|
</mk-widget-container>
|
||||||
</div>
|
</div>
|
||||||
@ -25,7 +12,6 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import define from '../../../common/define-widget';
|
import define from '../../../common/define-widget';
|
||||||
import XChart from './hashtags.chart.vue';
|
|
||||||
|
|
||||||
export default define({
|
export default define({
|
||||||
name: 'hashtags',
|
name: 'hashtags',
|
||||||
@ -33,89 +19,11 @@ export default define({
|
|||||||
compact: false
|
compact: false
|
||||||
})
|
})
|
||||||
}).extend({
|
}).extend({
|
||||||
components: {
|
|
||||||
XChart
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
stats: [],
|
|
||||||
fetching: true,
|
|
||||||
clock: null
|
|
||||||
};
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
this.fetch();
|
|
||||||
this.clock = setInterval(this.fetch, 1000 * 60);
|
|
||||||
},
|
|
||||||
beforeDestroy() {
|
|
||||||
clearInterval(this.clock);
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
func() {
|
func() {
|
||||||
this.props.compact = !this.props.compact;
|
this.props.compact = !this.props.compact;
|
||||||
this.save();
|
this.save();
|
||||||
},
|
|
||||||
fetch() {
|
|
||||||
(this as any).api('hashtags/trend').then(stats => {
|
|
||||||
this.stats = stats;
|
|
||||||
this.fetching = false;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="stylus" scoped>
|
|
||||||
root(isDark)
|
|
||||||
.mkw-hashtags--body
|
|
||||||
> .fetching
|
|
||||||
> .empty
|
|
||||||
margin 0
|
|
||||||
padding 16px
|
|
||||||
text-align center
|
|
||||||
color #aaa
|
|
||||||
|
|
||||||
> [data-fa]
|
|
||||||
margin-right 4px
|
|
||||||
|
|
||||||
> div
|
|
||||||
.chart-move
|
|
||||||
transition transform 1s ease
|
|
||||||
|
|
||||||
> div
|
|
||||||
display flex
|
|
||||||
align-items center
|
|
||||||
padding 14px 16px
|
|
||||||
|
|
||||||
&:not(:last-child)
|
|
||||||
border-bottom solid 1px isDark ? #393f4f : #eee
|
|
||||||
|
|
||||||
> .tag
|
|
||||||
flex 1
|
|
||||||
overflow hidden
|
|
||||||
font-size 14px
|
|
||||||
color isDark ? #9baec8 : #65727b
|
|
||||||
|
|
||||||
> a
|
|
||||||
display block
|
|
||||||
width 100%
|
|
||||||
white-space nowrap
|
|
||||||
overflow hidden
|
|
||||||
text-overflow ellipsis
|
|
||||||
color inherit
|
|
||||||
|
|
||||||
> p
|
|
||||||
margin 0
|
|
||||||
font-size 75%
|
|
||||||
opacity 0.7
|
|
||||||
|
|
||||||
> .chart
|
|
||||||
height 30px
|
|
||||||
|
|
||||||
.mkw-hashtags[data-darkmode]
|
|
||||||
root(true)
|
|
||||||
|
|
||||||
.mkw-hashtags:not([data-darkmode])
|
|
||||||
root(false)
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
@ -1,51 +1,22 @@
|
|||||||
declare const _HOST_: string;
|
|
||||||
declare const _HOSTNAME_: string;
|
|
||||||
declare const _URL_: string;
|
|
||||||
declare const _NAME_: string;
|
|
||||||
declare const _DESCRIPTION_: string;
|
|
||||||
declare const _API_URL_: string;
|
|
||||||
declare const _WS_URL_: string;
|
|
||||||
declare const _DOCS_URL_: string;
|
|
||||||
declare const _STATS_URL_: string;
|
|
||||||
declare const _STATUS_URL_: string;
|
|
||||||
declare const _DEV_URL_: string;
|
|
||||||
declare const _REPOSITORY_URL_: string;
|
|
||||||
declare const _FEEDBACK_URL_: string;
|
|
||||||
declare const _LANG_: string;
|
declare const _LANG_: string;
|
||||||
declare const _LANGS_: string;
|
declare const _LANGS_: string;
|
||||||
declare const _RECAPTCHA_SITEKEY_: string;
|
|
||||||
declare const _SW_PUBLICKEY_: string;
|
|
||||||
declare const _THEME_COLOR_: string;
|
declare const _THEME_COLOR_: string;
|
||||||
declare const _COPYRIGHT_: string;
|
declare const _COPYRIGHT_: string;
|
||||||
declare const _VERSION_: string;
|
declare const _VERSION_: string;
|
||||||
declare const _CODENAME_: string;
|
declare const _CODENAME_: string;
|
||||||
declare const _LICENSE_: string;
|
declare const _ENV_: string;
|
||||||
declare const _GOOGLE_MAPS_API_KEY_: string;
|
|
||||||
declare const _WELCOME_BG_URL_: string;
|
|
||||||
declare const _TWITTER_INTEGRATION_: boolean;
|
|
||||||
|
|
||||||
export const host = _HOST_;
|
const address = new URL(location.href);
|
||||||
export const hostname = _HOSTNAME_;
|
|
||||||
export const url = _URL_;
|
export const host = address.host;
|
||||||
export const name = _NAME_;
|
export const hostname = address.hostname;
|
||||||
export const description = _DESCRIPTION_;
|
export const url = address.origin;
|
||||||
export const apiUrl = _API_URL_;
|
export const apiUrl = url + '/api';
|
||||||
export const wsUrl = _WS_URL_;
|
export const wsUrl = url.replace('http://', 'ws://').replace('https://', 'wss://');
|
||||||
export const docsUrl = _DOCS_URL_;
|
|
||||||
export const statsUrl = _STATS_URL_;
|
|
||||||
export const statusUrl = _STATUS_URL_;
|
|
||||||
export const devUrl = _DEV_URL_;
|
|
||||||
export const repositoryUrl = _REPOSITORY_URL_;
|
|
||||||
export const feedbackUrl = _FEEDBACK_URL_;
|
|
||||||
export const lang = _LANG_;
|
export const lang = _LANG_;
|
||||||
export const langs = _LANGS_;
|
export const langs = _LANGS_;
|
||||||
export const recaptchaSitekey = _RECAPTCHA_SITEKEY_;
|
|
||||||
export const swPublickey = _SW_PUBLICKEY_;
|
|
||||||
export const themeColor = _THEME_COLOR_;
|
export const themeColor = _THEME_COLOR_;
|
||||||
export const copyright = _COPYRIGHT_;
|
export const copyright = _COPYRIGHT_;
|
||||||
export const version = _VERSION_;
|
export const version = _VERSION_;
|
||||||
export const codename = _CODENAME_;
|
export const codename = _CODENAME_;
|
||||||
export const license = _LICENSE_;
|
export const env = _ENV_;
|
||||||
export const googleMapsApiKey = _GOOGLE_MAPS_API_KEY_;
|
|
||||||
export const welcomeBgUrl = _WELCOME_BG_URL_;
|
|
||||||
export const twitterIntegration = _TWITTER_INTEGRATION_;
|
|
||||||
|
@ -3,8 +3,21 @@ import { apiUrl } from '../../config';
|
|||||||
import CropWindow from '../views/components/crop-window.vue';
|
import CropWindow from '../views/components/crop-window.vue';
|
||||||
import ProgressDialog from '../views/components/progress-dialog.vue';
|
import ProgressDialog from '../views/components/progress-dialog.vue';
|
||||||
|
|
||||||
export default (os: OS) => (cb, file = null) => {
|
export default (os: OS) => {
|
||||||
const fileSelected = file => {
|
|
||||||
|
const cropImage = file => new Promise((resolve, reject) => {
|
||||||
|
|
||||||
|
const regex = RegExp('\.(jpg|jpeg|png|gif|webp|bmp|tiff)$');
|
||||||
|
if (!regex.test(file.name) ) {
|
||||||
|
os.apis.dialog({
|
||||||
|
title: '%fa:info-circle% %i18n:desktop.invalid-filetype%',
|
||||||
|
text: null,
|
||||||
|
actions: [{
|
||||||
|
text: '%i18n:common.got-it%'
|
||||||
|
}]
|
||||||
|
});
|
||||||
|
return reject('invalid-filetype');
|
||||||
|
}
|
||||||
|
|
||||||
const w = os.new(CropWindow, {
|
const w = os.new(CropWindow, {
|
||||||
image: file,
|
image: file,
|
||||||
@ -19,27 +32,29 @@ export default (os: OS) => (cb, file = null) => {
|
|||||||
|
|
||||||
os.api('drive/folders/find', {
|
os.api('drive/folders/find', {
|
||||||
name: '%i18n:desktop.avatar%'
|
name: '%i18n:desktop.avatar%'
|
||||||
}).then(iconFolder => {
|
}).then(avatarFolder => {
|
||||||
if (iconFolder.length === 0) {
|
if (avatarFolder.length === 0) {
|
||||||
os.api('drive/folders/create', {
|
os.api('drive/folders/create', {
|
||||||
name: '%i18n:desktop.avatar%'
|
name: '%i18n:desktop.avatar%'
|
||||||
}).then(iconFolder => {
|
}).then(iconFolder => {
|
||||||
upload(data, iconFolder);
|
resolve(upload(data, iconFolder));
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
upload(data, iconFolder[0]);
|
resolve(upload(data, avatarFolder[0]));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
w.$once('skipped', () => {
|
w.$once('skipped', () => {
|
||||||
set(file);
|
resolve(file);
|
||||||
});
|
});
|
||||||
|
|
||||||
document.body.appendChild(w.$el);
|
w.$once('cancelled', reject);
|
||||||
};
|
|
||||||
|
|
||||||
const upload = (data, folder) => {
|
document.body.appendChild(w.$el);
|
||||||
|
});
|
||||||
|
|
||||||
|
const upload = (data, folder) => new Promise((resolve, reject) => {
|
||||||
const dialog = os.new(ProgressDialog, {
|
const dialog = os.new(ProgressDialog, {
|
||||||
title: '%i18n:desktop.uploading-avatar%'
|
title: '%i18n:desktop.uploading-avatar%'
|
||||||
});
|
});
|
||||||
@ -52,18 +67,19 @@ export default (os: OS) => (cb, file = null) => {
|
|||||||
xhr.onload = e => {
|
xhr.onload = e => {
|
||||||
const file = JSON.parse((e.target as any).response);
|
const file = JSON.parse((e.target as any).response);
|
||||||
(dialog as any).close();
|
(dialog as any).close();
|
||||||
set(file);
|
resolve(file);
|
||||||
};
|
};
|
||||||
|
xhr.onerror = reject;
|
||||||
|
|
||||||
xhr.upload.onprogress = e => {
|
xhr.upload.onprogress = e => {
|
||||||
if (e.lengthComputable) (dialog as any).update(e.loaded, e.total);
|
if (e.lengthComputable) (dialog as any).update(e.loaded, e.total);
|
||||||
};
|
};
|
||||||
|
|
||||||
xhr.send(data);
|
xhr.send(data);
|
||||||
};
|
});
|
||||||
|
|
||||||
const set = file => {
|
const setAvatar = file => {
|
||||||
os.api('i/update', {
|
return os.api('i/update', {
|
||||||
avatarId: file.id
|
avatarId: file.id
|
||||||
}).then(i => {
|
}).then(i => {
|
||||||
os.store.commit('updateIKeyValue', {
|
os.store.commit('updateIKeyValue', {
|
||||||
@ -83,18 +99,21 @@ export default (os: OS) => (cb, file = null) => {
|
|||||||
}]
|
}]
|
||||||
});
|
});
|
||||||
|
|
||||||
if (cb) cb(i);
|
return i;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
if (file) {
|
return (file = null) => {
|
||||||
fileSelected(file);
|
const selectedFile = file
|
||||||
} else {
|
? Promise.resolve(file)
|
||||||
os.apis.chooseDriveFile({
|
: os.apis.chooseDriveFile({
|
||||||
multiple: false,
|
multiple: false,
|
||||||
title: '%fa:image% %i18n:desktop.choose-avatar%'
|
title: '%fa:image% %i18n:desktop.choose-avatar%'
|
||||||
}).then(file => {
|
|
||||||
fileSelected(file);
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
return selectedFile
|
||||||
|
.then(cropImage)
|
||||||
|
.then(setAvatar)
|
||||||
|
.catch(err => err && console.warn(err));
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
@ -6,6 +6,19 @@ import ProgressDialog from '../views/components/progress-dialog.vue';
|
|||||||
export default (os: OS) => {
|
export default (os: OS) => {
|
||||||
|
|
||||||
const cropImage = file => new Promise((resolve, reject) => {
|
const cropImage = file => new Promise((resolve, reject) => {
|
||||||
|
|
||||||
|
const regex = RegExp('\.(jpg|jpeg|png|gif|webp|bmp|tiff)$');
|
||||||
|
if (!regex.test(file.name) ) {
|
||||||
|
os.apis.dialog({
|
||||||
|
title: '%fa:info-circle% %i18n:desktop.invalid-filetype%',
|
||||||
|
text: null,
|
||||||
|
actions: [{
|
||||||
|
text: '%i18n:common.got-it%'
|
||||||
|
}]
|
||||||
|
});
|
||||||
|
return reject('invalid-filetype');
|
||||||
|
}
|
||||||
|
|
||||||
const w = os.new(CropWindow, {
|
const w = os.new(CropWindow, {
|
||||||
image: file,
|
image: file,
|
||||||
title: '%i18n:desktop.banner-crop-title%',
|
title: '%i18n:desktop.banner-crop-title%',
|
||||||
|
@ -25,6 +25,7 @@ import updateBanner from './api/update-banner';
|
|||||||
import MkIndex from './views/pages/index.vue';
|
import MkIndex from './views/pages/index.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 MkUser from './views/pages/user/user.vue';
|
import MkUser from './views/pages/user/user.vue';
|
||||||
import MkFavorites from './views/pages/favorites.vue';
|
import MkFavorites from './views/pages/favorites.vue';
|
||||||
import MkSelectDrive from './views/pages/selectdrive.vue';
|
import MkSelectDrive from './views/pages/selectdrive.vue';
|
||||||
@ -57,6 +58,7 @@ init(async (launch) => {
|
|||||||
{ path: '/', name: 'index', component: MkIndex },
|
{ path: '/', name: 'index', component: MkIndex },
|
||||||
{ 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: '/i/customize-home', component: MkHomeCustomize },
|
{ path: '/i/customize-home', component: MkHomeCustomize },
|
||||||
{ path: '/i/favorites', component: MkFavorites },
|
{ path: '/i/favorites', component: MkFavorites },
|
||||||
{ path: '/i/messaging/:user', component: MkMessagingRoom },
|
{ path: '/i/messaging/:user', component: MkMessagingRoom },
|
||||||
@ -94,7 +96,7 @@ init(async (launch) => {
|
|||||||
/**
|
/**
|
||||||
* Init Notification
|
* Init Notification
|
||||||
*/
|
*/
|
||||||
if ('Notification' in window) {
|
if ('Notification' in window && os.store.getters.isSignedIn) {
|
||||||
// 許可を得ていなかったらリクエスト
|
// 許可を得ていなかったらリクエスト
|
||||||
if ((Notification as any).permission == 'default') {
|
if ((Notification as any).permission == 'default') {
|
||||||
await Notification.requestPermission();
|
await Notification.requestPermission();
|
||||||
|
42
src/client/app/desktop/views/components/charts.chart.ts
Normal file
42
src/client/app/desktop/views/components/charts.chart.ts
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import Vue from 'vue';
|
||||||
|
import { Line } from 'vue-chartjs';
|
||||||
|
import * as mergeOptions from 'merge-options';
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
extends: Line,
|
||||||
|
props: {
|
||||||
|
data: {
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
opts: {
|
||||||
|
required: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
data() {
|
||||||
|
this.render();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.render();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
render() {
|
||||||
|
this.renderChart(this.data, mergeOptions({
|
||||||
|
responsive: true,
|
||||||
|
maintainAspectRatio: false,
|
||||||
|
scales: {
|
||||||
|
xAxes: [{
|
||||||
|
type: 'time',
|
||||||
|
distribution: 'series'
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
intersect: false,
|
||||||
|
mode: 'x',
|
||||||
|
position: 'nearest'
|
||||||
|
}
|
||||||
|
}, this.opts || {}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
587
src/client/app/desktop/views/components/charts.vue
Normal file
587
src/client/app/desktop/views/components/charts.vue
Normal file
@ -0,0 +1,587 @@
|
|||||||
|
<template>
|
||||||
|
<div class="gkgckalzgidaygcxnugepioremxvxvpt">
|
||||||
|
<header>
|
||||||
|
<b>%i18n:@title%:</b>
|
||||||
|
<select v-model="chartType">
|
||||||
|
<optgroup label="%i18n:@users%">
|
||||||
|
<option value="users">%i18n:@charts.users%</option>
|
||||||
|
<option value="users-total">%i18n:@charts.users-total%</option>
|
||||||
|
</optgroup>
|
||||||
|
<optgroup label="%i18n:@notes%">
|
||||||
|
<option value="notes">%i18n:@charts.notes%</option>
|
||||||
|
<option value="local-notes">%i18n:@charts.local-notes%</option>
|
||||||
|
<option value="remote-notes">%i18n:@charts.remote-notes%</option>
|
||||||
|
<option value="notes-total">%i18n:@charts.notes-total%</option>
|
||||||
|
</optgroup>
|
||||||
|
<optgroup label="%i18n:@drive%">
|
||||||
|
<option value="drive-files">%i18n:@charts.drive-files%</option>
|
||||||
|
<option value="drive-files-total">%i18n:@charts.drive-files-total%</option>
|
||||||
|
<option value="drive">%i18n:@charts.drive%</option>
|
||||||
|
<option value="drive-total">%i18n:@charts.drive-total%</option>
|
||||||
|
</optgroup>
|
||||||
|
</select>
|
||||||
|
<div>
|
||||||
|
<span @click="span = 'day'" :class="{ active: span == 'day' }">%i18n:@per-day%</span> | <span @click="span = 'hour'" :class="{ active: span == 'hour' }">%i18n:@per-hour%</span>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<div>
|
||||||
|
<x-chart v-if="chart" :data="data[0]" :opts="data[1]"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
import XChart from './charts.chart.ts';
|
||||||
|
|
||||||
|
const colors = {
|
||||||
|
local: 'rgb(246, 88, 79)',
|
||||||
|
remote: 'rgb(65, 221, 222)',
|
||||||
|
|
||||||
|
localPlus: 'rgb(52, 178, 118)',
|
||||||
|
remotePlus: 'rgb(158, 255, 209)',
|
||||||
|
localMinus: 'rgb(255, 97, 74)',
|
||||||
|
remoteMinus: 'rgb(255, 149, 134)'
|
||||||
|
};
|
||||||
|
|
||||||
|
const rgba = (color: string): string => {
|
||||||
|
return color.replace('rgb', 'rgba').replace(')', ', 0.1)');
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
components: {
|
||||||
|
XChart
|
||||||
|
},
|
||||||
|
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
chart: null,
|
||||||
|
chartType: 'notes',
|
||||||
|
span: 'hour'
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
data(): any {
|
||||||
|
if (this.chart == null) return null;
|
||||||
|
switch (this.chartType) {
|
||||||
|
case 'users': return this.usersChart(false);
|
||||||
|
case 'users-total': return this.usersChart(true);
|
||||||
|
case 'notes': return this.notesChart('combined');
|
||||||
|
case 'local-notes': return this.notesChart('local');
|
||||||
|
case 'remote-notes': return this.notesChart('remote');
|
||||||
|
case 'notes-total': return this.notesTotalChart();
|
||||||
|
case 'drive': return this.driveChart();
|
||||||
|
case 'drive-total': return this.driveTotalChart();
|
||||||
|
case 'drive-files': return this.driveFilesChart();
|
||||||
|
case 'drive-files-total': return this.driveFilesTotalChart();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
stats(): any[] {
|
||||||
|
return (
|
||||||
|
this.span == 'day' ? this.chart.perDay :
|
||||||
|
this.span == 'hour' ? this.chart.perHour :
|
||||||
|
null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
created() {
|
||||||
|
(this as any).api('chart', {
|
||||||
|
limit: 32
|
||||||
|
}).then(chart => {
|
||||||
|
this.chart = chart;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
notesChart(type: string): any {
|
||||||
|
const data = this.stats.slice().reverse().map(x => ({
|
||||||
|
date: new Date(x.date),
|
||||||
|
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,
|
||||||
|
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,
|
||||||
|
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 [{
|
||||||
|
datasets: [{
|
||||||
|
label: 'All',
|
||||||
|
fill: false,
|
||||||
|
borderColor: '#555',
|
||||||
|
borderWidth: 2,
|
||||||
|
borderDash: [4, 4],
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.all }))
|
||||||
|
}, {
|
||||||
|
label: 'Renotes',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: 'rgba(161, 222, 65, 0.1)',
|
||||||
|
borderColor: '#a1de41',
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.renote }))
|
||||||
|
}, {
|
||||||
|
label: 'Replies',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: 'rgba(247, 121, 108, 0.1)',
|
||||||
|
borderColor: '#f7796c',
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.reply }))
|
||||||
|
}, {
|
||||||
|
label: 'Normal',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: 'rgba(65, 221, 222, 0.1)',
|
||||||
|
borderColor: '#41ddde',
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.normal }))
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
scales: {
|
||||||
|
yAxes: [{
|
||||||
|
ticks: {
|
||||||
|
callback: value => {
|
||||||
|
return Vue.filter('number')(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
callbacks: {
|
||||||
|
label: (tooltipItem, data) => {
|
||||||
|
const label = data.datasets[tooltipItem.datasetIndex].label || '';
|
||||||
|
return `${label}: ${Vue.filter('number')(tooltipItem.yLabel)}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
},
|
||||||
|
|
||||||
|
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 [{
|
||||||
|
datasets: [{
|
||||||
|
label: 'Combined',
|
||||||
|
fill: false,
|
||||||
|
borderColor: '#555',
|
||||||
|
borderWidth: 2,
|
||||||
|
borderDash: [4, 4],
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.remoteCount + x.localCount }))
|
||||||
|
}, {
|
||||||
|
label: 'Local',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.local),
|
||||||
|
borderColor: colors.local,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.localCount }))
|
||||||
|
}, {
|
||||||
|
label: 'Remote',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.remote),
|
||||||
|
borderColor: colors.remote,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.remoteCount }))
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
scales: {
|
||||||
|
yAxes: [{
|
||||||
|
ticks: {
|
||||||
|
callback: value => {
|
||||||
|
return Vue.filter('number')(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
callbacks: {
|
||||||
|
label: (tooltipItem, data) => {
|
||||||
|
const label = data.datasets[tooltipItem.datasetIndex].label || '';
|
||||||
|
return `${label}: ${Vue.filter('number')(tooltipItem.yLabel)}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
},
|
||||||
|
|
||||||
|
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 [{
|
||||||
|
datasets: [{
|
||||||
|
label: 'Combined',
|
||||||
|
fill: false,
|
||||||
|
borderColor: '#555',
|
||||||
|
borderWidth: 2,
|
||||||
|
borderDash: [4, 4],
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.remoteCount + x.localCount }))
|
||||||
|
}, {
|
||||||
|
label: 'Local',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.local),
|
||||||
|
borderColor: colors.local,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.localCount }))
|
||||||
|
}, {
|
||||||
|
label: 'Remote',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.remote),
|
||||||
|
borderColor: colors.remote,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.remoteCount }))
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
scales: {
|
||||||
|
yAxes: [{
|
||||||
|
ticks: {
|
||||||
|
callback: value => {
|
||||||
|
return Vue.filter('number')(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
callbacks: {
|
||||||
|
label: (tooltipItem, data) => {
|
||||||
|
const label = data.datasets[tooltipItem.datasetIndex].label || '';
|
||||||
|
return `${label}: ${Vue.filter('number')(tooltipItem.yLabel)}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
},
|
||||||
|
|
||||||
|
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 [{
|
||||||
|
datasets: [{
|
||||||
|
label: 'All',
|
||||||
|
fill: false,
|
||||||
|
borderColor: '#555',
|
||||||
|
borderWidth: 2,
|
||||||
|
borderDash: [4, 4],
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.localInc + x.localDec + x.remoteInc + x.remoteDec }))
|
||||||
|
}, {
|
||||||
|
label: 'Local +',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.localPlus),
|
||||||
|
borderColor: colors.localPlus,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.localInc }))
|
||||||
|
}, {
|
||||||
|
label: 'Local -',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.localMinus),
|
||||||
|
borderColor: colors.localMinus,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.localDec }))
|
||||||
|
}, {
|
||||||
|
label: 'Remote +',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.remotePlus),
|
||||||
|
borderColor: colors.remotePlus,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.remoteInc }))
|
||||||
|
}, {
|
||||||
|
label: 'Remote -',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.remoteMinus),
|
||||||
|
borderColor: colors.remoteMinus,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.remoteDec }))
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
scales: {
|
||||||
|
yAxes: [{
|
||||||
|
ticks: {
|
||||||
|
callback: value => {
|
||||||
|
return Vue.filter('bytes')(value, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
callbacks: {
|
||||||
|
label: (tooltipItem, data) => {
|
||||||
|
const label = data.datasets[tooltipItem.datasetIndex].label || '';
|
||||||
|
return `${label}: ${Vue.filter('bytes')(tooltipItem.yLabel, 1)}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
},
|
||||||
|
|
||||||
|
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 [{
|
||||||
|
datasets: [{
|
||||||
|
label: 'Combined',
|
||||||
|
fill: false,
|
||||||
|
borderColor: '#555',
|
||||||
|
borderWidth: 2,
|
||||||
|
borderDash: [4, 4],
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.remoteSize + x.localSize }))
|
||||||
|
}, {
|
||||||
|
label: 'Local',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.local),
|
||||||
|
borderColor: colors.local,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.localSize }))
|
||||||
|
}, {
|
||||||
|
label: 'Remote',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.remote),
|
||||||
|
borderColor: colors.remote,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.remoteSize }))
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
scales: {
|
||||||
|
yAxes: [{
|
||||||
|
ticks: {
|
||||||
|
callback: value => {
|
||||||
|
return Vue.filter('bytes')(value, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
callbacks: {
|
||||||
|
label: (tooltipItem, data) => {
|
||||||
|
const label = data.datasets[tooltipItem.datasetIndex].label || '';
|
||||||
|
return `${label}: ${Vue.filter('bytes')(tooltipItem.yLabel, 1)}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
},
|
||||||
|
|
||||||
|
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 [{
|
||||||
|
datasets: [{
|
||||||
|
label: 'All',
|
||||||
|
fill: false,
|
||||||
|
borderColor: '#555',
|
||||||
|
borderWidth: 2,
|
||||||
|
borderDash: [4, 4],
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.localInc + x.localDec + x.remoteInc + x.remoteDec }))
|
||||||
|
}, {
|
||||||
|
label: 'Local +',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.localPlus),
|
||||||
|
borderColor: colors.localPlus,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.localInc }))
|
||||||
|
}, {
|
||||||
|
label: 'Local -',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.localMinus),
|
||||||
|
borderColor: colors.localMinus,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.localDec }))
|
||||||
|
}, {
|
||||||
|
label: 'Remote +',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.remotePlus),
|
||||||
|
borderColor: colors.remotePlus,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.remoteInc }))
|
||||||
|
}, {
|
||||||
|
label: 'Remote -',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.remoteMinus),
|
||||||
|
borderColor: colors.remoteMinus,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.remoteDec }))
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
scales: {
|
||||||
|
yAxes: [{
|
||||||
|
ticks: {
|
||||||
|
callback: value => {
|
||||||
|
return Vue.filter('number')(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
callbacks: {
|
||||||
|
label: (tooltipItem, data) => {
|
||||||
|
const label = data.datasets[tooltipItem.datasetIndex].label || '';
|
||||||
|
return `${label}: ${Vue.filter('number')(tooltipItem.yLabel)}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
},
|
||||||
|
|
||||||
|
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 [{
|
||||||
|
datasets: [{
|
||||||
|
label: 'Combined',
|
||||||
|
fill: false,
|
||||||
|
borderColor: '#555',
|
||||||
|
borderWidth: 2,
|
||||||
|
borderDash: [4, 4],
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.localCount + x.remoteCount }))
|
||||||
|
}, {
|
||||||
|
label: 'Local',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.local),
|
||||||
|
borderColor: colors.local,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.localCount }))
|
||||||
|
}, {
|
||||||
|
label: 'Remote',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.remote),
|
||||||
|
borderColor: colors.remote,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: data.map(x => ({ t: x.date, y: x.remoteCount }))
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
scales: {
|
||||||
|
yAxes: [{
|
||||||
|
ticks: {
|
||||||
|
callback: value => {
|
||||||
|
return Vue.filter('number')(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
callbacks: {
|
||||||
|
label: (tooltipItem, data) => {
|
||||||
|
const label = data.datasets[tooltipItem.datasetIndex].label || '';
|
||||||
|
return `${label}: ${Vue.filter('number')(tooltipItem.yLabel)}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" scoped>
|
||||||
|
@import '~const.styl'
|
||||||
|
|
||||||
|
.gkgckalzgidaygcxnugepioremxvxvpt
|
||||||
|
padding 32px
|
||||||
|
background #fff
|
||||||
|
box-shadow 0 2px 8px rgba(#000, 0.1)
|
||||||
|
|
||||||
|
*
|
||||||
|
user-select none
|
||||||
|
|
||||||
|
> header
|
||||||
|
display flex
|
||||||
|
margin 0 0 1em 0
|
||||||
|
padding 0 0 8px 0
|
||||||
|
font-size 1em
|
||||||
|
color #555
|
||||||
|
border-bottom solid 1px #eee
|
||||||
|
|
||||||
|
> b
|
||||||
|
margin-right 8px
|
||||||
|
|
||||||
|
> *:last-child
|
||||||
|
margin-left auto
|
||||||
|
|
||||||
|
*
|
||||||
|
&:not(.active)
|
||||||
|
color $theme-color
|
||||||
|
cursor pointer
|
||||||
|
|
||||||
|
> div
|
||||||
|
> *
|
||||||
|
display block
|
||||||
|
height 320px
|
||||||
|
|
||||||
|
</style>
|
@ -163,7 +163,7 @@ export default Vue.extend({
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
alert('%i18n:@unhandled-error% ' + err);
|
alert(`%i18n:@unhandled-error% ${err}`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -323,7 +323,7 @@ export default Vue.extend({
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
alert('%i18n:@unhandled-error% ' + err);
|
alert(`%i18n:@unhandled-error% ${err}`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -404,7 +404,7 @@ export default Vue.extend({
|
|||||||
folder: folder
|
folder: folder
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
window.open(url + '/i/drive/folder/' + folder.id,
|
window.open(`${url}/i/drive/folder/${folder.id}`,
|
||||||
'drive_window',
|
'drive_window',
|
||||||
'height=500, width=800');
|
'height=500, width=800');
|
||||||
}
|
}
|
||||||
|
@ -55,13 +55,15 @@ export default Vue.extend({
|
|||||||
methods: {
|
methods: {
|
||||||
onFollow(user) {
|
onFollow(user) {
|
||||||
if (user.id == this.u.id) {
|
if (user.id == this.u.id) {
|
||||||
this.user.isFollowing = user.isFollowing;
|
this.u.isFollowing = user.isFollowing;
|
||||||
|
this.u.hasPendingFollowRequestFromYou = user.hasPendingFollowRequestFromYou;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onUnfollow(user) {
|
onUnfollow(user) {
|
||||||
if (user.id == this.u.id) {
|
if (user.id == this.u.id) {
|
||||||
this.user.isFollowing = user.isFollowing;
|
this.u.isFollowing = user.isFollowing;
|
||||||
|
this.u.hasPendingFollowRequestFromYou = user.hasPendingFollowRequestFromYou;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -74,7 +76,7 @@ export default Vue.extend({
|
|||||||
userId: this.u.id
|
userId: this.u.id
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
if (this.u.isLocked && this.u.hasPendingFollowRequestFromYou) {
|
if (this.u.hasPendingFollowRequestFromYou) {
|
||||||
this.u = await (this as any).api('following/requests/cancel', {
|
this.u = await (this as any).api('following/requests/cancel', {
|
||||||
userId: this.u.id
|
userId: this.u.id
|
||||||
});
|
});
|
||||||
|
@ -48,7 +48,7 @@ export default Vue.extend({
|
|||||||
const mouseY = e.clientY - rect.top;
|
const mouseY = e.clientY - rect.top;
|
||||||
const xp = mouseX / this.$el.offsetWidth * 100;
|
const xp = mouseX / this.$el.offsetWidth * 100;
|
||||||
const yp = mouseY / this.$el.offsetHeight * 100;
|
const yp = mouseY / this.$el.offsetHeight * 100;
|
||||||
this.$el.style.backgroundPosition = xp + '% ' + yp + '%';
|
this.$el.style.backgroundPosition = `${xp}% ${yp}%`;
|
||||||
this.$el.style.backgroundImage = `url("${this.image.url}")`;
|
this.$el.style.backgroundImage = `url("${this.image.url}")`;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -42,12 +42,12 @@
|
|||||||
<span v-if="p.deletedAt" style="opacity: 0.5">%i18n:@deleted%</span>
|
<span v-if="p.deletedAt" style="opacity: 0.5">%i18n:@deleted%</span>
|
||||||
<misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i"/>
|
<misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="media" v-if="p.media.length > 0">
|
<div class="files" v-if="p.files.length > 0">
|
||||||
<mk-media-list :media-list="p.media" :raw="true"/>
|
<mk-media-list :media-list="p.files" :raw="true"/>
|
||||||
</div>
|
</div>
|
||||||
<mk-poll v-if="p.poll" :note="p"/>
|
<mk-poll v-if="p.poll" :note="p"/>
|
||||||
<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="true"/>
|
<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="true"/>
|
||||||
<a class="location" v-if="p.geo" :href="`http://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
|
<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="map" v-if="p.geo" ref="map"></div>
|
<div class="map" v-if="p.geo" ref="map"></div>
|
||||||
<div class="renote" v-if="p.renote">
|
<div class="renote" v-if="p.renote">
|
||||||
<mk-note-preview :note="p.renote"/>
|
<mk-note-preview :note="p.renote"/>
|
||||||
@ -86,6 +86,7 @@ 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 './notes.note.sub.vue';
|
||||||
|
import { sum } from '../../../../../prelude/array';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
components: {
|
components: {
|
||||||
@ -114,7 +115,7 @@ export default Vue.extend({
|
|||||||
isRenote(): boolean {
|
isRenote(): boolean {
|
||||||
return (this.note.renote &&
|
return (this.note.renote &&
|
||||||
this.note.text == null &&
|
this.note.text == null &&
|
||||||
this.note.mediaIds.length == 0 &&
|
this.note.fileIds.length == 0 &&
|
||||||
this.note.poll == null);
|
this.note.poll == null);
|
||||||
},
|
},
|
||||||
p(): any {
|
p(): any {
|
||||||
@ -122,9 +123,7 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
reactionsCount(): number {
|
reactionsCount(): number {
|
||||||
return this.p.reactionCounts
|
return this.p.reactionCounts
|
||||||
? Object.keys(this.p.reactionCounts)
|
? sum(Object.values(this.p.reactionCounts))
|
||||||
.map(key => this.p.reactionCounts[key])
|
|
||||||
.reduce((a, b) => a + b)
|
|
||||||
: 0;
|
: 0;
|
||||||
},
|
},
|
||||||
title(): string {
|
title(): string {
|
||||||
|
@ -28,11 +28,11 @@
|
|||||||
<misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i" :class="$style.text"/>
|
<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>
|
<a class="rp" v-if="p.renote">RP:</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="media" v-if="p.media.length > 0">
|
<div class="files" v-if="p.files.length > 0">
|
||||||
<mk-media-list :media-list="p.media"/>
|
<mk-media-list :media-list="p.files"/>
|
||||||
</div>
|
</div>
|
||||||
<mk-poll v-if="p.poll" :note="p" ref="pollViewer"/>
|
<mk-poll v-if="p.poll" :note="p" ref="pollViewer"/>
|
||||||
<a class="location" v-if="p.geo" :href="`http://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% 位置情報</a>
|
<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="map" v-if="p.geo" ref="map"></div>
|
||||||
<div class="renote" v-if="p.renote">
|
<div class="renote" v-if="p.renote">
|
||||||
<mk-note-preview :note="p.renote"/>
|
<mk-note-preview :note="p.renote"/>
|
||||||
@ -78,6 +78,7 @@ 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 './notes.note.sub.vue';
|
||||||
|
import { sum } from '../../../../../prelude/array';
|
||||||
|
|
||||||
function focus(el, fn) {
|
function focus(el, fn) {
|
||||||
const target = fn(el);
|
const target = fn(el);
|
||||||
@ -110,7 +111,7 @@ export default Vue.extend({
|
|||||||
isRenote(): boolean {
|
isRenote(): boolean {
|
||||||
return (this.note.renote &&
|
return (this.note.renote &&
|
||||||
this.note.text == null &&
|
this.note.text == null &&
|
||||||
this.note.mediaIds.length == 0 &&
|
this.note.fileIds.length == 0 &&
|
||||||
this.note.poll == null);
|
this.note.poll == null);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -120,9 +121,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
reactionsCount(): number {
|
reactionsCount(): number {
|
||||||
return this.p.reactionCounts
|
return this.p.reactionCounts
|
||||||
? Object.keys(this.p.reactionCounts)
|
? sum(Object.values(this.p.reactionCounts))
|
||||||
.map(key => this.p.reactionCounts[key])
|
|
||||||
.reduce((a, b) => a + b)
|
|
||||||
: 0;
|
: 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ export default Vue.extend({
|
|||||||
prepend(note, silent = false) {
|
prepend(note, silent = false) {
|
||||||
//#region 弾く
|
//#region 弾く
|
||||||
const isMyNote = note.userId == this.$store.state.i.id;
|
const isMyNote = note.userId == this.$store.state.i.id;
|
||||||
const isPureRenote = note.renoteId != null && note.text == null && note.mediaIds.length == 0 && note.poll == null;
|
const isPureRenote = note.renoteId != null && note.text == null && note.fileIds.length == 0 && note.poll == null;
|
||||||
|
|
||||||
if (this.$store.state.settings.showMyRenotes === false) {
|
if (this.$store.state.settings.showMyRenotes === false) {
|
||||||
if (isMyNote && isPureRenote) {
|
if (isMyNote && isPureRenote) {
|
||||||
@ -193,7 +193,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
clearNotification() {
|
clearNotification() {
|
||||||
this.unreadCount = 0;
|
this.unreadCount = 0;
|
||||||
document.title = config.name;
|
document.title = (this as any).os.instanceName;
|
||||||
},
|
},
|
||||||
|
|
||||||
onVisibilitychange() {
|
onVisibilitychange() {
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<span class="icon" v-if="geo">%fa:map-marker-alt%</span>
|
<span class="icon" v-if="geo">%fa:map-marker-alt%</span>
|
||||||
<span v-if="!reply">%i18n:@note%</span>
|
<span v-if="!reply">%i18n:@note%</span>
|
||||||
<span v-if="reply">%i18n:@reply%</span>
|
<span v-if="reply">%i18n:@reply%</span>
|
||||||
<span class="count" v-if="media.length != 0">{{ '%i18n:@attaches%'.replace('{}', media.length) }}</span>
|
<span class="count" v-if="files.length != 0">{{ '%i18n:@attaches%'.replace('{}', files.length) }}</span>
|
||||||
<span class="count" v-if="uploadings.length != 0">{{ '%i18n:@uploading-media%'.replace('{}', uploadings.length) }}<mk-ellipsis/></span>
|
<span class="count" v-if="uploadings.length != 0">{{ '%i18n:@uploading-media%'.replace('{}', uploadings.length) }}<mk-ellipsis/></span>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
@ -14,7 +14,7 @@
|
|||||||
:reply="reply"
|
:reply="reply"
|
||||||
@posted="onPosted"
|
@posted="onPosted"
|
||||||
@change-uploadings="onChangeUploadings"
|
@change-uploadings="onChangeUploadings"
|
||||||
@change-attached-media="onChangeMedia"
|
@change-attached-files="onChangeFiles"
|
||||||
@geo-attached="onGeoAttached"
|
@geo-attached="onGeoAttached"
|
||||||
@geo-dettached="onGeoDettached"/>
|
@geo-dettached="onGeoDettached"/>
|
||||||
</div>
|
</div>
|
||||||
@ -29,7 +29,7 @@ export default Vue.extend({
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
uploadings: [],
|
uploadings: [],
|
||||||
media: [],
|
files: [],
|
||||||
geo: null
|
geo: null
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@ -42,8 +42,8 @@ export default Vue.extend({
|
|||||||
onChangeUploadings(files) {
|
onChangeUploadings(files) {
|
||||||
this.uploadings = files;
|
this.uploadings = files;
|
||||||
},
|
},
|
||||||
onChangeMedia(media) {
|
onChangeFiles(files) {
|
||||||
this.media = media;
|
this.files = files;
|
||||||
},
|
},
|
||||||
onGeoAttached(geo) {
|
onGeoAttached(geo) {
|
||||||
this.geo = geo;
|
this.geo = geo;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user