Compare commits
749 Commits
l10n_devel
...
room
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b879f2f1e3 | ||
|
|
fb77eb4349 | ||
|
|
79ad7e274c | ||
|
|
4890673013 | ||
|
|
1f204f572f | ||
|
|
9976588025 | ||
|
|
414a28fb19 | ||
|
|
3605ffdafc | ||
|
|
179c9fc70a | ||
|
|
f3a7f10319 | ||
|
|
17333fd7e5 | ||
|
|
9027129b58 | ||
|
|
14f4d2c228 | ||
|
|
18b4210eef | ||
|
|
54c2c4dd53 | ||
|
|
42da479026 | ||
|
|
adc487ef78 | ||
|
|
b08b3a2500 | ||
|
|
4324b6def2 | ||
|
|
b73ac26612 | ||
|
|
21fe0f5e67 | ||
|
|
3ede04c563 | ||
|
|
b528ff9c59 | ||
|
|
b750d69065 | ||
|
|
0c4b36e2d1 | ||
|
|
a82ba0d775 | ||
|
|
b78e0168b0 | ||
|
|
5cb9474494 | ||
|
|
3be075d281 | ||
|
|
d7c94fbf86 | ||
|
|
c6d7aa7be8 | ||
|
|
d56c6dfe57 | ||
|
|
f9be5d8c47 | ||
|
|
ac023668a7 | ||
|
|
59c9b86842 | ||
|
|
c4adcde114 | ||
|
|
db1b5e9ce9 | ||
|
|
a1cb4b8304 | ||
|
|
fd04c5f2fc | ||
|
|
7be7465703 | ||
|
|
626ae675bc | ||
|
|
2a1cd5c197 | ||
|
|
a9dd5fd5bf | ||
|
|
beb5d1dec5 | ||
|
|
d451ce8c36 | ||
|
|
f0f78a11cb | ||
|
|
69dd2675fa | ||
|
|
eb7691e3ba | ||
|
|
db90e4ebc0 | ||
|
|
29491997ea | ||
|
|
015e6d1c81 | ||
|
|
49ee15dd9a | ||
|
|
e6b5758d54 | ||
|
|
210368d597 | ||
|
|
203f29afb9 | ||
|
|
fa0eac34c2 | ||
|
|
d4fa5cf7ca | ||
|
|
479e9af17e | ||
|
|
f03af71dc0 | ||
|
|
6d94f00ecf | ||
|
|
9e848f3135 | ||
|
|
b16b158372 | ||
|
|
39525c66c2 | ||
|
|
d3dc9bc86c | ||
|
|
444d862eac | ||
|
|
74e9851511 | ||
|
|
a8586fe224 | ||
|
|
d132fdfc04 | ||
|
|
3ba902c2b6 | ||
|
|
50f7c74259 | ||
|
|
9b7c908c68 | ||
|
|
e7290c0486 | ||
|
|
db22eddd1e | ||
|
|
a8cea0622d | ||
|
|
5bf1b5569f | ||
|
|
d1cb2c5bc7 | ||
|
|
a49697042a | ||
|
|
4656d93358 | ||
|
|
2e5a02a85a | ||
|
|
8421ec75da | ||
|
|
dcd2160294 | ||
|
|
3833469955 | ||
|
|
0adfbc8d51 | ||
|
|
a931079896 | ||
|
|
18c08f52f1 | ||
|
|
8975449538 | ||
|
|
4e149a642d | ||
|
|
09d133242d | ||
|
|
a8db20259b | ||
|
|
d1eda166de | ||
|
|
7df4b729e9 | ||
|
|
3ed6148f6a | ||
|
|
ebe5739ce3 | ||
|
|
9bc404a8f5 | ||
|
|
90ff3d79d1 | ||
|
|
6fb49ab88d | ||
|
|
722d09b1ae | ||
|
|
6d6ae6728c | ||
|
|
ce2e74f3ca | ||
|
|
b34e957c25 | ||
|
|
157b4673fd | ||
|
|
ac1a19e95c | ||
|
|
5639324077 | ||
|
|
a471fe16fa | ||
|
|
6cf90fd714 | ||
|
|
c7c785ad2a | ||
|
|
bde64b5b1f | ||
|
|
30f7727e33 | ||
|
|
5d36da17fe | ||
|
|
7bcda08339 | ||
|
|
a15575078f | ||
|
|
56d813a184 | ||
|
|
8f5c09daa1 | ||
|
|
c2d5a33400 | ||
|
|
6f3f4e7ef1 | ||
|
|
49f21d7423 | ||
|
|
92a6086e21 | ||
|
|
9d1c2d52d2 | ||
|
|
f97a6c6d55 | ||
|
|
0f69a284c6 | ||
|
|
1427d887dd | ||
|
|
a4c9aff8a9 | ||
|
|
5db8ccec74 | ||
|
|
70ebc0d32c | ||
|
|
d885627350 | ||
|
|
4a77db7866 | ||
|
|
e50d4fa8ab | ||
|
|
27578f2688 | ||
|
|
fc97ba41af | ||
|
|
a3610ae6c4 | ||
|
|
fc615daad3 | ||
|
|
0321edb1ac | ||
|
|
8593737886 | ||
|
|
35ad1d758e | ||
|
|
110e5daa6f | ||
|
|
5de191f01a | ||
|
|
80c2b1fa65 | ||
|
|
c8441da835 | ||
|
|
fa2b1d6096 | ||
|
|
18a4da4ad7 | ||
|
|
52e9395fab | ||
|
|
d05d7938a4 | ||
|
|
7846e8efb8 | ||
|
|
e09f832fad | ||
|
|
515f6d9790 | ||
|
|
657159da45 | ||
|
|
e88188cd6d | ||
|
|
dcb834ed41 | ||
|
|
5a7960d0a9 | ||
|
|
11e55d8fe8 | ||
|
|
836de1bb28 | ||
|
|
58e617af6d | ||
|
|
f44d566933 | ||
|
|
72fbc4bc9c | ||
|
|
746c16aecc | ||
|
|
7bef2cd8e0 | ||
|
|
aed73eb074 | ||
|
|
a756ca6ffb | ||
|
|
f19040888a | ||
|
|
634cdf5e1e | ||
|
|
c09d445215 | ||
|
|
1d71c0c6dd | ||
|
|
130a43f39a | ||
|
|
9c25c44a8a | ||
|
|
76ce6c84c0 | ||
|
|
24caff71e1 | ||
|
|
036b8ea320 | ||
|
|
f98394fc60 | ||
|
|
f52ac6351d | ||
|
|
eb1357026d | ||
|
|
1b5be37f9b | ||
|
|
42c659c580 | ||
|
|
ec32cad19f | ||
|
|
0910c47612 | ||
|
|
88e7303779 | ||
|
|
3a5532211b | ||
|
|
5b945278f9 | ||
|
|
0db2e5a42f | ||
|
|
8e1c5673b8 | ||
|
|
a763c396bd | ||
|
|
f5dae1d4c8 | ||
|
|
17697ba6ec | ||
|
|
a77987ab28 | ||
|
|
47d9e92776 | ||
|
|
af928ffe93 | ||
|
|
4adca586ed | ||
|
|
e703705d60 | ||
|
|
be434949a4 | ||
|
|
bbff43e9e6 | ||
|
|
5c28ee0536 | ||
|
|
7e41d17c6a | ||
|
|
1cd6d01fdd | ||
|
|
3263f4bcc0 | ||
|
|
58feedb53d | ||
|
|
e62c85a971 | ||
|
|
585d727297 | ||
|
|
abd6c85b41 | ||
|
|
9551a3d01a | ||
|
|
d281a81200 | ||
|
|
82741c2d61 | ||
|
|
b00880c21f | ||
|
|
df5d5d23cc | ||
|
|
35f6cac9f6 | ||
|
|
7ddcbf5e94 | ||
|
|
634bae3c49 | ||
|
|
0b50aa9d13 | ||
|
|
e594ad9c6f | ||
|
|
d105c707ec | ||
|
|
93f24c5b8f | ||
|
|
7c170a21e5 | ||
|
|
1de4440dbd | ||
|
|
e6ce36178c | ||
|
|
8a6e925297 | ||
|
|
eeda7e7002 | ||
|
|
abfa67965e | ||
|
|
2c6560cc71 | ||
|
|
4984146f6e | ||
|
|
c36dfc6643 | ||
|
|
9184f0d7b9 | ||
|
|
4c659c3129 | ||
|
|
10926e5525 | ||
|
|
8d3a5a6503 | ||
|
|
924c517bb5 | ||
|
|
54c339d89c | ||
|
|
ce98d4244b | ||
|
|
4e4b56699b | ||
|
|
fab7667b0a | ||
|
|
942e32f4de | ||
|
|
3897b044fe | ||
|
|
c47a0c33cf | ||
|
|
2b849685a1 | ||
|
|
bad29c7604 | ||
|
|
b7b24a2140 | ||
|
|
20d9a03bb3 | ||
|
|
09d58a3ecf | ||
|
|
94e8050455 | ||
|
|
2f039ce2e9 | ||
|
|
61fd35bc97 | ||
|
|
2d36ccf1b2 | ||
|
|
174221fdc4 | ||
|
|
08a0f03a45 | ||
|
|
de795a48e8 | ||
|
|
af8a0bdf12 | ||
|
|
b734ab3419 | ||
|
|
595e66c423 | ||
|
|
7b0e839661 | ||
|
|
6f79420fdc | ||
|
|
b41bad4188 | ||
|
|
2f34f1c6f1 | ||
|
|
7b80da7737 | ||
|
|
e65e3b4569 | ||
|
|
0ef489513a | ||
|
|
a92cae8e09 | ||
|
|
2619509d69 | ||
|
|
da8945dc23 | ||
|
|
64995bebc5 | ||
|
|
c2dde53c1c | ||
|
|
efaf7bdd95 | ||
|
|
3dcbfc0168 | ||
|
|
e96e88b1ce | ||
|
|
493a2eb50c | ||
|
|
fc4d769e1e | ||
|
|
0f0bc9b54f | ||
|
|
ead90471c4 | ||
|
|
461e083454 | ||
|
|
79fe0fbd05 | ||
|
|
db9d0090b7 | ||
|
|
1f81960640 | ||
|
|
5d389732d9 | ||
|
|
b300f9620c | ||
|
|
ddafd9e517 | ||
|
|
2b9f593e03 | ||
|
|
5f3f3d715a | ||
|
|
de62fa3b59 | ||
|
|
32cba5b979 | ||
|
|
ab90824b9c | ||
|
|
ebec026508 | ||
|
|
8ddb2cbe75 | ||
|
|
97439d7718 | ||
|
|
60a2cd9306 | ||
|
|
62be4a258e | ||
|
|
ae4a174de5 | ||
|
|
1e15503000 | ||
|
|
61ac82d297 | ||
|
|
f18b3467d9 | ||
|
|
dec440b6cc | ||
|
|
26ac4f7732 | ||
|
|
b7b3c07a96 | ||
|
|
2040827615 | ||
|
|
2b456fec47 | ||
|
|
b21ad59db3 | ||
|
|
f04799a4f5 | ||
|
|
28dec6b0a3 | ||
|
|
714bff0835 | ||
|
|
772608ae99 | ||
|
|
fe3b3704ba | ||
|
|
d6caef7ee7 | ||
|
|
83a15f74ef | ||
|
|
27addb49cf | ||
|
|
6aa741f8d4 | ||
|
|
e224bdf5e4 | ||
|
|
9fe2044f53 | ||
|
|
b1aef2d308 | ||
|
|
79a063f692 | ||
|
|
c3c36b06c2 | ||
|
|
358f0c0a6f | ||
|
|
6041db87e8 | ||
|
|
ff4af812b5 | ||
|
|
c2428ca3cc | ||
|
|
e402057d3b | ||
|
|
3811de2283 | ||
|
|
421d466921 | ||
|
|
a211d0df51 | ||
|
|
c0690c9b80 | ||
|
|
8b9164a8c3 | ||
|
|
5df01bae9a | ||
|
|
f8e093466d | ||
|
|
664ca528fe | ||
|
|
aaab1e7260 | ||
|
|
a85f05ca29 | ||
|
|
3253d30073 | ||
|
|
02d365e27b | ||
|
|
a4be9b2078 | ||
|
|
47cd092380 | ||
|
|
d1555d5423 | ||
|
|
acd9b94b49 | ||
|
|
4b135bccd8 | ||
|
|
109fdd2ff3 | ||
|
|
aa5275137e | ||
|
|
669286c1d8 | ||
|
|
623b4f087f | ||
|
|
02c6e1b876 | ||
|
|
6cca5706f7 | ||
|
|
ebdf627b19 | ||
|
|
ae463cde5e | ||
|
|
6350890e9f | ||
|
|
77fc803612 | ||
|
|
e87752a07c | ||
|
|
a7c8a3d6d1 | ||
|
|
2175a3a18f | ||
|
|
3d48146b92 | ||
|
|
4f9aded205 | ||
|
|
e634fb1456 | ||
|
|
2b0d0d4533 | ||
|
|
4ac9da7f1f | ||
|
|
08e0ecf99b | ||
|
|
007a2481ef | ||
|
|
61eea5799b | ||
|
|
1fe9117944 | ||
|
|
4a16a71fa2 | ||
|
|
85701fcb6d | ||
|
|
cd918817d9 | ||
|
|
24c0504cb0 | ||
|
|
750a48df62 | ||
|
|
ead79ab275 | ||
|
|
124079f80a | ||
|
|
ac2c6b93ce | ||
|
|
b0d4ab371b | ||
|
|
a3c3f7ba91 | ||
|
|
12e1b86b53 | ||
|
|
7fd9ac1cc8 | ||
|
|
da8a7abcde | ||
|
|
6275196101 | ||
|
|
7eb8723082 | ||
|
|
d730c26fcc | ||
|
|
56c2e1c989 | ||
|
|
77acce78dd | ||
|
|
db5f64b097 | ||
|
|
ddfd9f46f3 | ||
|
|
4254268f8d | ||
|
|
5104bafe95 | ||
|
|
c426f95bee | ||
|
|
c9ae842258 | ||
|
|
6a7e05d00a | ||
|
|
af5bdb4296 | ||
|
|
cf46a4af1e | ||
|
|
83daf43f49 | ||
|
|
3db0b8a1fd | ||
|
|
cf9349f29c | ||
|
|
7e0b5ff8be | ||
|
|
28030ea3fa | ||
|
|
357aeff407 | ||
|
|
2f80442b99 | ||
|
|
3bad686c71 | ||
|
|
240c055b45 | ||
|
|
02eb8cfe1c | ||
|
|
87e2a046b7 | ||
|
|
4ce42a02c1 | ||
|
|
f61b2504cc | ||
|
|
1b119c49a1 | ||
|
|
0ae3eb0721 | ||
|
|
205d2c3343 | ||
|
|
b6e269d140 | ||
|
|
b9335bc314 | ||
|
|
ae92f75345 | ||
|
|
2ff307fe42 | ||
|
|
60bdd30681 | ||
|
|
c877210828 | ||
|
|
e85d1c6139 | ||
|
|
2094e82a30 | ||
|
|
f86c5fb3b2 | ||
|
|
6b95d07930 | ||
|
|
886f64055d | ||
|
|
4740c76128 | ||
|
|
baad4ae929 | ||
|
|
e989c4b1a5 | ||
|
|
8f133d3fed | ||
|
|
f26ebef565 | ||
|
|
7f46bd4928 | ||
|
|
abe22da9ed | ||
|
|
ebc9a60237 | ||
|
|
272c267ea0 | ||
|
|
21e6ac6678 | ||
|
|
2685e254f1 | ||
|
|
7d5c2052eb | ||
|
|
e8d43032cc | ||
|
|
4ad5234325 | ||
|
|
6582087b2f | ||
|
|
dc689a8c22 | ||
|
|
fa8bdf55be | ||
|
|
87828dc0ad | ||
|
|
9fe161ec7c | ||
|
|
938dc5ce40 | ||
|
|
5049857e81 | ||
|
|
58cf1414fc | ||
|
|
6563eb9b8f | ||
|
|
69ac19d018 | ||
|
|
eeae06014a | ||
|
|
d808d20f8e | ||
|
|
d775fa6360 | ||
|
|
5f4914e6dc | ||
|
|
8427685f7b | ||
|
|
7dd05a3d60 | ||
|
|
55747bdb99 | ||
|
|
909c0ae156 | ||
|
|
4c0b78a1ac | ||
|
|
62a9795685 | ||
|
|
04ff23c44f | ||
|
|
ed119dfeb8 | ||
|
|
c341ad21db | ||
|
|
11119ab046 | ||
|
|
dc59fd4edb | ||
|
|
887f548985 | ||
|
|
a627b58e85 | ||
|
|
57fbebaea5 | ||
|
|
6386ebe18e | ||
|
|
60bf7c6b1f | ||
|
|
6fe0e97ac6 | ||
|
|
bf72fb0d9a | ||
|
|
85af12d35a | ||
|
|
7970fed6e1 | ||
|
|
03c0b48e1e | ||
|
|
45c851bb5b | ||
|
|
9b3424c5d3 | ||
|
|
9d9b47daca | ||
|
|
1d8f03e199 | ||
|
|
5e1c0d1064 | ||
|
|
a6b7150371 | ||
|
|
7701bca55b | ||
|
|
547da71743 | ||
|
|
25ed41ba64 | ||
|
|
5e4d128f68 | ||
|
|
8ec7da0cf4 | ||
|
|
970efb3440 | ||
|
|
58acbac7ef | ||
|
|
5736b43149 | ||
|
|
682c5417cb | ||
|
|
127600a5d4 | ||
|
|
61386f699e | ||
|
|
3283ec410a | ||
|
|
6fd8c8c908 | ||
|
|
5b6fa78748 | ||
|
|
64fd4b7c0a | ||
|
|
3356cf36d3 | ||
|
|
e2e4e83e6f | ||
|
|
8030e4f3fa | ||
|
|
a00d80e30c | ||
|
|
82373f24d9 | ||
|
|
fb0c089a16 | ||
|
|
c04c6502be | ||
|
|
6b4310c91d | ||
|
|
662de635aa | ||
|
|
af8d14a139 | ||
|
|
afd731797e | ||
|
|
d51d1191c5 | ||
|
|
f4a060b9a8 | ||
|
|
f6677aa02c | ||
|
|
0d966d8ded | ||
|
|
a54a8a10ad | ||
|
|
602c8d8be1 | ||
|
|
bdbbe83421 | ||
|
|
50575a272c | ||
|
|
3b80a96412 | ||
|
|
fa979f1fed | ||
|
|
38bf5fc0bf | ||
|
|
78911b24de | ||
|
|
83b5305671 | ||
|
|
07d57b0edd | ||
|
|
bd0e6f3268 | ||
|
|
0c808aa23d | ||
|
|
68eebb9d76 | ||
|
|
b318cff137 | ||
|
|
614e8a7254 | ||
|
|
93f62f6054 | ||
|
|
ca49618fdb | ||
|
|
fdd360f490 | ||
|
|
df5df25c80 | ||
|
|
c454b8922b | ||
|
|
ba4d495b42 | ||
|
|
4ed1d56f03 | ||
|
|
49823f9ec3 | ||
|
|
85dea8b49d | ||
|
|
f2be8a2169 | ||
|
|
7121cd1ea9 | ||
|
|
e79532e50a | ||
|
|
17f97bab7b | ||
|
|
f13ada97a7 | ||
|
|
0db754bdd6 | ||
|
|
74dfbb7a74 | ||
|
|
2a583509ab | ||
|
|
4813ea5afc | ||
|
|
65b6821d4f | ||
|
|
8a165321b7 | ||
|
|
b89fc36cd0 | ||
|
|
f5ebbbca50 | ||
|
|
81414a18d3 | ||
|
|
6bf4feaef5 | ||
|
|
4efe4fb519 | ||
|
|
3873eb0cd7 | ||
|
|
df092dd120 | ||
|
|
654c2c5b05 | ||
|
|
f367bc37f8 | ||
|
|
e8d8242c09 | ||
|
|
2ecaccedab | ||
|
|
4a7614f903 | ||
|
|
d3da77c307 | ||
|
|
1c610ce825 | ||
|
|
d5a5b04468 | ||
|
|
b91409f5c6 | ||
|
|
74c67b843e | ||
|
|
913e35442c | ||
|
|
7a939dc5b3 | ||
|
|
71179b8b24 | ||
|
|
c5a9c08814 | ||
|
|
ea8df304c9 | ||
|
|
a01bbf828d | ||
|
|
d2807e974c | ||
|
|
d6f41f9c51 | ||
|
|
b2f2e9e75d | ||
|
|
ee55a0a6cc | ||
|
|
df184c8fdf | ||
|
|
4dd3bfc208 | ||
|
|
c677dd6566 | ||
|
|
de53f475c5 | ||
|
|
b2eed6b82a | ||
|
|
6eefe6899c | ||
|
|
8619d0156e | ||
|
|
9bc0d7b361 | ||
|
|
9ffd8d777e | ||
|
|
c558f93a0e | ||
|
|
5458ee016d | ||
|
|
5886260e0b | ||
|
|
42c7a483a4 | ||
|
|
7f5858a66f | ||
|
|
4965429069 | ||
|
|
58ec8af8cd | ||
|
|
1af8584aca | ||
|
|
564098a631 | ||
|
|
6fceb31c44 | ||
|
|
2a1a27f8c7 | ||
|
|
0e5c8496ce | ||
|
|
7ff95b8f8a | ||
|
|
295c91c245 | ||
|
|
7322697707 | ||
|
|
ed4e3a51fd | ||
|
|
bdc34305be | ||
|
|
354504b534 | ||
|
|
f311105b54 | ||
|
|
2984b0000b | ||
|
|
98aadf8dcc | ||
|
|
1d3ddd279b | ||
|
|
349ee141bb | ||
|
|
9070159db7 | ||
|
|
0a4b81b0cc | ||
|
|
2de50f893f | ||
|
|
0157dd6b41 | ||
|
|
208c300460 | ||
|
|
46791a3bf2 | ||
|
|
16b54e9615 | ||
|
|
78b689f41c | ||
|
|
7b04d5d434 | ||
|
|
c22345e3e0 | ||
|
|
a90c179998 | ||
|
|
8eebeab692 | ||
|
|
66e0eeedfb | ||
|
|
3874f7abe9 | ||
|
|
98f74b0c7a | ||
|
|
dbffa5520c | ||
|
|
e336cbad62 | ||
|
|
2fab946b7a | ||
|
|
239df4694c | ||
|
|
1c9a324f3a | ||
|
|
dbdb7ec324 | ||
|
|
d43b3be6f0 | ||
|
|
34b46baaea | ||
|
|
dc8dda3aac | ||
|
|
1b2717e256 | ||
|
|
9d723aaaa6 | ||
|
|
78bfcd71af | ||
|
|
5175a1e193 | ||
|
|
2438447ad3 | ||
|
|
01385575fd | ||
|
|
3f0c4b0577 | ||
|
|
36438e85d1 | ||
|
|
545009078a | ||
|
|
5910ec68e3 | ||
|
|
3e7166bd2c | ||
|
|
dbfd1a751c | ||
|
|
dda26f7f48 | ||
|
|
54b30d1138 | ||
|
|
d8dc66781f | ||
|
|
4d37ada54d | ||
|
|
a8456a45ab | ||
|
|
08667b4d35 | ||
|
|
03f20814c9 | ||
|
|
2672ae4463 | ||
|
|
de4c1b3b66 | ||
|
|
ec82773ff7 | ||
|
|
cdb8d86fbf | ||
|
|
20dc48f221 | ||
|
|
0729e209c5 | ||
|
|
c5eaf0f7af | ||
|
|
dcae3ccaaa | ||
|
|
fcc36759f7 | ||
|
|
689c24c776 | ||
|
|
055121d698 | ||
|
|
402dd538bf | ||
|
|
8bdf773a2b | ||
|
|
460f79d5cf | ||
|
|
998f85b260 | ||
|
|
a0356d8d4d | ||
|
|
d68655f5c2 | ||
|
|
bba7076eca | ||
|
|
aae03a914d | ||
|
|
cdc9b47b78 | ||
|
|
41d40f53cf | ||
|
|
17a3bdb5eb | ||
|
|
dadc5295fa | ||
|
|
679c75006a | ||
|
|
cd9612e664 | ||
|
|
d01b3036d6 | ||
|
|
376bb328df | ||
|
|
6a08231591 | ||
|
|
411c4ef3ae | ||
|
|
6f32e09db5 | ||
|
|
86f6498ddd | ||
|
|
5619cbb0da | ||
|
|
9475e6151f | ||
|
|
af560802b3 | ||
|
|
3375220aee | ||
|
|
ce7af6a308 | ||
|
|
d446e00964 | ||
|
|
90fa65c96e | ||
|
|
3717962757 | ||
|
|
8bd2003a38 | ||
|
|
07909ab228 | ||
|
|
503a02ac42 | ||
|
|
8a0ba3a18a | ||
|
|
7b7767942f | ||
|
|
8c28c7c253 | ||
|
|
0d8a6e8136 | ||
|
|
6a4a09c8cf | ||
|
|
06adb3e045 | ||
|
|
c12f330432 | ||
|
|
a45611171a | ||
|
|
f58de15d45 | ||
|
|
aa6c9be133 | ||
|
|
2841f67166 | ||
|
|
b1bb07542a | ||
|
|
eb0544e083 | ||
|
|
d490891acc | ||
|
|
4da92509cb | ||
|
|
f85223c064 | ||
|
|
0397fccdb3 | ||
|
|
c93758b554 | ||
|
|
be67e75ef9 | ||
|
|
d8d4b230b0 | ||
|
|
0996c2d9b2 | ||
|
|
0bcc5a3695 | ||
|
|
e70743bf40 | ||
|
|
9ecb3d6a5a | ||
|
|
9f0fbb8531 | ||
|
|
52a1b30503 | ||
|
|
1dec481a7e | ||
|
|
ad48f43524 | ||
|
|
7efa04d561 | ||
|
|
bf7f771760 | ||
|
|
3acf6db835 | ||
|
|
aafcffd1ad | ||
|
|
82f68f1e93 | ||
|
|
3a02ae8b28 | ||
|
|
3022313fac | ||
|
|
22d5c27ca7 | ||
|
|
8665923337 | ||
|
|
efd101d0a0 | ||
|
|
36f17a156f | ||
|
|
2e84d2864c | ||
|
|
909f78b33c | ||
|
|
cb6c790d6c | ||
|
|
b790608f52 | ||
|
|
13e3bdc90b | ||
|
|
2a1a03ef9d | ||
|
|
fb25331661 | ||
|
|
51d2b0d6a5 | ||
|
|
de1a3e3765 | ||
|
|
68d28eb4ac | ||
|
|
ad150f4718 | ||
|
|
91e3249b23 | ||
|
|
24a7131b0b | ||
|
|
a0e318b43f | ||
|
|
e41e700f2d | ||
|
|
6c64e75412 | ||
|
|
0c5c0ce67e | ||
|
|
6ac091096b | ||
|
|
b05010bdc4 | ||
|
|
d033704f12 | ||
|
|
367119a5a2 | ||
|
|
d15c971125 | ||
|
|
4d532199b4 | ||
|
|
cd15906c29 | ||
|
|
4ee5c73bca | ||
|
|
cb1d9c38df | ||
|
|
bce3411cef | ||
|
|
a721a94902 | ||
|
|
3173290abb | ||
|
|
491b40ed80 | ||
|
|
ab1362264a | ||
|
|
09993a8ac8 | ||
|
|
8619367ac0 | ||
|
|
148c853000 | ||
|
|
14efbe6584 | ||
|
|
9f054bb97b | ||
|
|
6f07445185 | ||
|
|
80b5c6cd35 | ||
|
|
7ab225662c | ||
|
|
85dc9c738b | ||
|
|
a09bf963f4 | ||
|
|
242fd56aec | ||
|
|
a42fdee480 |
3
.gitignore
vendored
@@ -81,3 +81,6 @@ vite.config.local-dev.ts.timestamp-*
|
||||
|
||||
# VSCode addon
|
||||
.favorites.json
|
||||
|
||||
# Affinity
|
||||
*.af~lock~
|
||||
|
||||
15
CHANGELOG.md
@@ -1,3 +1,18 @@
|
||||
## Unreleased
|
||||
|
||||
### General
|
||||
-
|
||||
|
||||
### Client
|
||||
- Enhance: テーマのプレビュー時、リロードせずにもとのテーマに戻せるように
|
||||
- Fix: テーマエディター使用時に、最初の変更のみ適用される問題を修正
|
||||
- Fix: テーマのプレビュー時、既存のテーマとIDが被っている場合にプレビューできない問題を修正
|
||||
- Fix: テーマのインストールエラーの表示を改善
|
||||
|
||||
### Server
|
||||
-
|
||||
|
||||
|
||||
## 2026.5.1
|
||||
|
||||
### General
|
||||
|
||||
@@ -1012,7 +1012,6 @@ inMinutes: "د"
|
||||
inDays: "ي"
|
||||
widgets: "التطبيقات المُصغّرة"
|
||||
presets: "إعدادات مسبقة"
|
||||
previewingThemeRestore: "استرجاع"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "اسم الملف"
|
||||
|
||||
@@ -1409,8 +1409,6 @@ presets: "Predefinit"
|
||||
zeroPadding: "Sense omplir"
|
||||
nothingToConfigure: "No hi ha res a configurar"
|
||||
viewRenotedChannel: "Mirar el canal d'impulsos "
|
||||
previewingTheme: "Previsualització del tema"
|
||||
previewingThemeRestore: "Restaurar"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
caption: "Títol de l'arxiu"
|
||||
@@ -2100,7 +2098,6 @@ _role:
|
||||
canSearchNotes: "Pot cercar notes"
|
||||
canSearchUsers: "Pot cercar usuaris"
|
||||
canUseTranslator: "Pot fer servir el traductor"
|
||||
canCreateChannel: "Previsualitzant el tema"
|
||||
avatarDecorationLimit: "Nombre màxim de decoracions que es poden aplicar els avatars"
|
||||
canImportAntennas: "Autoritza la importació d'antenes "
|
||||
canImportBlocking: "Autoritza la importació de bloquejats"
|
||||
|
||||
@@ -1134,7 +1134,6 @@ inMinutes: "Minut"
|
||||
inDays: "Dnů"
|
||||
widgets: "Widgety"
|
||||
presets: "Předvolba"
|
||||
previewingThemeRestore: "Obnovit"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Název souboru"
|
||||
|
||||
@@ -1408,7 +1408,6 @@ frame: "Rahmen"
|
||||
presets: "Vorlage"
|
||||
zeroPadding: "Nullauffüllung"
|
||||
nothingToConfigure: "Es sind keine Einstellungen verfügbar"
|
||||
previewingThemeRestore: "Wiederherstellen"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
caption: "Dateibeschriftung"
|
||||
|
||||
@@ -1409,7 +1409,6 @@ presets: "Preset"
|
||||
zeroPadding: "Zero padding"
|
||||
nothingToConfigure: "No configurable options available"
|
||||
viewRenotedChannel: "Show renoted channel"
|
||||
previewingThemeRestore: "Restore"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
caption: "File caption"
|
||||
|
||||
@@ -987,7 +987,7 @@ requireAdminForView: "Necesitas iniciar sesión como administrador para ver esto
|
||||
isSystemAccount: "Cuenta creada y operada automáticamente por el sistema"
|
||||
typeToConfirm: "Ingrese {x} para confirmar"
|
||||
deleteAccount: "Borrar cuenta"
|
||||
document: "Guía de usuario"
|
||||
document: "Documento"
|
||||
numberOfPageCache: "Cantidad de páginas cacheadas"
|
||||
numberOfPageCacheDescription: "Al aumentar el número mejora la conveniencia pero también puede aumentar la carga y la memoria a usarse"
|
||||
logoutConfirm: "¿Cerrar sesión?"
|
||||
@@ -1238,7 +1238,7 @@ sourceCodeIsNotYetProvided: "El código fuente aún no está disponible. Contact
|
||||
repositoryUrl: "URL del repositorio"
|
||||
repositoryUrlDescription: "Si estás usando Misskey tal cual (sin cambios en el código fuente), entra en https://github.com/misskey-dev/misskey"
|
||||
repositoryUrlOrTarballRequired: "Si no has publicado un repositorio aún, deberás publicar un tarball en su lugar. Mira el archivo .config/example.yml para más información."
|
||||
feedback: "Enviar sugerencias (Feedback)"
|
||||
feedback: "Comentarios"
|
||||
feedbackUrl: "URL de comentarios"
|
||||
impressum: "Impressum"
|
||||
impressumUrl: "Impressum URL"
|
||||
@@ -1409,8 +1409,6 @@ presets: "Predefinido"
|
||||
zeroPadding: "Relleno cero"
|
||||
nothingToConfigure: "No hay nada que configurar"
|
||||
viewRenotedChannel: "Ver el canal al que te has suscrito"
|
||||
previewingTheme: "Vista previa del tema"
|
||||
previewingThemeRestore: "Regresar"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
caption: "Título del archivo"
|
||||
@@ -2100,7 +2098,6 @@ _role:
|
||||
canSearchNotes: "Uso de la búsqueda de notas"
|
||||
canSearchUsers: "Uso de la búsqueda de usuarios"
|
||||
canUseTranslator: "Uso de traductor"
|
||||
canCreateChannel: "Puede crear canales"
|
||||
avatarDecorationLimit: "Número máximo de decoraciones de avatar"
|
||||
canImportAntennas: "Permitir la importación de antenas"
|
||||
canImportBlocking: "Permitir la importación de bloqueos"
|
||||
@@ -2218,7 +2215,7 @@ _registry:
|
||||
domain: "Dominio"
|
||||
createKey: "Crear una clave"
|
||||
_aboutMisskey:
|
||||
about: "Misskey es un software de código abierto, desarrollado por syuilo desde 2014"
|
||||
about: "Misskey es un software de código abierto, desarrollado por syuilo desde el 2014"
|
||||
contributors: "Principales colaboradores"
|
||||
allContributors: "Todos los colaboradores"
|
||||
source: "Código fuente"
|
||||
|
||||
@@ -1285,7 +1285,6 @@ inMinutes: "min"
|
||||
inDays: "j"
|
||||
widgets: "Widgets"
|
||||
presets: "Préréglage"
|
||||
previewingThemeRestore: "Restaurer"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Nom du fichier"
|
||||
|
||||
@@ -1291,7 +1291,6 @@ inMinutes: "menit"
|
||||
inDays: "hari"
|
||||
widgets: "Widget"
|
||||
presets: "Prasetel"
|
||||
previewingThemeRestore: "Kembalikan"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Nama berkas"
|
||||
|
||||
@@ -1409,8 +1409,6 @@ presets: "Preimpostato"
|
||||
zeroPadding: "Al vivo"
|
||||
nothingToConfigure: "Niente da configurare"
|
||||
viewRenotedChannel: "Visualizza il canale del Rinota"
|
||||
previewingTheme: "Anteprima del Tema"
|
||||
previewingThemeRestore: "Ripristina"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
caption: "Didascalia dell'immagine"
|
||||
@@ -2100,7 +2098,6 @@ _role:
|
||||
canSearchNotes: "Ricercare nelle Note"
|
||||
canSearchUsers: "Può cercare profili"
|
||||
canUseTranslator: "Tradurre le Note"
|
||||
canCreateChannel: "Può creare canali"
|
||||
avatarDecorationLimit: "Numero massimo di decorazioni foto profilo installabili"
|
||||
canImportAntennas: "Può importare Antenne"
|
||||
canImportBlocking: "Può importare Blocchi"
|
||||
|
||||
@@ -1409,6 +1409,8 @@ presets: "プリセット"
|
||||
zeroPadding: "ゼロ埋め"
|
||||
nothingToConfigure: "設定項目はありません"
|
||||
viewRenotedChannel: "リノート先のチャンネルを見る"
|
||||
previewingTheme: "テーマのプレビュー中"
|
||||
previewingThemeRestore: "元に戻す"
|
||||
|
||||
_imageEditing:
|
||||
_vars:
|
||||
@@ -3554,3 +3556,17 @@ _qr:
|
||||
scanFile: "端末の画像をスキャン"
|
||||
raw: "テキスト"
|
||||
mfm: "MFM"
|
||||
|
||||
_room:
|
||||
snapToGrid: "グリッドにスナップ"
|
||||
gridScale: "グリッドサイズ"
|
||||
thereAreUnsavedChanges: "未保存の変更があります"
|
||||
revertAllChangesConfirmation: "全ての変更を取り消し、部屋を最後に保存した状態まで戻しますか?"
|
||||
graphicsQuality: "グラフィックの品質"
|
||||
frameRate: "フレームレート"
|
||||
resolution: "解像度"
|
||||
yourDeviceNotSupported_title: "お使いのデバイスはMisskeyRoomをサポートしていません。"
|
||||
yourDeviceNotSupported_description: "MisskeyRoomを動作させるには、WebGPUをサポートするデバイスが必要です。"
|
||||
failedToInitialize: "初期化に失敗しました"
|
||||
crushed_description: "バグ、またはデバイスのリソース不足の可能性が考えられます。"
|
||||
antialiasing: "アンチエイリアス"
|
||||
|
||||
@@ -1355,7 +1355,6 @@ widgets: "ウィジェット"
|
||||
deviceInfoDescription: "なんか技術的なことで分からんこと聞くときは、下の情報も一緒に書いてもらえると、こっちも分かりやすいし、はよ直ると思います。"
|
||||
youAreAdmin: "あんた、管理者やで"
|
||||
presets: "プリセット"
|
||||
previewingThemeRestore: "元に戻す"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "ファイル名"
|
||||
|
||||
@@ -1409,8 +1409,6 @@ presets: "프리셋"
|
||||
zeroPadding: "0으로 채우기"
|
||||
nothingToConfigure: "설정 항목이 없습니다."
|
||||
viewRenotedChannel: "리노트된 채널 보기"
|
||||
previewingTheme: "테마 미리보기 중"
|
||||
previewingThemeRestore: "복구"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
caption: "파일 설명"
|
||||
|
||||
@@ -970,7 +970,6 @@ renotes: "Herdelen"
|
||||
followingOrFollower: "Gevolgd of volger"
|
||||
confirmShowRepliesAll: "Dit is een onomkeerbare operatie. Weet je zeker dat reacties op anderen van iedereen die je volgt, wil weergeven in je tijdlijn?"
|
||||
information: "Over"
|
||||
previewingThemeRestore: "Herstellen"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Bestandsnaam"
|
||||
|
||||
@@ -1044,7 +1044,6 @@ inMinutes: "minuta"
|
||||
inDays: "dzień"
|
||||
widgets: "Widżety"
|
||||
presets: "Konfiguracja"
|
||||
previewingThemeRestore: "Przywróć"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Nazwa pliku"
|
||||
|
||||
@@ -1391,7 +1391,6 @@ schedule: "Agendar"
|
||||
scheduled: "Agendado"
|
||||
widgets: "Widgets"
|
||||
presets: "Predefinições"
|
||||
previewingThemeRestore: "Restaurar"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Nome do Ficheiro"
|
||||
|
||||
@@ -1216,7 +1216,6 @@ surrender: "Anulează"
|
||||
copyPreferenceId: "Copiază ID-ul preferințelor"
|
||||
information: "Despre"
|
||||
presets: "Presetate"
|
||||
previewingThemeRestore: "Restabilește"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Nume fișier"
|
||||
|
||||
@@ -1350,7 +1350,6 @@ frame: "Рамки"
|
||||
presets: "Шаблоны"
|
||||
zeroPadding: "Без отступов"
|
||||
nothingToConfigure: "Нечего менять"
|
||||
previewingThemeRestore: "Восстановить"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
caption: "Описание файла"
|
||||
|
||||
@@ -916,7 +916,6 @@ information: "Informácie"
|
||||
inMinutes: "min"
|
||||
inDays: "dní"
|
||||
widgets: "Widgety"
|
||||
previewingThemeRestore: "Obnoviť"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Názov súboru"
|
||||
|
||||
@@ -559,7 +559,6 @@ tryAgain: "Försök igen senare"
|
||||
signinWithPasskey: "Logga in med nyckel"
|
||||
unknownWebAuthnKey: "Okänd nyckel"
|
||||
information: "Om"
|
||||
previewingThemeRestore: "Återställ"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Filnamn"
|
||||
|
||||
@@ -1409,7 +1409,6 @@ presets: "พรีเซ็ต"
|
||||
zeroPadding: "ห่างเป็น 0"
|
||||
nothingToConfigure: "ไม่มีอะไรให้ต้ังค่า"
|
||||
viewRenotedChannel: "แสดงช่องที่ถูกรีโน้ต"
|
||||
previewingThemeRestore: "เลิกทำ"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
caption: "แคปชั่นของไฟล์"
|
||||
|
||||
@@ -1409,7 +1409,6 @@ presets: "Ön ayar"
|
||||
zeroPadding: "Sıfır doldurma"
|
||||
nothingToConfigure: "Ayarlar seçeneği bulunmamaktadır."
|
||||
viewRenotedChannel: "Show renoted channel"
|
||||
previewingThemeRestore: "Geri yükle"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
caption: "Dosya başlığı"
|
||||
|
||||
@@ -922,7 +922,6 @@ information: "Інформація"
|
||||
inMinutes: "х"
|
||||
inDays: "д"
|
||||
widgets: "Віджети"
|
||||
previewingThemeRestore: "Відновити"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Ім'я файлу"
|
||||
|
||||
@@ -1226,7 +1226,6 @@ inMinutes: "phút"
|
||||
inDays: "ngày"
|
||||
widgets: "Tiện ích"
|
||||
presets: "Mẫu thiết lập"
|
||||
previewingThemeRestore: "Khôi phục"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Tên tập tin"
|
||||
|
||||
@@ -5,7 +5,7 @@ introMisskey: "欢迎!Misskey是一个开源的、去中心化的“微博客
|
||||
poweredByMisskeyDescription: "{name} 是开源平台 <b>Misskey</b> 的服务器之一。"
|
||||
monthAndDay: "{month}月 {day}日"
|
||||
search: "搜索"
|
||||
reset: "清空"
|
||||
reset: "重置"
|
||||
notifications: "通知"
|
||||
username: "用户名"
|
||||
password: "密码"
|
||||
@@ -13,7 +13,7 @@ initialPasswordForSetup: "初始化密码"
|
||||
initialPasswordIsIncorrect: "初始化密码不正确。"
|
||||
initialPasswordForSetupDescription: "如果是自己安装的 Misskey,请输入配置文件里设好的密码。\n如果使用的是 Misskey 的托管服务等,请输入服务商提供的密码。\n如果没有设置密码,请留空并继续。"
|
||||
forgotPassword: "忘记密码"
|
||||
fetchingAsApObject: "在联邦中查找中…"
|
||||
fetchingAsApObject: "在联邦宇宙查询中..."
|
||||
ok: "OK"
|
||||
gotIt: "好"
|
||||
cancel: "取消"
|
||||
@@ -81,11 +81,11 @@ import: "导入"
|
||||
export: "导出"
|
||||
files: "文件"
|
||||
download: "下载"
|
||||
driveFileDeleteConfirm: "确认删除文件 “{name}” 吗?使用此文件的帖子也将被删除。"
|
||||
driveFileDeleteConfirm: "要删除「{name}」文件吗?附加此文件的帖子也会被删除。"
|
||||
unfollowConfirm: "要取消对 {name} 的关注吗?"
|
||||
cancelFollowRequestConfirm: "要取消申请关注{name}吗?"
|
||||
rejectFollowRequestConfirm: "要拒绝{name}的关注申请吗?"
|
||||
exportRequested: "已请求导出,这可能需要一段时间,导出的文件将保存至网盘中。"
|
||||
exportRequested: "导出请求已提交,这可能需要花一些时间,导出的文件将保存到网盘中。"
|
||||
importRequested: "导入请求已提交,这可能需要花一点时间。"
|
||||
lists: "列表"
|
||||
noLists: "列表为空"
|
||||
@@ -102,7 +102,7 @@ retry: "重试"
|
||||
pageLoadError: "页面加载失败。"
|
||||
pageLoadErrorDescription: "这通常是由于网络或浏览器缓存的原因。请清除缓存或等待片刻后重试。"
|
||||
serverIsDead: "服务器未响应。 请稍后再试。"
|
||||
youShouldUpgradeClient: "请刷新并使用新版本客户端查看此页面。"
|
||||
youShouldUpgradeClient: "请重新加载并使用新版本的客户端查看此页面。"
|
||||
enterListName: "输入列表名称"
|
||||
privacy: "隐私"
|
||||
makeFollowManuallyApprove: "关注请求需要批准"
|
||||
@@ -124,7 +124,7 @@ inChannelRenote: "在频道内转发"
|
||||
inChannelQuote: "在频道内引用"
|
||||
renoteToChannel: "转帖至频道"
|
||||
renoteToOtherChannel: "转帖至其它频道"
|
||||
pinnedNote: "置顶的帖子"
|
||||
pinnedNote: "已置顶的帖子"
|
||||
pinned: "置顶"
|
||||
you: "您"
|
||||
clickToShow: "点击以显示"
|
||||
@@ -243,7 +243,7 @@ blockedInstancesDescription: "设定要屏蔽的服务器,以换行分隔。
|
||||
silencedInstances: "被静音的服务器"
|
||||
silencedInstancesDescription: "设置要静音的服务器,以换行分隔。被静音的服务器内所有的账户都被视为「静音」状态,且关注操作均需要被批准。已被屏蔽的实例不受影响。"
|
||||
mediaSilencedInstances: "已隐藏媒体文件的服务器"
|
||||
mediaSilencedInstancesDescription: "设置要隐藏媒体文件的服务器,以换行分隔。被设置的服务器内所有账号的文件均按照 “敏感内容” 处理,且将无法使用自定义表情符号。已被屏蔽的实例不受影响。"
|
||||
mediaSilencedInstancesDescription: "设置要隐藏媒体文件的服务器,以换行分隔。被设置的服务器内所有账号的文件均按照「敏感内容」处理,且将无法使用自定义表情符号。已被屏蔽的实例不受影响。"
|
||||
federationAllowedHosts: "允许联邦交互的服务器"
|
||||
federationAllowedHostsDescription: "设定允许联邦通信的服务器,以换行分隔。"
|
||||
muteAndBlock: "屏蔽用户/禁止用户与我互动"
|
||||
@@ -281,15 +281,15 @@ attachFile: "添加附件"
|
||||
more: "更多!"
|
||||
featured: "热门"
|
||||
usernameOrUserId: "用户名或用户 ID"
|
||||
noSuchUser: "未找到该用户"
|
||||
lookup: "查找用户"
|
||||
noSuchUser: "用户不存在"
|
||||
lookup: "查询"
|
||||
announcements: "公告"
|
||||
imageUrl: "图片 URL"
|
||||
remove: "删除"
|
||||
removed: "已删除"
|
||||
removeAreYouSure: "要删掉「{x}」吗?"
|
||||
deleteAreYouSure: "要删掉「{x}」吗?"
|
||||
resetAreYouSure: "确认要清空吗?"
|
||||
resetAreYouSure: "恢复默认设置?"
|
||||
areYouSure: "你确定吗?"
|
||||
saved: "已保存"
|
||||
upload: "本地上传"
|
||||
@@ -331,7 +331,7 @@ dark: "深色"
|
||||
lightThemes: "浅色主题"
|
||||
darkThemes: "深色主题"
|
||||
syncDeviceDarkMode: "将深色模式与设备设置同步"
|
||||
switchDarkModeManuallyWhenSyncEnabledConfirm: "“{x}” 已开启。要关闭同步并手动切换模式吗?"
|
||||
switchDarkModeManuallyWhenSyncEnabledConfirm: "「{x}」已开启。要关闭同步并手动切换模式吗?"
|
||||
drive: "网盘"
|
||||
fileName: "文件名称"
|
||||
selectFile: "选择文件"
|
||||
@@ -364,9 +364,9 @@ banner: "横幅"
|
||||
displayOfSensitiveMedia: "显示敏感媒体"
|
||||
whenServerDisconnected: "与服务器连接中断时"
|
||||
disconnectedFromServer: "已和服务器断开连接"
|
||||
reload: "刷新"
|
||||
reload: "重新加载"
|
||||
doNothing: "关闭"
|
||||
reloadConfirm: "确定要刷新吗?"
|
||||
reloadConfirm: "确定要重新加载吗?"
|
||||
watch: "关注"
|
||||
unwatch: "取消关注"
|
||||
accept: "允许"
|
||||
@@ -399,11 +399,11 @@ bannerUrl: "横幅 URL"
|
||||
backgroundImageUrl: "背景图片的链接"
|
||||
basicInfo: "基本信息"
|
||||
pinnedUsers: "置顶用户"
|
||||
pinnedUsersDescription: "在 “发现” 页面中使用换行标记要置顶的用户。"
|
||||
pinnedUsersDescription: "在「发现」页面中使用换行标记想要置顶的用户。"
|
||||
pinnedPages: "固定页面"
|
||||
pinnedPagesDescription: "输入您要固定到服务器首页的页面路径,以换行符分隔。"
|
||||
pinnedClipId: "置顶的便签 ID"
|
||||
pinnedNotes: "置顶的帖子"
|
||||
pinnedNotes: "已置顶的帖子"
|
||||
hcaptcha: "hCaptcha"
|
||||
enableHcaptcha: "启用 hCaptcha"
|
||||
hcaptchaSiteKey: "网站密钥"
|
||||
@@ -431,12 +431,12 @@ antennaExcludeKeywords: "排除关键字"
|
||||
antennaExcludeBots: "排除机器人账户"
|
||||
antennaKeywordsDescription: "AND 条件用空格分隔,OR 条件用换行符分隔。"
|
||||
notifyAntenna: "开启通知"
|
||||
withFileAntenna: "仅包含附件的帖子"
|
||||
withFileAntenna: "仅带有附件的帖子"
|
||||
excludeNotesInSensitiveChannel: "排除敏感频道的帖子"
|
||||
enableServiceworker: "启用 ServiceWorker"
|
||||
antennaUsersDescription: "指定用户名,用换行符进行分隔"
|
||||
caseSensitive: "区分大小写"
|
||||
withReplies: "包含回复"
|
||||
withReplies: "包括回复"
|
||||
connectedTo: "您的账号已连到接以下第三方账号"
|
||||
notesAndReplies: "帖子与回复"
|
||||
withFiles: "附件"
|
||||
@@ -703,7 +703,7 @@ regexpError: "正则表达式错误"
|
||||
regexpErrorDescription: "{tab} 折叠关键词的第 {line} 行的正则表达式有错误:"
|
||||
instanceMute: "已隐藏的服务器"
|
||||
userSaysSomething: "{name} 说了什么,但是被屏蔽词过滤了"
|
||||
userSaysSomethingAbout: "{name} 说了关于 “{word}” 的什么"
|
||||
userSaysSomethingAbout: "{name} 说了关于「{word}」的什么"
|
||||
makeActive: "启用"
|
||||
display: "显示"
|
||||
copy: "复制"
|
||||
@@ -752,7 +752,7 @@ createNew: "新建"
|
||||
optional: "可选"
|
||||
createNewClip: "新建便签"
|
||||
unclip: "移除便签"
|
||||
confirmToUnclipAlreadyClippedNote: "本帖已包含在便签 “{name}” 里。您想要将本帖从该便签中移除吗?"
|
||||
confirmToUnclipAlreadyClippedNote: "本帖已包含在便签 \"{name}\" 里。您想要将本帖从该便签中移除吗?"
|
||||
public: "公开"
|
||||
private: "私密"
|
||||
i18nInfo: "Misskey 已经被志愿者们翻译成了各种语言。如果你也有兴趣,可以通过 {link} 帮助翻译。"
|
||||
@@ -775,7 +775,7 @@ driveFilesCount: "网盘的文件数"
|
||||
driveUsage: "网盘的空间用量"
|
||||
noCrawle: "拒绝搜索引擎的索引"
|
||||
noCrawleDescription: "拒绝搜索引擎收录(索引)您的个人资料,帖子,页面等。"
|
||||
lockedAccountInfo: "即使启用该功能,只要帖子可见范围不是 “仅关注者”,任何人都可以看到您的帖子。"
|
||||
lockedAccountInfo: "即使启用该功能,只要帖子可见范围不是「仅关注者」,任何人都可以看到您的帖子。"
|
||||
alwaysMarkSensitive: "默认将媒体文件标记为敏感内容"
|
||||
loadRawImages: "添加附件图像的缩略图时使用原始图像质量"
|
||||
disableShowingAnimatedImages: "不播放动态图像"
|
||||
@@ -807,7 +807,7 @@ needToRestartServerToApply: "需要重启服务才能应用更改。"
|
||||
showTitlebar: "显示标题栏"
|
||||
clearCache: "清除缓存"
|
||||
onlineUsersCount: "{n} 人在线"
|
||||
nUsers: "{n} 位用户"
|
||||
nUsers: "{n} 用户"
|
||||
nNotes: "{n}帖子"
|
||||
sendErrorReports: "发送错误报告"
|
||||
sendErrorReportsDescription: "启用后,如果出现问题,可以与 Misskey 共享详细的错误信息,从而帮助提高软件的质量。错误信息包括操作系统版本、浏览器类型、行为历史记录等。"
|
||||
@@ -1033,7 +1033,7 @@ windowMaximize: "最大化"
|
||||
windowMinimize: "最小化"
|
||||
windowRestore: "还原"
|
||||
caption: "描述文本"
|
||||
loggedInAsBot: "以机器人账户登录中"
|
||||
loggedInAsBot: "以 Bot 账户登录"
|
||||
tools: "工具"
|
||||
cannotLoad: "无法加载"
|
||||
numberOfProfileView: "个人资料展示次数"
|
||||
@@ -1069,8 +1069,8 @@ custom: "自定义"
|
||||
achievements: "成就"
|
||||
gotInvalidResponseError: "服务器无应答"
|
||||
gotInvalidResponseErrorDescription: "您的网络连接可能出现了问题, 或是远程服务器暂时不可用. 请稍后重试。"
|
||||
thisPostMayBeAnnoying: "该帖文可能会使他人感到不适。"
|
||||
thisPostMayBeAnnoyingHome: "发布到首页"
|
||||
thisPostMayBeAnnoying: "这个帖子可能会让其他人感到困扰。"
|
||||
thisPostMayBeAnnoyingHome: "发到首页"
|
||||
thisPostMayBeAnnoyingCancel: "取消"
|
||||
thisPostMayBeAnnoyingIgnore: "就这样发布"
|
||||
collapseRenotes: "折叠已经看过的转贴"
|
||||
@@ -1144,7 +1144,7 @@ horizontal: "横向"
|
||||
position: "位置"
|
||||
serverRules: "服务器规则"
|
||||
pleaseConfirmBelowBeforeSignup: "如果要在此服务器上注册,需要确认并同意以下内容。"
|
||||
pleaseAgreeAllToContinue: "必须全部勾选 “同意” 才能够继续。"
|
||||
pleaseAgreeAllToContinue: "必须全部勾选「同意」才能够继续。"
|
||||
continue: "继续"
|
||||
preservedUsernames: "保留的用户名"
|
||||
preservedUsernamesDescription: "列出需要保留的用户名,使用换行来作为分割。被指定的用户名在建立账户时无法使用,但由管理员所创建的账户不受该限制。此外,现有的账户也不会受到影响。"
|
||||
@@ -1162,7 +1162,7 @@ preventAiLearning: "拒绝用于训练生成式 AI"
|
||||
preventAiLearningDescription: "要求文章生成 AI 或图像生成 AI 不能够以发布的帖子和图像等内容作为学习对象。这是通过在 HTML 响应中包含 noai 标志来实现的,这不能完全阻止 AI 学习你的发布内容,并不是所有 AI 都会遵守这类请求。"
|
||||
options: "选项"
|
||||
specifyUser: "指定用户"
|
||||
lookupConfirm: "确定查找吗?"
|
||||
lookupConfirm: "确定查询?"
|
||||
openTagPageConfirm: "确定打开话题标签页面?"
|
||||
specifyHost: "指定主机名"
|
||||
failedToPreviewUrl: "无法预览"
|
||||
@@ -1200,7 +1200,7 @@ used: "已使用"
|
||||
expired: "已过期"
|
||||
doYouAgree: "你同意吗?"
|
||||
beSureToReadThisAsItIsImportant: "请好好阅读,这真的很重要。"
|
||||
iHaveReadXCarefullyAndAgree: "我已经仔细阅读并同意了 “{x}” 的内容。"
|
||||
iHaveReadXCarefullyAndAgree: "我已经仔细阅读并同意了「{x}」的内容。"
|
||||
dialog: "对话框"
|
||||
icon: "头像"
|
||||
forYou: "您的"
|
||||
@@ -1258,7 +1258,7 @@ refreshing: "刷新中"
|
||||
pullDownToRefresh: "下拉以刷新"
|
||||
useGroupedNotifications: "分组显示通知"
|
||||
emailVerificationFailedError: "确认电子邮件时出现错误。链接可能已过期。"
|
||||
cwNotationRequired: "如果启用了 “隐藏内容”,则需要进行注解。"
|
||||
cwNotationRequired: "在启用「隐藏内容」时必须输入注释"
|
||||
doReaction: "回应"
|
||||
code: "代码"
|
||||
reloadRequiredToApplySettings: "需要重新载入来使设置生效"
|
||||
@@ -1330,7 +1330,7 @@ federationDisabled: "此服务器已禁用联邦功能。无法与其它服务
|
||||
draft: "草稿"
|
||||
draftsAndScheduledNotes: "草稿和定时发送"
|
||||
confirmOnReact: "发送回应前需要确认"
|
||||
reactAreYouSure: "要用 “{emoji}” 进行回应吗?"
|
||||
reactAreYouSure: "要用「{emoji}」进行回应吗?"
|
||||
markAsSensitiveConfirm: "确定标记此媒体为敏感内容吗?"
|
||||
unmarkAsSensitiveConfirm: "确定取消标记为敏感内容吗?"
|
||||
preferences: "偏好设置"
|
||||
@@ -1381,7 +1381,7 @@ muteX: "隐藏{x}"
|
||||
unmuteX: "取消对{x}的隐藏"
|
||||
abort: "中止"
|
||||
tip: "提示和技巧"
|
||||
redisplayAllTips: "重新显示所有 “提示和技巧”"
|
||||
redisplayAllTips: "重新显示所有的提示和技巧"
|
||||
hideAllTips: "隐藏所有的 “提示与技巧”"
|
||||
defaultImageCompressionLevel: "默认图像压缩等级"
|
||||
defaultImageCompressionLevel_description: "较低的等级可以保持画质,但会增加文件大小。<br>较高的等级可以减少文件大小,但相对应的画质将会降低。"
|
||||
@@ -1409,8 +1409,6 @@ presets: "预设值"
|
||||
zeroPadding: "填充 0"
|
||||
nothingToConfigure: "没有项目"
|
||||
viewRenotedChannel: "查看转帖所属频道"
|
||||
previewingTheme: "正在预览主题"
|
||||
previewingThemeRestore: "还原"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
caption: "文件标题"
|
||||
@@ -1564,10 +1562,10 @@ _settings:
|
||||
_preferencesProfile:
|
||||
profileName: "配置文件名"
|
||||
profileNameDescription: "请指定用于识别此设备的名称"
|
||||
profileNameDescription2: "例如:“PC\"、“手机” 等"
|
||||
profileNameDescription2: "如「PC」、「手机」等"
|
||||
manageProfiles: "管理配置文件"
|
||||
shareSameProfileBetweenDevicesIsNotRecommended: "不建议在多个设备间共用同一个配置文件。"
|
||||
useSyncBetweenDevicesOptionIfYouWantToSyncSetting: "若想在多个设备间同步某些设置,请为每个设置打开 “多设备间同步” 选项。"
|
||||
useSyncBetweenDevicesOptionIfYouWantToSyncSetting: "若想在多个设备间同步某些设置,请为每个设置打开「多设备间同步」选项。"
|
||||
_preferencesBackup:
|
||||
autoBackup: "自动备份"
|
||||
restoreFromBackup: "从备份恢复"
|
||||
@@ -1593,11 +1591,11 @@ _accountSettings:
|
||||
notesOlderThanSpecifiedDateAndTime: "指定日期前的帖子"
|
||||
_abuseUserReport:
|
||||
forward: "转发"
|
||||
forwardDescription: "以匿名系统账户的身份,将举报转发至远程服务器。"
|
||||
forwardDescription: "目标是匿名系统账户,将把举报转发给远程服务器。"
|
||||
resolve: "解决"
|
||||
accept: "认可"
|
||||
reject: "驳回"
|
||||
resolveTutorial: "若处理的举报内容属实,请选择 “认可”,以标记该案件已得到妥善解决。\n若举报内容不属实,请选择 “驳回”,以标记该案件未得到妥善解决。"
|
||||
accept: "确认"
|
||||
reject: "拒绝"
|
||||
resolveTutorial: "如果认可举报并已解决,选择「确认」将案件以肯定的态度标记为已解决。\n如果不认可举报,选择「拒绝」将案件以否定的态度标记为已解决。"
|
||||
_delivery:
|
||||
status: "投递状态"
|
||||
stop: "停止投递"
|
||||
@@ -1631,7 +1629,7 @@ _announcement:
|
||||
end: "结束公告"
|
||||
tooManyActiveAnnouncementDescription: "若有大量活动公告,可能会造成用户体验下降。请考虑归档已完成的公告。"
|
||||
readConfirmTitle: "标记为已读?"
|
||||
readConfirmText: "阅读 “{title}” 的内容,并标记为已读。"
|
||||
readConfirmText: "阅读“{title}”的内容并将其标记为已读。"
|
||||
shouldNotBeUsedToPresentPermanentInfo: "因可能损坏新用户的 UX 体验,建议将通知用于发布具有时效性的信息,而不是用于长期展示的信息。"
|
||||
dialogAnnouncementUxWarn: "同时存在 2 个或以上的对话框公告极有可能对用户体验产生负面的影响,建议谨慎使用。"
|
||||
silence: "不发送通知"
|
||||
@@ -1643,7 +1641,7 @@ _initialAccountSetting:
|
||||
profileSetting: "个人资料设置"
|
||||
privacySetting: "隐私设置"
|
||||
theseSettingsCanEditLater: "也可以在稍后修改这里的设置。"
|
||||
youCanEditMoreSettingsInSettingsPageLater: "还可以在 “设置” 页面进行各种其它设置,稍后来确认一下吧。"
|
||||
youCanEditMoreSettingsInSettingsPageLater: "还可以在「设置」页面进行其它各种设置,稍后就来确认一下看看吧。"
|
||||
followUsers: "为了建立属于你自己的时间线,试着去关注你感兴趣的用户吧。"
|
||||
pushNotificationDescription: "启用推送通知的话,就可以在设备上接收来自 {name} 的通知了。"
|
||||
initialAccountSettingCompleted: "初始设定已经完成了!"
|
||||
@@ -1662,18 +1660,18 @@ _initialTutorial:
|
||||
description: "在这里,您可以查看 Misskey 的基本使用方法和功能。"
|
||||
_note:
|
||||
title: "什么是帖子?"
|
||||
description: "在 Misskey 上发表的文章称为 “帖子”。帖子在时间线上按照时间顺序排列,并实时更新。"
|
||||
description: "在 Misskey 上发表的文章称为「帖子」。帖子在时间线上按照时间顺序排列,并实时更新。"
|
||||
reply: "用来回复帖子。可以对回复进行回复,从而形成一串对话。"
|
||||
renote: "用来将帖子共享到自己的时间线上。也可以加上自己的文字然后引用它。"
|
||||
reaction: "用来添加回应。详细信息将在下一页进行说明。"
|
||||
menu: "用来进行例如显示帖子详情、复制链接等各种各样的操作。"
|
||||
_reaction:
|
||||
title: "什么是回应?"
|
||||
description: "您可以在帖子中添加 “回应”。 使用回应可以轻松地表达 “点赞” 无法传达的心情。"
|
||||
letsTryReacting: "点击帖子下方的 “+” 可以添加回应。试着给这个示例帖子添加一个回应!"
|
||||
description: "您可以在帖子中添加“回应”。 您可以使用反应轻松地表达点“赞”所无法传达的细微差别。"
|
||||
letsTryReacting: "回应可以通过点击帖子中的「+」按钮来添加。试着给这个示例帖子添加一个回应!"
|
||||
reactToContinue: "添加一个回应来继续"
|
||||
reactNotification: "当您的帖子被某人添加了回应时,将实时收到通知。"
|
||||
reactDone: "点击 “ー” 可以取消回应。"
|
||||
reactDone: "通过按下「ー」按钮,可以取消已经添加的回应"
|
||||
_timeline:
|
||||
title: "时间线的运作方式"
|
||||
description1: "Misskey 根据使用方式提供了多个时间线(根据服务器的设定,可能有一些被禁用)。"
|
||||
@@ -1696,20 +1694,20 @@ _initialTutorial:
|
||||
doNotSendConfidencialOnDirect2: "目标服务器的管理员可以看到发布的内容,因此如果您向不受信任的服务器上的用户发送私信,则在处理敏感信息时需要小心。"
|
||||
localOnly: "不将帖子通过联邦推送到其它服务器。 无论上述公开范围如何,其它服务器的用户将无法看到附加了此设定的帖子。\n"
|
||||
_cw:
|
||||
title: "隐藏内容(CW)"
|
||||
description: "显示 “注释” 中的内容,而非正文。点击 “查看更多” 以显示正文。"
|
||||
title: "隐藏内容 (CW)\n"
|
||||
description: "显示「注解」里的内容而不是正文。点击「查看更多」将会把正文显示出来。"
|
||||
_exampleNote:
|
||||
cw: "深夜报复社会"
|
||||
note: "茨了带巧克力的甜甜圈🍩😋"
|
||||
useCases: "用于服务器条款所规定的帖子,或对剧透内容和敏感内容进行自主规制。"
|
||||
_howToMakeAttachmentsSensitive:
|
||||
title: "如何标记附件为敏感内容?"
|
||||
description: "对于服务器守则所要求的,或不适合直接展示的附件,请添加 “敏感” 标记。"
|
||||
description: "对于服务器方针所要求要求的,又或者不适合直接展示的附件,请添加「敏感」标记。\n"
|
||||
tryThisFile: "试试看,将附加到此窗口的图像标注为敏感!"
|
||||
_exampleNote:
|
||||
note: "拆纳豆包装时失手了…"
|
||||
method: "要标注附件为敏感内容,请单击该文件以打开菜单,然后单击 “标记为敏感内容”。"
|
||||
sensitiveSucceeded: "添加附件时,请遵循服务器的条款、适当设定敏感内容。"
|
||||
method: "要标注附件为敏感内容,请单击该文件以打开菜单,然后单击「标记为敏感内容」。"
|
||||
sensitiveSucceeded: "附加文件时,请遵循服务器的条款来设置正确敏感设定。\n"
|
||||
doItToContinue: "将图像标记为敏感后才能够继续"
|
||||
_done:
|
||||
title: "恭喜您,已经完成了教程🎉\n"
|
||||
@@ -1757,7 +1755,7 @@ _serverSettings:
|
||||
userGeneratedContentsVisibilityForVisitor_description: "对于防止诸如难以管理的不适当的远程内容通过自己的服务器意外地在互联网上公开等问题很有用。"
|
||||
userGeneratedContentsVisibilityForVisitor_description2: "包含服务器接收到的远程内容在内,无条件将服务器上的所有内容公开在互联网上存在风险。特别是对去中心化的特性不是很了解的访问者有可能将远程服务器上的内容误认为是在此服务器内生成的,需要特别留意。"
|
||||
restartServerSetupWizardConfirm_title: "要重新开始服务器初始设定向导吗?"
|
||||
restartServerSetupWizardConfirm_text: "当前的部分设置将被重置。"
|
||||
restartServerSetupWizardConfirm_text: "现有的部分设定将重置。"
|
||||
entrancePageStyle: "入口页面样式"
|
||||
showTimelineForVisitor: "显示时间线"
|
||||
showActivitiesForVisitor: "显示活动"
|
||||
@@ -1778,7 +1776,7 @@ _accountMigration:
|
||||
startMigration: "迁移"
|
||||
migrationConfirm: "确定要把此账户迁移到 {account} 吗?一旦确定后,此操作无法取消,此账户也无法以原来的状态使用。\n同时,请确认迁移后的账户,已创造别名。"
|
||||
movedAndCannotBeUndone: "该账户已被迁移。\n迁移操作无法撤销。"
|
||||
postMigrationNote: "这个账户的关注会在迁移操作后的24小时后解除。该账户的 “关注中” 和 “关注者” 的数量都将变为0。由于不会解除关注关系,你的关注者仍然可以继续查看该账户发布的帖子。"
|
||||
postMigrationNote: "这个账户的关注会在迁移操作后的 24 小时后解除。该账户的「关注中」和「关注者」皆会变为 0。由于不会解除关注关系,你的关注者仍然可以继续查看该账户发补给关注者的帖子。"
|
||||
movedTo: "迁移后的账户"
|
||||
_achievements:
|
||||
earnedAt: "达成时间"
|
||||
@@ -1884,7 +1882,7 @@ _achievements:
|
||||
description: "累计登录 1000 天"
|
||||
flavor: "感谢您使用 Misskey!"
|
||||
_noteClipped1:
|
||||
title: "忍不住想加入便签"
|
||||
title: "忍不住要收藏到便签"
|
||||
description: "第一次将帖子加入便签"
|
||||
_noteFavorited1:
|
||||
title: "观星者"
|
||||
@@ -1970,7 +1968,7 @@ _achievements:
|
||||
description: "引用了自己的帖子"
|
||||
_htl20npm:
|
||||
title: "流动的时间线"
|
||||
description: "首页时间线中,帖子加载速度超过每分钟20篇"
|
||||
description: "在首页时间线的流速超过 20npm"
|
||||
_viewInstanceChart:
|
||||
title: "分析师"
|
||||
description: "查看了服务器信息中的图表"
|
||||
@@ -2058,7 +2056,7 @@ _role:
|
||||
asBadge: "作为徽章显示"
|
||||
descriptionOfAsBadge: "开启后,用户名旁边将会出现角色图标。"
|
||||
isExplorable: "公开角色时间线"
|
||||
descriptionOfIsExplorable: "开启后将公开角色时间线。如果角色为非公开,则无法公开时间线。"
|
||||
descriptionOfIsExplorable: "打开后将公开角色时间线。如果角色不是公开的,就无法公开时间线。"
|
||||
displayOrder: "显示顺序"
|
||||
descriptionOfDisplayOrder: "数字越大,显示位置越靠前。"
|
||||
preserveAssignmentOnMoveAccount: "将分配状态继承到目标账户"
|
||||
@@ -2087,12 +2085,12 @@ _role:
|
||||
alwaysMarkNsfw: "总是将文件标记为 NSFW"
|
||||
canUpdateBioMedia: "允许更新头像和横幅"
|
||||
pinMax: "帖子置顶数量限制"
|
||||
antennaMax: "可创建的天线数量"
|
||||
antennaMax: "可创建的最大天线数量"
|
||||
wordMuteMax: "折叠词的字数限制"
|
||||
webhookMax: "可创建的 Webhook 的数量"
|
||||
clipMax: "可创建的便签数量"
|
||||
webhookMax: "Webhook 创建数量限制"
|
||||
clipMax: "便签创建数量限制"
|
||||
noteEachClipsMax: "便签内贴文的最大数量"
|
||||
userListMax: "可创建的用户列表数量"
|
||||
userListMax: "用户列表创建数量限制"
|
||||
userEachUserListsMax: "单个用户列表内用户数量限制"
|
||||
rateLimitFactor: "速率限制"
|
||||
descriptionOfRateLimitFactor: "值越小限制越少,值越大限制越多。"
|
||||
@@ -2122,13 +2120,13 @@ _role:
|
||||
isBot: "机器人用户"
|
||||
isSuspended: "停用的用户"
|
||||
isLocked: "锁推用户"
|
||||
isExplorable: "启用 “使账号可见” 的用户"
|
||||
isExplorable: "启用“使账号可见”的用户"
|
||||
createdLessThan: "账户创建时间少于"
|
||||
createdMoreThan: "账户创建时间超过"
|
||||
followersLessThanOrEq: "关注者不多于"
|
||||
followersMoreThanOrEq: "关注者不少于"
|
||||
followingLessThanOrEq: "关注人数不多于"
|
||||
followingMoreThanOrEq: "关注人数不少于"
|
||||
followingLessThanOrEq: "关注中不多于"
|
||||
followingMoreThanOrEq: "关注中不少于"
|
||||
notesLessThanOrEq: "帖子数在~以下"
|
||||
notesMoreThanOrEq: "帖子数在~以上"
|
||||
and: "符合以下全部条件"
|
||||
@@ -2151,7 +2149,7 @@ _emailUnavailable:
|
||||
banned: "无法使用此邮件地址注册"
|
||||
_ffVisibility:
|
||||
public: "公开"
|
||||
followers: "仅关注者可见"
|
||||
followers: "只有关注你的用户能看到"
|
||||
private: "私密"
|
||||
_signup:
|
||||
almostThere: "即将完成"
|
||||
@@ -2170,7 +2168,7 @@ _ad:
|
||||
hide: "不显示"
|
||||
timezoneinfo: "星期几是根据服务器的时区确定的。"
|
||||
adsSettings: "广告设置"
|
||||
notesPerOneAd: "实时更新时插入广告的间隔(每条帖文)"
|
||||
notesPerOneAd: "在实时更新时间线中插入广告的间隔(帖子个数)"
|
||||
setZeroToDisable: "设为 0 将不在实时更新时间线中投放广告"
|
||||
adsTooClose: "广告投放时间间隔过短将可能显著损害用户体验。"
|
||||
_forgotPassword:
|
||||
@@ -2178,8 +2176,8 @@ _forgotPassword:
|
||||
ifNoEmail: "如果您没有设置电子邮件地址,请联系管理员。"
|
||||
contactAdmin: "该服务器不支持发送电子邮件。如果您想重设密码,请联系管理员。"
|
||||
_gallery:
|
||||
my: "我的相册"
|
||||
liked: "喜欢的相册"
|
||||
my: "我的图集"
|
||||
liked: "喜欢的图集"
|
||||
like: "喜欢!"
|
||||
unlike: "取消喜欢"
|
||||
_email:
|
||||
@@ -2201,12 +2199,12 @@ _preferencesBackups:
|
||||
save: "覆盖存档"
|
||||
inputName: "请输入备份的名称"
|
||||
cannotSave: "无法保存"
|
||||
nameAlreadyExists: "备份名称 “{name}” 已经存在,请指定其他名称。"
|
||||
nameAlreadyExists: "备份名称 \"{name}\" 已经存在,请指定其他名称。"
|
||||
applyConfirm: "您是否要将备份 \"{name}\" 应用到当前设备上?当前设备现有配置将被丢弃。"
|
||||
saveConfirm: "您确定要覆盖保存 {name} 吗?"
|
||||
deleteConfirm: "您确定要删除 {name} 吗?"
|
||||
renameConfirm: "您确定要把 “{old}” 改为 “{new}” 吗?"
|
||||
noBackups: "当前没有备份,“另存为” 允许您在服务器上保存当前客户端的配置。"
|
||||
renameConfirm: "您确定要把“{old}”改为“{new}”吗?"
|
||||
noBackups: "当前没有备份,“另存为”允许您在服务器上保存当前客户端的配置。"
|
||||
createdAt: "创建日期:{date} {time}"
|
||||
updatedAt: "更新日期:{date} {time}"
|
||||
cannotLoad: "无法加载"
|
||||
@@ -2247,10 +2245,10 @@ _channel:
|
||||
setBanner: "设置横幅"
|
||||
removeBanner: "删除横幅"
|
||||
featured: "热门"
|
||||
owned: "我的频道"
|
||||
owned: "正在管理"
|
||||
following: "正在关注"
|
||||
usersCount: "{n} 人参与"
|
||||
notesCount: "{n} 篇帖子"
|
||||
usersCount: "有{n}人参与"
|
||||
notesCount: "有{n}个帖子"
|
||||
nameAndDescription: "名称与描述"
|
||||
nameOnly: "仅名称"
|
||||
allowRenoteToExternal: "允许转发到频道外和引用"
|
||||
@@ -2339,7 +2337,7 @@ _sfx:
|
||||
note: "帖子"
|
||||
noteMy: "发帖"
|
||||
notification: "通知"
|
||||
reaction: "添加回应"
|
||||
reaction: "选择回应时"
|
||||
chatMessage: "私信"
|
||||
_soundSettings:
|
||||
driveFile: "使用网盘内的音频"
|
||||
@@ -2438,7 +2436,7 @@ _permissions:
|
||||
"write:gallery-likes": "管理喜欢的相册"
|
||||
"read:flash": "查看 Play"
|
||||
"write:flash": "编辑 Play"
|
||||
"read:flash-likes": "查看喜欢的 Play"
|
||||
"read:flash-likes": "查看 Play 的点赞"
|
||||
"write:flash-likes": "编辑 Play 的点赞列表"
|
||||
"read:admin:abuse-user-reports": "查看来自用户的举报"
|
||||
"write:admin:delete-account": "删除用户账户"
|
||||
@@ -2448,7 +2446,7 @@ _permissions:
|
||||
"read:admin:user-ips": "查看用户 IP 地址"
|
||||
"read:admin:meta": "查看实例的元数据"
|
||||
"write:admin:reset-password": "重置用户密码"
|
||||
"write:admin:resolve-abuse-user-report": "处理来自用户的举报"
|
||||
"write:admin:resolve-abuse-user-report": "将来自用户的报告标记为「已解决」"
|
||||
"write:admin:send-email": "发送邮件"
|
||||
"read:admin:server-info": "查看服务器信息"
|
||||
"read:admin:show-moderation-log": "查看管理日志"
|
||||
@@ -2476,7 +2474,7 @@ _permissions:
|
||||
"read:admin:emoji": "查看表情符号"
|
||||
"write:admin:queue": "编辑作业队列"
|
||||
"read:admin:queue": "查看作业队列相关情报"
|
||||
"write:admin:promo": "编辑推广帖文"
|
||||
"write:admin:promo": "运营推广说明"
|
||||
"write:admin:drive": "管理用户网盘"
|
||||
"read:admin:drive": "查看用户网盘相关情报"
|
||||
"read:admin:stream": "使用管理员用的 Websocket API"
|
||||
@@ -2485,7 +2483,7 @@ _permissions:
|
||||
"write:invite-codes": "生成邀请码"
|
||||
"read:invite-codes": "获取已发行的邀请码"
|
||||
"write:clip-favorite": "管理喜欢的便签"
|
||||
"read:clip-favorite": "查看收藏的便签"
|
||||
"read:clip-favorite": "查看便签的点赞"
|
||||
"read:federation": "查看联邦相关信息"
|
||||
"write:report-abuse": "举报用户"
|
||||
"write:chat": "撰写或删除消息"
|
||||
@@ -2521,7 +2519,7 @@ _weekday:
|
||||
_widgets:
|
||||
profile: "个人资料"
|
||||
instanceInfo: "服务器信息"
|
||||
memo: "便签"
|
||||
memo: "便利贴"
|
||||
notifications: "通知"
|
||||
timeline: "时间线"
|
||||
calendar: "日历"
|
||||
@@ -2617,20 +2615,20 @@ _poll:
|
||||
remainingSeconds: "{s}秒后截止"
|
||||
_visibility:
|
||||
public: "公开"
|
||||
publicDescription: "所有用户均可见"
|
||||
publicDescription: "您的帖子将出现在全局时间线上"
|
||||
home: "首页"
|
||||
homeDescription: "仅发布至首页"
|
||||
homeDescription: "仅发送至首页的时间线"
|
||||
followers: "仅关注者"
|
||||
followersDescription: "仅关注者可见"
|
||||
followersDescription: "仅发送至关注者"
|
||||
specified: "指定用户"
|
||||
specifiedDescription: "仅发送至指定用户"
|
||||
disableFederation: "仅限本地"
|
||||
disableFederationDescription: "不发送到其他服务器"
|
||||
_postForm:
|
||||
quitInspiteOfThereAreUnuploadedFilesConfirm: "还有一些文件尚未上传,要放弃上传并关闭窗口吗?"
|
||||
quitInspiteOfThereAreUnuploadedFilesConfirm: "还有未上传的文件,要丢弃并关闭窗口吗?"
|
||||
uploaderTip: "文件尚未上传。您可以在文件菜单中设置重命名、裁剪图片、添加水印以及是否压缩等功能。文件将在帖子发布时自动上传。"
|
||||
replyPlaceholder: "回复该帖…"
|
||||
quotePlaceholder: "引用该贴…"
|
||||
replyPlaceholder: "回复这个帖子..."
|
||||
quotePlaceholder: "引用这个帖子..."
|
||||
channelPlaceholder: "发布到频道…"
|
||||
showHowToUse: "显示窗口说明"
|
||||
_howToUse:
|
||||
@@ -2647,12 +2645,12 @@ _postForm:
|
||||
submit_title: "发帖按钮"
|
||||
submit_description: "发布帖子。也可用 Ctrl + Enter / Cmd + Enter 来发帖。"
|
||||
_placeholders:
|
||||
a: "最近怎么样?"
|
||||
b: "有什么新鲜事吗?"
|
||||
a: "现在怎么样?"
|
||||
b: "想好发些什么了吗?"
|
||||
c: "在想些什么呢?"
|
||||
d: "想说些什么?"
|
||||
e: "写些什么吧"
|
||||
f: "期待您的发文…"
|
||||
d: "你想要发布些什么吗?"
|
||||
e: "请写下来吧"
|
||||
f: "等待您的发布..."
|
||||
_profile:
|
||||
name: "昵称"
|
||||
username: "用户名"
|
||||
@@ -2811,7 +2809,7 @@ _notification:
|
||||
exportOfXCompleted: "已完成 {x} 的导出"
|
||||
login: "有新的登录"
|
||||
createToken: "访问令牌已创建"
|
||||
createTokenDescription: "如果不明白其用途,请遵循 “{text}” 的指示删除访问令牌。"
|
||||
createTokenDescription: "如果不明白其用途,请遵循「{text}」的指示删除访问令牌。"
|
||||
_types:
|
||||
all: "全部"
|
||||
note: "用户的新帖子"
|
||||
@@ -2858,9 +2856,9 @@ _deck:
|
||||
deleteProfile: "删除配置文件"
|
||||
introduction: "将各列进行组合以创建您自己的界面!"
|
||||
introduction2: "可以随时通过屏幕右侧的 + 来添加列"
|
||||
widgetsIntroduction: "从列菜单中,选择 “小工具编辑” 来添加小工具"
|
||||
widgetsIntroduction: "从列菜单中,选择“小工具编辑”来添加小工具"
|
||||
useSimpleUiForNonRootPages: "使用简易UI显示导航页面"
|
||||
usedAsMinWidthWhenFlexible: "如果启用 “自适应宽度”,此为最小宽度"
|
||||
usedAsMinWidthWhenFlexible: "「自适应宽度」被启用的时候,这就是最小的宽度"
|
||||
flexible: "自适应宽度"
|
||||
enableSyncBetweenDevicesForProfiles: "启用配置文件跨设备同步"
|
||||
showHowToUse: "查看用户界面说明"
|
||||
@@ -2897,7 +2895,7 @@ _webhookSettings:
|
||||
modifyWebhook: "编辑 webhook"
|
||||
name: "名称"
|
||||
secret: "密钥"
|
||||
trigger: "触发"
|
||||
trigger: "触发器"
|
||||
active: "已启用"
|
||||
_events:
|
||||
follow: "关注时"
|
||||
@@ -2989,7 +2987,7 @@ _fileViewer:
|
||||
size: "文件大小"
|
||||
url: "URL"
|
||||
uploadedAt: "添加日期"
|
||||
attachedNotes: "包含附件的帖子"
|
||||
attachedNotes: "附加到的帖子"
|
||||
usage: "使用"
|
||||
thisPageCanBeSeenFromTheAuthor: "此页只能被该文件的上传者查看。"
|
||||
_externalResourceInstaller:
|
||||
@@ -3037,10 +3035,10 @@ _dataSaver:
|
||||
description: "防止自动加载图像和视频。 点击隐藏的图像/视频即可加载它们。\n"
|
||||
_avatar:
|
||||
title: "头像"
|
||||
description: "不播放动态头像。 动态图像的文件大小远大于一般图像,不播放能够节省更多数据流量。"
|
||||
description: "不播放头像的动画。 由于动态图像的文件大小远大于一般图像,停止播放能够进一步节省数据流量。"
|
||||
_urlPreviewThumbnail:
|
||||
title: "隐藏 URL 预览图"
|
||||
description: "不再加载 URL 预览图。"
|
||||
title: "不显示 URL预览缩略图"
|
||||
description: "将不再加载 URL 预览缩略图。"
|
||||
_disableUrlPreview:
|
||||
title: "禁用 URL 预览"
|
||||
description: "关闭 URL 预览功能。与预览缩略图不同,减少了链接信息的加载。"
|
||||
@@ -3174,8 +3172,8 @@ _customEmojisManager:
|
||||
_register:
|
||||
uploadSettingTitle: "上传设置"
|
||||
uploadSettingDescription: "可以在此页面设置上传表情符号时的行为。"
|
||||
directoryToCategoryLabel: "将目录名设为 “category”"
|
||||
directoryToCategoryCaption: "拖放目录时,将目录名设置为 “category”。"
|
||||
directoryToCategoryLabel: "将目录名设为「category」"
|
||||
directoryToCategoryCaption: "拖放目录时,将目录名设置为「category」"
|
||||
confirmRegisterEmojisDescription: "要将列表内显示的表情符号替换为新的自定义表情符号吗?(为降低服务器负载,一次操作最多只能注册 {count} 个表情符号)"
|
||||
confirmClearEmojisDescription: "要放弃编辑并将列表内表示的表情符号清空吗?"
|
||||
confirmUploadEmojisDescription: "要将拖放的 {count} 个文件上传到网盘上吗?"
|
||||
@@ -3195,7 +3193,7 @@ _embedCodeGen:
|
||||
codeGeneratedDescription: "将生成的代码贴到网站上来使用。"
|
||||
_selfXssPrevention:
|
||||
warning: "警告"
|
||||
title: "任何要求 “在屏幕上贴些什么吧” 的都是诈骗。"
|
||||
title: "「在此处粘贴什么东西」是欺诈行为。"
|
||||
description1: "如果在此处粘贴了什么,恶意用户可能会接管账户或者盗取个人资料。"
|
||||
description2: "如果不能完全理解将要粘贴的内容,%c 请立即停止操作并关闭这个窗口。"
|
||||
description3: "详情请看这里。{link}"
|
||||
@@ -3214,7 +3212,7 @@ _remoteLookupErrors:
|
||||
description: "与该服务器的通信失败。对面服务器可能不可用。另外,请确认是否输入了无效或不存在的 URI。"
|
||||
_responseInvalid:
|
||||
title: "响应无效"
|
||||
description: "成功与该服务器建立通信,但获取的数据有误。"
|
||||
description: "成功与此服务器通信,但返回的数据无效。"
|
||||
_noSuchObject:
|
||||
title: "未找到"
|
||||
description: "未找到请求的资源。请再次检查 URI。"
|
||||
@@ -3278,7 +3276,7 @@ _serverSetupWizard:
|
||||
largeScaleServerAdvice: "运营大规模服务器可能需要高级基础设施知识,如负载均衡和数据库复制。"
|
||||
doYouConnectToFediverse: "要加入 Fediverse 吗?"
|
||||
doYouConnectToFediverse_description1: "若加入由分散性服务器所构成的网络(Fediverse),将能与其它服务器交换内容。"
|
||||
doYouConnectToFediverse_description2: "接入 Fediverse 被称为 “联邦”。"
|
||||
doYouConnectToFediverse_description2: "加入 Fediverse 在这里被称为「联邦」。"
|
||||
youCanConfigureMoreFederationSettingsLater: "可在之后进行如哪些服务器允许进行联邦交互等高级设置。"
|
||||
remoteContentsCleaning: "自动清理传入内容"
|
||||
remoteContentsCleaning_description: "开启联邦互通后,服务器将持续接收大量内容。打开自动清理后,将自动删除无法找到的旧内容,可节省存储空间。"
|
||||
@@ -3290,7 +3288,7 @@ _serverSetupWizard:
|
||||
skipSettings: "跳过设置"
|
||||
settingsCompleted: "设置完成!"
|
||||
settingsCompleted_description: "辛苦了。设置已完成,可以立即开始使用服务器了。"
|
||||
settingsCompleted_description2: "服务器的详细设置可在 “控制面板” 进行。"
|
||||
settingsCompleted_description2: "服务器的详细设置可在「控制面板」进行。"
|
||||
donationRequest: "请求捐助"
|
||||
_donationRequest:
|
||||
text1: "Misskey 是由志愿者开发的免费软件。"
|
||||
@@ -3304,7 +3302,7 @@ _uploader:
|
||||
doneConfirm: "部分文件尚未上传,是否继续?"
|
||||
maxFileSizeIsX: "可上传最大 {x} 的文件。"
|
||||
allowedTypes: "可上传的文件类型"
|
||||
tip: "文件尚未上传。在此对话框中,您可以进行上传前的确认、重命名、压缩和裁剪等操作。准备就绪后,点击 “上传” 按钮即可开始上传。"
|
||||
tip: "文件尚未上传。在此对话框中,您可以进行上传前的确认、重命名、压缩和裁剪等操作。准备就绪后,点击“上传”按钮即可开始上传。"
|
||||
_clientPerformanceIssueTip:
|
||||
title: "如果觉得电池耗电过高"
|
||||
makeSureDisabledAdBlocker: "请关闭广告拦截器"
|
||||
@@ -3415,7 +3413,7 @@ _drafts:
|
||||
cannotCreateDraftAnymore: "已超过可创建的草稿数量。"
|
||||
cannotCreateDraft: "此内容无法创建草稿。"
|
||||
delete: "删除草稿"
|
||||
deleteAreYouSure: "确认删除草稿吗?"
|
||||
deleteAreYouSure: "要删除草稿吗?"
|
||||
noDrafts: "没有草稿"
|
||||
replyTo: "回复给 {user}"
|
||||
quoteOf: "对 {user} 帖子的引用"
|
||||
@@ -3423,23 +3421,23 @@ _drafts:
|
||||
saveToDraft: "保存到草稿"
|
||||
restoreFromDraft: "从草稿恢复"
|
||||
restore: "恢复"
|
||||
listDrafts: "草稿列表"
|
||||
listDrafts: "草稿一览"
|
||||
schedule: "定时发布"
|
||||
listScheduledNotes: "定时发布列表"
|
||||
cancelSchedule: "取消定时"
|
||||
qr: "二维码"
|
||||
_qr:
|
||||
showTabTitle: "显示"
|
||||
readTabTitle: "扫描"
|
||||
readTabTitle: "读取"
|
||||
shareTitle: "{name} {acct}"
|
||||
shareText: "请在 Fediverse 上关注我!"
|
||||
chooseCamera: "切换镜头"
|
||||
chooseCamera: "选择相机"
|
||||
cannotToggleFlash: "无法开关闪光灯"
|
||||
turnOnFlash: "开启闪光灯"
|
||||
turnOnFlash: "打开闪光灯"
|
||||
turnOffFlash: "关闭闪光灯"
|
||||
startQr: "重新打开二维码扫描器"
|
||||
stopQr: "关闭扫码器"
|
||||
stopQr: "关闭二维码扫描器"
|
||||
noQrCodeFound: "未找到二维码"
|
||||
scanFile: "从设备扫描图像"
|
||||
scanFile: "扫描设备上的图像"
|
||||
raw: "文本"
|
||||
mfm: "MFM"
|
||||
|
||||
@@ -1409,7 +1409,6 @@ presets: "預設值"
|
||||
zeroPadding: "補零"
|
||||
nothingToConfigure: "無可設定的項目"
|
||||
viewRenotedChannel: "顯示轉發貼文者的頻道"
|
||||
previewingThemeRestore: "復原"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
caption: "檔案標題"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "misskey",
|
||||
"version": "2026.5.1-beta.0",
|
||||
"version": "2026.5.1",
|
||||
"codename": "nasubi",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -28,7 +28,7 @@ import { postMessageToParentWindow, setIframeId } from '@/post-message.js';
|
||||
import { serverContext } from '@/server-context.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
|
||||
import type { Theme } from '@/theme.js';
|
||||
import type { Theme } from '@@/js/theme.js';
|
||||
|
||||
console.log('Misskey Embed');
|
||||
|
||||
|
||||
@@ -5,26 +5,10 @@
|
||||
|
||||
// TODO: (可能な部分を)sharedに抽出して frontend と共通化
|
||||
|
||||
import tinycolor from 'tinycolor2';
|
||||
import lightTheme from '@@/themes/_light.json5';
|
||||
import darkTheme from '@@/themes/_dark.json5';
|
||||
import type { BundledTheme } from 'shiki/themes';
|
||||
|
||||
export type Theme = {
|
||||
id: string;
|
||||
name: string;
|
||||
author: string;
|
||||
desc?: string;
|
||||
base?: 'dark' | 'light';
|
||||
props: Record<string, string>;
|
||||
codeHighlighter?: {
|
||||
base: BundledTheme;
|
||||
overrides?: Record<string, any>;
|
||||
} | {
|
||||
base: '_none_';
|
||||
overrides: Record<string, any>;
|
||||
};
|
||||
};
|
||||
import { compile } from '@@/js/theme.js';
|
||||
import type { Theme } from '@@/js/theme.js';
|
||||
|
||||
let timeout: number | null = null;
|
||||
|
||||
@@ -32,7 +16,7 @@ export function assertIsTheme(theme: Record<string, unknown>): theme is Theme {
|
||||
return typeof theme === 'object' && theme !== null && 'id' in theme && 'name' in theme && 'author' in theme && 'props' in theme;
|
||||
}
|
||||
|
||||
export function applyTheme(theme: Theme, persist = true) {
|
||||
export function applyTheme(theme: Theme) {
|
||||
if (timeout) window.clearTimeout(timeout);
|
||||
|
||||
window.document.documentElement.classList.add('_themeChanging_');
|
||||
@@ -68,48 +52,3 @@ export function applyTheme(theme: Theme, persist = true) {
|
||||
|
||||
// iframeを正常に透過させるために、cssのcolor-schemeは `light dark;` 固定にしてある。style.scss参照
|
||||
}
|
||||
|
||||
function compile(theme: Theme): Record<string, string> {
|
||||
function getColor(val: string): tinycolor.Instance {
|
||||
if (val[0] === '@') { // ref (prop)
|
||||
return getColor(theme.props[val.substring(1)]);
|
||||
} else if (val[0] === '$') { // ref (const)
|
||||
return getColor(theme.props[val]);
|
||||
} else if (val[0] === ':') { // func
|
||||
const parts = val.split('<');
|
||||
const funcTxt = parts.shift();
|
||||
const argTxt = parts.shift();
|
||||
|
||||
if (funcTxt && argTxt) {
|
||||
const func = funcTxt.substring(1);
|
||||
const arg = parseFloat(argTxt);
|
||||
const color = getColor(parts.join('<'));
|
||||
|
||||
switch (func) {
|
||||
case 'darken': return color.darken(arg);
|
||||
case 'lighten': return color.lighten(arg);
|
||||
case 'alpha': return color.setAlpha(arg);
|
||||
case 'hue': return color.spin(arg);
|
||||
case 'saturate': return color.saturate(arg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// other case
|
||||
return tinycolor(val);
|
||||
}
|
||||
|
||||
const props = {};
|
||||
|
||||
for (const [k, v] of Object.entries(theme.props)) {
|
||||
if (k.startsWith('$')) continue; // ignore const
|
||||
|
||||
props[k] = v.startsWith('"') ? v.replace(/^"\s*/, '') : genValue(getColor(v));
|
||||
}
|
||||
|
||||
return props;
|
||||
}
|
||||
|
||||
function genValue(c: tinycolor.Instance): string {
|
||||
return c.toRgbString();
|
||||
}
|
||||
|
||||
13
packages/frontend-shared/@types/theme.d.ts
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: syuilo and misskey-project
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
declare module '@@/themes/*.json5' {
|
||||
import { Theme } from '@@/js/theme.js';
|
||||
|
||||
const theme: Theme;
|
||||
|
||||
// eslint-disable-next-line import/no-default-export
|
||||
export default theme;
|
||||
}
|
||||
@@ -1,109 +0,0 @@
|
||||
import fs from 'node:fs';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { dirname } from 'node:path';
|
||||
import * as esbuild from 'esbuild';
|
||||
import { build } from 'esbuild';
|
||||
import { execa } from 'execa';
|
||||
|
||||
const _filename = fileURLToPath(import.meta.url);
|
||||
const _dirname = dirname(_filename);
|
||||
const _package = JSON.parse(fs.readFileSync(_dirname + '/package.json', 'utf-8'));
|
||||
|
||||
const entryPoints = fs.globSync('./js/**/**.{ts,tsx}');
|
||||
|
||||
/** @type {import('esbuild').BuildOptions} */
|
||||
const options = {
|
||||
entryPoints,
|
||||
minify: process.env.NODE_ENV === 'production',
|
||||
outdir: './js-built',
|
||||
target: 'es2022',
|
||||
platform: 'browser',
|
||||
format: 'esm',
|
||||
sourcemap: 'linked',
|
||||
};
|
||||
|
||||
const args = process.argv.slice(2).map(arg => arg.toLowerCase());
|
||||
|
||||
// js-built配下をすべて削除する
|
||||
if (!args.includes('--no-clean')) {
|
||||
fs.rmSync('./js-built', { recursive: true, force: true });
|
||||
}
|
||||
|
||||
if (args.includes('--watch')) {
|
||||
await watchSrc();
|
||||
} else {
|
||||
await buildSrc();
|
||||
}
|
||||
|
||||
async function buildSrc() {
|
||||
console.log(`[${_package.name}] start building...`);
|
||||
|
||||
await build(options)
|
||||
.then(() => {
|
||||
console.log(`[${_package.name}] build succeeded.`);
|
||||
})
|
||||
.catch((err) => {
|
||||
process.stderr.write(err.stderr);
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
console.log(`[${_package.name}] skip building d.ts because NODE_ENV is production.`);
|
||||
} else {
|
||||
await buildDts();
|
||||
}
|
||||
|
||||
fs.copyFileSync('./js/emojilist.json', './js-built/emojilist.json');
|
||||
|
||||
console.log(`[${_package.name}] finish building.`);
|
||||
}
|
||||
|
||||
function buildDts() {
|
||||
return execa(
|
||||
'tsgo',
|
||||
[
|
||||
'--project', 'tsconfig.json',
|
||||
'--outDir', 'js-built',
|
||||
'--declaration', 'true',
|
||||
'--emitDeclarationOnly', 'true',
|
||||
],
|
||||
{
|
||||
stdout: process.stdout,
|
||||
stderr: process.stderr,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
async function watchSrc() {
|
||||
const plugins = [{
|
||||
name: 'gen-dts',
|
||||
setup(build) {
|
||||
build.onStart(() => {
|
||||
console.log(`[${_package.name}] detect changed...`);
|
||||
});
|
||||
build.onEnd(async result => {
|
||||
if (result.errors.length > 0) {
|
||||
console.error(`[${_package.name}] watch build failed:`, result);
|
||||
return;
|
||||
}
|
||||
await buildDts();
|
||||
});
|
||||
},
|
||||
}];
|
||||
|
||||
console.log(`[${_package.name}] start watching...`);
|
||||
|
||||
const context = await esbuild.context({ ...options, plugins });
|
||||
await context.watch();
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
process.on('SIGHUP', resolve);
|
||||
process.on('SIGINT', resolve);
|
||||
process.on('SIGTERM', resolve);
|
||||
process.on('uncaughtException', reject);
|
||||
process.on('exit', resolve);
|
||||
}).finally(async () => {
|
||||
await context.dispose();
|
||||
console.log(`[${_package.name}] finish watching.`);
|
||||
});
|
||||
}
|
||||
126
packages/frontend-shared/js/theme.ts
Normal file
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: syuilo and misskey-project
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
import tinycolor from 'tinycolor2';
|
||||
import JSON5 from 'json5';
|
||||
import lightTheme from '@@/themes/_light.json5';
|
||||
import type { BundledTheme } from 'shiki/themes';
|
||||
|
||||
export type Theme = {
|
||||
id: string;
|
||||
name: string;
|
||||
author: string;
|
||||
desc?: string;
|
||||
base?: 'dark' | 'light';
|
||||
kind?: 'dark' | 'light'; // legacy
|
||||
props: Record<string, string>;
|
||||
codeHighlighter?: {
|
||||
base: BundledTheme;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
overrides?: Record<string, any>;
|
||||
} | {
|
||||
base: '_none_';
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
overrides: Record<string, any>;
|
||||
};
|
||||
};
|
||||
|
||||
export type CompiledTheme = Record<string, string>;
|
||||
|
||||
export const themeProps = Object.keys(lightTheme.props).filter(key => !key.startsWith('X'));
|
||||
|
||||
export const getBuiltinThemes = () => Promise.all(
|
||||
[
|
||||
'l-light',
|
||||
'l-coffee',
|
||||
'l-apricot',
|
||||
'l-rainy',
|
||||
'l-botanical',
|
||||
'l-vivid',
|
||||
'l-cherry',
|
||||
'l-sushi',
|
||||
'l-u0',
|
||||
|
||||
'd-dark',
|
||||
'd-persimmon',
|
||||
'd-astro',
|
||||
'd-future',
|
||||
'd-botanical',
|
||||
'd-green-lime',
|
||||
'd-green-orange',
|
||||
'd-cherry',
|
||||
'd-ice',
|
||||
'd-u0',
|
||||
].map(name => import(`@@/themes/${name}.json5`).then(({ default: _default }): Theme => _default)),
|
||||
);
|
||||
|
||||
export function compile(theme: Theme): CompiledTheme {
|
||||
function getColor(val: string): tinycolor.Instance {
|
||||
if (val[0] === '@') { // ref (prop)
|
||||
return getColor(theme.props[val.substring(1)]);
|
||||
} else if (val[0] === '$') { // ref (const)
|
||||
return getColor(theme.props[val]);
|
||||
} else if (val[0] === ':') { // func
|
||||
const parts = val.split('<');
|
||||
const funcTxt = parts.shift();
|
||||
const argTxt = parts.shift();
|
||||
|
||||
if (funcTxt && argTxt) {
|
||||
const func = funcTxt.substring(1);
|
||||
const arg = parseFloat(argTxt);
|
||||
const color = getColor(parts.join('<'));
|
||||
|
||||
switch (func) {
|
||||
case 'darken': return color.darken(arg);
|
||||
case 'lighten': return color.lighten(arg);
|
||||
case 'alpha': return color.setAlpha(arg);
|
||||
case 'hue': return color.spin(arg);
|
||||
case 'saturate': return color.saturate(arg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// other case
|
||||
return tinycolor(val);
|
||||
}
|
||||
|
||||
const props = {} as CompiledTheme;
|
||||
|
||||
for (const [k, v] of Object.entries(theme.props)) {
|
||||
if (k.startsWith('$')) continue; // ignore const
|
||||
|
||||
props[k] = v.startsWith('"') ? v.replace(/^"\s*/, '') : genValue(getColor(v));
|
||||
}
|
||||
|
||||
return props;
|
||||
}
|
||||
|
||||
function genValue(c: tinycolor.Instance): string {
|
||||
return c.toRgbString();
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
export function validateTheme(theme: Record<string, any>): boolean {
|
||||
if (theme.id == null || typeof theme.id !== 'string') return false;
|
||||
if (theme.name == null || typeof theme.name !== 'string') return false;
|
||||
if (theme.base == null || !['light', 'dark'].includes(theme.base)) return false;
|
||||
if (theme.props == null || typeof theme.props !== 'object') return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
export function parseThemeCode(code: string): Theme {
|
||||
let theme;
|
||||
|
||||
try {
|
||||
theme = JSON5.parse(code);
|
||||
} catch (_) {
|
||||
throw new Error('Failed to parse theme json');
|
||||
}
|
||||
if (!validateTheme(theme)) {
|
||||
throw new Error('This theme is invaild');
|
||||
}
|
||||
|
||||
return theme;
|
||||
}
|
||||
@@ -1,32 +1,18 @@
|
||||
{
|
||||
"name": "frontend-shared",
|
||||
"type": "module",
|
||||
"main": "./js-built/index.js",
|
||||
"types": "./js-built/index.d.ts",
|
||||
"exports": {
|
||||
".": {
|
||||
"import": "./js-built/index.js",
|
||||
"types": "./js-built/index.d.ts"
|
||||
},
|
||||
"./*": {
|
||||
"import": "./js-built/*",
|
||||
"types": "./js-built/*"
|
||||
}
|
||||
},
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "node ./build.js",
|
||||
"watch": "nodemon -w package.json -e json --exec \"node ./build.js --watch\"",
|
||||
"eslint": "eslint './**/*.{js,jsx,ts,tsx}'",
|
||||
"typecheck": "tsgo --noEmit",
|
||||
"lint": "pnpm typecheck && pnpm eslint"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "24.12.2",
|
||||
"@types/tinycolor2": "1.4.6",
|
||||
"@typescript-eslint/eslint-plugin": "8.59.0",
|
||||
"@typescript-eslint/parser": "8.59.0",
|
||||
"esbuild": "0.28.0",
|
||||
"eslint-plugin-vue": "10.9.0",
|
||||
"nodemon": "3.1.14",
|
||||
"vue-eslint-parser": "10.4.0"
|
||||
},
|
||||
"files": [
|
||||
@@ -34,7 +20,10 @@
|
||||
],
|
||||
"dependencies": {
|
||||
"i18n": "workspace:*",
|
||||
"json5": "2.2.3",
|
||||
"misskey-js": "workspace:*",
|
||||
"shiki": "4.0.2",
|
||||
"tinycolor2": "1.6.0",
|
||||
"vue": "3.5.33"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,13 +20,13 @@ let moduleInitialized = false;
|
||||
let unobserve = () => {};
|
||||
let misskeyOS = null;
|
||||
|
||||
function loadTheme(applyTheme: typeof import('../src/theme')['applyTheme']) {
|
||||
function loadTheme(themeMaganer: typeof import('../src/theme')['themeManager']) {
|
||||
unobserve();
|
||||
const theme = themes[window.document.documentElement.dataset.misskeyTheme];
|
||||
if (theme) {
|
||||
applyTheme(themes[window.document.documentElement.dataset.misskeyTheme]);
|
||||
themeMaganer.updateTheme(themes[window.document.documentElement.dataset.misskeyTheme]);
|
||||
} else {
|
||||
applyTheme(themes['l-light']);
|
||||
themeMaganer.updateTheme(themes['l-light']);
|
||||
}
|
||||
const observer = new MutationObserver((entries) => {
|
||||
for (const entry of entries) {
|
||||
@@ -34,7 +34,7 @@ function loadTheme(applyTheme: typeof import('../src/theme')['applyTheme']) {
|
||||
const target = entry.target as HTMLElement;
|
||||
const theme = themes[target.dataset.misskeyTheme];
|
||||
if (theme) {
|
||||
applyTheme(themes[target.dataset.misskeyTheme]);
|
||||
themeMaganer.updateTheme(themes[target.dataset.misskeyTheme]);
|
||||
} else {
|
||||
target.removeAttribute('style');
|
||||
}
|
||||
|
||||
BIN
packages/frontend/assets/room/env.blend
Normal file
BIN
packages/frontend/assets/room/env.glb
Normal file
BIN
packages/frontend/assets/room/envs/default/300.glb
Normal file
BIN
packages/frontend/assets/room/envs/default/default.blend
Normal file
BIN
packages/frontend/assets/room/envs/japanese/ceiling.png
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
BIN
packages/frontend/assets/room/envs/japanese/japanese.blend
Normal file
BIN
packages/frontend/assets/room/envs/japanese/japanese.glb
Normal file
BIN
packages/frontend/assets/room/envs/japanese/tatami.png
Normal file
|
After Width: | Height: | Size: 879 KiB |
BIN
packages/frontend/assets/room/envs/museum/floor.jpg
Normal file
|
After Width: | Height: | Size: 626 KiB |
BIN
packages/frontend/assets/room/envs/museum/museum.blend
Normal file
BIN
packages/frontend/assets/room/envs/museum/museum.glb
Normal file
BIN
packages/frontend/assets/room/indoor.env
Normal file
1
packages/frontend/assets/room/object-thumbs/README.md
Normal file
@@ -0,0 +1 @@
|
||||
これらのサムネイルはdev buildでRoomのカタログダイアログを表示し家具を選択した状態でブラウザのコンソールで`takeScreenshot();`を叩くと生成・ダウンロードできます
|
||||
BIN
packages/frontend/assets/room/object-thumbs/a4-case.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
packages/frontend/assets/room/object-thumbs/aircon.png
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
BIN
packages/frontend/assets/room/object-thumbs/all-in-one-pc.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
packages/frontend/assets/room/object-thumbs/aquarium.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 23 KiB |
BIN
packages/frontend/assets/room/object-thumbs/banknote.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
packages/frontend/assets/room/object-thumbs/beam-lamp.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
packages/frontend/assets/room/object-thumbs/bed.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
packages/frontend/assets/room/object-thumbs/blind.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
packages/frontend/assets/room/object-thumbs/books.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
packages/frontend/assets/room/object-thumbs/box-wall-shelf.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
packages/frontend/assets/room/object-thumbs/cactus-s.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
packages/frontend/assets/room/object-thumbs/cardboard-box.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 12 KiB |
BIN
packages/frontend/assets/room/object-thumbs/chair.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
packages/frontend/assets/room/object-thumbs/coffee-cup.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
packages/frontend/assets/room/object-thumbs/color-box.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
packages/frontend/assets/room/object-thumbs/cuboid.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
BIN
packages/frontend/assets/room/object-thumbs/cup-noodle.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
packages/frontend/assets/room/object-thumbs/custard-pudding.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
packages/frontend/assets/room/object-thumbs/desk.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
packages/frontend/assets/room/object-thumbs/desktop-pc.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
packages/frontend/assets/room/object-thumbs/dj-mixer.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
packages/frontend/assets/room/object-thumbs/dj-player.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
BIN
packages/frontend/assets/room/object-thumbs/duct-tape.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 15 KiB |
BIN
packages/frontend/assets/room/object-thumbs/empty-bento.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
packages/frontend/assets/room/object-thumbs/energy-drink.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
packages/frontend/assets/room/object-thumbs/envelope.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
packages/frontend/assets/room/object-thumbs/facial-tissue.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 29 KiB |
BIN
packages/frontend/assets/room/object-thumbs/hanging-t-shirt.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
packages/frontend/assets/room/object-thumbs/icosahedron.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 18 KiB |
BIN
packages/frontend/assets/room/object-thumbs/iron-frame-table.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
packages/frontend/assets/room/object-thumbs/issyoubin.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
packages/frontend/assets/room/object-thumbs/keyboard.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
packages/frontend/assets/room/object-thumbs/laptop-pc.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
packages/frontend/assets/room/object-thumbs/lava-lamp.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
packages/frontend/assets/room/object-thumbs/letter-case.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
packages/frontend/assets/room/object-thumbs/mi-objet.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 18 KiB |
BIN
packages/frontend/assets/room/object-thumbs/mi-plate.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
packages/frontend/assets/room/object-thumbs/milk.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
packages/frontend/assets/room/object-thumbs/mixer.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
packages/frontend/assets/room/object-thumbs/monitor-speaker.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
packages/frontend/assets/room/object-thumbs/monitor.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
packages/frontend/assets/room/object-thumbs/monstera.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
packages/frontend/assets/room/object-thumbs/mug.png
Normal file
|
After Width: | Height: | Size: 27 KiB |