Compare commits
953 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5bd41704ae | ||
|
|
4d0b335748 | ||
|
|
5692ae59a1 | ||
|
|
84f1ce866b | ||
|
|
e68c6175ce | ||
|
|
0de11c3636 | ||
|
|
1f70657d4a | ||
|
|
73646aac9b | ||
|
|
e72c590c6b | ||
|
|
06e026b346 | ||
|
|
5621d5725c | ||
|
|
14d0a07b29 | ||
|
|
105fefd114 | ||
|
|
f81c10fe62 | ||
|
|
86a2aa42a4 | ||
|
|
42f5c3fe22 | ||
|
|
975740464c | ||
|
|
c57bffb142 | ||
|
|
d92a2cdb55 | ||
|
|
5b91463233 | ||
|
|
39eed3378f | ||
|
|
cf98d40a44 | ||
|
|
7d6436c90e | ||
|
|
0acf3a8f6d | ||
|
|
8b7324c8d3 | ||
|
|
a0b0d5dff7 | ||
|
|
bef0e36665 | ||
|
|
766e721ff3 | ||
|
|
93ad4b359e | ||
|
|
b3032ad84d | ||
|
|
4f76acd249 | ||
|
|
fcc4b2c704 | ||
|
|
12286f4915 | ||
|
|
193abfdbac | ||
|
|
0e13481eb4 | ||
|
|
b713cac4f1 | ||
|
|
2137c894ef | ||
|
|
f0d2ce4f19 | ||
|
|
e3a89d302f | ||
|
|
d01d2ef65e | ||
|
|
23c550acba | ||
|
|
b9db88f616 | ||
|
|
dee4a18d48 | ||
|
|
fa5073b042 | ||
|
|
9dda698dc8 | ||
|
|
99d0930fba | ||
|
|
a599524b5f | ||
|
|
5f34758e87 | ||
|
|
cdb8e41176 | ||
|
|
d8f3e9d4a3 | ||
|
|
da900439a3 | ||
|
|
ad0273ab99 | ||
|
|
8bbff90aca | ||
|
|
fcb3ba9947 | ||
|
|
23b3e33df6 | ||
|
|
9edac2cd74 | ||
|
|
fbe0d70661 | ||
|
|
8782a64b18 | ||
|
|
d3b81c3e00 | ||
|
|
fd816afcd0 | ||
|
|
ac423f1ef4 | ||
|
|
f11ebafe47 | ||
|
|
7947036af9 | ||
|
|
b722431720 | ||
|
|
295563caad | ||
|
|
26735815f1 | ||
|
|
c06a52c237 | ||
|
|
5678adf3b5 | ||
|
|
ac772dd389 | ||
|
|
2c4de8475f | ||
|
|
46facaf176 | ||
|
|
eea1b7fc63 | ||
|
|
f0e9386cd0 | ||
|
|
e4a4238b57 | ||
|
|
55e126998a | ||
|
|
608a30d37b | ||
|
|
7d22d6255d | ||
|
|
4e55436339 | ||
|
|
3adadc8a52 | ||
|
|
b525af822c | ||
|
|
bee8a5b065 | ||
|
|
f4d80122b3 | ||
|
|
2e8ea34413 | ||
|
|
7341d97a00 | ||
|
|
964b34bd3b | ||
|
|
38e8d4bbea | ||
|
|
cb106e6fe4 | ||
|
|
61411605b8 | ||
|
|
0ac7682188 | ||
|
|
d7af18efbd | ||
|
|
64bb6daa43 | ||
|
|
0a1951f24c | ||
|
|
8bb388f62a | ||
|
|
ee36956451 | ||
|
|
f1a0e95489 | ||
|
|
de5d9470af | ||
|
|
a9838495ce | ||
|
|
d34c080822 | ||
|
|
59f55a8291 | ||
|
|
79ace6238a | ||
|
|
89e88802b9 | ||
|
|
c7f969a002 | ||
|
|
18b186068d | ||
|
|
037c67cbfb | ||
|
|
c3ccee9097 | ||
|
|
2449183f44 | ||
|
|
1c98226621 | ||
|
|
b405669672 | ||
|
|
53fbe675a7 | ||
|
|
6bcc174456 | ||
|
|
a3493c4f07 | ||
|
|
545ced7826 | ||
|
|
a9a476a0d5 | ||
|
|
8dfd35303c | ||
|
|
498ca306e4 | ||
|
|
5a46e08165 | ||
|
|
c0c57044cc | ||
|
|
42d00b96c6 | ||
|
|
072360947b | ||
|
|
d60ba8e37d | ||
|
|
c10cf60059 | ||
|
|
880689e28a | ||
|
|
ade7050996 | ||
|
|
71b5fae4d9 | ||
|
|
d398e87ea1 | ||
|
|
6256d021e6 | ||
|
|
405f242ff9 | ||
|
|
8823a6c1a1 | ||
|
|
65a82f32be | ||
|
|
fd593458a6 | ||
|
|
3985fe6b09 | ||
|
|
db71a5da62 | ||
|
|
d76e3e4853 | ||
|
|
eead9fad03 | ||
|
|
b498072f9d | ||
|
|
f56a961db2 | ||
|
|
5d224f4eac | ||
|
|
5b5edae11c | ||
|
|
bd51154c46 | ||
|
|
749a1ff8b6 | ||
|
|
b06d46f46f | ||
|
|
7146a534df | ||
|
|
ef51e591ee | ||
|
|
9d2f4d3ffb | ||
|
|
f7e0b196eb | ||
|
|
feb7e58912 | ||
|
|
fbf04392c9 | ||
|
|
e650818952 | ||
|
|
76fcb1af87 | ||
|
|
cce3e52642 | ||
|
|
8c762e7b8e | ||
|
|
f0dafa04a5 | ||
|
|
81f39b3b36 | ||
|
|
b162471d3e | ||
|
|
2736e8d6fa | ||
|
|
182f6f8faa | ||
|
|
ff34655221 | ||
|
|
f6ce6109f9 | ||
|
|
899ac15d88 | ||
|
|
7132f2062c | ||
|
|
96b354c7f2 | ||
|
|
715664a523 | ||
|
|
e8ddfb4bfe | ||
|
|
2a1229978e | ||
|
|
b8af3515cd | ||
|
|
f99e3f3d42 | ||
|
|
d6057bd830 | ||
|
|
975e57ec48 | ||
|
|
bd35965c99 | ||
|
|
1029bff5ff | ||
|
|
6c1893f869 | ||
|
|
0a89ba60bd | ||
|
|
c6e418a242 | ||
|
|
d9a6666ba8 | ||
|
|
ab849fbbef | ||
|
|
9d6b6053a6 | ||
|
|
ddfd64944d | ||
|
|
51153ed287 | ||
|
|
0e7bbd1b32 | ||
|
|
5049791d7f | ||
|
|
1ebcf8d915 | ||
|
|
e01873811a | ||
|
|
d078b871e1 | ||
|
|
c6375ae864 | ||
|
|
483467e32f | ||
|
|
c84d43bc5f | ||
|
|
fdd42fc2d7 | ||
|
|
8573e258f8 | ||
|
|
6943c7d2d8 | ||
|
|
4a42bf7b19 | ||
|
|
b982f97c05 | ||
|
|
d9207788d3 | ||
|
|
0ad48cc896 | ||
|
|
5e191a1f5b | ||
|
|
8069e44d0a | ||
|
|
0a83f0fd67 | ||
|
|
83c54fb6b9 | ||
|
|
5f6b0f689f | ||
|
|
1b0b96526b | ||
|
|
edb0469787 | ||
|
|
3256a0914e | ||
|
|
3c15182f24 | ||
|
|
f7bc5e3c0b | ||
|
|
19f327701d | ||
|
|
6b30e371a2 | ||
|
|
98fd6de5a1 | ||
|
|
6635f25abe | ||
|
|
5f93106eab | ||
|
|
84f2994d47 | ||
|
|
96f5c6d616 | ||
|
|
b67923abb9 | ||
|
|
310f7b3359 | ||
|
|
c743c45989 | ||
|
|
0322c51913 | ||
|
|
b85e27c7e5 | ||
|
|
aa351d1f7f | ||
|
|
6b48b79758 | ||
|
|
104ea7e277 | ||
|
|
97de1ed3a8 | ||
|
|
d69e9741da | ||
|
|
0f5c737c1a | ||
|
|
cb9960b0ac | ||
|
|
1404539895 | ||
|
|
2f901da58c | ||
|
|
3637c1bfbc | ||
|
|
28c3edc844 | ||
|
|
9271a8c066 | ||
|
|
7b16bfc736 | ||
|
|
54450033e4 | ||
|
|
fbf676d518 | ||
|
|
47df0bbec1 | ||
|
|
708f8b3cc3 | ||
|
|
9de163ab09 | ||
|
|
e21be29131 | ||
|
|
1aabb725d0 | ||
|
|
3e17c34187 | ||
|
|
d57de01d37 | ||
|
|
71918fdbf0 | ||
|
|
cb8663873d | ||
|
|
0f204eebe1 | ||
|
|
dec572a6b7 | ||
|
|
28848ba969 | ||
|
|
4cfcd37a2b | ||
|
|
2b0d5516d1 | ||
|
|
3e3c3c10ab | ||
|
|
3cc282db14 | ||
|
|
4c1c865ba9 | ||
|
|
9423c99427 | ||
|
|
d1512c90f1 | ||
|
|
85c9993106 | ||
|
|
1d580009e4 | ||
|
|
22ad21597a | ||
|
|
76d8f66eff | ||
|
|
febdf0cbee | ||
|
|
ba05606074 | ||
|
|
030fe8bec7 | ||
|
|
4587c5a512 | ||
|
|
96646e584b | ||
|
|
fb2879df9c | ||
|
|
26ea338e8e | ||
|
|
1fad5ed6f3 | ||
|
|
20db10516c | ||
|
|
00631f58ec | ||
|
|
35273e53bc | ||
|
|
bfc458e935 | ||
|
|
bb819d42f1 | ||
|
|
5d76439224 | ||
|
|
3d0b704af8 | ||
|
|
05539ffc7b | ||
|
|
c86deab69c | ||
|
|
21f8dbf2de | ||
|
|
6731f904f2 | ||
|
|
f6e74f529e | ||
|
|
c860a2f7f3 | ||
|
|
7b141722ae | ||
|
|
fc516ffb7f | ||
|
|
11604593a6 | ||
|
|
6f3468ccd2 | ||
|
|
e3be90503c | ||
|
|
22d38e0d24 | ||
|
|
8b654fb40a | ||
|
|
91cd9831bc | ||
|
|
805d72d42f | ||
|
|
0d4a1719a6 | ||
|
|
32ab57e11b | ||
|
|
5174e16f7b | ||
|
|
9b746f3eb5 | ||
|
|
becd038660 | ||
|
|
2a6cfec0e6 | ||
|
|
dfc6ef4be6 | ||
|
|
c8b45f4f42 | ||
|
|
09c57e6d03 | ||
|
|
5edb1da097 | ||
|
|
b3ad3a6535 | ||
|
|
3709bb23bc | ||
|
|
28be5c0b81 | ||
|
|
60ef74047a | ||
|
|
f81596c8d5 | ||
|
|
075b7e3060 | ||
|
|
cc7d6198ec | ||
|
|
5766c2ce1b | ||
|
|
03fed08c03 | ||
|
|
4662641feb | ||
|
|
00e2ce9489 | ||
|
|
c2ec81f93a | ||
|
|
47561a6f8b | ||
|
|
c81eb49f9e | ||
|
|
205c0d44d5 | ||
|
|
dc1bdbaaa5 | ||
|
|
d619a92a37 | ||
|
|
59ad529162 | ||
|
|
c4c44e04fd | ||
|
|
fae58a9ab0 | ||
|
|
fa03c172f2 | ||
|
|
89ac15b4de | ||
|
|
10d3b81251 | ||
|
|
71dceca225 | ||
|
|
40de631d95 | ||
|
|
6985c39874 | ||
|
|
0938ea3964 | ||
|
|
4b4c19b242 | ||
|
|
d8620187ec | ||
|
|
520849d070 | ||
|
|
b6a028a8ed | ||
|
|
7db799a0ac | ||
|
|
1ab776c867 | ||
|
|
f4c9f63548 | ||
|
|
08da9d70cd | ||
|
|
96173e5c0b | ||
|
|
b37cc70742 | ||
|
|
96ee4299c7 | ||
|
|
6072b02f12 | ||
|
|
6ccbca0741 | ||
|
|
360394fd5c | ||
|
|
dcb45aa953 | ||
|
|
a8fcc1aad9 | ||
|
|
4d69cd86f1 | ||
|
|
6e14e58b89 | ||
|
|
af5839bb59 | ||
|
|
a53e0d9f73 | ||
|
|
49921f2dcf | ||
|
|
70d2d61b9a | ||
|
|
9abaf80f6b | ||
|
|
25948fc3c9 | ||
|
|
6b947c2139 | ||
|
|
98acf919f1 | ||
|
|
c9c2853150 | ||
|
|
2bc708f8e6 | ||
|
|
874b8fc3c2 | ||
|
|
7d6aac3431 | ||
|
|
e2fc7decad | ||
|
|
21bed71f5e | ||
|
|
747a5694f8 | ||
|
|
479a0a2deb | ||
|
|
14aef6ec89 | ||
|
|
f0d2b3f449 | ||
|
|
3b974428fc | ||
|
|
580191fb17 | ||
|
|
be0cb88b6c | ||
|
|
95c4e4497e | ||
|
|
2ec445f83e | ||
|
|
51b915428e | ||
|
|
1395cf89ce | ||
|
|
2a8f984db7 | ||
|
|
decf2d396f | ||
|
|
f7964da899 | ||
|
|
c8607ff7b6 | ||
|
|
e9f8897fe2 | ||
|
|
e0b107a3a0 | ||
|
|
abf2c89931 | ||
|
|
1d3e6a7197 | ||
|
|
288bf195e9 | ||
|
|
7e3cc11cc4 | ||
|
|
4e07e94af0 | ||
|
|
9cb49c9204 | ||
|
|
580dd729e5 | ||
|
|
49ab77c86e | ||
|
|
f98914b9f1 | ||
|
|
f3f3599b28 | ||
|
|
f67b1beee4 | ||
|
|
8395d0f1ba | ||
|
|
af203bee93 | ||
|
|
760fb79dad | ||
|
|
ee9d4119c2 | ||
|
|
90027efcbf | ||
|
|
1848de1dc4 | ||
|
|
1c93fcb1c4 | ||
|
|
e3389e7899 | ||
|
|
454632d785 | ||
|
|
c9bca7dc85 | ||
|
|
710ba526fa | ||
|
|
aa47b6732d | ||
|
|
20f83420ca | ||
|
|
d09a68ef11 | ||
|
|
b545be5799 | ||
|
|
4fc377584f | ||
|
|
a5f09c90dd | ||
|
|
ba407c3eb0 | ||
|
|
d059d7f972 | ||
|
|
c03e2dfbc0 | ||
|
|
45c5e7b967 | ||
|
|
c81a94ff75 | ||
|
|
acc6f54557 | ||
|
|
8025b121af | ||
|
|
78ec06bda3 | ||
|
|
6ef83d9c59 | ||
|
|
fca4ceef21 | ||
|
|
00f979f0e6 | ||
|
|
556677be7a | ||
|
|
624fd093f2 | ||
|
|
2ee438dece | ||
|
|
534de24406 | ||
|
|
014edce1b9 | ||
|
|
ac1f3de4c6 | ||
|
|
dced228cb0 | ||
|
|
a92244cc12 | ||
|
|
0717688933 | ||
|
|
87d54b7d40 | ||
|
|
ed51f5c7de | ||
|
|
66e2db0d52 | ||
|
|
03be4826df | ||
|
|
c9d5aef04f | ||
|
|
106cb3fe3e | ||
|
|
48320f8536 | ||
|
|
1a0845dc0a | ||
|
|
185d09f3ed | ||
|
|
8e25fb6cb7 | ||
|
|
e88ce1746d | ||
|
|
b8aad35009 | ||
|
|
47bd485a39 | ||
|
|
ad869d7469 | ||
|
|
d15cce5337 | ||
|
|
37daff6d61 | ||
|
|
5417e40f59 | ||
|
|
0fed33bfdb | ||
|
|
5dddc75d09 | ||
|
|
081578c604 | ||
|
|
6c47bf5b76 | ||
|
|
936bb1bcd0 | ||
|
|
d5241d9a3e | ||
|
|
05b4430c92 | ||
|
|
292e911de2 | ||
|
|
1c4ba2c037 | ||
|
|
452db13d0c | ||
|
|
c3f64b395b | ||
|
|
3fa6bf93a4 | ||
|
|
a13d76bec5 | ||
|
|
05cee078d0 | ||
|
|
706d3f3f95 | ||
|
|
c5cf034b5d | ||
|
|
3a04aa93f9 | ||
|
|
838cdbedbd | ||
|
|
9e85291cd3 | ||
|
|
7f77517fc8 | ||
|
|
b2f288dcac | ||
|
|
52b59e9d7b | ||
|
|
80c74b1fa7 | ||
|
|
91811ea500 | ||
|
|
57150fd910 | ||
|
|
cddbbdf5d0 | ||
|
|
423dc2349b | ||
|
|
5229bbd55d | ||
|
|
28311b9a2b | ||
|
|
663d17a485 | ||
|
|
08d005dfd9 | ||
|
|
02edbc131b | ||
|
|
0556a2a2da | ||
|
|
65d943e42a | ||
|
|
3bcb344ecb | ||
|
|
82d721d60b | ||
|
|
48dc56e834 | ||
|
|
2c33bd6e31 | ||
|
|
b6524616bc | ||
|
|
7e2b70f912 | ||
|
|
4f071a66b6 | ||
|
|
39f2303429 | ||
|
|
cacf072027 | ||
|
|
6ab1fdfe1a | ||
|
|
6e5c93f926 | ||
|
|
1670737075 | ||
|
|
fee235c4e4 | ||
|
|
7a39d489f2 | ||
|
|
7c634218d1 | ||
|
|
2704c5be73 | ||
|
|
489b51ba9f | ||
|
|
21807c29f1 | ||
|
|
3bc62fe3eb | ||
|
|
ba0e3c4a5f | ||
|
|
9ec1fb5e37 | ||
|
|
d708409462 | ||
|
|
07d05d4f86 | ||
|
|
bbdb2ebb40 | ||
|
|
f7908ba098 | ||
|
|
f2fda3075e | ||
|
|
1338a68979 | ||
|
|
e7da505fb3 | ||
|
|
5a9228372f | ||
|
|
c4a6ba9097 | ||
|
|
d5871b408b | ||
|
|
7b3338e373 | ||
|
|
d18ee12d2f | ||
|
|
ca9cc97940 | ||
|
|
a70070ac7d | ||
|
|
069d99b320 | ||
|
|
37d350dcad | ||
|
|
8653e09b59 | ||
|
|
7cd2d59576 | ||
|
|
a0839de38f | ||
|
|
b7c5c71c6f | ||
|
|
adab0adbdd | ||
|
|
2faa58928f | ||
|
|
ffb80efe21 | ||
|
|
6f959218ef | ||
|
|
be1125dcb9 | ||
|
|
9ab34c2301 | ||
|
|
0166d81d9e | ||
|
|
0b26efbd2f | ||
|
|
2cbaedf946 | ||
|
|
b66924fbe8 | ||
|
|
8c91148954 | ||
|
|
be0eff3dda | ||
|
|
85903ac9c6 | ||
|
|
dbdd778dc7 | ||
|
|
fc50dfd8d5 | ||
|
|
f444e132ee | ||
|
|
68f562c323 | ||
|
|
820ea69613 | ||
|
|
6f4b3853a1 | ||
|
|
a706ad0e80 | ||
|
|
820116affc | ||
|
|
52650342be | ||
|
|
85ddabdc65 | ||
|
|
0730cc4fa4 | ||
|
|
17b6ab0ef0 | ||
|
|
4e208b85bb | ||
|
|
00f8b29f6d | ||
|
|
9cf0fcadb1 | ||
|
|
c595efeead | ||
|
|
b56c6793a1 | ||
|
|
ebceffba1e | ||
|
|
3ae42d9b85 | ||
|
|
796237b3c6 | ||
|
|
cb7a97ee4c | ||
|
|
0cf758b6d1 | ||
|
|
d28fca320e | ||
|
|
8bd17703c3 | ||
|
|
a78eebc43f | ||
|
|
79fb5246df | ||
|
|
458b8c78dc | ||
|
|
64e0cbd6fc | ||
|
|
7fe937026b | ||
|
|
656cec65b9 | ||
|
|
8045bbff1c | ||
|
|
c1a7a21746 | ||
|
|
f3ee63fcbe | ||
|
|
7645c212a3 | ||
|
|
8b38e2ea58 | ||
|
|
c9eb6a8919 | ||
|
|
9a41fd4734 | ||
|
|
70d96ee076 | ||
|
|
3b6fb3959b | ||
|
|
484d705320 | ||
|
|
786031be66 | ||
|
|
bc0027ce43 | ||
|
|
3e7c6d9bdc | ||
|
|
5463e3e55e | ||
|
|
84a880086e | ||
|
|
89419b7136 | ||
|
|
9106ec74f7 | ||
|
|
ebf9a0921d | ||
|
|
c237f49016 | ||
|
|
709290d2da | ||
|
|
eb3180f3b6 | ||
|
|
681997509c | ||
|
|
79ff5888fd | ||
|
|
9ee9cf8d81 | ||
|
|
ee3c0f6f18 | ||
|
|
9dd463bff4 | ||
|
|
df297d0031 | ||
|
|
d18d1cb958 | ||
|
|
5bc0570888 | ||
|
|
8b43d75eaf | ||
|
|
89b37bd73d | ||
|
|
69f246ce7f | ||
|
|
6a97f0b7f6 | ||
|
|
d885b872f3 | ||
|
|
125849673a | ||
|
|
30c53e9ee0 | ||
|
|
981fb9e8f3 | ||
|
|
9fac22d880 | ||
|
|
b8f034064a | ||
|
|
6068227434 | ||
|
|
69cda49c88 | ||
|
|
039d821d20 | ||
|
|
44d93bc408 | ||
|
|
cfa76ac6f9 | ||
|
|
0ec2d16522 | ||
|
|
6bcac1fe14 | ||
|
|
bc9427d000 | ||
|
|
07c043361e | ||
|
|
e676a9a501 | ||
|
|
09e654c6d2 | ||
|
|
549cb1ba87 | ||
|
|
c633827e5e | ||
|
|
08142ead67 | ||
|
|
638d81b66e | ||
|
|
4c83c2f64d | ||
|
|
bf56f90fdc | ||
|
|
d8412aad7a | ||
|
|
c136741710 | ||
|
|
4fe8454da0 | ||
|
|
3f2161dadd | ||
|
|
3db516aa1a | ||
|
|
367bbbe605 | ||
|
|
5b70ff561c | ||
|
|
4486527e5d | ||
|
|
147e23d332 | ||
|
|
ee20e6950e | ||
|
|
1d217154ef | ||
|
|
27d304a1ab | ||
|
|
1d1a373ca8 | ||
|
|
bca3c6f8bf | ||
|
|
d83d661535 | ||
|
|
e16906afc3 | ||
|
|
a6dc0f3684 | ||
|
|
6120474548 | ||
|
|
121dd86299 | ||
|
|
5251d9f668 | ||
|
|
7ae3f569de | ||
|
|
142ebead59 | ||
|
|
e196086c64 | ||
|
|
8c6ed98505 | ||
|
|
98a2953c9c | ||
|
|
61d224695b | ||
|
|
6967def6c8 | ||
|
|
393c6aa79a | ||
|
|
fc05540404 | ||
|
|
1c589c7c18 | ||
|
|
284df27435 | ||
|
|
68c0600a5c | ||
|
|
b8163bd0e1 | ||
|
|
8c25b9dfad | ||
|
|
bf34f67583 | ||
|
|
0c63f410d6 | ||
|
|
069077ace4 | ||
|
|
5be947ea4d | ||
|
|
b41ffa75b7 | ||
|
|
cd80e02ebf | ||
|
|
dffcefb81f | ||
|
|
48df08d4dc | ||
|
|
4de9a08e55 | ||
|
|
3f46b5259b | ||
|
|
2faa8ea97c | ||
|
|
514690cf18 | ||
|
|
f4f78c1898 | ||
|
|
2d24befb15 | ||
|
|
184d88838c | ||
|
|
4490503d59 | ||
|
|
99750435ae | ||
|
|
fae920e578 | ||
|
|
0243b6d13b | ||
|
|
12bc725d68 | ||
|
|
b1a7b781ec | ||
|
|
7e1cad3e12 | ||
|
|
fd3f4c37a0 | ||
|
|
3acd2e0f0c | ||
|
|
b1b5a795c8 | ||
|
|
197e2c8377 | ||
|
|
fb8b0c291d | ||
|
|
706d47ec32 | ||
|
|
4eab2b3654 | ||
|
|
0a78f560e0 | ||
|
|
f6f79fb388 | ||
|
|
34235d4d44 | ||
|
|
21842ec190 | ||
|
|
026e1cc7e7 | ||
|
|
c65f4eebaf | ||
|
|
17baf8770a | ||
|
|
01f60edb17 | ||
|
|
15b11e59f4 | ||
|
|
a2db4db963 | ||
|
|
e87b9cc019 | ||
|
|
54cb94db1d | ||
|
|
1de8e1eeb1 | ||
|
|
1d8fb65959 | ||
|
|
28482627f7 | ||
|
|
4ee7df887d | ||
|
|
b040571fa8 | ||
|
|
fbd5e4bab8 | ||
|
|
498bdd1cd0 | ||
|
|
102cca8971 | ||
|
|
e710ad4c5f | ||
|
|
f64f6fd603 | ||
|
|
5995020c64 | ||
|
|
2dc86ec1ac | ||
|
|
d50bcbdb23 | ||
|
|
19afd0ba61 | ||
|
|
7a787fa95c | ||
|
|
4e85eb90cb | ||
|
|
d4474b953e | ||
|
|
0aaf3d7bd7 | ||
|
|
02bb2423af | ||
|
|
e9b25f17af | ||
|
|
96671c5c7e | ||
|
|
4fc786f062 | ||
|
|
51c0cca4ff | ||
|
|
bd344628f6 | ||
|
|
48deb35d4b | ||
|
|
f9792f0d5c | ||
|
|
0157033104 | ||
|
|
596f92cfcc | ||
|
|
b2dedf7f98 | ||
|
|
34393ef89f | ||
|
|
7e11cd3b99 | ||
|
|
dd1622296d | ||
|
|
77cb59a6ac | ||
|
|
a2b60e38a3 | ||
|
|
f0570bf111 | ||
|
|
b980164318 | ||
|
|
3e7ff586a5 | ||
|
|
923bbcbf6b | ||
|
|
8cc85931d6 | ||
|
|
b25522a091 | ||
|
|
97ae7e9ef4 | ||
|
|
d25bd65722 | ||
|
|
f4f98c25f7 | ||
|
|
336607568f | ||
|
|
e2843a5ce4 | ||
|
|
702875a78e | ||
|
|
0fa8c6afd2 | ||
|
|
96571866a3 | ||
|
|
f72b00bec7 | ||
|
|
1e7b5a0a98 | ||
|
|
9f09afc824 | ||
|
|
93b599dc8e | ||
|
|
1c722494de | ||
|
|
a464c8d1d0 | ||
|
|
51362e9a52 | ||
|
|
3c086fe8c7 | ||
|
|
f3b1248bd8 | ||
|
|
4e529ee7d0 | ||
|
|
a2b975a493 | ||
|
|
13055d1496 | ||
|
|
78b5af4e4f | ||
|
|
008432e156 | ||
|
|
d3d50b2f79 | ||
|
|
eefeb4c268 | ||
|
|
86d4f1981c | ||
|
|
7a8e97972c | ||
|
|
3555213155 | ||
|
|
5d3d8dffd6 | ||
|
|
dea8688c9d | ||
|
|
a235869cfa | ||
|
|
a8434b3bc5 | ||
|
|
f110b2b320 | ||
|
|
0543cffe00 | ||
|
|
0383cbe43f | ||
|
|
9dd1203583 | ||
|
|
4eeeaffdee | ||
|
|
6f73f3d7a1 | ||
|
|
aa9cd211dd | ||
|
|
3cdf4f01f8 | ||
|
|
d0f84643d8 | ||
|
|
89707ad436 | ||
|
|
163d81c1b0 | ||
|
|
81a7213583 | ||
|
|
8f92a07d68 | ||
|
|
31b30e3dd2 | ||
|
|
0a1ac12d97 | ||
|
|
e800104ac4 | ||
|
|
05cb94eb77 | ||
|
|
51499e04e0 | ||
|
|
0c993ef851 | ||
|
|
b27fced30d | ||
|
|
2b7da9d98c | ||
|
|
cd66f86f08 | ||
|
|
a2e7cab573 | ||
|
|
f81f7d51c5 | ||
|
|
7fb640e38f | ||
|
|
c7561be15f | ||
|
|
741c81bca9 | ||
|
|
1e38528716 | ||
|
|
58b3be438a | ||
|
|
4522568749 | ||
|
|
719f9c8c02 | ||
|
|
fe891da886 | ||
|
|
95b6684cfd | ||
|
|
66836836ab | ||
|
|
0db48c778f | ||
|
|
13a2f9373c | ||
|
|
ae4d504392 | ||
|
|
85d240625d | ||
|
|
db646b0ad9 | ||
|
|
2570d50957 | ||
|
|
7faecaadcf | ||
|
|
dcbcb18081 | ||
|
|
f1a61a268e | ||
|
|
d7636355a1 | ||
|
|
ed2993b3f2 | ||
|
|
1368c9d182 | ||
|
|
c5e3c07c16 | ||
|
|
f8395166af | ||
|
|
dc8f4c8d6a | ||
|
|
ed4860dfd9 | ||
|
|
5b0bf98b3c | ||
|
|
adffac1000 | ||
|
|
3a1672b061 | ||
|
|
e7658be6cd | ||
|
|
63533ad9c8 | ||
|
|
34b431fa1d | ||
|
|
958802dbe0 | ||
|
|
8681259597 | ||
|
|
f3d76c06db | ||
|
|
3f32a9bfff | ||
|
|
c497149765 | ||
|
|
9159613f2f | ||
|
|
70e95a5cdb | ||
|
|
b0f82749aa | ||
|
|
20c0690352 | ||
|
|
006ecec443 | ||
|
|
effcf0a609 | ||
|
|
3852d0b2c3 | ||
|
|
ec67590dbe | ||
|
|
65d0dbb7d8 | ||
|
|
f8af57dffb | ||
|
|
2b058be3aa | ||
|
|
67efd30553 | ||
|
|
8d1fdc5aa4 | ||
|
|
d033103163 | ||
|
|
53dff28a21 | ||
|
|
53c37036ee | ||
|
|
133c879a3a | ||
|
|
a105faeaae | ||
|
|
13404310a7 | ||
|
|
2373b114bf | ||
|
|
5bfc6b6547 | ||
|
|
8026a609bb | ||
|
|
10db61a0d2 | ||
|
|
40520f3997 | ||
|
|
c1d59716d1 | ||
|
|
d8698743a1 | ||
|
|
ade5055bc3 | ||
|
|
6e343d50f1 | ||
|
|
ce3f735654 | ||
|
|
9b5e623130 | ||
|
|
f0b0c5b540 | ||
|
|
dd2207d430 | ||
|
|
ffd6ac2434 | ||
|
|
27f93cc112 | ||
|
|
7ee88a69ec | ||
|
|
227798300f | ||
|
|
2ab8a5bc0a | ||
|
|
c222b9ae94 | ||
|
|
53a0f3c794 | ||
|
|
9ff349c548 | ||
|
|
37a360efd9 | ||
|
|
3a850823a9 | ||
|
|
4da53b7382 | ||
|
|
cb6f94735f | ||
|
|
c073a20969 | ||
|
|
6dc8a385ee | ||
|
|
f299c050b8 | ||
|
|
eed540a51c | ||
|
|
5db72c4d71 | ||
|
|
fc0bbfa759 | ||
|
|
6d63c81dd5 | ||
|
|
bea42924cb | ||
|
|
b48ef68c12 | ||
|
|
65109d140b | ||
|
|
0935bd4bd4 | ||
|
|
45bee7cc2f | ||
|
|
1c86a4bc26 | ||
|
|
b385cf2a9f | ||
|
|
40d3dc454d | ||
|
|
8e92848495 | ||
|
|
2d94a22a30 | ||
|
|
7a5a091c25 | ||
|
|
2baf810c71 | ||
|
|
d1ecef13ef | ||
|
|
495fa553ad | ||
|
|
854e649ea6 | ||
|
|
c047324b42 | ||
|
|
daac865c72 | ||
|
|
63d059b8d1 | ||
|
|
e3075a0dc7 | ||
|
|
6b6e597b95 | ||
|
|
eb0eadad5e | ||
|
|
f600fee16d | ||
|
|
7b88c54aa6 | ||
|
|
623dd57cc3 | ||
|
|
f6edd33adb | ||
|
|
ac20d73222 | ||
|
|
c59374d79d | ||
|
|
0d478046de | ||
|
|
f3479d1b98 | ||
|
|
2fdecb8a38 | ||
|
|
a95c3ee557 | ||
|
|
67c439c70a | ||
|
|
b96037cffa | ||
|
|
ebd8d34552 | ||
|
|
a653d9a83e | ||
|
|
07d6894c42 | ||
|
|
03588b3fd6 | ||
|
|
2e83440e70 | ||
|
|
2633873fcc | ||
|
|
5f33713f53 | ||
|
|
fe84c5010c | ||
|
|
7f39df0713 | ||
|
|
928d359dd2 | ||
|
|
184eb00133 | ||
|
|
e264a49b08 | ||
|
|
8caf853c80 | ||
|
|
b451c04787 | ||
|
|
1653977392 | ||
|
|
a0d9def98a | ||
|
|
92701e5cec | ||
|
|
0b6b6a4f2f | ||
|
|
3a2dc95850 | ||
|
|
163cf49f16 | ||
|
|
37fc3103f6 | ||
|
|
b7bd1ff69f | ||
|
|
dc36134f10 | ||
|
|
fea8821091 | ||
|
|
33faf40aca | ||
|
|
4410f8d7f7 | ||
|
|
3e6029e69d | ||
|
|
96c7707e6c | ||
|
|
d8e545db3c | ||
|
|
a9a6ba0aed | ||
|
|
a898c6ceab | ||
|
|
0205c5c2d7 | ||
|
|
f8074ab74b | ||
|
|
f15c491d5f | ||
|
|
c38a32dee9 | ||
|
|
4f5abed70d | ||
|
|
c9ac9923df | ||
|
|
bb14895fd8 | ||
|
|
6f92d601ec | ||
|
|
345143b0c1 | ||
|
|
dc80d5d376 | ||
|
|
d3544f9637 | ||
|
|
864b6ad1bd | ||
|
|
c58027e521 | ||
|
|
10fb399588 | ||
|
|
10f466c895 | ||
|
|
32068b4bcc | ||
|
|
381f2b7fdf | ||
|
|
1c3c733c6b | ||
|
|
8bc5febe66 | ||
|
|
20335e23f9 | ||
|
|
9dbc9115c9 | ||
|
|
fe707f88a4 | ||
|
|
9b23ebd4a3 |
3
.autogen/check_pr.jq
Normal file
3
.autogen/check_pr.jq
Normal file
@@ -0,0 +1,3 @@
|
||||
.[]
|
||||
.head
|
||||
.label
|
||||
2
.autogen/next_url.jq
Normal file
2
.autogen/next_url.jq
Normal file
@@ -0,0 +1,2 @@
|
||||
.links
|
||||
.next
|
||||
39
.autogen/patreon.jq
Normal file
39
.autogen/patreon.jq
Normal file
@@ -0,0 +1,39 @@
|
||||
(
|
||||
.data |
|
||||
map(
|
||||
select(
|
||||
.relationships
|
||||
.currently_entitled_tiers
|
||||
.data[]
|
||||
)
|
||||
) |
|
||||
map(
|
||||
.relationships
|
||||
.user
|
||||
.data
|
||||
.id
|
||||
)
|
||||
) as $data |
|
||||
.included |
|
||||
map(
|
||||
select(
|
||||
.id as $id |
|
||||
$data |
|
||||
contains(
|
||||
[
|
||||
$id
|
||||
]
|
||||
)
|
||||
)
|
||||
) |
|
||||
map(
|
||||
.attributes |
|
||||
[
|
||||
.full_name,
|
||||
.thumb_url,
|
||||
.url
|
||||
] |
|
||||
@tsv
|
||||
) |
|
||||
.[] |
|
||||
@text
|
||||
@@ -5,7 +5,7 @@
|
||||
# __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
|
||||
test "$(curl -LSs -w '\n' -- "https://api.github.com/repos/$REPO/pulls?access_token=$__MISSKEY_GITHUB_TOKEN" | jq -r -f check_pr.jq | grep $__MISSKEY_HEAD)" && exit 1
|
||||
cd "$(dirname $0)/.." && \
|
||||
touch null.cache && \
|
||||
rm *.cache && \
|
||||
@@ -30,7 +30,7 @@ while :
|
||||
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(.id as$id|$data|contains([$id])))|map(.attributes|[.full_name,.thumb_url,.url]|@tsv)|.[]|@text' >> patreon.cache && \
|
||||
jq -r -f patreon.jq >> patreon.cache && \
|
||||
echo '<table><tr>' >> patreon.md.cache && \
|
||||
cat patreon.cache | \
|
||||
awk -F'\t' '{print $2,$1}' | \
|
||||
@@ -43,7 +43,7 @@ while :
|
||||
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')"
|
||||
new_url="$(cat patreon.raw.cache | jq -r -f next_url.jq)"
|
||||
test "$new_url" = 'null' && \
|
||||
break || \
|
||||
URL="$url"
|
||||
@@ -108,13 +108,5 @@ autoAdmin: true
|
||||
# port: 9200
|
||||
# pass: null
|
||||
|
||||
# ServiceWorker
|
||||
#sw:
|
||||
# # Public key of VAPID
|
||||
# public_key: example-sw-public-key
|
||||
#
|
||||
# # Private key of VAPID
|
||||
# private_key: example-sw-private-key
|
||||
|
||||
# Clustering
|
||||
#clusterLimit: 1
|
||||
|
||||
13
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
13
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
# Summary
|
||||
|
||||
<!--
|
||||
-
|
||||
- * Please describe your changes here *
|
||||
-
|
||||
- If you are going to resolve some issue, please add this context.
|
||||
- Resolve #ISSUE_NUMBER
|
||||
-
|
||||
- If you are going to fix some bug issue, please add this context.
|
||||
- Fix #ISSUE_NUMBER
|
||||
-
|
||||
-->
|
||||
135
CHANGELOG.md
135
CHANGELOG.md
@@ -1,9 +1,140 @@
|
||||
ChangeLog
|
||||
=========
|
||||
|
||||
破壊的変更のみ記載。
|
||||
10.73.0
|
||||
-------
|
||||
* テーマの強化
|
||||
* line thiknessの設定はデバイスに保存するように
|
||||
|
||||
This document describes breaking changes only.
|
||||
10.72.0
|
||||
-------
|
||||
* いくつかのテーマの追加
|
||||
* デザインの調整
|
||||
* バグ修正
|
||||
* など
|
||||
|
||||
10.71.0
|
||||
-------
|
||||
* いくつかのテーマの追加
|
||||
|
||||
10.70.1
|
||||
-------
|
||||
* notes/mentions にミュートを適用するように
|
||||
* Add id to return of users/relation
|
||||
* デザインの調整
|
||||
|
||||
10.70.0
|
||||
-------
|
||||
* フォローしているユーザーからのフォローを自動承認するオプション
|
||||
* 「非公開」の公開範囲を廃止
|
||||
* Renote数の表示を廃止
|
||||
* 投稿のフィルタリングを強化
|
||||
* デザインの調整
|
||||
|
||||
10.69.0
|
||||
-------
|
||||
* 通知の管理を強化
|
||||
* ユーザビリティの強化
|
||||
* デザインの調整
|
||||
|
||||
10.68.0
|
||||
-------
|
||||
* 特定ユーザーにメンション付きで新規投稿ができるボタンを追加
|
||||
* 自分の投稿にリアクションできないように
|
||||
* 数式に文法エラーがあるとき、数式のソースをそのまま表示するように
|
||||
* CWボタンにアンケートの有無を表記するように
|
||||
* デスクトップ版で設定を新しいタブで開くように
|
||||
* モバイル版で検索ができない問題を修正
|
||||
* i18nの修正
|
||||
|
||||
10.67.0
|
||||
-------
|
||||
* トークのメッセージを削除できるように
|
||||
* リアクションを取り消せるように
|
||||
* Misskey以外のソフトウェアからの「Like」アクティビティをプリンではなく「いいね」として扱うように
|
||||
* i18nの修正
|
||||
* バグ修正
|
||||
* など
|
||||
|
||||
10.66.2
|
||||
-------
|
||||
* i18nの修正
|
||||
* ドライブのファイル一覧取得APIでファイルサイズによるソートが機能していなかった問題を修正
|
||||
* リモートユーザーの更新時に、各ピン留め投稿の取得失敗は無視するように
|
||||
* リモートMisskeyユーザーの情報が登録/更新出来なくなっていたのを修正
|
||||
* メンションのリンク先URLに余計な@がプリフィクスされていたのを修正
|
||||
* ダイレクトでリプライする際、リプライ先のユーザーは自動的に公開先として追加するように
|
||||
* ダイレクトでメンションでもユーザーを指定できるように
|
||||
|
||||
10.66.1
|
||||
-------
|
||||
* ActivityPubのsharedInboxに関して修正
|
||||
* MFMでのカッコの判定を改善
|
||||
* バグ修正
|
||||
|
||||
10.66.0
|
||||
-------
|
||||
* ユーザーごとのRSSフィードを提供するように
|
||||
* リストのユーザーがすべて表示できない問題を修正
|
||||
* デザインの調整
|
||||
* パフォーマンスの改善
|
||||
|
||||
10.65.0
|
||||
-------
|
||||
* 検索で投稿やユーザーのURLを入力した際にそれをフェッチして表示するように
|
||||
* リストのリネームと削除をできるように
|
||||
* リストからユーザーを削除できるように
|
||||
* リモートの絵文字を更新するように
|
||||
* ActivityPubのための絵文字エンドポイントを実装
|
||||
* 管理者がドライブのファイルのNSFWを設定できるように
|
||||
* ServiceWorkerの設定を管理者ページで行えるように
|
||||
* メンションの判定を改善
|
||||
* リモートの投稿を引用した際にオリジナルのURLを挿入するように
|
||||
* クライアントのパフォーマンス改善
|
||||
* CWの内容がタブタイトルに表示されるのを修正
|
||||
* アカウントを作成したときにログイン状態にならない問題を修正
|
||||
* 時計の針にテーマカラーが適用されていなかったのを修正
|
||||
* 一部の日時の表示が日本語で表示されていたのを修正
|
||||
* プロフィールの写真欄に画像以外のファイルが含まれる問題を修正
|
||||
* メンションが含まれる投稿に返信する際、フォームに予めそれらのメンションがセットされた状態にならない問題を修正
|
||||
* デッキのTLにUIの動きを減らすオプションが適用されていなかったのを修正
|
||||
* ログイン画面のタイムラインに隠した投稿が表示される問題を修正
|
||||
* サジェストが複数開いてしまう問題を修正
|
||||
* APから来たタグに登録時の長さ制限が適用されていなかったのを修正
|
||||
|
||||
10.64.2
|
||||
-------
|
||||
* UIの動きを減らすオプションが一部のアニメーションに適用されなかったのを修正
|
||||
|
||||
10.64.1
|
||||
-------
|
||||
* レートリミットの調整
|
||||
* アニメーションの調整
|
||||
|
||||
10.64.0
|
||||
-------
|
||||
* いくつかのアニメーションを追加
|
||||
* OGP向けにインスタンスのバナー画像を提供するように
|
||||
* 管理者ページでドライブのファイルを表示できるように
|
||||
* ユーザビリティの強化
|
||||
* バグ修正
|
||||
|
||||
10.63.1
|
||||
-------
|
||||
* メンションの表示を改善
|
||||
* バグ修正
|
||||
|
||||
10.63.0
|
||||
-------
|
||||
* ActivityPubのユーザーフィールドをユーザーページに表示
|
||||
* 404ページの実装
|
||||
* パフォーマンスの向上
|
||||
* バグ修正
|
||||
|
||||
10.62.2
|
||||
-------
|
||||
* バグ修正
|
||||
* ユーザビリティの向上
|
||||
|
||||
10.0.0
|
||||
------
|
||||
|
||||
@@ -25,3 +25,16 @@ Misskey uses [vue-i18n](https://github.com/kazupon/vue-i18n).
|
||||
## Continuous integration
|
||||
Misskey uses CircleCI for automated test.
|
||||
Configuration files are located in `/.circleci`.
|
||||
|
||||
## Glossary
|
||||
### AP
|
||||
Stands for _**A**ctivity**P**ub_.
|
||||
|
||||
### MFM
|
||||
Stands for _**M**isskey **F**lavored **M**arkdown_.
|
||||
|
||||
### Mk
|
||||
Stands for _**M**iss**k**ey_.
|
||||
|
||||
### SW
|
||||
Stands for _**S**ervice**W**orker_.
|
||||
|
||||
22
README.md
22
README.md
@@ -3,9 +3,9 @@
|
||||
[](https://misskey.xyz/)
|
||||
================================================================
|
||||
|
||||
[](https://circleci.com/gh/syuilo/misskey)
|
||||
[![][dependencies-badge]][dependencies-link]
|
||||
[](http://makeapullrequest.com)
|
||||
[](https://circleci.com/gh/syuilo/misskey)
|
||||
[](https://david-dm.org/syuilo/misskey)
|
||||
[](http://makeapullrequest.com)
|
||||
|
||||
**Sophisticated microblogging platform, evolving forever.**
|
||||
|
||||
@@ -77,46 +77,48 @@ Please see [Contribution guide](./CONTRIBUTING.md).
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13376668/71f3cf87ec6c4393a44b1b9df5ee3d12/1?token-time=2145916800&token-hash=7pSmWqgMfMSJHVIEcNsuuQoKeU3TRluew5p0EGTzWA4%3D" alt="Arctic"></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/12913507/f7181eacafe8469a93033d85f5969c29/2?token-time=2145916800&token-hash=mgPdX9TqZxEg4TTPuc477dxhIgYk9246qafjWZEqZ7g%3D" alt="Melilot"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12999811/5f349fafcce44dd1824a8b1ebbec4564/3?token-time=2145916800&token-hash=ybYtxfpte1b-rGg6Zecpys2ZdZDtwR_UNJHQjt-3eoU%3D" alt="Xeltica"></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/11357794/923ce94cd8c44ba788ee931907881839/1?token-time=2145916800&token-hash=I8lJVM8LeW6TSo5W6uIIRZ42cw83zp1wK_FsbzY0mcQ%3D" alt="mydarkstar"></td>
|
||||
</tr><tr>
|
||||
<td><a href="https://www.patreon.com/weepjp">weep</a></td>
|
||||
<td><a href="https://www.patreon.com/user?u=13376668">Arctic</a></td>
|
||||
<td><a href="https://www.patreon.com/negao">negao</a></td>
|
||||
<td><a href="https://www.patreon.com/user?u=12913507">Melilot</a></td>
|
||||
<td><a href="https://www.patreon.com/Xeltica">Xeltica</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/mydarkstar">mydarkstar</a></td>
|
||||
</tr></table>
|
||||
<table><tr>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/11357794/923ce94cd8c44ba788ee931907881839/1?token-time=2145916800&token-hash=I8lJVM8LeW6TSo5W6uIIRZ42cw83zp1wK_FsbzY0mcQ%3D" alt="mydarkstar"></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/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/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/3?token-time=2145916800&token-hash=qsdn0-e6yLaLI6hUX9JAkyTR6a5UdnSp7T1foniBvGQ%3D" alt="YUKIMOCHI"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/8241184/39e18850e87a449e9c9a71acb3310ebd/2?token-time=2145916800&token-hash=iUXOQzRyJDv3PJxwS7Mjwg1459dzh2trOq6NFtXu_OM%3D" alt="Acid Chicken"></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/10789744/97175095d8f04c0f86225ff47cb98d40/1?token-time=2145916800&token-hash=P4BIzCX2I1CkEP66ottfhsC8Wr6BUSamjA-vq3pLqFI%3D" alt="Naoki Hirayama"></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>
|
||||
</tr><tr>
|
||||
<td><a href="https://www.patreon.com/mydarkstar">mydarkstar</a></td>
|
||||
<td><a href="https://www.patreon.com/user?u=12718187">Peter G.</a></td>
|
||||
<td><a href="https://www.patreon.com/user?u=13039004">nemu</a></td>
|
||||
<td><a href="https://www.patreon.com/yukimochi">YUKIMOCHI</a></td>
|
||||
<td><a href="https://www.patreon.com/acid_chicken">Acid Chicken</a></td>
|
||||
<td><a href="https://www.patreon.com/hiratake">Hiratake</a></td>
|
||||
<td><a href="https://www.patreon.com/spinlock">Naoki Hirayama</a></td>
|
||||
<td><a href="https://www.patreon.com/dansup">dansup</a></td>
|
||||
</tr></table>
|
||||
<table><tr>
|
||||
<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/619786/32cf01444db24e578cd1982c197f6fc6/1?token-time=2145916800&token-hash=tB1e_r8RlZ5sFL0KV_e8dugapxatNBRK1Z3h67TO1g8%3D" alt="Gargron"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/5731881/4b6038e6cda34c04b83a5fcce3806a93/1?token-time=2145916800&token-hash=VZUtwrjQa8Jml4twCjHYQQZ64wHEY4oIlGl7Kc-VYUQ%3D" alt="Nokotaro Takeda"></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>
|
||||
</tr><tr>
|
||||
<td><a href="https://www.patreon.com/dansup">dansup</a></td>
|
||||
<td><a href="https://www.patreon.com/mastodon">Gargron</a></td>
|
||||
<td><a href="https://www.patreon.com/takenoko">Nokotaro Takeda</a></td>
|
||||
<td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
|
||||
</tr></table>
|
||||
|
||||
**Last updated:** Tue, 27 Nov 2018 06:24:05 UTC
|
||||
**Last updated:** Tue, 25 Dec 2018 04:58:06 UTC
|
||||
<!-- PATREON_END -->
|
||||
|
||||
:four_leaf_clover: Copyright
|
||||
@@ -128,9 +130,7 @@ Misskey is an open-source software licensed under the [GNU AGPLv3](LICENSE).
|
||||
[![][agpl-3.0-badge]][AGPL-3.0]
|
||||
|
||||
[agpl-3.0]: https://www.gnu.org/licenses/agpl-3.0.en.html
|
||||
[agpl-3.0-badge]: https://img.shields.io/badge/license-AGPL--3.0-444444.svg?style=flat-square
|
||||
[dependencies-link]: https://david-dm.org/syuilo/misskey
|
||||
[dependencies-badge]: https://img.shields.io/david/syuilo/misskey.svg?style=flat-square
|
||||
[agpl-3.0-badge]: https://img.shields.io/badge/license-AGPL--3.0-444444.svg?style=for-the-badge
|
||||
|
||||
[backer-url]: #backers
|
||||
[backer-badge]: https://opencollective.com/misskey/backers/badge.svg
|
||||
|
||||
70
docs/examples/misskey.nginx
Normal file
70
docs/examples/misskey.nginx
Normal file
@@ -0,0 +1,70 @@
|
||||
# Sample nginx configuration for Misskey
|
||||
#
|
||||
# 1. Replace example.tld to your domain
|
||||
# 2. Copy to /etc/nginx/sites-available/ and then symlink from /etc/nginx/sites-ebabled/
|
||||
# or copy to /etc/nginx/conf.d/
|
||||
|
||||
# For WebSocket
|
||||
map $http_upgrade $connection_upgrade {
|
||||
default upgrade;
|
||||
'' close;
|
||||
}
|
||||
|
||||
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache1:16m max_size=1g inactive=720m use_temp_path=off;
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name example.tld;
|
||||
|
||||
# For SSL domain validation
|
||||
root /var/www/html;
|
||||
location /.well-known/acme-challenge/ { allow all; }
|
||||
location /.well-known/pki-validation/ { allow all; }
|
||||
location / { return 301 https://$server_name$request_uri; }
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 http2;
|
||||
listen [::]:443 http2;
|
||||
server_name example.tld;
|
||||
ssl on;
|
||||
ssl_session_cache shared:ssl_session_cache:10m;
|
||||
|
||||
# To use Let's Encrypt certificate
|
||||
ssl_certificate /etc/letsencrypt/live/example.tld/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/example.tld/privkey.pem;
|
||||
|
||||
# To use Debian/Ubuntu's self-signed certificate (For testing or before issuing a certificate)
|
||||
#ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
|
||||
#ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
|
||||
|
||||
# SSL protocol settings
|
||||
ssl_protocols TLSv1 TLSv1.2;
|
||||
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA;
|
||||
ssl_prefer_server_ciphers on;
|
||||
|
||||
# Change to your upload limit
|
||||
client_max_body_size 80m;
|
||||
|
||||
# Proxy to Node
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto https;
|
||||
proxy_http_version 1.1;
|
||||
proxy_redirect off;
|
||||
|
||||
# For WebSocket
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection $connection_upgrade;
|
||||
|
||||
# Cache settings
|
||||
proxy_cache cache1;
|
||||
proxy_cache_lock on;
|
||||
proxy_cache_use_stale updating;
|
||||
add_header X-Cache $upstream_cache_status;
|
||||
}
|
||||
}
|
||||
@@ -47,16 +47,6 @@ As root:
|
||||
4. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest)
|
||||
5. `npm install` Install misskey dependencies.
|
||||
|
||||
*(optional)* 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 as root.
|
||||
|
||||
``` shell
|
||||
npm install web-push -g
|
||||
web-push generate-vapid-keys
|
||||
```
|
||||
|
||||
*5.* Configure Misskey
|
||||
----------------------------------------------------------------
|
||||
1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`.
|
||||
|
||||
@@ -47,16 +47,6 @@ En mode root :
|
||||
4. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` Télécharge la [version la plus récente](https://github.com/syuilo/misskey/releases/latest)
|
||||
5. `npm install` Installez les dépendances de misskey.
|
||||
|
||||
*(optionnel)* Génération des clés VAPID
|
||||
----------------------------------------------------------------
|
||||
Si vous désirez activer ServiceWorker, vous devez générer les clés VAPID :
|
||||
Unless you have set your global node_modules location elsewhere, vous devez lancer ceci en mode root.
|
||||
|
||||
``` shell
|
||||
npm install web-push -g
|
||||
web-push generate-vapid-keys
|
||||
```
|
||||
|
||||
*5.* Création du fichier de configuration
|
||||
----------------------------------------------------------------
|
||||
1. `cp .config/example.yml .config/default.yml` Copiez le fichier `.config/example.yml` et renommez-le `default.yml`.
|
||||
|
||||
@@ -53,15 +53,6 @@ adduser --disabled-password --disabled-login misskey
|
||||
4. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
|
||||
5. `npm install` Misskeyの依存パッケージをインストール
|
||||
|
||||
*(オプション)* VAPIDキーペアの生成
|
||||
----------------------------------------------------------------
|
||||
ServiceWorkerを有効にする場合、VAPIDキーペアを生成する必要があります:
|
||||
|
||||
``` shell
|
||||
npm install web-push -g
|
||||
web-push generate-vapid-keys
|
||||
```
|
||||
|
||||
*5.* 設定ファイルを作成する
|
||||
----------------------------------------------------------------
|
||||
1. `cp .config/example.yml .config/default.yml` `.config/example.yml`をコピーし名前を`default.yml`にする。
|
||||
|
||||
52
gulpfile.ts
52
gulpfile.ts
@@ -11,14 +11,12 @@ import tslint from 'gulp-tslint';
|
||||
const cssnano = require('gulp-cssnano');
|
||||
const stylus = require('gulp-stylus');
|
||||
import * as uglifyComposer from 'gulp-uglify/composer';
|
||||
import pug = require('gulp-pug');
|
||||
import * as rimraf from 'rimraf';
|
||||
import chalk from 'chalk';
|
||||
const imagemin = require('gulp-imagemin');
|
||||
import * as rename from 'gulp-rename';
|
||||
import * as mocha from 'gulp-mocha';
|
||||
import * as replace from 'gulp-replace';
|
||||
import * as htmlmin from 'gulp-htmlmin';
|
||||
const uglifyes = require('uglify-es');
|
||||
|
||||
const locales = require('./locales');
|
||||
@@ -34,8 +32,6 @@ if (isDebug) {
|
||||
console.warn(chalk.yellow.bold(' built script will not be compressed.'));
|
||||
}
|
||||
|
||||
const constants = require('./src/const.json');
|
||||
|
||||
gulp.task('build', [
|
||||
'build:ts',
|
||||
'build:copy',
|
||||
@@ -109,7 +105,7 @@ gulp.task('default', ['build']);
|
||||
gulp.task('build:client', [
|
||||
'build:ts',
|
||||
'build:client:script',
|
||||
'build:client:pug',
|
||||
'build:client:styles',
|
||||
'copy:client'
|
||||
]);
|
||||
|
||||
@@ -148,52 +144,6 @@ gulp.task('copy:client', [
|
||||
.pipe(gulp.dest('./built/client/assets/'))
|
||||
);
|
||||
|
||||
gulp.task('build:client:pug', [
|
||||
'copy:client',
|
||||
'build:client:script',
|
||||
'build:client:styles'
|
||||
], () =>
|
||||
gulp.src('./src/client/app/base.pug')
|
||||
.pipe(pug({
|
||||
locals: {
|
||||
themeColor: constants.themeColor
|
||||
}
|
||||
}))
|
||||
.pipe(htmlmin({
|
||||
// 真理値属性の簡略化 e.g.
|
||||
// <input value="foo" readonly="readonly"> to
|
||||
// <input value="foo" readonly>
|
||||
collapseBooleanAttributes: true,
|
||||
|
||||
// テキストの一部かもしれない空白も削除する e.g.
|
||||
// <div> <p> foo </p> </div> to
|
||||
// <div><p>foo</p></div>
|
||||
collapseWhitespace: true,
|
||||
|
||||
// タグ間の改行を保持する
|
||||
preserveLineBreaks: true,
|
||||
|
||||
// (できる場合は)属性のクォーテーション削除する e.g.
|
||||
// <p class="foo-bar" id="moo" title="blah blah">foo</p> to
|
||||
// <p class=foo-bar id=moo title="blah blah">foo</p>
|
||||
removeAttributeQuotes: true,
|
||||
|
||||
// 省略可能なタグを省略する e.g.
|
||||
// <html><p>yo</p></html> ro
|
||||
// <p>yo</p>
|
||||
removeOptionalTags: true,
|
||||
|
||||
// 属性の値がデフォルトと同じなら省略する e.g.
|
||||
// <input type="text"> to
|
||||
// <input>
|
||||
removeRedundantAttributes: true,
|
||||
|
||||
// CSSも圧縮する
|
||||
minifyCSS: true
|
||||
}))
|
||||
.pipe(gulp.dest('./built/client/app/'))
|
||||
);
|
||||
|
||||
gulp.task('locales', () =>
|
||||
gulp.src('./locales/*.yml')
|
||||
.pipe(yaml({ schema: 'DEFAULT_SAFE_SCHEMA' }))
|
||||
|
||||
@@ -90,7 +90,6 @@ common:
|
||||
followers-desc: "自分のフォロワーにのみ公開"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "指定したユーザーにのみ公開"
|
||||
private: "非公開"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
local-followers: "フォロワー (ローカルのみ)"
|
||||
@@ -110,9 +109,10 @@ common:
|
||||
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "公式アカウント"
|
||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
always-show-nsfw: "常に閲覧注意のメディアを表示する"
|
||||
always-mark-nsfw: "常にメディアを閲覧注意として投稿"
|
||||
show-full-acct: "ユーザー名のホストを省略しない"
|
||||
@@ -120,14 +120,15 @@ common:
|
||||
reduce-motion: "UIの動きを減らす"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
use-os-default-emojis: "OS標準の絵文字を使用"
|
||||
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
is-remote-post: "この投稿情報はコピーです。"
|
||||
view-on-remote: "正確な情報を見る"
|
||||
renoted-by: "{user}がRenote"
|
||||
error:
|
||||
title: '問題が発生しました'
|
||||
retry: 'やり直す'
|
||||
title: "問題が発生しました"
|
||||
retry: "やり直す"
|
||||
reversi:
|
||||
drawn: "引き分け"
|
||||
my-turn: "あなたのターンです"
|
||||
@@ -158,12 +159,12 @@ common:
|
||||
polls: "アンケート"
|
||||
post-form: "投稿フォーム"
|
||||
server: "サーバー情報"
|
||||
donation: "寄付のお願い"
|
||||
nav: "ナビゲーション"
|
||||
tips: "ヒント"
|
||||
hashtags: "ハッシュタグ"
|
||||
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||
ai-chan-kawaii: "藍ちゃかわいい"
|
||||
you: "あなた"
|
||||
auth/views/form.vue:
|
||||
share-access: "<i>{name}</i>があなたのアカウントにアクセスすることを許可しますか?"
|
||||
permission-ask: "このアプリは次の権限を要求しています:"
|
||||
@@ -259,6 +260,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "閲覧注意"
|
||||
click-to-show: "クリックして表示"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "明るいテーマ"
|
||||
@@ -275,6 +277,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "ベーステーマ"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "テーマ名"
|
||||
preview-created-theme: "プレビュー"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
@@ -296,6 +299,9 @@ common/views/components/theme.vue:
|
||||
common/views/components/cw-button.vue:
|
||||
hide: "隠す"
|
||||
show: "もっと見る"
|
||||
chars: "{count}文字"
|
||||
files: "{count}ファイル"
|
||||
poll: "アンケート"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "ユーザーを探す"
|
||||
you: "あなた"
|
||||
@@ -325,6 +331,7 @@ common/views/components/nav.vue:
|
||||
develop: "開発者"
|
||||
feedback: "フィードバック"
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "詳細"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "お気に入り"
|
||||
@@ -400,13 +407,18 @@ common/views/components/stream-indicator.vue:
|
||||
connecting: "接続中"
|
||||
reconnecting: "再接続中"
|
||||
connected: "接続完了"
|
||||
common/views/components/twitter-setting.vue:
|
||||
description: "お使いのTwitterアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでTwitterアカウント情報が表示されるようになったり、Twitterを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のTwitterアカウントに接続されています"
|
||||
detail: "詳細..."
|
||||
reconnect: "再接続する"
|
||||
connect: "Twitterと接続する"
|
||||
common/views/components/notification-settings.vue:
|
||||
title: "通知"
|
||||
mark-as-read-all-notifications: "すべての通知を既読にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
mark-as-read-all-talk-messages: "すべてのトークを既読にする"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
common/views/components/integration-settings.vue:
|
||||
title: "サービス連携"
|
||||
connect: "接続する"
|
||||
disconnect: "切断する"
|
||||
connected-to: "次のアカウントに接続されています"
|
||||
common/views/components/github-setting.vue:
|
||||
description: "お使いのGitHubアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでGitHubアカウント情報が表示されるようになったり、GitHubを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のGitHubアカウントに接続されています"
|
||||
@@ -431,7 +443,6 @@ common/views/components/visibility-chooser.vue:
|
||||
followers-desc: "自分のフォロワーにのみ公開"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "指定したユーザーにのみ公開"
|
||||
private: "非公開"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-public-desc: "リモートへは公開しない"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
@@ -439,12 +450,20 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
account: "アカウント"
|
||||
location: "場所"
|
||||
description: "自己紹介"
|
||||
language: "言語"
|
||||
birthday: "誕生日"
|
||||
avatar: "アイコン"
|
||||
banner: "バナー"
|
||||
@@ -452,6 +471,7 @@ common/views/components/profile-editor.vue:
|
||||
is-bot: "このアカウントはBotです"
|
||||
is-locked: "フォローを承認制にする"
|
||||
careful-bot: "Botからのフォローだけ承認制にする"
|
||||
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する"
|
||||
advanced: "その他"
|
||||
privacy: "プライバシー"
|
||||
save: "保存"
|
||||
@@ -462,6 +482,13 @@ common/views/components/profile-editor.vue:
|
||||
email-address: "メールアドレス"
|
||||
email-verified: "メールアドレスが確認されました"
|
||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "ユーザー"
|
||||
rename: "リスト名を変更"
|
||||
delete: "リストを削除"
|
||||
remove-user: "このリストから削除"
|
||||
delete-are-you-sure: "リスト「$1」を削除しますか?"
|
||||
deleted: "削除しました"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "確認中"
|
||||
no-broadcasts: "お知らせはありません"
|
||||
@@ -474,9 +501,6 @@ common/views/widgets/calendar.vue:
|
||||
today: "今日:"
|
||||
this-month: "今月:"
|
||||
this-year: "今年:"
|
||||
common/views/widgets/donation.vue:
|
||||
title: "寄付のお願い"
|
||||
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
|
||||
common/views/widgets/photo-stream.vue:
|
||||
title: "フォトストリーム"
|
||||
no-photos: "写真はありません"
|
||||
@@ -514,9 +538,11 @@ common/views/widgets/tips.vue:
|
||||
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
||||
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
|
||||
tips-line21: "APIを利用してbotの開発なども行えます"
|
||||
tips-line23: "まゆかわいいよまゆ"
|
||||
tips-line23: "藍かわいいよ藍"
|
||||
tips-line24: "Misskeyは2014年にサービスを開始しました"
|
||||
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
|
||||
common/views/pages/not-found.vue:
|
||||
page-not-found: "ページが見つかりませんでした"
|
||||
common/views/pages/follow.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
following: "フォロー中"
|
||||
@@ -652,10 +678,12 @@ desktop/views/components/note-detail.vue:
|
||||
location: "位置情報"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
desktop/views/components/note.vue:
|
||||
reply: "返信"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
detail: "詳細"
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
@@ -754,10 +782,13 @@ desktop/views/components/settings.vue:
|
||||
dark-mode: "ダークモード"
|
||||
use-shadow: "UIに影を使用"
|
||||
rounded-corners: "UIの角を丸める"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
circle-icons: "円形のアイコンを使用"
|
||||
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
show-clock-on-header: "右上に時計を表示する"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
timeline: "タイムライン"
|
||||
@@ -766,27 +797,26 @@ desktop/views/components/settings.vue:
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "マップの自動展開"
|
||||
remain-deleted-note: "削除された投稿を表示し続ける"
|
||||
deck-column-align: "デッキのカラムの位置"
|
||||
deck-column-align: "デッキのカラムの配置"
|
||||
deck-column-align-center: "中央"
|
||||
deck-column-align-left: "左"
|
||||
deck-column-align-flexible: "フレキシブル"
|
||||
deck-column-width: "デッキのカラムの幅"
|
||||
deck-column-width-narrow: "狭"
|
||||
deck-column-width-narrower: "やや狭"
|
||||
deck-column-width-normal: "普通"
|
||||
deck-column-width-wider: "やや広"
|
||||
deck-column-width-wide: "広"
|
||||
sound: "サウンド"
|
||||
enable-sounds: "サウンドを有効にする"
|
||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||
volume: "ボリューム"
|
||||
test: "テスト"
|
||||
language: "言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||
cache-cleared: "キャッシュを削除しました"
|
||||
cache-cleared-desc: "ページを再度読み込みしてください。"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
about: "Misskeyについて"
|
||||
operator: "このサーバーの運営者"
|
||||
update: "Misskey Update"
|
||||
@@ -825,6 +855,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "パスワードを入力してください"
|
||||
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
|
||||
howtoinstall: "インストール方法はこちら"
|
||||
token: "トークン"
|
||||
scan: "次に、表示されているQRコードをスキャンします:"
|
||||
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
|
||||
submit: "完了"
|
||||
@@ -839,13 +870,13 @@ common/views/components/api-settings.vue:
|
||||
token: "Token:"
|
||||
enter-password: "パスワードを入力してください"
|
||||
console:
|
||||
title: 'APIコンソール'
|
||||
endpoint: 'エンドポイント'
|
||||
parameter: 'パラメータ'
|
||||
title: "APIコンソール"
|
||||
endpoint: "エンドポイント"
|
||||
parameter: "パラメータ"
|
||||
credential-info: "「i」パラメータは自動で付与されます。"
|
||||
send: '送信'
|
||||
sending: '応答待ち'
|
||||
response: '結果'
|
||||
send: "送信"
|
||||
sending: "応答待ち"
|
||||
response: "結果"
|
||||
desktop/views/components/settings.apps.vue:
|
||||
no-apps: "連携しているアプリケーションはありません"
|
||||
common/views/components/drive-settings.vue:
|
||||
@@ -869,11 +900,17 @@ common/views/components/password-settings.vue:
|
||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||
not-match: "新しいパスワードが一致しません"
|
||||
changed: "パスワードを変更しました"
|
||||
failed: "パスワード変更に失敗しました"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
media-count: "{}つのメディア"
|
||||
poll: "アンケート"
|
||||
desktop/views/components/settings.tags.vue:
|
||||
title: "タグ"
|
||||
query: "クエリ (省略可)"
|
||||
add: "追加"
|
||||
save: "保存"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "タスクマネージャ"
|
||||
desktop/views/components/timeline.vue:
|
||||
@@ -956,6 +993,7 @@ admin/views/instance.vue:
|
||||
instance-description: "インスタンスの紹介"
|
||||
host: "ホスト"
|
||||
banner-url: "バナー画像URL"
|
||||
error-image-url: "エラー画像URL"
|
||||
languages: "インスタンスの対象言語"
|
||||
languages-desc: "スペースで区切って複数設定できます。"
|
||||
maintainer-config: "管理者情報"
|
||||
@@ -1014,6 +1052,12 @@ admin/views/instance.vue:
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
smtp-pass: "SMTPパスワード"
|
||||
serviceworker-config: "ServiceWorker"
|
||||
enable-serviceworker: "ServiceWorkerを有効にする"
|
||||
serviceworker-info: "プッシュ通知を行うには有効する必要があります。"
|
||||
vapid-publickey: "VAPID公開鍵"
|
||||
vapid-privatekey: "VAPID秘密鍵"
|
||||
vapid-info: "ServiceWorkerを有効にする場合、VAPIDキーペアを生成する必要があります。シェルで次のようにします:"
|
||||
admin/views/charts.vue:
|
||||
title: "チャート"
|
||||
per-day: "1日ごと"
|
||||
@@ -1039,6 +1083,22 @@ admin/views/charts.vue:
|
||||
network-requests: "リクエスト"
|
||||
network-time: "応答時間"
|
||||
network-usage: "通信量"
|
||||
admin/views/drive.vue:
|
||||
sort:
|
||||
title: "ソート"
|
||||
createdAtAsc: "アップロード日時が古い順"
|
||||
createdAtDesc: "アップロード日時が新しい順"
|
||||
sizeAsc: "サイズが小さい順"
|
||||
sizeDesc: "サイズが大きい順"
|
||||
origin:
|
||||
title: "オリジン"
|
||||
combined: "ローカル+リモート"
|
||||
local: "ローカル"
|
||||
remote: "リモート"
|
||||
delete: "削除"
|
||||
deleted: "削除しました"
|
||||
mark-as-sensitive: "閲覧注意に設定"
|
||||
unmark-as-sensitive: "閲覧注意を解除"
|
||||
admin/views/users.vue:
|
||||
operation: "操作"
|
||||
username-or-userid: "ユーザー名またはユーザーID"
|
||||
@@ -1170,6 +1230,7 @@ desktop/views/pages/user/user.header.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
is-bot: "このアカウントはBotです"
|
||||
years-old: "{age}歳"
|
||||
year: "年"
|
||||
@@ -1179,6 +1240,7 @@ desktop/views/pages/user/user.timeline.vue:
|
||||
default: "投稿"
|
||||
with-replies: "投稿と返信"
|
||||
with-media: "メディア"
|
||||
my-posts: "私の投稿"
|
||||
empty: "このユーザーはまだ何も投稿していないようです。"
|
||||
desktop/views/widgets/messaging.vue:
|
||||
title: "メッセージ"
|
||||
@@ -1361,11 +1423,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "ファイルを選択"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
lang: "言語"
|
||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
design: "デザインと表示"
|
||||
dark-mode: "ダークモード"
|
||||
i-am-under-limited-internet: "私は通信を制限されている"
|
||||
@@ -1382,7 +1439,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "下"
|
||||
notification-position-top: "上"
|
||||
theme: "テーマ"
|
||||
behavior: "動作"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
@@ -1393,18 +1449,6 @@ mobile/views/pages/settings.vue:
|
||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||
load-raw-images: "添付された画像を高画質で表示する"
|
||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||
twitter: "Twitter連携"
|
||||
twitter-connect: "Twitterアカウントに接続する"
|
||||
twitter-reconnect: "再接続する"
|
||||
twitter-disconnect: "切断する"
|
||||
github: "GitHub連携"
|
||||
github-connect: "GitHubアカウントに接続する"
|
||||
github-reconnect: "再接続する"
|
||||
github-disconnect: "切断する"
|
||||
discord: "Discord連携"
|
||||
discord-connect: "Discordアカウントに接続する"
|
||||
discord-reconnect: "再接続する"
|
||||
discord-disconnect: "切断する"
|
||||
update: "Misskey Update"
|
||||
version: "バージョン:"
|
||||
latest-version: "最新のバージョン:"
|
||||
@@ -1418,7 +1462,6 @@ mobile/views/pages/settings.vue:
|
||||
signout: "サインアウト"
|
||||
sound: "サウンド"
|
||||
enable-sounds: "サウンドを有効にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
password: "パスワード"
|
||||
mobile/views/pages/user.vue:
|
||||
follows-you: "フォローされています"
|
||||
@@ -1428,12 +1471,14 @@ mobile/views/pages/user.vue:
|
||||
overview: "概要"
|
||||
timeline: "タイムライン"
|
||||
media: "メディア"
|
||||
is-suspended: "このユーザーは凍結されています。"
|
||||
mute: "ミュート"
|
||||
unmute: "ミュート解除"
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "最近の投稿"
|
||||
images: "画像"
|
||||
@@ -1479,6 +1524,7 @@ deck/deck.user-column.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
images: "画像"
|
||||
activity: "アクティビティ"
|
||||
timeline: "タイムライン"
|
||||
|
||||
@@ -90,7 +90,6 @@ common:
|
||||
followers-desc: "Nur für diejenigen sichtbar, die dir folgen"
|
||||
specified: "Direkt"
|
||||
specified-desc: "Nur für bestimmte Benutzer posten"
|
||||
private: "Privat"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
local-followers: "フォロワー (ローカルのみ)"
|
||||
@@ -110,9 +109,10 @@ common:
|
||||
my-token-regenerated: "Dein Token wurde generiert. Du wirst jetzt abgemeldet."
|
||||
i-like-sushi: "Ich bevorzuge Sushi anstelle von Pudding"
|
||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "Verifizierter Benutzer"
|
||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
always-show-nsfw: "常に閲覧注意のメディアを表示する"
|
||||
always-mark-nsfw: "常にメディアを閲覧注意として投稿"
|
||||
show-full-acct: "ユーザー名のホストを省略しない"
|
||||
@@ -120,14 +120,15 @@ common:
|
||||
reduce-motion: "Animationen der Benutzeroberfläche reduzieren"
|
||||
this-setting-is-this-device-only: "Nur auf diesem Gerät"
|
||||
use-os-default-emojis: "OS標準の絵文字を使用"
|
||||
do-not-use-in-production: 'Dies ist eine Entwicklungsversion. Nicht in einer Produktionsumgebung verwenden.'
|
||||
do-not-use-in-production: "Dies ist eine Entwicklungsversion. Nicht in einer Produktionsumgebung verwenden."
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
is-remote-post: "この投稿情報はコピーです。"
|
||||
view-on-remote: "正確な情報を見る"
|
||||
renoted-by: "{user}がRenote"
|
||||
error:
|
||||
title: '問題が発生しました'
|
||||
retry: 'Erneut versuchen'
|
||||
title: "問題が発生しました"
|
||||
retry: "Erneut versuchen"
|
||||
reversi:
|
||||
drawn: "Unentschieden"
|
||||
my-turn: "Du bist am Zug"
|
||||
@@ -158,12 +159,12 @@ common:
|
||||
polls: "Umfrage"
|
||||
post-form: "Beitragsform"
|
||||
server: "Server-Info"
|
||||
donation: "Spenden"
|
||||
nav: "Navigation"
|
||||
tips: "Tipps"
|
||||
hashtags: "Hashtags"
|
||||
dev: "Fehler beim Erstellen der Applikation. Bitte versuche es erneut."
|
||||
ai-chan-kawaii: "藍ちゃかわいい"
|
||||
you: "あなた"
|
||||
auth/views/form.vue:
|
||||
share-access: "<i>{name}</i>があなたのアカウントにアクセスすることを許可しますか?"
|
||||
permission-ask: "このアプリは次の権限を要求しています:"
|
||||
@@ -259,6 +260,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "Dieser Inhalt ist NSFW"
|
||||
click-to-show: "Klicke zum den Inhalt anzusehen"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "Thema"
|
||||
dark-theme: "Thema während des Nachtmodus"
|
||||
light-themes: "Helles Thema"
|
||||
@@ -275,6 +277,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "Basisthema"
|
||||
base-theme-light: "Hell"
|
||||
base-theme-dark: "Dunkel"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "Name des Themas"
|
||||
preview-created-theme: "Vorschau"
|
||||
invalid-theme: "Thema ist ungültig"
|
||||
@@ -296,6 +299,9 @@ common/views/components/theme.vue:
|
||||
common/views/components/cw-button.vue:
|
||||
hide: "隠す"
|
||||
show: "もっと見る"
|
||||
chars: "{count}文字"
|
||||
files: "{count}ファイル"
|
||||
poll: "アンケート"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "Einen Nutzer suchen"
|
||||
you: "Du"
|
||||
@@ -325,6 +331,7 @@ common/views/components/nav.vue:
|
||||
develop: "Entwickler"
|
||||
feedback: "Feedback"
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "詳細"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "Diese Notiz favorisieren"
|
||||
@@ -400,13 +407,18 @@ common/views/components/stream-indicator.vue:
|
||||
connecting: "Verbindung wird hergestellt"
|
||||
reconnecting: "Erneut verbinden"
|
||||
connected: "Verbindung hergestellt"
|
||||
common/views/components/twitter-setting.vue:
|
||||
description: "Wenn du deinen Twitter-Account mit deinem Misskey-Account verbindest, siehst du deine Twitter Account-Informationen auf deinem Profil und du kannst dich mit Twitter einloggen."
|
||||
connected-to: "Du bist mit diesem Twitter-Account verbunden"
|
||||
detail: "Mehr..."
|
||||
reconnect: "Erneut verbinden"
|
||||
connect: "Mit Twitter verbinden"
|
||||
disconnect: "Trennen"
|
||||
common/views/components/notification-settings.vue:
|
||||
title: "通知"
|
||||
mark-as-read-all-notifications: "すべての通知を既読にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
mark-as-read-all-talk-messages: "すべてのトークを既読にする"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
common/views/components/integration-settings.vue:
|
||||
title: "サービス連携"
|
||||
connect: "接続する"
|
||||
disconnect: "切断する"
|
||||
connected-to: "次のアカウントに接続されています"
|
||||
common/views/components/github-setting.vue:
|
||||
description: "お使いのGitHubアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでGitHubアカウント情報が表示されるようになったり、GitHubを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のGitHubアカウントに接続されています"
|
||||
@@ -431,7 +443,6 @@ common/views/components/visibility-chooser.vue:
|
||||
followers-desc: "Nur für diejenigen sichtbar, die dir folgen"
|
||||
specified: "Direkt"
|
||||
specified-desc: "Poste nur für bestimmte Benutzer"
|
||||
private: "Privat"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-public-desc: "リモートへは公開しない"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
@@ -439,12 +450,20 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
account: "アカウント"
|
||||
location: "場所"
|
||||
description: "自己紹介"
|
||||
language: "言語"
|
||||
birthday: "誕生日"
|
||||
avatar: "アイコン"
|
||||
banner: "バナー"
|
||||
@@ -452,6 +471,7 @@ common/views/components/profile-editor.vue:
|
||||
is-bot: "このアカウントはBotです"
|
||||
is-locked: "フォローを承認制にする"
|
||||
careful-bot: "Botからのフォローだけ承認制にする"
|
||||
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する"
|
||||
advanced: "その他"
|
||||
privacy: "プライバシー"
|
||||
save: "保存"
|
||||
@@ -462,6 +482,13 @@ common/views/components/profile-editor.vue:
|
||||
email-address: "メールアドレス"
|
||||
email-verified: "メールアドレスが確認されました"
|
||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "ユーザー"
|
||||
rename: "リスト名を変更"
|
||||
delete: "リストを削除"
|
||||
remove-user: "このリストから削除"
|
||||
delete-are-you-sure: "リスト「$1」を削除しますか?"
|
||||
deleted: "削除しました"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "Laden"
|
||||
no-broadcasts: "Keine Broadcasts"
|
||||
@@ -474,9 +501,6 @@ common/views/widgets/calendar.vue:
|
||||
today: "今日:"
|
||||
this-month: "今月:"
|
||||
this-year: "今年:"
|
||||
common/views/widgets/donation.vue:
|
||||
title: "Spende"
|
||||
text: "Um Misskey am Laufen zu halten geben wir Geld für Domain, Server usw. aus. Wir bekommen dafür kein Geld und würden uns freuen, wenn du spenden würdest. Wenn du interessiert bist, dann kontaktiere {}. Danke für deine Unterstützung!"
|
||||
common/views/widgets/photo-stream.vue:
|
||||
title: "Fotostream"
|
||||
no-photos: "Keine Fotos"
|
||||
@@ -514,9 +538,11 @@ common/views/widgets/tips.vue:
|
||||
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
||||
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
|
||||
tips-line21: "APIを利用してbotの開発なども行えます"
|
||||
tips-line23: "まゆかわいいよまゆ"
|
||||
tips-line23: "藍かわいいよ藍"
|
||||
tips-line24: "Misskeyは2014年にサービスを開始しました"
|
||||
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
|
||||
common/views/pages/not-found.vue:
|
||||
page-not-found: "ページが見つかりませんでした"
|
||||
common/views/pages/follow.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
following: "フォロー中"
|
||||
@@ -652,10 +678,12 @@ desktop/views/components/note-detail.vue:
|
||||
location: "Ort"
|
||||
renote: "Anmerkung"
|
||||
add-reaction: "Reaktion hinzufügen"
|
||||
undo-reaction: "リアクション解除"
|
||||
desktop/views/components/note.vue:
|
||||
reply: "返信"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
detail: "詳細"
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
@@ -754,10 +782,13 @@ desktop/views/components/settings.vue:
|
||||
dark-mode: "Nacht Modus"
|
||||
use-shadow: "UIに影を使用"
|
||||
rounded-corners: "Abgerundete Ecken"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
circle-icons: "Kreisförmige Icons"
|
||||
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
show-clock-on-header: "右上に時計を表示する"
|
||||
show-reply-target: "Zeige Antworten"
|
||||
timeline: "タイムライン"
|
||||
@@ -766,27 +797,26 @@ desktop/views/components/settings.vue:
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "Karte anzeigen"
|
||||
remain-deleted-note: "削除された投稿を表示し続ける"
|
||||
deck-column-align: "デッキのカラムの位置"
|
||||
deck-column-align: "デッキのカラムの配置"
|
||||
deck-column-align-center: "中央"
|
||||
deck-column-align-left: "左"
|
||||
deck-column-align-flexible: "フレキシブル"
|
||||
deck-column-width: "デッキのカラムの幅"
|
||||
deck-column-width-narrow: "狭"
|
||||
deck-column-width-narrower: "やや狭"
|
||||
deck-column-width-normal: "普通"
|
||||
deck-column-width-wider: "やや広"
|
||||
deck-column-width-wide: "広"
|
||||
sound: "Ton"
|
||||
enable-sounds: "Ton aktivieren"
|
||||
enable-sounds-desc: "Spiel einen Ton ab beim Erhalten eines Beitrags bzw. einer Nachricht. Diese Einstellung wird im Browser gespeichert."
|
||||
volume: "Lautstärke"
|
||||
test: "Test"
|
||||
language: "Sprache"
|
||||
pick-language: "Sprache auswählen"
|
||||
recommended: "Empfohlen"
|
||||
auto: "Automatisch"
|
||||
specify-language: "Sprache auswählen"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache-warn: "Der Cache deines Benutzerkontos (Info, Beiträge, Antworten, Direktnachrichten, Einstellungen), die lokal im Browser gespeichert sind werden gelöscht.\nDu musst die Seite aktualisieren nachdem du aufgeräumt hast."
|
||||
cache-cleared: "キャッシュを削除しました"
|
||||
cache-cleared-desc: "ページを再度読み込みしてください。"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
about: "Misskeyについて"
|
||||
operator: "このサーバーの運営者"
|
||||
update: "Misskey Update"
|
||||
@@ -825,6 +855,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "Bitte Passwort eingeben"
|
||||
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
|
||||
howtoinstall: "インストール方法はこちら"
|
||||
token: "トークン"
|
||||
scan: "次に、表示されているQRコードをスキャンします:"
|
||||
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
|
||||
submit: "完了"
|
||||
@@ -839,13 +870,13 @@ common/views/components/api-settings.vue:
|
||||
token: "Token:"
|
||||
enter-password: "パスワードを入力してください"
|
||||
console:
|
||||
title: 'APIコンソール'
|
||||
endpoint: 'エンドポイント'
|
||||
parameter: 'パラメータ'
|
||||
title: "APIコンソール"
|
||||
endpoint: "エンドポイント"
|
||||
parameter: "パラメータ"
|
||||
credential-info: "「i」パラメータは自動で付与されます。"
|
||||
send: '送信'
|
||||
sending: '応答待ち'
|
||||
response: '結果'
|
||||
send: "送信"
|
||||
sending: "応答待ち"
|
||||
response: "結果"
|
||||
desktop/views/components/settings.apps.vue:
|
||||
no-apps: "連携しているアプリケーションはありません"
|
||||
common/views/components/drive-settings.vue:
|
||||
@@ -869,11 +900,17 @@ common/views/components/password-settings.vue:
|
||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||
not-match: "新しいパスワードが一致しません"
|
||||
changed: "パスワードを変更しました"
|
||||
failed: "パスワード変更に失敗しました"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
media-count: "{}つのメディア"
|
||||
poll: "アンケート"
|
||||
desktop/views/components/settings.tags.vue:
|
||||
title: "タグ"
|
||||
query: "クエリ (省略可)"
|
||||
add: "追加"
|
||||
save: "保存"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "Taskmanager"
|
||||
desktop/views/components/timeline.vue:
|
||||
@@ -956,6 +993,7 @@ admin/views/instance.vue:
|
||||
instance-description: "インスタンスの紹介"
|
||||
host: "ホスト"
|
||||
banner-url: "バナー画像URL"
|
||||
error-image-url: "エラー画像URL"
|
||||
languages: "インスタンスの対象言語"
|
||||
languages-desc: "スペースで区切って複数設定できます。"
|
||||
maintainer-config: "管理者情報"
|
||||
@@ -1014,6 +1052,12 @@ admin/views/instance.vue:
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
smtp-pass: "SMTPパスワード"
|
||||
serviceworker-config: "ServiceWorker"
|
||||
enable-serviceworker: "ServiceWorkerを有効にする"
|
||||
serviceworker-info: "プッシュ通知を行うには有効する必要があります。"
|
||||
vapid-publickey: "VAPID公開鍵"
|
||||
vapid-privatekey: "VAPID秘密鍵"
|
||||
vapid-info: "ServiceWorkerを有効にする場合、VAPIDキーペアを生成する必要があります。シェルで次のようにします:"
|
||||
admin/views/charts.vue:
|
||||
title: "チャート"
|
||||
per-day: "1日ごと"
|
||||
@@ -1039,6 +1083,22 @@ admin/views/charts.vue:
|
||||
network-requests: "リクエスト"
|
||||
network-time: "応答時間"
|
||||
network-usage: "通信量"
|
||||
admin/views/drive.vue:
|
||||
sort:
|
||||
title: "ソート"
|
||||
createdAtAsc: "アップロード日時が古い順"
|
||||
createdAtDesc: "アップロード日時が新しい順"
|
||||
sizeAsc: "サイズが小さい順"
|
||||
sizeDesc: "サイズが大きい順"
|
||||
origin:
|
||||
title: "オリジン"
|
||||
combined: "ローカル+リモート"
|
||||
local: "ローカル"
|
||||
remote: "リモート"
|
||||
delete: "削除"
|
||||
deleted: "削除しました"
|
||||
mark-as-sensitive: "閲覧注意に設定"
|
||||
unmark-as-sensitive: "閲覧注意を解除"
|
||||
admin/views/users.vue:
|
||||
operation: "操作"
|
||||
username-or-userid: "ユーザー名またはユーザーID"
|
||||
@@ -1170,6 +1230,7 @@ desktop/views/pages/user/user.header.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
is-bot: "このアカウントはBotです"
|
||||
years-old: "{age}歳"
|
||||
year: "年"
|
||||
@@ -1179,6 +1240,7 @@ desktop/views/pages/user/user.timeline.vue:
|
||||
default: "投稿"
|
||||
with-replies: "投稿と返信"
|
||||
with-media: "メディア"
|
||||
my-posts: "私の投稿"
|
||||
empty: "このユーザーはまだ何も投稿していないようです。"
|
||||
desktop/views/widgets/messaging.vue:
|
||||
title: "メッセージ"
|
||||
@@ -1361,11 +1423,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "ファイルを選択"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
lang: "言語"
|
||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "Sprache auswählen"
|
||||
design: "デザインと表示"
|
||||
dark-mode: "ダークモード"
|
||||
i-am-under-limited-internet: "私は通信を制限されている"
|
||||
@@ -1382,7 +1439,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "下"
|
||||
notification-position-top: "上"
|
||||
theme: "テーマ"
|
||||
behavior: "動作"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
@@ -1393,18 +1449,6 @@ mobile/views/pages/settings.vue:
|
||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||
load-raw-images: "添付された画像を高画質で表示する"
|
||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||
twitter: "Twitter連携"
|
||||
twitter-connect: "Twitterアカウントに接続する"
|
||||
twitter-reconnect: "再接続する"
|
||||
twitter-disconnect: "切断する"
|
||||
github: "GitHub連携"
|
||||
github-connect: "GitHubアカウントに接続する"
|
||||
github-reconnect: "再接続する"
|
||||
github-disconnect: "切断する"
|
||||
discord: "Discord連携"
|
||||
discord-connect: "Discordアカウントに接続する"
|
||||
discord-reconnect: "再接続する"
|
||||
discord-disconnect: "切断する"
|
||||
update: "Misskey Update"
|
||||
version: "バージョン:"
|
||||
latest-version: "Neuste Version:"
|
||||
@@ -1418,7 +1462,6 @@ mobile/views/pages/settings.vue:
|
||||
signout: "サインアウト"
|
||||
sound: "サウンド"
|
||||
enable-sounds: "サウンドを有効にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
password: "パスワード"
|
||||
mobile/views/pages/user.vue:
|
||||
follows-you: "フォローされています"
|
||||
@@ -1428,12 +1471,14 @@ mobile/views/pages/user.vue:
|
||||
overview: "概要"
|
||||
timeline: "タイムライン"
|
||||
media: "メディア"
|
||||
is-suspended: "このユーザーは凍結されています。"
|
||||
mute: "ミュート"
|
||||
unmute: "ミュート解除"
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "最近の投稿"
|
||||
images: "画像"
|
||||
@@ -1479,6 +1524,7 @@ deck/deck.user-column.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
images: "画像"
|
||||
activity: "アクティビティ"
|
||||
timeline: "タイムライン"
|
||||
|
||||
@@ -8,7 +8,7 @@ common:
|
||||
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."
|
||||
about: "Misskey is an open-source <b>decentralized microblogging service</b>. Sophisticated fully customizable UI, varieties of reactions for posts, free file storage providing an integrated management system and other advanced functions are available. In addition, Misskey connects to a network system called the “Fediverse” enables us to communicate with users on other SNSs. For example, when you post something it will be sent not only to Misskey but also Mastodon and Pleroma. Just imagine that the planet is sending a radio transmission to other planet to communicate."
|
||||
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!"
|
||||
@@ -18,7 +18,7 @@ common:
|
||||
ui-desc: "No UI fits for everyone. Therefore, Misskey has a highly customizable UI for your taste. Make your original home by editing, adjusting layouts of timeline and placing selectable widgets you can easily customize."
|
||||
drive: "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!"
|
||||
outro: "Check Misskey-unique features by seeing them with your own eyes! If you feel like this instance is not for you, try other instances, as Misskey is a decentralized SNS, so that you can easily find your mates. Then, GLHF!"
|
||||
adblock:
|
||||
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>."
|
||||
@@ -26,7 +26,7 @@ common:
|
||||
close: "Close"
|
||||
do-not-copy-paste: "Please do not enter or paste the code here. Account may be compromised."
|
||||
load-more: "Load more"
|
||||
enter-password: "パスワードを入力してください"
|
||||
enter-password: "Please enter the Password"
|
||||
got-it: "Got it!"
|
||||
customization-tips:
|
||||
title: "Customization tips"
|
||||
@@ -90,7 +90,6 @@ common:
|
||||
followers-desc: "Post to followers only"
|
||||
specified: "Direct"
|
||||
specified-desc: "Post to specified users only"
|
||||
private: "Private"
|
||||
local-public: "Public (Only local)"
|
||||
local-home: "Home (Only local)"
|
||||
local-followers: "Followers (Only local)"
|
||||
@@ -110,9 +109,10 @@ common:
|
||||
my-token-regenerated: "Your token has been regenerated, so you will be signed out."
|
||||
i-like-sushi: "I prefer sushi rather than pudding"
|
||||
show-reversi-board-labels: "Show row and column labels in Reversi"
|
||||
use-contrast-reversi-stones: "Make the stone color clear in reversi"
|
||||
use-avatar-reversi-stones: "Use avatar as a stone in reversi"
|
||||
verified-user: "Verified account"
|
||||
disable-animated-mfm: "Disable animated texts in a post"
|
||||
suggest-recent-hashtags: "Suggest recently used hashtags within the post composition area"
|
||||
always-show-nsfw: "Always show NSFW contents"
|
||||
always-mark-nsfw: "Always mark posts with media attachments as NSFW"
|
||||
show-full-acct: "Do not omit the hostname from the username"
|
||||
@@ -120,14 +120,15 @@ common:
|
||||
reduce-motion: "Reduce motion in UI"
|
||||
this-setting-is-this-device-only: "Only for this device"
|
||||
use-os-default-emojis: "Use the OS default Emojis"
|
||||
do-not-use-in-production: 'This is a development build. Do not use in production.'
|
||||
do-not-use-in-production: "This is a development build. Do not use in production."
|
||||
user-suspended: "This user has been suspended."
|
||||
is-remote-user: "This user information is copied."
|
||||
is-remote-post: "This post information is a copy."
|
||||
view-on-remote: "View it on remote"
|
||||
renoted-by: "Renoted by {user}"
|
||||
error:
|
||||
title: 'Something happened :('
|
||||
retry: 'Retry'
|
||||
title: "Something happened :("
|
||||
retry: "Retry"
|
||||
reversi:
|
||||
drawn: "Draw"
|
||||
my-turn: "Your turn"
|
||||
@@ -158,12 +159,12 @@ common:
|
||||
polls: "Polls"
|
||||
post-form: "Post form"
|
||||
server: "Server info"
|
||||
donation: "Request for donations"
|
||||
nav: "Navigation"
|
||||
tips: "Tips"
|
||||
hashtags: "Hashtags"
|
||||
dev: "Failed to create the application. Please try again."
|
||||
ai-chan-kawaii: "Ai-chan kawaii!"
|
||||
you: "You"
|
||||
auth/views/form.vue:
|
||||
share-access: "Would you allow <i>{name}</i> to access your account?"
|
||||
permission-ask: "This application requires the following permissions:"
|
||||
@@ -259,6 +260,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "NSFW"
|
||||
click-to-show: "Click to show"
|
||||
common/views/components/theme.vue:
|
||||
theme: "Theme"
|
||||
light-theme: "Theme"
|
||||
dark-theme: "Theme during dark mode"
|
||||
light-themes: "Light theme"
|
||||
@@ -275,6 +277,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "Base theme"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "Find more themes"
|
||||
theme-name: "Theme name"
|
||||
preview-created-theme: "Preview"
|
||||
invalid-theme: "Not valid theme"
|
||||
@@ -296,6 +299,9 @@ common/views/components/theme.vue:
|
||||
common/views/components/cw-button.vue:
|
||||
hide: "Hide"
|
||||
show: "See more"
|
||||
chars: "{count} chars"
|
||||
files: "{count} files"
|
||||
poll: "Poll"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "Find a user"
|
||||
you: "You"
|
||||
@@ -325,6 +331,7 @@ common/views/components/nav.vue:
|
||||
develop: "Developers"
|
||||
feedback: "Feedback"
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "Mention"
|
||||
detail: "Details"
|
||||
copy-link: "Copy link"
|
||||
favorite: "Favorite this note"
|
||||
@@ -332,7 +339,7 @@ common/views/components/note-menu.vue:
|
||||
pin: "Pin to your profile"
|
||||
unpin: "Unpin"
|
||||
delete: "Delete"
|
||||
delete-confirm: "Delete this post?"
|
||||
delete-confirm: "Are you sure you want to delete this post?"
|
||||
remote: "Show original note"
|
||||
common/views/components/poll.vue:
|
||||
vote-to: "Vote for '{}'"
|
||||
@@ -400,13 +407,18 @@ common/views/components/stream-indicator.vue:
|
||||
connecting: "Connecting"
|
||||
reconnecting: "Reconnecting"
|
||||
connected: "Connected"
|
||||
common/views/components/twitter-setting.vue:
|
||||
description: "Once you connect your Twitter account to your Misskey account, you will be able to see information about your Twitter account on your profile, and you will be able to sign-in using Twitter."
|
||||
connected-to: "You are connected to this Twitter account"
|
||||
detail: "Details..."
|
||||
reconnect: "Reconnect"
|
||||
connect: "Link your Twitter account"
|
||||
common/views/components/notification-settings.vue:
|
||||
title: "Notifications"
|
||||
mark-as-read-all-notifications: "Mark all notifications as read"
|
||||
mark-as-read-all-unread-notes: "Mark all posts as read"
|
||||
mark-as-read-all-talk-messages: "Mark all conversations as read"
|
||||
auto-watch: "Automatically watch out for posts"
|
||||
auto-watch-desc: "Automatically receive notifications about posts you react to, or respond to."
|
||||
common/views/components/integration-settings.vue:
|
||||
title: "Service cooperation"
|
||||
connect: "Connect"
|
||||
disconnect: "Disconnect"
|
||||
connected-to: "You are connected to next account"
|
||||
common/views/components/github-setting.vue:
|
||||
description: "Once you connect your GitHub account to your Misskey account, you will be able to see information about your GitHub account on your profile, and you will be able to sign-in via GitHub."
|
||||
connected-to: "You are connected to this GitHub account"
|
||||
@@ -415,7 +427,7 @@ common/views/components/github-setting.vue:
|
||||
connect: "Link your GitHub account"
|
||||
disconnect: "Disconnect"
|
||||
common/views/components/discord-setting.vue:
|
||||
description: "Once you connect your Discord account to your Misskey account, you will be able to see information about your Discord account on your profile, and you will be able to sign-in using Discord."
|
||||
description: "Once you connect your Discord account to your Misskey account, you will be able to see information from your Discord account on your profile, and you will be able to sign-in using Discord."
|
||||
connected-to: "You are connected to this Discord account"
|
||||
detail: "Details…"
|
||||
reconnect: "Reconnect"
|
||||
@@ -431,7 +443,6 @@ common/views/components/visibility-chooser.vue:
|
||||
followers-desc: "Post to Followers only"
|
||||
specified: "Direct"
|
||||
specified-desc: "Post to specified users only"
|
||||
private: "Private"
|
||||
local-public: "Local (Public)"
|
||||
local-public-desc: "Do not publish to remote"
|
||||
local-home: "Home (Only local)"
|
||||
@@ -439,12 +450,20 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{} users mentioned"
|
||||
empty: "No popular hashtag trends"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "Display Language"
|
||||
pick-language: "Select a language"
|
||||
recommended: "Recommended"
|
||||
auto: "Auto"
|
||||
specify-language: "Specify language"
|
||||
info: "You need to reload the page for the changes to take effect."
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "Profile"
|
||||
name: "Name"
|
||||
account: "Account"
|
||||
location: "Location"
|
||||
description: "About me"
|
||||
language: "Language"
|
||||
birthday: "Birthday"
|
||||
avatar: "Icon"
|
||||
banner: "Banner"
|
||||
@@ -452,6 +471,7 @@ common/views/components/profile-editor.vue:
|
||||
is-bot: "This account is a Bot"
|
||||
is-locked: "Follower requests require approval"
|
||||
careful-bot: "Follower requests from bots require approval"
|
||||
auto-accept-followed: "Automatically approve follows from the people you follow"
|
||||
advanced: "Other"
|
||||
privacy: "Privacy"
|
||||
save: "Save"
|
||||
@@ -462,6 +482,13 @@ common/views/components/profile-editor.vue:
|
||||
email-address: "Email Address"
|
||||
email-verified: "Your email has been verified."
|
||||
email-not-verified: "Email address is not confirmed. Please check your inbox."
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "User"
|
||||
rename: "Rename list"
|
||||
delete: "Delete list"
|
||||
remove-user: "Remove from this list"
|
||||
delete-are-you-sure: "Delete list \"$1\"?"
|
||||
deleted: "Deleted successfully"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "Checking"
|
||||
no-broadcasts: "No announcements"
|
||||
@@ -472,11 +499,8 @@ common/views/widgets/calendar.vue:
|
||||
month: "{},"
|
||||
day: "{}"
|
||||
today: "Today: "
|
||||
this-month: "This month: "
|
||||
this-year: "This year: "
|
||||
common/views/widgets/donation.vue:
|
||||
title: "Request for donations"
|
||||
text: "To keep Misskey up and running, there have to happen some expense for the domain name, the server and so on. Since our policy is not to display any advertisements, we count on your donations. If you're interested in helping, contact {}. Thank you for your contribution!"
|
||||
this-month: "Month:"
|
||||
this-year: "Year:"
|
||||
common/views/widgets/photo-stream.vue:
|
||||
title: "Photo stream"
|
||||
no-photos: "No photos"
|
||||
@@ -514,9 +538,11 @@ common/views/widgets/tips.vue:
|
||||
tips-line19: "Several windows can be detached outside the browser."
|
||||
tips-line20: "The percentage of the calendar widget shows the percentage of time elapsed."
|
||||
tips-line21: "You can also use the API to develop bots."
|
||||
tips-line23: "Mayu is so cute with its eyebrows."
|
||||
tips-line23: "Ai-chan kawaii!"
|
||||
tips-line24: "Misskey has been running since 2014."
|
||||
tips-line25: "In a browser compatible with notification features, you can receive notifications in case Misskey is not open"
|
||||
common/views/pages/not-found.vue:
|
||||
page-not-found: "The page has not been found"
|
||||
common/views/pages/follow.vue:
|
||||
signed-in-as: "Signed in as {}"
|
||||
following: "Following"
|
||||
@@ -652,10 +678,12 @@ desktop/views/components/note-detail.vue:
|
||||
location: "Location"
|
||||
renote: "Repost"
|
||||
add-reaction: "Add a reaction"
|
||||
undo-reaction: "Reverse reaction"
|
||||
desktop/views/components/note.vue:
|
||||
reply: "Reply"
|
||||
renote: "Renote"
|
||||
add-reaction: "Add a reaction"
|
||||
undo-reaction: "Reverse reaction"
|
||||
detail: "Details"
|
||||
private: "This post is private"
|
||||
deleted: "This post has been deleted"
|
||||
@@ -754,10 +782,13 @@ desktop/views/components/settings.vue:
|
||||
dark-mode: "Dark Mode"
|
||||
use-shadow: "Use shadows in the UI"
|
||||
rounded-corners: "Round corners of UI"
|
||||
line-width: "Line thickness"
|
||||
line-width-thin: "Thin"
|
||||
line-width-normal: "Regular"
|
||||
line-width-thick: "Thick"
|
||||
circle-icons: "Use circle icons"
|
||||
contrasted-acct: "Add contrast to username"
|
||||
post-form-on-timeline: "Display post form at the top of the timeline"
|
||||
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"
|
||||
timeline: "Timeline"
|
||||
@@ -769,24 +800,23 @@ desktop/views/components/settings.vue:
|
||||
deck-column-align: "Deck column alignment"
|
||||
deck-column-align-center: "Center"
|
||||
deck-column-align-left: "Left"
|
||||
deck-column-align-flexible: "Flexible"
|
||||
deck-column-width: "Column width of the deck"
|
||||
deck-column-width-narrow: "narrow"
|
||||
deck-column-width-narrower: "somewhat narrow"
|
||||
deck-column-width-normal: "Normal"
|
||||
deck-column-width-wider: "somewhat wide"
|
||||
deck-column-width-wide: "wide"
|
||||
sound: "Sound"
|
||||
enable-sounds: "Enable sound"
|
||||
enable-sounds-desc: "Play a sound when you receive a post/message. This setting is stored in the browser."
|
||||
volume: "Volume"
|
||||
test: "Test"
|
||||
language: "Language"
|
||||
pick-language: "Select a language"
|
||||
recommended: "Recommended"
|
||||
auto: "Automatic"
|
||||
specify-language: "Specify language"
|
||||
language-desc: "You need to reload the page for the changes to take effect."
|
||||
cache: "Cache"
|
||||
clean-cache: "Clear cache"
|
||||
cache-warn: "The cache of account info/posts/replies/messages/settings stored in the browser will be deleted. You need to reload the page after cleaning up."
|
||||
cache-cleared: "Cache cleared"
|
||||
cache-cleared-desc: "Please reload the page."
|
||||
auto-watch: "Automatic watch"
|
||||
auto-watch-desc: "Receive notifications about the post/reply/reaction automatically."
|
||||
about: "About Misskey"
|
||||
operator: "The admin of this instance"
|
||||
update: "Misskey Update"
|
||||
@@ -825,6 +855,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "Enter the password"
|
||||
authenticator: "First, you need to install Google Authenticator on your device:"
|
||||
howtoinstall: "How to install"
|
||||
token: "Token"
|
||||
scan: "And then, scan the QR code:"
|
||||
done: "Please enter the token displayed on your device:"
|
||||
submit: "Submit"
|
||||
@@ -839,13 +870,13 @@ common/views/components/api-settings.vue:
|
||||
token: "Token:"
|
||||
enter-password: "Enter the password"
|
||||
console:
|
||||
title: 'API console'
|
||||
endpoint: 'Endpoint'
|
||||
parameter: 'Parameters'
|
||||
title: "API console"
|
||||
endpoint: "Endpoint"
|
||||
parameter: "Parameters"
|
||||
credential-info: "Parameter \"i\" is not required at this console."
|
||||
send: 'Send'
|
||||
sending: 'Sending'
|
||||
response: 'Result'
|
||||
send: "Send"
|
||||
sending: "Sending"
|
||||
response: "Result"
|
||||
desktop/views/components/settings.apps.vue:
|
||||
no-apps: "No linked applications"
|
||||
common/views/components/drive-settings.vue:
|
||||
@@ -869,11 +900,17 @@ common/views/components/password-settings.vue:
|
||||
enter-new-password-again: "Enter the new password again"
|
||||
not-match: "The new passwords do not match"
|
||||
changed: "Password changed"
|
||||
failed: "Failed to change password"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "This post is private"
|
||||
deleted: "This post has been deleted"
|
||||
media-count: "{} media attached"
|
||||
poll: "Poll"
|
||||
desktop/views/components/settings.tags.vue:
|
||||
title: "Tags"
|
||||
query: "Query (optional)"
|
||||
add: "Add"
|
||||
save: "Save"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "Task Manager"
|
||||
desktop/views/components/timeline.vue:
|
||||
@@ -956,6 +993,7 @@ admin/views/instance.vue:
|
||||
instance-description: "Instance description"
|
||||
host: "Host"
|
||||
banner-url: "Banner image URL"
|
||||
error-image-url: "Error image URL"
|
||||
languages: "Language of this instance"
|
||||
languages-desc: "You can add more than one, separated by spaces."
|
||||
maintainer-config: "Administrator information"
|
||||
@@ -982,8 +1020,8 @@ admin/views/instance.vue:
|
||||
enable-github-integration: "Enable connection to GitHub"
|
||||
github-integration-client-id: "Client ID"
|
||||
github-integration-client-secret: "Client Secret"
|
||||
discord-integration-config: "Setting of Discord Integration"
|
||||
discord-integration-info: "The callback URL is set on {url}."
|
||||
discord-integration-config: "Discord Integration settings"
|
||||
discord-integration-info: "The callback URL is set to {url}."
|
||||
enable-discord-integration: "Enable Discord connection"
|
||||
discord-integration-client-id: "Client ID"
|
||||
discord-integration-client-secret: "Client Secret"
|
||||
@@ -999,7 +1037,7 @@ admin/views/instance.vue:
|
||||
save: "Save"
|
||||
saved: "Saved"
|
||||
user-recommendation-config: "Recommended users"
|
||||
enable-external-user-recommendation: "Enable to external user recommendation"
|
||||
enable-external-user-recommendation: "Enable external user recommendations"
|
||||
external-user-recommendation-engine: "Engine"
|
||||
external-user-recommendation-engine-desc: "Example : https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
||||
external-user-recommendation-timeout: "Timeout"
|
||||
@@ -1008,12 +1046,18 @@ admin/views/instance.vue:
|
||||
email-config-info: "Used to confirm email and password reset etc."
|
||||
enable-email: "Enable email delivery"
|
||||
email: "Email Address"
|
||||
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||
smtp-secure: "Use implicit SSL/TLS in the SMTP connection"
|
||||
smtp-secure-info: "Turn off STARTTLS when used that."
|
||||
smtp-host: "SMTP Host"
|
||||
smtp-port: "SMTP Port"
|
||||
smtp-user: "SMTP User"
|
||||
smtp-pass: "SMTP Password"
|
||||
serviceworker-config: "ServiceWorker"
|
||||
enable-serviceworker: "Enable ServiceWorker"
|
||||
serviceworker-info: "Must be enabled for push notifications."
|
||||
vapid-publickey: "VAPID public key"
|
||||
vapid-privatekey: "VAPID private key"
|
||||
vapid-info: "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 as root:"
|
||||
admin/views/charts.vue:
|
||||
title: "Chart"
|
||||
per-day: "per Day"
|
||||
@@ -1039,6 +1083,22 @@ admin/views/charts.vue:
|
||||
network-requests: "Requests"
|
||||
network-time: "Response time"
|
||||
network-usage: "Traffic"
|
||||
admin/views/drive.vue:
|
||||
sort:
|
||||
title: "Sort"
|
||||
createdAtAsc: "Age - Oldest First"
|
||||
createdAtDesc: "Age - Newest First"
|
||||
sizeAsc: "Size - Smallest First"
|
||||
sizeDesc: "Size - Largest First"
|
||||
origin:
|
||||
title: "Origin"
|
||||
combined: "Local + Remote"
|
||||
local: "Local"
|
||||
remote: "Remote"
|
||||
delete: "Delete"
|
||||
deleted: "Deleted successfully"
|
||||
mark-as-sensitive: "Mark as 'sensitive'"
|
||||
unmark-as-sensitive: "Unmark as 'sensitive'"
|
||||
admin/views/users.vue:
|
||||
operation: "Operations"
|
||||
username-or-userid: "Username or user ID"
|
||||
@@ -1170,6 +1230,7 @@ desktop/views/pages/user/user.header.vue:
|
||||
posts: "Notes"
|
||||
following: "Following"
|
||||
followers: "Followers"
|
||||
mention: "Mentions"
|
||||
is-bot: "This account is a Bot"
|
||||
years-old: "{age} years old"
|
||||
year: "/"
|
||||
@@ -1179,6 +1240,7 @@ desktop/views/pages/user/user.timeline.vue:
|
||||
default: "Posts"
|
||||
with-replies: "Posts and replies"
|
||||
with-media: "Media"
|
||||
my-posts: "My posts"
|
||||
empty: "This user doesn't seem to have posted anything yet."
|
||||
desktop/views/widgets/messaging.vue:
|
||||
title: "Message"
|
||||
@@ -1361,11 +1423,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "Choose files"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "Signed in as {}"
|
||||
lang: "Language"
|
||||
lang-tip: "You will need to reload the page for the changes to take effect."
|
||||
recommended: "Recommended"
|
||||
auto: "Auto"
|
||||
specify-language: "Select your language"
|
||||
design: "Design and display"
|
||||
dark-mode: "Dark Mode"
|
||||
i-am-under-limited-internet: "I'm in limited bandwidth"
|
||||
@@ -1382,7 +1439,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "Notification style"
|
||||
notification-position-bottom: "Bottom"
|
||||
notification-position-top: "Top"
|
||||
theme: "Theme"
|
||||
behavior: "Behavior"
|
||||
fetch-on-scroll: "Endless loading on scroll"
|
||||
note-visibility: "Post visibility"
|
||||
@@ -1393,18 +1449,6 @@ mobile/views/pages/settings.vue:
|
||||
disable-via-mobile: "Don't mark the post as 'from mobile'"
|
||||
load-raw-images: "Show attached images in original quality"
|
||||
load-remote-media: "Show media from a remote server"
|
||||
twitter: "Twitter integration"
|
||||
twitter-connect: "Connect to your Twitter account"
|
||||
twitter-reconnect: "Reconnect"
|
||||
twitter-disconnect: "Disconnect"
|
||||
github: "GitHub Integration"
|
||||
github-connect: "Connect to your GitHub account"
|
||||
github-reconnect: "Reconnect"
|
||||
github-disconnect: "Disconnect"
|
||||
discord: "Discord Integration"
|
||||
discord-connect: "Connect to your Discord account"
|
||||
discord-reconnect: "Reconnect"
|
||||
discord-disconnect: "Disconnect"
|
||||
update: "Misskey Update"
|
||||
version: "Current version:"
|
||||
latest-version: "Latest version:"
|
||||
@@ -1418,7 +1462,6 @@ mobile/views/pages/settings.vue:
|
||||
signout: "Sign out"
|
||||
sound: "Sounds"
|
||||
enable-sounds: "Enable sounds"
|
||||
mark-as-read-all-unread-notes: "Mark all posts as read"
|
||||
password: "Password"
|
||||
mobile/views/pages/user.vue:
|
||||
follows-you: "Follows you"
|
||||
@@ -1428,12 +1471,14 @@ mobile/views/pages/user.vue:
|
||||
overview: "Overview"
|
||||
timeline: "Timeline"
|
||||
media: "Media"
|
||||
is-suspended: "This account has been suspended."
|
||||
mute: "Mute"
|
||||
unmute: "Unmute"
|
||||
block: "Block"
|
||||
unblock: "Unblock"
|
||||
years-old: "{age} years old"
|
||||
push-to-list: "Add to list"
|
||||
select-list: "Select a list"
|
||||
list-pushed: "Successfully added {user} to {list}."
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "Recent notes"
|
||||
images: "Images"
|
||||
@@ -1479,13 +1524,14 @@ deck/deck.user-column.vue:
|
||||
posts: "Posts"
|
||||
following: "Following"
|
||||
followers: "Followers"
|
||||
mention: "Mentions"
|
||||
images: "Images"
|
||||
activity: "Activity"
|
||||
timeline: "Timeline"
|
||||
pinned-notes: "Pinned posts"
|
||||
push-to-a-list: "Add to list"
|
||||
docs:
|
||||
edit-this-page-on-github: "Found a mistake or want to contribute for the documentation?"
|
||||
edit-this-page-on-github: "Found an error, or do you want to contribute to the documentation?"
|
||||
edit-this-page-on-github-link: "Edit this page at GitHub!"
|
||||
api:
|
||||
entities:
|
||||
|
||||
@@ -90,7 +90,6 @@ common:
|
||||
followers-desc: "自分のフォロワーにのみ公開"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "指定したユーザーにのみ公開"
|
||||
private: "非公開"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
local-followers: "フォロワー (ローカルのみ)"
|
||||
@@ -110,9 +109,10 @@ common:
|
||||
my-token-regenerated: "Tu token se ha regenerado vas a ser desconectado."
|
||||
i-like-sushi: "Prefiero sushi a pudín"
|
||||
show-reversi-board-labels: "Mostrar etiquetas de filas y columnas en Reversi"
|
||||
use-contrast-reversi-stones: "Hacer el color de la piedra claro en Reversi"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "Cuenta verificada"
|
||||
disable-animated-mfm: "Desactivar texto animado en una publicación"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
always-show-nsfw: "常に閲覧注意のメディアを表示する"
|
||||
always-mark-nsfw: "常にメディアを閲覧注意として投稿"
|
||||
show-full-acct: "ユーザー名のホストを省略しない"
|
||||
@@ -120,14 +120,15 @@ common:
|
||||
reduce-motion: "UIの動きを減らす"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
use-os-default-emojis: "OS標準の絵文字を使用"
|
||||
do-not-use-in-production: 'Esto está en desarrollo, no usarlo para producción.'
|
||||
do-not-use-in-production: "Esto está en desarrollo, no usarlo para producción."
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
is-remote-post: "この投稿情報はコピーです。"
|
||||
view-on-remote: "正確な情報を見る"
|
||||
renoted-by: "{user}がRenote"
|
||||
error:
|
||||
title: '問題が発生しました'
|
||||
retry: 'やり直す'
|
||||
title: "問題が発生しました"
|
||||
retry: "やり直す"
|
||||
reversi:
|
||||
drawn: "Empatado"
|
||||
my-turn: "Mi turno"
|
||||
@@ -158,12 +159,12 @@ common:
|
||||
polls: "Encuestas"
|
||||
post-form: "Formulario"
|
||||
server: "Información del servidor"
|
||||
donation: "Donaciones"
|
||||
nav: "Navegación"
|
||||
tips: "Consejos"
|
||||
hashtags: "Etiquetas"
|
||||
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||
ai-chan-kawaii: "藍ちゃかわいい"
|
||||
you: "あなた"
|
||||
auth/views/form.vue:
|
||||
share-access: "<i>{name}</i>があなたのアカウントにアクセスすることを許可しますか?"
|
||||
permission-ask: "La aplicación requiere los siguientes permisos:"
|
||||
@@ -259,6 +260,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "閲覧注意"
|
||||
click-to-show: "クリックして表示"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "明るいテーマ"
|
||||
@@ -275,6 +277,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "ベーステーマ"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "テーマ名"
|
||||
preview-created-theme: "プレビュー"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
@@ -296,6 +299,9 @@ common/views/components/theme.vue:
|
||||
common/views/components/cw-button.vue:
|
||||
hide: "隠す"
|
||||
show: "もっと見る"
|
||||
chars: "{count}文字"
|
||||
files: "{count}ファイル"
|
||||
poll: "アンケート"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "Encuentra un usuario"
|
||||
you: "Tu"
|
||||
@@ -325,6 +331,7 @@ common/views/components/nav.vue:
|
||||
develop: "Desarrolladores"
|
||||
feedback: "Opiniones"
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "Detalles"
|
||||
copy-link: "Copiar enlace"
|
||||
favorite: "Me gusta esta nota"
|
||||
@@ -400,13 +407,18 @@ common/views/components/stream-indicator.vue:
|
||||
connecting: "Conectando"
|
||||
reconnecting: "Reconectando"
|
||||
connected: "Conectado"
|
||||
common/views/components/twitter-setting.vue:
|
||||
description: "Si comectas tu cuenta de Twitter con tu cuenta de Misskey podrás ver la información de tu cuemta de Twitter en tu perfil y además podrás entrar usando Twitter."
|
||||
connected-to: "Estas comectado con las siguientes cuentas de Twitter"
|
||||
detail: "Detalles..."
|
||||
reconnect: "Conectar de nuevo"
|
||||
connect: "Conectate usando Twitter"
|
||||
disconnect: "Desconectado"
|
||||
common/views/components/notification-settings.vue:
|
||||
title: "通知"
|
||||
mark-as-read-all-notifications: "すべての通知を既読にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
mark-as-read-all-talk-messages: "すべてのトークを既読にする"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
common/views/components/integration-settings.vue:
|
||||
title: "サービス連携"
|
||||
connect: "接続する"
|
||||
disconnect: "切断する"
|
||||
connected-to: "次のアカウントに接続されています"
|
||||
common/views/components/github-setting.vue:
|
||||
description: "お使いのGitHubアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでGitHubアカウント情報が表示されるようになったり、GitHubを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のGitHubアカウントに接続されています"
|
||||
@@ -431,7 +443,6 @@ common/views/components/visibility-chooser.vue:
|
||||
followers-desc: "Piblica solo para tus seguidores"
|
||||
specified: "Directo"
|
||||
specified-desc: "Publica solo para los seguidores que quieras"
|
||||
private: "Privada"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-public-desc: "リモートへは公開しない"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
@@ -439,12 +450,20 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
account: "アカウント"
|
||||
location: "場所"
|
||||
description: "自己紹介"
|
||||
language: "言語"
|
||||
birthday: "誕生日"
|
||||
avatar: "アイコン"
|
||||
banner: "バナー"
|
||||
@@ -452,6 +471,7 @@ common/views/components/profile-editor.vue:
|
||||
is-bot: "このアカウントはBotです"
|
||||
is-locked: "フォローを承認制にする"
|
||||
careful-bot: "Botからのフォローだけ承認制にする"
|
||||
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する"
|
||||
advanced: "その他"
|
||||
privacy: "プライバシー"
|
||||
save: "保存"
|
||||
@@ -462,6 +482,13 @@ common/views/components/profile-editor.vue:
|
||||
email-address: "メールアドレス"
|
||||
email-verified: "メールアドレスが確認されました"
|
||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "ユーザー"
|
||||
rename: "リスト名を変更"
|
||||
delete: "リストを削除"
|
||||
remove-user: "このリストから削除"
|
||||
delete-are-you-sure: "リスト「$1」を削除しますか?"
|
||||
deleted: "削除しました"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "Recuperando"
|
||||
no-broadcasts: "Sin emisión"
|
||||
@@ -474,9 +501,6 @@ common/views/widgets/calendar.vue:
|
||||
today: "Hoy:"
|
||||
this-month: "Este mes:"
|
||||
this-year: "Este año:"
|
||||
common/views/widgets/donation.vue:
|
||||
title: "Donaciones"
|
||||
text: "Para mantener Misskey funcionando tenemos que pagar por el dominio, los costos de hospedaje y otros costos. Como no recibimos dinero de publicidad, contamos con el apoyo de todos ustedes. Si estás interesado en ayudar, contacta a {}. ¡Muchas gracias por tu contribución!"
|
||||
common/views/widgets/photo-stream.vue:
|
||||
title: "Galería de fotos"
|
||||
no-photos: "No hay fotos."
|
||||
@@ -514,9 +538,11 @@ common/views/widgets/tips.vue:
|
||||
tips-line19: "Algunas ventanas pueden ser separadas fuera del navegador"
|
||||
tips-line20: "El porcentaje mostrando en el accesorio de calendario indica el porcentaje de tiempo transcurrido."
|
||||
tips-line21: "También puedes usar la API para desarrollar tus propios bots."
|
||||
tips-line23: "Mayu is tan bonito con sus cejas."
|
||||
tips-line23: "藍かわいいよ藍"
|
||||
tips-line24: "Misskey inició en 2014."
|
||||
tips-line25: "Puedes recibir notificaciones incluso si Misskey no está abierto en un navegador compatible."
|
||||
common/views/pages/not-found.vue:
|
||||
page-not-found: "ページが見つかりませんでした"
|
||||
common/views/pages/follow.vue:
|
||||
signed-in-as: "Autenticado como {}"
|
||||
following: "Siguiendo"
|
||||
@@ -652,10 +678,12 @@ desktop/views/components/note-detail.vue:
|
||||
location: "Localización"
|
||||
renote: "Republicar"
|
||||
add-reaction: "Agregar una reacción"
|
||||
undo-reaction: "リアクション解除"
|
||||
desktop/views/components/note.vue:
|
||||
reply: "返信"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
detail: "詳細"
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
@@ -754,10 +782,13 @@ desktop/views/components/settings.vue:
|
||||
dark-mode: "Modo Nocturno"
|
||||
use-shadow: "UIに影を使用"
|
||||
rounded-corners: "UIの角を丸める"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
circle-icons: "Usar iconos circulares"
|
||||
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||
post-form-on-timeline: "Mostrar el formulario de las entradas encima de la línea de tiempo"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
show-clock-on-header: "右上に時計を表示する"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
timeline: "タイムライン"
|
||||
@@ -766,27 +797,26 @@ desktop/views/components/settings.vue:
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "マップの自動展開"
|
||||
remain-deleted-note: "削除された投稿を表示し続ける"
|
||||
deck-column-align: "デッキのカラムの位置"
|
||||
deck-column-align: "デッキのカラムの配置"
|
||||
deck-column-align-center: "中央"
|
||||
deck-column-align-left: "左"
|
||||
deck-column-align-flexible: "フレキシブル"
|
||||
deck-column-width: "デッキのカラムの幅"
|
||||
deck-column-width-narrow: "狭"
|
||||
deck-column-width-narrower: "やや狭"
|
||||
deck-column-width-normal: "普通"
|
||||
deck-column-width-wider: "やや広"
|
||||
deck-column-width-wide: "広"
|
||||
sound: "サウンド"
|
||||
enable-sounds: "サウンドを有効にする"
|
||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||
volume: "ボリューム"
|
||||
test: "テスト"
|
||||
language: "言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||
cache-cleared: "キャッシュを削除しました"
|
||||
cache-cleared-desc: "ページを再度読み込みしてください。"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
about: "Misskeyについて"
|
||||
operator: "このサーバーの運営者"
|
||||
update: "Misskey Update"
|
||||
@@ -825,6 +855,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "Escribe una contraseña"
|
||||
authenticator: "Primero, necesitas instalar Google Authenticator en tu dispositivo:"
|
||||
howtoinstall: "Cómo instalar"
|
||||
token: "トークン"
|
||||
scan: "Luego, escanea el código QR:"
|
||||
done: "Por favor ingresa el token mostrado en tu dispositivo:"
|
||||
submit: "Enviar"
|
||||
@@ -839,13 +870,13 @@ common/views/components/api-settings.vue:
|
||||
token: "Token:"
|
||||
enter-password: "パスワードを入力してください"
|
||||
console:
|
||||
title: 'APIコンソール'
|
||||
endpoint: 'エンドポイント'
|
||||
parameter: 'パラメータ'
|
||||
title: "APIコンソール"
|
||||
endpoint: "エンドポイント"
|
||||
parameter: "パラメータ"
|
||||
credential-info: "「i」パラメータは自動で付与されます。"
|
||||
send: '送信'
|
||||
sending: '応答待ち'
|
||||
response: '結果'
|
||||
send: "送信"
|
||||
sending: "応答待ち"
|
||||
response: "結果"
|
||||
desktop/views/components/settings.apps.vue:
|
||||
no-apps: "No hay aplicaciones asociadas"
|
||||
common/views/components/drive-settings.vue:
|
||||
@@ -869,11 +900,17 @@ common/views/components/password-settings.vue:
|
||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||
not-match: "新しいパスワードが一致しません"
|
||||
changed: "パスワードを変更しました"
|
||||
failed: "パスワード変更に失敗しました"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
media-count: "{}つのメディア"
|
||||
poll: "アンケート"
|
||||
desktop/views/components/settings.tags.vue:
|
||||
title: "タグ"
|
||||
query: "クエリ (省略可)"
|
||||
add: "追加"
|
||||
save: "保存"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "タスクマネージャ"
|
||||
desktop/views/components/timeline.vue:
|
||||
@@ -956,6 +993,7 @@ admin/views/instance.vue:
|
||||
instance-description: "インスタンスの紹介"
|
||||
host: "ホスト"
|
||||
banner-url: "バナー画像URL"
|
||||
error-image-url: "エラー画像URL"
|
||||
languages: "インスタンスの対象言語"
|
||||
languages-desc: "スペースで区切って複数設定できます。"
|
||||
maintainer-config: "管理者情報"
|
||||
@@ -1014,6 +1052,12 @@ admin/views/instance.vue:
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
smtp-pass: "SMTPパスワード"
|
||||
serviceworker-config: "ServiceWorker"
|
||||
enable-serviceworker: "ServiceWorkerを有効にする"
|
||||
serviceworker-info: "プッシュ通知を行うには有効する必要があります。"
|
||||
vapid-publickey: "VAPID公開鍵"
|
||||
vapid-privatekey: "VAPID秘密鍵"
|
||||
vapid-info: "ServiceWorkerを有効にする場合、VAPIDキーペアを生成する必要があります。シェルで次のようにします:"
|
||||
admin/views/charts.vue:
|
||||
title: "チャート"
|
||||
per-day: "1日ごと"
|
||||
@@ -1039,6 +1083,22 @@ admin/views/charts.vue:
|
||||
network-requests: "リクエスト"
|
||||
network-time: "応答時間"
|
||||
network-usage: "通信量"
|
||||
admin/views/drive.vue:
|
||||
sort:
|
||||
title: "ソート"
|
||||
createdAtAsc: "アップロード日時が古い順"
|
||||
createdAtDesc: "アップロード日時が新しい順"
|
||||
sizeAsc: "サイズが小さい順"
|
||||
sizeDesc: "サイズが大きい順"
|
||||
origin:
|
||||
title: "オリジン"
|
||||
combined: "ローカル+リモート"
|
||||
local: "ローカル"
|
||||
remote: "リモート"
|
||||
delete: "削除"
|
||||
deleted: "削除しました"
|
||||
mark-as-sensitive: "閲覧注意に設定"
|
||||
unmark-as-sensitive: "閲覧注意を解除"
|
||||
admin/views/users.vue:
|
||||
operation: "操作"
|
||||
username-or-userid: "ユーザー名またはユーザーID"
|
||||
@@ -1170,6 +1230,7 @@ desktop/views/pages/user/user.header.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
is-bot: "このアカウントはBotです"
|
||||
years-old: "{age}歳"
|
||||
year: "年"
|
||||
@@ -1179,6 +1240,7 @@ desktop/views/pages/user/user.timeline.vue:
|
||||
default: "投稿"
|
||||
with-replies: "投稿と返信"
|
||||
with-media: "メディア"
|
||||
my-posts: "私の投稿"
|
||||
empty: "このユーザーはまだ何も投稿していないようです。"
|
||||
desktop/views/widgets/messaging.vue:
|
||||
title: "メッセージ"
|
||||
@@ -1361,11 +1423,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "ファイルを選択"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
lang: "言語"
|
||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
design: "デザインと表示"
|
||||
dark-mode: "ダークモード"
|
||||
i-am-under-limited-internet: "私は通信を制限されている"
|
||||
@@ -1382,7 +1439,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "下"
|
||||
notification-position-top: "上"
|
||||
theme: "テーマ"
|
||||
behavior: "動作"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
@@ -1393,18 +1449,6 @@ mobile/views/pages/settings.vue:
|
||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||
load-raw-images: "添付された画像を高画質で表示する"
|
||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||
twitter: "Twitter連携"
|
||||
twitter-connect: "Twitterアカウントに接続する"
|
||||
twitter-reconnect: "再接続する"
|
||||
twitter-disconnect: "切断する"
|
||||
github: "GitHub連携"
|
||||
github-connect: "GitHubアカウントに接続する"
|
||||
github-reconnect: "再接続する"
|
||||
github-disconnect: "切断する"
|
||||
discord: "Discord連携"
|
||||
discord-connect: "Discordアカウントに接続する"
|
||||
discord-reconnect: "再接続する"
|
||||
discord-disconnect: "切断する"
|
||||
update: "Misskey Update"
|
||||
version: "バージョン:"
|
||||
latest-version: "最新のバージョン:"
|
||||
@@ -1418,7 +1462,6 @@ mobile/views/pages/settings.vue:
|
||||
signout: "サインアウト"
|
||||
sound: "サウンド"
|
||||
enable-sounds: "サウンドを有効にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
password: "パスワード"
|
||||
mobile/views/pages/user.vue:
|
||||
follows-you: "フォローされています"
|
||||
@@ -1428,12 +1471,14 @@ mobile/views/pages/user.vue:
|
||||
overview: "概要"
|
||||
timeline: "タイムライン"
|
||||
media: "メディア"
|
||||
is-suspended: "このユーザーは凍結されています。"
|
||||
mute: "ミュート"
|
||||
unmute: "ミュート解除"
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "最近の投稿"
|
||||
images: "画像"
|
||||
@@ -1479,6 +1524,7 @@ deck/deck.user-column.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
images: "画像"
|
||||
activity: "アクティビティ"
|
||||
timeline: "タイムライン"
|
||||
|
||||
@@ -8,50 +8,50 @@ common:
|
||||
about: "Merci d’avoir choisis Misskey. Misskey est une <b>plateforme de microblogage distribuée</b> née sur Terre et fait partie du Fédiverse (un univers composé de diverses plateformes de réseaux sociaux organisées), elle est connectée mutuellement avec d’autres plateformes de réseaux sociaux. Désirez-vous prendre une pause, un court instant, loin de l’agitation de la ville et plonger dans un Internet d’un nouveau genre ?"
|
||||
intro:
|
||||
title: "C’est quoi Misskey ?"
|
||||
about: "Misskey est un <b>réseau social de Microblogage</b> open source. Il offre une interface utilisateur riche et hautement personnalisable, une variété de réactions aux publications et un lecteur pour la gestion centralisée de fichiers. De plus, comme il est possible de se connecter au reste du du Fédiverse, vous pouvez interagir avec d'autres plateformes fédérées. Par exemple, si vous publiez quelque chose, la note sera transmise non seulement aux utilisateurs de Misskey, mais aussi à d'autres plateformes de réseaux sociaux dans le Fédiverse. Imaginez que vous puissiez transmettre des ondes radio d'une planète vers l'autre."
|
||||
about: "Misskey est un <b>réseau social de Microblogage</b> open source. Il offre une interface utilisateur riche et hautement personnalisable, une variété de réactions aux publications et un lecteur pour la gestion centralisée de fichiers. De plus, comme il est possible de se connecter au reste du Fédiverse, vous pouvez interagir avec d'autres plateformes fédérées. Par exemple, si vous publiez quelque chose, la note sera transmise non seulement aux utilisateurs de Misskey, mais aussi à d'autres plateformes de réseaux sociaux dans le Fédiverse. Imaginez que vous puissiez transmettre des ondes radio d'une planète vers l'autre."
|
||||
features: "Options"
|
||||
rich-contents: "Notes"
|
||||
rich-contents-desc: "Partagez vos idées, les événements et les sujets qui vous tiennent à cœur ainsi que tout autre chose que vous souhaitez partager avec les autres. Si vous le désirez, vous pouvez décorer vos messages en utilisant une syntaxe différente ou en y joignant des sondages et des fichiers, tels que les photos ou les vidéos que vous aimez."
|
||||
reaction: "Réactions"
|
||||
reaction-desc: "Une manière simple d'exprimer vos émotions. Misskey peut attacher diverses réactions aux publications des autres utilisateurs. Si vous goûtez aux réactions sur Misskey une fois, vous ne pourrez plus être en mesure de retourner vers une autre plateforme de réseaux sociaux n'offrant que des \"J'aime\"."
|
||||
reaction-desc: "Une manière simple d'exprimer vos émotions. Misskey peut attacher diverses réactions aux publications des autres utilisateurs. Si vous essayez les réactions sur Misskey, vous ne pourrez plus retourner sur une autre plateforme de réseaux sociaux n'offrant que des « J'aime »."
|
||||
ui: "Interface utilisateur"
|
||||
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
|
||||
drive: "Drive"
|
||||
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
|
||||
outro: "Découvrez vous-même les fonctionnalités de Misskey. Étant donné que Misskey est un réseaux social fédéré, vous pouvez essayer d’autres instances afin de trouver vos ami·e·s si la présente instance ne vous correspond pas. Bonne chance et amusez-vous bien !"
|
||||
outro: "Découvrez vous-même les fonctionnalités de Misskey. Étant donné que Misskey est un réseau social fédéré, vous pouvez essayer d’autres instances afin de trouver vos amis si la présente instance ne vous correspond pas. Bonne chance et amusez-vous bien !"
|
||||
adblock:
|
||||
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é."
|
||||
application-authorization: "Autorisations de l’application"
|
||||
close: "Fermer"
|
||||
do-not-copy-paste: "Veuillez ne pas entrer ou coller le code ici. Le compte peut être compromis."
|
||||
do-not-copy-paste: "Veuillez ne pas entrer ou coller le code ici. Le compte pourrait être compromis."
|
||||
load-more: "Charger plus"
|
||||
enter-password: "パスワードを入力してください"
|
||||
enter-password: "Veuillez entrer le mot de passe"
|
||||
got-it: "J’ai compris !"
|
||||
customization-tips:
|
||||
title: "Conseils de personnalisation"
|
||||
paragraph: "<p>ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。</p><p>一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。</p><p>ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。</p><p>カスタマイズを終了するには、右上の「完了」をクリックします。</p>"
|
||||
gotit: "Compris !"
|
||||
notification:
|
||||
file-uploaded: "Le fichier a été transféré !"
|
||||
file-uploaded: "Le fichier a été téléversé !"
|
||||
message-from: "Message de {} :"
|
||||
reversi-invited: "Invité à jouer"
|
||||
reversi-invited-by: "Invité par {} :"
|
||||
notified-by: "Notifié par {} :"
|
||||
reply-from: "Réponse de {} :"
|
||||
quoted-by: "Cité·e par {} :"
|
||||
quoted-by: "Cité par {} :"
|
||||
time:
|
||||
unknown: "inconnu"
|
||||
future: "à 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 {} min"
|
||||
hours_ago: "Il y a {} h"
|
||||
days_ago: "Il y a {} jours"
|
||||
weeks_ago: "Il y a {} semaines·s"
|
||||
days_ago: "Il y a {} j"
|
||||
weeks_ago: "Il y a {} semaines"
|
||||
months_ago: "Il y a {} mois"
|
||||
years_ago: "Il y a {} an·s"
|
||||
month-and-day: "{day}/{month}"
|
||||
years_ago: "Il y a {} an(s)"
|
||||
month-and-day: "{day}-{month}"
|
||||
trash: "Corbeille"
|
||||
drive: "Drive"
|
||||
messaging: "Conversations"
|
||||
@@ -86,11 +86,10 @@ common:
|
||||
public: "Public"
|
||||
home: "Principal"
|
||||
home-desc: "Publier sur le fil principal uniquement"
|
||||
followers: "Abonné·e·s"
|
||||
followers-desc: "Publier à vos abonné·e·s uniquement"
|
||||
followers: "Abonnés"
|
||||
followers-desc: "Publier à vos abonnés uniquement"
|
||||
specified: "Direct"
|
||||
specified-desc: "Publier uniquement aux utilisateurs·rices mentionnés·es"
|
||||
private: "Privé"
|
||||
specified-desc: "Publier uniquement aux utilisateurs mentionnés"
|
||||
local-public: "Local (Public)"
|
||||
local-home: "Accueil (local uniquement)"
|
||||
local-followers: "Local (Abonnés)"
|
||||
@@ -110,9 +109,10 @@ common:
|
||||
my-token-regenerated: "Votre jeton vient d’être généré, vous allez maintenant être déconnecté."
|
||||
i-like-sushi: "Je préfère les sushis plutôt que le pudding"
|
||||
show-reversi-board-labels: "Afficher les étiquettes des lignes et colonnes dans Reversi"
|
||||
use-contrast-reversi-stones: "Icône avec contraste sur Reversi"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "Compte vérifié"
|
||||
disable-animated-mfm: "Désactiver les textes animés dans les publications"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
always-show-nsfw: "Toujours afficher les contenus sensibles"
|
||||
always-mark-nsfw: "Toujours marquer les notes ayant des attachements comme sensibles"
|
||||
show-full-acct: "Afficher l’adresse complète de l’utilisateur"
|
||||
@@ -120,14 +120,15 @@ common:
|
||||
reduce-motion: "Réduire les animations dans l’interface utilisateur"
|
||||
this-setting-is-this-device-only: "Uniquement sur cet appareil"
|
||||
use-os-default-emojis: "Utiliser les émojis standards du système"
|
||||
do-not-use-in-production: 'Il s’agit d’une version de développement. Ne pas utiliser dans un environnement de production.'
|
||||
is-remote-user: "Ces informations appartiennent à un·e utilisateur·rice distant·e."
|
||||
do-not-use-in-production: "Il s’agit d’une version de développement. Ne pas utiliser dans un environnement de production."
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "Ces informations appartiennent à un utilisateur distant."
|
||||
is-remote-post: "Ceci est une publication distante."
|
||||
view-on-remote: " Consulter le profil complet"
|
||||
renoted-by: "Renoté par {user}"
|
||||
error:
|
||||
title: 'Une erreur est survenue'
|
||||
retry: 'Réessayer'
|
||||
title: "Une erreur est survenue"
|
||||
retry: "Réessayer"
|
||||
reversi:
|
||||
drawn: "Partie nulle"
|
||||
my-turn: "C’est votre tour"
|
||||
@@ -149,21 +150,21 @@ common:
|
||||
memo: "Pense-bête"
|
||||
trends: "Tendances"
|
||||
photo-stream: "Flux de photos"
|
||||
posts-monitor: "Graph des publications"
|
||||
posts-monitor: "Graphe des publications"
|
||||
slideshow: "Diaporama"
|
||||
version: "Version"
|
||||
broadcast: "Diffusion"
|
||||
notifications: "Notifications"
|
||||
users: "Utilisateur·rice·s"
|
||||
users: "Utilisateurs recommandés"
|
||||
polls: "Sondages"
|
||||
post-form: "Champs de publication"
|
||||
server: "Info sur le serveur"
|
||||
donation: "Dons"
|
||||
server: "Infos sur le serveur"
|
||||
nav: "Navigation"
|
||||
tips: "Conseils"
|
||||
hashtags: "Hashtags"
|
||||
dev: "Échec lors de la création de l’application. Veuillez réessayer."
|
||||
ai-chan-kawaii: "Ai-Chan est mignonne !"
|
||||
you: "Vous"
|
||||
auth/views/form.vue:
|
||||
share-access: "Désirez-vous autoriser <i>{name}</i> à avoir accès à votre compte ?"
|
||||
permission-ask: "Cette application nécessite les autorisations suivantes :"
|
||||
@@ -200,16 +201,16 @@ common/views/components/games/reversi/reversi.game.vue:
|
||||
can-put-everywhere: "Peut poser partout"
|
||||
common/views/components/games/reversi/reversi.index.vue:
|
||||
title: "Misskey Reversi"
|
||||
sub-title: "Jouer à Reversi avec vos ami·e·s !"
|
||||
sub-title: "Jouer à Reversi avec vos amis !"
|
||||
invite: "Inviter"
|
||||
rule: "Comment jouer ?"
|
||||
rule-desc: "Reversi est un jeu qui se joue sur un tablier et dans lequel les joueurs placent des pions sur ce dernier, à tour de rôle avec l'adversaire. Le but du jeu est d'avoir plus de pions de sa couleur que l'adversaire à la fin de la partie, celle-ci s'achevant lorsque aucun des deux joueurs ne peut plus jouer de coup légal, généralement lorsque les 64 cases sont occupées."
|
||||
mode-invite: "Inviter"
|
||||
mode-invite-desc: "Inviter un·e joueur·se."
|
||||
mode-invite-desc: "Inviter un joueur."
|
||||
invitations: "Vous avez reçu une invitation !"
|
||||
my-games: "Mes jeux"
|
||||
all-games: "Tous les jeux"
|
||||
enter-username: "Saisir un nom d'utilisateur·rice"
|
||||
enter-username: "Saisir un nom d'utilisateur"
|
||||
game-state:
|
||||
ended: "Terminée"
|
||||
playing: "En cours"
|
||||
@@ -259,6 +260,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "Contenu sensible"
|
||||
click-to-show: "Cliquer pour afficher"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "Thème en mode jour"
|
||||
dark-theme: "Thème en mode nuit"
|
||||
light-themes: "Thème clair"
|
||||
@@ -275,6 +277,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "Thème de base"
|
||||
base-theme-light: "Clair"
|
||||
base-theme-dark: "Sombre"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "Nom du Thème"
|
||||
preview-created-theme: "Prévisualisation"
|
||||
invalid-theme: "Thème n’est pas valide."
|
||||
@@ -296,8 +299,11 @@ common/views/components/theme.vue:
|
||||
common/views/components/cw-button.vue:
|
||||
hide: "Masquer"
|
||||
show: "Voir plus"
|
||||
chars: "{count} caractères"
|
||||
files: "{count} fichiers"
|
||||
poll: "アンケート"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "Trouver un·e utilisateur·trice"
|
||||
search-user: "Trouver un utilisateur"
|
||||
you: "Vous"
|
||||
no-history: "Pas d'historique"
|
||||
common/views/components/messaging-room.vue:
|
||||
@@ -320,11 +326,12 @@ common/views/components/nav.vue:
|
||||
stats: "Statistiques"
|
||||
status: "Statut"
|
||||
wiki: "Wiki"
|
||||
donors: "Donateur·rice·s"
|
||||
donors: "Donateurs"
|
||||
repository: "Dépôt"
|
||||
develop: "Développeurs"
|
||||
feedback: "Suggestions"
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "Détails"
|
||||
copy-link: "Copier le lien"
|
||||
favorite: "Mettre cette note en favoris"
|
||||
@@ -337,7 +344,7 @@ common/views/components/note-menu.vue:
|
||||
common/views/components/poll.vue:
|
||||
vote-to: "Voter pour '{}'"
|
||||
vote-count: "{} votes"
|
||||
total-users: "{} utilisateur·rice·s ont voté·e·s"
|
||||
total-users: "{} utilisateurs ont voté"
|
||||
vote: "Vote"
|
||||
show-result: "Montrer les résultats"
|
||||
voted: "Voté"
|
||||
@@ -360,7 +367,7 @@ common/views/components/emoji-picker.vue:
|
||||
symbols: "Symboles"
|
||||
flags: "Drapeaux"
|
||||
common/views/components/signin.vue:
|
||||
username: "Nom d'utilisateur·rice"
|
||||
username: "Nom d'utilisateur"
|
||||
password: "Mot de passe"
|
||||
token: "Jeton"
|
||||
signing-in: "Connexion…"
|
||||
@@ -372,8 +379,8 @@ common/views/components/signin.vue:
|
||||
login-failed: "Échec d’authentification. Veuillez vérifier que votre nom d’utilisateur et mot de passe sont corrects."
|
||||
common/views/components/signup.vue:
|
||||
invitation-code: "Code d’invitation"
|
||||
invitation-info: "Si vous n’avez pas de code d’invitation, contactez un·e <a href=\"{}\">administrateur·rice</a>."
|
||||
username: "Nom d'utilisateur·rice"
|
||||
invitation-info: "Si vous n’avez pas de code d’invitation, contactez un <a href=\"{}\">administrateur</a>."
|
||||
username: "Nom d'utilisateur"
|
||||
checking: "Vérification…"
|
||||
available: "Disponible"
|
||||
unavailable: "Non disponible"
|
||||
@@ -400,13 +407,18 @@ common/views/components/stream-indicator.vue:
|
||||
connecting: "Connexion en cours"
|
||||
reconnecting: "Reconnexion en cours"
|
||||
connected: "Connecté"
|
||||
common/views/components/twitter-setting.vue:
|
||||
description: "Si vous liez votre compte Twitter à votre compte Misskey, vous verrez ensuite votre compte Twitter s'afficher sur votre profil, vous aurez aussi la possibilité de vous connecter à Misskey en utilisant votre compte Twitter."
|
||||
connected-to: "Vous êtes connecté à ce compte Twitter"
|
||||
detail: "Détails…"
|
||||
reconnect: "Reconnexion"
|
||||
connect: "Lier votre compte Twitter"
|
||||
disconnect: "Déconnexion"
|
||||
common/views/components/notification-settings.vue:
|
||||
title: "通知"
|
||||
mark-as-read-all-notifications: "すべての通知を既読にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
mark-as-read-all-talk-messages: "すべてのトークを既読にする"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
common/views/components/integration-settings.vue:
|
||||
title: "Intégrations"
|
||||
connect: "Connecter"
|
||||
disconnect: "Déconnecter"
|
||||
connected-to: "Vous êtes connectés aux services suivants"
|
||||
common/views/components/github-setting.vue:
|
||||
description: "Si vous liez votre compte GitHub à votre compte Misskey, vous verrez votre compte GitHub s’afficher sur votre profil, vous aurez également la possibilité de vous connecter à Misskey en utilisant ce dernier."
|
||||
connected-to: "Vous êtes connecté à votre compte GitHub"
|
||||
@@ -417,7 +429,7 @@ common/views/components/github-setting.vue:
|
||||
common/views/components/discord-setting.vue:
|
||||
description: "Si vous liez votre compte Discord à votre compte Misskey, vous serez en mesure de voir votre compte Twitter s'afficher sur votre profil, vous aurez aussi la possibilité de vous connecter à Misskey en utilisant votre compte Discord."
|
||||
connected-to: "Vous êtes connecté à votre compte Discord"
|
||||
detail: "Détails …"
|
||||
detail: "Détails…"
|
||||
reconnect: "Reconnecter"
|
||||
connect: "Lier votre compte Discord"
|
||||
disconnect: "Déconnecter"
|
||||
@@ -427,24 +439,31 @@ common/views/components/visibility-chooser.vue:
|
||||
public: "Public"
|
||||
home: "Accueil"
|
||||
home-desc: "Publier sur le fil d'Accueil uniquement"
|
||||
followers: "Abonné·e·s"
|
||||
followers-desc: "Publier à vos abonné·e·s uniquement"
|
||||
followers: "Abonnés"
|
||||
followers-desc: "Publier à vos abonnés uniquement"
|
||||
specified: "Direct"
|
||||
specified-desc: "Publier uniquement aux utilisateurs·rices mentionné·e·s"
|
||||
private: "Privé"
|
||||
specified-desc: "Publier uniquement aux utilisateurs mentionnés"
|
||||
local-public: "Local (Public)"
|
||||
local-public-desc: "Ne pas publier pour les distants"
|
||||
local-home: "Accueil (local uniquement)"
|
||||
local-followers: "Local (Abonnés)"
|
||||
common/views/components/trends.vue:
|
||||
count: "{} utilisateurs·rices mentionnés·es"
|
||||
count: "{} utilisateurs mentionnés"
|
||||
empty: "Aucune tendance"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "Langue "
|
||||
pick-language: "Sélectionner une langue"
|
||||
recommended: "Recommandé"
|
||||
auto: "Automatique"
|
||||
specify-language: "Spécifier la langue"
|
||||
info: "Le rechargement de la page est requis afin d'appliquer les modifications."
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "Profil"
|
||||
name: "Nom"
|
||||
account: "Compte"
|
||||
location: "Lieu"
|
||||
description: "À propos de moi"
|
||||
language: "Langue"
|
||||
birthday: "Date de naissance"
|
||||
avatar: "Avatar"
|
||||
banner: "Bannière"
|
||||
@@ -452,16 +471,24 @@ common/views/components/profile-editor.vue:
|
||||
is-bot: "Ce compte est un Bot"
|
||||
is-locked: "Demandes d’abonnements requièrent l’approbation"
|
||||
careful-bot: "Les demandes d’abonnements venant de Bots requièrent l’approbation"
|
||||
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する"
|
||||
advanced: "Avancé"
|
||||
privacy: "Vie privée"
|
||||
save: "Mettre à jour le profil"
|
||||
saved: "Profil mis à jour avec succès"
|
||||
uploading: "En cours d'envoi …"
|
||||
uploading: "En cours d'envoi…"
|
||||
upload-failed: "Échec de l'envoi"
|
||||
email: "メール設定"
|
||||
email-address: "メールアドレス"
|
||||
email-verified: "メールアドレスが確認されました"
|
||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
||||
email: "Paramètres de messagerie"
|
||||
email-address: "Adresse de courrier électronique"
|
||||
email-verified: "L’adresse du courrier électronique a été vérifiée."
|
||||
email-not-verified: "Adresse de courriel n’est pas confirmée. Veuillez vérifier votre boite de réception."
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "Utilisateur"
|
||||
rename: "Renommer la liste"
|
||||
delete: "Supprimer la liste"
|
||||
remove-user: "Retirer de cette liste"
|
||||
delete-are-you-sure: "Voulez-vous vraiment supprimer la liste « $1 » ?"
|
||||
deleted: "Supprimé"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "Récupération"
|
||||
no-broadcasts: "Aucune annonce"
|
||||
@@ -469,19 +496,16 @@ common/views/widgets/broadcast.vue:
|
||||
next: "Suivant"
|
||||
common/views/widgets/calendar.vue:
|
||||
year: "Année {}"
|
||||
month: "Mois {}"
|
||||
month: "{},"
|
||||
day: "{}"
|
||||
today: "Aujourd’hui :"
|
||||
this-month: "Ce mois-ci :"
|
||||
this-year: "Cette année :"
|
||||
common/views/widgets/donation.vue:
|
||||
title: "Faire un don"
|
||||
text: "Les frais pour faire fonctionner Misskey sortent directement de notre poche. Nous ne recevons pas d'argent issu de la publicité, si vous pouvez nous faire des dons, on vous serait éternellement reconnaissants. Si vous êtes intéressé·es veuillez contacter {}. Merci pour votre contribution !"
|
||||
common/views/widgets/photo-stream.vue:
|
||||
title: "Flux de photos"
|
||||
no-photos: "Pas de photo"
|
||||
common/views/widgets/posts-monitor.vue:
|
||||
title: "Graph des publications"
|
||||
title: "Graphe des publications"
|
||||
toggle: "Basculer entre les vues"
|
||||
common/views/widgets/hashtags.vue:
|
||||
title: "Hashtags"
|
||||
@@ -498,7 +522,7 @@ common/views/widgets/slideshow.vue:
|
||||
no-image: "Il n'y a aucune image dans ce dossier"
|
||||
common/views/widgets/tips.vue:
|
||||
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
|
||||
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
|
||||
tips-line2: "Ouvre la fenêtre de publication en appuyant sur <kbd>p</kbd> ou <kbd>n</kbd>."
|
||||
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-line5: "Vous pouvez téléverser des fichiers sur le Drive en faisant un glisser-déposer"
|
||||
@@ -509,28 +533,30 @@ common/views/widgets/tips.vue:
|
||||
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
|
||||
tips-line11: "Vous pouvez épingler des notes sur votre page en cliquant sur « … »"
|
||||
tips-line13: "Tous les fichiers attachés à cette publication sont sauvegardés dans le Drive"
|
||||
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
|
||||
tips-line14: "Lorsque vous personnalisez la disposition de votre page d’accueil, vous pouvez effectuer un clique droit sur un widget pour changer son apparence."
|
||||
tips-line17: "Vous pouvez mettre un texte en surbrillance en le mettant entre ** **"
|
||||
tips-line19: "Plusieurs fenêtres peuvent être détachées en dehors du navigateur."
|
||||
tips-line20: "Pourcentage sur le widget calendrier qui indique le pourcentage de temps passé"
|
||||
tips-line21: "Vous pouvez aussi utiliser l'API pour développer des Bots."
|
||||
tips-line23: "Mayu est mignonne avec ses sourcils."
|
||||
tips-line23: "藍かわいいよ藍"
|
||||
tips-line24: "Misskey est fonctionnel depuis 2014"
|
||||
tips-line25: "Vous pouvez recevoir les notifications de Misskey dans un navigateur web compatible"
|
||||
common/views/pages/not-found.vue:
|
||||
page-not-found: "ページが見つかりませんでした"
|
||||
common/views/pages/follow.vue:
|
||||
signed-in-as: "Connecté·e en tant que {}"
|
||||
signed-in-as: "Connecté en tant que {}"
|
||||
following: "Suit"
|
||||
follow: "Suivre"
|
||||
request-pending: "Demande d’abonnement en attente"
|
||||
follow-processing: "Demande en attente"
|
||||
follow-request: "Demande d’abonnement"
|
||||
desktop:
|
||||
banner-crop-title: "Découpez la partie qui apparaitra comme bannière"
|
||||
banner-crop-title: "Découpez la partie qui apparaîtra comme bannière"
|
||||
banner: "Bannière"
|
||||
uploading-banner: "Téléversement d'une nouvelle bannière"
|
||||
banner-updated: "Mise à jour de la bannière avec succès"
|
||||
choose-banner: "Choisir une bannière"
|
||||
avatar-crop-title: "Découpez la partie qui apparaitra comme avatar"
|
||||
avatar-crop-title: "Découpez la partie qui apparaîtra comme avatar"
|
||||
avatar: "Avatar"
|
||||
uploading-avatar: "Téléversement du nouvel avatar"
|
||||
avatar-updated: "Mise à jour de l’avatar avec succès"
|
||||
@@ -545,12 +571,12 @@ desktop/views/components/activity.vue:
|
||||
title: "Activité"
|
||||
toggle: "Afficher les vues"
|
||||
desktop/views/components/calendar.vue:
|
||||
title: "{month} / {year}"
|
||||
title: "{month} - {year}"
|
||||
prev: "Mois précédent"
|
||||
next: "Mois suivant"
|
||||
go: "Cliquez pour naviguer"
|
||||
desktop/views/components/choose-file-from-drive-window.vue:
|
||||
chosen-files: "{count} fichier·s sélectionné·s"
|
||||
chosen-files: "{count} fichier(s) sélectionné(s)"
|
||||
upload: "Téléverser des fichiers à partir de votre ordinateur"
|
||||
cancel: "Annuler"
|
||||
ok: "OK"
|
||||
@@ -598,21 +624,21 @@ desktop/views/components/drive.vue:
|
||||
search: "Rechercher"
|
||||
empty-draghover: "Drop Welcome!"
|
||||
empty-drive: "Votre Drive est vide"
|
||||
empty-drive-description: "Vous pouvez également uploader le fichier en faisant un clic droit et en choisissant 'Uploader' ou tout simplement en faisant glisser votre fichier."
|
||||
empty-drive-description: "Vous pouvez également téléverser le fichier en faisant un clic droit et en choisissant « Téléverser » ou tout simplement en faisant glisser votre fichier."
|
||||
empty-folder: "Ce dossier est vide"
|
||||
unable-to-process: "L'opération n'a pas pu être complétée"
|
||||
circular-reference-detected: "Le dossier de destination est un sous-dossier du dossier que vous souhaitez déplacer."
|
||||
unhandled-error: "Erreur inconnue"
|
||||
url-upload: "Téléverser via une URL"
|
||||
url-of-file: "URL de l'image que vous souhaitez uploader."
|
||||
url-upload-requested: "Upload requested"
|
||||
may-take-time: "L'upload de votre fichier peut prendre un certain temps."
|
||||
url-of-file: "URL de l'image que vous souhaitez téléverser."
|
||||
url-upload-requested: "Téléversement demandé"
|
||||
may-take-time: "Le téléversement de votre fichier peut prendre un certain temps."
|
||||
create-folder: "Créer un dossier"
|
||||
folder-name: "Nom du dossier"
|
||||
contextmenu:
|
||||
create-folder: "Créer un dossier"
|
||||
upload: "Transférer un fichier"
|
||||
url-upload: "Transférer à partir d’une URL"
|
||||
upload: "Téléverser un fichier"
|
||||
url-upload: "Téléverser à partir d’une URL"
|
||||
desktop/views/components/media-image.vue:
|
||||
sensitive: "Le contenu est NSFW"
|
||||
click-to-show: "Cliquer pour afficher"
|
||||
@@ -620,16 +646,16 @@ desktop/views/components/media-video.vue:
|
||||
sensitive: "Le contenu est NSFW"
|
||||
click-to-show: "Cliquer pour afficher"
|
||||
desktop/views/components/followers-window.vue:
|
||||
followers: "{} abonné·e·s"
|
||||
followers: "{} abonnés"
|
||||
desktop/views/components/followers.vue:
|
||||
empty: "Il semble que vous n’avez pas encore d’abonné·e·s."
|
||||
empty: "Il semble que vous n'avez pas encore d'abonnés."
|
||||
desktop/views/components/following-window.vue:
|
||||
following: "Suit {}"
|
||||
desktop/views/components/following.vue:
|
||||
empty: "Vous ne suivez aucun compte."
|
||||
desktop/views/components/friends-maker.vue:
|
||||
title: "Utilisateurs·rices recommandé·e·s :"
|
||||
empty: "Impossible de trouver des utilisateurs·trices à recommander."
|
||||
title: "Utilisateurs recommandés :"
|
||||
empty: "Impossible de trouver des utilisateurs à recommander."
|
||||
fetching: "Chargement"
|
||||
refresh: "Plus"
|
||||
close: "Fermer"
|
||||
@@ -652,10 +678,12 @@ desktop/views/components/note-detail.vue:
|
||||
location: "Géolocalisation"
|
||||
renote: "Republier"
|
||||
add-reaction: "Ajouter votre reaction"
|
||||
undo-reaction: "リアクション解除"
|
||||
desktop/views/components/note.vue:
|
||||
reply: "Répondre"
|
||||
renote: "Partager"
|
||||
add-reaction: "Ajouter votre réaction"
|
||||
undo-reaction: "リアクション解除"
|
||||
detail: "Détails"
|
||||
private: "Cette publication est privée"
|
||||
deleted: "Cette publication a été supprimée"
|
||||
@@ -668,8 +696,8 @@ desktop/views/components/post-form.vue:
|
||||
add-visible-user: "+Ajouter un utilisateur"
|
||||
attach-location-information: "Attacher des informations de localisation"
|
||||
hide-contents: "Masquer les contenus"
|
||||
reply-placeholder: "Répondre à cette note …"
|
||||
quote-placeholder: "Citer cette note …"
|
||||
reply-placeholder: "Répondre à cette note…"
|
||||
quote-placeholder: "Citer cette note…"
|
||||
submit: "Publier"
|
||||
reply: "Répondre"
|
||||
renote: "Republier"
|
||||
@@ -679,7 +707,7 @@ desktop/views/components/post-form.vue:
|
||||
note-failed: "La note à échoué"
|
||||
reply-failed: "La réponse a échoué"
|
||||
renote-failed: "Échec lors de la republication"
|
||||
posting: "Publication …"
|
||||
posting: "Publication…"
|
||||
attach-media-from-local: "Joindre un média depuis votre appareil"
|
||||
attach-media-from-drive: "Joindre un média depuis votre Drive"
|
||||
attach-cancel: "Annuler le fichier attaché"
|
||||
@@ -688,17 +716,17 @@ desktop/views/components/post-form.vue:
|
||||
text-remain: "{} caractères restants"
|
||||
recent-tags: "Récent"
|
||||
local-only-message: "Ce message sera publié uniquement sur le fil local"
|
||||
click-to-tagging: "Cliquer pour tagguer"
|
||||
click-to-tagging: "Cliquer pour taguer"
|
||||
visibility: "Visibilité"
|
||||
geolocation-alert: "Votre appareil ne prend pas en charge les services de localisation"
|
||||
error: "Erreur"
|
||||
enter-username: "Saisir un nom d'utilisateur …"
|
||||
enter-username: "Saisir un nom d'utilisateur…"
|
||||
annotations: "内容への注釈 (オプション)"
|
||||
desktop/views/components/post-form-window.vue:
|
||||
note: "Nouvelle note"
|
||||
reply: "Répondre"
|
||||
attaches: "{} media joint(s)"
|
||||
uploading-media: "Transfert du média {}"
|
||||
uploading-media: "Téléversement du média {}"
|
||||
desktop/views/components/progress-dialog.vue:
|
||||
waiting: "En attente"
|
||||
desktop/views/components/renote-form.vue:
|
||||
@@ -706,7 +734,7 @@ desktop/views/components/renote-form.vue:
|
||||
cancel: "Annuler"
|
||||
renote: "Republier"
|
||||
renote-home: "Renote (Home)"
|
||||
reposting: "Republication en cours …"
|
||||
reposting: "Republication en cours…"
|
||||
success: "Republié !"
|
||||
failure: "La renote a échoué"
|
||||
desktop/views/components/renote-form-window.vue:
|
||||
@@ -736,8 +764,8 @@ desktop/views/components/settings.vue:
|
||||
note-visibility: "Visibilité de la publication"
|
||||
default-note-visibility: "Visibilité par défaut"
|
||||
remember-note-visibility: "Se souvenir du mode de visibilité de la publication"
|
||||
web-search-engine: "ウェブ検索エンジン"
|
||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
||||
web-search-engine: "Moteur de recherche Web"
|
||||
web-search-engine-desc: "Exemple : https://www.google.com/?#q={{query}}"
|
||||
auto-popout: "Fenêtre contextuelle automatique"
|
||||
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
||||
advanced: "Paramètres avancés"
|
||||
@@ -754,10 +782,13 @@ desktop/views/components/settings.vue:
|
||||
dark-mode: "Mode nuit"
|
||||
use-shadow: "Utiliser les ombres dans l'interface utilisateur"
|
||||
rounded-corners: "Coins arrondis"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
circle-icons: "Utiliser des icônes circulaires"
|
||||
contrasted-acct: "Nom d’utilisateur contrasté"
|
||||
post-form-on-timeline: "Afficher le formulaire en haut du fil"
|
||||
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"
|
||||
timeline: "Chronologie"
|
||||
@@ -769,30 +800,29 @@ desktop/views/components/settings.vue:
|
||||
deck-column-align: "Alignement des colonnes du Deck"
|
||||
deck-column-align-center: "Centrer"
|
||||
deck-column-align-left: "À gauche"
|
||||
deck-column-align-flexible: "Flexibles"
|
||||
deck-column-width: "Largeur des colonnes du Deck"
|
||||
deck-column-width-narrow: "Étroite"
|
||||
deck-column-width-narrower: "Légèrement étroite"
|
||||
deck-column-width-normal: "Normale"
|
||||
deck-column-width-wider: "Légèrement large"
|
||||
deck-column-width-wide: "Large"
|
||||
sound: "Son"
|
||||
enable-sounds: "Activer le son"
|
||||
enable-sounds-desc: "Jouer un son lorsque vous recevez un message. Ce paramètre est sauvegardé dans le navigateur."
|
||||
volume: "Volume"
|
||||
test: "Test"
|
||||
language: "Langue"
|
||||
pick-language: "Sélectionner une langue"
|
||||
recommended: "Recommandé"
|
||||
auto: "Automatique"
|
||||
specify-language: "Spécifier la langue"
|
||||
language-desc: "Le rechargement de la page est requis afin d'appliquer les modifications."
|
||||
cache: "Cache"
|
||||
clean-cache: "Nettoyage"
|
||||
cache-warn: "Le nettoyage du cache du compte supprime les informations stockées dans le navigateur comme les messages, les réponses ainsi que d’autres données (y compris les paramètres de configuration). Après le nettoyage, vous devez recharger la page."
|
||||
cache-cleared: "Cache nettoyé"
|
||||
cache-cleared-desc: "Veuillez recharger la page."
|
||||
auto-watch: "Montre automatique"
|
||||
auto-watch-desc: "Recevez automatiquement les notifications de publications, réponses et réactions."
|
||||
about: "À propose de Misskey"
|
||||
operator: "L'admin de cette instance"
|
||||
update: "Mise à jour de Misskey"
|
||||
version: "Version :"
|
||||
latest-version: "Dernière version :"
|
||||
update-checking: "Vérification des mises à jour en cours …"
|
||||
update-checking: "Vérification des mises à jour en cours…"
|
||||
do-update: "Rechercher des mises à jour"
|
||||
update-settings: "Paramètres avancés"
|
||||
prevent-update: "Reporter les mises à jour (non recommandé)"
|
||||
@@ -802,7 +832,7 @@ desktop/views/components/settings.vue:
|
||||
update-available: "Nouvelle version disponible !"
|
||||
update-available-desc: "Les mises à jour seront appliquées une fois la page est rechargée."
|
||||
advanced-settings: "Réglages avancés"
|
||||
debug-mode: "Activer le mode debug"
|
||||
debug-mode: "Activer le mode débogage"
|
||||
debug-mode-desc: "Ce paramètre est stocké dans le navigateur."
|
||||
experimental: "Activer les fonctionnalités expérimentales"
|
||||
experimental-desc: "L’activation des fonctionnalités expérimentales peuvent rendre le client Misskey instable. Ce paramètre est stocké dans le navigateur."
|
||||
@@ -825,27 +855,28 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "Entrez un mot de passe"
|
||||
authenticator: "Vous devez au préalable installer Google Authenticator sur votre appareil :"
|
||||
howtoinstall: "Comment installer"
|
||||
scan: "Ensuite scannez le QR code afficher sur votre écran:"
|
||||
done: "Veuillez entrer le token qui s'affiche sur votre appareil:"
|
||||
token: "トークン"
|
||||
scan: "Ensuite, scannez le code QR affiché sur votre écran :"
|
||||
done: "Veuillez entrer le token qui s'affiche sur votre appareil :"
|
||||
submit: "Envoyer"
|
||||
success: "Sauvegarde des paramètres avec succès !"
|
||||
failed: "L’opération a échoué. Veuillez vous assurer que le jeton a été saisi correctement."
|
||||
info: "À partir de maintenant, à chaque fois que vous vous connectez entrez votre mot de passe ainsi que le jeton généré sur votre appareil."
|
||||
common/views/components/api-settings.vue:
|
||||
intro: "Pour accéder à l'API, définissez ce jeton comme la clé de \"i\" dans les paramètres de requête."
|
||||
intro: "Pour accéder à l'API, définissez ce jeton comme la clé de « i » dans les paramètres de requête."
|
||||
caution: "Merci de ne pas introduire ce jeton dans aucune application ou le divulguer à quiconque. Ceci risque de compromettre votre compte."
|
||||
regeneration-of-token: "Si votre jeton est compromis, vous pouvez le régénérer."
|
||||
regenerate-token: "Régénérer le jeton"
|
||||
token: "Jeton :"
|
||||
enter-password: "Entrez le mot de passe"
|
||||
console:
|
||||
title: 'Console API'
|
||||
endpoint: 'Point de terminaison'
|
||||
parameter: 'Paramètres'
|
||||
credential-info: "Le paramètre \"i\" est requis dans la console."
|
||||
send: 'Envoyer'
|
||||
sending: 'Envoi en cours'
|
||||
response: 'Résultat'
|
||||
title: "Console API"
|
||||
endpoint: "Point de terminaison"
|
||||
parameter: "Paramètres"
|
||||
credential-info: "Le paramètre « i » est requis dans la console."
|
||||
send: "Envoyer"
|
||||
sending: "Envoi en cours"
|
||||
response: "Résultat"
|
||||
desktop/views/components/settings.apps.vue:
|
||||
no-apps: "Aucune application autorisée"
|
||||
common/views/components/drive-settings.vue:
|
||||
@@ -856,8 +887,8 @@ common/views/components/mute-and-block.vue:
|
||||
mute-and-block: "Silencés / Bloqués"
|
||||
mute: "Mettre en sourdine"
|
||||
block: "En cours blocage"
|
||||
no-muted-users: "Aucun utilisateur·rice n’est mis·e en sourdine"
|
||||
no-blocked-users: "Aucun utilisateur·rice n’est bloqué·e"
|
||||
no-muted-users: "Aucun utilisateur n’est mis en sourdine"
|
||||
no-blocked-users: "Aucun utilisateur n’est bloqué"
|
||||
word-mute: "Filtre de mots"
|
||||
muted-words: "Mots masqués"
|
||||
muted-words-description: "Description des mots mis en sourdine"
|
||||
@@ -869,11 +900,17 @@ common/views/components/password-settings.vue:
|
||||
enter-new-password-again: "Entrez à nouveau le nouveau mot de passe"
|
||||
not-match: "Les nouveaux mots de passe ne sont pas identiques"
|
||||
changed: "Mot de passe modifié avec succès"
|
||||
failed: "Échec lors de la modification du mot de passe"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "cette publication est privée"
|
||||
deleted: "cette publication a été supprimée"
|
||||
media-count: "{} médias attachés"
|
||||
poll: "Sondage"
|
||||
desktop/views/components/settings.tags.vue:
|
||||
title: "Étiquettes"
|
||||
query: "Requête (optionnelle)"
|
||||
add: "Ajouter"
|
||||
save: "Enregistrer"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "Gestionnaire de tâches"
|
||||
desktop/views/components/timeline.vue:
|
||||
@@ -922,11 +959,11 @@ desktop/views/components/user-lists-window.vue:
|
||||
desktop/views/components/user-preview.vue:
|
||||
notes: "Publications"
|
||||
following: "Abonné à"
|
||||
followers: "Abonné·e·s"
|
||||
followers: "Abonnés"
|
||||
desktop/views/components/users-list.vue:
|
||||
all: "Tout"
|
||||
iknow: "Vous connaissez"
|
||||
fetching: "Chargement ..."
|
||||
fetching: "Chargement..."
|
||||
desktop/views/components/users-list-item.vue:
|
||||
followed: "vous suit"
|
||||
desktop/views/components/window.vue:
|
||||
@@ -937,7 +974,7 @@ admin/views/index.vue:
|
||||
instance: "Instance"
|
||||
emoji: "Émoji"
|
||||
moderators: "Modérateurs"
|
||||
users: "Utilisateur·rice·s"
|
||||
users: "Utilisateurs"
|
||||
federation: "Fédération"
|
||||
announcements: "Annonces"
|
||||
hashtags: "Hashtags"
|
||||
@@ -955,7 +992,8 @@ admin/views/instance.vue:
|
||||
instance-name: "Nom de l’instance"
|
||||
instance-description: "Description de l’instance"
|
||||
host: "Hôte"
|
||||
banner-url: "Url de l’image de la bannière"
|
||||
banner-url: "URL de l’image de la bannière"
|
||||
error-image-url: "URL de l’image d’erreur"
|
||||
languages: "Langue de l’instance"
|
||||
languages-desc: "Vous pouvez en définir plus d’une, séparées par des espaces."
|
||||
maintainer-config: "Informations de l’administrateur"
|
||||
@@ -973,17 +1011,17 @@ admin/views/instance.vue:
|
||||
recaptcha-site-key: "Clé reCAPTCHA du site"
|
||||
recaptcha-secret-key: "Clé secrète reCAPTCHA"
|
||||
twitter-integration-config: "Paramètres de connexion à Twitter"
|
||||
twitter-integration-info: "コールバックURLは {url} に設定します。"
|
||||
enable-twitter-integration: "Activer la connection à Twitter"
|
||||
twitter-integration-info: "L'URL de callback est {url}."
|
||||
enable-twitter-integration: "Activer la connexion à Twitter"
|
||||
twitter-integration-consumer-key: "Clé du consommateur"
|
||||
twitter-integration-consumer-secret: "Secret du consommateur"
|
||||
github-integration-config: "Paramètres d’authentification GitHub"
|
||||
github-integration-info: "コールバックURLは {url} に設定します。"
|
||||
github-integration-info: "L'URL de callback est {url}."
|
||||
enable-github-integration: "Activer l’authentification avec Github"
|
||||
github-integration-client-id: "ID client"
|
||||
github-integration-client-secret: "Secret client"
|
||||
discord-integration-config: "Paramètres d’authentification Discord"
|
||||
discord-integration-info: "コールバックURLは {url} に設定します。"
|
||||
discord-integration-info: "L'URL de callback est {url}."
|
||||
enable-discord-integration: "Activer l’authentification avec Discord"
|
||||
discord-integration-client-id: "ID client"
|
||||
discord-integration-client-secret: "Secret client"
|
||||
@@ -998,29 +1036,35 @@ admin/views/instance.vue:
|
||||
invite: "Inviter"
|
||||
save: "Sauvegarder"
|
||||
saved: "Enregistré"
|
||||
user-recommendation-config: "Utilisateur·rice·s"
|
||||
enable-external-user-recommendation: "Activer la recommandation des utilisateur·trice·s distant·e·s"
|
||||
user-recommendation-config: "Utilisateurs"
|
||||
enable-external-user-recommendation: "Activer la recommandation des utilisateurs distants"
|
||||
external-user-recommendation-engine: "Moteur"
|
||||
external-user-recommendation-engine-desc: "Exemple : https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
||||
external-user-recommendation-timeout: "Délai d’expiration"
|
||||
external-user-recommendation-timeout-desc: "En millisecondes (par exemple : 300000)"
|
||||
email-config: "メールサーバーの設定"
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
email: "メールアドレス"
|
||||
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||
smtp-host: "SMTPホスト"
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
smtp-pass: "SMTPパスワード"
|
||||
email-config: "Paramètres du serveur de messagerie"
|
||||
email-config-info: "Utilisé pour confirmer votre adresse de courrier électronique et la réinitialisation de votre mot de passe."
|
||||
enable-email: "Activation de la distribution du courrier"
|
||||
email: "Adresse de courrier électronique"
|
||||
smtp-secure: "Utiliser SSL/TLS implicitement dans la connexion SMTP"
|
||||
smtp-secure-info: "Désactiver STARTTLS lorsque celui-ci est utilisé."
|
||||
smtp-host: "Hôte SMTP"
|
||||
smtp-port: "Port SMTP"
|
||||
smtp-user: "Utilisateur SMTP"
|
||||
smtp-pass: "Mot de passe SMTP"
|
||||
serviceworker-config: "ServiceWorker"
|
||||
enable-serviceworker: "Activer ServiceWorker"
|
||||
serviceworker-info: "Devrait être activé pour les notifications push."
|
||||
vapid-publickey: "Clé Publique VAPID"
|
||||
vapid-privatekey: "Clé privée VAPID"
|
||||
vapid-info: "ServiceWorkerを有効にする場合、VAPIDキーペアを生成する必要があります。シェルで次のようにします:"
|
||||
admin/views/charts.vue:
|
||||
title: "Graph"
|
||||
title: "Graphe"
|
||||
per-day: "par jour"
|
||||
per-hour: "par heure"
|
||||
federation: "Fédération"
|
||||
notes: "Publications"
|
||||
users: "Utilisateur·rice·s"
|
||||
users: "Utilisateurs"
|
||||
drive: "Lecteur"
|
||||
network: "Réseau"
|
||||
charts:
|
||||
@@ -1030,8 +1074,8 @@ admin/views/charts.vue:
|
||||
local-notes: "Nombre des publications : augmentation/diminution (Local)"
|
||||
remote-notes: "Nombre de publications : augmentation/diminution (distants)"
|
||||
notes-total: "Total des publications"
|
||||
users: "Nombre d’utilisateur·rice·s : augmentation/diminution"
|
||||
users-total: "Nombre total des utilisateur·rice·s"
|
||||
users: "Nombre d’utilisateurs : augmentation/diminution"
|
||||
users-total: "Nombre total des utilisateurs"
|
||||
drive: "Capacité utilisée comme stockage : augmentation/diminution"
|
||||
drive-total: "Utilisation totale du lecteur"
|
||||
drive-files: "Le nombre de fichiers sur l'espace de stockage : augmentation/diminution"
|
||||
@@ -1039,29 +1083,45 @@ admin/views/charts.vue:
|
||||
network-requests: "Requêtes"
|
||||
network-time: "Temps de réponse"
|
||||
network-usage: "Traffic"
|
||||
admin/views/drive.vue:
|
||||
sort:
|
||||
title: "Tri"
|
||||
createdAtAsc: "Âge - Du plus ancien"
|
||||
createdAtDesc: "Âge - Du plus récent"
|
||||
sizeAsc: "Taille - Ascendant"
|
||||
sizeDesc: "Taille - Volumineux en premier"
|
||||
origin:
|
||||
title: "Origine"
|
||||
combined: "Locaux et distants combinés"
|
||||
local: "Local"
|
||||
remote: "Distant"
|
||||
delete: "Supprimer"
|
||||
deleted: "Supprimé"
|
||||
mark-as-sensitive: "Marquer comme sensible"
|
||||
unmark-as-sensitive: "Ne pas marquer comme sensible"
|
||||
admin/views/users.vue:
|
||||
operation: "Actions"
|
||||
username-or-userid: "Nom d’utilisateur·rice ou ID utilisateur"
|
||||
user-not-found: "Utilisateur·rice non trouvé·e"
|
||||
user-not-found: "Utilisateur non trouvé"
|
||||
lookup: "Recherche"
|
||||
reset-password: "Réinitialiser mot de passe"
|
||||
password-updated: "Le mot de passe est « {password} »"
|
||||
suspend: "Suspendre"
|
||||
suspended: "Suspendu·e avec succès."
|
||||
suspended: "Suspendu avec succès."
|
||||
unsuspend: "Suspension levée"
|
||||
unsuspended: "La suspension de l’utilisateur·rice a été levée avec succès"
|
||||
unsuspended: "La suspension de l’utilisateur a été levée avec succès"
|
||||
verify: "Vérification du compte"
|
||||
verified: "Le compte a été vérifié"
|
||||
unverify: "Ôter la vérification du compte"
|
||||
unverify: "Enlever la vérification du compte"
|
||||
unverified: "Ce compte n'est plus vérifié"
|
||||
users:
|
||||
title: "Utilisateur·rice·s"
|
||||
title: "Utilisateurs"
|
||||
sort:
|
||||
title: "Trier par"
|
||||
createdAtAsc: "Date d’inscription (Ascendant)"
|
||||
createdAtDesc: "Date d’inscription (Descendant)"
|
||||
updatedAtAsc: "Mis à jour récemment (Ascendant)"
|
||||
updatedAtDesc: "更新日時が新しい順"
|
||||
updatedAtDesc: "Mis à jour récemment (descendant)"
|
||||
origin:
|
||||
title: "Origine"
|
||||
combined: "Locaux + distants"
|
||||
@@ -1138,11 +1198,11 @@ desktop/views/pages/share.vue:
|
||||
desktop/views/pages/tag.vue:
|
||||
no-posts-found: "Aucune publication contenant « {q} » n’a été trouvée."
|
||||
desktop/views/pages/user-list.users.vue:
|
||||
users: "Utilisateurs·rices"
|
||||
users: "Utilisateurs"
|
||||
add-user: "Ajouter un utilisateur"
|
||||
username: "Nom d'utilisateur"
|
||||
desktop/views/pages/user/user.followers-you-know.vue:
|
||||
title: "Abonné·e·s que vous connaissez"
|
||||
title: "Abonnés que vous connaissez"
|
||||
loading: "Chargement en cours"
|
||||
no-users: "Aucun abonné connu"
|
||||
desktop/views/pages/user/user.friends.vue:
|
||||
@@ -1169,16 +1229,18 @@ desktop/views/pages/user/user.profile.vue:
|
||||
desktop/views/pages/user/user.header.vue:
|
||||
posts: "Notes"
|
||||
following: "Suit"
|
||||
followers: "Abonné·e·s"
|
||||
followers: "Abonnés"
|
||||
mention: "メンション"
|
||||
is-bot: "Ce compte est un Bot"
|
||||
years-old: "{age} ans"
|
||||
year: "/"
|
||||
month: "/"
|
||||
day: "/"
|
||||
day: "-"
|
||||
desktop/views/pages/user/user.timeline.vue:
|
||||
default: "Publications"
|
||||
with-replies: "Publications et réponses"
|
||||
with-media: "Média"
|
||||
my-posts: "Mes Messages"
|
||||
empty: "Cet utilisateur n'a rien posté encore."
|
||||
desktop/views/widgets/messaging.vue:
|
||||
title: "Messagerie"
|
||||
@@ -1200,7 +1262,7 @@ desktop/views/widgets/trends.vue:
|
||||
refresh: "Afficher d'autres"
|
||||
nothing: "Rien"
|
||||
desktop/views/widgets/users.vue:
|
||||
title: "Utilisateurs·rices"
|
||||
title: "Utilisateurs"
|
||||
refresh: "Afficher d'autres"
|
||||
no-one: "Personne"
|
||||
mobile/views/components/drive.vue:
|
||||
@@ -1239,14 +1301,14 @@ mobile/views/components/media-video.vue:
|
||||
sensitive: "Le contenu est NSFW"
|
||||
click-to-show: "Cliquer pour afficher"
|
||||
common/views/components/follow-button.vue:
|
||||
following: "Abonné·e"
|
||||
following: "Abonné"
|
||||
follow: " Suivre"
|
||||
request-pending: "Demande en attente"
|
||||
follow-processing: "En cours d’abonnement"
|
||||
follow-request: "Demande d’abonnement"
|
||||
mobile/views/components/friends-maker.vue:
|
||||
title: "Abonnez-vous à"
|
||||
empty: "Impossible de trouver des utilisateurs·trices à recommander."
|
||||
empty: "Impossible de trouver des utilisateurs à recommander."
|
||||
fetching: "Chargement"
|
||||
refresh: "Voir plus"
|
||||
close: "Fermer"
|
||||
@@ -1275,7 +1337,7 @@ mobile/views/components/post-form.vue:
|
||||
submit: "Publier"
|
||||
reply: "Répondre"
|
||||
renote: "Republier"
|
||||
quote-placeholder: "Citer ce billet ... (Facultatif)"
|
||||
quote-placeholder: "Citer ce billet... (Facultatif)"
|
||||
reply-placeholder: "Répondre à cette note"
|
||||
cw-placeholder: "Commenter le contenu (optionnel)"
|
||||
location-alert: "Votre appareil ne prend pas en charge les services de localisation"
|
||||
@@ -1305,7 +1367,7 @@ mobile/views/components/ui.nav.vue:
|
||||
admin: "Admin"
|
||||
about: "À propos de Misskey"
|
||||
mobile/views/components/user-timeline.vue:
|
||||
no-notes: "Il semble que cet·te utilisateur·rice n’a rien publié pour le moment."
|
||||
no-notes: "Il semble que cet utilisateur n’a rien publié pour le moment."
|
||||
no-notes-with-media: "Aucune notes avec des médias"
|
||||
mobile/views/components/users-list.vue:
|
||||
all: "Tout"
|
||||
@@ -1318,9 +1380,9 @@ mobile/views/pages/user-lists.vue:
|
||||
mobile/views/pages/signup.vue:
|
||||
lets-start: "Votre compte est prêt ! 📦"
|
||||
mobile/views/pages/followers.vue:
|
||||
followers-of: "Abonné·e·s de {name}"
|
||||
followers-of: "Abonnés de {name}"
|
||||
mobile/views/pages/following.vue:
|
||||
following-of: "Abonné·e·s de {name}"
|
||||
following-of: "Abonnés de {name}"
|
||||
mobile/views/pages/home.vue:
|
||||
home: "Accueil"
|
||||
local: "Local"
|
||||
@@ -1334,7 +1396,7 @@ mobile/views/pages/welcome.vue:
|
||||
signup: "S'enregistrer"
|
||||
mobile/views/pages/widgets.vue:
|
||||
dashboard: "Tableau de bord"
|
||||
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
|
||||
widgets-hints: "Vous pouvez ajouter, supprimer et réarranger les widgets. Faites glisser « 三 » pour déplacer le widget. Appuyez sur « x » pour supprimer le widget. Certains widgets peuvent changer d’apparence en cliquant dessus."
|
||||
add-widget: "Ajouter"
|
||||
customization-tips: "Conseils de personnalisation"
|
||||
mobile/views/pages/widgets/activity.vue:
|
||||
@@ -1360,12 +1422,7 @@ mobile/views/pages/search.vue:
|
||||
mobile/views/pages/selectdrive.vue:
|
||||
select-file: "Choisissez un fichier"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "Connecté·e en tant que {}"
|
||||
lang: "Langue"
|
||||
lang-tip: "Le rechargement de la page est requis afin d'appliquer les modifications."
|
||||
recommended: "Recommandé"
|
||||
auto: "Automatique"
|
||||
specify-language: "Sélectionnez votre langue"
|
||||
signed-in-as: "Connecté en tant que {}"
|
||||
design: "Affichage et design"
|
||||
dark-mode: "Mode nuit"
|
||||
i-am-under-limited-internet: "J'ai un accès Internet limité"
|
||||
@@ -1382,29 +1439,16 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "Style de notification"
|
||||
notification-position-bottom: "en bas"
|
||||
notification-position-top: "en haut"
|
||||
theme: "Thème"
|
||||
behavior: "Comportement"
|
||||
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"
|
||||
web-search-engine: "ウェブ検索エンジン"
|
||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
||||
disable-via-mobile: "Ne pas mentionner que ma publication provient d'un 'périphérique mobile'"
|
||||
web-search-engine: "Moteur de recherche Web"
|
||||
web-search-engine-desc: "Exemple : https://www.google.com/?#q={{query}}"
|
||||
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-remote-media: "Afficher les médias sur le serveur distant"
|
||||
twitter: "Intégration à Twitter"
|
||||
twitter-connect: "Se connecter à votre compte Twitter"
|
||||
twitter-reconnect: "Reconnecter"
|
||||
twitter-disconnect: "Déconnexion"
|
||||
github: "Avec GitHub"
|
||||
github-connect: "Se connecter à votre compte GitHub"
|
||||
github-reconnect: "Reconnecter"
|
||||
github-disconnect: "Déconnecter"
|
||||
discord: "Intégration avec Discord"
|
||||
discord-connect: "Connecter votre compte Discord"
|
||||
discord-reconnect: "Reconnecter"
|
||||
discord-disconnect: "Déconnecter"
|
||||
update: "Mise à jour de Misskey"
|
||||
version: "Version :"
|
||||
latest-version: "Dernière version :"
|
||||
@@ -1418,35 +1462,36 @@ mobile/views/pages/settings.vue:
|
||||
signout: "Déconnexion"
|
||||
sound: "Sons"
|
||||
enable-sounds: "Activer les sons"
|
||||
mark-as-read-all-unread-notes: "Marquer toutes les publications comme lues"
|
||||
password: "Mot de Passe"
|
||||
mobile/views/pages/user.vue:
|
||||
follows-you: "Vous suit"
|
||||
following: "Abonnements"
|
||||
followers: "Abonné·e·s"
|
||||
followers: "Abonnés"
|
||||
notes: "Notes"
|
||||
overview: "Aperçu"
|
||||
timeline: "Fil d'actualité"
|
||||
media: "Média"
|
||||
is-suspended: "This account has been suspended."
|
||||
mute: "Mettre en sourdine"
|
||||
unmute: "Enlever la sourdine"
|
||||
block: "Bloquer"
|
||||
unblock: "Débloquer"
|
||||
years-old: "{age} ans"
|
||||
push-to-list: "Ajouter à la liste"
|
||||
select-list: "Sélectionnez une liste"
|
||||
list-pushed: "Vous avez ajouté {user} à la liste {list} avec succès."
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "Notes récentes"
|
||||
images: "Images"
|
||||
activity: "Activité"
|
||||
keywords: "Mot clés"
|
||||
domains: "Domaines"
|
||||
frequently-replied-users: "Utilisateurs·rices mentionné·e·s souvent"
|
||||
followers-you-know: "Abonné·e·s que vous connaissez"
|
||||
frequently-replied-users: "Utilisateurs mentionnés souvent"
|
||||
followers-you-know: "Abonnés que vous connaissez"
|
||||
last-used-at: "Dernière connexion il y a"
|
||||
mobile/views/pages/user/home.followers-you-know.vue:
|
||||
no-users: "Aucun utilisateur·rice connu·e"
|
||||
no-users: "Aucun utilisateur connu"
|
||||
mobile/views/pages/user/home.friends.vue:
|
||||
no-users: "Aucun utilisateur·rice connu·e"
|
||||
no-users: "Aucun utilisateur connu"
|
||||
mobile/views/pages/user/home.notes.vue:
|
||||
no-notes: "Pas de notes"
|
||||
mobile/views/pages/user/home.photos.vue:
|
||||
@@ -1478,7 +1523,8 @@ deck/deck.tl-column.vue:
|
||||
deck/deck.user-column.vue:
|
||||
posts: "Notes"
|
||||
following: "Suit"
|
||||
followers: "Abonné·e·s"
|
||||
followers: "Abonnés"
|
||||
mention: "メンション"
|
||||
images: "Images"
|
||||
activity: "Activité"
|
||||
timeline: "Fil d’actualité"
|
||||
@@ -1497,7 +1543,7 @@ docs:
|
||||
require-credential: "Ce point de communication nécessite une authentification."
|
||||
require-permission: "Ce point de communication nécessite la permission {permission}."
|
||||
has-limit: "Il y’a un taux limite."
|
||||
duration-limit: "直近{duration}ミリ秒の間のこのエンドポイントへのリクエスト数の合計が{max}を超える場合はリクエストできません。"
|
||||
duration-limit: "Si vous avez envoyé plus de {max} requêtes en {duration} millisecondes, vous ne serez pas en mesure d'envoyer d'autres requêtes."
|
||||
min-interval-limit: "Vous ne pourrez pas effectuer une nouvelle requête si {interval} millisecondes ne se sont pas écoulées depuis la dernière demande."
|
||||
show-src: "Vous pouvez voir le code source ce point de communication."
|
||||
show-src-link: "Consulter le code sur GitHub"
|
||||
|
||||
@@ -90,7 +90,6 @@ common:
|
||||
followers-desc: "自分のフォロワーにのみ公開"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "指定したユーザーにのみ公開"
|
||||
private: "非公開"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
local-followers: "フォロワー (ローカルのみ)"
|
||||
@@ -110,9 +109,10 @@ common:
|
||||
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "公式アカウント"
|
||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
always-show-nsfw: "常に閲覧注意のメディアを表示する"
|
||||
always-mark-nsfw: "常にメディアを閲覧注意として投稿"
|
||||
show-full-acct: "ユーザー名のホストを省略しない"
|
||||
@@ -120,14 +120,15 @@ common:
|
||||
reduce-motion: "UIの動きを減らす"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
use-os-default-emojis: "OS標準の絵文字を使用"
|
||||
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
is-remote-post: "この投稿情報はコピーです。"
|
||||
view-on-remote: "正確な情報を見る"
|
||||
renoted-by: "{user}がRenote"
|
||||
error:
|
||||
title: '問題が発生しました'
|
||||
retry: 'やり直す'
|
||||
title: "問題が発生しました"
|
||||
retry: "やり直す"
|
||||
reversi:
|
||||
drawn: "引き分け"
|
||||
my-turn: "あなたのターンです"
|
||||
@@ -158,12 +159,12 @@ common:
|
||||
polls: "アンケート"
|
||||
post-form: "投稿フォーム"
|
||||
server: "サーバー情報"
|
||||
donation: "寄付のお願い"
|
||||
nav: "ナビゲーション"
|
||||
tips: "ヒント"
|
||||
hashtags: "ハッシュタグ"
|
||||
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||
ai-chan-kawaii: "藍ちゃかわいい"
|
||||
you: "あなた"
|
||||
auth/views/form.vue:
|
||||
share-access: "<i>{name}</i>があなたのアカウントにアクセスすることを許可しますか?"
|
||||
permission-ask: "このアプリは次の権限を要求しています:"
|
||||
@@ -259,6 +260,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "閲覧注意"
|
||||
click-to-show: "クリックして表示"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "明るいテーマ"
|
||||
@@ -275,6 +277,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "ベーステーマ"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "テーマ名"
|
||||
preview-created-theme: "プレビュー"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
@@ -296,6 +299,9 @@ common/views/components/theme.vue:
|
||||
common/views/components/cw-button.vue:
|
||||
hide: "隠す"
|
||||
show: "もっと見る"
|
||||
chars: "{count}文字"
|
||||
files: "{count}ファイル"
|
||||
poll: "アンケート"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "ユーザーを探す"
|
||||
you: "あなた"
|
||||
@@ -325,6 +331,7 @@ common/views/components/nav.vue:
|
||||
develop: "開発者"
|
||||
feedback: "フィードバック"
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "詳細"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "お気に入り"
|
||||
@@ -400,13 +407,18 @@ common/views/components/stream-indicator.vue:
|
||||
connecting: "接続中"
|
||||
reconnecting: "再接続中"
|
||||
connected: "接続完了"
|
||||
common/views/components/twitter-setting.vue:
|
||||
description: "お使いのTwitterアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでTwitterアカウント情報が表示されるようになったり、Twitterを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のTwitterアカウントに接続されています"
|
||||
detail: "詳細..."
|
||||
reconnect: "再接続する"
|
||||
connect: "Twitterと接続する"
|
||||
common/views/components/notification-settings.vue:
|
||||
title: "通知"
|
||||
mark-as-read-all-notifications: "すべての通知を既読にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
mark-as-read-all-talk-messages: "すべてのトークを既読にする"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
common/views/components/integration-settings.vue:
|
||||
title: "サービス連携"
|
||||
connect: "接続する"
|
||||
disconnect: "切断する"
|
||||
connected-to: "次のアカウントに接続されています"
|
||||
common/views/components/github-setting.vue:
|
||||
description: "お使いのGitHubアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでGitHubアカウント情報が表示されるようになったり、GitHubを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のGitHubアカウントに接続されています"
|
||||
@@ -431,7 +443,6 @@ common/views/components/visibility-chooser.vue:
|
||||
followers-desc: "自分のフォロワーにのみ公開"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "指定したユーザーにのみ公開"
|
||||
private: "非公開"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-public-desc: "リモートへは公開しない"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
@@ -439,12 +450,20 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
account: "アカウント"
|
||||
location: "場所"
|
||||
description: "自己紹介"
|
||||
language: "言語"
|
||||
birthday: "誕生日"
|
||||
avatar: "アイコン"
|
||||
banner: "バナー"
|
||||
@@ -452,6 +471,7 @@ common/views/components/profile-editor.vue:
|
||||
is-bot: "このアカウントはBotです"
|
||||
is-locked: "フォローを承認制にする"
|
||||
careful-bot: "Botからのフォローだけ承認制にする"
|
||||
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する"
|
||||
advanced: "その他"
|
||||
privacy: "プライバシー"
|
||||
save: "保存"
|
||||
@@ -462,6 +482,13 @@ common/views/components/profile-editor.vue:
|
||||
email-address: "メールアドレス"
|
||||
email-verified: "メールアドレスが確認されました"
|
||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "ユーザー"
|
||||
rename: "リスト名を変更"
|
||||
delete: "リストを削除"
|
||||
remove-user: "このリストから削除"
|
||||
delete-are-you-sure: "リスト「$1」を削除しますか?"
|
||||
deleted: "削除しました"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "確認中"
|
||||
no-broadcasts: "お知らせはありません"
|
||||
@@ -474,9 +501,6 @@ common/views/widgets/calendar.vue:
|
||||
today: "今日:"
|
||||
this-month: "今月:"
|
||||
this-year: "今年:"
|
||||
common/views/widgets/donation.vue:
|
||||
title: "寄付のお願い"
|
||||
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
|
||||
common/views/widgets/photo-stream.vue:
|
||||
title: "フォトストリーム"
|
||||
no-photos: "写真はありません"
|
||||
@@ -514,9 +538,11 @@ common/views/widgets/tips.vue:
|
||||
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
||||
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
|
||||
tips-line21: "APIを利用してbotの開発なども行えます"
|
||||
tips-line23: "まゆかわいいよまゆ"
|
||||
tips-line23: "藍かわいいよ藍"
|
||||
tips-line24: "Misskeyは2014年にサービスを開始しました"
|
||||
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
|
||||
common/views/pages/not-found.vue:
|
||||
page-not-found: "ページが見つかりませんでした"
|
||||
common/views/pages/follow.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
following: "フォロー中"
|
||||
@@ -652,10 +678,12 @@ desktop/views/components/note-detail.vue:
|
||||
location: "位置情報"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
desktop/views/components/note.vue:
|
||||
reply: "返信"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
detail: "詳細"
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
@@ -754,10 +782,13 @@ desktop/views/components/settings.vue:
|
||||
dark-mode: "ダークモード"
|
||||
use-shadow: "UIに影を使用"
|
||||
rounded-corners: "UIの角を丸める"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
circle-icons: "円形のアイコンを使用"
|
||||
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
show-clock-on-header: "右上に時計を表示する"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
timeline: "タイムライン"
|
||||
@@ -766,27 +797,26 @@ desktop/views/components/settings.vue:
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "マップの自動展開"
|
||||
remain-deleted-note: "削除された投稿を表示し続ける"
|
||||
deck-column-align: "デッキのカラムの位置"
|
||||
deck-column-align: "デッキのカラムの配置"
|
||||
deck-column-align-center: "中央"
|
||||
deck-column-align-left: "左"
|
||||
deck-column-align-flexible: "フレキシブル"
|
||||
deck-column-width: "デッキのカラムの幅"
|
||||
deck-column-width-narrow: "狭"
|
||||
deck-column-width-narrower: "やや狭"
|
||||
deck-column-width-normal: "普通"
|
||||
deck-column-width-wider: "やや広"
|
||||
deck-column-width-wide: "広"
|
||||
sound: "サウンド"
|
||||
enable-sounds: "サウンドを有効にする"
|
||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||
volume: "ボリューム"
|
||||
test: "テスト"
|
||||
language: "言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||
cache-cleared: "キャッシュを削除しました"
|
||||
cache-cleared-desc: "ページを再度読み込みしてください。"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
about: "Misskeyについて"
|
||||
operator: "このサーバーの運営者"
|
||||
update: "Misskey Update"
|
||||
@@ -825,6 +855,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "パスワードを入力してください"
|
||||
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
|
||||
howtoinstall: "インストール方法はこちら"
|
||||
token: "トークン"
|
||||
scan: "次に、表示されているQRコードをスキャンします:"
|
||||
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
|
||||
submit: "完了"
|
||||
@@ -839,13 +870,13 @@ common/views/components/api-settings.vue:
|
||||
token: "Token:"
|
||||
enter-password: "パスワードを入力してください"
|
||||
console:
|
||||
title: 'APIコンソール'
|
||||
endpoint: 'エンドポイント'
|
||||
parameter: 'パラメータ'
|
||||
title: "APIコンソール"
|
||||
endpoint: "エンドポイント"
|
||||
parameter: "パラメータ"
|
||||
credential-info: "「i」パラメータは自動で付与されます。"
|
||||
send: '送信'
|
||||
sending: '応答待ち'
|
||||
response: '結果'
|
||||
send: "送信"
|
||||
sending: "応答待ち"
|
||||
response: "結果"
|
||||
desktop/views/components/settings.apps.vue:
|
||||
no-apps: "連携しているアプリケーションはありません"
|
||||
common/views/components/drive-settings.vue:
|
||||
@@ -869,11 +900,17 @@ common/views/components/password-settings.vue:
|
||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||
not-match: "新しいパスワードが一致しません"
|
||||
changed: "パスワードを変更しました"
|
||||
failed: "パスワード変更に失敗しました"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
media-count: "{}つのメディア"
|
||||
poll: "アンケート"
|
||||
desktop/views/components/settings.tags.vue:
|
||||
title: "タグ"
|
||||
query: "クエリ (省略可)"
|
||||
add: "追加"
|
||||
save: "保存"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "タスクマネージャ"
|
||||
desktop/views/components/timeline.vue:
|
||||
@@ -956,6 +993,7 @@ admin/views/instance.vue:
|
||||
instance-description: "インスタンスの紹介"
|
||||
host: "ホスト"
|
||||
banner-url: "バナー画像URL"
|
||||
error-image-url: "エラー画像URL"
|
||||
languages: "インスタンスの対象言語"
|
||||
languages-desc: "スペースで区切って複数設定できます。"
|
||||
maintainer-config: "管理者情報"
|
||||
@@ -1014,6 +1052,12 @@ admin/views/instance.vue:
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
smtp-pass: "SMTPパスワード"
|
||||
serviceworker-config: "ServiceWorker"
|
||||
enable-serviceworker: "ServiceWorkerを有効にする"
|
||||
serviceworker-info: "プッシュ通知を行うには有効する必要があります。"
|
||||
vapid-publickey: "VAPID公開鍵"
|
||||
vapid-privatekey: "VAPID秘密鍵"
|
||||
vapid-info: "ServiceWorkerを有効にする場合、VAPIDキーペアを生成する必要があります。シェルで次のようにします:"
|
||||
admin/views/charts.vue:
|
||||
title: "チャート"
|
||||
per-day: "1日ごと"
|
||||
@@ -1039,6 +1083,22 @@ admin/views/charts.vue:
|
||||
network-requests: "リクエスト"
|
||||
network-time: "応答時間"
|
||||
network-usage: "通信量"
|
||||
admin/views/drive.vue:
|
||||
sort:
|
||||
title: "ソート"
|
||||
createdAtAsc: "アップロード日時が古い順"
|
||||
createdAtDesc: "アップロード日時が新しい順"
|
||||
sizeAsc: "サイズが小さい順"
|
||||
sizeDesc: "サイズが大きい順"
|
||||
origin:
|
||||
title: "オリジン"
|
||||
combined: "ローカル+リモート"
|
||||
local: "ローカル"
|
||||
remote: "リモート"
|
||||
delete: "削除"
|
||||
deleted: "削除しました"
|
||||
mark-as-sensitive: "閲覧注意に設定"
|
||||
unmark-as-sensitive: "閲覧注意を解除"
|
||||
admin/views/users.vue:
|
||||
operation: "操作"
|
||||
username-or-userid: "ユーザー名またはユーザーID"
|
||||
@@ -1170,6 +1230,7 @@ desktop/views/pages/user/user.header.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
is-bot: "このアカウントはBotです"
|
||||
years-old: "{age}歳"
|
||||
year: "年"
|
||||
@@ -1179,6 +1240,7 @@ desktop/views/pages/user/user.timeline.vue:
|
||||
default: "投稿"
|
||||
with-replies: "投稿と返信"
|
||||
with-media: "メディア"
|
||||
my-posts: "私の投稿"
|
||||
empty: "このユーザーはまだ何も投稿していないようです。"
|
||||
desktop/views/widgets/messaging.vue:
|
||||
title: "メッセージ"
|
||||
@@ -1361,11 +1423,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "ファイルを選択"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
lang: "言語"
|
||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
design: "デザインと表示"
|
||||
dark-mode: "ダークモード"
|
||||
i-am-under-limited-internet: "私は通信を制限されている"
|
||||
@@ -1382,7 +1439,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "下"
|
||||
notification-position-top: "上"
|
||||
theme: "テーマ"
|
||||
behavior: "動作"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
@@ -1393,18 +1449,6 @@ mobile/views/pages/settings.vue:
|
||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||
load-raw-images: "添付された画像を高画質で表示する"
|
||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||
twitter: "Twitter連携"
|
||||
twitter-connect: "Twitterアカウントに接続する"
|
||||
twitter-reconnect: "再接続する"
|
||||
twitter-disconnect: "切断する"
|
||||
github: "GitHub連携"
|
||||
github-connect: "GitHubアカウントに接続する"
|
||||
github-reconnect: "再接続する"
|
||||
github-disconnect: "切断する"
|
||||
discord: "Discord連携"
|
||||
discord-connect: "Discordアカウントに接続する"
|
||||
discord-reconnect: "再接続する"
|
||||
discord-disconnect: "切断する"
|
||||
update: "Misskey Update"
|
||||
version: "バージョン:"
|
||||
latest-version: "最新のバージョン:"
|
||||
@@ -1418,7 +1462,6 @@ mobile/views/pages/settings.vue:
|
||||
signout: "サインアウト"
|
||||
sound: "サウンド"
|
||||
enable-sounds: "サウンドを有効にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
password: "パスワード"
|
||||
mobile/views/pages/user.vue:
|
||||
follows-you: "フォローされています"
|
||||
@@ -1428,12 +1471,14 @@ mobile/views/pages/user.vue:
|
||||
overview: "概要"
|
||||
timeline: "タイムライン"
|
||||
media: "メディア"
|
||||
is-suspended: "このユーザーは凍結されています。"
|
||||
mute: "ミュート"
|
||||
unmute: "ミュート解除"
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "最近の投稿"
|
||||
images: "画像"
|
||||
@@ -1479,6 +1524,7 @@ deck/deck.user-column.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
images: "画像"
|
||||
activity: "アクティビティ"
|
||||
timeline: "タイムライン"
|
||||
|
||||
@@ -96,7 +96,6 @@ common:
|
||||
followers-desc: "自分のフォロワーにのみ公開"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "指定したユーザーにのみ公開"
|
||||
private: "非公開"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
local-followers: "フォロワー (ローカルのみ)"
|
||||
@@ -118,9 +117,10 @@ common:
|
||||
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "公式アカウント"
|
||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
always-show-nsfw: "常に閲覧注意のメディアを表示する"
|
||||
always-mark-nsfw: "常にメディアを閲覧注意として投稿"
|
||||
show-full-acct: "ユーザー名のホストを省略しない"
|
||||
@@ -128,17 +128,21 @@ common:
|
||||
reduce-motion: "UIの動きを減らす"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
use-os-default-emojis: "OS標準の絵文字を使用"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
|
||||
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||
|
||||
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
is-remote-post: "この投稿情報はコピーです。"
|
||||
view-on-remote: "正確な情報を見る"
|
||||
renoted-by: "{user}がRenote"
|
||||
|
||||
error:
|
||||
title: '問題が発生しました'
|
||||
retry: 'やり直す'
|
||||
title: "問題が発生しました"
|
||||
retry: "やり直す"
|
||||
|
||||
reversi:
|
||||
drawn: "引き分け"
|
||||
@@ -171,13 +175,13 @@ common:
|
||||
polls: "アンケート"
|
||||
post-form: "投稿フォーム"
|
||||
server: "サーバー情報"
|
||||
donation: "寄付のお願い"
|
||||
nav: "ナビゲーション"
|
||||
tips: "ヒント"
|
||||
hashtags: "ハッシュタグ"
|
||||
|
||||
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||
ai-chan-kawaii: "藍ちゃかわいい"
|
||||
you: "あなた"
|
||||
|
||||
auth/views/form.vue:
|
||||
share-access: "<i>{name}</i>があなたのアカウントにアクセスすることを許可しますか?"
|
||||
@@ -283,6 +287,7 @@ common/views/components/media-banner.vue:
|
||||
click-to-show: "クリックして表示"
|
||||
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "明るいテーマ"
|
||||
@@ -299,6 +304,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "ベーステーマ"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "テーマ名"
|
||||
preview-created-theme: "プレビュー"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
@@ -321,6 +327,9 @@ common/views/components/theme.vue:
|
||||
common/views/components/cw-button.vue:
|
||||
hide: "隠す"
|
||||
show: "もっと見る"
|
||||
chars: "{count}文字"
|
||||
files: "{count}ファイル"
|
||||
poll: "アンケート"
|
||||
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "ユーザーを探す"
|
||||
@@ -356,6 +365,7 @@ common/views/components/nav.vue:
|
||||
feedback: "フィードバック"
|
||||
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "詳細"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "お気に入り"
|
||||
@@ -440,13 +450,19 @@ common/views/components/stream-indicator.vue:
|
||||
reconnecting: "再接続中"
|
||||
connected: "接続完了"
|
||||
|
||||
common/views/components/twitter-setting.vue:
|
||||
description: "お使いのTwitterアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでTwitterアカウント情報が表示されるようになったり、Twitterを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のTwitterアカウントに接続されています"
|
||||
detail: "詳細..."
|
||||
reconnect: "再接続する"
|
||||
connect: "Twitterと接続する"
|
||||
common/views/components/notification-settings.vue:
|
||||
title: "通知"
|
||||
mark-as-read-all-notifications: "すべての通知を既読にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
mark-as-read-all-talk-messages: "すべてのトークを既読にする"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
|
||||
common/views/components/integration-settings.vue:
|
||||
title: "サービス連携"
|
||||
connect: "接続する"
|
||||
disconnect: "切断する"
|
||||
connected-to: "次のアカウントに接続されています"
|
||||
|
||||
common/views/components/github-setting.vue:
|
||||
description: "お使いのGitHubアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでGitHubアカウント情報が表示されるようになったり、GitHubを用いた便利なサインインを利用できるようになります。"
|
||||
@@ -475,7 +491,6 @@ common/views/components/visibility-chooser.vue:
|
||||
followers-desc: "自分のフォロワーにのみ公開"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "指定したユーザーにのみ公開"
|
||||
private: "非公開"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-public-desc: "リモートへは公開しない"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
@@ -485,12 +500,21 @@ common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
account: "アカウント"
|
||||
location: "場所"
|
||||
description: "自己紹介"
|
||||
language: "言語"
|
||||
birthday: "誕生日"
|
||||
avatar: "アイコン"
|
||||
banner: "バナー"
|
||||
@@ -498,6 +522,7 @@ common/views/components/profile-editor.vue:
|
||||
is-bot: "このアカウントはBotです"
|
||||
is-locked: "フォローを承認制にする"
|
||||
careful-bot: "Botからのフォローだけ承認制にする"
|
||||
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する"
|
||||
advanced: "その他"
|
||||
privacy: "プライバシー"
|
||||
save: "保存"
|
||||
@@ -509,6 +534,14 @@ common/views/components/profile-editor.vue:
|
||||
email-verified: "メールアドレスが確認されました"
|
||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
||||
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "ユーザー"
|
||||
rename: "リスト名を変更"
|
||||
delete: "リストを削除"
|
||||
remove-user: "このリストから削除"
|
||||
delete-are-you-sure: "リスト「$1」を削除しますか?"
|
||||
deleted: "削除しました"
|
||||
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "確認中"
|
||||
no-broadcasts: "お知らせはありません"
|
||||
@@ -523,10 +556,6 @@ common/views/widgets/calendar.vue:
|
||||
this-month: "今月:"
|
||||
this-year: "今年:"
|
||||
|
||||
common/views/widgets/donation.vue:
|
||||
title: "寄付のお願い"
|
||||
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
|
||||
|
||||
common/views/widgets/photo-stream.vue:
|
||||
title: "フォトストリーム"
|
||||
no-photos: "写真はありません"
|
||||
@@ -570,10 +599,13 @@ common/views/widgets/tips.vue:
|
||||
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
||||
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
|
||||
tips-line21: "APIを利用してbotの開発なども行えます"
|
||||
tips-line23: "まゆかわいいよまゆ"
|
||||
tips-line23: "藍かわいいよ藍"
|
||||
tips-line24: "Misskeyは2014年にサービスを開始しました"
|
||||
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
|
||||
|
||||
common/views/pages/not-found.vue:
|
||||
page-not-found: "ページが見つかりませんでした"
|
||||
|
||||
common/views/pages/follow.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
following: "フォロー中"
|
||||
@@ -733,11 +765,13 @@ desktop/views/components/note-detail.vue:
|
||||
location: "位置情報"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
|
||||
desktop/views/components/note.vue:
|
||||
reply: "返信"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
detail: "詳細"
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
@@ -851,7 +885,6 @@ desktop/views/components/settings.vue:
|
||||
circle-icons: "円形のアイコンを使用"
|
||||
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
show-clock-on-header: "右上に時計を表示する"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
timeline: "タイムライン"
|
||||
@@ -860,9 +893,16 @@ desktop/views/components/settings.vue:
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "マップの自動展開"
|
||||
remain-deleted-note: "削除された投稿を表示し続ける"
|
||||
deck-column-align: "デッキのカラムの位置"
|
||||
deck-column-align: "デッキのカラムの配置"
|
||||
deck-column-align-center: "中央"
|
||||
deck-column-align-left: "左"
|
||||
deck-column-align-flexible: "フレキシブル"
|
||||
deck-column-width: "デッキのカラムの幅"
|
||||
deck-column-width-narrow: "狭"
|
||||
deck-column-width-narrower: "やや狭"
|
||||
deck-column-width-normal: "普通"
|
||||
deck-column-width-wider: "やや広"
|
||||
deck-column-width-wide: "広"
|
||||
|
||||
sound: "サウンド"
|
||||
enable-sounds: "サウンドを有効にする"
|
||||
@@ -870,22 +910,12 @@ desktop/views/components/settings.vue:
|
||||
volume: "ボリューム"
|
||||
test: "テスト"
|
||||
|
||||
language: "言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||
cache-cleared: "キャッシュを削除しました"
|
||||
cache-cleared-desc: "ページを再度読み込みしてください。"
|
||||
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
|
||||
about: "Misskeyについて"
|
||||
operator: "このサーバーの運営者"
|
||||
|
||||
@@ -928,6 +958,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "パスワードを入力してください"
|
||||
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
|
||||
howtoinstall: "インストール方法はこちら"
|
||||
token: "トークン"
|
||||
scan: "次に、表示されているQRコードをスキャンします:"
|
||||
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
|
||||
submit: "完了"
|
||||
@@ -943,13 +974,13 @@ common/views/components/api-settings.vue:
|
||||
token: "Token:"
|
||||
enter-password: "パスワードを入力してください"
|
||||
console:
|
||||
title: 'APIコンソール'
|
||||
endpoint: 'エンドポイント'
|
||||
parameter: 'パラメータ'
|
||||
title: "APIコンソール"
|
||||
endpoint: "エンドポイント"
|
||||
parameter: "パラメータ"
|
||||
credential-info: "「i」パラメータは自動で付与されます。"
|
||||
send: '送信'
|
||||
sending: '応答待ち'
|
||||
response: '結果'
|
||||
send: "送信"
|
||||
sending: "応答待ち"
|
||||
response: "結果"
|
||||
|
||||
desktop/views/components/settings.apps.vue:
|
||||
no-apps: "連携しているアプリケーションはありません"
|
||||
@@ -977,6 +1008,7 @@ common/views/components/password-settings.vue:
|
||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||
not-match: "新しいパスワードが一致しません"
|
||||
changed: "パスワードを変更しました"
|
||||
failed: "パスワード変更に失敗しました"
|
||||
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "この投稿は非公開です"
|
||||
@@ -984,6 +1016,12 @@ desktop/views/components/sub-note-content.vue:
|
||||
media-count: "{}つのメディア"
|
||||
poll: "アンケート"
|
||||
|
||||
desktop/views/components/settings.tags.vue:
|
||||
title: "タグ"
|
||||
query: "クエリ (省略可)"
|
||||
add: "追加"
|
||||
save: "保存"
|
||||
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "タスクマネージャ"
|
||||
|
||||
@@ -1082,6 +1120,7 @@ admin/views/instance.vue:
|
||||
instance-description: "インスタンスの紹介"
|
||||
host: "ホスト"
|
||||
banner-url: "バナー画像URL"
|
||||
error-image-url: "エラー画像URL"
|
||||
languages: "インスタンスの対象言語"
|
||||
languages-desc: "スペースで区切って複数設定できます。"
|
||||
maintainer-config: "管理者情報"
|
||||
@@ -1140,6 +1179,12 @@ admin/views/instance.vue:
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
smtp-pass: "SMTPパスワード"
|
||||
serviceworker-config: "ServiceWorker"
|
||||
enable-serviceworker: "ServiceWorkerを有効にする"
|
||||
serviceworker-info: "プッシュ通知を行うには有効する必要があります。"
|
||||
vapid-publickey: "VAPID公開鍵"
|
||||
vapid-privatekey: "VAPID秘密鍵"
|
||||
vapid-info: "ServiceWorkerを有効にする場合、VAPIDキーペアを生成する必要があります。シェルで次のようにします:"
|
||||
|
||||
admin/views/charts.vue:
|
||||
title: "チャート"
|
||||
@@ -1167,6 +1212,23 @@ admin/views/charts.vue:
|
||||
network-time: "応答時間"
|
||||
network-usage: "通信量"
|
||||
|
||||
admin/views/drive.vue:
|
||||
sort:
|
||||
title: "ソート"
|
||||
createdAtAsc: "アップロード日時が古い順"
|
||||
createdAtDesc: "アップロード日時が新しい順"
|
||||
sizeAsc: "サイズが小さい順"
|
||||
sizeDesc: "サイズが大きい順"
|
||||
origin:
|
||||
title: "オリジン"
|
||||
combined: "ローカル+リモート"
|
||||
local: "ローカル"
|
||||
remote: "リモート"
|
||||
delete: "削除"
|
||||
deleted: "削除しました"
|
||||
mark-as-sensitive: "閲覧注意に設定"
|
||||
unmark-as-sensitive: "閲覧注意を解除"
|
||||
|
||||
admin/views/users.vue:
|
||||
operation: "操作"
|
||||
username-or-userid: "ユーザー名またはユーザーID"
|
||||
@@ -1316,6 +1378,7 @@ desktop/views/pages/user/user.header.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
is-bot: "このアカウントはBotです"
|
||||
years-old: "{age}歳"
|
||||
year: "年"
|
||||
@@ -1326,6 +1389,7 @@ desktop/views/pages/user/user.timeline.vue:
|
||||
default: "投稿"
|
||||
with-replies: "投稿と返信"
|
||||
with-media: "メディア"
|
||||
my-posts: "私の投稿"
|
||||
empty: "このユーザーはまだ何も投稿していないようです。"
|
||||
|
||||
desktop/views/widgets/messaging.vue:
|
||||
@@ -1554,11 +1618,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
lang: "言語"
|
||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
design: "デザインと表示"
|
||||
dark-mode: "ダークモード"
|
||||
i-am-under-limited-internet: "私は通信を制限されている"
|
||||
@@ -1575,7 +1634,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "下"
|
||||
notification-position-top: "上"
|
||||
theme: "テーマ"
|
||||
behavior: "動作"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
@@ -1586,18 +1644,6 @@ mobile/views/pages/settings.vue:
|
||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||
load-raw-images: "添付された画像を高画質で表示する"
|
||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||
twitter: "Twitter連携"
|
||||
twitter-connect: "Twitterアカウントに接続する"
|
||||
twitter-reconnect: "再接続する"
|
||||
twitter-disconnect: "切断する"
|
||||
github: "GitHub連携"
|
||||
github-connect: "GitHubアカウントに接続する"
|
||||
github-reconnect: "再接続する"
|
||||
github-disconnect: "切断する"
|
||||
discord: "Discord連携"
|
||||
discord-connect: "Discordアカウントに接続する"
|
||||
discord-reconnect: "再接続する"
|
||||
discord-disconnect: "切断する"
|
||||
update: "Misskey Update"
|
||||
version: "バージョン:"
|
||||
latest-version: "最新のバージョン:"
|
||||
@@ -1611,7 +1657,6 @@ mobile/views/pages/settings.vue:
|
||||
signout: "サインアウト"
|
||||
sound: "サウンド"
|
||||
enable-sounds: "サウンドを有効にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
password: "パスワード"
|
||||
|
||||
mobile/views/pages/user.vue:
|
||||
@@ -1622,12 +1667,14 @@ mobile/views/pages/user.vue:
|
||||
overview: "概要"
|
||||
timeline: "タイムライン"
|
||||
media: "メディア"
|
||||
is-suspended: "このユーザーは凍結されています。"
|
||||
mute: "ミュート"
|
||||
unmute: "ミュート解除"
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "最近の投稿"
|
||||
@@ -1681,6 +1728,7 @@ deck/deck.user-column.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
images: "画像"
|
||||
activity: "アクティビティ"
|
||||
timeline: "タイムライン"
|
||||
|
||||
@@ -25,12 +25,12 @@ common:
|
||||
application-authorization: "アプリの連携"
|
||||
close: "さいなら"
|
||||
do-not-copy-paste: "ここにコードを入力したり張り付けたりせんといてください。アカウントが不正利用されるかも分からん。知らんけど。"
|
||||
load-more: "もっと読み込む"
|
||||
enter-password: "パスワードを入力してください"
|
||||
load-more: "もっとあらへんのか!"
|
||||
enter-password: "パスワードを入れてや"
|
||||
got-it: "ほい"
|
||||
customization-tips:
|
||||
title: "カスタマイズのヒント"
|
||||
paragraph: "<p>ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。</p><p>一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。</p><p>ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。</p><p>カスタマイズを終了するには、右上の「完了」をクリックします。</p>"
|
||||
paragraph: "<p>ホームのカスタマイズは、ウィジェットを増やしたりほかしたり、ドラッグ&ドロップして並び替えたりしていじれるで。</p><p>一部ウィジェットは<strong><strong>右</strong>クリック</strong>で表示もいじれるんや。</p><p>ほかしたいときはヘッダーの<strong>「ゴミ箱」</strong>にほうりこんでら。</p><p>「完了」押したらお終いやで。</p>"
|
||||
gotit: "Got it!"
|
||||
notification:
|
||||
file-uploaded: "ファイルがアップロードされたで"
|
||||
@@ -90,10 +90,9 @@ common:
|
||||
followers-desc: "自分のフォロワー以外に見せんとって"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "今から言うユーザー以外に見せんとってや"
|
||||
private: "非公開"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
local-followers: "フォロワー (ローカルのみ)"
|
||||
local-public: "公開 (ローカルだけ)"
|
||||
local-home: "ホーム (ローカルだけ)"
|
||||
local-followers: "フォロワー (ローカルだけ)"
|
||||
note-placeholders:
|
||||
a: "今なにしてん?"
|
||||
b: "何かあったんか?"
|
||||
@@ -110,31 +109,33 @@ common:
|
||||
my-token-regenerated: "あんさんのトークンが更新されたらしいわ。すまんがとりあえずサインアウトすんで。"
|
||||
i-like-sushi: "寿司(のほうがプリンよりむしろ)ウマい、タコ焼きはあらへんけど。"
|
||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示や!"
|
||||
use-contrast-reversi-stones: "リバーシのアイコンにコントラストをつけんで!"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "アメちゃん付きアカウント"
|
||||
disable-animated-mfm: "投稿内のちょろちょろ動いてんのを止める"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
always-show-nsfw: "閲覧注意?見せたらあかん?そんなん知らんわ、見せろや!"
|
||||
always-mark-nsfw: "わからんからとりあえずメディアは見せたらあかん"
|
||||
show-full-acct: "ユーザー名のホストも出したる"
|
||||
show-via: "viaを表示する"
|
||||
show-via: "viaを見せる"
|
||||
reduce-motion: "UI、動き過ぎや、静かにしてや"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
use-os-default-emojis: "OS標準の絵文字を使用"
|
||||
do-not-use-in-production: '開発ビルドや。本番環境で使わんといて!知らんで!'
|
||||
use-os-default-emojis: "OSにもとから入っとる絵文字使う"
|
||||
do-not-use-in-production: "開発ビルドや。本番環境で使わんといて!知らんで!"
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
is-remote-post: "この投稿情報はコピーです。"
|
||||
view-on-remote: "ちゃんとした情報見せてや!"
|
||||
renoted-by: "{user}がRenote"
|
||||
error:
|
||||
title: '問題が起こったわ'
|
||||
retry: 'もっぺん'
|
||||
title: "問題が起こったわ"
|
||||
retry: "もっぺん"
|
||||
reversi:
|
||||
drawn: "おあいこ"
|
||||
my-turn: "あんさんのターンや"
|
||||
opponent-turn: "相手のターンや"
|
||||
turn-of: "{name}のターンです"
|
||||
turn-of: "{name}のターンや"
|
||||
past-turn-of: "{name}のターン"
|
||||
won: "{name}の勝ち"
|
||||
won: "{name}の勝ちやで!"
|
||||
black: "黒"
|
||||
white: "白"
|
||||
total: "合計"
|
||||
@@ -158,14 +159,14 @@ common:
|
||||
polls: "アンケート"
|
||||
post-form: "投稿フォーム"
|
||||
server: "サーバー情報"
|
||||
donation: "寄付のお願い"
|
||||
nav: "ナビゲーション"
|
||||
tips: "ヒント"
|
||||
hashtags: "ハッシュタグ"
|
||||
dev: "アプリの作成あかんかったわ。もっぺんやってみて。"
|
||||
ai-chan-kawaii: "藍ちゃめっさべっぴんさんや"
|
||||
you: "あなた"
|
||||
auth/views/form.vue:
|
||||
share-access: "<i>{name}</i>があなたのアカウントにアクセスすることを許可しますか?"
|
||||
share-access: "あんたのアカウントに<i>{name}</i>がアクセスしようとしてるで?ええか?"
|
||||
permission-ask: "このアプリは次の権限を要求してんで:"
|
||||
account-read: "アカウントの情報を見させてもらうで。"
|
||||
account-write: "アカウントの情報を操作させてもらうで。"
|
||||
@@ -259,6 +260,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "見せたらあかん"
|
||||
click-to-show: "押してみ、見せたるわ"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "ナイトゲームちゃう時のテーマどないする?"
|
||||
dark-theme: "ナイトゲームの時のテーマどないする?"
|
||||
light-themes: "デイゲーム"
|
||||
@@ -275,6 +277,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "この色が背景や!"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "テーマ名"
|
||||
preview-created-theme: "試してみる"
|
||||
invalid-theme: "このテーマあかんわ、なんか間違うとる"
|
||||
@@ -296,6 +299,9 @@ common/views/components/theme.vue:
|
||||
common/views/components/cw-button.vue:
|
||||
hide: "もうええわ"
|
||||
show: "見たいやろ?"
|
||||
chars: "{count}文字"
|
||||
files: "{count}ファイル"
|
||||
poll: "アンケート"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "ユーザーを探す"
|
||||
you: "あんさん"
|
||||
@@ -325,6 +331,7 @@ common/views/components/nav.vue:
|
||||
develop: "開発者"
|
||||
feedback: "フィードバック"
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "もっと"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "お気に入り"
|
||||
@@ -353,7 +360,7 @@ common/views/components/emoji-picker.vue:
|
||||
custom-emoji: "カスタム絵文字"
|
||||
people: "人"
|
||||
animals-and-nature: "動物&自然"
|
||||
food-and-drink: "食べ物&飲み物"
|
||||
food-and-drink: "食いもん&飲みもん"
|
||||
activity: "アクティビティ"
|
||||
travel-and-places: "場所"
|
||||
objects: "物"
|
||||
@@ -400,27 +407,32 @@ common/views/components/stream-indicator.vue:
|
||||
connecting: "つないどるで"
|
||||
reconnecting: "つなぎ直すで"
|
||||
connected: "つないだわ"
|
||||
common/views/components/twitter-setting.vue:
|
||||
description: "あんさんがつことるTwitterアカウントをMisskeyアカウントに接続しとくと、あんさんのプロフィールにTwitterアカウント情報が表示されるようになったり、Twitterをつこた便利なサインインが使えるようになったりすんで。"
|
||||
connected-to: "次のTwitterアカウントに接続されとるで"
|
||||
detail: "詳細..."
|
||||
reconnect: "つなぎ直す"
|
||||
connect: "Twitterと接続する"
|
||||
disconnect: "さいならする"
|
||||
common/views/components/notification-settings.vue:
|
||||
title: "通知"
|
||||
mark-as-read-all-notifications: "すべての通知を既読にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
mark-as-read-all-talk-messages: "すべてのトークを既読にする"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
common/views/components/integration-settings.vue:
|
||||
title: "サービス連携"
|
||||
connect: "つなげる"
|
||||
disconnect: "接続をほかす"
|
||||
connected-to: "このアカウントと繋がっとるで"
|
||||
common/views/components/github-setting.vue:
|
||||
description: "お使いのGitHubアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでGitHubアカウント情報が表示されるようになったり、GitHubを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のGitHubアカウントに接続されています"
|
||||
detail: "詳細..."
|
||||
reconnect: "再接続する"
|
||||
description: "あんたがつことるTwitterアカウントをMisskeyアカウントに接続しとくと、あんさんのプロフィールにTwitterアカウント情報が表示されるようになったり、Twitterを使うた便利なサインインが使えるようになったりすんで。"
|
||||
connected-to: "次のGitHubアカウントに接続されとるで"
|
||||
detail: "くわしく..."
|
||||
reconnect: "つなぎ直す"
|
||||
connect: "GitHubと接続する"
|
||||
disconnect: "切断する"
|
||||
disconnect: "接続をほかす"
|
||||
common/views/components/discord-setting.vue:
|
||||
description: "お使いのDiscordアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでDiscordアカウント情報が表示されるようになったり、Discordを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のDiscordアカウントに接続されています"
|
||||
detail: "詳細..."
|
||||
reconnect: "再接続する"
|
||||
description: "あんたがつことるDiscordアカウントをMisskeyアカウントに接続しとくと、あんさんのプロフィールにDiscordアカウント情報が表示されるようになったり、Discordを使うた便利なサインインが使えるようになったりすんで。"
|
||||
connected-to: "次のDiscordアカウントに接続されとるで"
|
||||
detail: "くわしく..."
|
||||
reconnect: "つなぎ直す"
|
||||
connect: "Discordと接続する"
|
||||
disconnect: "切断する"
|
||||
disconnect: "接続をほかす"
|
||||
common/views/components/uploader.vue:
|
||||
waiting: "待っとる"
|
||||
common/views/components/visibility-chooser.vue:
|
||||
@@ -431,20 +443,27 @@ common/views/components/visibility-chooser.vue:
|
||||
followers-desc: "自分のフォロワー以外に見せんとって"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "今から言うユーザー以外に見せんとってや"
|
||||
private: "非公開"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-public-desc: "リモートへは公開しない"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
local-followers: "フォロワー (ローカルのみ)"
|
||||
local-public: "公開 (ローカルだけ)"
|
||||
local-public-desc: "リモートには見せへん"
|
||||
local-home: "ホーム (ローカルだけ)"
|
||||
local-followers: "フォロワー (ローカルだけ)"
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "流行は自分で作るんや"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語選んでや"
|
||||
recommended: "これええで"
|
||||
auto: "勝手にやる"
|
||||
specify-language: "言語選びや"
|
||||
info: "ページもっぺん読み込んだら反映したるで。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
account: "アカウント"
|
||||
location: "場所"
|
||||
description: "自己紹介"
|
||||
language: "言語"
|
||||
birthday: "誕生日"
|
||||
avatar: "アイコン"
|
||||
banner: "バナー"
|
||||
@@ -452,6 +471,7 @@ common/views/components/profile-editor.vue:
|
||||
is-bot: "このアカウントはBotやで"
|
||||
is-locked: "他人のフォローは許可してからや!"
|
||||
careful-bot: "Botからのフォローだけは許可制や"
|
||||
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する"
|
||||
advanced: "その他"
|
||||
privacy: "プライバシーってなんや?オカンの年齢か?"
|
||||
save: "保存"
|
||||
@@ -460,8 +480,15 @@ common/views/components/profile-editor.vue:
|
||||
upload-failed: "これアップロードでけへんわ"
|
||||
email: "メール設定"
|
||||
email-address: "メールアドレス"
|
||||
email-verified: "メールアドレスが確認されました"
|
||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
||||
email-verified: "このメールアドレスOKや!"
|
||||
email-not-verified: "メールアドレスが確認されとらん。メールボックスもっぺん見てくれへん?"
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "ユーザー"
|
||||
rename: "リスト名を変更"
|
||||
delete: "リストを削除"
|
||||
remove-user: "このリストから削除"
|
||||
delete-are-you-sure: "リスト「$1」を削除しますか?"
|
||||
deleted: "削除しました"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "見てみるわ…"
|
||||
no-broadcasts: "お知らせはあらへんで"
|
||||
@@ -474,9 +501,6 @@ common/views/widgets/calendar.vue:
|
||||
today: "今日:"
|
||||
this-month: "今月:"
|
||||
this-year: "今年:"
|
||||
common/views/widgets/donation.vue:
|
||||
title: "寄付のお願い"
|
||||
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かるんや。Misskeyは広告を掲載したりせんから、収入を皆様からの寄付に頼ってますねん。もし興味があるなら、{}までご連絡よろしゅう頼んます。ご協力おおきに。"
|
||||
common/views/widgets/photo-stream.vue:
|
||||
title: "フォトストリーム"
|
||||
no-photos: "写真はあらへんで"
|
||||
@@ -514,9 +538,11 @@ common/views/widgets/tips.vue:
|
||||
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができんで"
|
||||
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示してんねん"
|
||||
tips-line21: "APIをつこてbotの開発なども行えるで"
|
||||
tips-line23: "ウチのタコちゃんかわええやろ…今の突っ込むところや!"
|
||||
tips-line23: "藍かわいいよ藍"
|
||||
tips-line24: "Misskeyは2014年にサービスを開始したんよ"
|
||||
tips-line25: "対応ブラウザやったらMisskeyを開いとらんでも通知を受け取れんで"
|
||||
common/views/pages/not-found.vue:
|
||||
page-not-found: "ページが見つかりませんでした"
|
||||
common/views/pages/follow.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
following: "フォローしとる"
|
||||
@@ -545,7 +571,7 @@ desktop/views/components/activity.vue:
|
||||
title: "アクティビティ"
|
||||
toggle: "表示変える"
|
||||
desktop/views/components/calendar.vue:
|
||||
title: "{year}年 {month}月"
|
||||
title: "{year}年 {month} 月"
|
||||
prev: "前の月"
|
||||
next: "次の月"
|
||||
go: "クリックしてタイムリープ"
|
||||
@@ -652,10 +678,12 @@ desktop/views/components/note-detail.vue:
|
||||
location: "ここおるで:"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
desktop/views/components/note.vue:
|
||||
reply: "返す"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
detail: "もっと"
|
||||
private: "この投稿は見せられへんわ"
|
||||
deleted: "この投稿なんか無くなってもうたわ"
|
||||
@@ -687,7 +715,7 @@ desktop/views/components/post-form.vue:
|
||||
create-poll: "アンケートを作成"
|
||||
text-remain: "残り{}文字"
|
||||
recent-tags: "最近のタグ"
|
||||
local-only-message: "この投稿はローカルにのみ公開されます"
|
||||
local-only-message: "この投稿はローカルだけ公開されるで"
|
||||
click-to-tagging: "クリックでタグ付け"
|
||||
visibility: "公開範囲"
|
||||
geolocation-alert: "あんさんのつことる端末は位置情報に対応しとらんみたいやわ、知らんけど。"
|
||||
@@ -737,7 +765,7 @@ desktop/views/components/settings.vue:
|
||||
default-note-visibility: "もとからの公開範囲"
|
||||
remember-note-visibility: "投稿の公開範囲おぼえといて"
|
||||
web-search-engine: "ウェブ検索エンジン"
|
||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
||||
web-search-engine-desc: "例: https://www.google.com/?#q?{{query}}"
|
||||
auto-popout: "ウィンドウの自動ポップアウト"
|
||||
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトすんで。この設定はブラウザに記憶されんで。"
|
||||
advanced: "もっと設定"
|
||||
@@ -754,10 +782,13 @@ desktop/views/components/settings.vue:
|
||||
dark-mode: "夜にすんで"
|
||||
use-shadow: "UIに影付けたる"
|
||||
rounded-corners: "みんなまぁるくUI変更"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
circle-icons: "アイコンもタコ焼きも丸いやんな?"
|
||||
contrasted-acct: "ユーザー名ようわからんし見やすしといて"
|
||||
post-form-on-timeline: "タイムラインの上の方で投稿できるようにせえへん?"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示すんで"
|
||||
show-clock-on-header: "右上をカリヨン広場にする(時計表示)"
|
||||
show-reply-target: "どこにリプライするんや見せて"
|
||||
timeline: "タイムライン"
|
||||
@@ -765,28 +796,27 @@ desktop/views/components/settings.vue:
|
||||
show-renoted-my-notes: "わしのRenoteもタイムライン載せてくれや"
|
||||
show-local-renotes: "ローカル投稿のRenoteも見たいんや"
|
||||
show-maps: "地図勝手にバァーって開いてくれ"
|
||||
remain-deleted-note: "削除された投稿を表示し続ける"
|
||||
deck-column-align: "デッキのカラムの位置"
|
||||
remain-deleted-note: "削除された投稿も表示しっぱなしにする"
|
||||
deck-column-align: "デッキのカラムの配置"
|
||||
deck-column-align-center: "真ん中"
|
||||
deck-column-align-left: "左"
|
||||
deck-column-align-flexible: "フレキシブル"
|
||||
deck-column-width: "デッキのカラムの幅"
|
||||
deck-column-width-narrow: "狭"
|
||||
deck-column-width-narrower: "やや狭"
|
||||
deck-column-width-normal: "普通"
|
||||
deck-column-width-wider: "やや広"
|
||||
deck-column-width-wide: "広"
|
||||
sound: "サウンド"
|
||||
enable-sounds: "サウンド鳴らす"
|
||||
enable-sounds-desc: "投稿やメッセージもろたとき、音鳴らしたるわ。大丈夫や、この設定はブラウザが覚えてくれとる。"
|
||||
volume: "ボリューム"
|
||||
test: "テスト"
|
||||
language: "言語"
|
||||
pick-language: "言語選んでや"
|
||||
recommended: "おすすめ"
|
||||
auto: "自動"
|
||||
specify-language: "言語選んでくれ"
|
||||
language-desc: "変更はページの再度読み込み後に反映されんで。"
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "お掃除"
|
||||
cache-warn: "お掃除するとな、ブラウザが覚えてくれとるアカウントのあれこれや書きかけの投稿・返信・メッセージや設定情報なんかのデータが全部飛んでいくんや。これやったらページ再読込しといてな。"
|
||||
cache-cleared: "キャッシュお掃除したで"
|
||||
cache-cleared-desc: "もっぺんページ読みこみ直してくれや"
|
||||
auto-watch: "投稿勝手にウォッチしといてや"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を勝手に受け取るようにすんで。"
|
||||
about: "Misskeyってなんや?"
|
||||
operator: "このサーバー誰のや"
|
||||
update: "Misskey Update"
|
||||
@@ -825,6 +855,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "パスワードを入れてや"
|
||||
authenticator: "まず、Google Authenticatorとかのをつこてるデバイスにインストールしてや:"
|
||||
howtoinstall: "インストール方法はここやで"
|
||||
token: "トークン"
|
||||
scan: "んで、ここに出とるQRコードをスキャンしてな:"
|
||||
done: "最後にデバイスに表示されとるトークンを入力してな:"
|
||||
submit: "送信"
|
||||
@@ -839,13 +870,13 @@ common/views/components/api-settings.vue:
|
||||
token: "Token:"
|
||||
enter-password: "パスワードを入れてや"
|
||||
console:
|
||||
title: 'APIコンソール'
|
||||
endpoint: 'エンドポイント'
|
||||
parameter: 'パラメータ'
|
||||
credential-info: "「i」パラメータは自動で付与されます。"
|
||||
send: '送る'
|
||||
sending: '応答待っとる'
|
||||
response: 'こんなん返ってきたわ'
|
||||
title: "APIコンソール"
|
||||
endpoint: "エンドポイント"
|
||||
parameter: "パラメータ"
|
||||
credential-info: "「i」パラメータは勝手に付くで。"
|
||||
send: "送る"
|
||||
sending: "応答待っとる"
|
||||
response: "こんなん返ってきたわ"
|
||||
desktop/views/components/settings.apps.vue:
|
||||
no-apps: "連携しているアプリケーションはあらへんで"
|
||||
common/views/components/drive-settings.vue:
|
||||
@@ -859,8 +890,8 @@ common/views/components/mute-and-block.vue:
|
||||
no-muted-users: "ミュートしとるユーザーはおらんで"
|
||||
no-blocked-users: "ブロックしとるユーザーはおらんで"
|
||||
word-mute: "ワードミュート"
|
||||
muted-words: "ミュートされたキーワード"
|
||||
muted-words-description: "スペースで区切るとAND指定になり、改行で区切るとOR指定になります"
|
||||
muted-words: "ミュートしとるキーワード"
|
||||
muted-words-description: "スペースで区切るとAND指定で、改行で区切るとOR指定や"
|
||||
save: "保存"
|
||||
common/views/components/password-settings.vue:
|
||||
reset: "パスワード変える"
|
||||
@@ -869,11 +900,17 @@ common/views/components/password-settings.vue:
|
||||
enter-new-password-again: "もっぺん入れてや"
|
||||
not-match: "パスワードがおうとらん"
|
||||
changed: "パスワード変えたわ"
|
||||
failed: "パスワード変更に失敗しました"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "この投稿は見せられへんわ"
|
||||
deleted: "この投稿なんか無くなってもうたわ"
|
||||
media-count: "{}つのメディア"
|
||||
poll: "アンケート"
|
||||
desktop/views/components/settings.tags.vue:
|
||||
title: "タグ"
|
||||
query: "クエリ (省略可)"
|
||||
add: "追加"
|
||||
save: "保存"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "タスクマネージャ"
|
||||
desktop/views/components/timeline.vue:
|
||||
@@ -956,56 +993,57 @@ admin/views/instance.vue:
|
||||
instance-description: "インスタンスの紹介"
|
||||
host: "ホスト"
|
||||
banner-url: "バナー画像URL"
|
||||
error-image-url: "エラー画像URL"
|
||||
languages: "インスタンスの対象言語"
|
||||
languages-desc: "スペースで区切って複数設定できます。"
|
||||
languages-desc: "スペースで区切って複数設定できるで。"
|
||||
maintainer-config: "管理者情報"
|
||||
maintainer-name: "管理者名"
|
||||
maintainer-email: "管理者の連絡先"
|
||||
drive-config: "ドライブの設定"
|
||||
cache-remote-files: "リモートのファイルをキャッシュする"
|
||||
cache-remote-files-desc: "この設定を無効にすると、リモートファイルをキャッシュせず直リンクするようになります。そのためサーバーのストレージを節約できますが、プライバシー設定で直リンクを無効にしているユーザーにはファイルが見えなくなったり、サムネイルが生成されないので通信量が増加します。通常はこの設定をオンにしておくことをおすすめします。"
|
||||
cache-remote-files-desc: "この設定を無効にすると、リモートファイルをこっちで保管せずに直接リンク張るようになるで。サーバーのストレージは軽くやろうけど、プライバシー設定で直リンクを向こうにしとるユーザーはファイルが見れへんし、サムネイルが無いから通信量が増えたりするから、普通はオンにしといてな。"
|
||||
local-drive-capacity-mb: "ローカルユーザーひとりあたりのドライブ容量"
|
||||
remote-drive-capacity-mb: "リモートユーザーひとりあたりのドライブ容量"
|
||||
mb: "メガバイト単位"
|
||||
recaptcha-config: "reCAPTCHAの設定"
|
||||
recaptcha-info: "reCAPTCHAを有効にする場合、reCAPTCHAトークンを取得する必要があります。https://www.google.com/recaptcha/intro/ にアクセスしてトークンを取得してください。"
|
||||
recaptcha-info: "reCAPTCHAを有効にするにはreCAPTCHAトークンが要るで。https://www.google.com/recaptcha/intro/ にアクセスしてトークンを取得してな。"
|
||||
enable-recaptcha: "reCAPTCHAを有効にする"
|
||||
recaptcha-site-key: "reCAPTCHA site key"
|
||||
recaptcha-secret-key: "reCAPTCHA secret key"
|
||||
twitter-integration-config: "Twitter連携の設定"
|
||||
twitter-integration-info: "コールバックURLは {url} に設定します。"
|
||||
twitter-integration-info: "コールバックURLは {url} に設定してや。"
|
||||
enable-twitter-integration: "Twitter連携を有効にする"
|
||||
twitter-integration-consumer-key: "Consumer key"
|
||||
twitter-integration-consumer-secret: "Consumer secret"
|
||||
github-integration-config: "GitHub連携の設定"
|
||||
github-integration-info: "コールバックURLは {url} に設定します。"
|
||||
enable-github-integration: "GitHub連携を有効にする"
|
||||
github-integration-info: "コールバックURLは {url} に設定してや。"
|
||||
enable-github-integration: "GitHub連携を使えるようにする"
|
||||
github-integration-client-id: "Client ID"
|
||||
github-integration-client-secret: "Client Secret"
|
||||
discord-integration-config: "Discord連携の設定"
|
||||
discord-integration-info: "コールバックURLは {url} に設定します。"
|
||||
discord-integration-info: "コールバックURLは {url} に設定してや。"
|
||||
enable-discord-integration: "Discord連携を有効にする"
|
||||
discord-integration-client-id: "Client ID"
|
||||
discord-integration-client-secret: "Client Secret"
|
||||
proxy-account-config: "プロキシアカウントの設定"
|
||||
proxy-account-info: "プロキシアカウントは、特定の条件下でユーザーのリモートフォローを代行するアカウントです。例えば、ユーザーがリモートユーザーをリストに入れたとき、リストに入れられたユーザーを誰もフォローしていないとアクティビティがサーバーに配達されないため、代わりにプロキシアカウントがフォローするようにします。"
|
||||
proxy-account-info: "プロキシアカウントは、代わりにフォローしてくれるアカウントや。例えば、551に豚まんが無いときやったり、ユーザーがリモートユーザーをアカウントに入れたとき、リストに入れられたユーザーが誰からもフォローされてないと寂しいやん。寂しいし、アクティビティも配達されへんから、プロキシアカウントがフォローしてくれるで。ええやつやん…"
|
||||
proxy-account-username: "プロキシアカウントのユーザー名"
|
||||
proxy-account-username-desc: "プロキシとして使用するアカウントのユーザー名を指定してください。"
|
||||
proxy-account-warn: "アカウントは自動で作られないため、そのユーザー名のアカウントを予め作成しておく必要があります。"
|
||||
proxy-account-username-desc: "プロキシとして使用するアカウントのユーザー名を指定してや"
|
||||
proxy-account-warn: "アカウント作るんはあんたがやってや。あんたのおかんもMisskeyもやってくれへんで。"
|
||||
max-note-text-length: "投稿の最大文字数"
|
||||
disable-registration: "ユーザー登録の受付を停止する"
|
||||
disable-local-timeline: "ローカルタイムラインを無効にする"
|
||||
invite: "招待"
|
||||
disable-registration: "ユーザー登録の受付を止める"
|
||||
disable-local-timeline: "ローカルタイムラインを使えんようにする"
|
||||
invite: "来てや"
|
||||
save: "保存"
|
||||
saved: "保存しました"
|
||||
user-recommendation-config: "おすすめユーザー"
|
||||
enable-external-user-recommendation: "外部ユーザーレコメンデーションを有効にする"
|
||||
saved: "保存したで!"
|
||||
user-recommendation-config: "このユーザーええで"
|
||||
enable-external-user-recommendation: "外部ユーザーレコメンデーションを使えるようにする"
|
||||
external-user-recommendation-engine: "エンジン"
|
||||
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
||||
external-user-recommendation-timeout: "タイムアウト"
|
||||
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
|
||||
email-config: "メールサーバーの設定"
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使うで。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
email: "メールアドレス"
|
||||
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||
@@ -1014,6 +1052,12 @@ admin/views/instance.vue:
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
smtp-pass: "SMTPパスワード"
|
||||
serviceworker-config: "ServiceWorker"
|
||||
enable-serviceworker: "ServiceWorkerを有効にする"
|
||||
serviceworker-info: "プッシュ通知を行うには有効する必要があります。"
|
||||
vapid-publickey: "VAPID公開鍵"
|
||||
vapid-privatekey: "VAPID秘密鍵"
|
||||
vapid-info: "ServiceWorkerを有効にする場合、VAPIDキーペアを生成する必要があります。シェルで次のようにします:"
|
||||
admin/views/charts.vue:
|
||||
title: "チャート"
|
||||
per-day: "1日ごと"
|
||||
@@ -1039,13 +1083,29 @@ admin/views/charts.vue:
|
||||
network-requests: "リクエスト"
|
||||
network-time: "応答時間"
|
||||
network-usage: "通信量"
|
||||
admin/views/drive.vue:
|
||||
sort:
|
||||
title: "ソート"
|
||||
createdAtAsc: "アップロード日時が古い順"
|
||||
createdAtDesc: "アップロード日時が新しい順"
|
||||
sizeAsc: "サイズが小さい順"
|
||||
sizeDesc: "サイズが大きい順"
|
||||
origin:
|
||||
title: "オリジン"
|
||||
combined: "ローカル+リモート"
|
||||
local: "ローカル"
|
||||
remote: "リモート"
|
||||
delete: "削除"
|
||||
deleted: "削除しました"
|
||||
mark-as-sensitive: "閲覧注意に設定"
|
||||
unmark-as-sensitive: "閲覧注意を解除"
|
||||
admin/views/users.vue:
|
||||
operation: "操作"
|
||||
username-or-userid: "ユーザー名またはユーザーID"
|
||||
user-not-found: "ユーザーが見つかりません"
|
||||
user-not-found: "ユーザーが見つからへん!"
|
||||
lookup: "照会"
|
||||
reset-password: "パスワードをリセット"
|
||||
password-updated: "パスワードは現在「{password}」です"
|
||||
password-updated: "パスワードは現在「{password} 」やで"
|
||||
suspend: "凍結"
|
||||
suspended: "凍結しました"
|
||||
unsuspend: "凍結の解除"
|
||||
@@ -1162,14 +1222,15 @@ desktop/views/pages/user/user.profile.vue:
|
||||
muted: "ミュートしとるで"
|
||||
unmute: "ミュート解除"
|
||||
block: "ブロックする"
|
||||
unblock: "ブロック解除"
|
||||
block-confirm: "このユーザーをブロックしますか?"
|
||||
unblock: "ブロックやめたる"
|
||||
block-confirm: "このユーザーをブロックしてええか?"
|
||||
push-to-a-list: "リストに追加"
|
||||
list-pushed: "{user}を{list}に追加したで。"
|
||||
desktop/views/pages/user/user.header.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
is-bot: "このアカウントはBotや"
|
||||
years-old: "{age}歳"
|
||||
year: "年"
|
||||
@@ -1179,6 +1240,7 @@ desktop/views/pages/user/user.timeline.vue:
|
||||
default: "投稿"
|
||||
with-replies: "投稿と返信"
|
||||
with-media: "メディア"
|
||||
my-posts: "私の投稿"
|
||||
empty: "このユーザーはまだ何も投稿しとらんようや。"
|
||||
desktop/views/widgets/messaging.vue:
|
||||
title: "メッセージ"
|
||||
@@ -1239,11 +1301,11 @@ mobile/views/components/media-video.vue:
|
||||
sensitive: "ちょっと見せられへんわ"
|
||||
click-to-show: "押してみ、見せたるわ"
|
||||
common/views/components/follow-button.vue:
|
||||
following: "フォロー中"
|
||||
following: "フォローしとる"
|
||||
follow: "フォロー"
|
||||
request-pending: "フォロー許可待ち"
|
||||
follow-processing: "フォロー処理中"
|
||||
follow-request: "フォロー申請"
|
||||
request-pending: "フォロー許してくれるん待っとる"
|
||||
follow-processing: "今フォロー処理やっとる‥"
|
||||
follow-request: "フォローさせてや!言うてみる"
|
||||
mobile/views/components/friends-maker.vue:
|
||||
title: "おもろそうやな"
|
||||
empty: "おすすめのユーザーはおらん。"
|
||||
@@ -1329,7 +1391,7 @@ mobile/views/pages/home.vue:
|
||||
mentions: "あんた宛て"
|
||||
messages: "メッセージ"
|
||||
mobile/views/pages/tag.vue:
|
||||
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿は見つかりませんでした。"
|
||||
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿はあらへんかった。"
|
||||
mobile/views/pages/welcome.vue:
|
||||
signup: "新規登録"
|
||||
mobile/views/pages/widgets.vue:
|
||||
@@ -1356,16 +1418,11 @@ mobile/views/pages/games/reversi.vue:
|
||||
reversi: "リバーシ"
|
||||
mobile/views/pages/search.vue:
|
||||
search: "探す"
|
||||
not-found: "「{q}」に関する投稿は見つかりませんでした。"
|
||||
not-found: "ワイは「{q}」なんて投稿知らんわ、無いんちゃう?知らんけど。"
|
||||
mobile/views/pages/selectdrive.vue:
|
||||
select-file: "ファイル選んでや"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "あんたは橋の下で拾った{}や!"
|
||||
lang: "言語"
|
||||
lang-tip: "ページもっぺん読み込んだら反映したるで。"
|
||||
recommended: "これええで"
|
||||
auto: "勝手にやる"
|
||||
specify-language: "言語選びや"
|
||||
design: "見た感じ"
|
||||
dark-mode: "ナイトゲームや!"
|
||||
i-am-under-limited-internet: "電波と阪神がザコいんや"
|
||||
@@ -1382,29 +1439,16 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知どこ見せる?"
|
||||
notification-position-bottom: "ミナミの方"
|
||||
notification-position-top: "キタの方"
|
||||
theme: "テーマ"
|
||||
behavior: "動き"
|
||||
fetch-on-scroll: "スクロールしたらもっと見せてや"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
default-note-visibility: "もとからの公開範囲"
|
||||
remember-note-visibility: "投稿の公開範囲おぼえといて"
|
||||
web-search-engine: "ウェブ検索エンジン"
|
||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
||||
web-search-engine-desc: "例: https://www.google.com/?#q?{{query}}"
|
||||
disable-via-mobile: "「モバイルからの投稿」フラグなんて要らんわ"
|
||||
load-raw-images: "添付された画像もべっぴんさんのままにしといてな"
|
||||
load-remote-media: "東京とか、リモートサーバーのメディアも見せてや"
|
||||
twitter: "鳥さんとも連携や!"
|
||||
twitter-connect: "鳥さん邪魔すんで"
|
||||
twitter-reconnect: "もっぺん繋ぎ直すで"
|
||||
twitter-disconnect: "邪魔するんやったら帰って"
|
||||
github: "GitHub連携"
|
||||
github-connect: "GitHubアカウントに接続する"
|
||||
github-reconnect: "再接続する"
|
||||
github-disconnect: "切断する"
|
||||
discord: "Discord連携"
|
||||
discord-connect: "Discordアカウントに接続する"
|
||||
discord-reconnect: "再接続する"
|
||||
discord-disconnect: "切断する"
|
||||
update: "あんたのMisskeyいつのや?"
|
||||
version: "バージョン:"
|
||||
latest-version: "いっちゃん新しいやつ:"
|
||||
@@ -1418,7 +1462,6 @@ mobile/views/pages/settings.vue:
|
||||
signout: "さいなら"
|
||||
sound: "サウンド"
|
||||
enable-sounds: "サウンド鳴らす"
|
||||
mark-as-read-all-unread-notes: "全部もう読んだわ"
|
||||
password: "パスワード"
|
||||
mobile/views/pages/user.vue:
|
||||
follows-you: "フォローされとるで"
|
||||
@@ -1428,12 +1471,14 @@ mobile/views/pages/user.vue:
|
||||
overview: "こんなやつ"
|
||||
timeline: "タイムライン"
|
||||
media: "メディア"
|
||||
is-suspended: "このユーザーはあかんわ。凍結されとる。"
|
||||
mute: "ミュート"
|
||||
unmute: "ミュート解除"
|
||||
unmute: "ミュートやめたる"
|
||||
block: "ブロック"
|
||||
unblock: "ブロックやめたる"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに入れたる"
|
||||
select-list: "リスト選んでや"
|
||||
list-pushed: "{user}を{list}に追加したで"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "最近儲かりまっか?"
|
||||
images: "画像"
|
||||
@@ -1458,32 +1503,33 @@ deck:
|
||||
hybrid: "ソーシャル"
|
||||
hashtag: "ハッシュタグ"
|
||||
global: "グローバル"
|
||||
mentions: "あなた宛て"
|
||||
mentions: "あんた宛て"
|
||||
direct: "ダイレクト投稿"
|
||||
notifications: "通知"
|
||||
list: "リスト"
|
||||
swap-left: "左に移動"
|
||||
swap-right: "右に移動"
|
||||
swap-up: "上に移動"
|
||||
swap-down: "下に移動"
|
||||
remove: "カラムを削除"
|
||||
add-column: "カラムを追加"
|
||||
rename: "名前を変更"
|
||||
stack-left: "左に重ねる"
|
||||
pop-right: "右に出す"
|
||||
swap-left: "左に移動や!"
|
||||
swap-right: "右に移動や!"
|
||||
swap-up: "上に移動や!"
|
||||
swap-down: "下に移動や!"
|
||||
remove: "カラムにさいなら"
|
||||
add-column: "カラム増やす"
|
||||
rename: "名前を変えるで"
|
||||
stack-left: "左に重ねんで!"
|
||||
pop-right: "右に出すで!"
|
||||
deck/deck.tl-column.vue:
|
||||
is-media-only: "メディア投稿のみ"
|
||||
is-media-only: "メディア投稿だけや"
|
||||
is-media-view: "メディアビュー"
|
||||
edit: "オプション"
|
||||
deck/deck.user-column.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
images: "画像"
|
||||
activity: "アクティビティ"
|
||||
timeline: "タイムライン"
|
||||
pinned-notes: "ピン留めされた投稿"
|
||||
push-to-a-list: "リストに追加"
|
||||
pinned-notes: "ピン留めしはった投稿"
|
||||
push-to-a-list: "リストに入れたる"
|
||||
docs:
|
||||
edit-this-page-on-github: "間違いや改善点を見つけましたか?"
|
||||
edit-this-page-on-github-link: "このページをGitHubで編集"
|
||||
|
||||
@@ -90,7 +90,6 @@ common:
|
||||
followers-desc: "자신의 팔로워에게만 공개"
|
||||
specified: "다이렉트"
|
||||
specified-desc: "지정한 사용자에게만 공개"
|
||||
private: "비공개"
|
||||
local-public: "공개 (로컬 한정)"
|
||||
local-home: "홈 (로컬 한정)"
|
||||
local-followers: "팔로워 (로컬 한정)"
|
||||
@@ -110,9 +109,10 @@ common:
|
||||
my-token-regenerated: "당신의 토큰이 업데이트되었으므로 로그아웃합니다."
|
||||
i-like-sushi: "저는 (푸딩보다 차라리) 초밥이 좋아요"
|
||||
show-reversi-board-labels: "리버시 보드의 행과 열 레이블을 표시"
|
||||
use-contrast-reversi-stones: "리버시 아이콘의 대비를 높이기"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "공식 계정"
|
||||
disable-animated-mfm: "글의 문자 애니메이션을 비활성화"
|
||||
suggest-recent-hashtags: "최근 해시태그를 글 작성란에 표시"
|
||||
always-show-nsfw: "항상 열람주의 미디어를 표시"
|
||||
always-mark-nsfw: "항상 미디어를 열람주의로 설정하여 게시"
|
||||
show-full-acct: "사용자명의 호스트를 표시하지 않기"
|
||||
@@ -120,14 +120,15 @@ common:
|
||||
reduce-motion: "UI의 애니메이션 줄이기"
|
||||
this-setting-is-this-device-only: "이 장치만"
|
||||
use-os-default-emojis: "운영체제의 기본 이모지 사용"
|
||||
do-not-use-in-production: '이것은 개발 빌드입니다. 프로덕션 환경에서 사용하지 마십시오.'
|
||||
do-not-use-in-production: "이것은 개발 빌드입니다. 프로덕션 환경에서 사용하지 마십시오."
|
||||
user-suspended: "이 사용자는 정지된 상태입니다."
|
||||
is-remote-user: "이 유저 정보는 복사본입니다."
|
||||
is-remote-post: "이 글 정보는 복사본입니다."
|
||||
view-on-remote: "정확한 정보 보기"
|
||||
renoted-by: "{user}이(가) Renote"
|
||||
renoted-by: "{user}이(가) 리노트"
|
||||
error:
|
||||
title: '오류가 발생했습니다'
|
||||
retry: '다시 시도'
|
||||
title: "오류가 발생했습니다"
|
||||
retry: "다시 시도"
|
||||
reversi:
|
||||
drawn: "무승부"
|
||||
my-turn: "당신의 차례입니다"
|
||||
@@ -158,12 +159,12 @@ common:
|
||||
polls: "투표"
|
||||
post-form: "게시 양식"
|
||||
server: "서버 정보"
|
||||
donation: "기부 요청"
|
||||
nav: "내비게이션"
|
||||
tips: "팁"
|
||||
hashtags: "해시태그"
|
||||
dev: "앱을 만드는 데 실패했습니다. 다시 시도하시기 바랍니다."
|
||||
ai-chan-kawaii: "아이쨩 귀여워"
|
||||
you: "당신"
|
||||
auth/views/form.vue:
|
||||
share-access: "<i>{name}</i>가 당신의 계정에 엑세스하도록 허용하시겠습니까?"
|
||||
permission-ask: "이 앱은 다음의 권한을 요청합니다:"
|
||||
@@ -259,6 +260,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "열람주의"
|
||||
click-to-show: "클릭하여 표시"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "다크 모드가 아닐 때 사용하는 테마"
|
||||
dark-theme: "다크 모드일 때 사용하는 테마"
|
||||
light-themes: "밝은 테마"
|
||||
@@ -275,6 +277,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "기본 테마"
|
||||
base-theme-light: "밝음"
|
||||
base-theme-dark: "어두움"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "테마명"
|
||||
preview-created-theme: "미리보기"
|
||||
invalid-theme: "테마가 올바르지 않습니다."
|
||||
@@ -296,6 +299,9 @@ common/views/components/theme.vue:
|
||||
common/views/components/cw-button.vue:
|
||||
hide: "숨기기"
|
||||
show: "더 보기"
|
||||
chars: "{count}문자"
|
||||
files: "{count}파일"
|
||||
poll: "투표"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "사용자 찾기"
|
||||
you: "당신"
|
||||
@@ -325,6 +331,7 @@ common/views/components/nav.vue:
|
||||
develop: "개발자"
|
||||
feedback: "피드백"
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "멘션"
|
||||
detail: "상세"
|
||||
copy-link: "링크 복사"
|
||||
favorite: "이 노트 즐겨찾기"
|
||||
@@ -351,7 +358,7 @@ common/views/components/reaction-picker.vue:
|
||||
choose-reaction: "반응 선택"
|
||||
common/views/components/emoji-picker.vue:
|
||||
custom-emoji: "커스텀 이모지"
|
||||
people: "명"
|
||||
people: "사람들"
|
||||
animals-and-nature: "동물 & 자연"
|
||||
food-and-drink: "음식 & 음료"
|
||||
activity: "활동"
|
||||
@@ -400,13 +407,18 @@ common/views/components/stream-indicator.vue:
|
||||
connecting: "연결중"
|
||||
reconnecting: "다시 연결 중"
|
||||
connected: "연결 완료"
|
||||
common/views/components/twitter-setting.vue:
|
||||
description: "사용중이신 Twitter 계정을 Misskey 계정에 연결하면 프로필에 Twitter 정보가 표시되고, Twitter를 사용하여 편리하게 로그인할 수 있습니다."
|
||||
connected-to: "다음 Twitter 계정에 연결되어 있습니다"
|
||||
detail: "자세히..."
|
||||
reconnect: "다시 연결"
|
||||
connect: "Twitter와 연결하기"
|
||||
common/views/components/notification-settings.vue:
|
||||
title: "알림"
|
||||
mark-as-read-all-notifications: "모든 알림을 읽은 상태로 표시"
|
||||
mark-as-read-all-unread-notes: "모든 글을 읽은 상태로 표시"
|
||||
mark-as-read-all-talk-messages: "모든 대화를 읽은 상태로 표시"
|
||||
auto-watch: "글 자동 감시"
|
||||
auto-watch-desc: "리액션, 답글, 게시물에 대한 알림을 자동으로 받을 수 있도록 합니다."
|
||||
common/views/components/integration-settings.vue:
|
||||
title: "서비스 연계"
|
||||
connect: "접속"
|
||||
disconnect: "연결 끊기"
|
||||
connected-to: "다음 계정에 연결되어 있습니다"
|
||||
common/views/components/github-setting.vue:
|
||||
description: "사용중이신 Github 계정을 Misskey 계정에 연결하면 프로필에 Github 정보가 표시되고, Github를 사용하여 편리하게 로그인할 수 있습니다."
|
||||
connected-to: "다음 Github 계정에 연결되어 있습니다"
|
||||
@@ -431,7 +443,6 @@ common/views/components/visibility-chooser.vue:
|
||||
followers-desc: "자신의 팔로워에게만 공개"
|
||||
specified: "다이렉트"
|
||||
specified-desc: "지정한 사용자에게만 공개"
|
||||
private: "비공개"
|
||||
local-public: "공개 (로컬 한정)"
|
||||
local-public-desc: "원격에는 공개하지 않음"
|
||||
local-home: "홈 (로컬 한정)"
|
||||
@@ -439,12 +450,20 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}명이 언급함"
|
||||
empty: "트렌드 없음"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "표시 언어"
|
||||
pick-language: "언어 설정"
|
||||
recommended: "추천"
|
||||
auto: "자동"
|
||||
specify-language: "언어 지정"
|
||||
info: "변경사항은 페이지를 새로고침한 뒤에 반영됩니다."
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "프로필"
|
||||
name: "이름"
|
||||
account: "계정"
|
||||
location: "장소"
|
||||
description: "자기소개"
|
||||
language: "언어"
|
||||
birthday: "생일"
|
||||
avatar: "아바타"
|
||||
banner: "배너"
|
||||
@@ -452,6 +471,7 @@ common/views/components/profile-editor.vue:
|
||||
is-bot: "이 계정은 Bot입니다"
|
||||
is-locked: "팔로우를 수동으로 승인"
|
||||
careful-bot: "Bot의 팔로우만 수동으로 승인"
|
||||
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する"
|
||||
advanced: "기타"
|
||||
privacy: "프라이버시"
|
||||
save: "저장"
|
||||
@@ -462,6 +482,13 @@ common/views/components/profile-editor.vue:
|
||||
email-address: "메일 주소"
|
||||
email-verified: "매일 주소가 확인되었습니다"
|
||||
email-not-verified: "메일 주소가 확인되지 않았습니다. 받은 편지함을 확인하여 주시기 바랍니다."
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "사용자"
|
||||
rename: "리스트 이름 바꾸기"
|
||||
delete: "리스트 삭제"
|
||||
remove-user: "이 리스트에서 제거"
|
||||
delete-are-you-sure: "리스트 \"$1\"을 삭제하시겠습니까?"
|
||||
deleted: "삭제하였습니다"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "확인중"
|
||||
no-broadcasts: "공지사항이 없습니다"
|
||||
@@ -474,9 +501,6 @@ common/views/widgets/calendar.vue:
|
||||
today: "오늘:"
|
||||
this-month: "이번 달:"
|
||||
this-year: "올해:"
|
||||
common/views/widgets/donation.vue:
|
||||
title: "기부 요청"
|
||||
text: "Misskey의 운영에는 도메인, 서버 등의 비용이 들어갑니다. Misskey는 광고를 게시하거나 하지 않으므로 수입을 여러분의 기부금에 의존하고 있습니다. 혹시 관심있으시다면 {}로 연락해주시기 바랍니다. 협력해주셔서 감사합니다."
|
||||
common/views/widgets/photo-stream.vue:
|
||||
title: "포토 스트림"
|
||||
no-photos: "사진이 없습니다"
|
||||
@@ -514,9 +538,11 @@ common/views/widgets/tips.vue:
|
||||
tips-line19: "몇몇 창은 브라우저 밖으로 분리할 수 있습니다"
|
||||
tips-line20: "달력 위젯의 퍼센트는 경과된 비율을 나타냅니다"
|
||||
tips-line21: "API를 사용하여 bot의 개발 등을 할 수 있습니다"
|
||||
tips-line23: "마유 귀여워요 마유"
|
||||
tips-line23: "아이 귀여워요 아이"
|
||||
tips-line24: "Misskey는 2014년에 서비스를 시작했습니다"
|
||||
tips-line25: "대응하는 브라우저인 경우 Misskey를 열어놓지 않아도 알림을 받을 수 있습니다"
|
||||
common/views/pages/not-found.vue:
|
||||
page-not-found: "페이지를 찾을 수 없습니다"
|
||||
common/views/pages/follow.vue:
|
||||
signed-in-as: "{}으로 로그인"
|
||||
following: "팔로우 중"
|
||||
@@ -650,12 +676,14 @@ desktop/views/components/note-detail.vue:
|
||||
private: "이 글은 비공개입니다"
|
||||
deleted: "이 글은 삭제되었습니다"
|
||||
location: "위치 정보"
|
||||
renote: "Renote"
|
||||
renote: "리노트"
|
||||
add-reaction: "리액션 추가"
|
||||
undo-reaction: "리액션 취소"
|
||||
desktop/views/components/note.vue:
|
||||
reply: "답글 달기"
|
||||
renote: "Renote"
|
||||
renote: "리노트"
|
||||
add-reaction: "리액션 추가"
|
||||
undo-reaction: "리액션 취소"
|
||||
detail: "상세"
|
||||
private: "이 글은 비공개입니다"
|
||||
deleted: "이 글은 삭제되었습니다"
|
||||
@@ -672,13 +700,13 @@ desktop/views/components/post-form.vue:
|
||||
quote-placeholder: "이 글을 인용..."
|
||||
submit: "글쓰기"
|
||||
reply: "답글 달기"
|
||||
renote: "Renote"
|
||||
renote: "리노트"
|
||||
posted: "게시하였습니다!"
|
||||
replied: "답글을 달았습니다!"
|
||||
reposted: "Renote 하였습니다!"
|
||||
reposted: "리노트 하였습니다!"
|
||||
note-failed: "게시에 실패하였습니다"
|
||||
reply-failed: "답글을 달지 못했습니다"
|
||||
renote-failed: "Renote에 실패하였습니다"
|
||||
renote-failed: "리노트에 실패하였습니다"
|
||||
posting: "게시중"
|
||||
attach-media-from-local: "PC에서 미디어 첨부"
|
||||
attach-media-from-drive: "드라이브에서 미디어 첨부"
|
||||
@@ -704,13 +732,13 @@ desktop/views/components/progress-dialog.vue:
|
||||
desktop/views/components/renote-form.vue:
|
||||
quote: "인용하기..."
|
||||
cancel: "취소"
|
||||
renote: "Renote"
|
||||
renote-home: "Renote (Home)"
|
||||
renote: "리노트"
|
||||
renote-home: "리노트 (홈)"
|
||||
reposting: "작업중입니다..."
|
||||
success: "Renote 성공!"
|
||||
failure: "Renote에 실패하였습니다"
|
||||
success: "리노트 하였습니다!"
|
||||
failure: "리노트에 실패하였습니다"
|
||||
desktop/views/components/renote-form-window.vue:
|
||||
title: "이 게시물을 Renote 하시겠습니까?"
|
||||
title: "이 글을 리노트하시겠습니까?"
|
||||
desktop/views/pages/user-following-or-followers.vue:
|
||||
following: "{user}의 팔로잉"
|
||||
followers: "{user}의 팔로워"
|
||||
@@ -754,39 +782,41 @@ desktop/views/components/settings.vue:
|
||||
dark-mode: "다크 모드"
|
||||
use-shadow: "UI에 그림자 효과 적용"
|
||||
rounded-corners: "UI의 모서리를 둥글게 설정"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
circle-icons: "원형 아이콘 사용"
|
||||
contrasted-acct: "사용자명에 대비 추가"
|
||||
post-form-on-timeline: "타임라인 상단에 글 작성란을 표시"
|
||||
suggest-recent-hashtags: "최근 해시태그를 글 작성란에 표시"
|
||||
show-clock-on-header: "오른쪽 상단에 시계 표시"
|
||||
show-reply-target: "답글 대상 표시"
|
||||
timeline: "타임라인"
|
||||
show-my-renotes: "내 Renote를 타임라인에 보이기"
|
||||
show-renoted-my-notes: "내 글이 Renote될 경우 타임라인에 보이기"
|
||||
show-local-renotes: "로컬 글의 Renote를 타임라인에 보이기"
|
||||
show-my-renotes: "내 리노트를 타임라인에 보이기"
|
||||
show-renoted-my-notes: "내 글이 리노트될 경우 타임라인에 보이기"
|
||||
show-local-renotes: "로컬 글의 리노트를 타임라인에 보이기"
|
||||
show-maps: "지도 자동 표시"
|
||||
remain-deleted-note: "삭제된 글을 계속 표시"
|
||||
deck-column-align: "덱의 칼럼 위치"
|
||||
deck-column-align-center: "가운데"
|
||||
deck-column-align-left: "왼쪽"
|
||||
deck-column-align-flexible: "플렉서블"
|
||||
deck-column-width: "덱의 칼럼 폭"
|
||||
deck-column-width-narrow: "좁음"
|
||||
deck-column-width-narrower: "조금 좁음"
|
||||
deck-column-width-normal: "보통"
|
||||
deck-column-width-wider: "조금 넓음"
|
||||
deck-column-width-wide: "넓음"
|
||||
sound: "소리"
|
||||
enable-sounds: "소리 사용"
|
||||
enable-sounds-desc: "글이나 메시지를 송수신하였을 때 소리를 재생합니다. 이 설정은 브라우저에 저장됩니다."
|
||||
volume: "음량"
|
||||
test: "테스트"
|
||||
language: "언어"
|
||||
pick-language: "언어 설정"
|
||||
recommended: "추천"
|
||||
auto: "자동"
|
||||
specify-language: "언어 지정"
|
||||
language-desc: "변경사항은 페이지를 새로고침한 뒤에 반영됩니다."
|
||||
cache: "캐시"
|
||||
clean-cache: "지우기"
|
||||
cache-warn: "지우기를 실행하면 브라우저에 저장된 계정 정보 캐시, 글이나 답글 및 메시지의 임시 저장, 그 외 데이터 (설정 정보 포함) 가 삭제 됩니다. 지우기 작업을 수행한 후 페이지를 다시 로드해야 합니다."
|
||||
cache-cleared: "캐시를 삭제하였습니다"
|
||||
cache-cleared-desc: "페이지를 새로고침해 주십시오."
|
||||
auto-watch: "글 자동 감시"
|
||||
auto-watch-desc: "리액션, 답글, 게시물에 대한 알림을 자동으로 받을 수 있도록 합니다."
|
||||
about: "Misskey에 대하여"
|
||||
operator: "이 서버의 운영자"
|
||||
update: "Misskey Update"
|
||||
@@ -825,6 +855,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "비밀번호를 입력하여 주십시오"
|
||||
authenticator: "먼저, 가지고 계신 장치에 Google Authenticator를 설치해야 합니다:"
|
||||
howtoinstall: "설치 방법은 여기에 있습니다"
|
||||
token: "トークン"
|
||||
scan: "다음으로 표시되어 있는 QR 코드를 스캔합니다:"
|
||||
done: "사용중이신 장치에 표시된 토큰을 입력해주시면 마무리됩니다:"
|
||||
submit: "완료"
|
||||
@@ -839,13 +870,13 @@ common/views/components/api-settings.vue:
|
||||
token: "Token:"
|
||||
enter-password: "비밀번호를 입력하여 주십시오"
|
||||
console:
|
||||
title: 'API 콘솔'
|
||||
endpoint: '엔드포인트'
|
||||
parameter: '매개변수'
|
||||
title: "API 콘솔"
|
||||
endpoint: "엔드포인트"
|
||||
parameter: "매개변수"
|
||||
credential-info: "\"i\" 패러미터는 자동으로 추가됩니다."
|
||||
send: '전송'
|
||||
sending: '응답을 기다리는 중'
|
||||
response: '결과'
|
||||
send: "전송"
|
||||
sending: "응답을 기다리는 중"
|
||||
response: "결과"
|
||||
desktop/views/components/settings.apps.vue:
|
||||
no-apps: "연결된 어플리케이션이 없습니다"
|
||||
common/views/components/drive-settings.vue:
|
||||
@@ -869,11 +900,17 @@ common/views/components/password-settings.vue:
|
||||
enter-new-password-again: "다시 한 번 새 비밀번호를 입력하여 주십시오"
|
||||
not-match: "새 비밀번호가 일치하지 않습니다"
|
||||
changed: "비밀번호를 변경하였습니다"
|
||||
failed: "비밀번호 변경을 실패하였습니다."
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "이 글은 비공개입니다"
|
||||
deleted: "이 글은 삭제되었습니다"
|
||||
media-count: "{}개의 미디어"
|
||||
poll: "투표"
|
||||
desktop/views/components/settings.tags.vue:
|
||||
title: "태그"
|
||||
query: "쿼리 (생략 가능)"
|
||||
add: "추가"
|
||||
save: "저장"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "작업 관리자"
|
||||
desktop/views/components/timeline.vue:
|
||||
@@ -956,6 +993,7 @@ admin/views/instance.vue:
|
||||
instance-description: "인스턴스의 소개"
|
||||
host: "관리자"
|
||||
banner-url: "배너 이미지 URL"
|
||||
error-image-url: "오류 이미지 URL"
|
||||
languages: "인스턴스의 대상 언어"
|
||||
languages-desc: "공백으로 구분하여 여러 개 설정할 수 있습니다."
|
||||
maintainer-config: "관리자 정보"
|
||||
@@ -1014,6 +1052,12 @@ admin/views/instance.vue:
|
||||
smtp-port: "SMTP 포트"
|
||||
smtp-user: "SMTP 사용자"
|
||||
smtp-pass: "SMTP 비밀번호"
|
||||
serviceworker-config: "ServiceWorker"
|
||||
enable-serviceworker: "ServiceWorker 사용"
|
||||
serviceworker-info: "푸시알림을 수행하려면 사용해야 합니다."
|
||||
vapid-publickey: "VAPID 공개키"
|
||||
vapid-privatekey: "VAPID 개인키"
|
||||
vapid-info: "ServiceWorker를 사용하는 경우 VAPID 키 쌍을 생성해야 합니다. 셸에서 다음과 같이 합니다:"
|
||||
admin/views/charts.vue:
|
||||
title: "차트"
|
||||
per-day: "1일마다"
|
||||
@@ -1039,6 +1083,22 @@ admin/views/charts.vue:
|
||||
network-requests: "요청"
|
||||
network-time: "응답시간"
|
||||
network-usage: "통신량"
|
||||
admin/views/drive.vue:
|
||||
sort:
|
||||
title: "정렬"
|
||||
createdAtAsc: "업로드 날짜 오랜 순"
|
||||
createdAtDesc: "업로드 날짜 최신순"
|
||||
sizeAsc: "크기가 작은 순"
|
||||
sizeDesc: "크기가 큰 순"
|
||||
origin:
|
||||
title: "출처"
|
||||
combined: "로컬 + 리모트"
|
||||
local: "로컬"
|
||||
remote: "리모트"
|
||||
delete: "삭제"
|
||||
deleted: "삭제하였습니다"
|
||||
mark-as-sensitive: "열람주의로 설정"
|
||||
unmark-as-sensitive: "열람주의 해제"
|
||||
admin/views/users.vue:
|
||||
operation: "작업"
|
||||
username-or-userid: "사용자명 혹은 사용자 ID"
|
||||
@@ -1170,6 +1230,7 @@ desktop/views/pages/user/user.header.vue:
|
||||
posts: "글"
|
||||
following: "팔로잉"
|
||||
followers: "팔로워"
|
||||
mention: "멘션"
|
||||
is-bot: "이 계정은 Bot입니다"
|
||||
years-old: "{age}세"
|
||||
year: "년"
|
||||
@@ -1179,6 +1240,7 @@ desktop/views/pages/user/user.timeline.vue:
|
||||
default: "글"
|
||||
with-replies: "글과 답글"
|
||||
with-media: "미디어"
|
||||
my-posts: "내 글"
|
||||
empty: "이 사용자는 아직 아무것도 게시하지 않은 것 같습니다."
|
||||
desktop/views/widgets/messaging.vue:
|
||||
title: "메시지"
|
||||
@@ -1274,7 +1336,7 @@ mobile/views/components/post-form.vue:
|
||||
add-visible-user: "사용자 추가"
|
||||
submit: "글쓰기"
|
||||
reply: "답글 달기"
|
||||
renote: "Renote"
|
||||
renote: "리노트"
|
||||
quote-placeholder: "이 글을 인용... (선택적)"
|
||||
reply-placeholder: "이 글에 답글..."
|
||||
cw-placeholder: "내용 주석 (선택적)"
|
||||
@@ -1361,11 +1423,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "파일 선택"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "{}(으)로 로그인"
|
||||
lang: "언어"
|
||||
lang-tip: "변경사항은 페이지를 새로고침한 뒤에 반영됩니다."
|
||||
recommended: "추천"
|
||||
auto: "자동"
|
||||
specify-language: "언어 지정"
|
||||
design: "디자인 및 표시"
|
||||
dark-mode: "다크 모드"
|
||||
i-am-under-limited-internet: "저는 통신 대역폭이 제한되어 있습니다"
|
||||
@@ -1373,16 +1430,15 @@ mobile/views/pages/settings.vue:
|
||||
contrasted-acct: "사용자명에 대비 추가"
|
||||
timeline: "타임라인"
|
||||
show-reply-target: "답글 대상 표시"
|
||||
show-my-renotes: "자신이 한 Renote 표시"
|
||||
show-renoted-my-notes: "자신의 글이 Renote된 것을 표시"
|
||||
show-local-renotes: "로컬 글의 Renote 표시"
|
||||
show-my-renotes: "자신이 한 리노트 표시"
|
||||
show-renoted-my-notes: "자신의 글이 리노트된 것을 표시"
|
||||
show-local-renotes: "로컬 글의 리노트 표시"
|
||||
post-style: "글 표시 스타일"
|
||||
post-style-standard: "표준"
|
||||
post-style-smart: "스마트"
|
||||
notification-position: "알림 표시"
|
||||
notification-position-bottom: "아래"
|
||||
notification-position-top: "위"
|
||||
theme: "테마"
|
||||
behavior: "동작"
|
||||
fetch-on-scroll: "스크롤하여 자동으로 불러오기"
|
||||
note-visibility: "게시물의 공개 범위"
|
||||
@@ -1393,18 +1449,6 @@ mobile/views/pages/settings.vue:
|
||||
disable-via-mobile: "작성하는 글에 \"모바일에서 작성함\" 을 붙이지 않음"
|
||||
load-raw-images: "첨부 이미지를 고품질로 표시"
|
||||
load-remote-media: "원격 서버의 미디어를 표시"
|
||||
twitter: "Twitter 연동"
|
||||
twitter-connect: "Twitter 계정에 연결"
|
||||
twitter-reconnect: "다시 연결"
|
||||
twitter-disconnect: "연결 끊기"
|
||||
github: "GitHub 연동"
|
||||
github-connect: "GitHub 계정에 연결"
|
||||
github-reconnect: "다시 연결"
|
||||
github-disconnect: "연결 끊기"
|
||||
discord: "Discord 연동"
|
||||
discord-connect: "Discord 계정에 연동"
|
||||
discord-reconnect: "다시 연결"
|
||||
discord-disconnect: "연결 끊기"
|
||||
update: "Misskey Update"
|
||||
version: "버전:"
|
||||
latest-version: "최신 버전:"
|
||||
@@ -1418,7 +1462,6 @@ mobile/views/pages/settings.vue:
|
||||
signout: "로그아웃"
|
||||
sound: "소리"
|
||||
enable-sounds: "소리 사용"
|
||||
mark-as-read-all-unread-notes: "모든 글을 읽은 상태로 표시"
|
||||
password: "비밀번호"
|
||||
mobile/views/pages/user.vue:
|
||||
follows-you: "당신을 팔로우합니다"
|
||||
@@ -1428,12 +1471,14 @@ mobile/views/pages/user.vue:
|
||||
overview: "요약"
|
||||
timeline: "타임라인"
|
||||
media: "미디어"
|
||||
is-suspended: "이 사용자는 정지된 상태입니다."
|
||||
mute: "뮤트"
|
||||
unmute: "뮤트 해제"
|
||||
block: "차단"
|
||||
unblock: "차단 해제"
|
||||
years-old: "{age}세"
|
||||
push-to-list: "리스트에 추가"
|
||||
select-list: "목록을 선택하여 주십시오"
|
||||
list-pushed: "{user}을(를) {list}에 추가하였습니다"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "최근 글"
|
||||
images: "이미지"
|
||||
@@ -1479,6 +1524,7 @@ deck/deck.user-column.vue:
|
||||
posts: "글"
|
||||
following: "팔로잉"
|
||||
followers: "팔로워"
|
||||
mention: "멘션"
|
||||
images: "이미지"
|
||||
activity: "활동"
|
||||
timeline: "타임라인"
|
||||
|
||||
@@ -90,7 +90,6 @@ common:
|
||||
followers-desc: "自分のフォロワーにのみ公開"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "指定したユーザーにのみ公開"
|
||||
private: "非公開"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
local-followers: "フォロワー (ローカルのみ)"
|
||||
@@ -110,9 +109,10 @@ common:
|
||||
my-token-regenerated: "Je sleutel is gegenereerd; je wordt nu uitgelogd."
|
||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "公式アカウント"
|
||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
always-show-nsfw: "常に閲覧注意のメディアを表示する"
|
||||
always-mark-nsfw: "常にメディアを閲覧注意として投稿"
|
||||
show-full-acct: "ユーザー名のホストを省略しない"
|
||||
@@ -120,14 +120,15 @@ common:
|
||||
reduce-motion: "UIの動きを減らす"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
use-os-default-emojis: "OS標準の絵文字を使用"
|
||||
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
is-remote-post: "この投稿情報はコピーです。"
|
||||
view-on-remote: "正確な情報を見る"
|
||||
renoted-by: "{user}がRenote"
|
||||
error:
|
||||
title: '問題が発生しました'
|
||||
retry: 'やり直す'
|
||||
title: "問題が発生しました"
|
||||
retry: "やり直す"
|
||||
reversi:
|
||||
drawn: "引き分け"
|
||||
my-turn: "あなたのターンです"
|
||||
@@ -158,12 +159,12 @@ common:
|
||||
polls: "アンケート"
|
||||
post-form: "投稿フォーム"
|
||||
server: "サーバー情報"
|
||||
donation: "寄付のお願い"
|
||||
nav: "ナビゲーション"
|
||||
tips: "ヒント"
|
||||
hashtags: "ハッシュタグ"
|
||||
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||
ai-chan-kawaii: "藍ちゃかわいい"
|
||||
you: "あなた"
|
||||
auth/views/form.vue:
|
||||
share-access: "<i>{name}</i>があなたのアカウントにアクセスすることを許可しますか?"
|
||||
permission-ask: "このアプリは次の権限を要求しています:"
|
||||
@@ -259,6 +260,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "閲覧注意"
|
||||
click-to-show: "クリックして表示"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "明るいテーマ"
|
||||
@@ -275,6 +277,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "ベーステーマ"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "テーマ名"
|
||||
preview-created-theme: "プレビュー"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
@@ -296,6 +299,9 @@ common/views/components/theme.vue:
|
||||
common/views/components/cw-button.vue:
|
||||
hide: "隠す"
|
||||
show: "もっと見る"
|
||||
chars: "{count}文字"
|
||||
files: "{count}ファイル"
|
||||
poll: "アンケート"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "Gebruiker zoeken"
|
||||
you: "Jij"
|
||||
@@ -325,6 +331,7 @@ common/views/components/nav.vue:
|
||||
develop: "Ontwikkelaars"
|
||||
feedback: "Feedback"
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "詳細"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "Deze notitie toevoegen aan favorieten"
|
||||
@@ -400,13 +407,18 @@ common/views/components/stream-indicator.vue:
|
||||
connecting: "Bezig met verbinden"
|
||||
reconnecting: "Bezig met herverbinden"
|
||||
connected: "Verbonden"
|
||||
common/views/components/twitter-setting.vue:
|
||||
description: "Als je je Twitter-account verbindt met je Misskey-account, dan kun je je Twitter-accountinformatie terugzien op je profiel en kun je inloggen met Twitter."
|
||||
connected-to: "Je bent verbonden met dit Twitter-account"
|
||||
detail: "Details..."
|
||||
reconnect: "Opnieuw verbinden"
|
||||
connect: "Koppel je Twitter-account"
|
||||
disconnect: "Verbinding verbreken"
|
||||
common/views/components/notification-settings.vue:
|
||||
title: "通知"
|
||||
mark-as-read-all-notifications: "すべての通知を既読にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
mark-as-read-all-talk-messages: "すべてのトークを既読にする"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
common/views/components/integration-settings.vue:
|
||||
title: "サービス連携"
|
||||
connect: "接続する"
|
||||
disconnect: "切断する"
|
||||
connected-to: "次のアカウントに接続されています"
|
||||
common/views/components/github-setting.vue:
|
||||
description: "お使いのGitHubアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでGitHubアカウント情報が表示されるようになったり、GitHubを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のGitHubアカウントに接続されています"
|
||||
@@ -431,7 +443,6 @@ common/views/components/visibility-chooser.vue:
|
||||
followers-desc: "自分のフォロワーにのみ公開"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "指定したユーザーにのみ公開"
|
||||
private: "非公開"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-public-desc: "リモートへは公開しない"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
@@ -439,12 +450,20 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
account: "アカウント"
|
||||
location: "場所"
|
||||
description: "自己紹介"
|
||||
language: "言語"
|
||||
birthday: "誕生日"
|
||||
avatar: "アイコン"
|
||||
banner: "バナー"
|
||||
@@ -452,6 +471,7 @@ common/views/components/profile-editor.vue:
|
||||
is-bot: "このアカウントはBotです"
|
||||
is-locked: "フォローを承認制にする"
|
||||
careful-bot: "Botからのフォローだけ承認制にする"
|
||||
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する"
|
||||
advanced: "その他"
|
||||
privacy: "プライバシー"
|
||||
save: "保存"
|
||||
@@ -462,6 +482,13 @@ common/views/components/profile-editor.vue:
|
||||
email-address: "メールアドレス"
|
||||
email-verified: "メールアドレスが確認されました"
|
||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "ユーザー"
|
||||
rename: "リスト名を変更"
|
||||
delete: "リストを削除"
|
||||
remove-user: "このリストから削除"
|
||||
delete-are-you-sure: "リスト「$1」を削除しますか?"
|
||||
deleted: "削除しました"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "Bezig met ophalen"
|
||||
no-broadcasts: "Geen uitzendingen"
|
||||
@@ -474,9 +501,6 @@ common/views/widgets/calendar.vue:
|
||||
today: "今日:"
|
||||
this-month: "今月:"
|
||||
this-year: "今年:"
|
||||
common/views/widgets/donation.vue:
|
||||
title: "Donatie"
|
||||
text: "Om Misskey draaiende te houden, geven we geld uit aan onze domeinnaam, servers, enz. We maken hier geen winst op, dus we zouden het fijn vinden als je een donatie wilt doen. Neem in dat geval contact op via {}. Bedankt voor je bijdrage!"
|
||||
common/views/widgets/photo-stream.vue:
|
||||
title: "Fotostream"
|
||||
no-photos: "Geen foto's"
|
||||
@@ -514,9 +538,11 @@ common/views/widgets/tips.vue:
|
||||
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
||||
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
|
||||
tips-line21: "APIを利用してbotの開発なども行えます"
|
||||
tips-line23: "まゆかわいいよまゆ"
|
||||
tips-line23: "藍かわいいよ藍"
|
||||
tips-line24: "Misskeyは2014年にサービスを開始しました"
|
||||
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
|
||||
common/views/pages/not-found.vue:
|
||||
page-not-found: "ページが見つかりませんでした"
|
||||
common/views/pages/follow.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
following: "フォロー中"
|
||||
@@ -652,10 +678,12 @@ desktop/views/components/note-detail.vue:
|
||||
location: "Locatie"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
desktop/views/components/note.vue:
|
||||
reply: "返信"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
detail: "詳細"
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
@@ -683,7 +711,7 @@ desktop/views/components/post-form.vue:
|
||||
attach-media-from-local: "Media bijvoegen van je computer"
|
||||
attach-media-from-drive: "Media bijvoegen uit je Drive"
|
||||
attach-cancel: "Bijlage annuleren"
|
||||
insert-a-kao: "v(‘ω’)v"
|
||||
insert-a-kao: "v('ω')v"
|
||||
create-poll: "Peiling creëren"
|
||||
text-remain: "{} resterende tekens"
|
||||
recent-tags: "最近"
|
||||
@@ -754,10 +782,13 @@ desktop/views/components/settings.vue:
|
||||
dark-mode: "Donkere modus"
|
||||
use-shadow: "UIに影を使用"
|
||||
rounded-corners: "UIの角を丸める"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
circle-icons: "Ronde pictogrammen gebruiken"
|
||||
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||
post-form-on-timeline: "Berichtformulier boven de tijdlijn tonen"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
show-clock-on-header: "右上に時計を表示する"
|
||||
show-reply-target: "Antwoord-knop tonen"
|
||||
timeline: "タイムライン"
|
||||
@@ -766,27 +797,26 @@ desktop/views/components/settings.vue:
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "Kaart tonen"
|
||||
remain-deleted-note: "削除された投稿を表示し続ける"
|
||||
deck-column-align: "デッキのカラムの位置"
|
||||
deck-column-align: "デッキのカラムの配置"
|
||||
deck-column-align-center: "中央"
|
||||
deck-column-align-left: "左"
|
||||
deck-column-align-flexible: "フレキシブル"
|
||||
deck-column-width: "デッキのカラムの幅"
|
||||
deck-column-width-narrow: "狭"
|
||||
deck-column-width-narrower: "やや狭"
|
||||
deck-column-width-normal: "普通"
|
||||
deck-column-width-wider: "やや広"
|
||||
deck-column-width-wide: "広"
|
||||
sound: "Geluid"
|
||||
enable-sounds: "Geluid inschakelen"
|
||||
enable-sounds-desc: "Een geluid afspelen bij het ontvangen van een bericht. Deze instelling wordt opgeslagen in je browser."
|
||||
volume: "Volume"
|
||||
test: "Testen"
|
||||
language: "Taal"
|
||||
pick-language: "Selecteer een taal"
|
||||
recommended: "Aanbevolen"
|
||||
auto: "Automatisch"
|
||||
specify-language: "Taal opgeven"
|
||||
language-desc: "Je moet de pagina herladen om de wijzigingen toe te passen."
|
||||
cache: "Cache"
|
||||
clean-cache: "Opschonen"
|
||||
cache-warn: "De cache van je accountinformatie/berichten/antwoorden/instellingen wordt verwijderd. Je moet de pagina herladen na het opschonen."
|
||||
cache-cleared: "Cache opgeschoond"
|
||||
cache-cleared-desc: "Herlaad de pagina."
|
||||
auto-watch: "Automatisch volgen"
|
||||
auto-watch-desc: "Automatisch meldingen ontvangen over het bericht/antwoord."
|
||||
about: "Over Misskey"
|
||||
operator: "De administrator van deze instantie"
|
||||
update: "Misskey-update"
|
||||
@@ -825,6 +855,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "Voer het wachtwoord in"
|
||||
authenticator: "Installeer eerst Google Authenticator op je apparaat:"
|
||||
howtoinstall: "Hoe installeer ik dit?"
|
||||
token: "トークン"
|
||||
scan: "Scan daarna de QR-code:"
|
||||
done: "Voer de op je apparaat getoonde sleutel in:"
|
||||
submit: "Versturen"
|
||||
@@ -839,13 +870,13 @@ common/views/components/api-settings.vue:
|
||||
token: "Token:"
|
||||
enter-password: "パスワードを入力してください"
|
||||
console:
|
||||
title: 'APIコンソール'
|
||||
endpoint: 'エンドポイント'
|
||||
parameter: 'パラメータ'
|
||||
title: "APIコンソール"
|
||||
endpoint: "エンドポイント"
|
||||
parameter: "パラメータ"
|
||||
credential-info: "「i」パラメータは自動で付与されます。"
|
||||
send: '送信'
|
||||
sending: '応答待ち'
|
||||
response: '結果'
|
||||
send: "送信"
|
||||
sending: "応答待ち"
|
||||
response: "結果"
|
||||
desktop/views/components/settings.apps.vue:
|
||||
no-apps: "連携しているアプリケーションはありません"
|
||||
common/views/components/drive-settings.vue:
|
||||
@@ -869,11 +900,17 @@ common/views/components/password-settings.vue:
|
||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||
not-match: "新しいパスワードが一致しません"
|
||||
changed: "パスワードを変更しました"
|
||||
failed: "パスワード変更に失敗しました"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
media-count: "{}つのメディア"
|
||||
poll: "Peilingen"
|
||||
desktop/views/components/settings.tags.vue:
|
||||
title: "タグ"
|
||||
query: "クエリ (省略可)"
|
||||
add: "追加"
|
||||
save: "保存"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "Taakbeheer"
|
||||
desktop/views/components/timeline.vue:
|
||||
@@ -956,6 +993,7 @@ admin/views/instance.vue:
|
||||
instance-description: "インスタンスの紹介"
|
||||
host: "ホスト"
|
||||
banner-url: "バナー画像URL"
|
||||
error-image-url: "エラー画像URL"
|
||||
languages: "インスタンスの対象言語"
|
||||
languages-desc: "スペースで区切って複数設定できます。"
|
||||
maintainer-config: "管理者情報"
|
||||
@@ -1014,6 +1052,12 @@ admin/views/instance.vue:
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
smtp-pass: "SMTPパスワード"
|
||||
serviceworker-config: "ServiceWorker"
|
||||
enable-serviceworker: "ServiceWorkerを有効にする"
|
||||
serviceworker-info: "プッシュ通知を行うには有効する必要があります。"
|
||||
vapid-publickey: "VAPID公開鍵"
|
||||
vapid-privatekey: "VAPID秘密鍵"
|
||||
vapid-info: "ServiceWorkerを有効にする場合、VAPIDキーペアを生成する必要があります。シェルで次のようにします:"
|
||||
admin/views/charts.vue:
|
||||
title: "チャート"
|
||||
per-day: "1日ごと"
|
||||
@@ -1039,6 +1083,22 @@ admin/views/charts.vue:
|
||||
network-requests: "リクエスト"
|
||||
network-time: "応答時間"
|
||||
network-usage: "通信量"
|
||||
admin/views/drive.vue:
|
||||
sort:
|
||||
title: "ソート"
|
||||
createdAtAsc: "アップロード日時が古い順"
|
||||
createdAtDesc: "アップロード日時が新しい順"
|
||||
sizeAsc: "サイズが小さい順"
|
||||
sizeDesc: "サイズが大きい順"
|
||||
origin:
|
||||
title: "オリジン"
|
||||
combined: "ローカル+リモート"
|
||||
local: "ローカル"
|
||||
remote: "リモート"
|
||||
delete: "削除"
|
||||
deleted: "削除しました"
|
||||
mark-as-sensitive: "閲覧注意に設定"
|
||||
unmark-as-sensitive: "閲覧注意を解除"
|
||||
admin/views/users.vue:
|
||||
operation: "操作"
|
||||
username-or-userid: "ユーザー名またはユーザーID"
|
||||
@@ -1170,6 +1230,7 @@ desktop/views/pages/user/user.header.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
is-bot: "このアカウントはBotです"
|
||||
years-old: "{age}歳"
|
||||
year: "年"
|
||||
@@ -1179,6 +1240,7 @@ desktop/views/pages/user/user.timeline.vue:
|
||||
default: "Berichten"
|
||||
with-replies: "Berichten en antwoorden"
|
||||
with-media: "Media"
|
||||
my-posts: "私の投稿"
|
||||
empty: "Deze gebruiker heeft nog niks geplaatst."
|
||||
desktop/views/widgets/messaging.vue:
|
||||
title: "Gesprekken"
|
||||
@@ -1361,11 +1423,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "Kies een bestand"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "Ingelogd als {}"
|
||||
lang: "Taal"
|
||||
lang-tip: "Je moet de pagina herladen om de wijzigingen toe te passen."
|
||||
recommended: "Aanbevolen"
|
||||
auto: "Automatisch"
|
||||
specify-language: "Taal opgeven"
|
||||
design: "Ontwerp en weergave"
|
||||
dark-mode: "Donkere modus"
|
||||
i-am-under-limited-internet: "Ik heb beperkt internet"
|
||||
@@ -1382,7 +1439,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "下"
|
||||
notification-position-top: "上"
|
||||
theme: "テーマ"
|
||||
behavior: "Gedrag"
|
||||
fetch-on-scroll: "Ophalen bij scrollen"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
@@ -1393,18 +1449,6 @@ mobile/views/pages/settings.vue:
|
||||
disable-via-mobile: "Zonder 'mobiele berichten'"
|
||||
load-raw-images: "添付された画像を高画質で表示する"
|
||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||
twitter: "Twitter-integratie"
|
||||
twitter-connect: "Mijn Twitter-account verbinden"
|
||||
twitter-reconnect: "Opnieuw verbinden"
|
||||
twitter-disconnect: "Verbinding verbreken"
|
||||
github: "GitHub連携"
|
||||
github-connect: "GitHubアカウントに接続する"
|
||||
github-reconnect: "再接続する"
|
||||
github-disconnect: "切断する"
|
||||
discord: "Discord連携"
|
||||
discord-connect: "Discordアカウントに接続する"
|
||||
discord-reconnect: "再接続する"
|
||||
discord-disconnect: "切断する"
|
||||
update: "Misskey-update"
|
||||
version: "Huidige versie:"
|
||||
latest-version: "Nieuwste versie:"
|
||||
@@ -1418,7 +1462,6 @@ mobile/views/pages/settings.vue:
|
||||
signout: "Uitloggen"
|
||||
sound: "サウンド"
|
||||
enable-sounds: "サウンドを有効にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
password: "パスワード"
|
||||
mobile/views/pages/user.vue:
|
||||
follows-you: "Volgt jou"
|
||||
@@ -1428,12 +1471,14 @@ mobile/views/pages/user.vue:
|
||||
overview: "Overzicht"
|
||||
timeline: "Tijdlijn"
|
||||
media: "Media"
|
||||
is-suspended: "Dit account is geschorst."
|
||||
mute: "ミュート"
|
||||
unmute: "ミュート解除"
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "Recente notities"
|
||||
images: "Afbeeldingen"
|
||||
@@ -1479,6 +1524,7 @@ deck/deck.user-column.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
images: "画像"
|
||||
activity: "アクティビティ"
|
||||
timeline: "タイムライン"
|
||||
|
||||
@@ -90,7 +90,6 @@ common:
|
||||
followers-desc: "自分のフォロワーにのみ公開"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "指定したユーザーにのみ公開"
|
||||
private: "Privat"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
local-followers: "フォロワー (ローカルのみ)"
|
||||
@@ -110,9 +109,10 @@ common:
|
||||
my-token-regenerated: "Ditt synbol har blitt generert. Du vil nå bli utlogget."
|
||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "公式アカウント"
|
||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
always-show-nsfw: "常に閲覧注意のメディアを表示する"
|
||||
always-mark-nsfw: "常にメディアを閲覧注意として投稿"
|
||||
show-full-acct: "ユーザー名のホストを省略しない"
|
||||
@@ -120,14 +120,15 @@ common:
|
||||
reduce-motion: "UIの動きを減らす"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
use-os-default-emojis: "OS標準の絵文字を使用"
|
||||
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
is-remote-post: "この投稿情報はコピーです。"
|
||||
view-on-remote: "正確な情報を見る"
|
||||
renoted-by: "{user}がRenote"
|
||||
error:
|
||||
title: '問題が発生しました'
|
||||
retry: 'やり直す'
|
||||
title: "問題が発生しました"
|
||||
retry: "やり直す"
|
||||
reversi:
|
||||
drawn: "引き分け"
|
||||
my-turn: "あなたのターンです"
|
||||
@@ -158,12 +159,12 @@ common:
|
||||
polls: "アンケート"
|
||||
post-form: "投稿フォーム"
|
||||
server: "サーバー情報"
|
||||
donation: "寄付のお願い"
|
||||
nav: "ナビゲーション"
|
||||
tips: "Tips"
|
||||
hashtags: "ハッシュタグ"
|
||||
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||
ai-chan-kawaii: "藍ちゃかわいい"
|
||||
you: "あなた"
|
||||
auth/views/form.vue:
|
||||
share-access: "<i>{name}</i>があなたのアカウントにアクセスすることを許可しますか?"
|
||||
permission-ask: "このアプリは次の権限を要求しています:"
|
||||
@@ -259,6 +260,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "Sensitivt innhold"
|
||||
click-to-show: "クリックして表示"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "明るいテーマ"
|
||||
@@ -275,6 +277,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "ベーステーマ"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Mørk"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "Tema navn"
|
||||
preview-created-theme: "プレビュー"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
@@ -296,6 +299,9 @@ common/views/components/theme.vue:
|
||||
common/views/components/cw-button.vue:
|
||||
hide: "Skjul"
|
||||
show: "もっと見る"
|
||||
chars: "{count}文字"
|
||||
files: "{count}ファイル"
|
||||
poll: "アンケート"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "ユーザーを探す"
|
||||
you: "Du"
|
||||
@@ -325,6 +331,7 @@ common/views/components/nav.vue:
|
||||
develop: "Utviklere"
|
||||
feedback: "フィードバック"
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "Detaljer"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "Merket som favoritt"
|
||||
@@ -400,13 +407,18 @@ common/views/components/stream-indicator.vue:
|
||||
connecting: "Tilkobler"
|
||||
reconnecting: "Kobler til på nytt"
|
||||
connected: "Tilkoblet"
|
||||
common/views/components/twitter-setting.vue:
|
||||
description: "お使いのTwitterアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでTwitterアカウント情報が表示されるようになったり、Twitterを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のTwitterアカウントに接続されています"
|
||||
detail: "Detaljer..."
|
||||
reconnect: "Koble til på nytt"
|
||||
connect: "Twitterと接続する"
|
||||
disconnect: "Koble fra"
|
||||
common/views/components/notification-settings.vue:
|
||||
title: "通知"
|
||||
mark-as-read-all-notifications: "すべての通知を既読にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
mark-as-read-all-talk-messages: "すべてのトークを既読にする"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
common/views/components/integration-settings.vue:
|
||||
title: "サービス連携"
|
||||
connect: "接続する"
|
||||
disconnect: "切断する"
|
||||
connected-to: "次のアカウントに接続されています"
|
||||
common/views/components/github-setting.vue:
|
||||
description: "お使いのGitHubアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでGitHubアカウント情報が表示されるようになったり、GitHubを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のGitHubアカウントに接続されています"
|
||||
@@ -431,7 +443,6 @@ common/views/components/visibility-chooser.vue:
|
||||
followers-desc: "自分のフォロワーにのみ公開"
|
||||
specified: "Direkte"
|
||||
specified-desc: "指定したユーザーにのみ公開"
|
||||
private: "Privat"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-public-desc: "リモートへは公開しない"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
@@ -439,12 +450,20 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
account: "アカウント"
|
||||
location: "場所"
|
||||
description: "自己紹介"
|
||||
language: "言語"
|
||||
birthday: "誕生日"
|
||||
avatar: "アイコン"
|
||||
banner: "バナー"
|
||||
@@ -452,6 +471,7 @@ common/views/components/profile-editor.vue:
|
||||
is-bot: "このアカウントはBotです"
|
||||
is-locked: "フォローを承認制にする"
|
||||
careful-bot: "Botからのフォローだけ承認制にする"
|
||||
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する"
|
||||
advanced: "その他"
|
||||
privacy: "プライバシー"
|
||||
save: "保存"
|
||||
@@ -462,6 +482,13 @@ common/views/components/profile-editor.vue:
|
||||
email-address: "メールアドレス"
|
||||
email-verified: "メールアドレスが確認されました"
|
||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "ユーザー"
|
||||
rename: "リスト名を変更"
|
||||
delete: "リストを削除"
|
||||
remove-user: "このリストから削除"
|
||||
delete-are-you-sure: "リスト「$1」を削除しますか?"
|
||||
deleted: "削除しました"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "Henter"
|
||||
no-broadcasts: "お知らせはありません"
|
||||
@@ -474,9 +501,6 @@ common/views/widgets/calendar.vue:
|
||||
today: "I dag:"
|
||||
this-month: "Denne måneden:"
|
||||
this-year: "Dette året:"
|
||||
common/views/widgets/donation.vue:
|
||||
title: "寄付のお願い"
|
||||
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
|
||||
common/views/widgets/photo-stream.vue:
|
||||
title: "フォトストリーム"
|
||||
no-photos: "写真はありません"
|
||||
@@ -514,9 +538,11 @@ common/views/widgets/tips.vue:
|
||||
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
||||
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
|
||||
tips-line21: "APIを利用してbotの開発なども行えます"
|
||||
tips-line23: "まゆかわいいよまゆ"
|
||||
tips-line23: "藍かわいいよ藍"
|
||||
tips-line24: "Misskeyは2014年にサービスを開始しました"
|
||||
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
|
||||
common/views/pages/not-found.vue:
|
||||
page-not-found: "ページが見つかりませんでした"
|
||||
common/views/pages/follow.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
following: "フォロー中"
|
||||
@@ -652,10 +678,12 @@ desktop/views/components/note-detail.vue:
|
||||
location: "Lokasjon"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
desktop/views/components/note.vue:
|
||||
reply: "返信"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
detail: "詳細"
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
@@ -754,10 +782,13 @@ desktop/views/components/settings.vue:
|
||||
dark-mode: "ダークモード"
|
||||
use-shadow: "UIに影を使用"
|
||||
rounded-corners: "UIの角を丸める"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
circle-icons: "円形のアイコンを使用"
|
||||
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
show-clock-on-header: "右上に時計を表示する"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
timeline: "タイムライン"
|
||||
@@ -766,27 +797,26 @@ desktop/views/components/settings.vue:
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "マップの自動展開"
|
||||
remain-deleted-note: "削除された投稿を表示し続ける"
|
||||
deck-column-align: "デッキのカラムの位置"
|
||||
deck-column-align: "デッキのカラムの配置"
|
||||
deck-column-align-center: "中央"
|
||||
deck-column-align-left: "左"
|
||||
deck-column-align-flexible: "フレキシブル"
|
||||
deck-column-width: "デッキのカラムの幅"
|
||||
deck-column-width-narrow: "狭"
|
||||
deck-column-width-narrower: "やや狭"
|
||||
deck-column-width-normal: "普通"
|
||||
deck-column-width-wider: "やや広"
|
||||
deck-column-width-wide: "広"
|
||||
sound: "Lyd"
|
||||
enable-sounds: "サウンドを有効にする"
|
||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||
volume: "Volum"
|
||||
test: "Test"
|
||||
language: "Språk"
|
||||
pick-language: "Velg språk"
|
||||
recommended: "Anbefalt"
|
||||
auto: "Automatisk"
|
||||
specify-language: "Angi språk"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
cache: "Hurtiglager"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||
cache-cleared: "キャッシュを削除しました"
|
||||
cache-cleared-desc: "ページを再度読み込みしてください。"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
about: "Misskeyについて"
|
||||
operator: "このサーバーの運営者"
|
||||
update: "Misskey Update"
|
||||
@@ -825,6 +855,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "パスワードを入力してください"
|
||||
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
|
||||
howtoinstall: "インストール方法はこちら"
|
||||
token: "トークン"
|
||||
scan: "次に、表示されているQRコードをスキャンします:"
|
||||
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
|
||||
submit: "Send"
|
||||
@@ -839,13 +870,13 @@ common/views/components/api-settings.vue:
|
||||
token: "Token:"
|
||||
enter-password: "パスワードを入力してください"
|
||||
console:
|
||||
title: 'APIコンソール'
|
||||
endpoint: 'エンドポイント'
|
||||
parameter: 'パラメータ'
|
||||
title: "APIコンソール"
|
||||
endpoint: "エンドポイント"
|
||||
parameter: "パラメータ"
|
||||
credential-info: "「i」パラメータは自動で付与されます。"
|
||||
send: '送信'
|
||||
sending: '応答待ち'
|
||||
response: '結果'
|
||||
send: "送信"
|
||||
sending: "応答待ち"
|
||||
response: "結果"
|
||||
desktop/views/components/settings.apps.vue:
|
||||
no-apps: "連携しているアプリケーションはありません"
|
||||
common/views/components/drive-settings.vue:
|
||||
@@ -869,11 +900,17 @@ common/views/components/password-settings.vue:
|
||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||
not-match: "新しいパスワードが一致しません"
|
||||
changed: "パスワードを変更しました"
|
||||
failed: "パスワード変更に失敗しました"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
media-count: "{}つのメディア"
|
||||
poll: "アンケート"
|
||||
desktop/views/components/settings.tags.vue:
|
||||
title: "タグ"
|
||||
query: "クエリ (省略可)"
|
||||
add: "追加"
|
||||
save: "保存"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "タスクマネージャ"
|
||||
desktop/views/components/timeline.vue:
|
||||
@@ -956,6 +993,7 @@ admin/views/instance.vue:
|
||||
instance-description: "インスタンスの紹介"
|
||||
host: "ホスト"
|
||||
banner-url: "バナー画像URL"
|
||||
error-image-url: "エラー画像URL"
|
||||
languages: "インスタンスの対象言語"
|
||||
languages-desc: "スペースで区切って複数設定できます。"
|
||||
maintainer-config: "管理者情報"
|
||||
@@ -1014,6 +1052,12 @@ admin/views/instance.vue:
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
smtp-pass: "SMTPパスワード"
|
||||
serviceworker-config: "ServiceWorker"
|
||||
enable-serviceworker: "ServiceWorkerを有効にする"
|
||||
serviceworker-info: "プッシュ通知を行うには有効する必要があります。"
|
||||
vapid-publickey: "VAPID公開鍵"
|
||||
vapid-privatekey: "VAPID秘密鍵"
|
||||
vapid-info: "ServiceWorkerを有効にする場合、VAPIDキーペアを生成する必要があります。シェルで次のようにします:"
|
||||
admin/views/charts.vue:
|
||||
title: "チャート"
|
||||
per-day: "1日ごと"
|
||||
@@ -1039,6 +1083,22 @@ admin/views/charts.vue:
|
||||
network-requests: "リクエスト"
|
||||
network-time: "応答時間"
|
||||
network-usage: "通信量"
|
||||
admin/views/drive.vue:
|
||||
sort:
|
||||
title: "ソート"
|
||||
createdAtAsc: "アップロード日時が古い順"
|
||||
createdAtDesc: "アップロード日時が新しい順"
|
||||
sizeAsc: "サイズが小さい順"
|
||||
sizeDesc: "サイズが大きい順"
|
||||
origin:
|
||||
title: "オリジン"
|
||||
combined: "ローカル+リモート"
|
||||
local: "ローカル"
|
||||
remote: "リモート"
|
||||
delete: "削除"
|
||||
deleted: "削除しました"
|
||||
mark-as-sensitive: "閲覧注意に設定"
|
||||
unmark-as-sensitive: "閲覧注意を解除"
|
||||
admin/views/users.vue:
|
||||
operation: "操作"
|
||||
username-or-userid: "ユーザー名またはユーザーID"
|
||||
@@ -1170,6 +1230,7 @@ desktop/views/pages/user/user.header.vue:
|
||||
posts: "Innlegg"
|
||||
following: "Følger"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
is-bot: "このアカウントはBotです"
|
||||
years-old: "{age}歳"
|
||||
year: "年"
|
||||
@@ -1179,6 +1240,7 @@ desktop/views/pages/user/user.timeline.vue:
|
||||
default: "Innlegg"
|
||||
with-replies: "Innlegg og svar"
|
||||
with-media: "Media"
|
||||
my-posts: "私の投稿"
|
||||
empty: "このユーザーはまだ何も投稿していないようです。"
|
||||
desktop/views/widgets/messaging.vue:
|
||||
title: "Melding"
|
||||
@@ -1361,11 +1423,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "ファイルを選択"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
lang: "Språk"
|
||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
||||
recommended: "Anbefalt"
|
||||
auto: "Automatisk"
|
||||
specify-language: "Angi språk"
|
||||
design: "デザインと表示"
|
||||
dark-mode: "ダークモード"
|
||||
i-am-under-limited-internet: "私は通信を制限されている"
|
||||
@@ -1382,7 +1439,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "Bunn"
|
||||
notification-position-top: "Topp"
|
||||
theme: "Utseende"
|
||||
behavior: "Oppførsel"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
@@ -1393,18 +1449,6 @@ mobile/views/pages/settings.vue:
|
||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||
load-raw-images: "添付された画像を高画質で表示する"
|
||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||
twitter: "Twitter連携"
|
||||
twitter-connect: "Twitterアカウントに接続する"
|
||||
twitter-reconnect: "Koble til på nytt"
|
||||
twitter-disconnect: "Koble fra"
|
||||
github: "GitHub連携"
|
||||
github-connect: "GitHubアカウントに接続する"
|
||||
github-reconnect: "再接続する"
|
||||
github-disconnect: "切断する"
|
||||
discord: "Discord連携"
|
||||
discord-connect: "Discordアカウントに接続する"
|
||||
discord-reconnect: "再接続する"
|
||||
discord-disconnect: "切断する"
|
||||
update: "Misskey Update"
|
||||
version: "バージョン:"
|
||||
latest-version: "最新のバージョン:"
|
||||
@@ -1418,7 +1462,6 @@ mobile/views/pages/settings.vue:
|
||||
signout: "サインアウト"
|
||||
sound: "Lyder"
|
||||
enable-sounds: "サウンドを有効にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
password: "パスワード"
|
||||
mobile/views/pages/user.vue:
|
||||
follows-you: "フォローされています"
|
||||
@@ -1428,12 +1471,14 @@ mobile/views/pages/user.vue:
|
||||
overview: "Oversikt"
|
||||
timeline: "タイムライン"
|
||||
media: "Media"
|
||||
is-suspended: "このユーザーは凍結されています。"
|
||||
mute: "ミュート"
|
||||
unmute: "ミュート解除"
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "Nylige innlegg"
|
||||
images: "Bilder"
|
||||
@@ -1479,6 +1524,7 @@ deck/deck.user-column.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
images: "画像"
|
||||
activity: "アクティビティ"
|
||||
timeline: "タイムライン"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -90,7 +90,6 @@ common:
|
||||
followers-desc: "自分のフォロワーにのみ公開"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "指定したユーザーにのみ公開"
|
||||
private: "非公開"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
local-followers: "フォロワー (ローカルのみ)"
|
||||
@@ -110,9 +109,10 @@ common:
|
||||
my-token-regenerated: "Seu token foi recriado, portanto você foi deslogado."
|
||||
i-like-sushi: "Eu prefiro sushi a pudim"
|
||||
show-reversi-board-labels: "Mostrar etiquetas de colunas e linhas no Reversi"
|
||||
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "Conta verificada"
|
||||
disable-animated-mfm: "Desativar texto animado nas publicações"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
always-show-nsfw: "常に閲覧注意のメディアを表示する"
|
||||
always-mark-nsfw: "常にメディアを閲覧注意として投稿"
|
||||
show-full-acct: "ユーザー名のホストを省略しない"
|
||||
@@ -120,14 +120,15 @@ common:
|
||||
reduce-motion: "UIの動きを減らす"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
use-os-default-emojis: "OS標準の絵文字を使用"
|
||||
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
is-remote-post: "この投稿情報はコピーです。"
|
||||
view-on-remote: "正確な情報を見る"
|
||||
renoted-by: "{user}がRenote"
|
||||
error:
|
||||
title: '問題が発生しました'
|
||||
retry: 'やり直す'
|
||||
title: "問題が発生しました"
|
||||
retry: "やり直す"
|
||||
reversi:
|
||||
drawn: "Empatado"
|
||||
my-turn: "Seu turno"
|
||||
@@ -158,12 +159,12 @@ common:
|
||||
polls: "Enquetes"
|
||||
post-form: "Formulário de publicação"
|
||||
server: "Informações do servidor"
|
||||
donation: "Doações"
|
||||
nav: "Navegação"
|
||||
tips: "Dicas"
|
||||
hashtags: "Hashtags"
|
||||
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||
ai-chan-kawaii: "藍ちゃかわいい"
|
||||
you: "あなた"
|
||||
auth/views/form.vue:
|
||||
share-access: "<i>{name}</i>があなたのアカウントにアクセスすることを許可しますか?"
|
||||
permission-ask: "Este aplicativo precisa das seguintes permissões:"
|
||||
@@ -259,6 +260,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "閲覧注意"
|
||||
click-to-show: "クリックして表示"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "明るいテーマ"
|
||||
@@ -275,6 +277,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "ベーステーマ"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "テーマ名"
|
||||
preview-created-theme: "プレビュー"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
@@ -296,6 +299,9 @@ common/views/components/theme.vue:
|
||||
common/views/components/cw-button.vue:
|
||||
hide: "隠す"
|
||||
show: "もっと見る"
|
||||
chars: "{count}文字"
|
||||
files: "{count}ファイル"
|
||||
poll: "アンケート"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "ユーザーを探す"
|
||||
you: "Você"
|
||||
@@ -325,6 +331,7 @@ common/views/components/nav.vue:
|
||||
develop: "開発者"
|
||||
feedback: "フィードバック"
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "詳細"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "お気に入り"
|
||||
@@ -400,13 +407,18 @@ common/views/components/stream-indicator.vue:
|
||||
connecting: "接続中"
|
||||
reconnecting: "再接続中"
|
||||
connected: "接続完了"
|
||||
common/views/components/twitter-setting.vue:
|
||||
description: "お使いのTwitterアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでTwitterアカウント情報が表示されるようになったり、Twitterを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のTwitterアカウントに接続されています"
|
||||
detail: "詳細..."
|
||||
reconnect: "再接続する"
|
||||
connect: "Twitterと接続する"
|
||||
common/views/components/notification-settings.vue:
|
||||
title: "通知"
|
||||
mark-as-read-all-notifications: "すべての通知を既読にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
mark-as-read-all-talk-messages: "すべてのトークを既読にする"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
common/views/components/integration-settings.vue:
|
||||
title: "サービス連携"
|
||||
connect: "接続する"
|
||||
disconnect: "切断する"
|
||||
connected-to: "次のアカウントに接続されています"
|
||||
common/views/components/github-setting.vue:
|
||||
description: "お使いのGitHubアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでGitHubアカウント情報が表示されるようになったり、GitHubを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のGitHubアカウントに接続されています"
|
||||
@@ -431,7 +443,6 @@ common/views/components/visibility-chooser.vue:
|
||||
followers-desc: "自分のフォロワーにのみ公開"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "指定したユーザーにのみ公開"
|
||||
private: "非公開"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-public-desc: "リモートへは公開しない"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
@@ -439,12 +450,20 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
account: "アカウント"
|
||||
location: "場所"
|
||||
description: "自己紹介"
|
||||
language: "言語"
|
||||
birthday: "誕生日"
|
||||
avatar: "アイコン"
|
||||
banner: "バナー"
|
||||
@@ -452,6 +471,7 @@ common/views/components/profile-editor.vue:
|
||||
is-bot: "このアカウントはBotです"
|
||||
is-locked: "フォローを承認制にする"
|
||||
careful-bot: "Botからのフォローだけ承認制にする"
|
||||
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する"
|
||||
advanced: "その他"
|
||||
privacy: "プライバシー"
|
||||
save: "保存"
|
||||
@@ -462,6 +482,13 @@ common/views/components/profile-editor.vue:
|
||||
email-address: "メールアドレス"
|
||||
email-verified: "メールアドレスが確認されました"
|
||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "ユーザー"
|
||||
rename: "リスト名を変更"
|
||||
delete: "リストを削除"
|
||||
remove-user: "このリストから削除"
|
||||
delete-are-you-sure: "リスト「$1」を削除しますか?"
|
||||
deleted: "削除しました"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "確認中"
|
||||
no-broadcasts: "お知らせはありません"
|
||||
@@ -474,9 +501,6 @@ common/views/widgets/calendar.vue:
|
||||
today: "今日:"
|
||||
this-month: "今月:"
|
||||
this-year: "今年:"
|
||||
common/views/widgets/donation.vue:
|
||||
title: "寄付のお願い"
|
||||
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
|
||||
common/views/widgets/photo-stream.vue:
|
||||
title: "フォトストリーム"
|
||||
no-photos: "写真はありません"
|
||||
@@ -514,9 +538,11 @@ common/views/widgets/tips.vue:
|
||||
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
||||
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
|
||||
tips-line21: "APIを利用してbotの開発なども行えます"
|
||||
tips-line23: "まゆかわいいよまゆ"
|
||||
tips-line23: "藍かわいいよ藍"
|
||||
tips-line24: "Misskeyは2014年にサービスを開始しました"
|
||||
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
|
||||
common/views/pages/not-found.vue:
|
||||
page-not-found: "ページが見つかりませんでした"
|
||||
common/views/pages/follow.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
following: "フォロー中"
|
||||
@@ -652,10 +678,12 @@ desktop/views/components/note-detail.vue:
|
||||
location: "位置情報"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
desktop/views/components/note.vue:
|
||||
reply: "返信"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
detail: "詳細"
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
@@ -754,10 +782,13 @@ desktop/views/components/settings.vue:
|
||||
dark-mode: "ダークモード"
|
||||
use-shadow: "UIに影を使用"
|
||||
rounded-corners: "UIの角を丸める"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
circle-icons: "円形のアイコンを使用"
|
||||
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
show-clock-on-header: "右上に時計を表示する"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
timeline: "タイムライン"
|
||||
@@ -766,27 +797,26 @@ desktop/views/components/settings.vue:
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "マップの自動展開"
|
||||
remain-deleted-note: "削除された投稿を表示し続ける"
|
||||
deck-column-align: "デッキのカラムの位置"
|
||||
deck-column-align: "デッキのカラムの配置"
|
||||
deck-column-align-center: "中央"
|
||||
deck-column-align-left: "左"
|
||||
deck-column-align-flexible: "フレキシブル"
|
||||
deck-column-width: "デッキのカラムの幅"
|
||||
deck-column-width-narrow: "狭"
|
||||
deck-column-width-narrower: "やや狭"
|
||||
deck-column-width-normal: "普通"
|
||||
deck-column-width-wider: "やや広"
|
||||
deck-column-width-wide: "広"
|
||||
sound: "サウンド"
|
||||
enable-sounds: "サウンドを有効にする"
|
||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||
volume: "ボリューム"
|
||||
test: "テスト"
|
||||
language: "言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||
cache-cleared: "キャッシュを削除しました"
|
||||
cache-cleared-desc: "ページを再度読み込みしてください。"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
about: "Misskeyについて"
|
||||
operator: "このサーバーの運営者"
|
||||
update: "Misskey Update"
|
||||
@@ -825,6 +855,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "パスワードを入力してください"
|
||||
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
|
||||
howtoinstall: "インストール方法はこちら"
|
||||
token: "トークン"
|
||||
scan: "次に、表示されているQRコードをスキャンします:"
|
||||
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
|
||||
submit: "完了"
|
||||
@@ -839,13 +870,13 @@ common/views/components/api-settings.vue:
|
||||
token: "Token:"
|
||||
enter-password: "パスワードを入力してください"
|
||||
console:
|
||||
title: 'APIコンソール'
|
||||
endpoint: 'エンドポイント'
|
||||
parameter: 'パラメータ'
|
||||
title: "APIコンソール"
|
||||
endpoint: "エンドポイント"
|
||||
parameter: "パラメータ"
|
||||
credential-info: "「i」パラメータは自動で付与されます。"
|
||||
send: '送信'
|
||||
sending: '応答待ち'
|
||||
response: '結果'
|
||||
send: "送信"
|
||||
sending: "応答待ち"
|
||||
response: "結果"
|
||||
desktop/views/components/settings.apps.vue:
|
||||
no-apps: "連携しているアプリケーションはありません"
|
||||
common/views/components/drive-settings.vue:
|
||||
@@ -869,11 +900,17 @@ common/views/components/password-settings.vue:
|
||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||
not-match: "新しいパスワードが一致しません"
|
||||
changed: "パスワードを変更しました"
|
||||
failed: "パスワード変更に失敗しました"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
media-count: "{}つのメディア"
|
||||
poll: "アンケート"
|
||||
desktop/views/components/settings.tags.vue:
|
||||
title: "タグ"
|
||||
query: "クエリ (省略可)"
|
||||
add: "追加"
|
||||
save: "保存"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "タスクマネージャ"
|
||||
desktop/views/components/timeline.vue:
|
||||
@@ -956,6 +993,7 @@ admin/views/instance.vue:
|
||||
instance-description: "インスタンスの紹介"
|
||||
host: "ホスト"
|
||||
banner-url: "バナー画像URL"
|
||||
error-image-url: "エラー画像URL"
|
||||
languages: "インスタンスの対象言語"
|
||||
languages-desc: "スペースで区切って複数設定できます。"
|
||||
maintainer-config: "管理者情報"
|
||||
@@ -1014,6 +1052,12 @@ admin/views/instance.vue:
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
smtp-pass: "SMTPパスワード"
|
||||
serviceworker-config: "ServiceWorker"
|
||||
enable-serviceworker: "ServiceWorkerを有効にする"
|
||||
serviceworker-info: "プッシュ通知を行うには有効する必要があります。"
|
||||
vapid-publickey: "VAPID公開鍵"
|
||||
vapid-privatekey: "VAPID秘密鍵"
|
||||
vapid-info: "ServiceWorkerを有効にする場合、VAPIDキーペアを生成する必要があります。シェルで次のようにします:"
|
||||
admin/views/charts.vue:
|
||||
title: "チャート"
|
||||
per-day: "1日ごと"
|
||||
@@ -1039,6 +1083,22 @@ admin/views/charts.vue:
|
||||
network-requests: "リクエスト"
|
||||
network-time: "応答時間"
|
||||
network-usage: "通信量"
|
||||
admin/views/drive.vue:
|
||||
sort:
|
||||
title: "ソート"
|
||||
createdAtAsc: "アップロード日時が古い順"
|
||||
createdAtDesc: "アップロード日時が新しい順"
|
||||
sizeAsc: "サイズが小さい順"
|
||||
sizeDesc: "サイズが大きい順"
|
||||
origin:
|
||||
title: "オリジン"
|
||||
combined: "ローカル+リモート"
|
||||
local: "ローカル"
|
||||
remote: "リモート"
|
||||
delete: "削除"
|
||||
deleted: "削除しました"
|
||||
mark-as-sensitive: "閲覧注意に設定"
|
||||
unmark-as-sensitive: "閲覧注意を解除"
|
||||
admin/views/users.vue:
|
||||
operation: "操作"
|
||||
username-or-userid: "ユーザー名またはユーザーID"
|
||||
@@ -1170,6 +1230,7 @@ desktop/views/pages/user/user.header.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
is-bot: "このアカウントはBotです"
|
||||
years-old: "{age}歳"
|
||||
year: "年"
|
||||
@@ -1179,6 +1240,7 @@ desktop/views/pages/user/user.timeline.vue:
|
||||
default: "投稿"
|
||||
with-replies: "投稿と返信"
|
||||
with-media: "メディア"
|
||||
my-posts: "私の投稿"
|
||||
empty: "このユーザーはまだ何も投稿していないようです。"
|
||||
desktop/views/widgets/messaging.vue:
|
||||
title: "メッセージ"
|
||||
@@ -1361,11 +1423,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "ファイルを選択"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
lang: "言語"
|
||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
design: "デザインと表示"
|
||||
dark-mode: "ダークモード"
|
||||
i-am-under-limited-internet: "私は通信を制限されている"
|
||||
@@ -1382,7 +1439,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "下"
|
||||
notification-position-top: "上"
|
||||
theme: "テーマ"
|
||||
behavior: "動作"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
@@ -1393,18 +1449,6 @@ mobile/views/pages/settings.vue:
|
||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||
load-raw-images: "添付された画像を高画質で表示する"
|
||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||
twitter: "Twitter連携"
|
||||
twitter-connect: "Conectar à sua conta no Twitter"
|
||||
twitter-reconnect: "Reconectar"
|
||||
twitter-disconnect: "Desconectar"
|
||||
github: "GitHub連携"
|
||||
github-connect: "GitHubアカウントに接続する"
|
||||
github-reconnect: "再接続する"
|
||||
github-disconnect: "切断する"
|
||||
discord: "Discord連携"
|
||||
discord-connect: "Discordアカウントに接続する"
|
||||
discord-reconnect: "再接続する"
|
||||
discord-disconnect: "切断する"
|
||||
update: "Atualizar Misskey"
|
||||
version: "Versão atual;"
|
||||
latest-version: "Última versão:"
|
||||
@@ -1418,7 +1462,6 @@ mobile/views/pages/settings.vue:
|
||||
signout: "Sair"
|
||||
sound: "Sons"
|
||||
enable-sounds: "Ativar sons"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
password: "パスワード"
|
||||
mobile/views/pages/user.vue:
|
||||
follows-you: "Te segue"
|
||||
@@ -1428,12 +1471,14 @@ mobile/views/pages/user.vue:
|
||||
overview: "概要"
|
||||
timeline: "Linha do tempo"
|
||||
media: "Mídia"
|
||||
is-suspended: "Esta conta foi suspensa"
|
||||
mute: "ミュート"
|
||||
unmute: "ミュート解除"
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "Notas recentes"
|
||||
images: "Imagens"
|
||||
@@ -1479,6 +1524,7 @@ deck/deck.user-column.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
images: "画像"
|
||||
activity: "アクティビティ"
|
||||
timeline: "タイムライン"
|
||||
|
||||
@@ -26,12 +26,12 @@ common:
|
||||
close: "Закрыть"
|
||||
do-not-copy-paste: "Пожалуйста, не вводите и не вставляйте сюда код. Аккаунту может угрожать опасность."
|
||||
load-more: "Загрузить больше"
|
||||
enter-password: "パスワードを入力してください"
|
||||
enter-password: "Пожалуйста, введите ваш пароль"
|
||||
got-it: "わかった"
|
||||
customization-tips:
|
||||
title: "カスタマイズのヒント"
|
||||
title: "Советы по настройке"
|
||||
paragraph: "<p>ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。</p><p>一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。</p><p>ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。</p><p>カスタマイズを終了するには、右上の「完了」をクリックします。</p>"
|
||||
gotit: "Got it!"
|
||||
gotit: "Понятно!"
|
||||
notification:
|
||||
file-uploaded: "Файл отправлен!"
|
||||
message-from: "Сообщение от {}:"
|
||||
@@ -64,17 +64,17 @@ common:
|
||||
friday: "Пт"
|
||||
saturday: "Сб"
|
||||
weekday:
|
||||
sunday: "日曜日"
|
||||
monday: "月曜日"
|
||||
tuesday: "火曜日"
|
||||
wednesday: "水曜日"
|
||||
thursday: "木曜日"
|
||||
friday: "金曜日"
|
||||
saturday: "土曜日"
|
||||
sunday: "Воскресенье"
|
||||
monday: "Понедельник"
|
||||
tuesday: "Вторник"
|
||||
wednesday: "Среда"
|
||||
thursday: "Четверг"
|
||||
friday: "Пятница"
|
||||
saturday: "Суббота"
|
||||
reactions:
|
||||
like: "いいね"
|
||||
like: "Нравится"
|
||||
love: "しゅき"
|
||||
laugh: "笑"
|
||||
laugh: "Ха-Ха"
|
||||
hmm: "ふぅ~む"
|
||||
surprise: "わお"
|
||||
congrats: "おめでとう"
|
||||
@@ -90,7 +90,6 @@ common:
|
||||
followers-desc: "自分のフォロワーにのみ公開"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "指定したユーザーにのみ公開"
|
||||
private: "非公開"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
local-followers: "フォロワー (ローカルのみ)"
|
||||
@@ -110,9 +109,10 @@ common:
|
||||
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "公式アカウント"
|
||||
disable-animated-mfm: "Отключить анимированный текст в постах"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
always-show-nsfw: "Всегда показывать NSFW контент"
|
||||
always-mark-nsfw: "Всегда помечать посты с медиафайлами как NSFW"
|
||||
show-full-acct: "ユーザー名のホストを省略しない"
|
||||
@@ -120,14 +120,15 @@ common:
|
||||
reduce-motion: "Уменьшить движение в интерфейсе"
|
||||
this-setting-is-this-device-only: "Только для этого устройства"
|
||||
use-os-default-emojis: "Использовать стандартные Emoji из ОС"
|
||||
do-not-use-in-production: 'Эта сборка для разработчиков. Не используйте в продакшне.'
|
||||
do-not-use-in-production: "Эта сборка для разработчиков. Не используйте в продакшне."
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
is-remote-post: "この投稿情報はコピーです。"
|
||||
view-on-remote: "正確な情報を見る"
|
||||
renoted-by: "{user}がRenote"
|
||||
error:
|
||||
title: 'Что-то пошло не так :('
|
||||
retry: 'Повторить'
|
||||
title: "Что-то пошло не так :("
|
||||
retry: "Повторить"
|
||||
reversi:
|
||||
drawn: "Ничья"
|
||||
my-turn: "Ваш ход"
|
||||
@@ -158,12 +159,12 @@ common:
|
||||
polls: "Голосования"
|
||||
post-form: "投稿フォーム"
|
||||
server: "Информация о сервере"
|
||||
donation: "寄付のお願い"
|
||||
nav: "ナビゲーション"
|
||||
tips: "ヒント"
|
||||
hashtags: "Хэштеги"
|
||||
dev: "Не удалось создать приложение. Пожалуйста, попробуйте ещё раз."
|
||||
ai-chan-kawaii: "Ai-chan kawaii!"
|
||||
you: "あなた"
|
||||
auth/views/form.vue:
|
||||
share-access: "Вы разрешаете <i>{name}</i> получить доступ к вашему аккаунту?"
|
||||
permission-ask: "このアプリは次の権限を要求しています:"
|
||||
@@ -259,6 +260,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "閲覧注意"
|
||||
click-to-show: "クリックして表示"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "明るいテーマ"
|
||||
@@ -275,6 +277,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "ベーステーマ"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "テーマ名"
|
||||
preview-created-theme: "プレビュー"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
@@ -296,6 +299,9 @@ common/views/components/theme.vue:
|
||||
common/views/components/cw-button.vue:
|
||||
hide: "隠す"
|
||||
show: "もっと見る"
|
||||
chars: "{count}文字"
|
||||
files: "{count}ファイル"
|
||||
poll: "アンケート"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "ユーザーを探す"
|
||||
you: "あなた"
|
||||
@@ -325,6 +331,7 @@ common/views/components/nav.vue:
|
||||
develop: "開発者"
|
||||
feedback: "フィードバック"
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "詳細"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "お気に入り"
|
||||
@@ -400,13 +407,18 @@ common/views/components/stream-indicator.vue:
|
||||
connecting: "接続中"
|
||||
reconnecting: "再接続中"
|
||||
connected: "接続完了"
|
||||
common/views/components/twitter-setting.vue:
|
||||
description: "お使いのTwitterアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでTwitterアカウント情報が表示されるようになったり、Twitterを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のTwitterアカウントに接続されています"
|
||||
detail: "詳細..."
|
||||
reconnect: "再接続する"
|
||||
connect: "Twitterと接続する"
|
||||
common/views/components/notification-settings.vue:
|
||||
title: "通知"
|
||||
mark-as-read-all-notifications: "すべての通知を既読にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
mark-as-read-all-talk-messages: "すべてのトークを既読にする"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
common/views/components/integration-settings.vue:
|
||||
title: "サービス連携"
|
||||
connect: "接続する"
|
||||
disconnect: "切断する"
|
||||
connected-to: "次のアカウントに接続されています"
|
||||
common/views/components/github-setting.vue:
|
||||
description: "お使いのGitHubアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでGitHubアカウント情報が表示されるようになったり、GitHubを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のGitHubアカウントに接続されています"
|
||||
@@ -431,7 +443,6 @@ common/views/components/visibility-chooser.vue:
|
||||
followers-desc: "自分のフォロワーにのみ公開"
|
||||
specified: "ダイレクト"
|
||||
specified-desc: "指定したユーザーにのみ公開"
|
||||
private: "非公開"
|
||||
local-public: "公開 (ローカルのみ)"
|
||||
local-public-desc: "リモートへは公開しない"
|
||||
local-home: "ホーム (ローカルのみ)"
|
||||
@@ -439,12 +450,20 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
account: "アカウント"
|
||||
location: "場所"
|
||||
description: "自己紹介"
|
||||
language: "言語"
|
||||
birthday: "誕生日"
|
||||
avatar: "アイコン"
|
||||
banner: "バナー"
|
||||
@@ -452,6 +471,7 @@ common/views/components/profile-editor.vue:
|
||||
is-bot: "このアカウントはBotです"
|
||||
is-locked: "フォローを承認制にする"
|
||||
careful-bot: "Botからのフォローだけ承認制にする"
|
||||
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する"
|
||||
advanced: "その他"
|
||||
privacy: "プライバシー"
|
||||
save: "保存"
|
||||
@@ -462,6 +482,13 @@ common/views/components/profile-editor.vue:
|
||||
email-address: "メールアドレス"
|
||||
email-verified: "メールアドレスが確認されました"
|
||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "ユーザー"
|
||||
rename: "リスト名を変更"
|
||||
delete: "リストを削除"
|
||||
remove-user: "このリストから削除"
|
||||
delete-are-you-sure: "リスト「$1」を削除しますか?"
|
||||
deleted: "削除しました"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "確認中"
|
||||
no-broadcasts: "お知らせはありません"
|
||||
@@ -474,9 +501,6 @@ common/views/widgets/calendar.vue:
|
||||
today: "今日:"
|
||||
this-month: "今月:"
|
||||
this-year: "今年:"
|
||||
common/views/widgets/donation.vue:
|
||||
title: "寄付のお願い"
|
||||
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
|
||||
common/views/widgets/photo-stream.vue:
|
||||
title: "フォトストリーム"
|
||||
no-photos: "写真はありません"
|
||||
@@ -514,9 +538,11 @@ common/views/widgets/tips.vue:
|
||||
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
|
||||
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
|
||||
tips-line21: "APIを利用してbotの開発なども行えます"
|
||||
tips-line23: "まゆかわいいよまゆ"
|
||||
tips-line23: "藍かわいいよ藍"
|
||||
tips-line24: "Misskeyは2014年にサービスを開始しました"
|
||||
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
|
||||
common/views/pages/not-found.vue:
|
||||
page-not-found: "ページが見つかりませんでした"
|
||||
common/views/pages/follow.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
following: "フォロー中"
|
||||
@@ -652,10 +678,12 @@ desktop/views/components/note-detail.vue:
|
||||
location: "位置情報"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
desktop/views/components/note.vue:
|
||||
reply: "返信"
|
||||
renote: "Renote"
|
||||
add-reaction: "リアクション"
|
||||
undo-reaction: "リアクション解除"
|
||||
detail: "詳細"
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
@@ -754,10 +782,13 @@ desktop/views/components/settings.vue:
|
||||
dark-mode: "ダークモード"
|
||||
use-shadow: "UIに影を使用"
|
||||
rounded-corners: "UIの角を丸める"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
circle-icons: "円形のアイコンを使用"
|
||||
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
show-clock-on-header: "右上に時計を表示する"
|
||||
show-reply-target: "リプライ先を表示する"
|
||||
timeline: "タイムライン"
|
||||
@@ -766,27 +797,26 @@ desktop/views/components/settings.vue:
|
||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||
show-maps: "マップの自動展開"
|
||||
remain-deleted-note: "削除された投稿を表示し続ける"
|
||||
deck-column-align: "デッキのカラムの位置"
|
||||
deck-column-align: "デッキのカラムの配置"
|
||||
deck-column-align-center: "中央"
|
||||
deck-column-align-left: "左"
|
||||
deck-column-align-flexible: "フレキシブル"
|
||||
deck-column-width: "デッキのカラムの幅"
|
||||
deck-column-width-narrow: "狭"
|
||||
deck-column-width-narrower: "やや狭"
|
||||
deck-column-width-normal: "普通"
|
||||
deck-column-width-wider: "やや広"
|
||||
deck-column-width-wide: "広"
|
||||
sound: "サウンド"
|
||||
enable-sounds: "サウンドを有効にする"
|
||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||
volume: "ボリューム"
|
||||
test: "テスト"
|
||||
language: "言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||
cache-cleared: "キャッシュを削除しました"
|
||||
cache-cleared-desc: "ページを再度読み込みしてください。"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
about: "Misskeyについて"
|
||||
operator: "このサーバーの運営者"
|
||||
update: "Misskey Update"
|
||||
@@ -825,6 +855,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "パスワードを入力してください"
|
||||
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
|
||||
howtoinstall: "インストール方法はこちら"
|
||||
token: "トークン"
|
||||
scan: "次に、表示されているQRコードをスキャンします:"
|
||||
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
|
||||
submit: "完了"
|
||||
@@ -839,13 +870,13 @@ common/views/components/api-settings.vue:
|
||||
token: "Token:"
|
||||
enter-password: "パスワードを入力してください"
|
||||
console:
|
||||
title: 'APIコンソール'
|
||||
endpoint: 'エンドポイント'
|
||||
parameter: 'パラメータ'
|
||||
title: "APIコンソール"
|
||||
endpoint: "エンドポイント"
|
||||
parameter: "パラメータ"
|
||||
credential-info: "「i」パラメータは自動で付与されます。"
|
||||
send: '送信'
|
||||
sending: '応答待ち'
|
||||
response: '結果'
|
||||
send: "送信"
|
||||
sending: "応答待ち"
|
||||
response: "結果"
|
||||
desktop/views/components/settings.apps.vue:
|
||||
no-apps: "連携しているアプリケーションはありません"
|
||||
common/views/components/drive-settings.vue:
|
||||
@@ -869,11 +900,17 @@ common/views/components/password-settings.vue:
|
||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||
not-match: "新しいパスワードが一致しません"
|
||||
changed: "パスワードを変更しました"
|
||||
failed: "パスワード変更に失敗しました"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
media-count: "{}つのメディア"
|
||||
poll: "アンケート"
|
||||
desktop/views/components/settings.tags.vue:
|
||||
title: "タグ"
|
||||
query: "クエリ (省略可)"
|
||||
add: "追加"
|
||||
save: "保存"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "タスクマネージャ"
|
||||
desktop/views/components/timeline.vue:
|
||||
@@ -956,6 +993,7 @@ admin/views/instance.vue:
|
||||
instance-description: "インスタンスの紹介"
|
||||
host: "ホスト"
|
||||
banner-url: "バナー画像URL"
|
||||
error-image-url: "エラー画像URL"
|
||||
languages: "インスタンスの対象言語"
|
||||
languages-desc: "スペースで区切って複数設定できます。"
|
||||
maintainer-config: "管理者情報"
|
||||
@@ -1014,6 +1052,12 @@ admin/views/instance.vue:
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
smtp-pass: "SMTPパスワード"
|
||||
serviceworker-config: "ServiceWorker"
|
||||
enable-serviceworker: "ServiceWorkerを有効にする"
|
||||
serviceworker-info: "プッシュ通知を行うには有効する必要があります。"
|
||||
vapid-publickey: "VAPID公開鍵"
|
||||
vapid-privatekey: "VAPID秘密鍵"
|
||||
vapid-info: "ServiceWorkerを有効にする場合、VAPIDキーペアを生成する必要があります。シェルで次のようにします:"
|
||||
admin/views/charts.vue:
|
||||
title: "チャート"
|
||||
per-day: "1日ごと"
|
||||
@@ -1039,6 +1083,22 @@ admin/views/charts.vue:
|
||||
network-requests: "リクエスト"
|
||||
network-time: "応答時間"
|
||||
network-usage: "通信量"
|
||||
admin/views/drive.vue:
|
||||
sort:
|
||||
title: "ソート"
|
||||
createdAtAsc: "アップロード日時が古い順"
|
||||
createdAtDesc: "アップロード日時が新しい順"
|
||||
sizeAsc: "サイズが小さい順"
|
||||
sizeDesc: "サイズが大きい順"
|
||||
origin:
|
||||
title: "オリジン"
|
||||
combined: "ローカル+リモート"
|
||||
local: "ローカル"
|
||||
remote: "リモート"
|
||||
delete: "削除"
|
||||
deleted: "削除しました"
|
||||
mark-as-sensitive: "閲覧注意に設定"
|
||||
unmark-as-sensitive: "閲覧注意を解除"
|
||||
admin/views/users.vue:
|
||||
operation: "操作"
|
||||
username-or-userid: "ユーザー名またはユーザーID"
|
||||
@@ -1170,6 +1230,7 @@ desktop/views/pages/user/user.header.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
is-bot: "このアカウントはBotです"
|
||||
years-old: "{age}歳"
|
||||
year: "年"
|
||||
@@ -1179,6 +1240,7 @@ desktop/views/pages/user/user.timeline.vue:
|
||||
default: "投稿"
|
||||
with-replies: "投稿と返信"
|
||||
with-media: "メディア"
|
||||
my-posts: "私の投稿"
|
||||
empty: "このユーザーはまだ何も投稿していないようです。"
|
||||
desktop/views/widgets/messaging.vue:
|
||||
title: "メッセージ"
|
||||
@@ -1361,11 +1423,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "ファイルを選択"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
lang: "言語"
|
||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
design: "デザインと表示"
|
||||
dark-mode: "ダークモード"
|
||||
i-am-under-limited-internet: "私は通信を制限されている"
|
||||
@@ -1382,7 +1439,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "下"
|
||||
notification-position-top: "上"
|
||||
theme: "テーマ"
|
||||
behavior: "動作"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
@@ -1393,18 +1449,6 @@ mobile/views/pages/settings.vue:
|
||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||
load-raw-images: "添付された画像を高画質で表示する"
|
||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||
twitter: "Twitter連携"
|
||||
twitter-connect: "Twitterアカウントに接続する"
|
||||
twitter-reconnect: "再接続する"
|
||||
twitter-disconnect: "切断する"
|
||||
github: "GitHub連携"
|
||||
github-connect: "GitHubアカウントに接続する"
|
||||
github-reconnect: "再接続する"
|
||||
github-disconnect: "切断する"
|
||||
discord: "Discord連携"
|
||||
discord-connect: "Discordアカウントに接続する"
|
||||
discord-reconnect: "再接続する"
|
||||
discord-disconnect: "切断する"
|
||||
update: "Misskey Update"
|
||||
version: "バージョン:"
|
||||
latest-version: "最新のバージョン:"
|
||||
@@ -1418,7 +1462,6 @@ mobile/views/pages/settings.vue:
|
||||
signout: "サインアウト"
|
||||
sound: "サウンド"
|
||||
enable-sounds: "サウンドを有効にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
password: "パスワード"
|
||||
mobile/views/pages/user.vue:
|
||||
follows-you: "フォローされています"
|
||||
@@ -1428,12 +1471,14 @@ mobile/views/pages/user.vue:
|
||||
overview: "概要"
|
||||
timeline: "タイムライン"
|
||||
media: "メディア"
|
||||
is-suspended: "このユーザーは凍結されています。"
|
||||
mute: "ミュート"
|
||||
unmute: "ミュート解除"
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "最近の投稿"
|
||||
images: "画像"
|
||||
@@ -1479,6 +1524,7 @@ deck/deck.user-column.vue:
|
||||
posts: "投稿"
|
||||
following: "フォロー"
|
||||
followers: "フォロワー"
|
||||
mention: "メンション"
|
||||
images: "画像"
|
||||
activity: "アクティビティ"
|
||||
timeline: "タイムライン"
|
||||
|
||||
@@ -26,7 +26,7 @@ common:
|
||||
close: "关闭"
|
||||
do-not-copy-paste: "请不要在这里输入或粘贴代码。您帐户可能会受到损害。"
|
||||
load-more: "加载更多"
|
||||
enter-password: "パスワードを入力してください"
|
||||
enter-password: "请输入您的密码"
|
||||
got-it: "没问题"
|
||||
customization-tips:
|
||||
title: "客制化提示"
|
||||
@@ -90,7 +90,6 @@ common:
|
||||
followers-desc: "仅发送至粉丝"
|
||||
specified: "指定用户"
|
||||
specified-desc: "仅发送至指定用户"
|
||||
private: "私密"
|
||||
local-public: "公开(仅限本地)"
|
||||
local-home: "首页(仅限本地)"
|
||||
local-followers: "关注者(仅限本地)"
|
||||
@@ -110,9 +109,10 @@ common:
|
||||
my-token-regenerated: "您的 Token 已被重置, 您将自动登出。"
|
||||
i-like-sushi: "相比于布丁来说, 我更喜欢寿司。"
|
||||
show-reversi-board-labels: "在 Reversi 中显示行和列表签"
|
||||
use-contrast-reversi-stones: "Make the stone color clear in Reversi"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "认证用户"
|
||||
disable-animated-mfm: "在帖子中禁用动画文本"
|
||||
suggest-recent-hashtags: "在帖子表单上显示最近流行的主题标签"
|
||||
always-show-nsfw: "总是显示 NSFW 的内容"
|
||||
always-mark-nsfw: "总是用 NSFW 来标记附件"
|
||||
show-full-acct: "不要从用户名中忽略主机名"
|
||||
@@ -120,14 +120,15 @@ common:
|
||||
reduce-motion: "减弱UI中的动画效果"
|
||||
this-setting-is-this-device-only: "设置仅在本设备中生效"
|
||||
use-os-default-emojis: "使用设备系统默认的 emojis"
|
||||
do-not-use-in-production: '这是一个开发者测试版. 请勿在生产环境中使用.'
|
||||
do-not-use-in-production: "这是一个开发者测试版. 请勿在生产环境中使用."
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "该用户的信息已被复制."
|
||||
is-remote-post: "该投稿已被复制."
|
||||
view-on-remote: "查看准确的信息"
|
||||
renoted-by: "由 {user} Renote"
|
||||
error:
|
||||
title: '哦不, 发生了一些问题! :('
|
||||
retry: '重试'
|
||||
title: "哦不, 发生了一些问题! :("
|
||||
retry: "重试"
|
||||
reversi:
|
||||
drawn: "平局"
|
||||
my-turn: "轮到你了"
|
||||
@@ -158,12 +159,12 @@ common:
|
||||
polls: "投票"
|
||||
post-form: "投稿形式"
|
||||
server: "服务器信息"
|
||||
donation: "捐助"
|
||||
nav: "导航"
|
||||
tips: "提示"
|
||||
hashtags: "标签"
|
||||
dev: "构建应用程序失败,请再试一次。"
|
||||
ai-chan-kawaii: "Ai-chan kawaii!"
|
||||
you: "您"
|
||||
auth/views/form.vue:
|
||||
share-access: "您要允许<i>{name}</i>来访问您的账户吗?"
|
||||
permission-ask: "这个应用程序需要以下权限:"
|
||||
@@ -259,6 +260,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "阅读注意"
|
||||
click-to-show: "点击以显示"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "主题"
|
||||
dark-theme: "黑暗模式主题"
|
||||
light-themes: "明亮主题"
|
||||
@@ -275,6 +277,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "基础主题"
|
||||
base-theme-light: "亮"
|
||||
base-theme-dark: "暗"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "主题名称"
|
||||
preview-created-theme: "预览"
|
||||
invalid-theme: "无效主题"
|
||||
@@ -296,6 +299,9 @@ common/views/components/theme.vue:
|
||||
common/views/components/cw-button.vue:
|
||||
hide: "隐藏"
|
||||
show: "查看更多"
|
||||
chars: "{count}文字"
|
||||
files: "{count} 个文件"
|
||||
poll: "アンケート"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "查找用户"
|
||||
you: "您"
|
||||
@@ -325,6 +331,7 @@ common/views/components/nav.vue:
|
||||
develop: "开发者"
|
||||
feedback: "反馈"
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "详细信息"
|
||||
copy-link: "复制链接"
|
||||
favorite: "收藏这个投稿"
|
||||
@@ -400,13 +407,18 @@ common/views/components/stream-indicator.vue:
|
||||
connecting: "连接中"
|
||||
reconnecting: "重新连接中"
|
||||
connected: "已连接"
|
||||
common/views/components/twitter-setting.vue:
|
||||
description: "当您用Twitter连接Misskey账户后,您将能够看到有关您自己的信息,并且您将能够使用Twitter登录。"
|
||||
connected-to: "此账户已连接Twitter"
|
||||
detail: "详细信息..."
|
||||
reconnect: "重新连接"
|
||||
connect: "连接您的推特账户"
|
||||
common/views/components/notification-settings.vue:
|
||||
title: "通知"
|
||||
mark-as-read-all-notifications: "すべての通知を既読にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
mark-as-read-all-talk-messages: "すべてのトークを既読にする"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
common/views/components/integration-settings.vue:
|
||||
title: "サービス連携"
|
||||
connect: "连接"
|
||||
disconnect: "未连接"
|
||||
connected-to: "次のアカウントに接続されています"
|
||||
common/views/components/github-setting.vue:
|
||||
description: "当您用GitHub连接Misskey账户后,您将能够看到有关您自己的信息,并且您将能够使用GitHub登录。"
|
||||
connected-to: "此账户已连接GitHub"
|
||||
@@ -431,7 +443,6 @@ common/views/components/visibility-chooser.vue:
|
||||
followers-desc: "仅发送至关注者"
|
||||
specified: "直接"
|
||||
specified-desc: "仅发送至指定用户"
|
||||
private: "私密"
|
||||
local-public: "公开(仅限本地)"
|
||||
local-public-desc: "不要发布到公开"
|
||||
local-home: "首页(仅限本地)"
|
||||
@@ -439,12 +450,20 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{} 被提到"
|
||||
empty: "没有流行的标签"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "显示语言"
|
||||
pick-language: "选择一个语言"
|
||||
recommended: "推荐"
|
||||
auto: "自动"
|
||||
specify-language: "指定语言"
|
||||
info: "你需要刷新这个页面来应用更改。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "简况"
|
||||
name: "名称"
|
||||
account: "账户"
|
||||
location: "位置"
|
||||
description: "关于我"
|
||||
language: "语言"
|
||||
birthday: "生日"
|
||||
avatar: "头像"
|
||||
banner: "背景"
|
||||
@@ -452,16 +471,24 @@ common/views/components/profile-editor.vue:
|
||||
is-bot: "整个账户是机器人"
|
||||
is-locked: "关注者请求需要批准"
|
||||
careful-bot: "机器人的关注者请求需要批准"
|
||||
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する"
|
||||
advanced: "其他选项"
|
||||
privacy: "隐私"
|
||||
save: "保存"
|
||||
saved: "更新配置文件成功"
|
||||
uploading: "正在上传"
|
||||
upload-failed: "上传失败"
|
||||
email: "メール設定"
|
||||
email-address: "メールアドレス"
|
||||
email-verified: "メールアドレスが確認されました"
|
||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
||||
email: "邮件设置"
|
||||
email-address: "电子邮件地址"
|
||||
email-verified: "电子邮件地址已验证"
|
||||
email-not-verified: "电子邮件地址还没有验证哦, 请检查一下收信箱吧~"
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "用户"
|
||||
rename: "重命名列表"
|
||||
delete: "删除列表"
|
||||
remove-user: "从此列表中删除"
|
||||
delete-are-you-sure: "删除列表 \"$1\"?"
|
||||
deleted: "已删除"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "确认中"
|
||||
no-broadcasts: "没有公告"
|
||||
@@ -474,9 +501,6 @@ common/views/widgets/calendar.vue:
|
||||
today: "今天:"
|
||||
this-month: "本月:"
|
||||
this-year: "今年:"
|
||||
common/views/widgets/donation.vue:
|
||||
title: "请求捐助"
|
||||
text: "为了保持 Misskey 持续运行, 这会对域名,服务器等产生一些费用。 如果您有兴趣提供捐助,请联系{}。感谢您的贡献!"
|
||||
common/views/widgets/photo-stream.vue:
|
||||
title: "图片轮播"
|
||||
no-photos: "没有图片"
|
||||
@@ -514,9 +538,11 @@ common/views/widgets/tips.vue:
|
||||
tips-line19: "可以在浏览器外部分离多个窗口。"
|
||||
tips-line20: "日历小部件的百分比显示经过的时间百分比。"
|
||||
tips-line21: "您也可以使用API开发机器人。"
|
||||
tips-line23: "Mayu的眉毛非常可爱。"
|
||||
tips-line23: "藍かわいいよ藍"
|
||||
tips-line24: "Misskey自2014年开始运营。"
|
||||
tips-line25: "在与通知功能兼容的浏览器中,您可以在Misskey未打开的情况下接收通知"
|
||||
common/views/pages/not-found.vue:
|
||||
page-not-found: "ページが見つかりませんでした"
|
||||
common/views/pages/follow.vue:
|
||||
signed-in-as: "用 {}登录"
|
||||
following: "正在关注"
|
||||
@@ -652,10 +678,12 @@ desktop/views/components/note-detail.vue:
|
||||
location: "位置信息"
|
||||
renote: "转发"
|
||||
add-reaction: "添加一个反应"
|
||||
undo-reaction: "リアクション解除"
|
||||
desktop/views/components/note.vue:
|
||||
reply: "回复"
|
||||
renote: "Renote"
|
||||
add-reaction: "添加一个反应"
|
||||
undo-reaction: "リアクション解除"
|
||||
detail: "详细信息"
|
||||
private: "这个投稿是私密的"
|
||||
deleted: "投稿已删除"
|
||||
@@ -736,8 +764,8 @@ desktop/views/components/settings.vue:
|
||||
note-visibility: "帖子可见性"
|
||||
default-note-visibility: "默认可见性"
|
||||
remember-note-visibility: "记住帖子可见性"
|
||||
web-search-engine: "ウェブ検索エンジン"
|
||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
||||
web-search-engine: "搜索引擎"
|
||||
web-search-engine-desc: "例如: https://www.google.com/?#q={{query}}"
|
||||
auto-popout: "自动弹出窗口"
|
||||
auto-popout-desc: "如果可用,将使用弹出显示而不是打开新窗口。 此设置存储在浏览器中。"
|
||||
advanced: "更多设置"
|
||||
@@ -754,10 +782,13 @@ desktop/views/components/settings.vue:
|
||||
dark-mode: "黑暗模式"
|
||||
use-shadow: "在UI中使用阴影效果"
|
||||
rounded-corners: "UI界面圆角效果"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
circle-icons: "使用圆形图标"
|
||||
contrasted-acct: "增加用户名的对比度"
|
||||
post-form-on-timeline: "在时间线顶部显示帖子表单"
|
||||
suggest-recent-hashtags: "在帖子表单上显示最近流行的主题标签"
|
||||
show-clock-on-header: "在右上角显示时钟"
|
||||
show-reply-target: "显示回复目标"
|
||||
timeline: "时间线"
|
||||
@@ -766,27 +797,26 @@ desktop/views/components/settings.vue:
|
||||
show-local-renotes: "在时间线中显示Local Renote(s)"
|
||||
show-maps: "显示地图以显示位置"
|
||||
remain-deleted-note: "继续显示已删除的帖子"
|
||||
deck-column-align: "甲板柱的位置"
|
||||
deck-column-align: "デッキのカラムの配置"
|
||||
deck-column-align-center: "中央"
|
||||
deck-column-align-left: "左"
|
||||
deck-column-align-flexible: "フレキシブル"
|
||||
deck-column-width: "デッキのカラムの幅"
|
||||
deck-column-width-narrow: "狭"
|
||||
deck-column-width-narrower: "やや狭"
|
||||
deck-column-width-normal: "正常"
|
||||
deck-column-width-wider: "やや広"
|
||||
deck-column-width-wide: "広"
|
||||
sound: "声音"
|
||||
enable-sounds: "开启声音"
|
||||
enable-sounds-desc: "收到帖子/留言时播放声音。 此设置将被存储在浏览器中。"
|
||||
volume: "音量"
|
||||
test: "测试"
|
||||
language: "语言"
|
||||
pick-language: "选择一个语言"
|
||||
recommended: "推荐"
|
||||
auto: "自动"
|
||||
specify-language: "指定语言"
|
||||
language-desc: "你需要刷新这个页面来应用更改。"
|
||||
cache: "缓存"
|
||||
clean-cache: "清除缓存"
|
||||
cache-warn: "将删除存储在浏览器中的帐户信息/帖子/回复/消息/设置的缓存。 清理完毕后需要刷新页面。"
|
||||
cache-cleared: "已清除缓存"
|
||||
cache-cleared-desc: "请刷新页面。"
|
||||
auto-watch: "自动查看帖子"
|
||||
auto-watch-desc: "自动接收有关帖子/回复/反应的通知。"
|
||||
about: "关于 Misskey"
|
||||
operator: "网站运营者"
|
||||
update: "更新 Misskey"
|
||||
@@ -825,6 +855,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "请输入您的密码"
|
||||
authenticator: "首先,您需要在设备上安装 Google Authenticator:"
|
||||
howtoinstall: "怎样安装"
|
||||
token: "トークン"
|
||||
scan: "然后,扫描二维码:"
|
||||
done: "请输入显示在您设备上的密钥:"
|
||||
submit: "提交"
|
||||
@@ -839,13 +870,13 @@ common/views/components/api-settings.vue:
|
||||
token: "令牌:"
|
||||
enter-password: "请输入您的密码"
|
||||
console:
|
||||
title: 'API 控制台'
|
||||
endpoint: '端点'
|
||||
parameter: '参数'
|
||||
title: "API 控制台"
|
||||
endpoint: "端点"
|
||||
parameter: "参数"
|
||||
credential-info: "此控制台不需要参数“i”。"
|
||||
send: '发送'
|
||||
sending: '等待回应'
|
||||
response: '结果'
|
||||
send: "发送"
|
||||
sending: "等待回应"
|
||||
response: "结果"
|
||||
desktop/views/components/settings.apps.vue:
|
||||
no-apps: "没有已连接的应用程序"
|
||||
common/views/components/drive-settings.vue:
|
||||
@@ -869,11 +900,17 @@ common/views/components/password-settings.vue:
|
||||
enter-new-password-again: "请再次输入新密码"
|
||||
not-match: "新密码不匹配"
|
||||
changed: "密码已更改"
|
||||
failed: "更改密码失败"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "这个帖子是私密的"
|
||||
deleted: "帖子已删除"
|
||||
media-count: "附加{}媒体"
|
||||
poll: "投票"
|
||||
desktop/views/components/settings.tags.vue:
|
||||
title: "标签"
|
||||
query: "查询 (可选)"
|
||||
add: "添加"
|
||||
save: "保存"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "任务管理器"
|
||||
desktop/views/components/timeline.vue:
|
||||
@@ -956,6 +993,7 @@ admin/views/instance.vue:
|
||||
instance-description: "实例介绍"
|
||||
host: "主机名"
|
||||
banner-url: "背景图片地址"
|
||||
error-image-url: "无效的图像URL"
|
||||
languages: "实例语言"
|
||||
languages-desc: "您可以添加多个,以空格分隔。"
|
||||
maintainer-config: "管理员信息"
|
||||
@@ -1004,16 +1042,22 @@ admin/views/instance.vue:
|
||||
external-user-recommendation-engine-desc: "例如: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
||||
external-user-recommendation-timeout: "超时"
|
||||
external-user-recommendation-timeout-desc: "单位为毫秒 (例如:300000)"
|
||||
email-config: "メールサーバーの設定"
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
email: "メールアドレス"
|
||||
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||
smtp-host: "SMTPホスト"
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
smtp-pass: "SMTPパスワード"
|
||||
email-config: "电子邮件服务器设置"
|
||||
email-config-info: "用于确认电子邮件和密码重置等。"
|
||||
enable-email: "启用电子邮件送递"
|
||||
email: "电子邮件地址"
|
||||
smtp-secure: "在 SMTP 连接中使用隐式 SSL / TLS"
|
||||
smtp-secure-info: "使用时关闭 STARTTLS。"
|
||||
smtp-host: "SMTP 服务器地址 (主机名)"
|
||||
smtp-port: "SMTP 端口"
|
||||
smtp-user: "SMTP 用户名"
|
||||
smtp-pass: "SMTP 密码"
|
||||
serviceworker-config: "ServiceWorker"
|
||||
enable-serviceworker: "启用ServiceWorker"
|
||||
serviceworker-info: "プッシュ通知を行うには有効する必要があります。"
|
||||
vapid-publickey: "VAPID公钥"
|
||||
vapid-privatekey: "VAPID私钥"
|
||||
vapid-info: "如果您想要启用ServiceWorker,那么您需要生成VAPID秘钥。除非您已经在其他地方设置了全局node_modules位置,否则您需要将其作为root用户运行:"
|
||||
admin/views/charts.vue:
|
||||
title: "历史记录"
|
||||
per-day: "每天"
|
||||
@@ -1039,6 +1083,22 @@ admin/views/charts.vue:
|
||||
network-requests: "请求"
|
||||
network-time: "响应时间"
|
||||
network-usage: "网络流量"
|
||||
admin/views/drive.vue:
|
||||
sort:
|
||||
title: "排序"
|
||||
createdAtAsc: "アップロード日時が古い順"
|
||||
createdAtDesc: "アップロード日時が新しい順"
|
||||
sizeAsc: "サイズが小さい順"
|
||||
sizeDesc: "サイズが大きい順"
|
||||
origin:
|
||||
title: "源自"
|
||||
combined: "本地+远程"
|
||||
local: "本地"
|
||||
remote: "远程"
|
||||
delete: "删除"
|
||||
deleted: "已删除"
|
||||
mark-as-sensitive: "标记为“敏感”"
|
||||
unmark-as-sensitive: "取消标记为“敏感”"
|
||||
admin/views/users.vue:
|
||||
operation: "操作"
|
||||
username-or-userid: "用户名或用户ID"
|
||||
@@ -1170,6 +1230,7 @@ desktop/views/pages/user/user.header.vue:
|
||||
posts: "帖子"
|
||||
following: "关注中"
|
||||
followers: "关注者"
|
||||
mention: "メンション"
|
||||
is-bot: "这个账户是Bot"
|
||||
years-old: "{age}岁"
|
||||
year: "年"
|
||||
@@ -1179,6 +1240,7 @@ desktop/views/pages/user/user.timeline.vue:
|
||||
default: "帖子"
|
||||
with-replies: "帖子与回复"
|
||||
with-media: "媒体"
|
||||
my-posts: "私の投稿"
|
||||
empty: "看起来这个用户还没有发布什么呢。"
|
||||
desktop/views/widgets/messaging.vue:
|
||||
title: "信息"
|
||||
@@ -1361,11 +1423,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "选择文件"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "以{}登录"
|
||||
lang: "语言"
|
||||
lang-tip: "你需要刷新这个页面来应用更改。"
|
||||
recommended: "推荐"
|
||||
auto: "自动"
|
||||
specify-language: "选择语言"
|
||||
design: "设计与展示"
|
||||
dark-mode: "夜间模式"
|
||||
i-am-under-limited-internet: "我的带宽有限"
|
||||
@@ -1382,29 +1439,16 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知形式"
|
||||
notification-position-bottom: "底部"
|
||||
notification-position-top: "顶部"
|
||||
theme: "主题"
|
||||
behavior: "动作"
|
||||
fetch-on-scroll: "滚动无限加载"
|
||||
note-visibility: "帖子可见性"
|
||||
default-note-visibility: "默认可见性"
|
||||
remember-note-visibility: "记住帖子可见性"
|
||||
web-search-engine: "ウェブ検索エンジン"
|
||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
||||
web-search-engine: "搜索引擎"
|
||||
web-search-engine-desc: "例如: https://www.google.com/?#q={{query}}"
|
||||
disable-via-mobile: "不要将帖子标记为“来自手机”"
|
||||
load-raw-images: "以原始质量显示附加图像"
|
||||
load-remote-media: "显示来自远程服务器的媒体"
|
||||
twitter: "Twitter integration"
|
||||
twitter-connect: "连接到您的 Twitter"
|
||||
twitter-reconnect: "重新连接"
|
||||
twitter-disconnect: "未连接"
|
||||
github: "GitHub Integration"
|
||||
github-connect: "连接到您的 GitHub"
|
||||
github-reconnect: "重新连接"
|
||||
github-disconnect: "未连接"
|
||||
discord: "Discord Integration"
|
||||
discord-connect: "连接到您的 Discord"
|
||||
discord-reconnect: "重新连接"
|
||||
discord-disconnect: "未连接"
|
||||
update: "更新 Misskey"
|
||||
version: "当前版本:"
|
||||
latest-version: "最新版本:"
|
||||
@@ -1418,7 +1462,6 @@ mobile/views/pages/settings.vue:
|
||||
signout: "注销"
|
||||
sound: "声音"
|
||||
enable-sounds: "开启声音"
|
||||
mark-as-read-all-unread-notes: "将所有帖子标记为已读"
|
||||
password: "密码"
|
||||
mobile/views/pages/user.vue:
|
||||
follows-you: "关注您"
|
||||
@@ -1428,12 +1471,14 @@ mobile/views/pages/user.vue:
|
||||
overview: "概观"
|
||||
timeline: "时间线"
|
||||
media: "媒体"
|
||||
is-suspended: "此账户已被冻结。"
|
||||
mute: "静音"
|
||||
unmute: "取消静音"
|
||||
block: "屏蔽"
|
||||
unblock: "取消屏蔽"
|
||||
years-old: "{age}岁"
|
||||
push-to-list: "添加至列表"
|
||||
select-list: "选择一个列表"
|
||||
list-pushed: "成功添加{user}到{list}"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "最近的帖子"
|
||||
images: "图片"
|
||||
@@ -1479,6 +1524,7 @@ deck/deck.user-column.vue:
|
||||
posts: "帖子"
|
||||
following: "关注中"
|
||||
followers: "关注者"
|
||||
mention: "メンション"
|
||||
images: "图片"
|
||||
activity: "活动"
|
||||
timeline: "时间线"
|
||||
|
||||
77
package.json
77
package.json
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "misskey",
|
||||
"author": "syuilo <i@syuilo.com>",
|
||||
"version": "10.59.3",
|
||||
"clientVersion": "2.0.12313",
|
||||
"version": "10.73.0",
|
||||
"clientVersion": "2.0.13266",
|
||||
"codename": "nighthike",
|
||||
"main": "./built/index.js",
|
||||
"private": true,
|
||||
@@ -21,23 +21,22 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-svg-core": "1.2.8",
|
||||
"@fortawesome/free-brands-svg-icons": "5.5.0",
|
||||
"@fortawesome/free-brands-svg-icons": "5.6.0",
|
||||
"@fortawesome/free-regular-svg-icons": "5.5.0",
|
||||
"@fortawesome/free-solid-svg-icons": "5.5.0",
|
||||
"@fortawesome/free-solid-svg-icons": "5.6.3",
|
||||
"@fortawesome/vue-fontawesome": "0.1.2",
|
||||
"@koa/cors": "2.2.2",
|
||||
"@koa/cors": "2.2.3",
|
||||
"@prezzemolo/rap": "0.1.2",
|
||||
"@prezzemolo/zip": "0.0.3",
|
||||
"@types/bcryptjs": "2.4.2",
|
||||
"@types/chai-http": "3.0.5",
|
||||
"@types/dateformat": "1.0.1",
|
||||
"@types/dateformat": "3.0.0",
|
||||
"@types/debug": "0.0.31",
|
||||
"@types/deep-equal": "1.0.1",
|
||||
"@types/double-ended-queue": "2.1.0",
|
||||
"@types/elasticsearch": "5.0.28",
|
||||
"@types/file-type": "5.2.2",
|
||||
"@types/elasticsearch": "5.0.29",
|
||||
"@types/file-type": "10.6.0",
|
||||
"@types/gulp": "3.8.36",
|
||||
"@types/gulp-htmlmin": "1.3.32",
|
||||
"@types/gulp-mocha": "0.0.32",
|
||||
"@types/gulp-rename": "0.0.33",
|
||||
"@types/gulp-replace": "0.0.31",
|
||||
@@ -45,10 +44,10 @@
|
||||
"@types/gulp-util": "3.0.34",
|
||||
"@types/is-root": "1.0.0",
|
||||
"@types/is-url": "1.2.28",
|
||||
"@types/js-yaml": "3.11.2",
|
||||
"@types/js-yaml": "3.11.4",
|
||||
"@types/katex": "0.5.0",
|
||||
"@types/koa": "2.0.47",
|
||||
"@types/koa-bodyparser": "5.0.1",
|
||||
"@types/koa-bodyparser": "5.0.2",
|
||||
"@types/koa-compress": "2.0.8",
|
||||
"@types/koa-favicon": "2.0.19",
|
||||
"@types/koa-logger": "3.1.1",
|
||||
@@ -77,19 +76,19 @@
|
||||
"@types/rimraf": "2.0.2",
|
||||
"@types/seedrandom": "2.4.27",
|
||||
"@types/sharp": "0.21.0",
|
||||
"@types/showdown": "1.7.5",
|
||||
"@types/showdown": "1.9.0",
|
||||
"@types/speakeasy": "2.0.3",
|
||||
"@types/systeminformation": "3.23.1",
|
||||
"@types/tinycolor2": "1.4.1",
|
||||
"@types/tmp": "0.0.33",
|
||||
"@types/uuid": "3.4.4",
|
||||
"@types/webpack": "4.4.19",
|
||||
"@types/webpack": "4.4.21",
|
||||
"@types/webpack-stream": "3.2.10",
|
||||
"@types/websocket": "0.0.40",
|
||||
"@types/ws": "6.0.1",
|
||||
"animejs": "2.2.0",
|
||||
"apexcharts": "2.2.3",
|
||||
"autobind-decorator": "2.3.1",
|
||||
"apexcharts": "2.4.2",
|
||||
"autobind-decorator": "2.4.0",
|
||||
"autosize": "4.0.2",
|
||||
"autwh": "0.1.0",
|
||||
"bcryptjs": "2.4.3",
|
||||
@@ -107,40 +106,39 @@
|
||||
"debug": "4.1.0",
|
||||
"deep-equal": "1.0.1",
|
||||
"deepcopy": "0.6.3",
|
||||
"diskusage": "0.2.5",
|
||||
"diskusage": "1.0.0",
|
||||
"double-ended-queue": "2.1.0-0",
|
||||
"elasticsearch": "15.2.0",
|
||||
"emojilib": "2.4.0",
|
||||
"escape-regexp": "0.0.1",
|
||||
"eslint": "5.8.0",
|
||||
"eslint-plugin-vue": "4.7.1",
|
||||
"eslint": "5.11.1",
|
||||
"eslint-plugin-vue": "5.0.0",
|
||||
"eventemitter3": "3.1.0",
|
||||
"feed": "2.0.2",
|
||||
"file-loader": "2.0.0",
|
||||
"file-type": "10.4.0",
|
||||
"file-type": "10.6.0",
|
||||
"fuckadblock": "3.2.1",
|
||||
"gulp": "3.9.1",
|
||||
"gulp-cssnano": "2.1.3",
|
||||
"gulp-htmlmin": "5.0.1",
|
||||
"gulp-imagemin": "4.1.0",
|
||||
"gulp-mocha": "6.0.0",
|
||||
"gulp-pug": "4.0.1",
|
||||
"gulp-rename": "1.4.0",
|
||||
"gulp-replace": "1.0.0",
|
||||
"gulp-sourcemaps": "2.6.4",
|
||||
"gulp-stylus": "2.7.0",
|
||||
"gulp-tslint": "8.1.3",
|
||||
"gulp-typescript": "4.0.2",
|
||||
"gulp-typescript": "5.0.0",
|
||||
"gulp-uglify": "3.0.1",
|
||||
"gulp-util": "3.0.8",
|
||||
"gulp-yaml": "2.0.2",
|
||||
"hard-source-webpack-plugin": "0.12.0",
|
||||
"hard-source-webpack-plugin": "0.13.1",
|
||||
"html-minifier": "3.5.21",
|
||||
"http-signature": "1.2.0",
|
||||
"insert-text-at-cursor": "0.1.1",
|
||||
"is-root": "2.0.0",
|
||||
"is-url": "1.2.4",
|
||||
"js-yaml": "3.12.0",
|
||||
"jsdom": "13.0.0",
|
||||
"jsdom": "13.1.0",
|
||||
"json5": "2.1.0",
|
||||
"json5-loader": "1.0.1",
|
||||
"katex": "0.10.0",
|
||||
@@ -156,16 +154,17 @@
|
||||
"koa-send": "5.0.0",
|
||||
"koa-slow": "2.1.0",
|
||||
"koa-views": "6.1.4",
|
||||
"loader-utils": "1.1.0",
|
||||
"minio": "7.0.1",
|
||||
"langmap": "0.0.16",
|
||||
"loader-utils": "1.2.3",
|
||||
"minio": "7.0.2",
|
||||
"mkdirp": "0.5.1",
|
||||
"mocha": "5.2.0",
|
||||
"moji": "0.5.1",
|
||||
"moment": "2.22.2",
|
||||
"mongodb": "3.1.9",
|
||||
"mongodb": "3.1.10",
|
||||
"monk": "6.0.6",
|
||||
"ms": "2.1.1",
|
||||
"nan": "2.11.1",
|
||||
"nan": "2.12.1",
|
||||
"nested-property": "0.0.7",
|
||||
"nodemailer": "4.7.0",
|
||||
"nprogress": "0.2.0",
|
||||
@@ -194,7 +193,7 @@
|
||||
"rndstr": "1.0.0",
|
||||
"s-age": "1.1.2",
|
||||
"seedrandom": "2.4.4",
|
||||
"sharp": "0.21.0",
|
||||
"sharp": "0.21.1",
|
||||
"showdown": "1.9.0",
|
||||
"showdown-highlightjs-extension": "0.1.2",
|
||||
"speakeasy": "2.0.0",
|
||||
@@ -203,7 +202,7 @@
|
||||
"stylus": "0.54.5",
|
||||
"stylus-loader": "3.0.2",
|
||||
"summaly": "2.2.0",
|
||||
"systeminformation": "3.51.3",
|
||||
"systeminformation": "3.52.2",
|
||||
"syuilo-password-strength": "0.0.1",
|
||||
"terser-webpack-plugin": "1.1.0",
|
||||
"textarea-caret": "3.1.0",
|
||||
@@ -211,26 +210,28 @@
|
||||
"tmp": "0.0.33",
|
||||
"ts-loader": "5.3.1",
|
||||
"ts-node": "7.0.1",
|
||||
"tslint": "5.10.0",
|
||||
"typescript": "3.1.6",
|
||||
"typescript-eslint-parser": "21.0.1",
|
||||
"tslint": "5.12.0",
|
||||
"tslint-sonarts": "1.8.0",
|
||||
"typescript": "3.2.2",
|
||||
"typescript-eslint-parser": "21.0.2",
|
||||
"uglify-es": "3.3.9",
|
||||
"url-loader": "1.1.2",
|
||||
"uuid": "3.3.2",
|
||||
"v-animate-css": "0.0.2",
|
||||
"v-animate-css": "0.0.3",
|
||||
"vue": "2.5.17",
|
||||
"vue-color": "2.7.0",
|
||||
"vue-content-loading": "1.5.3",
|
||||
"vue-cropperjs": "2.2.2",
|
||||
"vue-cropperjs": "3.0.0",
|
||||
"vue-i18n": "8.3.2",
|
||||
"vue-js-modal": "1.3.27",
|
||||
"vue-js-modal": "1.3.28",
|
||||
"vue-loader": "15.4.2",
|
||||
"vue-marquee-text-component": "1.1.0",
|
||||
"vue-router": "3.0.2",
|
||||
"vue-sequential-entrance": "1.1.3",
|
||||
"vue-style-loader": "4.1.2",
|
||||
"vue-svg-inline-loader": "1.2.2",
|
||||
"vue-svg-inline-loader": "1.2.7",
|
||||
"vue-template-compiler": "2.5.17",
|
||||
"vuedraggable": "2.16.0",
|
||||
"vuedraggable": "2.17.0",
|
||||
"vuewordcloud": "18.7.11",
|
||||
"vuex": "3.0.1",
|
||||
"vuex-persistedstate": "2.5.4",
|
||||
|
||||
@@ -61,11 +61,12 @@ export default abstract class Chart<T> {
|
||||
|
||||
constructor(name: string, grouped = false) {
|
||||
this.collection = db.get<Log<T>>(`chart.${name}`);
|
||||
if (grouped) {
|
||||
this.collection.createIndex({ span: -1, date: -1, group: -1 }, { unique: true });
|
||||
} else {
|
||||
this.collection.createIndex({ span: -1, date: -1 }, { unique: true });
|
||||
}
|
||||
const keys = {
|
||||
span: -1,
|
||||
date: -1
|
||||
} as { [key: string]: 1 | -1; };
|
||||
if (grouped) keys.group = -1;
|
||||
this.collection.createIndex(keys, { unique: true });
|
||||
}
|
||||
|
||||
@autobind
|
||||
@@ -73,14 +74,14 @@ export default abstract class Chart<T> {
|
||||
const query: Obj = {};
|
||||
|
||||
const dive = (x: Obj, path: string) => {
|
||||
Object.entries(x).forEach(([k, v]) => {
|
||||
for (const [k, v] of Object.entries(x)) {
|
||||
const p = path ? `${path}.${k}` : k;
|
||||
if (typeof v === 'number') {
|
||||
query[p] = v;
|
||||
} else {
|
||||
dive(v, p);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
dive(x, path);
|
||||
@@ -333,14 +334,14 @@ export default abstract class Chart<T> {
|
||||
* にする
|
||||
*/
|
||||
const dive = (x: Obj, path?: string) => {
|
||||
Object.entries(x).forEach(([k, v]) => {
|
||||
for (const [k, v] of Object.entries(x)) {
|
||||
const p = path ? `${path}.${k}` : k;
|
||||
if (typeof v == 'object') {
|
||||
dive(v, p);
|
||||
} else {
|
||||
nestedProperty.set(res, p, chart.map(s => nestedProperty.get(s, p)));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
dive(chart[0]);
|
||||
|
||||
@@ -9,6 +9,7 @@ import './style.styl';
|
||||
|
||||
import init from '../init';
|
||||
import Index from './views/index.vue';
|
||||
import NotFound from '../common/views/pages/not-found.vue';
|
||||
|
||||
init(launch => {
|
||||
document.title = 'Admin';
|
||||
@@ -19,6 +20,7 @@ init(launch => {
|
||||
base: '/admin/',
|
||||
routes: [
|
||||
{ path: '/', component: Index },
|
||||
{ path: '*', component: NotFound }
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
@@ -48,15 +48,15 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
remove(i) {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'warning',
|
||||
text: this.$t('_remove.are-you-sure').replace('$1', this.announcements.find((_, j) => j == i).title),
|
||||
showCancelButton: true
|
||||
}).then(res => {
|
||||
if (!res) return;
|
||||
}).then(({ canceled }) => {
|
||||
if (canceled) return;
|
||||
this.announcements = this.announcements.filter((_, j) => j !== i);
|
||||
this.save(true);
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('_remove.removed')
|
||||
});
|
||||
@@ -68,13 +68,13 @@ export default Vue.extend({
|
||||
broadcasts: this.announcements
|
||||
}).then(() => {
|
||||
if (!silent) {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('saved')
|
||||
});
|
||||
}
|
||||
}).catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e
|
||||
});
|
||||
|
||||
@@ -56,7 +56,9 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
onLogs(logs) {
|
||||
logs.reverse().forEach(log => this.onLog(log));
|
||||
for (const log of logs.reverse()) {
|
||||
this.onLog(log)
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -67,7 +69,7 @@ export default Vue.extend({
|
||||
display block
|
||||
padding 12px 16px 16px 16px
|
||||
height 250px
|
||||
overflow hidden
|
||||
overflow auto
|
||||
box-shadow 0 2px 4px rgba(0, 0, 0, 0.1)
|
||||
background var(--adminDashboardCardBg)
|
||||
border-radius 8px
|
||||
|
||||
@@ -132,7 +132,9 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
onStatsLog(statsLog) {
|
||||
statsLog.reverse().forEach(stats => this.onStats(stats));
|
||||
for (const stats of statsLog.reverse()) {
|
||||
this.onStats(stats);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -127,12 +127,12 @@ export default Vue.extend({
|
||||
this.$root.api('instances', {
|
||||
sort: '+notes'
|
||||
}).then(instances => {
|
||||
instances.forEach(i => {
|
||||
for (const i of instances) {
|
||||
i.bg = randomColor({
|
||||
seed: i.host,
|
||||
luminosity: 'dark'
|
||||
});
|
||||
});
|
||||
}
|
||||
this.instances = instances;
|
||||
});
|
||||
},
|
||||
|
||||
188
src/client/app/admin/views/drive.vue
Normal file
188
src/client/app/admin/views/drive.vue
Normal file
@@ -0,0 +1,188 @@
|
||||
<template>
|
||||
<div class="pwnqwyet">
|
||||
<ui-card>
|
||||
<div slot="title"><fa :icon="faCloud"/> {{ $t('@.drive') }}</div>
|
||||
<section class="fit-top">
|
||||
<ui-horizon-group inputs>
|
||||
<ui-select v-model="sort">
|
||||
<span slot="label">{{ $t('sort.title') }}</span>
|
||||
<option value="-createdAt">{{ $t('sort.createdAtAsc') }}</option>
|
||||
<option value="+createdAt">{{ $t('sort.createdAtDesc') }}</option>
|
||||
<option value="-size">{{ $t('sort.sizeAsc') }}</option>
|
||||
<option value="+size">{{ $t('sort.sizeDesc') }}</option>
|
||||
</ui-select>
|
||||
<ui-select v-model="origin">
|
||||
<span slot="label">{{ $t('origin.title') }}</span>
|
||||
<option value="combined">{{ $t('origin.combined') }}</option>
|
||||
<option value="local">{{ $t('origin.local') }}</option>
|
||||
<option value="remote">{{ $t('origin.remote') }}</option>
|
||||
</ui-select>
|
||||
</ui-horizon-group>
|
||||
<sequential-entrance animation="entranceFromTop" delay="25">
|
||||
<div class="kidvdlkg" v-for="file in files">
|
||||
<div @click="file._open = !file._open">
|
||||
<div>
|
||||
<div class="thumbnail" :style="thumbnail(file)"></div>
|
||||
</div>
|
||||
<div>
|
||||
<header>
|
||||
<b>{{ file.name }}</b>
|
||||
<span class="username">@{{ file.user | acct }}</span>
|
||||
</header>
|
||||
<div>
|
||||
<div>
|
||||
<span style="margin-right:16px;">{{ file.type }}</span>
|
||||
<span>{{ file.datasize | bytes }}</span>
|
||||
</div>
|
||||
<div><mk-time :time="file.createdAt" mode="detail"/></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-show="file._open">
|
||||
<ui-horizon-group>
|
||||
<ui-button @click="toggleSensitive(file)" v-if="file.isSensitive"><fa :icon="faEye"/> {{ $t('unmark-as-sensitive') }}</ui-button>
|
||||
<ui-button @click="toggleSensitive(file)" v-else><fa :icon="faEyeSlash"/> {{ $t('mark-as-sensitive') }}</ui-button>
|
||||
<ui-button @click="del(file)"><fa :icon="faTrashAlt"/> {{ $t('delete') }}</ui-button>
|
||||
</ui-horizon-group>
|
||||
</div>
|
||||
</div>
|
||||
</sequential-entrance>
|
||||
<ui-button v-if="existMore" @click="fetch">{{ $t('@.load-more') }}</ui-button>
|
||||
</section>
|
||||
</ui-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../i18n';
|
||||
import { faCloud } from '@fortawesome/free-solid-svg-icons';
|
||||
import { faTrashAlt, faEye, faEyeSlash } from '@fortawesome/free-regular-svg-icons';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('admin/views/drive.vue'),
|
||||
|
||||
data() {
|
||||
return {
|
||||
sort: '+createdAt',
|
||||
origin: 'combined',
|
||||
limit: 10,
|
||||
offset: 0,
|
||||
files: [],
|
||||
existMore: false,
|
||||
faCloud, faTrashAlt, faEye, faEyeSlash
|
||||
};
|
||||
},
|
||||
|
||||
watch: {
|
||||
sort() {
|
||||
this.files = [];
|
||||
this.offset = 0;
|
||||
this.fetch();
|
||||
},
|
||||
|
||||
origin() {
|
||||
this.files = [];
|
||||
this.offset = 0;
|
||||
this.fetch();
|
||||
}
|
||||
},
|
||||
|
||||
mounted() {
|
||||
this.fetch();
|
||||
},
|
||||
|
||||
methods: {
|
||||
fetch() {
|
||||
this.$root.api('admin/drive/files', {
|
||||
origin: this.origin,
|
||||
sort: this.sort,
|
||||
offset: this.offset,
|
||||
limit: this.limit + 1
|
||||
}).then(files => {
|
||||
if (files.length == this.limit + 1) {
|
||||
files.pop();
|
||||
this.existMore = true;
|
||||
} else {
|
||||
this.existMore = false;
|
||||
}
|
||||
for (const x of files) {
|
||||
x._open = false;
|
||||
}
|
||||
this.files = this.files.concat(files);
|
||||
this.offset += this.limit;
|
||||
});
|
||||
},
|
||||
|
||||
thumbnail(file: any): any {
|
||||
return {
|
||||
'background-color': file.properties.avgColor && file.properties.avgColor.length == 3 ? `rgb(${file.properties.avgColor.join(',')})` : 'transparent',
|
||||
'background-image': `url(${file.thumbnailUrl})`
|
||||
};
|
||||
},
|
||||
|
||||
async del(file: any) {
|
||||
const process = async () => {
|
||||
await this.$root.api('drive/files/delete', { fileId: file.id });
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('deleted')
|
||||
});
|
||||
};
|
||||
|
||||
await process().catch(e => {
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e.toString()
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
toggleSensitive(file: any) {
|
||||
this.$root.api('drive/files/update', {
|
||||
fileId: file.id,
|
||||
isSensitive: !file.isSensitive
|
||||
});
|
||||
|
||||
file.isSensitive = !file.isSensitive;
|
||||
},
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.pwnqwyet
|
||||
@media (min-width 500px)
|
||||
padding 16px
|
||||
|
||||
.kidvdlkg
|
||||
padding 16px 0
|
||||
border-top solid 1px var(--faceDivider)
|
||||
|
||||
> div:first-child
|
||||
display flex
|
||||
cursor pointer
|
||||
|
||||
> div:nth-child(1)
|
||||
> .thumbnail
|
||||
display block
|
||||
width 64px
|
||||
height 64px
|
||||
background-size cover
|
||||
background-position center center
|
||||
|
||||
> div:nth-child(2)
|
||||
flex 1
|
||||
padding-left 16px
|
||||
|
||||
@media (max-width 500px)
|
||||
font-size 14px
|
||||
|
||||
> header
|
||||
word-break break-word
|
||||
|
||||
> .username
|
||||
margin-left 8px
|
||||
opacity 0.7
|
||||
|
||||
</style>
|
||||
@@ -24,24 +24,28 @@
|
||||
|
||||
<ui-card>
|
||||
<div slot="title"><fa :icon="faGrin"/> {{ $t('emojis.title') }}</div>
|
||||
<section v-for="emoji in emojis">
|
||||
<img :src="emoji.url" :alt="emoji.name" style="width: 64px;"/>
|
||||
<ui-horizon-group inputs>
|
||||
<ui-input v-model="emoji.name">
|
||||
<span>{{ $t('add-emoji.name') }}</span>
|
||||
<section v-for="emoji in emojis" class="oryfrbft">
|
||||
<div>
|
||||
<img :src="emoji.url" :alt="emoji.name" style="width: 64px;"/>
|
||||
</div>
|
||||
<div>
|
||||
<ui-horizon-group>
|
||||
<ui-input v-model="emoji.name">
|
||||
<span>{{ $t('add-emoji.name') }}</span>
|
||||
</ui-input>
|
||||
<ui-input v-model="emoji.aliases">
|
||||
<span>{{ $t('add-emoji.aliases') }}</span>
|
||||
</ui-input>
|
||||
</ui-horizon-group>
|
||||
<ui-input v-model="emoji.url">
|
||||
<i slot="icon"><fa icon="link"/></i>
|
||||
<span>{{ $t('add-emoji.url') }}</span>
|
||||
</ui-input>
|
||||
<ui-input v-model="emoji.aliases">
|
||||
<span>{{ $t('add-emoji.aliases') }}</span>
|
||||
</ui-input>
|
||||
</ui-horizon-group>
|
||||
<ui-input v-model="emoji.url">
|
||||
<i slot="icon"><fa icon="link"/></i>
|
||||
<span>{{ $t('add-emoji.url') }}</span>
|
||||
</ui-input>
|
||||
<ui-horizon-group class="fit-bottom">
|
||||
<ui-button @click="updateEmoji(emoji)"><fa :icon="['far', 'save']"/> {{ $t('emojis.update') }}</ui-button>
|
||||
<ui-button @click="removeEmoji(emoji)"><fa :icon="['far', 'trash-alt']"/> {{ $t('emojis.remove') }}</ui-button>
|
||||
</ui-horizon-group>
|
||||
<ui-horizon-group class="fit-bottom">
|
||||
<ui-button @click="updateEmoji(emoji)"><fa :icon="['far', 'save']"/> {{ $t('emojis.update') }}</ui-button>
|
||||
<ui-button @click="removeEmoji(emoji)"><fa :icon="['far', 'trash-alt']"/> {{ $t('emojis.remove') }}</ui-button>
|
||||
</ui-horizon-group>
|
||||
</div>
|
||||
</section>
|
||||
</ui-card>
|
||||
</div>
|
||||
@@ -75,13 +79,13 @@ export default Vue.extend({
|
||||
url: this.url,
|
||||
aliases: this.aliases.split(' ').filter(x => x.length > 0)
|
||||
}).then(() => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('add-emoji.added')
|
||||
});
|
||||
this.fetchEmojis();
|
||||
}).catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e
|
||||
});
|
||||
@@ -91,7 +95,9 @@ export default Vue.extend({
|
||||
fetchEmojis() {
|
||||
this.$root.api('admin/emoji/list').then(emojis => {
|
||||
emojis.reverse();
|
||||
emojis.forEach(e => e.aliases = (e.aliases || []).join(' '));
|
||||
for (const e of emojis) {
|
||||
e.aliases = (e.aliases || []).join(' ');
|
||||
}
|
||||
this.emojis = emojis;
|
||||
});
|
||||
},
|
||||
@@ -103,12 +109,12 @@ export default Vue.extend({
|
||||
url: emoji.url,
|
||||
aliases: emoji.aliases.split(' ').filter(x => x.length > 0)
|
||||
}).then(() => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('updated')
|
||||
});
|
||||
}).catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e
|
||||
});
|
||||
@@ -116,23 +122,23 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
removeEmoji(emoji) {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'warning',
|
||||
text: this.$t('remove-emoji.are-you-sure').replace('$1', emoji.name),
|
||||
showCancelButton: true
|
||||
}).then(res => {
|
||||
if (!res) return;
|
||||
}).then(({ canceled }) => {
|
||||
if (canceled) return;
|
||||
|
||||
this.$root.api('admin/emoji/remove', {
|
||||
id: emoji.id
|
||||
}).then(() => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('remove-emoji.removed')
|
||||
});
|
||||
this.fetchEmojis();
|
||||
}).catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e
|
||||
});
|
||||
@@ -148,4 +154,21 @@ export default Vue.extend({
|
||||
@media (min-width 500px)
|
||||
padding 16px
|
||||
|
||||
.oryfrbft
|
||||
@media (min-width 500px)
|
||||
display flex
|
||||
|
||||
> div:first-child
|
||||
@media (max-width 500px)
|
||||
padding-bottom 16px
|
||||
|
||||
> img
|
||||
vertical-align bottom
|
||||
|
||||
> div:last-child
|
||||
flex 1
|
||||
|
||||
@media (min-width 500px)
|
||||
padding-left 16px
|
||||
|
||||
</style>
|
||||
|
||||
@@ -15,19 +15,18 @@
|
||||
</div>
|
||||
<div class="me">
|
||||
<img class="avatar" :src="$store.state.i.avatarUrl" alt="avatar"/>
|
||||
<p class="name">{{ $store.state.i | userName }}</p>
|
||||
<p class="name"><mk-user-name :user="$store.state.i"/></p>
|
||||
</div>
|
||||
<ul>
|
||||
<li @click="nav('dashboard')" :class="{ active: page == 'dashboard' }"><fa icon="home" fixed-width/>{{ $t('dashboard') }}</li>
|
||||
<li @click="nav('instance')" :class="{ active: page == 'instance' }"><fa icon="cog" fixed-width/>{{ $t('instance') }}</li>
|
||||
<li @click="nav('moderators')" :class="{ active: page == 'moderators' }"><fa :icon="faHeadset" fixed-width/>{{ $t('moderators') }}</li>
|
||||
<li @click="nav('users')" :class="{ active: page == 'users' }"><fa icon="users" fixed-width/>{{ $t('users') }}</li>
|
||||
<li @click="nav('drive')" :class="{ active: page == 'drive' }"><fa icon="cloud" fixed-width/>{{ $t('@.drive') }}</li>
|
||||
<!-- <li @click="nav('federation')" :class="{ active: page == 'federation' }"><fa :icon="faShareAlt" fixed-width/>{{ $t('federation') }}</li> -->
|
||||
<li @click="nav('emoji')" :class="{ active: page == 'emoji' }"><fa :icon="faGrin" fixed-width/>{{ $t('emoji') }}</li>
|
||||
<li @click="nav('announcements')" :class="{ active: page == 'announcements' }"><fa icon="broadcast-tower" fixed-width/>{{ $t('announcements') }}</li>
|
||||
<li @click="nav('hashtags')" :class="{ active: page == 'hashtags' }"><fa icon="hashtag" fixed-width/>{{ $t('hashtags') }}</li>
|
||||
|
||||
<!-- <li @click="nav('drive')" :class="{ active: page == 'drive' }"><fa icon="cloud" fixed-width/>{{ $t('@.drive') }}</li> -->
|
||||
</ul>
|
||||
<div class="back-to-misskey">
|
||||
<a href="/"><fa :icon="faArrowLeft"/> {{ $t('back-to-misskey') }}</a>
|
||||
@@ -45,7 +44,7 @@
|
||||
<div v-if="page == 'emoji'"><x-emoji/></div>
|
||||
<div v-if="page == 'announcements'"><x-announcements/></div>
|
||||
<div v-if="page == 'hashtags'"><x-hashtags/></div>
|
||||
<div v-if="page == 'drive'"></div>
|
||||
<div v-if="page == 'drive'"><x-drive/></div>
|
||||
<div v-if="page == 'update'"></div>
|
||||
</div>
|
||||
</main>
|
||||
@@ -63,6 +62,7 @@ import XEmoji from "./emoji.vue";
|
||||
import XAnnouncements from "./announcements.vue";
|
||||
import XHashtags from "./hashtags.vue";
|
||||
import XUsers from "./users.vue";
|
||||
import XDrive from "./drive.vue";
|
||||
import { faHeadset, faArrowLeft, faShareAlt } from '@fortawesome/free-solid-svg-icons';
|
||||
import { faGrin } from '@fortawesome/free-regular-svg-icons';
|
||||
|
||||
@@ -79,7 +79,8 @@ export default Vue.extend({
|
||||
XEmoji,
|
||||
XAnnouncements,
|
||||
XHashtags,
|
||||
XUsers
|
||||
XUsers,
|
||||
XDrive,
|
||||
},
|
||||
provide: {
|
||||
isMobile
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
<ui-input v-model="name">{{ $t('instance-name') }}</ui-input>
|
||||
<ui-textarea v-model="description">{{ $t('instance-description') }}</ui-textarea>
|
||||
<ui-input v-model="bannerUrl"><i slot="icon"><fa icon="link"/></i>{{ $t('banner-url') }}</ui-input>
|
||||
<ui-input v-model="errorImageUrl"><i slot="icon"><fa icon="link"/></i>{{ $t('error-image-url') }}</ui-input>
|
||||
<ui-input v-model="languages"><i slot="icon"><fa icon="language"/></i>{{ $t('languages') }}<span slot="desc">{{ $t('languages-desc') }}</span></ui-input>
|
||||
</section>
|
||||
<section class="fit-bottom">
|
||||
@@ -31,8 +32,10 @@
|
||||
<header><fa :icon="faShieldAlt"/> {{ $t('recaptcha-config') }}</header>
|
||||
<ui-switch v-model="enableRecaptcha">{{ $t('enable-recaptcha') }}</ui-switch>
|
||||
<ui-info>{{ $t('recaptcha-info') }}</ui-info>
|
||||
<ui-input v-model="recaptchaSiteKey" :disabled="!enableRecaptcha"><i slot="icon"><fa icon="key"/></i>{{ $t('recaptcha-site-key') }}</ui-input>
|
||||
<ui-input v-model="recaptchaSecretKey" :disabled="!enableRecaptcha"><i slot="icon"><fa icon="key"/></i>{{ $t('recaptcha-secret-key') }}</ui-input>
|
||||
<ui-horizon-group inputs>
|
||||
<ui-input v-model="recaptchaSiteKey" :disabled="!enableRecaptcha"><i slot="icon"><fa icon="key"/></i>{{ $t('recaptcha-site-key') }}</ui-input>
|
||||
<ui-input v-model="recaptchaSecretKey" :disabled="!enableRecaptcha"><i slot="icon"><fa icon="key"/></i>{{ $t('recaptcha-secret-key') }}</ui-input>
|
||||
</ui-horizon-group>
|
||||
</section>
|
||||
<section>
|
||||
<header><fa :icon="faGhost"/> {{ $t('proxy-account-config') }}</header>
|
||||
@@ -54,6 +57,15 @@
|
||||
</ui-horizon-group>
|
||||
<ui-switch v-model="smtpSecure" :disabled="!enableEmail">{{ $t('smtp-secure') }}<span slot="desc">{{ $t('smtp-secure-info') }}</span></ui-switch>
|
||||
</section>
|
||||
<section>
|
||||
<header><fa :icon="faBolt"/> {{ $t('serviceworker-config') }}</header>
|
||||
<ui-switch v-model="enableServiceWorker">{{ $t('enable-serviceworker') }}<span slot="desc">{{ $t('serviceworker-info') }}</span></ui-switch>
|
||||
<ui-info>{{ $t('vapid-info') }}<br><code>npm i web-push -g<br>web-push generate-vapid-keys</code></ui-info>
|
||||
<ui-horizon-group inputs class="fit-bottom">
|
||||
<ui-input v-model="swPublicKey" :disabled="!enableServiceWorker"><i slot="icon"><fa icon="key"/></i>{{ $t('vapid-publickey') }}</ui-input>
|
||||
<ui-input v-model="swPrivateKey" :disabled="!enableServiceWorker"><i slot="icon"><fa icon="key"/></i>{{ $t('vapid-privatekey') }}</ui-input>
|
||||
</ui-horizon-group>
|
||||
</section>
|
||||
<section>
|
||||
<header>summaly Proxy</header>
|
||||
<ui-input v-model="summalyProxy">URL</ui-input>
|
||||
@@ -81,9 +93,11 @@
|
||||
<div slot="title"><fa :icon="['fab', 'twitter']"/> {{ $t('twitter-integration-config') }}</div>
|
||||
<section>
|
||||
<ui-switch v-model="enableTwitterIntegration">{{ $t('enable-twitter-integration') }}</ui-switch>
|
||||
<ui-horizon-group>
|
||||
<ui-input v-model="twitterConsumerKey" :disabled="!enableTwitterIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('twitter-integration-consumer-key') }}</ui-input>
|
||||
<ui-input v-model="twitterConsumerSecret" :disabled="!enableTwitterIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('twitter-integration-consumer-secret') }}</ui-input>
|
||||
</ui-horizon-group>
|
||||
<ui-info>{{ $t('twitter-integration-info', { url: `${url}/api/tw/cb` }) }}</ui-info>
|
||||
<ui-input v-model="twitterConsumerKey" :disabled="!enableTwitterIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('twitter-integration-consumer-key') }}</ui-input>
|
||||
<ui-input v-model="twitterConsumerSecret" :disabled="!enableTwitterIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('twitter-integration-consumer-secret') }}</ui-input>
|
||||
<ui-button @click="updateMeta">{{ $t('save') }}</ui-button>
|
||||
</section>
|
||||
</ui-card>
|
||||
@@ -92,9 +106,11 @@
|
||||
<div slot="title"><fa :icon="['fab', 'github']"/> {{ $t('github-integration-config') }}</div>
|
||||
<section>
|
||||
<ui-switch v-model="enableGithubIntegration">{{ $t('enable-github-integration') }}</ui-switch>
|
||||
<ui-horizon-group>
|
||||
<ui-input v-model="githubClientId" :disabled="!enableGithubIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('github-integration-client-id') }}</ui-input>
|
||||
<ui-input v-model="githubClientSecret" :disabled="!enableGithubIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('github-integration-client-secret') }}</ui-input>
|
||||
</ui-horizon-group>
|
||||
<ui-info>{{ $t('github-integration-info', { url: `${url}/api/gh/cb` }) }}</ui-info>
|
||||
<ui-input v-model="githubClientId" :disabled="!enableGithubIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('github-integration-client-id') }}</ui-input>
|
||||
<ui-input v-model="githubClientSecret" :disabled="!enableGithubIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('github-integration-client-secret') }}</ui-input>
|
||||
<ui-button @click="updateMeta">{{ $t('save') }}</ui-button>
|
||||
</section>
|
||||
</ui-card>
|
||||
@@ -103,9 +119,11 @@
|
||||
<div slot="title"><fa :icon="['fab', 'discord']"/> {{ $t('discord-integration-config') }}</div>
|
||||
<section>
|
||||
<ui-switch v-model="enableDiscordIntegration">{{ $t('enable-discord-integration') }}</ui-switch>
|
||||
<ui-horizon-group>
|
||||
<ui-input v-model="discordClientId" :disabled="!enableDiscordIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('discord-integration-client-id') }}</ui-input>
|
||||
<ui-input v-model="discordClientSecret" :disabled="!enableDiscordIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('discord-integration-client-secret') }}</ui-input>
|
||||
</ui-horizon-group>
|
||||
<ui-info>{{ $t('discord-integration-info', { url: `${url}/api/dc/cb` }) }}</ui-info>
|
||||
<ui-input v-model="discordClientId" :disabled="!enableDiscordIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('discord-integration-client-id') }}</ui-input>
|
||||
<ui-input v-model="discordClientSecret" :disabled="!enableDiscordIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('discord-integration-client-secret') }}</ui-input>
|
||||
<ui-button @click="updateMeta">{{ $t('save') }}</ui-button>
|
||||
</section>
|
||||
</ui-card>
|
||||
@@ -117,7 +135,7 @@ import Vue from 'vue';
|
||||
import i18n from '../../i18n';
|
||||
import { url, host } from '../../config';
|
||||
import { toUnicode } from 'punycode';
|
||||
import { faHeadset, faShieldAlt, faGhost, faUserPlus } from '@fortawesome/free-solid-svg-icons';
|
||||
import { faHeadset, faShieldAlt, faGhost, faUserPlus, faBolt } from '@fortawesome/free-solid-svg-icons';
|
||||
import { faEnvelope as farEnvelope } from '@fortawesome/free-regular-svg-icons';
|
||||
|
||||
export default Vue.extend({
|
||||
@@ -132,6 +150,7 @@ export default Vue.extend({
|
||||
disableRegistration: false,
|
||||
disableLocalTimeline: false,
|
||||
bannerUrl: null,
|
||||
errorImageUrl: null,
|
||||
name: null,
|
||||
description: null,
|
||||
languages: null,
|
||||
@@ -164,7 +183,10 @@ export default Vue.extend({
|
||||
smtpPort: null,
|
||||
smtpUser: null,
|
||||
smtpPass: null,
|
||||
faHeadset, faShieldAlt, faGhost, faUserPlus, farEnvelope
|
||||
enableServiceWorker: false,
|
||||
swPublicKey: null,
|
||||
swPrivateKey: null,
|
||||
faHeadset, faShieldAlt, faGhost, faUserPlus, farEnvelope, faBolt
|
||||
};
|
||||
},
|
||||
|
||||
@@ -172,7 +194,10 @@ export default Vue.extend({
|
||||
this.$root.getMeta().then(meta => {
|
||||
this.maintainerName = meta.maintainer.name;
|
||||
this.maintainerEmail = meta.maintainer.email;
|
||||
this.disableRegistration = meta.disableRegistration;
|
||||
this.disableLocalTimeline = meta.disableLocalTimeline;
|
||||
this.bannerUrl = meta.bannerUrl;
|
||||
this.errorImageUrl = meta.errorImageUrl;
|
||||
this.name = meta.name;
|
||||
this.description = meta.description;
|
||||
this.languages = meta.langs.join(' ');
|
||||
@@ -204,6 +229,9 @@ export default Vue.extend({
|
||||
this.smtpPort = meta.smtpPort;
|
||||
this.smtpUser = meta.smtpUser;
|
||||
this.smtpPass = meta.smtpPass;
|
||||
this.enableServiceWorker = meta.enableServiceWorker;
|
||||
this.swPublicKey = meta.swPublickey;
|
||||
this.swPrivateKey = meta.swPrivateKey;
|
||||
});
|
||||
},
|
||||
|
||||
@@ -212,7 +240,7 @@ export default Vue.extend({
|
||||
this.$root.api('admin/invite').then(x => {
|
||||
this.inviteCode = x.code;
|
||||
}).catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e
|
||||
});
|
||||
@@ -226,6 +254,7 @@ export default Vue.extend({
|
||||
disableRegistration: this.disableRegistration,
|
||||
disableLocalTimeline: this.disableLocalTimeline,
|
||||
bannerUrl: this.bannerUrl,
|
||||
errorImageUrl: this.errorImageUrl,
|
||||
name: this.name,
|
||||
description: this.description,
|
||||
langs: this.languages.split(' '),
|
||||
@@ -256,14 +285,17 @@ export default Vue.extend({
|
||||
smtpHost: this.smtpHost,
|
||||
smtpPort: parseInt(this.smtpPort, 10),
|
||||
smtpUser: this.smtpUser,
|
||||
smtpPass: this.smtpPass
|
||||
smtpPass: this.smtpPass,
|
||||
enableServiceWorker: this.enableServiceWorker,
|
||||
swPublicKey: this.swPublicKey,
|
||||
swPrivateKey: this.swPrivateKey
|
||||
}).then(() => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('saved')
|
||||
});
|
||||
}).catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e
|
||||
});
|
||||
|
||||
@@ -34,14 +34,14 @@ export default Vue.extend({
|
||||
const process = async () => {
|
||||
const user = await this.$root.api('users/show', parseAcct(this.username));
|
||||
await this.$root.api('admin/moderators/add', { userId: user.id });
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('add-moderator.added')
|
||||
});
|
||||
};
|
||||
|
||||
await process().catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e.toString()
|
||||
});
|
||||
|
||||
@@ -38,25 +38,27 @@
|
||||
<option value="remote">{{ $t('users.origin.remote') }}</option>
|
||||
</ui-select>
|
||||
</ui-horizon-group>
|
||||
<div class="kofvwchc" v-for="user in users">
|
||||
<div>
|
||||
<a :href="user | userPage(null, true)">
|
||||
<mk-avatar class="avatar" :user="user" :disable-link="true"/>
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<header>
|
||||
<b>{{ user | userName }}</b>
|
||||
<span class="username">@{{ user | acct }}</span>
|
||||
</header>
|
||||
<sequential-entrance animation="entranceFromTop" delay="25">
|
||||
<div class="kofvwchc" v-for="user in users">
|
||||
<div>
|
||||
<span>{{ $t('users.updatedAt') }}: <mk-time :time="user.updatedAt" mode="detail"/></span>
|
||||
<a :href="user | userPage(null, true)">
|
||||
<mk-avatar class="avatar" :user="user" :disable-link="true"/>
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<span>{{ $t('users.createdAt') }}: <mk-time :time="user.createdAt" mode="detail"/></span>
|
||||
<header>
|
||||
<b><mk-user-name :user="user"/></b>
|
||||
<span class="username">@{{ user | acct }}</span>
|
||||
</header>
|
||||
<div>
|
||||
<span>{{ $t('users.updatedAt') }}: <mk-time :time="user.updatedAt" mode="detail"/></span>
|
||||
</div>
|
||||
<div>
|
||||
<span>{{ $t('users.createdAt') }}: <mk-time :time="user.createdAt" mode="detail"/></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</sequential-entrance>
|
||||
<ui-button v-if="existMore" @click="fetchUsers">{{ $t('@.load-more') }}</ui-button>
|
||||
</section>
|
||||
</ui-card>
|
||||
@@ -115,12 +117,12 @@ export default Vue.extend({
|
||||
return await this.$root.api('users/show', this.target.startsWith('@') ? parseAcct(this.target) : { userId: this.target });
|
||||
} catch (e) {
|
||||
if (e == 'user not found') {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('user-not-found')
|
||||
});
|
||||
} else {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e.toString()
|
||||
});
|
||||
@@ -138,7 +140,7 @@ export default Vue.extend({
|
||||
async resetPassword() {
|
||||
const user = await this.fetchUser();
|
||||
this.$root.api('admin/reset-password', { userId: user.id }).then(res => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('password-updated', { password: res.password })
|
||||
});
|
||||
@@ -151,14 +153,14 @@ export default Vue.extend({
|
||||
const process = async () => {
|
||||
const user = await this.fetchUser();
|
||||
await this.$root.api('admin/verify-user', { userId: user.id });
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('verified')
|
||||
});
|
||||
};
|
||||
|
||||
await process().catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e.toString()
|
||||
});
|
||||
@@ -173,14 +175,14 @@ export default Vue.extend({
|
||||
const process = async () => {
|
||||
const user = await this.fetchUser();
|
||||
await this.$root.api('admin/unverify-user', { userId: user.id });
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('unverified')
|
||||
});
|
||||
};
|
||||
|
||||
await process().catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e.toString()
|
||||
});
|
||||
@@ -195,14 +197,14 @@ export default Vue.extend({
|
||||
const process = async () => {
|
||||
const user = await this.fetchUser();
|
||||
await this.$root.api('admin/suspend-user', { userId: user.id });
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('suspended')
|
||||
});
|
||||
};
|
||||
|
||||
await process().catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e.toString()
|
||||
});
|
||||
@@ -217,14 +219,14 @@ export default Vue.extend({
|
||||
const process = async () => {
|
||||
const user = await this.fetchUser();
|
||||
await this.$root.api('admin/unsuspend-user', { userId: user.id });
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('unsuspended')
|
||||
});
|
||||
};
|
||||
|
||||
await process().catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e.toString()
|
||||
});
|
||||
@@ -274,6 +276,9 @@ export default Vue.extend({
|
||||
flex 1
|
||||
padding-left 16px
|
||||
|
||||
@media (max-width 500px)
|
||||
font-size 14px
|
||||
|
||||
> header
|
||||
> .username
|
||||
margin-left 8px
|
||||
|
||||
@@ -10,3 +10,19 @@
|
||||
opacity: 0;
|
||||
transform: scaleY(0);
|
||||
}
|
||||
|
||||
.entranceFromTop {
|
||||
animation-duration: 0.5s;
|
||||
animation-name: entranceFromTop;
|
||||
}
|
||||
|
||||
@keyframes entranceFromTop {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(-64px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import './style.styl';
|
||||
|
||||
import init from '../init';
|
||||
import Index from './views/index.vue';
|
||||
import NotFound from '../common/views/pages/not-found.vue';
|
||||
|
||||
/**
|
||||
* init
|
||||
@@ -20,6 +21,7 @@ init(launch => {
|
||||
base: '/auth/',
|
||||
routes: [
|
||||
{ path: '/:token', component: Index },
|
||||
{ path: '*', component: NotFound }
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
//#region Apply theme
|
||||
const theme = localStorage.getItem('theme');
|
||||
if (theme) {
|
||||
Object.entries(JSON.parse(theme)).forEach(([k, v]) => {
|
||||
for (const [k, v] of Object.entries(JSON.parse(theme))) {
|
||||
document.documentElement.style.setProperty(`--${k}`, v.toString());
|
||||
});
|
||||
}
|
||||
}
|
||||
//#endregion
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
navigator.serviceWorker.controller.postMessage('clear');
|
||||
|
||||
navigator.serviceWorker.getRegistrations().then(registrations => {
|
||||
registrations.forEach(registration => registration.unregister());
|
||||
for (const registration of registrations) registration.unregister();
|
||||
});
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import Vue from 'vue';
|
||||
|
||||
export default function<T extends object>(data: {
|
||||
export default function <T extends object>(data: {
|
||||
name: string;
|
||||
props?: () => T;
|
||||
}) {
|
||||
@@ -53,11 +53,10 @@ export default function<T extends object>(data: {
|
||||
mergeProps() {
|
||||
if (data.props) {
|
||||
const defaultProps = data.props();
|
||||
Object.keys(defaultProps).forEach(prop => {
|
||||
if (!this.props.hasOwnProperty(prop)) {
|
||||
Vue.set(this.props, prop, defaultProps[prop]);
|
||||
}
|
||||
});
|
||||
for (const prop of Object.keys(defaultProps)) {
|
||||
if (this.props.hasOwnProperty(prop)) continue;
|
||||
Vue.set(this.props, prop, defaultProps[prop]);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -28,15 +28,15 @@ const getKeyMap = keymap => Object.entries(keymap).map(([patterns, callback]): a
|
||||
shift: false
|
||||
} as pattern;
|
||||
|
||||
part.trim().split('+').forEach(key => {
|
||||
key = key.trim().toLowerCase();
|
||||
const keys = part.trim().split('+').map(x => x.trim().toLowerCase());
|
||||
for (const key of keys) {
|
||||
switch (key) {
|
||||
case 'ctrl': pattern.ctrl = true; break;
|
||||
case 'alt': pattern.alt = true; break;
|
||||
case 'shift': pattern.shift = true; break;
|
||||
default: pattern.which = keyCode(key).map(k => k.toLowerCase());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return pattern;
|
||||
});
|
||||
@@ -77,11 +77,7 @@ export default {
|
||||
const matched = match(e, action.patterns);
|
||||
|
||||
if (matched) {
|
||||
if (el._hotkey_global) {
|
||||
if (match(e, targetReservedKeys)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (el._hotkey_global && match(e, targetReservedKeys)) return;
|
||||
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
@@ -14,15 +14,16 @@ export default async function($root: any, force = false, silent = false) {
|
||||
navigator.serviceWorker.controller.postMessage('clear');
|
||||
}
|
||||
|
||||
navigator.serviceWorker.getRegistrations().then(registrations => {
|
||||
registrations.forEach(registration => registration.unregister());
|
||||
});
|
||||
const registrations = await navigator.serviceWorker.getRegistrations();
|
||||
for (const registration of registrations) {
|
||||
registration.unregister();
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
|
||||
/*if (!silent) {
|
||||
$root.alert({
|
||||
$root.dialog({
|
||||
title: $root.$t('@.update-available-title'),
|
||||
text: $root.$t('@.update-available', { newer, current })
|
||||
});
|
||||
|
||||
@@ -22,7 +22,7 @@ export default function(type, data): Notification {
|
||||
|
||||
case 'unreadMessagingMessage':
|
||||
return {
|
||||
title: '%i18n:common.notification.message-from%'.split("{}")[0] + `${getUserName(data.user)}` + '%i18n:common.notification.message-from%'.split("{}")[1] ,
|
||||
title: '%i18n:common.notification.message-from%'.split('{}')[0] + `${getUserName(data.user)}` + '%i18n:common.notification.message-from%'.split('{}')[1] ,
|
||||
body: data.text, // TODO: getMessagingMessageSummary(data),
|
||||
icon: data.user.avatarUrl
|
||||
};
|
||||
@@ -30,7 +30,7 @@ export default function(type, data): Notification {
|
||||
case 'reversiInvited':
|
||||
return {
|
||||
title: '%i18n:common.notification.reversi-invited%',
|
||||
body: '%i18n:common.notification.reversi-invited-by%'.split("{}")[0] + `${getUserName(data.parent)}` + '%i18n:common.notification.reversi-invited-by%'.split("{}")[1],
|
||||
body: '%i18n:common.notification.reversi-invited-by%'.split('{}')[0] + `${getUserName(data.parent)}` + '%i18n:common.notification.reversi-invited-by%'.split('{}')[1],
|
||||
icon: data.parent.avatarUrl
|
||||
};
|
||||
|
||||
@@ -38,21 +38,21 @@ export default function(type, data): Notification {
|
||||
switch (data.type) {
|
||||
case 'mention':
|
||||
return {
|
||||
title: '%i18n:common.notification.notified-by%'.split("{}")[0] + `${getUserName(data.user)}:` + '%i18n:common.notification.notified-by%'.split("{}")[1],
|
||||
title: '%i18n:common.notification.notified-by%'.split('{}')[0] + `${getUserName(data.user)}:` + '%i18n:common.notification.notified-by%'.split('{}')[1],
|
||||
body: getNoteSummary(data),
|
||||
icon: data.user.avatarUrl
|
||||
};
|
||||
|
||||
case 'reply':
|
||||
return {
|
||||
title: '%i18n:common.notification.reply-from%'.split("{}")[0] + `${getUserName(data.user)}` + '%i18n:common.notification.reply-from%'.split("{}")[1],
|
||||
title: '%i18n:common.notification.reply-from%'.split('{}')[0] + `${getUserName(data.user)}` + '%i18n:common.notification.reply-from%'.split('{}')[1],
|
||||
body: getNoteSummary(data),
|
||||
icon: data.user.avatarUrl
|
||||
};
|
||||
|
||||
case 'quote':
|
||||
return {
|
||||
title: '%i18n:common.notification.quoted-by%'.split("{}")[0] + `${getUserName(data.user)}` + '%i18n:common.notification.quoted-by%'.split("{}")[1],
|
||||
title: '%i18n:common.notification.quoted-by%'.split('{}')[0] + `${getUserName(data.user)}` + '%i18n:common.notification.quoted-by%'.split('{}')[1],
|
||||
body: getNoteSummary(data),
|
||||
icon: data.user.avatarUrl
|
||||
};
|
||||
|
||||
25
src/client/app/common/scripts/format-uptime.ts
Normal file
25
src/client/app/common/scripts/format-uptime.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
|
||||
/**
|
||||
* Format like the uptime command
|
||||
*/
|
||||
export default function(sec) {
|
||||
if (!sec) return sec;
|
||||
|
||||
const day = Math.floor(sec / 86400);
|
||||
const tod = sec % 86400;
|
||||
|
||||
// Days part in string: 2 days, 1 day, null
|
||||
const d = day >= 2 ? `${day} days` : day >= 1 ? `${day} day` : null;
|
||||
|
||||
// Time part in string: 1 sec, 1 min, 1:01
|
||||
const t
|
||||
= tod < 60 ? `${Math.floor(tod)} sec`
|
||||
: tod < 3600 ? `${Math.floor(tod / 60)} min`
|
||||
: `${Math.floor(tod / 60 / 60)}:${Math.floor((tod / 60) % 60).toString().padStart(2, '0')}`;
|
||||
|
||||
let str = '';
|
||||
if (d) str += `${d}, `;
|
||||
str += t;
|
||||
|
||||
return str;
|
||||
}
|
||||
@@ -4,7 +4,7 @@ export default ($root: any) => {
|
||||
require('fuckadblock');
|
||||
|
||||
function adBlockDetected() {
|
||||
$root.alert({
|
||||
$root.dialog({
|
||||
title: $root.$t('@.adblock.detected'),
|
||||
text: $root.$t('@.adblock.warning')
|
||||
});
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
|
||||
export default (data: ArrayBuffer) => {
|
||||
//const buf = new Buffer(data);
|
||||
//const hash = crypto.createHash("md5");
|
||||
//const hash = crypto.createHash('md5');
|
||||
//hash.update(buf);
|
||||
//return hash.digest("hex");
|
||||
//return hash.digest('hex');
|
||||
return '';
|
||||
};
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
/**
|
||||
* 中央値を求めます
|
||||
* @param samples サンプル
|
||||
*/
|
||||
export default function(samples) {
|
||||
if (!samples.length) return 0;
|
||||
const numbers = samples.slice(0).sort((a, b) => a - b);
|
||||
const middle = Math.floor(numbers.length / 2);
|
||||
const isEven = numbers.length % 2 === 0;
|
||||
return isEven ? (numbers[middle] + numbers[middle - 1]) / 2 : numbers[middle];
|
||||
}
|
||||
@@ -65,6 +65,10 @@ export default (opts: Opts = {}) => ({
|
||||
return this.isRenote ? this.note.renote : this.note;
|
||||
},
|
||||
|
||||
isMyNote(): boolean {
|
||||
return this.$store.getters.isSignedIn && (this.$store.state.i.id === this.appearNote.userId);
|
||||
},
|
||||
|
||||
reactionsCount(): number {
|
||||
return this.appearNote.reactionCounts
|
||||
? sum(Object.values(this.appearNote.reactionCounts))
|
||||
@@ -80,8 +84,8 @@ export default (opts: Opts = {}) => ({
|
||||
const ast = parse(this.appearNote.text);
|
||||
// TODO: 再帰的にURL要素がないか調べる
|
||||
return unique(ast
|
||||
.filter(t => ((t.name == 'url' || t.name == 'link') && t.props.url && !t.props.silent))
|
||||
.map(t => t.props.url));
|
||||
.filter(t => ((t.node.type == 'url' || t.node.type == 'link') && t.node.props.url && !t.node.props.silent))
|
||||
.map(t => t.node.props.url));
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
@@ -125,9 +129,7 @@ export default (opts: Opts = {}) => ({
|
||||
source: this.$refs.reactButton,
|
||||
note: this.appearNote,
|
||||
showFocus: viaKeyboard,
|
||||
animation: !viaKeyboard,
|
||||
compact: opts.mobile,
|
||||
big: opts.mobile
|
||||
animation: !viaKeyboard
|
||||
}).$once('closed', this.focus);
|
||||
},
|
||||
|
||||
@@ -138,11 +140,19 @@ export default (opts: Opts = {}) => ({
|
||||
});
|
||||
},
|
||||
|
||||
undoReact(note) {
|
||||
const oldReaction = note.myReaction;
|
||||
if (!oldReaction) return;
|
||||
this.$root.api('notes/reactions/delete', {
|
||||
noteId: note.id
|
||||
});
|
||||
},
|
||||
|
||||
favorite() {
|
||||
this.$root.api('notes/favorites/create', {
|
||||
noteId: this.appearNote.id
|
||||
}).then(() => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
splash: true
|
||||
});
|
||||
@@ -159,8 +169,7 @@ export default (opts: Opts = {}) => ({
|
||||
this.$root.new(MkNoteMenu, {
|
||||
source: this.$refs.menuButton,
|
||||
note: this.appearNote,
|
||||
animation: !viaKeyboard,
|
||||
compact: opts.mobile,
|
||||
animation: !viaKeyboard
|
||||
}).$once('closed', this.focus);
|
||||
},
|
||||
|
||||
|
||||
@@ -95,6 +95,7 @@ export default prop => ({
|
||||
Vue.set(this.$_ns_target.reactionCounts, reaction, 0);
|
||||
}
|
||||
|
||||
// Increment the count
|
||||
this.$_ns_target.reactionCounts[reaction]++;
|
||||
|
||||
if (body.userId == this.$store.state.i.id) {
|
||||
@@ -103,6 +104,26 @@ export default prop => ({
|
||||
break;
|
||||
}
|
||||
|
||||
case 'unreacted': {
|
||||
const reaction = body.reaction;
|
||||
|
||||
if (this.$_ns_target.reactionCounts == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.$_ns_target.reactionCounts[reaction] == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Decrement the count
|
||||
if (this.$_ns_target.reactionCounts[reaction] > 0) this.$_ns_target.reactionCounts[reaction]--;
|
||||
|
||||
if (body.userId == this.$store.state.i.id) {
|
||||
Vue.set(this.$_ns_target, 'myReaction', null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 'pollVoted': {
|
||||
if (body.userId == this.$store.state.i.id) return;
|
||||
const choice = body.choice;
|
||||
|
||||
@@ -2,27 +2,17 @@ export default function(me, settings, note) {
|
||||
const isMyNote = note.userId == me.id;
|
||||
const isPureRenote = note.renoteId != null && note.text == null && note.fileIds.length == 0 && note.poll == null;
|
||||
|
||||
if (settings.showMyRenotes === false) {
|
||||
if (isMyNote && isPureRenote) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
const includesMutedWords = (text: string) =>
|
||||
text
|
||||
? settings.mutedWords.some(q => q.length > 0 && !q.some(word => !text.includes(word)))
|
||||
: false;
|
||||
|
||||
if (settings.showRenotedMyNotes === false) {
|
||||
if (isPureRenote && (note.renote.userId == me.id)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (settings.showLocalRenotes === false) {
|
||||
if (isPureRenote && (note.renote.user.host == null)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!isMyNote && note.text && settings.mutedWords.some(q => q.length > 0 && !q.some(word => !note.text.includes(word)))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return (
|
||||
(!isMyNote && note.reply && includesMutedWords(note.reply.text)) ||
|
||||
(!isMyNote && note.renote && includesMutedWords(note.renote.text)) ||
|
||||
(settings.showMyRenotes === false && isMyNote && isPureRenote) ||
|
||||
(settings.showRenotedMyNotes === false && isPureRenote && note.renote.userId == me.id) ||
|
||||
(settings.showLocalRenotes === false && isPureRenote && note.renote.user.host == null) ||
|
||||
(!isMyNote && includesMutedWords(note.text))
|
||||
);
|
||||
}
|
||||
|
||||
@@ -75,12 +75,10 @@ export default class Stream extends EventEmitter {
|
||||
|
||||
// チャンネル再接続
|
||||
if (isReconnect) {
|
||||
this.sharedConnectionPools.forEach(p => {
|
||||
for (const p of this.sharedConnectionPools)
|
||||
p.connect();
|
||||
});
|
||||
this.nonSharedConnections.forEach(c => {
|
||||
for (const c of this.nonSharedConnections)
|
||||
c.connect();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,9 +111,9 @@ export default class Stream extends EventEmitter {
|
||||
connections = [this.nonSharedConnections.find(c => c.id === id)];
|
||||
}
|
||||
|
||||
connections.filter(c => c != null).forEach(c => {
|
||||
for (const c of connections.filter(c => c != null)) {
|
||||
c.emit(body.type, body.body);
|
||||
});
|
||||
}
|
||||
} else {
|
||||
this.emit(type, body);
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import { themeColor } from '../../../config';
|
||||
import * as tinycolor from 'tinycolor2';
|
||||
|
||||
export default Vue.extend({
|
||||
props: {
|
||||
@@ -75,7 +75,7 @@ export default Vue.extend({
|
||||
return this.dark ? '#fff' : '#777';
|
||||
},
|
||||
hHandColor(): string {
|
||||
return themeColor;
|
||||
return tinycolor(getComputedStyle(document.documentElement).getPropertyValue('--primary')).toHexString();
|
||||
},
|
||||
|
||||
ms(): number {
|
||||
|
||||
@@ -50,10 +50,13 @@ export default Vue.extend({
|
||||
|
||||
methods: {
|
||||
regenerateToken() {
|
||||
this.$input({
|
||||
this.$root.dialog({
|
||||
title: this.$t('enter-password'),
|
||||
type: 'password'
|
||||
}).then(password => {
|
||||
input: {
|
||||
type: 'password'
|
||||
}
|
||||
}).then(({ canceled, result: password }) => {
|
||||
if (canceled) return;
|
||||
this.$root.api('i/regenerate_token', {
|
||||
password: password
|
||||
});
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
<ol class="users" ref="suggests" v-if="users.length > 0">
|
||||
<li v-for="user in users" @click="complete(type, user)" @keydown="onKeydown" tabindex="-1">
|
||||
<img class="avatar" :src="user.avatarUrl" alt=""/>
|
||||
<span class="name">{{ user | userName }}</span>
|
||||
<span class="name">
|
||||
<mk-user-name :user="user"/>
|
||||
</span>
|
||||
<span class="username">@{{ user | acct }}</span>
|
||||
</li>
|
||||
</ol>
|
||||
@@ -42,8 +44,9 @@ const lib = Object.entries(emojilib.lib).filter((x: any) => {
|
||||
});
|
||||
|
||||
const char2file = (char: string) => {
|
||||
let codes = [...char].map(x => x.codePointAt(0).toString(16));
|
||||
let codes = Array.from(char).map(x => x.codePointAt(0).toString(16));
|
||||
if (!codes.includes('200d')) codes = codes.filter(x => x != 'fe0f');
|
||||
codes = codes.filter(x => x && x.length);
|
||||
return codes.join('-');
|
||||
};
|
||||
|
||||
@@ -54,18 +57,18 @@ const emjdb: EmojiDef[] = lib.map((x: any) => ({
|
||||
url: `https://twemoji.maxcdn.com/2/svg/${char2file(x[1].char)}.svg`
|
||||
}));
|
||||
|
||||
lib.forEach((x: any) => {
|
||||
for (const x of lib as any) {
|
||||
if (x[1].keywords) {
|
||||
x[1].keywords.forEach(k => {
|
||||
for (const k of x[1].keywords) {
|
||||
emjdb.push({
|
||||
emoji: x[1].char,
|
||||
name: k,
|
||||
aliasOf: x[0],
|
||||
url: `https://twemoji.maxcdn.com/2/svg/${char2file(x[1].char)}.svg`
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
emjdb.sort((a, b) => a.name.length - b.name.length);
|
||||
|
||||
@@ -117,7 +120,7 @@ export default Vue.extend({
|
||||
const customEmojis = (this.$root.getMetaSync() || { emojis: [] }).emojis || [];
|
||||
const emojiDefinitions: EmojiDef[] = [];
|
||||
|
||||
customEmojis.forEach(x => {
|
||||
for (const x of customEmojis) {
|
||||
emojiDefinitions.push({
|
||||
name: x.name,
|
||||
emoji: `:${x.name}:`,
|
||||
@@ -126,7 +129,7 @@ export default Vue.extend({
|
||||
});
|
||||
|
||||
if (x.aliases) {
|
||||
x.aliases.forEach(alias => {
|
||||
for (const alias of x.aliases) {
|
||||
emojiDefinitions.push({
|
||||
name: alias,
|
||||
aliasOf: x.name,
|
||||
@@ -134,9 +137,9 @@ export default Vue.extend({
|
||||
url: x.url,
|
||||
isCustomEmoji: true
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
emojiDefinitions.sort((a, b) => a.name.length - b.name.length);
|
||||
|
||||
@@ -145,9 +148,9 @@ export default Vue.extend({
|
||||
|
||||
this.textarea.addEventListener('keydown', this.onKeydown);
|
||||
|
||||
Array.from(document.querySelectorAll('body *')).forEach(el => {
|
||||
for (const el of Array.from(document.querySelectorAll('body *'))) {
|
||||
el.addEventListener('mousedown', this.onMousedown);
|
||||
});
|
||||
}
|
||||
|
||||
this.$nextTick(() => {
|
||||
this.exec();
|
||||
@@ -163,18 +166,18 @@ export default Vue.extend({
|
||||
beforeDestroy() {
|
||||
this.textarea.removeEventListener('keydown', this.onKeydown);
|
||||
|
||||
Array.from(document.querySelectorAll('body *')).forEach(el => {
|
||||
for (const el of Array.from(document.querySelectorAll('body *'))) {
|
||||
el.removeEventListener('mousedown', this.onMousedown);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
exec() {
|
||||
this.select = -1;
|
||||
if (this.$refs.suggests) {
|
||||
Array.from(this.items).forEach(el => {
|
||||
for (const el of Array.from(this.items)) {
|
||||
el.removeAttribute('data-selected');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (this.type == 'user') {
|
||||
@@ -187,7 +190,8 @@ export default Vue.extend({
|
||||
} else {
|
||||
this.$root.api('users/search', {
|
||||
query: this.q,
|
||||
limit: 10
|
||||
limit: 10,
|
||||
detail: false
|
||||
}).then(users => {
|
||||
this.users = users;
|
||||
this.fetching = false;
|
||||
@@ -312,9 +316,9 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
applySelect() {
|
||||
Array.from(this.items).forEach(el => {
|
||||
for (const el of Array.from(this.items)) {
|
||||
el.removeAttribute('data-selected');
|
||||
});
|
||||
}
|
||||
|
||||
this.items[this.select].setAttribute('data-selected', 'true');
|
||||
(this.items[this.select] as any).focus();
|
||||
|
||||
@@ -1,21 +1,43 @@
|
||||
<template>
|
||||
<button class="nrvgflfuaxwgkxoynpnumyookecqrrvh" @click="toggle">{{ value ? this.$t('hide') : this.$t('show') }}</button>
|
||||
<button class="nrvgflfuaxwgkxoynpnumyookecqrrvh" @click="toggle">
|
||||
<b>{{ value ? this.$t('hide') : this.$t('show') }}</b>
|
||||
<span v-if="!value">{{ this.label }}</span>
|
||||
</button>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import { length } from 'stringz';
|
||||
import { concat } from '../../../../../prelude/array';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/cw-button.vue'),
|
||||
|
||||
props: {
|
||||
value: {
|
||||
type: Boolean,
|
||||
required: true
|
||||
},
|
||||
note: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
label(): string {
|
||||
return concat([
|
||||
this.note.text ? [this.$t('chars', { count: length(this.note.text) })] : [],
|
||||
this.note.files && this.note.files.length !== 0 ? [this.$t('files', { count: this.note.files.length }) ] : [],
|
||||
this.note.poll != null ? [this.$t('poll')] : []
|
||||
] as string[][]).join(' / ');
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
length,
|
||||
|
||||
toggle() {
|
||||
this.$emit('input', !this.value);
|
||||
}
|
||||
@@ -37,4 +59,12 @@ export default Vue.extend({
|
||||
&:hover
|
||||
background var(--cwButtonHoverBg)
|
||||
|
||||
> span
|
||||
margin-left 4px
|
||||
|
||||
&:before
|
||||
content '('
|
||||
&:after
|
||||
content ')'
|
||||
|
||||
</style>
|
||||
|
||||
@@ -2,12 +2,17 @@
|
||||
<div class="felqjxyj" :class="{ splash }">
|
||||
<div class="bg" ref="bg" @click="onBgClick"></div>
|
||||
<div class="main" ref="main">
|
||||
<div class="icon" :class="type"><fa :icon="icon"/></div>
|
||||
<div class="icon" v-if="!input && !select && !user" :class="type"><fa :icon="icon"/></div>
|
||||
<header v-if="title" v-html="title"></header>
|
||||
<div class="body" v-if="text" v-html="text"></div>
|
||||
<ui-input v-if="input" v-model="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder" @keydown="onInputKeydown"></ui-input>
|
||||
<ui-input v-if="user" v-model="userInputValue" autofocus @keydown="onInputKeydown"><span slot="prefix">@</span></ui-input>
|
||||
<ui-select v-if="select" v-model="selectedValue">
|
||||
<option v-for="item in select.items" :value="item.value">{{ item.text }}</option>
|
||||
</ui-select>
|
||||
<ui-horizon-group no-grow class="buttons fit-bottom" v-if="!splash">
|
||||
<ui-button @click="ok" primary autofocus>OK</ui-button>
|
||||
<ui-button @click="cancel" v-if="showCancelButton">Cancel</ui-button>
|
||||
<ui-button @click="ok" primary :autofocus="!input && !select && !user">OK</ui-button>
|
||||
<ui-button @click="cancel" v-if="showCancelButton || input || select || user">Cancel</ui-button>
|
||||
</ui-horizon-group>
|
||||
</div>
|
||||
</div>
|
||||
@@ -17,6 +22,7 @@
|
||||
import Vue from 'vue';
|
||||
import * as anime from 'animejs';
|
||||
import { faTimesCircle, faQuestionCircle } from '@fortawesome/free-regular-svg-icons';
|
||||
import parseAcct from "../../../../../misc/acct/parse";
|
||||
|
||||
export default Vue.extend({
|
||||
props: {
|
||||
@@ -33,6 +39,15 @@ export default Vue.extend({
|
||||
type: String,
|
||||
required: false
|
||||
},
|
||||
input: {
|
||||
required: false
|
||||
},
|
||||
select: {
|
||||
required: false
|
||||
},
|
||||
user: {
|
||||
required: false
|
||||
},
|
||||
showCancelButton: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
@@ -43,6 +58,14 @@ export default Vue.extend({
|
||||
}
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
inputValue: this.input && this.input.default ? this.input.default : null,
|
||||
userInputValue: null,
|
||||
selectedValue: null
|
||||
};
|
||||
},
|
||||
|
||||
computed: {
|
||||
icon(): any {
|
||||
switch (this.type) {
|
||||
@@ -82,9 +105,21 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
methods: {
|
||||
ok() {
|
||||
this.$emit('ok');
|
||||
this.close();
|
||||
async ok() {
|
||||
if (this.user) {
|
||||
const user = await this.$root.api('users/show', parseAcct(this.userInputValue));
|
||||
if (user) {
|
||||
this.$emit('ok', user);
|
||||
this.close();
|
||||
}
|
||||
} else {
|
||||
const result =
|
||||
this.input ? this.inputValue :
|
||||
this.select ? this.selectedValue :
|
||||
true;
|
||||
this.$emit('ok', result);
|
||||
this.close();
|
||||
}
|
||||
},
|
||||
|
||||
cancel() {
|
||||
@@ -114,6 +149,14 @@ export default Vue.extend({
|
||||
|
||||
onBgClick() {
|
||||
this.cancel();
|
||||
},
|
||||
|
||||
onInputKeydown(e) {
|
||||
if (e.which == 13) { // Enter
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.ok();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -180,8 +223,11 @@ export default Vue.extend({
|
||||
display block
|
||||
margin 0 auto
|
||||
|
||||
& + header
|
||||
margin-top 16px
|
||||
|
||||
> header
|
||||
margin 16px 0 8px 0
|
||||
margin 0 0 8px 0
|
||||
font-weight bold
|
||||
font-size 20px
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
<template>
|
||||
<div class="mk-discord-setting">
|
||||
<p>{{ $t('description') }}</p>
|
||||
<p class="account" v-if="$store.state.i.discord" :title="`Discord ID: ${$store.state.i.discord.id}`">{{ $t('connected-to') }}: <a :href="`https://discordapp.com/users/${$store.state.i.discord.id}`" target="_blank">@{{ $store.state.i.discord.username }}#{{ $store.state.i.discord.discriminator }}</a></p>
|
||||
<p>
|
||||
<a :href="`${apiUrl}/connect/discord`" target="_blank" @click.prevent="connect">{{ $store.state.i.discord ? this.$t('reconnect') : this.$t('connect') }}</a>
|
||||
<span v-if="$store.state.i.discord"> or </span>
|
||||
<a :href="`${apiUrl}/disconnect/discord`" target="_blank" v-if="$store.state.i.discord" @click.prevent="disconnect">{{ $t('disconnect') }}</a>
|
||||
</p>
|
||||
<p class="id" v-if="$store.state.i.discord">Discord ID: {{ $store.state.i.discord.id }}</p>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import { apiUrl } from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/discord-setting.vue'),
|
||||
data() {
|
||||
return {
|
||||
form: null,
|
||||
apiUrl
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.$watch('$store.state.i', () => {
|
||||
if (this.$store.state.i.discord && this.form)
|
||||
this.form.close();
|
||||
}, {
|
||||
deep: true
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
connect() {
|
||||
this.form = window.open(apiUrl + '/connect/discord',
|
||||
'discord_connect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
|
||||
disconnect() {
|
||||
window.open(apiUrl + '/disconnect/discord',
|
||||
'discord_disconnect_window',
|
||||
'height=570, width=520');
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.mk-discord-setting
|
||||
.account
|
||||
border solid 1px #e1e8ed
|
||||
border-radius 4px
|
||||
padding 16px
|
||||
|
||||
a
|
||||
font-weight bold
|
||||
color inherit
|
||||
|
||||
.id
|
||||
color #8899a6
|
||||
</style>
|
||||
@@ -114,11 +114,11 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
onScroll(e) {
|
||||
const section = this.categories.forEach(x => {
|
||||
for (const x of this.categories) {
|
||||
const top = e.target.scrollTop;
|
||||
const el = this.$refs[x.ref][0];
|
||||
x.isActive = el.offsetTop <= top && el.offsetTop + el.offsetHeight > top;
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
chosen(emoji) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<img v-if="customEmoji" class="fvgwvorwhxigeolkkrcderjzcawqrscl custom" :src="url" :alt="alt" :title="alt"/>
|
||||
<img v-if="customEmoji" class="fvgwvorwhxigeolkkrcderjzcawqrscl custom" :class="{ normal: normal }" :src="url" :alt="alt" :title="alt"/>
|
||||
<img v-else-if="char && !useOsDefaultEmojis" class="fvgwvorwhxigeolkkrcderjzcawqrscl" :src="url" :alt="alt" :title="alt"/>
|
||||
<span v-else-if="char && useOsDefaultEmojis">{{ char }}</span>
|
||||
<span v-else>:{{ name }}:</span>
|
||||
@@ -20,6 +20,11 @@ export default Vue.extend({
|
||||
type: String,
|
||||
required: false
|
||||
},
|
||||
normal: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
},
|
||||
customEmojis: {
|
||||
required: false,
|
||||
default: () => []
|
||||
@@ -61,8 +66,9 @@ export default Vue.extend({
|
||||
}
|
||||
|
||||
if (this.char) {
|
||||
let codes = [...this.char].map(x => x.codePointAt(0).toString(16));
|
||||
let codes = Array.from(this.char).map(x => x.codePointAt(0).toString(16));
|
||||
if (!codes.includes('200d')) codes = codes.filter(x => x != 'fe0f');
|
||||
codes = codes.filter(x => x && x.length);
|
||||
|
||||
this.url = `https://twemoji.maxcdn.com/2/svg/${codes.join('-')}.svg`;
|
||||
}
|
||||
@@ -83,4 +89,11 @@ export default Vue.extend({
|
||||
&:hover
|
||||
transform scale(1.2)
|
||||
|
||||
&.normal
|
||||
height 1.25em
|
||||
vertical-align -0.25em
|
||||
|
||||
&:hover
|
||||
transform none
|
||||
|
||||
</style>
|
||||
|
||||
@@ -48,7 +48,7 @@ export default Vue.extend({
|
||||
iconAndText(): any[] {
|
||||
return (
|
||||
(this.hasPendingFollowRequestFromYou && this.user.isLocked) ? ['hourglass-half', this.$t('request-pending')] :
|
||||
(this.hasPendingFollowRequestFromYou && !this.user.isLocked) ? ['hourglass-start', this.$t('follow-processing')] :
|
||||
(this.hasPendingFollowRequestFromYou && !this.user.isLocked) ? ['spinner', this.$t('follow-processing')] :
|
||||
(this.isFollowing) ? ['minus', this.$t('following')] :
|
||||
(!this.isFollowing && this.user.isLocked) ? ['plus', this.$t('follow-request')] :
|
||||
(!this.isFollowing && !this.user.isLocked) ? ['plus', this.$t('follow')] :
|
||||
|
||||
@@ -15,7 +15,9 @@ export default Vue.extend({
|
||||
},
|
||||
computed: {
|
||||
compiledFormula(): any {
|
||||
return katex.renderToString(this.formula);
|
||||
return katex.renderToString(this.formula, {
|
||||
throwOnError: false
|
||||
} as any);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="xqnhankfuuilcwvhgsopeqncafzsquya">
|
||||
<button class="go-index" v-if="selfNav" @click="goIndex"><fa icon="arrow-left"/></button>
|
||||
<header><b><router-link :to="blackUser | userPage">{{ blackUser | userName }}</router-link></b>({{ $t('@.reversi.black') }}) vs <b><router-link :to="whiteUser | userPage">{{ whiteUser | userName }}</router-link></b>({{ $t('@.reversi.white') }})</header>
|
||||
<header><b><router-link :to="blackUser | userPage"><mk-user-name :user="blackUser"/></router-link></b>({{ $t('@.reversi.black') }}) vs <b><router-link :to="whiteUser | userPage"><mk-user-name :user="whiteUser"/></router-link></b>({{ $t('@.reversi.white') }})</header>
|
||||
|
||||
<div style="overflow: hidden; line-height: 28px;">
|
||||
<p class="turn" v-if="!iAmPlayer && !game.isEnded">{{ $t('@.reversi.turn-of', { name: $options.filters.userName(turnUser) }) }}<mk-ellipsis/></p>
|
||||
@@ -10,7 +10,7 @@
|
||||
<p class="turn2" v-if="iAmPlayer && !game.isEnded && isMyTurn" v-animate-css="{ classes: 'tada', iteration: 'infinite' }">{{ $t('@.reversi.my-turn') }}</p>
|
||||
<p class="result" v-if="game.isEnded && logPos == logs.length">
|
||||
<template v-if="game.winner">
|
||||
<span>{{ $t('@.reversi.won', { name: $options.filters.userName(game.winner) }) }}</span>
|
||||
<misskey-flavored-markdown :text="$t('@.reversi.won', { name: $options.filters.userName(game.winner) })" :shouldBreak="false" :plainText="true" :custom-emojis="game.winner.emojis"/>
|
||||
<span v-if="game.surrendered != null"> ({{ $t('surrendered') }})</span>
|
||||
</template>
|
||||
<template v-else>{{ $t('@.reversi.drawn') }}</template>
|
||||
@@ -30,8 +30,14 @@
|
||||
: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)"
|
||||
:title="`${String.fromCharCode(65 + o.transformPosToXy(i)[0])}${o.transformPosToXy(i)[1] + 1}`">
|
||||
<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="white" :class="{ contrast: $store.state.settings.games.reversi.useContrastStones }">
|
||||
<template v-if="$store.state.settings.games.reversi.useAvatarStones">
|
||||
<img v-if="stone === true" :src="blackUser.avatarUrl" alt="black">
|
||||
<img v-if="stone === false" :src="whiteUser.avatarUrl" alt="white">
|
||||
</template>
|
||||
<template v-else>
|
||||
<fa v-if="stone === true" :icon="fasCircle"/>
|
||||
<fa v-if="stone === false" :icon="farCircle"/>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<div class="labels-y" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
|
||||
@@ -74,6 +80,8 @@ import * as CRC32 from 'crc-32';
|
||||
import Reversi, { Color } from '../../../../../../../games/reversi/core';
|
||||
import { url } from '../../../../../config';
|
||||
import { faAngleDoubleLeft, faAngleLeft, faAngleRight, faAngleDoubleRight } from '@fortawesome/free-solid-svg-icons';
|
||||
import { faCircle as fasCircle } from '@fortawesome/free-solid-svg-icons';
|
||||
import { faCircle as farCircle } from '@fortawesome/free-regular-svg-icons';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/games/reversi/reversi.game.vue'),
|
||||
@@ -99,7 +107,7 @@ export default Vue.extend({
|
||||
logs: [],
|
||||
logPos: 0,
|
||||
pollingClock: null,
|
||||
faAngleDoubleLeft, faAngleLeft, faAngleRight, faAngleDoubleRight
|
||||
faAngleDoubleLeft, faAngleLeft, faAngleRight, faAngleDoubleRight, fasCircle, farCircle
|
||||
};
|
||||
},
|
||||
|
||||
@@ -177,9 +185,9 @@ export default Vue.extend({
|
||||
loopedBoard: this.game.settings.loopedBoard
|
||||
});
|
||||
|
||||
this.game.logs.forEach(log => {
|
||||
for (const log of this.game.logs) {
|
||||
this.o.put(log.color, log.pos);
|
||||
});
|
||||
}
|
||||
|
||||
this.logs = this.game.logs;
|
||||
this.logPos = this.logs.length;
|
||||
@@ -279,9 +287,9 @@ export default Vue.extend({
|
||||
loopedBoard: this.game.settings.loopedBoard
|
||||
});
|
||||
|
||||
this.game.logs.forEach(log => {
|
||||
for (const log of this.game.logs) {
|
||||
this.o.put(log.color, log.pos, true);
|
||||
});
|
||||
}
|
||||
|
||||
this.logs = this.game.logs;
|
||||
this.logPos = this.logs.length;
|
||||
@@ -412,17 +420,15 @@ export default Vue.extend({
|
||||
&.none
|
||||
border-color transparent !important
|
||||
|
||||
> img
|
||||
> svg
|
||||
display block
|
||||
width 100%
|
||||
height 100%
|
||||
|
||||
&.contrast
|
||||
&[alt="black"]
|
||||
filter brightness(.5)
|
||||
|
||||
&[alt="white"]
|
||||
filter brightness(2)
|
||||
> img
|
||||
display block
|
||||
width 100%
|
||||
height 100%
|
||||
|
||||
> .graph
|
||||
display grid
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<h2>{{ $t('invitations') }}</h2>
|
||||
<div class="invitation" v-for="i in invitations" tabindex="-1" @click="accept(i)">
|
||||
<mk-avatar class="avatar" :user="i.parent"/>
|
||||
<span class="name"><b>{{ i.parent | userName }}</b></span>
|
||||
<span class="name"><b><mk-user-name :user="i.parent"/></b></span>
|
||||
<span class="username">@{{ i.parent.username }}</span>
|
||||
<mk-time :time="i.createdAt"/>
|
||||
</div>
|
||||
@@ -29,7 +29,7 @@
|
||||
<a class="game" v-for="g in myGames" tabindex="-1" @click.prevent="go(g)" :href="`/reversi/${g.id}`">
|
||||
<mk-avatar class="avatar" :user="g.user1"/>
|
||||
<mk-avatar class="avatar" :user="g.user2"/>
|
||||
<span><b>{{ g.user1 | userName }}</b> vs <b>{{ g.user2 | userName }}</b></span>
|
||||
<span><b><mk-user-name :user="g.user1"/></b> vs <b><mk-user-name :user="g.user2"/></b></span>
|
||||
<span class="state">{{ g.isEnded ? $t('game-state.ended') : $t('game-state.playing') }}</span>
|
||||
<mk-time :time="g.createdAt" />
|
||||
</a>
|
||||
@@ -39,7 +39,7 @@
|
||||
<a class="game" v-for="g in games" tabindex="-1" @click.prevent="go(g)" :href="`/reversi/${g.id}`">
|
||||
<mk-avatar class="avatar" :user="g.user1"/>
|
||||
<mk-avatar class="avatar" :user="g.user2"/>
|
||||
<span><b>{{ g.user1 | userName }}</b> vs <b>{{ g.user2 | userName }}</b></span>
|
||||
<span><b><mk-user-name :user="g.user1"/></b> vs <b><mk-user-name :user="g.user2"/></b></span>
|
||||
<span class="state">{{ g.isEnded ? $t('game-state.ended') : $t('game-state.playing') }}</span>
|
||||
<mk-time :time="g.createdAt" />
|
||||
</a>
|
||||
@@ -99,23 +99,22 @@ export default Vue.extend({
|
||||
this.$emit('go', game);
|
||||
},
|
||||
|
||||
match() {
|
||||
this.$input({
|
||||
title: this.$t('enter-username')
|
||||
}).then(username => {
|
||||
this.$root.api('users/show', {
|
||||
username
|
||||
}).then(user => {
|
||||
this.$root.api('games/reversi/match', {
|
||||
userId: user.id
|
||||
}).then(res => {
|
||||
if (res == null) {
|
||||
this.$emit('matching', user);
|
||||
} else {
|
||||
this.$emit('go', res);
|
||||
}
|
||||
});
|
||||
});
|
||||
async match() {
|
||||
const { result: user } = await this.$root.dialog({
|
||||
title: this.$t('enter-username'),
|
||||
user: {
|
||||
local: true
|
||||
}
|
||||
});
|
||||
if (user == null) return;
|
||||
this.$root.api('games/reversi/match', {
|
||||
userId: user.id
|
||||
}).then(res => {
|
||||
if (res == null) {
|
||||
this.$emit('matching', user);
|
||||
} else {
|
||||
this.$emit('go', res);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="urbixznjwwuukfsckrwzwsqzsxornqij">
|
||||
<header><b>{{ game.user1 | userName }}</b> vs <b>{{ game.user2 | userName }}</b></header>
|
||||
<header><b><mk-user-name :user="game.user1"/></b> vs <b><mk-user-name :user="game.user2"/></b></header>
|
||||
|
||||
<div>
|
||||
<p>{{ $t('settings-of-the-game') }}</p>
|
||||
@@ -36,8 +36,8 @@
|
||||
|
||||
<div>
|
||||
<form-radio v-model="game.settings.bw" value="random" @change="updateSettings">{{ $t('random') }}</form-radio>
|
||||
<form-radio v-model="game.settings.bw" :value="1" @change="updateSettings">{{ this.$t('black-is').split('{}')[0] }}<b>{{ game.user1 | userName }}</b>{{ this.$t('black-is').split('{}')[1] }}</form-radio>
|
||||
<form-radio v-model="game.settings.bw" :value="2" @change="updateSettings">{{ this.$t('black-is').split('{}')[0] }}<b>{{ game.user2 | userName }}</b>{{ this.$t('black-is').split('{}')[1] }}</form-radio>
|
||||
<form-radio v-model="game.settings.bw" :value="1" @change="updateSettings">{{ this.$t('black-is').split('{}')[0] }}<b><mk-user-name :user="game.user1"/></b>{{ this.$t('black-is').split('{}')[1] }}</form-radio>
|
||||
<form-radio v-model="game.settings.bw" :value="2" @change="updateSettings">{{ this.$t('black-is').split('{}')[0] }}<b><mk-user-name :user="game.user2"/></b>{{ this.$t('black-is').split('{}')[1] }}</form-radio>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
<div>
|
||||
<template v-for="item in form">
|
||||
<ui-switch v-if="item.type == 'switch'" v-model="item.value" :key="item.id" :text="item.label" @change="onChangeForm(item)">{{ item.desc || '' }}</ui-switch>
|
||||
<ui-switch v-if="item.type == 'switch'" v-model="item.value" :key="item.id" @change="onChangeForm(item)">{{ item.label || item.desc || '' }}</ui-switch>
|
||||
|
||||
<div class="card" v-if="item.type == 'radio'" :key="item.id">
|
||||
<header>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<x-gameroom :game="game" :self-nav="selfNav" @go-index="goIndex"/>
|
||||
</div>
|
||||
<div class="matching" v-else-if="matching">
|
||||
<h1>{{ this.$t('matching.waiting-for').split('{}')[0] }}<b>{{ matching | userName }}</b>{{ this.$t('matching.waiting-for').split('{}')[1] }}<mk-ellipsis/></h1>
|
||||
<h1>{{ this.$t('matching.waiting-for').split('{}')[0] }}<b><mk-user-name :user="matching"/></b>{{ this.$t('matching.waiting-for').split('{}')[1] }}<mk-ellipsis/></h1>
|
||||
<div class="cancel">
|
||||
<form-button round @click="cancel">{{ $t('matching.cancel') }}</form-button>
|
||||
</div>
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
<template>
|
||||
<div class="mk-github-setting">
|
||||
<p>{{ $t('description') }}</p>
|
||||
<p class="account" v-if="$store.state.i.github" :title="`GitHub ID: ${$store.state.i.github.id}`">{{ $t('connected-to') }}: <a :href="`https://github.com/${$store.state.i.github.login}`" target="_blank">@{{ $store.state.i.github.login }}</a></p>
|
||||
<p>
|
||||
<a :href="`${apiUrl}/connect/github`" target="_blank" @click.prevent="connect">{{ $store.state.i.github ? this.$t('reconnect') : this.$t('connect') }}</a>
|
||||
<span v-if="$store.state.i.github"> or </span>
|
||||
<a :href="`${apiUrl}/disconnect/github`" target="_blank" v-if="$store.state.i.github" @click.prevent="disconnect">{{ $t('disconnect') }}</a>
|
||||
</p>
|
||||
<p class="id" v-if="$store.state.i.github">GitHub ID: {{ $store.state.i.github.id }}</p>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import { apiUrl } from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/github-setting.vue'),
|
||||
data() {
|
||||
return {
|
||||
form: null,
|
||||
apiUrl
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.$watch('$store.state.i', () => {
|
||||
if (this.$store.state.i.github && this.form)
|
||||
this.form.close();
|
||||
}, {
|
||||
deep: true
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
connect() {
|
||||
this.form = window.open(apiUrl + '/connect/github',
|
||||
'github_connect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
|
||||
disconnect() {
|
||||
window.open(apiUrl + '/disconnect/github',
|
||||
'github_disconnect_window',
|
||||
'height=570, width=520');
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.mk-github-setting
|
||||
.account
|
||||
border solid 1px #e1e8ed
|
||||
border-radius 4px
|
||||
padding 16px
|
||||
|
||||
a
|
||||
font-weight bold
|
||||
color inherit
|
||||
|
||||
.id
|
||||
color #8899a6
|
||||
</style>
|
||||
@@ -1,5 +1,6 @@
|
||||
import Vue from 'vue';
|
||||
|
||||
import userName from './user-name.vue';
|
||||
import followButton from './follow-button.vue';
|
||||
import error from './error.vue';
|
||||
import noteSkeleton from './note-skeleton.vue';
|
||||
@@ -44,6 +45,7 @@ import uiInfo from './ui/info.vue';
|
||||
import formButton from './ui/form/button.vue';
|
||||
import formRadio from './ui/form/radio.vue';
|
||||
|
||||
Vue.component('mk-user-name', userName);
|
||||
Vue.component('mk-follow-button', followButton);
|
||||
Vue.component('mk-error', error);
|
||||
Vue.component('mk-note-skeleton', noteSkeleton);
|
||||
|
||||
114
src/client/app/common/views/components/integration-settings.vue
Normal file
114
src/client/app/common/views/components/integration-settings.vue
Normal file
@@ -0,0 +1,114 @@
|
||||
<template>
|
||||
<ui-card v-if="enableTwitterIntegration || enableDiscordIntegration || enableGithubIntegration">
|
||||
<div slot="title"><fa icon="share-alt"/> {{ $t('title') }}</div>
|
||||
|
||||
<section v-if="enableTwitterIntegration">
|
||||
<header><fa :icon="['fab', 'twitter']"/> Twitter</header>
|
||||
<p v-if="$store.state.i.twitter">{{ $t('connected-to') }}: <a :href="`https://twitter.com/${$store.state.i.twitter.screenName}`" target="_blank">@{{ $store.state.i.twitter.screenName }}</a></p>
|
||||
<ui-button v-if="$store.state.i.twitter" @click="disconnectTwitter">{{ $t('disconnect') }}</ui-button>
|
||||
<ui-button v-else @click="connectTwitter">{{ $t('connect') }}</ui-button>
|
||||
</section>
|
||||
|
||||
<section v-if="enableDiscordIntegration">
|
||||
<header><fa :icon="['fab', 'discord']"/> Discord</header>
|
||||
<p v-if="$store.state.i.discord">{{ $t('connected-to') }}: <a :href="`https://discordapp.com/users/${$store.state.i.discord.id}`" target="_blank">@{{ $store.state.i.discord.username }}#{{ $store.state.i.discord.discriminator }}</a></p>
|
||||
<ui-button v-if="$store.state.i.discord" @click="disconnectDiscord">{{ $t('disconnect') }}</ui-button>
|
||||
<ui-button v-else @click="connectDiscord">{{ $t('connect') }}</ui-button>
|
||||
</section>
|
||||
|
||||
<section v-if="enableGithubIntegration">
|
||||
<header><fa :icon="['fab', 'github']"/> GitHub</header>
|
||||
<p v-if="$store.state.i.github">{{ $t('connected-to') }}: <a :href="`https://github.com/${$store.state.i.github.login}`" target="_blank">@{{ $store.state.i.github.login }}</a></p>
|
||||
<ui-button v-if="$store.state.i.github" @click="disconnectGithub">{{ $t('disconnect') }}</ui-button>
|
||||
<ui-button v-else @click="connectGithub">{{ $t('connect') }}</ui-button>
|
||||
</section>
|
||||
</ui-card>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import { apiUrl } from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/integration-settings.vue'),
|
||||
|
||||
data() {
|
||||
return {
|
||||
apiUrl,
|
||||
twitterForm: null,
|
||||
discordForm: null,
|
||||
githubForm: null,
|
||||
enableTwitterIntegration: false,
|
||||
enableDiscordIntegration: false,
|
||||
enableGithubIntegration: false,
|
||||
};
|
||||
},
|
||||
|
||||
created() {
|
||||
this.$root.getMeta().then(meta => {
|
||||
this.enableTwitterIntegration = meta.enableTwitterIntegration;
|
||||
this.enableDiscordIntegration = meta.enableDiscordIntegration;
|
||||
this.enableGithubIntegration = meta.enableGithubIntegration;
|
||||
});
|
||||
},
|
||||
|
||||
mounted() {
|
||||
document.cookie = `i=${this.$store.state.i.token}`;
|
||||
this.$watch('$store.state.i', () => {
|
||||
if (this.$store.state.i.twitter) {
|
||||
if (this.twitterForm) this.twitterForm.close();
|
||||
}
|
||||
if (this.$store.state.i.discord) {
|
||||
if (this.discordForm) this.discordForm.close();
|
||||
}
|
||||
if (this.$store.state.i.github) {
|
||||
if (this.githubForm) this.githubForm.close();
|
||||
}
|
||||
}, {
|
||||
deep: true
|
||||
});
|
||||
},
|
||||
|
||||
methods: {
|
||||
connectTwitter() {
|
||||
this.twitterForm = window.open(apiUrl + '/connect/twitter',
|
||||
'twitter_connect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
|
||||
disconnectTwitter() {
|
||||
window.open(apiUrl + '/disconnect/twitter',
|
||||
'twitter_disconnect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
|
||||
connectDiscord() {
|
||||
this.discordForm = window.open(apiUrl + '/connect/discord',
|
||||
'discord_connect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
|
||||
disconnectDiscord() {
|
||||
window.open(apiUrl + '/disconnect/discord',
|
||||
'discord_disconnect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
|
||||
connectGithub() {
|
||||
this.githubForm = window.open(apiUrl + '/connect/github',
|
||||
'github_connect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
|
||||
disconnectGithub() {
|
||||
window.open(apiUrl + '/disconnect/github',
|
||||
'github_disconnect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
</style>
|
||||
54
src/client/app/common/views/components/language-settings.vue
Normal file
54
src/client/app/common/views/components/language-settings.vue
Normal file
@@ -0,0 +1,54 @@
|
||||
<template>
|
||||
<ui-card>
|
||||
<div slot="title"><fa icon="language"/> {{ $t('title') }}</div>
|
||||
|
||||
<section class="fit-top">
|
||||
<ui-select v-model="lang" :placeholder="$t('pick-language')">
|
||||
<optgroup :label="$t('recommended')">
|
||||
<option value="">{{ $t('auto') }}</option>
|
||||
</optgroup>
|
||||
|
||||
<optgroup :label="$t('specify-language')">
|
||||
<option v-for="x in langs" :value="x[0]" :key="x[0]">{{ x[1] }}</option>
|
||||
</optgroup>
|
||||
</ui-select>
|
||||
<ui-info>Current: <i>{{ currentLanguage }}</i></ui-info>
|
||||
<ui-info warn>{{ $t('info') }}</ui-info>
|
||||
</section>
|
||||
</ui-card>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import { langs } from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/language-settings.vue'),
|
||||
|
||||
data() {
|
||||
return {
|
||||
langs,
|
||||
currentLanguage: 'Unknown',
|
||||
};
|
||||
},
|
||||
|
||||
computed: {
|
||||
lang: {
|
||||
get() { return this.$store.state.device.lang; },
|
||||
set(value) { this.$store.commit('device/set', { key: 'lang', value }); }
|
||||
},
|
||||
},
|
||||
|
||||
created() {
|
||||
try {
|
||||
const locale = JSON.parse(localStorage.getItem('locale') || "{}");
|
||||
const localeKey = localStorage.getItem('localeKey');
|
||||
this.currentLanguage = `${locale.meta.lang} (${localeKey})`;
|
||||
} catch { }
|
||||
},
|
||||
|
||||
methods: {
|
||||
}
|
||||
});
|
||||
</script>
|
||||
70
src/client/app/common/views/components/mention.vue
Normal file
70
src/client/app/common/views/components/mention.vue
Normal file
@@ -0,0 +1,70 @@
|
||||
<template>
|
||||
<router-link class="ldlomzub" :to="`/${ canonical }`" v-user-preview="canonical">
|
||||
<span class="me" v-if="isMe">{{ $t('@.you') }}</span>
|
||||
<span class="main">
|
||||
<span class="username">@{{ username }}</span>
|
||||
<span class="host" :class="{ fade: $store.state.settings.contrastedAcct }" v-if="(host != localHost) || $store.state.settings.showFullAcct">@{{ toUnicode(host) }}</span>
|
||||
</span>
|
||||
</router-link>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import { toUnicode } from 'punycode';
|
||||
import { host as localHost } from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n(),
|
||||
props: {
|
||||
username: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
host: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
localHost
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
canonical(): string {
|
||||
return `@${this.username}@${toUnicode(this.host)}`;
|
||||
},
|
||||
isMe(): boolean {
|
||||
return this.$store.getters.isSignedIn && this.canonical.toLowerCase() === `@${this.$store.state.i.username}@${toUnicode(localHost)}`.toLowerCase();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
toUnicode
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.ldlomzub
|
||||
color var(--mfmMention)
|
||||
|
||||
> .me
|
||||
pointer-events none
|
||||
user-select none
|
||||
padding 0 4px
|
||||
background var(--mfmMention)
|
||||
border solid var(--lineWidth) var(--mfmMention)
|
||||
border-radius 4px 0 0 4px
|
||||
color var(--mfmMentionForeground)
|
||||
|
||||
& + .main
|
||||
padding 0 4px
|
||||
border solid var(--lineWidth) var(--mfmMention)
|
||||
border-radius 0 4px 4px 0
|
||||
|
||||
> .main
|
||||
> .host.fade
|
||||
opacity 0.5
|
||||
|
||||
</style>
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="onchrpzrvnoruiaenfcqvccjfuupzzwv">
|
||||
<div class="onchrpzrvnoruiaenfcqvccjfuupzzwv" :class="{ isMobile: $root.isMobile }">
|
||||
<div class="backdrop" ref="backdrop" @click="close"></div>
|
||||
<div class="popover" :class="{ hukidasi }" ref="popover">
|
||||
<template v-for="item, i in items">
|
||||
@@ -24,16 +24,11 @@ export default Vue.extend({
|
||||
items: {
|
||||
type: Array,
|
||||
required: true
|
||||
},
|
||||
compact: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
hukidasi: !this.compact
|
||||
hukidasi: !this.$root.isMobile
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
@@ -47,7 +42,7 @@ export default Vue.extend({
|
||||
let left;
|
||||
let top;
|
||||
|
||||
if (this.compact) {
|
||||
if (this.$root.isMobile) {
|
||||
const x = rect.left + window.pageXOffset + (this.source.offsetWidth / 2);
|
||||
const y = rect.top + window.pageYOffset + (this.source.offsetHeight / 2);
|
||||
left = (x - (width / 2));
|
||||
@@ -121,10 +116,14 @@ export default Vue.extend({
|
||||
<style lang="stylus" scoped>
|
||||
.onchrpzrvnoruiaenfcqvccjfuupzzwv
|
||||
$bg-color = var(--popupBg)
|
||||
$border-color = rgba(27, 31, 35, 0.15)
|
||||
|
||||
position initial
|
||||
|
||||
&.isMobile
|
||||
> .popover
|
||||
> button
|
||||
font-size 15px
|
||||
|
||||
> .backdrop
|
||||
position fixed
|
||||
top 0
|
||||
@@ -140,7 +139,6 @@ export default Vue.extend({
|
||||
z-index 10001
|
||||
padding 8px 0
|
||||
background $bg-color
|
||||
border 1px solid $border-color
|
||||
border-radius 4px
|
||||
box-shadow 0 3px 12px rgba(27, 31, 35, 0.15)
|
||||
transform scale(0.5)
|
||||
@@ -165,14 +163,6 @@ export default Vue.extend({
|
||||
border-top solid $balloon-size transparent
|
||||
border-left solid $balloon-size transparent
|
||||
border-right solid $balloon-size transparent
|
||||
border-bottom solid $balloon-size $border-color
|
||||
|
||||
&:after
|
||||
top -($balloon-size * 2) + 1.5px
|
||||
left s('calc(50% - %s)', $balloon-size)
|
||||
border-top solid $balloon-size transparent
|
||||
border-left solid $balloon-size transparent
|
||||
border-right solid $balloon-size transparent
|
||||
border-bottom solid $balloon-size $bg-color
|
||||
|
||||
> button
|
||||
@@ -196,7 +186,7 @@ export default Vue.extend({
|
||||
|
||||
> div
|
||||
margin 8px 0
|
||||
height 1px
|
||||
height var(--lineWidth)
|
||||
background var(--faceDivider)
|
||||
|
||||
</style>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
@keypress="onKeypress"
|
||||
@paste="onPaste"
|
||||
:placeholder="$t('input-message-here')"
|
||||
v-autocomplete="'text'"
|
||||
v-autocomplete="{ model: 'text' }"
|
||||
></textarea>
|
||||
<div class="file" @click="file = null" v-if="file">{{ file.name }}</div>
|
||||
<mk-uploader ref="uploader" @uploaded="onUploaded"/>
|
||||
@@ -85,7 +85,7 @@ export default Vue.extend({
|
||||
}
|
||||
} else {
|
||||
if (items[0].kind == 'file') {
|
||||
alert('%i18n:only-one-file-attached%');
|
||||
alert(this.$t('only-one-file-attached'));
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -107,7 +107,7 @@ export default Vue.extend({
|
||||
return;
|
||||
} else if (e.dataTransfer.files.length > 1) {
|
||||
e.preventDefault();
|
||||
alert('%i18n:only-one-file-attached%');
|
||||
alert(this.$t('only-one-file-attached'));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,19 +3,20 @@
|
||||
<mk-avatar class="avatar" :user="message.user" target="_blank"/>
|
||||
<div class="content">
|
||||
<div class="balloon" :data-no-text="message.text == null">
|
||||
<!-- <button class="delete-button" v-if="isMe" :title="$t('@.delete')">
|
||||
<img src="/assets/desktop/messaging/delete.png" alt="Delete"/>
|
||||
</button> -->
|
||||
<button class="delete-button" v-if="isMe" :title="$t('@.delete')" @click="del">
|
||||
<img src="/assets/desktop/remove.png" alt="Delete"/>
|
||||
</button>
|
||||
<div class="content" v-if="!message.isDeleted">
|
||||
<misskey-flavored-markdown class="text" v-if="message.text" ref="text" :text="message.text" :i="$store.state.i"/>
|
||||
<div class="file" v-if="message.file">
|
||||
<a :href="message.file.url" target="_blank" :title="message.file.name">
|
||||
<img v-if="message.file.type.split('/')[0] == 'image'" :src="message.file.url" :alt="message.file.name"/>
|
||||
<img v-if="message.file.type.split('/')[0] == 'image'" :src="message.file.url" :alt="message.file.name"
|
||||
:style="{ backgroundColor: message.file.properties.avgColor && message.file.properties.avgColor.length == 3 ? `rgb(${message.file.properties.avgColor.join(',')})` : 'transparent' }"/>
|
||||
<p v-else>{{ message.file.name }}</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content" v-if="message.isDeleted">
|
||||
<div class="content" v-else>
|
||||
<p class="is-deleted">{{ $t('deleted') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -51,12 +52,19 @@ export default Vue.extend({
|
||||
if (this.message.text) {
|
||||
const ast = parse(this.message.text);
|
||||
return unique(ast
|
||||
.filter(t => ((t.name == 'url' || t.name == 'link') && t.props.url && !t.silent))
|
||||
.map(t => t.props.url));
|
||||
.filter(t => ((t.node.type == 'url' || t.node.type == 'link') && t.node.props.url && !t.node.props.silent))
|
||||
.map(t => t.node.props.url));
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
del() {
|
||||
this.$root.api('messaging/messages/delete', {
|
||||
messageId: this.message.id
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@@ -150,7 +158,6 @@ export default Vue.extend({
|
||||
> a
|
||||
display block
|
||||
max-width 100%
|
||||
max-height 512px
|
||||
border-radius 16px
|
||||
overflow hidden
|
||||
text-decoration none
|
||||
@@ -165,7 +172,8 @@ export default Vue.extend({
|
||||
display block
|
||||
margin 0
|
||||
width 100%
|
||||
height 100%
|
||||
max-height 512px
|
||||
object-fit contain
|
||||
|
||||
> p
|
||||
padding 30px
|
||||
|
||||
@@ -79,6 +79,7 @@ export default Vue.extend({
|
||||
|
||||
this.connection.on('message', this.onMessage);
|
||||
this.connection.on('read', this.onRead);
|
||||
this.connection.on('deleted', this.onDeleted);
|
||||
|
||||
if (this.isNaked) {
|
||||
window.addEventListener('scroll', this.onScroll, { passive: true });
|
||||
@@ -196,12 +197,19 @@ export default Vue.extend({
|
||||
|
||||
onRead(ids) {
|
||||
if (!Array.isArray(ids)) ids = [ids];
|
||||
ids.forEach(id => {
|
||||
for (const id of ids) {
|
||||
if (this.messages.some(x => x.id == id)) {
|
||||
const exist = this.messages.map(x => x.id).indexOf(id);
|
||||
this.messages[exist].isRead = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
onDeleted(id) {
|
||||
const msg = this.messages.find(m => m.id === id);
|
||||
if (msg) {
|
||||
this.messages = this.messages.filter(m => m.id !== msg.id);
|
||||
}
|
||||
},
|
||||
|
||||
isBottom() {
|
||||
@@ -248,13 +256,13 @@ export default Vue.extend({
|
||||
|
||||
onVisibilitychange() {
|
||||
if (document.hidden) return;
|
||||
this.messages.forEach(message => {
|
||||
for (const message of this.messages) {
|
||||
if (message.userId !== this.$store.state.i.id && !message.isRead) {
|
||||
this.connection.send('read', {
|
||||
id: message.id
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
tabindex="-1"
|
||||
>
|
||||
<mk-avatar class="avatar" :user="user"/>
|
||||
<span class="name">{{ user | userName }}</span>
|
||||
<span class="name"><mk-user-name :user="user"/></span>
|
||||
<span class="username">@{{ user | acct }}</span>
|
||||
</li>
|
||||
</ol>
|
||||
@@ -33,7 +33,7 @@
|
||||
<div>
|
||||
<mk-avatar class="avatar" :user="isMe(message) ? message.recipient : message.user"/>
|
||||
<header>
|
||||
<span class="name">{{ isMe(message) ? message.recipient : message.user | userName }}</span>
|
||||
<span class="name"><mk-user-name :user="isMe(message) ? message.recipient : message.user"/></span>
|
||||
<span class="username">@{{ isMe(message) ? message.recipient : message.user | acct }}</span>
|
||||
<mk-time :time="message.createdAt"/>
|
||||
</header>
|
||||
@@ -103,10 +103,10 @@ export default Vue.extend({
|
||||
this.messages.unshift(message);
|
||||
},
|
||||
onRead(ids) {
|
||||
ids.forEach(id => {
|
||||
for (const id of ids) {
|
||||
const found = this.messages.find(m => m.id == id);
|
||||
if (found) found.isRead = true;
|
||||
});
|
||||
}
|
||||
},
|
||||
search() {
|
||||
if (this.q == '') {
|
||||
@@ -116,7 +116,8 @@ export default Vue.extend({
|
||||
this.$root.api('users/search', {
|
||||
query: this.q,
|
||||
localOnly: true,
|
||||
limit: 10
|
||||
limit: 10,
|
||||
detail: false
|
||||
}).then(users => {
|
||||
this.result = users.filter(user => user.id != this.$store.state.i.id);
|
||||
});
|
||||
|
||||
@@ -1,38 +1,19 @@
|
||||
import Vue, { VNode } from 'vue';
|
||||
import { length } from 'stringz';
|
||||
import { Node } from '../../../../../mfm/parser';
|
||||
import { MfmForest } from '../../../../../mfm/parser';
|
||||
import parse from '../../../../../mfm/parse';
|
||||
import MkUrl from './url.vue';
|
||||
import { concat } from '../../../../../prelude/array';
|
||||
import MkMention from './mention.vue';
|
||||
import { concat, sum } from '../../../../../prelude/array';
|
||||
import MkFormula from './formula.vue';
|
||||
import MkGoogle from './google.vue';
|
||||
import { toUnicode } from 'punycode';
|
||||
import syntaxHighlight from '../../../../../mfm/syntax-highlight';
|
||||
import { host } from '../../../config';
|
||||
import { preorderF, countNodesF } from '../../../../../prelude/tree';
|
||||
|
||||
function getTextCount(tokens: Node[]): number {
|
||||
let count = 0;
|
||||
const extract = (tokens: Node[]) => {
|
||||
tokens.filter(x => x.name === 'text').forEach(x => {
|
||||
count += length(x.props.text);
|
||||
});
|
||||
tokens.filter(x => x.children).forEach(x => {
|
||||
extract(x.children);
|
||||
});
|
||||
};
|
||||
extract(tokens);
|
||||
return count;
|
||||
}
|
||||
|
||||
function getChildrenCount(tokens: Node[]): number {
|
||||
let count = 0;
|
||||
const extract = (tokens: Node[]) => {
|
||||
tokens.filter(x => x.children).forEach(x => {
|
||||
count++;
|
||||
extract(x.children);
|
||||
});
|
||||
};
|
||||
extract(tokens);
|
||||
return count;
|
||||
function sumTextsLength(ts: MfmForest): number {
|
||||
const textNodes = preorderF(ts).filter(n => n.type === 'text');
|
||||
return sum(textNodes.map(x => length(x.props.text)));
|
||||
}
|
||||
|
||||
export default Vue.component('misskey-flavored-markdown', {
|
||||
@@ -41,14 +22,14 @@ export default Vue.component('misskey-flavored-markdown', {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
ast: {
|
||||
type: [],
|
||||
required: false
|
||||
},
|
||||
shouldBreak: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
plainText: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
author: {
|
||||
type: Object,
|
||||
default: null
|
||||
@@ -65,22 +46,15 @@ export default Vue.component('misskey-flavored-markdown', {
|
||||
render(createElement) {
|
||||
if (this.text == null || this.text == '') return;
|
||||
|
||||
let ast: Node[];
|
||||
|
||||
if (this.ast == null) {
|
||||
// Parse text to ast
|
||||
ast = parse(this.text);
|
||||
} else {
|
||||
ast = this.ast as Node[];
|
||||
}
|
||||
const ast = parse(this.text, this.plainText);
|
||||
|
||||
let bigCount = 0;
|
||||
let motionCount = 0;
|
||||
|
||||
const genEl = (ast: Node[]) => concat(ast.map((token): VNode[] => {
|
||||
switch (token.name) {
|
||||
const genEl = (ast: MfmForest) => concat(ast.map((token): VNode[] => {
|
||||
switch (token.node.type) {
|
||||
case 'text': {
|
||||
const text = token.props.text.replace(/(\r\n|\n|\r)/g, '\n');
|
||||
const text = token.node.props.text.replace(/(\r\n|\n|\r)/g, '\n');
|
||||
|
||||
if (this.shouldBreak) {
|
||||
const x = text.split('\n')
|
||||
@@ -96,9 +70,21 @@ export default Vue.component('misskey-flavored-markdown', {
|
||||
return [createElement('b', genEl(token.children))];
|
||||
}
|
||||
|
||||
case 'strike': {
|
||||
return [createElement('del', genEl(token.children))];
|
||||
}
|
||||
|
||||
case 'italic': {
|
||||
return (createElement as any)('i', {
|
||||
attrs: {
|
||||
style: 'font-style: oblique;'
|
||||
},
|
||||
}, genEl(token.children));
|
||||
}
|
||||
|
||||
case 'big': {
|
||||
bigCount++;
|
||||
const isLong = getTextCount(token.children) > 10 || getChildrenCount(token.children) > 5;
|
||||
const isLong = sumTextsLength(token.children) > 10 || countNodesF(token.children) > 5;
|
||||
const isMany = bigCount > 3;
|
||||
return (createElement as any)('strong', {
|
||||
attrs: {
|
||||
@@ -111,6 +97,10 @@ export default Vue.component('misskey-flavored-markdown', {
|
||||
}, genEl(token.children));
|
||||
}
|
||||
|
||||
case 'small': {
|
||||
return [createElement('small', genEl(token.children))];
|
||||
}
|
||||
|
||||
case 'center': {
|
||||
return [createElement('div', {
|
||||
attrs: {
|
||||
@@ -121,7 +111,7 @@ export default Vue.component('misskey-flavored-markdown', {
|
||||
|
||||
case 'motion': {
|
||||
motionCount++;
|
||||
const isLong = getTextCount(token.children) > 10 || getChildrenCount(token.children) > 5;
|
||||
const isLong = sumTextsLength(token.children) > 10 || countNodesF(token.children) > 5;
|
||||
const isMany = motionCount > 3;
|
||||
return (createElement as any)('span', {
|
||||
attrs: {
|
||||
@@ -138,9 +128,11 @@ export default Vue.component('misskey-flavored-markdown', {
|
||||
return [createElement(MkUrl, {
|
||||
key: Math.random(),
|
||||
props: {
|
||||
url: token.props.url,
|
||||
target: '_blank',
|
||||
style: 'color:var(--mfmLink);'
|
||||
url: token.node.props.url,
|
||||
target: '_blank'
|
||||
},
|
||||
attrs: {
|
||||
style: 'color:var(--mfmUrl);'
|
||||
}
|
||||
})];
|
||||
}
|
||||
@@ -149,40 +141,32 @@ export default Vue.component('misskey-flavored-markdown', {
|
||||
return [createElement('a', {
|
||||
attrs: {
|
||||
class: 'link',
|
||||
href: token.props.url,
|
||||
href: token.node.props.url,
|
||||
target: '_blank',
|
||||
title: token.props.url,
|
||||
title: token.node.props.url,
|
||||
style: 'color:var(--mfmLink);'
|
||||
}
|
||||
}, genEl(token.children))];
|
||||
}
|
||||
|
||||
case 'mention': {
|
||||
const host = token.props.host == null && this.author && this.author.host != null ? this.author.host : token.props.host;
|
||||
const canonical = host != null ? `@${token.props.username}@${toUnicode(host)}` : `@${token.props.username}`;
|
||||
return (createElement as any)('router-link', {
|
||||
return [createElement(MkMention, {
|
||||
key: Math.random(),
|
||||
attrs: {
|
||||
to: `/${canonical}`,
|
||||
// TODO
|
||||
//dataIsMe: (this as any).i && getAcct((this as any).i) == getAcct(token),
|
||||
style: 'color:var(--mfmMention);'
|
||||
},
|
||||
directives: [{
|
||||
name: 'user-preview',
|
||||
value: canonical
|
||||
}]
|
||||
}, canonical);
|
||||
props: {
|
||||
host: (token.node.props.host == null && this.author && this.author.host != null ? this.author.host : token.node.props.host) || host,
|
||||
username: token.node.props.username
|
||||
}
|
||||
})];
|
||||
}
|
||||
|
||||
case 'hashtag': {
|
||||
return [createElement('router-link', {
|
||||
key: Math.random(),
|
||||
attrs: {
|
||||
to: `/tags/${encodeURIComponent(token.props.hashtag)}`,
|
||||
to: `/tags/${encodeURIComponent(token.node.props.hashtag)}`,
|
||||
style: 'color:var(--mfmHashtag);'
|
||||
}
|
||||
}, `#${token.props.hashtag}`)];
|
||||
}, `#${token.node.props.hashtag}`)];
|
||||
}
|
||||
|
||||
case 'blockCode': {
|
||||
@@ -191,7 +175,7 @@ export default Vue.component('misskey-flavored-markdown', {
|
||||
}, [
|
||||
createElement('code', {
|
||||
domProps: {
|
||||
innerHTML: syntaxHighlight(token.props.code)
|
||||
innerHTML: syntaxHighlight(token.node.props.code)
|
||||
}
|
||||
})
|
||||
])];
|
||||
@@ -200,7 +184,7 @@ export default Vue.component('misskey-flavored-markdown', {
|
||||
case 'inlineCode': {
|
||||
return [createElement('code', {
|
||||
domProps: {
|
||||
innerHTML: syntaxHighlight(token.props.code)
|
||||
innerHTML: syntaxHighlight(token.node.props.code)
|
||||
}
|
||||
})];
|
||||
}
|
||||
@@ -234,11 +218,12 @@ export default Vue.component('misskey-flavored-markdown', {
|
||||
return [createElement('mk-emoji', {
|
||||
key: Math.random(),
|
||||
attrs: {
|
||||
emoji: token.props.emoji,
|
||||
name: token.props.name
|
||||
emoji: token.node.props.emoji,
|
||||
name: token.node.props.name
|
||||
},
|
||||
props: {
|
||||
customEmojis: this.customEmojis || customEmojis
|
||||
customEmojis: this.customEmojis || customEmojis,
|
||||
normal: this.plainText
|
||||
}
|
||||
})];
|
||||
}
|
||||
@@ -248,7 +233,7 @@ export default Vue.component('misskey-flavored-markdown', {
|
||||
return [createElement(MkFormula, {
|
||||
key: Math.random(),
|
||||
props: {
|
||||
formula: token.props.formula
|
||||
formula: token.node.props.formula
|
||||
}
|
||||
})];
|
||||
}
|
||||
@@ -258,13 +243,13 @@ export default Vue.component('misskey-flavored-markdown', {
|
||||
return [createElement(MkGoogle, {
|
||||
key: Math.random(),
|
||||
props: {
|
||||
q: token.props.query
|
||||
q: token.node.props.query
|
||||
}
|
||||
})];
|
||||
}
|
||||
|
||||
default: {
|
||||
console.log('unknown ast type:', token.name);
|
||||
console.log('unknown ast type:', token.node.type);
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<ui-info v-if="!muteFetching && mute.length == 0">{{ $t('no-muted-users') }}</ui-info>
|
||||
<div class="users" v-if="mute.length != 0">
|
||||
<div v-for="user in mute" :key="user.id">
|
||||
<p><b>{{ user | userName }}</b> @{{ user | acct }}</p>
|
||||
<p><b><mk-user-name :user="user"/></b> @{{ user | acct }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -17,7 +17,7 @@
|
||||
<ui-info v-if="!blockFetching && block.length == 0">{{ $t('no-blocked-users') }}</ui-info>
|
||||
<div class="users" v-if="block.length != 0">
|
||||
<div v-for="user in block" :key="user.id">
|
||||
<p><b>{{ user | userName }}</b> @{{ user | acct }}</p>
|
||||
<p><b><mk-user-name :user="user"/></b> @{{ user | acct }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
<template>
|
||||
<header class="bvonvjxbwzaiskogyhbwgyxvcgserpmu">
|
||||
<mk-avatar class="avatar" :user="note.user" v-if="$store.state.device.postStyle == 'smart'"/>
|
||||
<router-link class="name" :to="note.user | userPage" v-user-preview="note.user.id">{{ note.user | userName }}</router-link>
|
||||
<router-link class="name" :to="note.user | userPage" v-user-preview="note.user.id">
|
||||
<mk-user-name :user="note.user"/>
|
||||
</router-link>
|
||||
<span class="is-admin" v-if="note.user.isAdmin">admin</span>
|
||||
<span class="is-bot" v-if="note.user.isBot">bot</span>
|
||||
<span class="is-cat" v-if="note.user.isCat">cat</span>
|
||||
@@ -16,8 +18,7 @@
|
||||
<span class="visibility" v-if="note.visibility != 'public'">
|
||||
<fa v-if="note.visibility == 'home'" icon="home"/>
|
||||
<fa v-if="note.visibility == 'followers'" icon="unlock"/>
|
||||
<fa v-if="note.visibility == 'specified'" icon="envelope"/>
|
||||
<fa v-if="note.visibility == 'private'" icon="lock"/>
|
||||
<fa v-if="note.visibility == 'specified'" icon="lock"/>
|
||||
</span>
|
||||
<span class="localOnly" v-if="note.localOnly == true"><fa icon="heart"/></span>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div style="position:initial">
|
||||
<mk-menu :source="source" :compact="compact" :items="items" @closed="closed"/>
|
||||
<mk-menu :source="source" :items="items" @closed="closed"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -13,10 +13,17 @@ import { concat, intersperse } from '../../../../../prelude/array';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/note-menu.vue'),
|
||||
props: ['note', 'source', 'compact'],
|
||||
props: ['note', 'source'],
|
||||
computed: {
|
||||
items(): any[] {
|
||||
return concat(intersperse([null], [
|
||||
[
|
||||
[{
|
||||
icon: 'at',
|
||||
text: this.$t('mention'),
|
||||
action: this.mention
|
||||
}]
|
||||
],
|
||||
[
|
||||
[{
|
||||
icon: 'info-circle',
|
||||
@@ -66,6 +73,10 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
methods: {
|
||||
mention() {
|
||||
this.$post({ mention: this.note.user });
|
||||
},
|
||||
|
||||
detail() {
|
||||
this.$router.push(`/notes/${this.note.id}`);
|
||||
},
|
||||
@@ -78,7 +89,7 @@ export default Vue.extend({
|
||||
this.$root.api('i/pin', {
|
||||
noteId: this.note.id
|
||||
}).then(() => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
splash: true
|
||||
});
|
||||
@@ -95,12 +106,12 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
del() {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'warning',
|
||||
text: this.$t('delete-confirm'),
|
||||
showCancelButton: true
|
||||
}).then(res => {
|
||||
if (!res) return;
|
||||
}).then(({ canceled }) => {
|
||||
if (canceled) return;
|
||||
|
||||
this.$root.api('notes/delete', {
|
||||
noteId: this.note.id
|
||||
@@ -114,7 +125,7 @@ export default Vue.extend({
|
||||
this.$root.api('notes/favorites/create', {
|
||||
noteId: this.note.id
|
||||
}).then(() => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
splash: true
|
||||
});
|
||||
@@ -126,7 +137,7 @@ export default Vue.extend({
|
||||
this.$root.api('notes/favorites/delete', {
|
||||
noteId: this.note.id
|
||||
}).then(() => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
splash: true
|
||||
});
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
<template>
|
||||
<ui-card>
|
||||
<div slot="title"><fa :icon="['far', 'bell']"/> {{ $t('title') }}</div>
|
||||
<section>
|
||||
<ui-switch v-model="$store.state.i.settings.autoWatch" @change="onChangeAutoWatch">
|
||||
{{ $t('auto-watch') }}<span slot="desc">{{ $t('auto-watch-desc') }}</span>
|
||||
</ui-switch>
|
||||
<section>
|
||||
<ui-button @click="readAllNotifications">{{ $t('mark-as-read-all-notifications') }}</ui-button>
|
||||
<ui-button @click="readAllUnreadNotes">{{ $t('mark-as-read-all-unread-notes') }}</ui-button>
|
||||
<ui-button @click="readAllMessagingMessages">{{ $t('mark-as-read-all-talk-messages') }}</ui-button>
|
||||
</section>
|
||||
</section>
|
||||
</ui-card>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/notification-settings.vue'),
|
||||
|
||||
methods: {
|
||||
onChangeAutoWatch(v) {
|
||||
this.$root.api('i/update', {
|
||||
autoWatch: v
|
||||
});
|
||||
},
|
||||
|
||||
readAllUnreadNotes() {
|
||||
this.$root.api('i/read_all_unread_notes');
|
||||
},
|
||||
|
||||
readAllMessagingMessages() {
|
||||
this.$root.api('i/read_all_messaging_messages');
|
||||
},
|
||||
|
||||
readAllNotifications() {
|
||||
this.$root.api('notifications/mark_all_as_read');
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
53
src/client/app/common/views/components/particle.vue
Normal file
53
src/client/app/common/views/components/particle.vue
Normal file
File diff suppressed because one or more lines are too long
@@ -11,33 +11,50 @@ import i18n from '../../../i18n';
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/password-settings.vue'),
|
||||
methods: {
|
||||
reset() {
|
||||
this.$input({
|
||||
async reset() {
|
||||
const { canceled: canceled1, result: currentPassword } = await this.$root.dialog({
|
||||
title: this.$t('enter-current-password'),
|
||||
type: 'password'
|
||||
}).then(currentPassword => {
|
||||
this.$input({
|
||||
title: this.$t('enter-new-password'),
|
||||
input: {
|
||||
type: 'password'
|
||||
}).then(newPassword => {
|
||||
this.$input({
|
||||
title: this.$t('enter-new-password-again'),
|
||||
type: 'password'
|
||||
}).then(newPassword2 => {
|
||||
if (newPassword !== newPassword2) {
|
||||
this.$root.alert({
|
||||
title: null,
|
||||
text: this.$t('not-match')
|
||||
});
|
||||
return;
|
||||
}
|
||||
this.$root.api('i/change_password', {
|
||||
currentPasword: currentPassword,
|
||||
newPassword: newPassword
|
||||
}).then(() => {
|
||||
this.$notify(this.$t('changed'));
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
if (canceled1) return;
|
||||
|
||||
const { canceled: canceled2, result: newPassword } = await this.$root.dialog({
|
||||
title: this.$t('enter-new-password'),
|
||||
input: {
|
||||
type: 'password'
|
||||
}
|
||||
});
|
||||
if (canceled2) return;
|
||||
|
||||
const { canceled: canceled3, result: newPassword2 } = await this.$root.dialog({
|
||||
title: this.$t('enter-new-password-again'),
|
||||
input: {
|
||||
type: 'password'
|
||||
}
|
||||
});
|
||||
if (canceled3) return;
|
||||
|
||||
if (newPassword !== newPassword2) {
|
||||
this.$root.dialog({
|
||||
title: null,
|
||||
text: this.$t('not-match')
|
||||
});
|
||||
return;
|
||||
}
|
||||
this.$root.api('i/change_password', {
|
||||
currentPassword,
|
||||
newPassword
|
||||
}).then(() => {
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('changed')
|
||||
});
|
||||
}).catch(() => {
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('failed')
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -55,12 +55,12 @@ export default Vue.extend({
|
||||
noteId: this.note.id,
|
||||
choice: id
|
||||
}).then(() => {
|
||||
this.poll.choices.forEach(c => {
|
||||
for (const c of this.poll.choices) {
|
||||
if (c.id == id) {
|
||||
c.votes++;
|
||||
Vue.set(c, 'isVoted', true);
|
||||
}
|
||||
});
|
||||
}
|
||||
this.showResult = true;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
</ui-input>
|
||||
|
||||
<ui-input v-model="birthday" type="date">
|
||||
<span>{{ $t('birthday') }}</span>
|
||||
<span slot="title">{{ $t('birthday') }}</span>
|
||||
<span slot="prefix"><fa icon="birthday-cake"/></span>
|
||||
</ui-input>
|
||||
|
||||
@@ -32,6 +32,12 @@
|
||||
<span>{{ $t('description') }}</span>
|
||||
</ui-textarea>
|
||||
|
||||
<ui-select v-model="lang">
|
||||
<span slot="label">{{ $t('language') }}</span>
|
||||
<span slot="icon"><fa icon="language"/></span>
|
||||
<option v-for="lang in unique(Object.values(langmap).map(x => x.nativeName)).map(name => Object.keys(langmap).find(k => langmap[k].nativeName == name))" :value="lang" :key="lang">{{ langmap[lang].nativeName }}</option>
|
||||
</ui-select>
|
||||
|
||||
<ui-input type="file" @change="onAvatarChange">
|
||||
<span>{{ $t('avatar') }}</span>
|
||||
<span slot="icon"><fa icon="image"/></span>
|
||||
@@ -63,7 +69,8 @@
|
||||
|
||||
<div>
|
||||
<ui-switch v-model="isLocked" @change="save(false)">{{ $t('is-locked') }}</ui-switch>
|
||||
<ui-switch v-model="carefulBot" @change="save(false)">{{ $t('careful-bot') }}</ui-switch>
|
||||
<ui-switch v-model="carefulBot" :disabled="isLocked" @change="save(false)">{{ $t('careful-bot') }}</ui-switch>
|
||||
<ui-switch v-model="autoAcceptFollowed" :disabled="!isLocked && !carefulBot" @change="save(false)">{{ $t('auto-accept-followed') }}</ui-switch>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -87,12 +94,16 @@ import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import { apiUrl, host } from '../../../config';
|
||||
import { toUnicode } from 'punycode';
|
||||
import langmap from 'langmap';
|
||||
import { unique } from '../../../../../prelude/array';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/profile-editor.vue'),
|
||||
|
||||
data() {
|
||||
return {
|
||||
unique,
|
||||
langmap,
|
||||
host: toUnicode(host),
|
||||
enableEmail: false,
|
||||
email: null,
|
||||
@@ -100,6 +111,7 @@ export default Vue.extend({
|
||||
username: null,
|
||||
location: null,
|
||||
description: null,
|
||||
lang: null,
|
||||
birthday: null,
|
||||
avatarId: null,
|
||||
bannerId: null,
|
||||
@@ -107,6 +119,7 @@ export default Vue.extend({
|
||||
isBot: false,
|
||||
isLocked: false,
|
||||
carefulBot: false,
|
||||
autoAcceptFollowed: false,
|
||||
saving: false,
|
||||
avatarUploading: false,
|
||||
bannerUploading: false
|
||||
@@ -137,6 +150,7 @@ export default Vue.extend({
|
||||
this.username = this.$store.state.i.username;
|
||||
this.location = this.$store.state.i.profile.location;
|
||||
this.description = this.$store.state.i.description;
|
||||
this.lang = this.$store.state.i.lang;
|
||||
this.birthday = this.$store.state.i.profile.birthday;
|
||||
this.avatarId = this.$store.state.i.avatarId;
|
||||
this.bannerId = this.$store.state.i.bannerId;
|
||||
@@ -144,6 +158,7 @@ export default Vue.extend({
|
||||
this.isBot = this.$store.state.i.isBot;
|
||||
this.isLocked = this.$store.state.i.isLocked;
|
||||
this.carefulBot = this.$store.state.i.carefulBot;
|
||||
this.autoAcceptFollowed = this.$store.state.i.autoAcceptFollowed;
|
||||
},
|
||||
|
||||
methods: {
|
||||
@@ -198,13 +213,15 @@ export default Vue.extend({
|
||||
name: this.name || null,
|
||||
location: this.location || null,
|
||||
description: this.description || null,
|
||||
lang: this.lang,
|
||||
birthday: this.birthday || null,
|
||||
avatarId: this.avatarId || undefined,
|
||||
bannerId: this.bannerId || undefined,
|
||||
isCat: !!this.isCat,
|
||||
isBot: !!this.isBot,
|
||||
isLocked: !!this.isLocked,
|
||||
carefulBot: !!this.carefulBot
|
||||
carefulBot: !!this.carefulBot,
|
||||
autoAcceptFollowed: !!this.autoAcceptFollowed
|
||||
}).then(i => {
|
||||
this.saving = false;
|
||||
this.$store.state.i.avatarId = i.avatarId;
|
||||
@@ -213,7 +230,7 @@ export default Vue.extend({
|
||||
this.$store.state.i.bannerUrl = i.bannerUrl;
|
||||
|
||||
if (notify) {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('saved')
|
||||
});
|
||||
@@ -222,10 +239,13 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
updateEmail() {
|
||||
this.$input({
|
||||
this.$root.dialog({
|
||||
title: this.$t('@.enter-password'),
|
||||
type: 'password'
|
||||
}).then(password => {
|
||||
input: {
|
||||
type: 'password'
|
||||
}
|
||||
}).then(({ canceled, result: password }) => {
|
||||
if (canceled) return;
|
||||
this.$root.api('i/update_email', {
|
||||
password: password,
|
||||
email: this.email == '' ? null : this.email
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
<template>
|
||||
<div class="mk-reaction-picker" v-hotkey.global="keymap">
|
||||
<div class="rdfaahpb" v-hotkey.global="keymap">
|
||||
<div class="backdrop" ref="backdrop" @click="close"></div>
|
||||
<div class="popover" :class="{ compact, big }" ref="popover">
|
||||
<p v-if="!compact">{{ title }}</p>
|
||||
<div class="popover" :class="{ isMobile: $root.isMobile }" ref="popover">
|
||||
<p v-if="!$root.isMobile">{{ title }}</p>
|
||||
<div ref="buttons" :class="{ showFocus }">
|
||||
<button @click="react('like')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="1" :title="$t('@.reactions.like')"><mk-reaction-icon reaction='like'/></button>
|
||||
<button @click="react('love')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="2" :title="$t('@.reactions.love')"><mk-reaction-icon reaction='love'/></button>
|
||||
<button @click="react('laugh')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="3" :title="$t('@.reactions.laugh')"><mk-reaction-icon reaction='laugh'/></button>
|
||||
<button @click="react('hmm')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="4" :title="$t('@.reactions.hmm')"><mk-reaction-icon reaction='hmm'/></button>
|
||||
<button @click="react('surprise')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="5" :title="$t('@.reactions.surprise')"><mk-reaction-icon reaction='surprise'/></button>
|
||||
<button @click="react('congrats')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="6" :title="$t('@.reactions.congrats')"><mk-reaction-icon reaction='congrats'/></button>
|
||||
<button @click="react('angry')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="7" :title="$t('@.reactions.angry')"><mk-reaction-icon reaction='angry'/></button>
|
||||
<button @click="react('confused')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="8" :title="$t('@.reactions.confused')"><mk-reaction-icon reaction='confused'/></button>
|
||||
<button @click="react('rip')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="9" :title="$t('@.reactions.rip')"><mk-reaction-icon reaction='rip'/></button>
|
||||
<button @click="react('pudding')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="10" :title="$t('@.reactions.pudding')"><mk-reaction-icon reaction='pudding'/></button>
|
||||
<button @click="react('like')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="1" :title="$t('@.reactions.like')" v-particle><mk-reaction-icon reaction="like"/></button>
|
||||
<button @click="react('love')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="2" :title="$t('@.reactions.love')" v-particle><mk-reaction-icon reaction="love"/></button>
|
||||
<button @click="react('laugh')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="3" :title="$t('@.reactions.laugh')" v-particle><mk-reaction-icon reaction="laugh"/></button>
|
||||
<button @click="react('hmm')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="4" :title="$t('@.reactions.hmm')" v-particle><mk-reaction-icon reaction="hmm"/></button>
|
||||
<button @click="react('surprise')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="5" :title="$t('@.reactions.surprise')" v-particle><mk-reaction-icon reaction="surprise"/></button>
|
||||
<button @click="react('congrats')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="6" :title="$t('@.reactions.congrats')" v-particle><mk-reaction-icon reaction="congrats"/></button>
|
||||
<button @click="react('angry')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="7" :title="$t('@.reactions.angry')" v-particle><mk-reaction-icon reaction="angry"/></button>
|
||||
<button @click="react('confused')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="8" :title="$t('@.reactions.confused')" v-particle><mk-reaction-icon reaction="confused"/></button>
|
||||
<button @click="react('rip')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="9" :title="$t('@.reactions.rip')" v-particle><mk-reaction-icon reaction="rip"/></button>
|
||||
<button @click="react('pudding')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="10" :title="$t('@.reactions.pudding')" v-particle><mk-reaction-icon reaction="pudding"/></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -36,22 +36,10 @@ export default Vue.extend({
|
||||
required: true
|
||||
},
|
||||
|
||||
compact: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
},
|
||||
|
||||
cb: {
|
||||
required: false
|
||||
},
|
||||
|
||||
big: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
},
|
||||
|
||||
showFocus: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
@@ -115,7 +103,7 @@ export default Vue.extend({
|
||||
const width = popover.offsetWidth;
|
||||
const height = popover.offsetHeight;
|
||||
|
||||
if (this.compact) {
|
||||
if (this.$root.isMobile) {
|
||||
const x = rect.left + window.pageXOffset + (this.source.offsetWidth / 2);
|
||||
const y = rect.top + window.pageYOffset + (this.source.offsetHeight / 2);
|
||||
popover.style.left = (x - (width / 2)) + 'px';
|
||||
@@ -210,9 +198,7 @@ export default Vue.extend({
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
$border-color = rgba(27, 31, 35, 0.15)
|
||||
|
||||
.mk-reaction-picker
|
||||
.rdfaahpb
|
||||
position initial
|
||||
|
||||
> .backdrop
|
||||
@@ -230,41 +216,12 @@ $border-color = rgba(27, 31, 35, 0.15)
|
||||
position absolute
|
||||
z-index 10001
|
||||
background $bgcolor
|
||||
border 1px solid $border-color
|
||||
border-radius 4px
|
||||
box-shadow 0 3px 12px rgba(27, 31, 35, 0.15)
|
||||
transform scale(0.5)
|
||||
opacity 0
|
||||
|
||||
$balloon-size = 16px
|
||||
|
||||
&:not(.compact)
|
||||
margin-top $balloon-size
|
||||
transform-origin center -($balloon-size)
|
||||
|
||||
&:before
|
||||
content ""
|
||||
display block
|
||||
position absolute
|
||||
top -($balloon-size * 2)
|
||||
left s('calc(50% - %s)', $balloon-size)
|
||||
border-top solid $balloon-size transparent
|
||||
border-left solid $balloon-size transparent
|
||||
border-right solid $balloon-size transparent
|
||||
border-bottom solid $balloon-size $border-color
|
||||
|
||||
&:after
|
||||
content ""
|
||||
display block
|
||||
position absolute
|
||||
top -($balloon-size * 2) + 1.5px
|
||||
left s('calc(50% - %s)', $balloon-size)
|
||||
border-top solid $balloon-size transparent
|
||||
border-left solid $balloon-size transparent
|
||||
border-right solid $balloon-size transparent
|
||||
border-bottom solid $balloon-size $bgcolor
|
||||
|
||||
&.big
|
||||
&.isMobile
|
||||
> div
|
||||
width 280px
|
||||
|
||||
@@ -274,13 +231,30 @@ $border-color = rgba(27, 31, 35, 0.15)
|
||||
font-size 28px
|
||||
border-radius 4px
|
||||
|
||||
&:not(.isMobile)
|
||||
$arrow-size = 16px
|
||||
|
||||
margin-top $arrow-size
|
||||
transform-origin center -($arrow-size)
|
||||
|
||||
&:before
|
||||
content ""
|
||||
display block
|
||||
position absolute
|
||||
top -($arrow-size * 2)
|
||||
left s('calc(50% - %s)', $arrow-size)
|
||||
border-top solid $arrow-size transparent
|
||||
border-left solid $arrow-size transparent
|
||||
border-right solid $arrow-size transparent
|
||||
border-bottom solid $arrow-size $bgcolor
|
||||
|
||||
> p
|
||||
display block
|
||||
margin 0
|
||||
padding 8px 10px
|
||||
font-size 14px
|
||||
color var(--popupFg)
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
border-bottom solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
> div
|
||||
padding 4px
|
||||
|
||||
@@ -1,35 +1,130 @@
|
||||
<template>
|
||||
<div class="mk-reactions-viewer">
|
||||
<div class="mk-reactions-viewer" :class="{ isMe }">
|
||||
<template v-if="reactions">
|
||||
<span :class="{ reacted: note.myReaction == 'like' }" @click="react('like')" v-if="reactions.like"><mk-reaction-icon reaction="like"/><span>{{ reactions.like }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'love' }" @click="react('love')" v-if="reactions.love"><mk-reaction-icon reaction="love"/><span>{{ reactions.love }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'laugh' }" @click="react('laugh')" v-if="reactions.laugh"><mk-reaction-icon reaction="laugh"/><span>{{ reactions.laugh }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'hmm' }" @click="react('hmm')" v-if="reactions.hmm"><mk-reaction-icon reaction="hmm"/><span>{{ reactions.hmm }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'surprise' }" @click="react('surprise')" v-if="reactions.surprise"><mk-reaction-icon reaction="surprise"/><span>{{ reactions.surprise }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'congrats' }" @click="react('congrats')" v-if="reactions.congrats"><mk-reaction-icon reaction="congrats"/><span>{{ reactions.congrats }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'angry' }" @click="react('angry')" v-if="reactions.angry"><mk-reaction-icon reaction="angry"/><span>{{ reactions.angry }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'confused' }" @click="react('confused')" v-if="reactions.confused"><mk-reaction-icon reaction="confused"/><span>{{ reactions.confused }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'rip' }" @click="react('rip')" v-if="reactions.rip"><mk-reaction-icon reaction="rip"/><span>{{ reactions.rip }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'pudding' }" @click="react('pudding')" v-if="reactions.pudding"><mk-reaction-icon reaction="pudding"/><span>{{ reactions.pudding }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'like' }" @click="toggleReaction('like')" v-if="reactions.like" v-particle="!isMe"><mk-reaction-icon reaction="like" ref="like"/><span>{{ reactions.like }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'love' }" @click="toggleReaction('love')" v-if="reactions.love" v-particle="!isMe"><mk-reaction-icon reaction="love" ref="love"/><span>{{ reactions.love }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'laugh' }" @click="toggleReaction('laugh')" v-if="reactions.laugh" v-particle="!isMe"><mk-reaction-icon reaction="laugh" ref="laugh"/><span>{{ reactions.laugh }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'hmm' }" @click="toggleReaction('hmm')" v-if="reactions.hmm" v-particle="!isMe"><mk-reaction-icon reaction="hmm" ref="hmm"/><span>{{ reactions.hmm }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'surprise' }" @click="toggleReaction('surprise')" v-if="reactions.surprise" v-particle="!isMe"><mk-reaction-icon reaction="surprise" ref="surprise"/><span>{{ reactions.surprise }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'congrats' }" @click="toggleReaction('congrats')" v-if="reactions.congrats" v-particle="!isMe"><mk-reaction-icon reaction="congrats" ref="congrats"/><span>{{ reactions.congrats }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'angry' }" @click="toggleReaction('angry')" v-if="reactions.angry" v-particle="!isMe"><mk-reaction-icon reaction="angry" ref="angry"/><span>{{ reactions.angry }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'confused' }" @click="toggleReaction('confused')" v-if="reactions.confused" v-particle="!isMe"><mk-reaction-icon reaction="confused" ref="confused"/><span>{{ reactions.confused }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'rip' }" @click="toggleReaction('rip')" v-if="reactions.rip" v-particle="!isMe"><mk-reaction-icon reaction="rip" ref="rip"/><span>{{ reactions.rip }}</span></span>
|
||||
<span :class="{ reacted: note.myReaction == 'pudding' }" @click="toggleReaction('pudding')" v-if="reactions.pudding" v-particle="!isMe"><mk-reaction-icon reaction="pudding" ref="pudding"/><span>{{ reactions.pudding }}</span></span>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import Icon from './reaction-icon.vue';
|
||||
import * as anime from 'animejs';
|
||||
|
||||
export default Vue.extend({
|
||||
props: ['note'],
|
||||
props: {
|
||||
note: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
reactions(): number {
|
||||
reactions(): any {
|
||||
return this.note.reactionCounts;
|
||||
},
|
||||
isMe(): boolean {
|
||||
return this.$store.getters.isSignedIn && (this.$store.state.i.id === this.note.userId);
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'reactions.like'() {
|
||||
this.anime('like');
|
||||
},
|
||||
'reactions.love'() {
|
||||
this.anime('love');
|
||||
},
|
||||
'reactions.laugh'() {
|
||||
this.anime('laugh');
|
||||
},
|
||||
'reactions.hmm'() {
|
||||
this.anime('hmm');
|
||||
},
|
||||
'reactions.surprise'() {
|
||||
this.anime('surprise');
|
||||
},
|
||||
'reactions.congrats'() {
|
||||
this.anime('congrats');
|
||||
},
|
||||
'reactions.angry'() {
|
||||
this.anime('angry');
|
||||
},
|
||||
'reactions.confused'() {
|
||||
this.anime('confused');
|
||||
},
|
||||
'reactions.rip'() {
|
||||
this.anime('rip');
|
||||
},
|
||||
'reactions.pudding'() {
|
||||
this.anime('pudding');
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
react(reaction: string) {
|
||||
this.$root.api('notes/reactions/create', {
|
||||
noteId: this.note.id,
|
||||
reaction: reaction
|
||||
toggleReaction(reaction: string) {
|
||||
if (this.isMe) return;
|
||||
|
||||
const oldReaction = this.note.myReaction;
|
||||
if (oldReaction) {
|
||||
this.$root.api('notes/reactions/delete', {
|
||||
noteId: this.note.id
|
||||
}).then(() => {
|
||||
if (oldReaction !== reaction) {
|
||||
this.$root.api('notes/reactions/create', {
|
||||
noteId: this.note.id,
|
||||
reaction: reaction
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this.$root.api('notes/reactions/create', {
|
||||
noteId: this.note.id,
|
||||
reaction: reaction
|
||||
});
|
||||
}
|
||||
},
|
||||
anime(reaction: string) {
|
||||
if (this.$store.state.device.reduceMotion) return;
|
||||
if (document.hidden) return;
|
||||
|
||||
this.$nextTick(() => {
|
||||
const rect = this.$refs[reaction].$el.getBoundingClientRect();
|
||||
|
||||
const x = rect.left;
|
||||
const y = rect.top;
|
||||
|
||||
const icon = new Icon({
|
||||
parent: this,
|
||||
propsData: {
|
||||
reaction: reaction
|
||||
}
|
||||
}).$mount();
|
||||
|
||||
icon.$el.style.position = 'absolute';
|
||||
icon.$el.style.zIndex = 100;
|
||||
icon.$el.style.top = (y + window.scrollY) + 'px';
|
||||
icon.$el.style.left = (x + window.scrollX) + 'px';
|
||||
icon.$el.style.fontSize = window.getComputedStyle(this.$refs[reaction].$el).fontSize;
|
||||
|
||||
document.body.appendChild(icon.$el);
|
||||
|
||||
anime({
|
||||
targets: icon.$el,
|
||||
opacity: [1, 0],
|
||||
translateY: [0, -64],
|
||||
duration: 1000,
|
||||
easing: 'linear',
|
||||
complete: () => {
|
||||
icon.destroyDom();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -43,12 +138,20 @@ export default Vue.extend({
|
||||
&:empty
|
||||
display none
|
||||
|
||||
&.isMe
|
||||
> span
|
||||
cursor default !important
|
||||
|
||||
&:hover
|
||||
background var(--reactionViewerButtonBg) !important
|
||||
|
||||
> span
|
||||
display inline-block
|
||||
height 32px
|
||||
margin-right 6px
|
||||
padding 0 6px
|
||||
border-radius 4px
|
||||
cursor pointer
|
||||
|
||||
*
|
||||
user-select none
|
||||
@@ -61,7 +164,6 @@ export default Vue.extend({
|
||||
color var(--primaryForeground)
|
||||
|
||||
&:not(.reacted)
|
||||
cursor pointer
|
||||
background var(--reactionViewerButtonBg)
|
||||
|
||||
&:hover
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
<mk-avatar class="avatar" :user="note.user"/>
|
||||
<fa icon="retweet"/>
|
||||
<i18n path="@.renoted-by" tag="span">
|
||||
<router-link class="name" :to="note.user | userPage" v-user-preview="note.userId" place="user">{{ note.user | userName }}</router-link>
|
||||
<router-link class="name" :to="note.user | userPage" v-user-preview="note.userId" place="user">
|
||||
<mk-user-name :user="note.user"/>
|
||||
</router-link>
|
||||
</i18n>
|
||||
<div class="info">
|
||||
<span class="mobile" v-if="note.viaMobile"><fa icon="mobile-alt"/></span>
|
||||
@@ -11,8 +13,7 @@
|
||||
<span class="visibility" v-if="note.visibility != 'public'">
|
||||
<fa v-if="note.visibility == 'home'" icon="home"/>
|
||||
<fa v-if="note.visibility == 'followers'" icon="unlock"/>
|
||||
<fa v-if="note.visibility == 'specified'" icon="envelope"/>
|
||||
<fa v-if="note.visibility == 'private'" icon="lock"/>
|
||||
<fa v-if="note.visibility == 'specified'" icon="lock"/>
|
||||
</span>
|
||||
<span class="localOnly" v-if="note.localOnly == true"><fa icon="heart"/></span>
|
||||
</div>
|
||||
|
||||
@@ -26,6 +26,7 @@ import { toUnicode } from 'punycode';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/signin.vue'),
|
||||
|
||||
props: {
|
||||
withAvatar: {
|
||||
type: Boolean,
|
||||
@@ -33,6 +34,7 @@ export default Vue.extend({
|
||||
default: true
|
||||
}
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
signing: false,
|
||||
@@ -45,11 +47,13 @@ export default Vue.extend({
|
||||
meta: null
|
||||
};
|
||||
},
|
||||
|
||||
created() {
|
||||
this.$root.getMeta().then(meta => {
|
||||
this.meta = meta;
|
||||
});
|
||||
},
|
||||
|
||||
methods: {
|
||||
onUsernameChange() {
|
||||
this.$root.api('users/show', {
|
||||
@@ -60,6 +64,7 @@ export default Vue.extend({
|
||||
this.user = null;
|
||||
});
|
||||
},
|
||||
|
||||
onSubmit() {
|
||||
this.signing = true;
|
||||
|
||||
@@ -80,8 +85,6 @@ export default Vue.extend({
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
|
||||
|
||||
.mk-signin
|
||||
color #555
|
||||
|
||||
|
||||
@@ -50,6 +50,7 @@ import { toUnicode } from 'punycode';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/signup.vue'),
|
||||
|
||||
data() {
|
||||
return {
|
||||
host: toUnicode(host),
|
||||
@@ -64,6 +65,7 @@ export default Vue.extend({
|
||||
meta: null
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
shouldShowProfileUrl(): boolean {
|
||||
return (this.username != '' &&
|
||||
@@ -72,17 +74,20 @@ export default Vue.extend({
|
||||
this.usernameState != 'max-range');
|
||||
}
|
||||
},
|
||||
|
||||
created() {
|
||||
this.$root.getMeta().then(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: {
|
||||
onChangeUsername() {
|
||||
if (this.username == '') {
|
||||
@@ -111,6 +116,7 @@ export default Vue.extend({
|
||||
this.usernameState = 'error';
|
||||
});
|
||||
},
|
||||
|
||||
onChangePassword() {
|
||||
if (this.password == '') {
|
||||
this.passwordStrength = '';
|
||||
@@ -120,6 +126,7 @@ export default Vue.extend({
|
||||
const strength = getPasswordStrength(this.password);
|
||||
this.passwordStrength = strength > 0.7 ? 'high' : strength > 0.3 ? 'medium' : 'low';
|
||||
},
|
||||
|
||||
onChangePasswordRetype() {
|
||||
if (this.retypedPassword == '') {
|
||||
this.passwordRetypeState = null;
|
||||
@@ -128,6 +135,7 @@ export default Vue.extend({
|
||||
|
||||
this.passwordRetypeState = this.password == this.retypedPassword ? 'match' : 'not-match';
|
||||
},
|
||||
|
||||
onSubmit() {
|
||||
this.$root.api('signup', {
|
||||
username: this.username,
|
||||
@@ -138,8 +146,9 @@ export default Vue.extend({
|
||||
this.$root.api('signin', {
|
||||
username: this.username,
|
||||
password: this.password
|
||||
}, true).then(() => {
|
||||
location.href = '/';
|
||||
}, true).then(res => {
|
||||
localStorage.setItem('i', res.i);
|
||||
location.reload();
|
||||
});
|
||||
}).catch(() => {
|
||||
alert(this.$t('some-error'));
|
||||
@@ -154,8 +163,6 @@ export default Vue.extend({
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
|
||||
|
||||
.mk-signup
|
||||
min-width 302px
|
||||
</style>
|
||||
|
||||
@@ -1,99 +1,104 @@
|
||||
<template>
|
||||
<div class="nicnklzforebnpfgasiypmpdaaglujqm">
|
||||
<label>
|
||||
<span><fa :icon="faSun"/> {{ $t('light-theme') }}</span>
|
||||
<ui-select v-model="light" :placeholder="$t('light-theme')">
|
||||
<optgroup :label="$t('light-themes')">
|
||||
<option v-for="x in lightThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
<optgroup :label="$t('dark-themes')">
|
||||
<option v-for="x in darkThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
</ui-select>
|
||||
</label>
|
||||
<ui-card>
|
||||
<div slot="title"><fa icon="palette"/> {{ $t('theme') }}</div>
|
||||
<section class="nicnklzforebnpfgasiypmpdaaglujqm fit-top">
|
||||
<label>
|
||||
<ui-select v-model="light" :placeholder="$t('light-theme')">
|
||||
<span slot="label"><fa :icon="faSun"/> {{ $t('light-theme') }}</span>
|
||||
<optgroup :label="$t('light-themes')">
|
||||
<option v-for="x in lightThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
<optgroup :label="$t('dark-themes')">
|
||||
<option v-for="x in darkThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
</ui-select>
|
||||
</label>
|
||||
|
||||
<label>
|
||||
<span><fa :icon="faMoon"/> {{ $t('dark-theme') }}</span>
|
||||
<ui-select v-model="dark" :placeholder="$t('dark-theme')">
|
||||
<optgroup :label="$t('dark-themes')">
|
||||
<option v-for="x in darkThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
<optgroup :label="$t('light-themes')">
|
||||
<option v-for="x in lightThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
</ui-select>
|
||||
</label>
|
||||
<label>
|
||||
<ui-select v-model="dark" :placeholder="$t('dark-theme')">
|
||||
<span slot="label"><fa :icon="faMoon"/> {{ $t('dark-theme') }}</span>
|
||||
<optgroup :label="$t('dark-themes')">
|
||||
<option v-for="x in darkThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
<optgroup :label="$t('light-themes')">
|
||||
<option v-for="x in lightThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
</ui-select>
|
||||
</label>
|
||||
|
||||
<details class="creator">
|
||||
<summary><fa icon="palette"/> {{ $t('create-a-theme') }}</summary>
|
||||
<div>
|
||||
<span>{{ $t('base-theme') }}:</span>
|
||||
<ui-radio v-model="myThemeBase" value="light">{{ $t('base-theme-light') }}</ui-radio>
|
||||
<ui-radio v-model="myThemeBase" value="dark">{{ $t('base-theme-dark') }}</ui-radio>
|
||||
</div>
|
||||
<div>
|
||||
<ui-input v-model="myThemeName">
|
||||
<span>{{ $t('theme-name') }}</span>
|
||||
</ui-input>
|
||||
<ui-textarea v-model="myThemeDesc">
|
||||
<span>{{ $t('desc') }}</span>
|
||||
</ui-textarea>
|
||||
</div>
|
||||
<div>
|
||||
<div style="padding-bottom:8px;">{{ $t('primary-color') }}:</div>
|
||||
<color-picker v-model="myThemePrimary"/>
|
||||
</div>
|
||||
<div>
|
||||
<div style="padding-bottom:8px;">{{ $t('secondary-color') }}:</div>
|
||||
<color-picker v-model="myThemeSecondary"/>
|
||||
</div>
|
||||
<div>
|
||||
<div style="padding-bottom:8px;">{{ $t('text-color') }}:</div>
|
||||
<color-picker v-model="myThemeText"/>
|
||||
</div>
|
||||
<ui-button @click="preview()"><fa icon="eye"/> {{ $t('preview-created-theme') }}</ui-button>
|
||||
<ui-button primary @click="gen()"><fa :icon="['far', 'save']"/> {{ $t('save-created-theme') }}</ui-button>
|
||||
</details>
|
||||
<a href="https://assets.msky.cafe/theme/list" target="_blank">{{ $t('find-more-theme') }}</a>
|
||||
|
||||
<details>
|
||||
<summary><fa icon="download"/> {{ $t('install-a-theme') }}</summary>
|
||||
<ui-button @click="import_()"><fa icon="file-import"/> {{ $t('import') }}</ui-button>
|
||||
<input ref="file" type="file" accept=".misskeytheme" style="display:none;" @change="onUpdateImportFile"/>
|
||||
<p>{{ $t('import-by-code') }}:</p>
|
||||
<ui-textarea v-model="installThemeCode">
|
||||
<span>{{ $t('theme-code') }}</span>
|
||||
</ui-textarea>
|
||||
<ui-button @click="() => install(this.installThemeCode)"><fa icon="check"/> {{ $t('install') }}</ui-button>
|
||||
</details>
|
||||
<details class="creator">
|
||||
<summary><fa icon="palette"/> {{ $t('create-a-theme') }}</summary>
|
||||
<div>
|
||||
<span>{{ $t('base-theme') }}:</span>
|
||||
<ui-radio v-model="myThemeBase" value="light">{{ $t('base-theme-light') }}</ui-radio>
|
||||
<ui-radio v-model="myThemeBase" value="dark">{{ $t('base-theme-dark') }}</ui-radio>
|
||||
</div>
|
||||
<div>
|
||||
<ui-input v-model="myThemeName">
|
||||
<span>{{ $t('theme-name') }}</span>
|
||||
</ui-input>
|
||||
<ui-textarea v-model="myThemeDesc">
|
||||
<span>{{ $t('desc') }}</span>
|
||||
</ui-textarea>
|
||||
</div>
|
||||
<div>
|
||||
<div style="padding-bottom:8px;">{{ $t('primary-color') }}:</div>
|
||||
<color-picker v-model="myThemePrimary"/>
|
||||
</div>
|
||||
<div>
|
||||
<div style="padding-bottom:8px;">{{ $t('secondary-color') }}:</div>
|
||||
<color-picker v-model="myThemeSecondary"/>
|
||||
</div>
|
||||
<div>
|
||||
<div style="padding-bottom:8px;">{{ $t('text-color') }}:</div>
|
||||
<color-picker v-model="myThemeText"/>
|
||||
</div>
|
||||
<ui-button @click="preview()"><fa icon="eye"/> {{ $t('preview-created-theme') }}</ui-button>
|
||||
<ui-button primary @click="gen()"><fa :icon="['far', 'save']"/> {{ $t('save-created-theme') }}</ui-button>
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><fa icon="folder-open"/> {{ $t('manage-themes') }}</summary>
|
||||
<ui-select v-model="selectedThemeId" :placeholder="$t('select-theme')">
|
||||
<optgroup :label="$t('builtin-themes')">
|
||||
<option v-for="x in builtinThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
<optgroup :label="$t('my-themes')">
|
||||
<option v-for="x in installedThemes.filter(t => t.author == this.$store.state.i.username)" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
<optgroup :label="$t('installed-themes')">
|
||||
<option v-for="x in installedThemes.filter(t => t.author != this.$store.state.i.username)" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
</ui-select>
|
||||
<template v-if="selectedTheme">
|
||||
<ui-input readonly :value="selectedTheme.author">
|
||||
<span>{{ $t('author') }}</span>
|
||||
</ui-input>
|
||||
<ui-textarea v-if="selectedTheme.desc" readonly :value="selectedTheme.desc">
|
||||
<span>{{ $t('desc') }}</span>
|
||||
</ui-textarea>
|
||||
<ui-textarea readonly :value="selectedThemeCode">
|
||||
<details>
|
||||
<summary><fa icon="download"/> {{ $t('install-a-theme') }}</summary>
|
||||
<ui-button @click="import_()"><fa icon="file-import"/> {{ $t('import') }}</ui-button>
|
||||
<input ref="file" type="file" accept=".misskeytheme" style="display:none;" @change="onUpdateImportFile"/>
|
||||
<p>{{ $t('import-by-code') }}:</p>
|
||||
<ui-textarea v-model="installThemeCode">
|
||||
<span>{{ $t('theme-code') }}</span>
|
||||
</ui-textarea>
|
||||
<ui-button @click="export_()" link :download="`${selectedTheme.name}.misskeytheme`" ref="export"><fa icon="box"/> {{ $t('export') }}</ui-button>
|
||||
<ui-button @click="uninstall()" v-if="!builtinThemes.some(t => t.id == selectedTheme.id)"><fa :icon="['far', 'trash-alt']"/> {{ $t('uninstall') }}</ui-button>
|
||||
</template>
|
||||
</details>
|
||||
</div>
|
||||
<ui-button @click="() => install(this.installThemeCode)"><fa icon="check"/> {{ $t('install') }}</ui-button>
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><fa icon="folder-open"/> {{ $t('manage-themes') }}</summary>
|
||||
<ui-select v-model="selectedThemeId" :placeholder="$t('select-theme')">
|
||||
<optgroup :label="$t('builtin-themes')">
|
||||
<option v-for="x in builtinThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
<optgroup :label="$t('my-themes')">
|
||||
<option v-for="x in installedThemes.filter(t => t.author == this.$store.state.i.username)" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
<optgroup :label="$t('installed-themes')">
|
||||
<option v-for="x in installedThemes.filter(t => t.author != this.$store.state.i.username)" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
</ui-select>
|
||||
<template v-if="selectedTheme">
|
||||
<ui-input readonly :value="selectedTheme.author">
|
||||
<span>{{ $t('author') }}</span>
|
||||
</ui-input>
|
||||
<ui-textarea v-if="selectedTheme.desc" readonly :value="selectedTheme.desc">
|
||||
<span>{{ $t('desc') }}</span>
|
||||
</ui-textarea>
|
||||
<ui-textarea readonly tall :value="selectedThemeCode">
|
||||
<span>{{ $t('theme-code') }}</span>
|
||||
</ui-textarea>
|
||||
<ui-button @click="export_()" link :download="`${selectedTheme.name}.misskeytheme`" ref="export"><fa icon="box"/> {{ $t('export') }}</ui-button>
|
||||
<ui-button @click="uninstall()" v-if="!builtinThemes.some(t => t.id == selectedTheme.id)"><fa :icon="['far', 'trash-alt']"/> {{ $t('uninstall') }}</ui-button>
|
||||
</template>
|
||||
</details>
|
||||
</section>
|
||||
</ui-card>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
@@ -223,7 +228,7 @@ export default Vue.extend({
|
||||
try {
|
||||
theme = JSON5.parse(code);
|
||||
} catch (e) {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('invalid-theme')
|
||||
});
|
||||
@@ -236,7 +241,7 @@ export default Vue.extend({
|
||||
}
|
||||
|
||||
if (theme.id == null) {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('invalid-theme')
|
||||
});
|
||||
@@ -244,7 +249,7 @@ export default Vue.extend({
|
||||
}
|
||||
|
||||
if (this.$store.state.device.themes.some(t => t.id == theme.id)) {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'info',
|
||||
text: this.$t('already-installed')
|
||||
});
|
||||
@@ -256,7 +261,7 @@ export default Vue.extend({
|
||||
key: 'themes', value: themes
|
||||
});
|
||||
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('installed').replace('{}', theme.name)
|
||||
});
|
||||
@@ -269,7 +274,7 @@ export default Vue.extend({
|
||||
key: 'themes', value: themes
|
||||
});
|
||||
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'info',
|
||||
text: this.$t('uninstalled').replace('{}', theme.name)
|
||||
});
|
||||
@@ -306,7 +311,7 @@ export default Vue.extend({
|
||||
const theme = this.myTheme;
|
||||
|
||||
if (theme.name == null || theme.name.trim() == '') {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'warning',
|
||||
text: this.$t('theme-name-required')
|
||||
});
|
||||
@@ -320,7 +325,7 @@ export default Vue.extend({
|
||||
key: 'themes', value: themes
|
||||
});
|
||||
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('saved')
|
||||
});
|
||||
@@ -331,8 +336,13 @@ export default Vue.extend({
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.nicnklzforebnpfgasiypmpdaaglujqm
|
||||
> a
|
||||
display block
|
||||
margin-top -16px
|
||||
margin-bottom 16px
|
||||
|
||||
> details
|
||||
border-top solid 1px var(--faceDivider)
|
||||
border-top solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
> summary
|
||||
padding 16px 0
|
||||
@@ -343,5 +353,5 @@ export default Vue.extend({
|
||||
> .creator
|
||||
> div
|
||||
padding 16px 0
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
border-bottom solid var(--lineWidth) var(--faceDivider)
|
||||
</style>
|
||||
|
||||
@@ -33,14 +33,7 @@ export default Vue.extend({
|
||||
return typeof this.time == 'string' ? new Date(this.time) : this.time;
|
||||
},
|
||||
absolute(): string {
|
||||
const time = this._time;
|
||||
return (
|
||||
time.getFullYear() + '年' +
|
||||
(time.getMonth() + 1) + '月' +
|
||||
time.getDate() + '日' +
|
||||
' ' +
|
||||
time.getHours() + '時' +
|
||||
time.getMinutes() + '分');
|
||||
return this._time.toLocaleString();
|
||||
},
|
||||
relative(): string {
|
||||
const time = this._time;
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
<template>
|
||||
<div class="mk-twitter-setting">
|
||||
<p>{{ $t('description') }}</p>
|
||||
<p class="account" v-if="$store.state.i.twitter" :title="`Twitter ID: ${$store.state.i.twitter.userId}`">{{ $t('connected-to') }}: <a :href="`https://twitter.com/${$store.state.i.twitter.screenName}`" target="_blank">@{{ $store.state.i.twitter.screenName }}</a></p>
|
||||
<p>
|
||||
<a :href="`${apiUrl}/connect/twitter`" target="_blank" @click.prevent="connect">{{ $store.state.i.twitter ? this.$t('reconnect') : this.$t('connect') }}</a>
|
||||
<span v-if="$store.state.i.twitter"> or </span>
|
||||
<a :href="`${apiUrl}/disconnect/twitter`" target="_blank" v-if="$store.state.i.twitter" @click.prevent="disconnect">{{ $t('disconnect') }}</a>
|
||||
</p>
|
||||
<p class="id" v-if="$store.state.i.twitter">Twitter ID: {{ $store.state.i.twitter.userId }}</p>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import { apiUrl } from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/twitter-setting.vue'),
|
||||
data() {
|
||||
return {
|
||||
form: null,
|
||||
apiUrl
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.$watch('$store.state.i', () => {
|
||||
if (this.$store.state.i.twitter) {
|
||||
if (this.form) this.form.close();
|
||||
}
|
||||
}, {
|
||||
deep: true
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
connect() {
|
||||
this.form = window.open(apiUrl + '/connect/twitter',
|
||||
'twitter_connect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
|
||||
disconnect() {
|
||||
window.open(apiUrl + '/disconnect/twitter',
|
||||
'twitter_disconnect_window',
|
||||
'height=570, width=520');
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.mk-twitter-setting
|
||||
.account
|
||||
border solid 1px #e1e8ed
|
||||
border-radius 4px
|
||||
padding 16px
|
||||
|
||||
a
|
||||
font-weight bold
|
||||
color inherit
|
||||
|
||||
.id
|
||||
color #8899a6
|
||||
</style>
|
||||
@@ -1,11 +1,15 @@
|
||||
<template>
|
||||
<component class="dmtdnykelhudezerjlfpbhgovrgnqqgr"
|
||||
:is="link ? 'a' : 'button'"
|
||||
:class="[styl, { inline, primary }]"
|
||||
:class="{ inline, primary, wait }"
|
||||
:type="type"
|
||||
@click="$emit('click')"
|
||||
@mousedown="onMousedown"
|
||||
>
|
||||
<slot></slot>
|
||||
<div ref="ripples" class="ripples"></div>
|
||||
<div class="content">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</component>
|
||||
</template>
|
||||
|
||||
@@ -44,11 +48,11 @@ export default Vue.extend({
|
||||
required: false,
|
||||
default: false
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
styl: 'fill'
|
||||
};
|
||||
wait: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
if (this.autofocus) {
|
||||
@@ -56,6 +60,47 @@ export default Vue.extend({
|
||||
this.$el.focus();
|
||||
});
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onMousedown(e: MouseEvent) {
|
||||
function distance(p, q) {
|
||||
const sqrt = Math.sqrt, pow = Math.pow;
|
||||
return sqrt(pow(p.x - q.x, 2) + pow(p.y - q.y, 2));
|
||||
}
|
||||
|
||||
function calcCircleScale(boxW, boxH, circleCenterX, circleCenterY) {
|
||||
const origin = {x: circleCenterX, y: circleCenterY};
|
||||
const dist1 = distance({x: 0, y: 0}, origin);
|
||||
const dist2 = distance({x: boxW, y: 0}, origin);
|
||||
const dist3 = distance({x: 0, y: boxH}, origin);
|
||||
const dist4 = distance({x: boxW, y: boxH }, origin);
|
||||
return Math.max(dist1, dist2, dist3, dist4) * 2;
|
||||
}
|
||||
|
||||
const rect = e.target.getBoundingClientRect();
|
||||
|
||||
const ripple = document.createElement('div');
|
||||
ripple.style.top = (e.clientY - rect.top - 1).toString() + 'px';
|
||||
ripple.style.left = (e.clientX - rect.left - 1).toString() + 'px';
|
||||
|
||||
this.$refs.ripples.appendChild(ripple);
|
||||
|
||||
const circleCenterX = e.clientX - rect.left;
|
||||
const circleCenterY = e.clientY - rect.top;
|
||||
|
||||
const scale = calcCircleScale(e.target.clientWidth, e.target.clientHeight, circleCenterX, circleCenterY);
|
||||
|
||||
setTimeout(() => {
|
||||
ripple.style.transform = 'scale(' + (scale / 2) + ')';
|
||||
}, 1);
|
||||
setTimeout(() => {
|
||||
ripple.style.transition = 'all 1s ease';
|
||||
ripple.style.opacity = '0';
|
||||
}, 1000);
|
||||
setTimeout(() => {
|
||||
if (this.$refs.ripples) this.$refs.ripples.removeChild(ripple);
|
||||
}, 2000);
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@@ -76,6 +121,24 @@ export default Vue.extend({
|
||||
box-shadow none
|
||||
text-decoration none
|
||||
user-select none
|
||||
color var(--text)
|
||||
background var(--buttonBg)
|
||||
|
||||
&:not(:disabled):hover
|
||||
background var(--buttonHoverBg)
|
||||
|
||||
&:not(:disabled):active
|
||||
background var(--buttonActiveBg)
|
||||
|
||||
&.primary
|
||||
color var(--primaryForeground)
|
||||
background var(--primary)
|
||||
|
||||
&:not(:disabled):hover
|
||||
background var(--primaryLighten5)
|
||||
|
||||
&:not(:disabled):active
|
||||
background var(--primaryDarken5)
|
||||
|
||||
*
|
||||
pointer-events none
|
||||
@@ -107,34 +170,50 @@ export default Vue.extend({
|
||||
&.primary
|
||||
font-weight bold
|
||||
|
||||
&.fill
|
||||
color var(--text)
|
||||
background var(--buttonBg)
|
||||
&.wait
|
||||
background linear-gradient(
|
||||
45deg,
|
||||
var(--primaryDarken10) 25%,
|
||||
var(--primary) 25%,
|
||||
var(--primary) 50%,
|
||||
var(--primaryDarken10) 50%,
|
||||
var(--primaryDarken10) 75%,
|
||||
var(--primary) 75%,
|
||||
var(--primary)
|
||||
)
|
||||
background-size 32px 32px
|
||||
animation stripe-bg 1.5s linear infinite
|
||||
opacity 0.7
|
||||
cursor wait
|
||||
|
||||
&:not(:disabled):hover
|
||||
background var(--buttonHoverBg)
|
||||
@keyframes stripe-bg
|
||||
from {background-position: 0 0;}
|
||||
to {background-position: -64px 32px;}
|
||||
|
||||
&:not(:disabled):active
|
||||
background var(--buttonActiveBg)
|
||||
> .ripples
|
||||
position absolute
|
||||
z-index 0
|
||||
top 0
|
||||
left 0
|
||||
width 100%
|
||||
height 100%
|
||||
border-radius 6px
|
||||
overflow hidden
|
||||
|
||||
&.primary
|
||||
color var(--primaryForeground)
|
||||
background var(--primary)
|
||||
>>> div
|
||||
position absolute
|
||||
width 2px
|
||||
height 2px
|
||||
border-radius 100%
|
||||
background rgba(0, 0, 0, 0.1)
|
||||
opacity 1
|
||||
transform scale(1)
|
||||
transition all 0.5s cubic-bezier(0, .5, .5, 1)
|
||||
|
||||
&:not(:disabled):hover
|
||||
background var(--primaryLighten5)
|
||||
&.primary > .ripples >>> div
|
||||
background rgba(0, 0, 0, 0.15)
|
||||
|
||||
&:not(:disabled):active
|
||||
background var(--primaryDarken5)
|
||||
|
||||
&:not(.fill)
|
||||
color var(--primary)
|
||||
background none
|
||||
|
||||
&:not(:disabled):hover
|
||||
color var(--primaryDarken5)
|
||||
|
||||
&:not(:disabled):active
|
||||
background var(--primaryAlpha03)
|
||||
> .content
|
||||
z-index 1
|
||||
|
||||
</style>
|
||||
|
||||
@@ -41,7 +41,7 @@ export default Vue.extend({
|
||||
|
||||
> section
|
||||
padding 20px 16px
|
||||
border-top solid 1px var(--faceDivider)
|
||||
border-top solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
@media (min-width 500px)
|
||||
padding 32px
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user