Compare commits

...

705 Commits

Author SHA1 Message Date
60269d15e8 Update version 2018-08-19 04:03:55 +09:00
f3936a79aa Fix #2335 2018-08-19 04:01:10 +09:00
78b560d89a #2324 2018-08-19 03:56:44 +09:00
2fc6313380 Fix #2325 2018-08-19 03:36:51 +09:00
c2b882a5d7 Improve cpu and memory chart in control panel 2018-08-19 03:32:01 +09:00
667b18fe24 Refactoring 2018-08-19 03:06:23 +09:00
60c0dac5f2 Merge pull request #2311 from acid-chicken/patch-autogen
[AUTOMATED] Update README.md
2018-08-19 01:14:48 +09:00
79f3e60dac Merge pull request #2331 from syuilo/l10n_master
New Crowdin translations
2018-08-19 01:14:00 +09:00
c4e04d6bf2 New translations ja.yml (English) 2018-08-19 01:01:20 +09:00
49f8219e54 Merge pull request #2286 from syuilo/l10n_master
New Crowdin translations
2018-08-19 00:58:02 +09:00
abd873e0a8 Create README.md 2018-08-19 00:57:40 +09:00
0e45d0d47f Merge branch 'master' into l10n_master 2018-08-19 00:55:07 +09:00
043b66f5da Merge pull request #2330 from syuilo/patch
Clean up
2018-08-19 00:52:10 +09:00
5d6e1fc391 New translations ja.yml (Japanese (Kansai-ben)) 2018-08-19 00:51:23 +09:00
fe292e77de New translations ja.yml (Catalan) 2018-08-19 00:51:20 +09:00
c996b5d0c8 New translations ja.yml (Portuguese) 2018-08-19 00:51:18 +09:00
7beb592f0c New translations ja.yml (Korean) 2018-08-19 00:51:16 +09:00
b3b11acd96 New translations ja.yml (Polish) 2018-08-19 00:51:14 +09:00
3bcdfbbd00 New translations ja.yml (Chinese Simplified) 2018-08-19 00:51:11 +09:00
fdad5d149f New translations ja.yml (Italian) 2018-08-19 00:51:09 +09:00
2e712a9212 New translations ja.yml (Russian) 2018-08-19 00:51:07 +09:00
86c8e634bb New translations ja.yml (English) 2018-08-19 00:51:05 +09:00
197a9306c4 New translations ja.yml (Spanish) 2018-08-19 00:51:03 +09:00
2e502a6b61 New translations ja.yml (German) 2018-08-19 00:51:00 +09:00
aa8a40e950 New translations ja.yml (French) 2018-08-19 00:50:58 +09:00
2f45ac3712 Merge pull request #2329 from syuilo/improve-chart
Improve chart
2018-08-19 00:46:17 +09:00
8ecf3db608 Add drive chart 2018-08-19 00:45:54 +09:00
f59c68022f Fix bug 2018-08-19 00:42:09 +09:00
7aac2c4e29 Clean up 2018-08-19 00:31:25 +09:00
0481de6629 wip 2018-08-19 00:27:23 +09:00
f59d0a75e4 missing semicolon 2018-08-19 00:20:36 +09:00
22f4b3cc7b missing semicolon 2018-08-19 00:20:36 +09:00
a4283c415a improve html to MFM 2018-08-19 00:20:36 +09:00
c0fbcee38a improve MFM to html 2018-08-19 00:20:36 +09:00
335200c31e wip 2018-08-18 23:56:44 +09:00
df71c90f9f wip 2018-08-18 23:48:54 +09:00
4220bdc963 New translations ja.yml (Japanese (Kansai-ben)) 2018-08-18 23:41:44 +09:00
97f3b1e46f New translations ja.yml (Catalan) 2018-08-18 23:41:42 +09:00
3a9dc358f8 New translations ja.yml (Portuguese) 2018-08-18 23:41:40 +09:00
2a3ab46a3d New translations ja.yml (Korean) 2018-08-18 23:41:37 +09:00
200a01f65f New translations ja.yml (Polish) 2018-08-18 23:41:34 +09:00
e68936911d New translations ja.yml (Chinese Simplified) 2018-08-18 23:41:32 +09:00
634ffeec54 New translations ja.yml (Italian) 2018-08-18 23:41:30 +09:00
8486cb785d New translations ja.yml (Russian) 2018-08-18 23:41:28 +09:00
a9eda4e6e2 New translations ja.yml (English) 2018-08-18 23:41:25 +09:00
f918f9b307 New translations ja.yml (Spanish) 2018-08-18 23:41:23 +09:00
d404d02d2d New translations ja.yml (German) 2018-08-18 23:41:21 +09:00
61f7a3974f New translations ja.yml (French) 2018-08-18 23:41:19 +09:00
cad8e4dea2 Update ja.yml 2018-08-18 23:39:25 +09:00
ef79903811 wip 2018-08-18 23:23:55 +09:00
c3cd0451ad wip 2018-08-18 23:15:16 +09:00
773fe28fcb wip 2018-08-18 20:26:01 +09:00
69e2576387 wip 2018-08-18 20:22:56 +09:00
908a5a1bb4 New translations ja.yml (Japanese (Kansai-ben)) 2018-08-18 19:21:12 +09:00
ffbd9ffc75 New translations ja.yml (English) 2018-08-18 18:21:27 +09:00
96223dd5e3 New translations ja.yml (English) 2018-08-18 17:57:09 +09:00
3231f12b93 Merge pull request #2319 from acid-chicken/patch-1
Add 関西弁
2018-08-18 17:13:22 +09:00
1408f39d9a Update ja-ks.yml 2018-08-18 17:07:25 +09:00
4ba06541aa Update ja-ks.yml 2018-08-18 17:07:00 +09:00
5c78ed645a Update index.js 2018-08-18 17:04:00 +09:00
33e19447aa Create ja-ks.yml 2018-08-18 17:02:56 +09:00
b52d995719 Fix typo 2018-08-18 13:12:29 +09:00
db5b90c093 New translations ja.yml (Catalan) 2018-08-18 13:11:48 +09:00
39bc75a7f9 New translations ja.yml (Portuguese) 2018-08-18 13:11:46 +09:00
3492067ecf New translations ja.yml (Korean) 2018-08-18 13:11:43 +09:00
e342a8da05 New translations ja.yml (Polish) 2018-08-18 13:11:40 +09:00
671d71dd47 New translations ja.yml (Chinese Simplified) 2018-08-18 13:11:38 +09:00
2f18d2ed8f New translations ja.yml (Italian) 2018-08-18 13:11:35 +09:00
f6e8165db0 New translations ja.yml (Russian) 2018-08-18 13:11:33 +09:00
eab3b22772 New translations ja.yml (English) 2018-08-18 13:11:31 +09:00
7664aa5a8c New translations ja.yml (Spanish) 2018-08-18 13:11:29 +09:00
a366392cbe New translations ja.yml (German) 2018-08-18 13:11:27 +09:00
c8c1bc09f9 New translations ja.yml (French) 2018-08-18 13:11:24 +09:00
11bb1608cf Resolve #2293 2018-08-18 13:09:15 +09:00
b1d77775aa Update README.md [AUTOGEN] 2018-08-18 11:02:58 +09:00
bc3f5e0d78 Merge pull request #2310 from sei0o/fix-1776
fix #1776
2018-08-18 07:54:49 +09:00
53ea709697 fix #1776 2018-08-18 07:53:06 +09:00
b7adbbb9bf 6.4.1 2018-08-18 06:01:55 +09:00
31aaf559ac Fix bug 2018-08-18 05:46:57 +09:00
160185b108 Fix bug 2018-08-18 05:43:09 +09:00
848ff4440b New translations ja.yml (English) 2018-08-18 05:32:18 +09:00
74291b2cae New translations ja.yml (Catalan) 2018-08-18 05:23:00 +09:00
ae6c4e0c5f New translations ja.yml (Portuguese) 2018-08-18 05:22:57 +09:00
ecb1840e27 New translations ja.yml (Korean) 2018-08-18 05:22:54 +09:00
42eb82a859 New translations ja.yml (Polish) 2018-08-18 05:22:52 +09:00
89a22908ce New translations ja.yml (Chinese Simplified) 2018-08-18 05:22:49 +09:00
bc3a94aa57 New translations ja.yml (Italian) 2018-08-18 05:22:47 +09:00
77fe579d9b New translations ja.yml (Russian) 2018-08-18 05:22:45 +09:00
e8c7803a2f New translations ja.yml (English) 2018-08-18 05:22:43 +09:00
1abaef624c New translations ja.yml (Spanish) 2018-08-18 05:22:40 +09:00
72cf2344a9 New translations ja.yml (German) 2018-08-18 05:22:38 +09:00
0462512e62 New translations ja.yml (French) 2018-08-18 05:22:36 +09:00
1d6b2bd969 6.4.0 2018-08-18 05:21:45 +09:00
5df90fdc4a l10n 2018-08-18 05:15:39 +09:00
607a5326d9 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-18 05:05:48 +09:00
2cbd35acc4 🎨 2018-08-18 05:05:39 +09:00
9a0224ee21 🎨 2018-08-18 05:00:54 +09:00
2beedc5978 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-18 04:52:15 +09:00
6d53e64798 Improve control panel 2018-08-18 04:52:06 +09:00
3478cdea08 Merge pull request #2304 from acid-chicken/acid-chicken-patch-4
Update README.md
2018-08-18 04:39:36 +09:00
b360f2ed45 Update README.md 2018-08-18 04:34:44 +09:00
7b0c4c29b4 Merge pull request #2303 from syuilo/update-readme
Update README.md
2018-08-18 04:29:29 +09:00
03f5d7575c Update README.md 2018-08-18 04:27:58 +09:00
e922d8904c Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-18 04:22:00 +09:00
45b55a8c98 Update rate limit setting 2018-08-18 04:21:49 +09:00
8973b76bda Merge pull request #2302 from syuilo/kao-to-faces
Fix #2301
2018-08-18 04:20:57 +09:00
41cf856e26 Fix #2301 2018-08-18 04:13:25 +09:00
b7aeb10304 Merge pull request #2300 from syuilo/delete-autogen
Delete .autogen
2018-08-18 04:05:47 +09:00
b8d9c1aa45 Delete .autogen 2018-08-18 04:05:00 +09:00
d7dbe503b6 🎨 2018-08-18 03:59:56 +09:00
c625dd074a Merge pull request #2299 from syuilo/new-kao
Add new kao
2018-08-18 03:56:30 +09:00
f8a977f1c0 Add new kao 2018-08-18 03:55:45 +09:00
c35e760fd3 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-18 03:52:46 +09:00
bc34ac82cf Show some charts in control panel 2018-08-18 03:52:24 +09:00
98f25c9159 6.3.2 2018-08-18 03:37:56 +09:00
ae9c13df66 6.3.1 2018-08-18 03:37:10 +09:00
9f8d21b2bc Fix #2298 2018-08-18 03:36:13 +09:00
e05e97561a New translations ja.yml (French) 2018-08-18 01:42:31 +09:00
f9d21fd34a New translations ja.yml (French) 2018-08-18 01:21:26 +09:00
86aef5f3e0 New translations ja.yml (French) 2018-08-18 01:12:29 +09:00
e6bc7922ac New translations ja.yml (French) 2018-08-18 01:01:48 +09:00
b2f40b7d3e New translations ja.yml (French) 2018-08-18 00:51:35 +09:00
3878793405 New translations ja.yml (English) 2018-08-18 00:42:00 +09:00
33c7aef220 New translations ja.yml (French) 2018-08-18 00:41:58 +09:00
e927f7a4ec New translations ja.yml (English) 2018-08-18 00:32:15 +09:00
cd09fa5a28 Merge pull request #2297 from syuilo/update-readme
✌️☀️☁️❄️✌️
2018-08-17 23:20:58 +09:00
9ca9757418 ✌️☀️☁️❄️✌️ 2018-08-17 23:19:24 +09:00
1fae2ffc37 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-17 23:07:01 +09:00
71657ddb98 🎨 2018-08-17 23:06:58 +09:00
63845e0ba7 Merge pull request #2294 from acid-chicken/patch-1
Resolve #2291
2018-08-17 22:38:40 +09:00
6781b68d33 Delete README.foot.md 2018-08-17 22:37:11 +09:00
d058eff59a Update and rename README.head.md to README.md 2018-08-17 22:36:38 +09:00
f409faea2c New translations ja.yml (Catalan) 2018-08-17 21:52:08 +09:00
77da98cd39 New translations ja.yml (Portuguese) 2018-08-17 21:52:06 +09:00
471afcbd57 New translations ja.yml (Korean) 2018-08-17 21:52:04 +09:00
72809f9d78 New translations ja.yml (Polish) 2018-08-17 21:52:01 +09:00
743fb45c3c New translations ja.yml (Chinese Simplified) 2018-08-17 21:51:59 +09:00
93d6b71a31 New translations ja.yml (Italian) 2018-08-17 21:51:57 +09:00
9b10e93fba New translations ja.yml (Russian) 2018-08-17 21:51:55 +09:00
0740837b6a New translations ja.yml (English) 2018-08-17 21:51:52 +09:00
ff49eacee4 New translations ja.yml (Spanish) 2018-08-17 21:51:50 +09:00
fbc6b267ff New translations ja.yml (German) 2018-08-17 21:51:48 +09:00
10cae8894e New translations ja.yml (French) 2018-08-17 21:51:46 +09:00
42addfed85 Merge pull request #2292 from syuilo/patch-2271
Resolve #2271
2018-08-17 21:43:15 +09:00
0dd6494ab9 fix(package): update url-loader to version 1.1.1 2018-08-17 21:41:42 +09:00
9f4c6a3aef Resolve #2271 2018-08-17 21:40:08 +09:00
9438dc560d New translations ja.yml (Catalan) 2018-08-17 21:32:40 +09:00
003ef65b59 New translations ja.yml (Portuguese) 2018-08-17 21:32:37 +09:00
978fb7e63a New translations ja.yml (Korean) 2018-08-17 21:32:35 +09:00
6203577696 New translations ja.yml (Polish) 2018-08-17 21:32:33 +09:00
f2b61f6a7e New translations ja.yml (Chinese Simplified) 2018-08-17 21:32:29 +09:00
6f4aa69723 New translations ja.yml (Italian) 2018-08-17 21:32:27 +09:00
b308e1bb2b New translations ja.yml (Russian) 2018-08-17 21:32:25 +09:00
ab3dad2d84 New translations ja.yml (English) 2018-08-17 21:32:23 +09:00
0af103f399 New translations ja.yml (Spanish) 2018-08-17 21:32:20 +09:00
873608a7de New translations ja.yml (German) 2018-08-17 21:32:18 +09:00
b04ad167da New translations ja.yml (French) 2018-08-17 21:32:15 +09:00
ad0d06c0d8 #332 2018-08-17 21:29:06 +09:00
151476ae8a New translations ja.yml (English) 2018-08-17 19:41:43 +09:00
fbf43c1450 Fix bug 2018-08-17 19:38:39 +09:00
35a1fa5bf0 6.3.0 2018-08-17 19:37:06 +09:00
8d3f71d490 Fix bug 2018-08-17 19:35:05 +09:00
2239eddf88 New translations ja.yml (Catalan) 2018-08-17 19:32:18 +09:00
94ea21d482 New translations ja.yml (Portuguese) 2018-08-17 19:32:15 +09:00
6a39f92431 New translations ja.yml (Korean) 2018-08-17 19:32:12 +09:00
7b2efa35c7 New translations ja.yml (Polish) 2018-08-17 19:32:09 +09:00
c41ea84568 New translations ja.yml (Chinese Simplified) 2018-08-17 19:32:06 +09:00
0e8262e623 New translations ja.yml (Italian) 2018-08-17 19:32:03 +09:00
4d97946943 New translations ja.yml (Russian) 2018-08-17 19:32:00 +09:00
96d48b5519 New translations ja.yml (English) 2018-08-17 19:31:57 +09:00
4cc54d081e New translations ja.yml (Spanish) 2018-08-17 19:31:55 +09:00
aab5a2ffbd New translations ja.yml (German) 2018-08-17 19:31:52 +09:00
c8f165b4ad New translations ja.yml (French) 2018-08-17 19:31:49 +09:00
9776d8e06b Merge pull request #2283 from sei0o/patch-2266
fix #2266
2018-08-17 19:24:10 +09:00
10f845ae76 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-17 19:17:36 +09:00
2c8f962889 #2214 #2155 2018-08-17 19:17:23 +09:00
1721a82352 Merge pull request #2284 from acid-chicken/acid-chicken-patch-3
Auto-generate README
2018-08-17 18:50:17 +09:00
59bec546e4 Create README.foot.md 2018-08-17 18:34:35 +09:00
86503f2d69 Create README.head.md 2018-08-17 18:33:49 +09:00
e4b8c688bb fix #2266: デフォルト値を設定 2018-08-17 17:16:27 +09:00
4535ab4c43 fix #2266 2018-08-17 16:35:04 +09:00
dcdb57df9d Merge pull request #2270 from syuilo/l10n_master
New Crowdin translations
2018-08-17 14:57:51 +09:00
cfc2808c56 New translations ja.yml (English) 2018-08-17 14:51:21 +09:00
4a3d74c608 Merge branch 'master' into l10n_master 2018-08-17 14:48:38 +09:00
e18655d18f Merge pull request #2279 from syuilo/enhance-note-footer
Enhance note footer
2018-08-17 14:43:25 +09:00
12b4b78763 New translations ja.yml (Catalan) 2018-08-17 13:21:27 +09:00
550a528fc1 New translations ja.yml (Portuguese) 2018-08-17 13:21:25 +09:00
4e3429a5c7 New translations ja.yml (Korean) 2018-08-17 13:21:22 +09:00
ef98383075 New translations ja.yml (Polish) 2018-08-17 13:21:20 +09:00
d66d1f142f New translations ja.yml (Chinese Simplified) 2018-08-17 13:21:17 +09:00
c896055cb1 New translations ja.yml (Italian) 2018-08-17 13:21:15 +09:00
2e8b2e0cf9 New translations ja.yml (Russian) 2018-08-17 13:21:13 +09:00
59012b5693 New translations ja.yml (English) 2018-08-17 13:21:11 +09:00
dfb51e8d26 New translations ja.yml (Spanish) 2018-08-17 13:21:09 +09:00
5107824352 New translations ja.yml (German) 2018-08-17 13:21:07 +09:00
bf7ec18316 New translations ja.yml (French) 2018-08-17 13:21:04 +09:00
77d82d2d17 Merge pull request #2282 from sei0o/improve-login-failed-message
ログイン失敗時のメッセージを改善
2018-08-17 13:19:41 +09:00
2777460150 Merge pull request #2278 from mei23/mei-0817-announce3
Misskey => Misskey で renote 出来ない件修正
2018-08-17 13:18:11 +09:00
9476a240d9 ログイン失敗時のメッセージを改善 2018-08-17 12:34:07 +09:00
bddb878931 New translations ja.yml (English) 2018-08-17 10:01:12 +09:00
b0768d8a4a New translations ja.yml (English) 2018-08-17 09:51:19 +09:00
46bb7f9efb New translations ja.yml (English) 2018-08-17 09:41:18 +09:00
a507b7c0b0 Enhance note footer 2018-08-17 07:16:56 +09:00
939c0dc5f9 Fix indent 2018-08-17 06:46:32 +09:00
a89c206572 Fix Announce Activity 2018-08-17 06:40:50 +09:00
8b55263e72 New translations ja.yml (Catalan) 2018-08-17 06:11:53 +09:00
f2ad1e4639 New translations ja.yml (Portuguese) 2018-08-17 06:11:51 +09:00
0fbcec1c16 New translations ja.yml (Korean) 2018-08-17 06:11:48 +09:00
ec2b73d076 New translations ja.yml (Polish) 2018-08-17 06:11:46 +09:00
6630bb0b39 New translations ja.yml (Chinese Simplified) 2018-08-17 06:11:43 +09:00
bef0d4c8bd New translations ja.yml (Italian) 2018-08-17 06:11:41 +09:00
a57cb3bd31 New translations ja.yml (Russian) 2018-08-17 06:11:38 +09:00
1e4577a988 New translations ja.yml (English) 2018-08-17 06:11:36 +09:00
fe792b5bbb New translations ja.yml (Spanish) 2018-08-17 06:11:33 +09:00
d4005133d0 New translations ja.yml (German) 2018-08-17 06:11:31 +09:00
abe8e80268 New translations ja.yml (French) 2018-08-17 06:11:28 +09:00
e38e4940b4 Merge pull request #2277 from syuilo/patch-2276
Resolve #2276
2018-08-17 06:06:07 +09:00
48dc1678c3 Resolve #2276 2018-08-17 06:04:09 +09:00
431383ab54 Clean up 2018-08-17 05:33:20 +09:00
7a8d252f63 Merge pull request #2272 from mei23/mei-0817-debuglog
production以外のときに`npm run debug`が効かないのを修正
2018-08-17 04:04:18 +09:00
04525e2997 New translations ja.yml (Catalan) 2018-08-17 03:52:03 +09:00
a2f96f3f20 New translations ja.yml (Portuguese) 2018-08-17 03:52:01 +09:00
a81ecb0b28 New translations ja.yml (Korean) 2018-08-17 03:51:59 +09:00
1122368ee0 New translations ja.yml (Polish) 2018-08-17 03:51:56 +09:00
6c54328391 New translations ja.yml (Chinese Simplified) 2018-08-17 03:51:54 +09:00
1a26816f7a New translations ja.yml (Italian) 2018-08-17 03:51:52 +09:00
8538334d08 New translations ja.yml (Russian) 2018-08-17 03:51:50 +09:00
9387ebc569 New translations ja.yml (English) 2018-08-17 03:51:48 +09:00
c99dce68ed New translations ja.yml (Spanish) 2018-08-17 03:51:46 +09:00
6dea84c6d2 New translations ja.yml (German) 2018-08-17 03:51:44 +09:00
39060374c2 Fix npm run debug not working 2018-08-17 03:51:42 +09:00
d3ebb5d13f New translations ja.yml (French) 2018-08-17 03:51:41 +09:00
4e7c10d3d9 Merge pull request #2269 from syuilo/verified-user-ja
Update verified-user in ja.yml
2018-08-17 03:47:58 +09:00
e93ea66d2d Update verified-user in ja.yml 2018-08-17 03:47:08 +09:00
152dd70ea5 Merge pull request #2268 from syuilo/space-between-words
Add a space between the words
2018-08-17 03:18:52 +09:00
7b94cf9f84 Add a space between the words 2018-08-17 03:08:17 +09:00
d70e27a865 Provide id in announce activity 2018-08-17 02:37:20 +09:00
b780ea336c 6.2.0 2018-08-17 00:39:30 +09:00
bd9f589d32 Merge pull request #2255 from syuilo/l10n_master
New Crowdin translations
2018-08-17 00:38:30 +09:00
d9d18bd8f9 New translations ja.yml (English) 2018-08-17 00:33:59 +09:00
ffdaa6bc56 Use thumbnail 2018-08-17 00:27:36 +09:00
c7f60e337e New translations ja.yml (English) 2018-08-17 00:23:38 +09:00
7f265dbd52 New translations ja.yml (Catalan) 2018-08-17 00:22:15 +09:00
8929c5cabc New translations ja.yml (Portuguese) 2018-08-17 00:22:12 +09:00
4a610f3b0a New translations ja.yml (Korean) 2018-08-17 00:22:09 +09:00
55ec19edb5 New translations ja.yml (Polish) 2018-08-17 00:22:07 +09:00
c319c61832 New translations ja.yml (Chinese Simplified) 2018-08-17 00:22:05 +09:00
66db99b8cd New translations ja.yml (Italian) 2018-08-17 00:22:02 +09:00
ff2162974d New translations ja.yml (Russian) 2018-08-17 00:22:00 +09:00
78e86af086 New translations ja.yml (English) 2018-08-17 00:21:57 +09:00
2dcf89eecf New translations ja.yml (Spanish) 2018-08-17 00:21:55 +09:00
fdf94be998 New translations ja.yml (German) 2018-08-17 00:21:53 +09:00
0e913a5727 New translations ja.yml (French) 2018-08-17 00:21:50 +09:00
f3be077adc Fix bug 2018-08-17 00:19:27 +09:00
a6e0471f8c ✌️ 2018-08-17 00:13:52 +09:00
c5d734f9ad 6.1.0 2018-08-17 00:09:01 +09:00
ee12d887ae typo 2018-08-17 00:07:23 +09:00
b78d24be1e Fix bug 2018-08-17 00:05:57 +09:00
d5379e2b36 autoWatchをデフォルトでfalseに 2018-08-17 00:04:07 +09:00
cf36557084 New translations ja.yml (Catalan) 2018-08-17 00:00:54 +09:00
fd1ee129dc New translations ja.yml (Portuguese) 2018-08-17 00:00:51 +09:00
1471b7a6b5 New translations ja.yml (Korean) 2018-08-17 00:00:49 +09:00
1d39d7efcb New translations ja.yml (Polish) 2018-08-17 00:00:46 +09:00
69ee97f6e2 New translations ja.yml (Chinese Simplified) 2018-08-17 00:00:44 +09:00
12092e6083 New translations ja.yml (Italian) 2018-08-17 00:00:41 +09:00
6e29e40b8b New translations ja.yml (Russian) 2018-08-17 00:00:39 +09:00
842c9e735b New translations ja.yml (English) 2018-08-17 00:00:37 +09:00
2f63a25058 New translations ja.yml (Spanish) 2018-08-17 00:00:33 +09:00
d3b084003c New translations ja.yml (German) 2018-08-17 00:00:31 +09:00
0da9d3d8b0 New translations ja.yml (French) 2018-08-17 00:00:27 +09:00
58f3c6aab7 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-16 23:59:25 +09:00
22e79675ad #2263 2018-08-16 23:59:22 +09:00
e5c350d740 Fix bug 2018-08-16 23:33:11 +09:00
210124ac34 New translations ja.yml (English) 2018-08-16 21:24:31 +09:00
7f9a35d7ac Improve object storage key 2018-08-16 21:23:31 +09:00
71a30f9001 New translations ja.yml (Korean) 2018-08-16 21:02:39 +09:00
95a34d55fb New translations ja.yml (English) 2018-08-16 21:02:36 +09:00
34f052b672 New translations ja.yml (Korean) 2018-08-16 20:51:53 +09:00
0178c2e696 New translations ja.yml (English) 2018-08-16 20:51:51 +09:00
5cb0c07627 New translations ja.yml (English) 2018-08-16 20:24:07 +09:00
d8fdbfe164 New translations ja.yml (English) 2018-08-16 20:11:53 +09:00
74e0b2734d New translations ja.yml (English) 2018-08-16 20:06:07 +09:00
3f5785bd03 New translations ja.yml (English) 2018-08-16 17:43:46 +09:00
15e5c69c15 New translations ja.yml (English) 2018-08-16 17:32:01 +09:00
57019c0b40 New translations ja.yml (English) 2018-08-16 09:01:03 +09:00
9d6641be3a Fix bug 2018-08-16 08:18:41 +09:00
ac15c2e71f Fix bug 2018-08-16 08:11:21 +09:00
1fc9206c6d 6.0.0 2018-08-16 08:02:50 +09:00
a8fb0d477f Merge pull request #2251 from syuilo/provide-thumbnails
Provide drive file thumbnails
2018-08-16 07:59:16 +09:00
0c372b68d4 Merge pull request #2252 from syuilo/greenkeeper/minio-7.0.0
Update minio to the latest version 🚀
2018-08-16 07:58:56 +09:00
e7d9018944 ✌️ 2018-08-16 07:56:53 +09:00
ce16884587 Update example.yml 2018-08-16 07:31:58 +09:00
3345733d00 fix(package): update minio to version 7.0.0 2018-08-15 22:26:17 +00:00
f91cccb6b1 fix(package): update @types/webpack to version 4.4.10 2018-08-16 07:24:19 +09:00
6183262037 wip 2018-08-16 07:17:04 +09:00
1c7a194950 wip 2018-08-16 06:27:35 +09:00
286e15b967 fix(package): update @types/node to version 10.7.1 2018-08-16 06:08:15 +09:00
744d366874 Merge pull request #2248 from syuilo/new-kao
Add new kao
2018-08-16 05:17:56 +09:00
afa62d3d44 Add new kao 2018-08-16 05:17:00 +09:00
270c7997c6 Remove trailing comma 2018-08-16 05:15:51 +09:00
fa95641f88 Use Array.prototype.length to avoid magic number 2018-08-16 05:15:06 +09:00
aa9fe38c25 Merge pull request #2247 from syuilo/clickable-reaction
Make reactions in reactions-viewer clickable
2018-08-16 05:00:13 +09:00
0d33cbbbbb Make reactions in reactions-viewer clickable 2018-08-16 04:57:09 +09:00
bf077da72f Trim code 2018-08-16 04:42:44 +09:00
d8f8e19d06 Merge pull request #2246 from mei23/mei-0816-player
動画プレーヤーの修正
2018-08-16 03:17:41 +09:00
3c3d3e4c0c Fix url-preview.vue 2018-08-16 03:06:59 +09:00
0efbeb36df 5.25.0 2018-08-16 01:29:11 +09:00
73c396cb39 2018-08-16 01:25:35 +09:00
8e75f8a125 Fix 2018-08-16 01:20:52 +09:00
e8a7e95c65 Update summaly 2018-08-16 01:17:01 +09:00
70a6889fe5 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-16 00:59:54 +09:00
6aff7375f6 Update backers 2018-08-16 00:59:48 +09:00
d2ef95a8c3 Make text unclickable 2018-08-16 00:49:40 +09:00
1ae51df74a Update .travis.yml 2018-08-16 00:42:20 +09:00
3098c6a915 Merge pull request #2242 from syuilo/l10n_master
New Crowdin translations
2018-08-16 00:16:31 +09:00
ab3f8fd10c Enhance log message 2018-08-16 00:13:24 +09:00
4bdef3720c Update setup.en.md 2018-08-15 23:55:30 +09:00
c02cecc9e5 New translations ja.yml (English) 2018-08-15 23:30:49 +09:00
08b431723a Refactoring 2018-08-15 20:27:49 +09:00
83dcfec053 Improve MFM 2018-08-15 20:27:36 +09:00
69ac7b739f Improve MFM 2018-08-15 20:23:50 +09:00
9ccf9a2496 Fix #2229 2018-08-15 20:20:46 +09:00
78563ef9a0 Fix #2228 2018-08-15 20:09:56 +09:00
019d157b92 Merge pull request #2198 from syuilo/l10n_master
New Crowdin translations
2018-08-15 19:48:03 +09:00
14de35e3f5 Merge pull request #2234 from acid-chicken/patch-player
Update player whitelist
2018-08-15 19:04:31 +09:00
a860479e88 Update url-preview.vue 2018-08-15 19:00:44 +09:00
b351b3fae5 Update url-preview.vue 2018-08-15 18:49:05 +09:00
89918a9f79 New translations ja.yml (English) 2018-08-15 17:08:24 +09:00
cadd020915 New translations ja.yml (English) 2018-08-15 16:51:16 +09:00
e80933b8ae New translations ja.yml (English) 2018-08-15 16:40:52 +09:00
4c0832884f New translations ja.yml (English) 2018-08-15 16:30:48 +09:00
e4ca940979 New translations ja.yml (English) 2018-08-15 16:20:51 +09:00
3fd9be3967 New translations ja.yml (English) 2018-08-15 16:13:11 +09:00
79ec7aba1d New translations ja.yml (English) 2018-08-15 13:40:56 +09:00
42b1f7eddd New translations ja.yml (English) 2018-08-15 11:30:56 +09:00
889a73caa4 New translations ja.yml (Catalan) 2018-08-15 11:11:41 +09:00
c34a89e962 New translations ja.yml (Portuguese) 2018-08-15 11:11:39 +09:00
2b4bf681e5 New translations ja.yml (Korean) 2018-08-15 11:11:36 +09:00
d1d59e3557 New translations ja.yml (Polish) 2018-08-15 11:11:34 +09:00
668c21830c New translations ja.yml (Chinese Simplified) 2018-08-15 11:11:31 +09:00
7c37ed07f8 New translations ja.yml (Italian) 2018-08-15 11:11:29 +09:00
a135d8fd59 New translations ja.yml (Russian) 2018-08-15 11:11:27 +09:00
0db9aae162 New translations ja.yml (English) 2018-08-15 11:11:25 +09:00
1875c362af New translations ja.yml (Spanish) 2018-08-15 11:11:23 +09:00
9b36dd9565 New translations ja.yml (German) 2018-08-15 11:11:21 +09:00
69452a27de New translations ja.yml (French) 2018-08-15 11:11:18 +09:00
6aa5c5895f Merge pull request #2219 from syuilo/patch-2215
Resolve #2215
2018-08-15 11:07:07 +09:00
12f20c67b1 New translations ja.yml (English) 2018-08-15 09:21:05 +09:00
66b8e5647d New translations ja.yml (English) 2018-08-15 09:11:16 +09:00
188a23fec7 New translations ja.yml (English) 2018-08-15 09:01:12 +09:00
b408b45000 New translations ja.yml (English) 2018-08-15 08:55:29 +09:00
c53cb94250 Resolve #2215 2018-08-15 06:50:49 +09:00
ba2eeabe38 Merge pull request #2216 from syuilo/patch-2201
Resolve #2201
2018-08-15 04:46:52 +09:00
259fac224e Resolve #2201 2018-08-15 04:44:39 +09:00
aad5440c9e New translations ja.yml (English) 2018-08-15 04:41:14 +09:00
5c40f0010f New translations ja.yml (English) 2018-08-15 04:31:06 +09:00
fb1d181424 New translations ja.yml (English) 2018-08-15 04:21:29 +09:00
12cbd8ef5b New translations ja.yml (English) 2018-08-15 04:11:22 +09:00
cfc4385d1f New translations ja.yml (English) 2018-08-15 04:00:59 +09:00
880ef024d0 New translations ja.yml (English) 2018-08-15 03:51:09 +09:00
c6c6edbc0a New translations ja.yml (English) 2018-08-15 03:41:21 +09:00
83ba951bf9 5.24.1 2018-08-15 02:38:47 +09:00
9c22b1a68a Fix 2018-08-15 02:35:25 +09:00
cd6a1d3446 5.24.0 2018-08-15 02:14:57 +09:00
4a9fc0c8ed Better query 2018-08-15 02:08:18 +09:00
fada899b30 Merge pull request #2210 from mei23/mei-0814-ap3
ActivityPub Followers/Following/Outbox の実装
2018-08-15 02:04:08 +09:00
22b099fa8a Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-15 02:01:52 +09:00
e0bc0d2830 Add new kao 2018-08-15 02:01:49 +09:00
90768d30aa fix(package): update seedrandom to version 2.4.4 2018-08-15 01:53:48 +09:00
177c549493 fix(package): update url-loader to version 1.1.0 2018-08-15 01:53:40 +09:00
5e1ee68189 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-15 01:51:46 +09:00
175f6303bc Update theme color 2018-08-15 01:51:43 +09:00
cf9f2a5562 Merge pull request #2211 from skid9000/patch-2
Update doc for twitter integration.
2018-08-14 22:55:02 +09:00
f04526baca Update example.yml 2018-08-14 15:45:36 +02:00
f085ecedb3 Update setup.en.md 2018-08-14 15:41:55 +02:00
0986301788 Implement ActivityPub Followers/Following/Outbox 2018-08-14 20:13:32 +09:00
fe418d8d9a fix(package): update @types/ws to version 6.0.0 2018-08-14 17:07:35 +09:00
6009be34dc fix(package): update @types/node to version 10.7.0 2018-08-14 17:07:23 +09:00
01a0a54a2c fix(package): update @types/mongodb to version 3.1.4 2018-08-14 17:07:15 +09:00
cfcaf77e21 fix(package): update mongodb to version 3.1.3 2018-08-14 17:07:07 +09:00
3b37bdc0b9 fix(package): update vue-style-loader to version 4.1.2 2018-08-14 17:06:54 +09:00
ec07112f94 Fix bug 2018-08-14 16:53:57 +09:00
464faf2673 Merge pull request #2200 from syuilo/use-deque
Use deque instead of linked list
2018-08-14 08:22:23 +09:00
bde20a1a65 Use deque instead of linked list 2018-08-14 08:21:25 +09:00
86c7276da9 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-14 08:16:24 +09:00
fec988bb79 Provide isFirstNote flag 2018-08-14 08:16:21 +09:00
0702d0974b Merge pull request #2199 from syuilo/patch-2176
Resolve #2176
2018-08-14 07:51:45 +09:00
f443d36dbb Resolve #2176 2018-08-14 07:49:59 +09:00
5477f0a865 New translations ja.yml (English) 2018-08-14 05:42:07 +09:00
dc02168f33 Merge #2182 2018-08-14 05:25:02 +09:00
cc5c32b4d2 Clean up 2018-08-14 05:24:51 +09:00
a35680a838 New translations ja.yml (Catalan) 2018-08-14 04:52:05 +09:00
770cba73a6 New translations ja.yml (Portuguese) 2018-08-14 04:52:03 +09:00
401fc758fd New translations ja.yml (Korean) 2018-08-14 04:52:01 +09:00
e8503e6351 New translations ja.yml (Polish) 2018-08-14 04:51:58 +09:00
de23753409 New translations ja.yml (Chinese Simplified) 2018-08-14 04:51:56 +09:00
4857d86cdd New translations ja.yml (Italian) 2018-08-14 04:51:54 +09:00
dc4a072678 New translations ja.yml (Russian) 2018-08-14 04:51:52 +09:00
c6ee5ccd88 New translations ja.yml (English) 2018-08-14 04:51:50 +09:00
68b630cb37 New translations ja.yml (Spanish) 2018-08-14 04:51:48 +09:00
94c0238d3a New translations ja.yml (German) 2018-08-14 04:51:45 +09:00
dbea387433 New translations ja.yml (French) 2018-08-14 04:51:43 +09:00
d35f62d0e4 Merge pull request #2195 from syuilo/instance-management-system
管理画面
2018-08-14 04:42:16 +09:00
09b8e81a77 wip 2018-08-14 04:39:37 +09:00
3b38979a34 wip 2018-08-14 04:30:42 +09:00
0fd8c86c24 fix(package): update mongodb to version 3.1.2 2018-08-14 03:38:01 +09:00
58d0ed1a2e 5.23.2 2018-08-14 02:36:06 +09:00
8939452036 Merge pull request #2192 from acid-chicken/acid-chicken-patch-3
Re: Re: Fix #2177
2018-08-14 02:31:00 +09:00
a2931d6f7e Update ui.header.vue 2018-08-14 02:26:58 +09:00
38b75ad977 Update avatar.vue 2018-08-14 02:10:06 +09:00
dc4f585954 Merge pull request #2191 from syuilo/greenkeeper/parse5-5.1.0
Update parse5 to the latest version 🚀
2018-08-14 01:58:01 +09:00
1fbe5365f7 Update example.yml 2018-08-14 01:57:52 +09:00
04257db938 fix(package): update parse5 to version 5.1.0 2018-08-13 16:54:58 +00:00
ba08d1aa53 wip 2018-08-14 01:48:11 +09:00
c29cb5bfb9 Update package.json 2018-08-14 01:38:29 +09:00
fb1e2efbdd wip 2018-08-14 01:37:23 +09:00
131a454e7c Merge pull request #2190 from mei23/mei-apsendvis2
ActivityPub送信時の公開範囲の実装
2018-08-14 01:36:56 +09:00
92e5cff285 wip 2018-08-14 01:35:36 +09:00
b24e32e14e 5.23.0 2018-08-14 01:32:49 +09:00
943805bdcd Merge pull request #2180 from syuilo/l10n_master
New Crowdin translations
2018-08-14 01:32:11 +09:00
ba9340a26b wip 2018-08-14 01:24:46 +09:00
00119328f2 wip 2018-08-14 01:19:05 +09:00
a73c65da07 New translations ja.yml (French) 2018-08-14 01:11:32 +09:00
9021bb5694 wip 2018-08-14 01:05:58 +09:00
a3cf63823f Merge pull request #2189 from syuilo/patch-1
Hide unimplemented button
2018-08-13 23:53:15 +09:00
f15878cc6f Update avatar.vue
refs: https://github.com/syuilo/misskey/pull/2182#discussion_r209609541
2018-08-13 22:49:32 +09:00
33469ff87a Hide Unimplemented button 2018-08-13 22:08:59 +09:00
23b0723168 Merge pull request #2188 from Tosuke/patch1
Create apps without authentication(#2025)
2018-08-13 12:38:02 +09:00
fda1ab3e05 Create apps without authentication(#2025) 2018-08-13 12:30:32 +09:00
490c05a869 New translations ja.yml (English) 2018-08-13 06:32:08 +09:00
f0137daebe New translations ja.yml (English) 2018-08-13 04:51:11 +09:00
b9fc0e6d71 Merge pull request #2183 from acid-chicken/patch-1
Make player height taller
2018-08-13 04:42:49 +09:00
979efee412 Update url-preview.vue 2018-08-13 04:41:12 +09:00
f079041827 ActivityPub visibility on send 2018-08-13 03:49:17 +09:00
4edd9efc0b Update avatar.vue
refs: https://github.com/syuilo/misskey/pull/2182#discussion_r209464350
2018-08-13 03:47:56 +09:00
2913c7ccfb Update avatar.vue 2018-08-13 03:42:12 +09:00
e1f460f90f Update user.header.vue 2018-08-13 03:40:50 +09:00
70f927ea43 Update avatar.vue 2018-08-13 03:39:32 +09:00
80d343bb0b Update avatar.vue 2018-08-13 03:36:42 +09:00
9e41fddea3 Merge pull request #2130 from acid-chicken/patch-player
WIP: Add player
2018-08-13 03:25:22 +09:00
8384efc8c7 Create whitelist 2018-08-13 03:23:36 +09:00
7797c86581 Merge pull request #2181 from acid-chicken/patch-1
Re: Fix #2177
2018-08-13 01:59:11 +09:00
4da8cc478f Update ui.header.vue 2018-08-13 01:58:15 +09:00
285deeec52 New translations ja.yml (Catalan) 2018-08-13 01:31:20 +09:00
2916e49422 New translations ja.yml (Portuguese) 2018-08-13 01:31:18 +09:00
41e5b9134b New translations ja.yml (Korean) 2018-08-13 01:31:16 +09:00
d0d853dcb2 New translations ja.yml (Polish) 2018-08-13 01:31:13 +09:00
be46c7e4c5 New translations ja.yml (Chinese Simplified) 2018-08-13 01:31:11 +09:00
8e0f41d608 New translations ja.yml (Italian) 2018-08-13 01:31:09 +09:00
a7b438072c New translations ja.yml (Russian) 2018-08-13 01:31:06 +09:00
99958e2fce New translations ja.yml (English) 2018-08-13 01:31:04 +09:00
b82843d359 New translations ja.yml (Spanish) 2018-08-13 01:31:02 +09:00
4dfc2dfa89 New translations ja.yml (German) 2018-08-13 01:30:59 +09:00
50c945607f New translations ja.yml (French) 2018-08-13 01:30:57 +09:00
01f28b21dd #1211 2018-08-13 01:25:50 +09:00
2cb39a8882 Fix #2097 2018-08-13 00:59:36 +09:00
6ddb6bc160 Add .vsls.json 2018-08-13 00:24:45 +09:00
92befbb4cc Fix #2177
Resolves #2177
2018-08-13 00:18:02 +09:00
ab701bb93e Merge pull request #2159 from syuilo/l10n_master
New Crowdin translations
2018-08-12 23:53:22 +09:00
7f9a88fd1c fix(package): update vue-js-modal to version 1.3.17 2018-08-12 23:13:52 +09:00
c5073b33ef Fix ActivityPub followers/specified detection 2018-08-12 20:37:35 +09:00
765b922a8b fix(package): update ts-node to version 7.0.1 2018-08-12 16:22:43 +09:00
9b7d6274fa New translations ja.yml (French) 2018-08-12 07:40:57 +09:00
26b384aef1 New translations ja.yml (French) 2018-08-12 07:30:58 +09:00
0b1e5e3e08 New translations ja.yml (French) 2018-08-12 07:20:58 +09:00
5b7506756e New translations ja.yml (French) 2018-08-12 07:11:02 +09:00
1f28a0dfeb Improve nya 2018-08-12 05:20:31 +09:00
f56ec82f6b Fix ActivityPub attachment url 2018-08-12 04:42:14 +09:00
8ccbabf5ca 5.22.1 2018-08-12 03:09:45 +09:00
7c763600b7 Fix #2162 2018-08-12 03:09:22 +09:00
499491003b New translations ja.yml (Polish) 2018-08-12 00:31:30 +09:00
3a77d871d5 Stop supporting docker 2018-08-12 00:30:58 +09:00
4ee6d0b549 Refactoring (#2160) 2018-08-12 00:01:07 +09:00
64aa733b16 New translations ja.yml (Polish) 2018-08-11 22:51:08 +09:00
c8c4ec6ad4 5.22.0 2018-08-11 21:35:22 +09:00
c9ee737078 Fix bug 2018-08-11 21:34:12 +09:00
ebc2cca0b4 New Crowdin translations (#2158) 2018-08-11 21:29:07 +09:00
fc94df06eb New Crowdin translations (#2157) 2018-08-11 21:13:38 +09:00
190a03103e New translations ja.yml (Catalan) 2018-08-11 21:11:31 +09:00
0d75ae9d9a New translations ja.yml (Portuguese) 2018-08-11 21:11:29 +09:00
3129f8f073 New translations ja.yml (Korean) 2018-08-11 21:11:27 +09:00
7f751d3f20 New translations ja.yml (Polish) 2018-08-11 21:11:25 +09:00
0b5b834f8b New translations ja.yml (Chinese Simplified) 2018-08-11 21:11:23 +09:00
0f649f7d37 New translations ja.yml (Italian) 2018-08-11 21:11:21 +09:00
a1b100d412 New translations ja.yml (Russian) 2018-08-11 21:11:19 +09:00
dd4ee1627e New translations ja.yml (English) 2018-08-11 21:11:16 +09:00
1da0fdcf78 New translations ja.yml (Spanish) 2018-08-11 21:11:14 +09:00
800eec73b8 New translations ja.yml (German) 2018-08-11 21:11:12 +09:00
166cb5e179 New translations ja.yml (French) 2018-08-11 21:11:10 +09:00
4a5e145048 Add new reaction: rip 😇 2018-08-11 21:08:34 +09:00
be68f42220 Implement messaging/messages/read 2018-08-11 21:01:39 +09:00
7942aa677f Update doc 2018-08-11 21:01:26 +09:00
2fcf9288a5 Refactoring 2018-08-11 20:53:03 +09:00
9bc17974f2 未利用時はTwitterでログインを表示しない (#2156) 2018-08-11 20:20:35 +09:00
19c872a1f3 Update url-preview.vue 2018-08-11 19:56:53 +09:00
9252c59d90 Merge branch 'master' into patch-player 2018-08-11 19:56:05 +09:00
a8f142096c Cache failed url-preview (apply to proxy/client) (#2154) 2018-08-11 18:04:59 +09:00
3c90abfb96 5.21.0 2018-08-11 12:24:16 +09:00
12037fab9b fix(package): update @types/node to version 10.5.8 (#2152) 2018-08-11 12:21:42 +09:00
73cc425093 fix(package): update request to version 2.88.0 (#2151) 2018-08-11 12:21:30 +09:00
5c97da935d New Crowdin translations (#2150) 2018-08-11 12:21:18 +09:00
0b154ac7ba Merge branch 'master' into l10n_master 2018-08-11 12:21:06 +09:00
d4eb0c8df9 New translations ja.yml (Spanish) 2018-08-11 01:42:11 +09:00
5ba6f20701 New translations ja.yml (Spanish) 2018-08-11 01:31:44 +09:00
695a082582 New translations ja.yml (Spanish) 2018-08-11 01:21:58 +09:00
a52c588f49 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-11 00:49:31 +09:00
fa469725c7 Add doc 2018-08-11 00:49:29 +09:00
a1f0cb1bc7 fix(package): update summaly to version 2.1.2 (#2149) 2018-08-11 00:44:26 +09:00
fbbd33ded2 fix(package): update file-type to version 9.0.0 2018-08-10 20:44:03 +09:00
9658e2b3fb fix(package): update element-ui to version 2.4.6 2018-08-10 20:43:56 +09:00
3d10b19727 Fix Powered by <b>Misskey</b>. (#2140) 2018-08-10 20:11:54 +09:00
ab7725ff69 良い感じにした 2018-08-10 14:33:34 +09:00
6372451d17 Fix bug 2018-08-10 14:15:12 +09:00
2c11cc3f0a 5.20.1 2018-08-10 01:04:40 +09:00
7f65f896f9 fix(package): update summaly to version 2.1.1 (#2135) 2018-08-10 01:02:20 +09:00
def823ceea Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-10 00:51:43 +09:00
454d294cf3 Fix #2133 など 2018-08-10 00:51:40 +09:00
1affdbdbab fix(package): update node-sass to version 4.9.3 (#2131) 2018-08-10 00:25:25 +09:00
52286f4be8 fix(package): update summaly to version 2.1.0 (#2132) 2018-08-10 00:25:16 +09:00
1b9f293959 Update url-preview.vue
多分もう折り返す必要はないのだわ
2018-08-09 23:34:54 +09:00
7289d5b401 Add player 2018-08-09 16:44:34 +09:00
01d3f5f09d 5.20.0 2018-08-09 04:35:17 +09:00
4333ff00a0 New Crowdin translations (#2116) 2018-08-09 04:34:21 +09:00
25b88afbb7 Merge pull request #2127 from acid-chicken/acid-chicken-patch-3
Fix bug
2018-08-09 04:22:36 +09:00
6a92c19227 Update url-preview.vue 2018-08-09 04:21:25 +09:00
5bdbf98f8c New translations ja.yml (English) 2018-08-09 04:21:24 +09:00
56b69b5fb7 Merge pull request #2126 from acid-chicken/acid-chicken-patch-2
ニコニコ動画
2018-08-09 04:07:33 +09:00
ebf0479ecc Update url-preview.vue 2018-08-09 04:05:28 +09:00
196c55edbc Merge pull request #2125 from acid-chicken/acid-chicken-patch-2
Spotify
2018-08-09 03:32:55 +09:00
e724c1e7e8 Update url-preview.vue 2018-08-09 03:32:09 +09:00
4e915e96a5 New translations ja.yml (French) 2018-08-09 02:52:24 +09:00
e148f6ce5e New translations ja.yml (French) 2018-08-09 02:41:44 +09:00
652d7d2c05 New translations ja.yml (French) 2018-08-09 02:36:35 +09:00
0b0111fe23 New translations ja.yml (French) 2018-08-09 02:31:11 +09:00
869c19c666 fix(package): update style-loader to version 0.22.1 2018-08-09 00:59:39 +09:00
86a5f715d3 Merge pull request #2121 from syuilo/greenkeeper/systeminformation-3.42.9
Update systeminformation to the latest version 🚀
2018-08-08 23:18:27 +09:00
514aeac2d8 Merge pull request #2120 from syuilo/greenkeeper/vue-loader-15.3.0
Update vue-loader to the latest version 🚀
2018-08-08 23:18:16 +09:00
8980a26713 Merge pull request #2119 from syuilo/greenkeeper/style-loader-0.22.0
Update style-loader to the latest version 🚀
2018-08-08 23:18:06 +09:00
a39e2b28d1 Merge pull request #2118 from syuilo/greenkeeper/commander-2.17.1
Update commander to the latest version 🚀
2018-08-08 23:17:53 +09:00
bef617cb7c fix(package): update systeminformation to version 3.42.9 2018-08-08 05:13:03 +00:00
1dc1feca0f fix(package): update vue-loader to version 15.3.0 2018-08-07 21:34:59 +00:00
5d097fb29d New translations ja.yml (French) 2018-08-08 00:51:48 +09:00
f29fe986af New translations ja.yml (French) 2018-08-08 00:43:05 +09:00
0c774979c0 New translations ja.yml (French) 2018-08-08 00:32:08 +09:00
f0bc2ed1d7 New translations ja.yml (French) 2018-08-08 00:22:38 +09:00
b174e5e57a New translations ja.yml (English) 2018-08-07 23:21:52 +09:00
90eed0ea0d fix(package): update style-loader to version 0.22.0 2018-08-07 13:13:16 +00:00
ae50b71c07 New translations ja.yml (Polish) 2018-08-07 20:53:54 +09:00
c730e5edfa fix(package): update commander to version 2.17.1 2018-08-07 11:23:35 +00:00
b2eb50f260 New translations ja.yml (Catalan) 2018-08-07 13:31:40 +09:00
790c7f2249 New translations ja.yml (Portuguese) 2018-08-07 13:31:38 +09:00
6a0f34c283 New translations ja.yml (Korean) 2018-08-07 13:31:36 +09:00
d151445db7 New translations ja.yml (Polish) 2018-08-07 13:31:34 +09:00
18a3007273 New translations ja.yml (Chinese Simplified) 2018-08-07 13:31:31 +09:00
bea8c3c65c New translations ja.yml (Italian) 2018-08-07 13:31:29 +09:00
391ee01fe3 New translations ja.yml (Russian) 2018-08-07 13:31:26 +09:00
be7cf9f731 New translations ja.yml (English) 2018-08-07 13:31:24 +09:00
b92c2aa40e New translations ja.yml (Spanish) 2018-08-07 13:31:21 +09:00
45ebcbf785 New translations ja.yml (German) 2018-08-07 13:31:19 +09:00
5f32484be0 New translations ja.yml (French) 2018-08-07 13:31:17 +09:00
7bd33ecc72 ✌️ 2018-08-07 13:25:50 +09:00
e245122f12 New translations ja.yml (English) 2018-08-07 12:41:03 +09:00
d4f7058574 🍕 2018-08-07 12:37:17 +09:00
21570e2111 New translations ja.yml (Catalan) 2018-08-07 11:12:10 +09:00
63e1165a01 New translations ja.yml (Portuguese) 2018-08-07 11:12:07 +09:00
89b5a69127 New translations ja.yml (Korean) 2018-08-07 11:12:04 +09:00
1152a9d03a New translations ja.yml (Polish) 2018-08-07 11:12:02 +09:00
10092d4570 New translations ja.yml (Chinese Simplified) 2018-08-07 11:12:00 +09:00
429b4bec64 New translations ja.yml (Italian) 2018-08-07 11:11:58 +09:00
99f96583b6 New translations ja.yml (Russian) 2018-08-07 11:11:56 +09:00
5adb765f85 New translations ja.yml (English) 2018-08-07 11:11:54 +09:00
0eb787e0d0 New translations ja.yml (Spanish) 2018-08-07 11:11:52 +09:00
4493c856a9 New translations ja.yml (German) 2018-08-07 11:11:50 +09:00
59d3d4a749 New translations ja.yml (French) 2018-08-07 11:11:47 +09:00
980ae3dcb3 Merge pull request #2114 from gutfuckllc/devel
Localized all hiragana lines.
2018-08-07 11:09:55 +09:00
3a76113b78 Merge pull request #2109 from syuilo/l10n_master
New Crowdin translations
2018-08-07 11:09:34 +09:00
ec8105b2ae Merge pull request #2112 from syuilo/greenkeeper/@types/node-10.5.7
Update @types/node to the latest version 🚀
2018-08-07 11:09:16 +09:00
bf05785345 Merge pull request #2110 from syuilo/greenkeeper/typescript-eslint-parser-18.0.0
Update typescript-eslint-parser to the latest version 🚀
2018-08-07 11:09:07 +09:00
82346d788b Merge pull request #2115 from syuilo/greenkeeper/vue-loader-15.2.7
Update vue-loader to the latest version 🚀
2018-08-07 11:08:46 +09:00
d86cfa86e4 fix(package): update vue-loader to version 15.2.7 2018-08-07 02:05:20 +00:00
b85f13dad3 Localize mobile search.vue 2018-08-06 21:06:09 -04:00
eb8c3fe884 Localize a dev file 2018-08-06 21:03:24 -04:00
ff325d9588 Localized annotations line 2018-08-06 21:00:58 -04:00
a98392ff27 Localize "only one file attached" popup 2018-08-06 20:57:14 -04:00
22b8aab7a0 fix(package): update @types/node to version 10.5.7 2018-08-06 22:08:57 +00:00
24de518922 Localized 2 missing lines for mobile widgets.vue 2018-08-06 16:08:54 -04:00
a169c7756f Added more close buttons 2018-08-06 16:05:48 -04:00
249a7f4f68 Slight reordering 2018-08-06 16:05:32 -04:00
4f590e0a96 Localized adjective 2018-08-06 16:04:20 -04:00
f5b5b290e4 Localized copy-paste message (added common) 2018-08-06 16:02:53 -04:00
1f75cf4ace Localize missing line 2018-08-06 16:00:12 -04:00
1e4f11a979 Localize japanese adjective. 2018-08-06 15:58:09 -04:00
be12e23aa1 Localize unlocalized line. 2018-08-06 15:55:39 -04:00
790e6ceca4 Localize unlocalized line 2018-08-06 15:53:21 -04:00
a303d52990 Fix typo 2018-08-06 15:53:06 -04:00
096fab575c fix(package): update typescript-eslint-parser to version 18.0.0 2018-08-06 19:52:58 +00:00
a256393b81 Merge remote-tracking branch 'upstream/master' into devel 2018-08-06 15:45:52 -04:00
e8eee9057a New translations ja.yml (Spanish) 2018-08-07 03:51:39 +09:00
d81acae17e 5.19.0 2018-08-07 03:33:21 +09:00
313715bc75 Merge pull request #2108 from syuilo/l10n_master
New Crowdin translations
2018-08-07 03:32:25 +09:00
94dabd2038 New translations ja.yml (English) 2018-08-07 03:31:58 +09:00
a3d58e5bc7 New translations ja.yml (Catalan) 2018-08-07 03:22:45 +09:00
bfdfd026a2 New translations ja.yml (Portuguese) 2018-08-07 03:22:43 +09:00
b713f06599 New translations ja.yml (Korean) 2018-08-07 03:22:41 +09:00
2172c5edca New translations ja.yml (Polish) 2018-08-07 03:22:39 +09:00
9bc0cfacfa New translations ja.yml (Chinese Simplified) 2018-08-07 03:22:37 +09:00
546cfeadbe New translations ja.yml (Italian) 2018-08-07 03:22:33 +09:00
2413583ce9 New translations ja.yml (Russian) 2018-08-07 03:22:30 +09:00
d7510491a5 New translations ja.yml (English) 2018-08-07 03:22:28 +09:00
61db07edf4 New translations ja.yml (Spanish) 2018-08-07 03:22:25 +09:00
5c3ac8f952 New translations ja.yml (German) 2018-08-07 03:22:22 +09:00
5bfcb75ec3 New translations ja.yml (French) 2018-08-07 03:22:18 +09:00
d733a1b445 i18n 2018-08-07 03:20:26 +09:00
75c44cd349 Merge pull request #2107 from syuilo/l10n_master
New Crowdin translations
2018-08-07 00:28:13 +09:00
f4d247cfae New translations ja.yml (English) 2018-08-07 00:21:42 +09:00
4260ec713f Improve error handling 2018-08-06 21:48:23 +09:00
99f4ab7000 ✌️ 2018-08-06 21:35:49 +09:00
b6157e0012 5.18.0 2018-08-06 18:30:19 +09:00
4405c19852 Merge pull request #2104 from syuilo/greenkeeper/webpack-4.16.5
Update webpack to the latest version 🚀
2018-08-06 18:29:07 +09:00
5f208a7d99 ユーザー検索APIを統合 2018-08-06 18:28:27 +09:00
2ec4cc9a07 fix(package): update webpack to version 4.16.5 2018-08-06 07:19:30 +00:00
06390380f8 Translated mute. 2018-08-06 03:18:52 -04:00
752186066b Merge remote-tracking branch 'upstream/master' into devel 2018-08-05 16:54:54 -04:00
10f9549a04 非公開の投稿に自分以外が返信したりRenoteしたりできないように 2018-08-06 04:38:31 +09:00
84a4174883 削除された投稿に返信したりRenoteしたりできないように 2018-08-06 04:07:22 +09:00
ee765d0812 Fix test 2018-08-06 00:31:09 +09:00
1ccd2def50 5.17.0 2018-08-06 00:15:13 +09:00
0d9782571f 🎨 2018-08-06 00:09:21 +09:00
973018fc98 Merge pull request #2095 from syuilo/l10n_master
New Crowdin translations
2018-08-06 00:01:17 +09:00
d0926a3ba1 MFMの((()))構文が顔文字と競合する対策としてタグ形式の構文も追加 2018-08-05 23:56:08 +09:00
be67f5f422 🎨 2018-08-05 23:38:31 +09:00
b70b607c4f New translations ja.yml (Polish) 2018-08-05 22:00:49 +09:00
2bd38fa052 New translations ja.yml (Polish) 2018-08-05 21:51:12 +09:00
43b6140dbe Fix bug 2018-08-05 21:03:52 +09:00
813804a43e 5.16.0 2018-08-05 21:01:03 +09:00
bec9604445 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-05 20:57:27 +09:00
2e454dad2d 🎨 2018-08-05 20:57:24 +09:00
7d64435e56 Merge pull request #2091 from syuilo/l10n_master
New Crowdin translations
2018-08-05 19:42:59 +09:00
6ef28214df ひとつの投稿内で使えるそれぞれの動きのあるMFM構文は3回までに制限 2018-08-05 19:36:19 +09:00
5bbc95d659 文字数が多い場合は動きを無効に 2018-08-05 19:20:26 +09:00
83794f254c New translations ja.yml (French) 2018-08-05 16:31:14 +09:00
005d25a07b Fix test 2018-08-05 13:50:49 +09:00
255222bfb4 5.15.0 2018-08-05 13:47:51 +09:00
9e5e3c2f2e ✌️ 2018-08-05 13:44:44 +09:00
5bd80f115f Merge pull request #2089 from syuilo/greenkeeper/@types/node-10.5.6
Update @types/node to the latest version 🚀
2018-08-05 13:41:05 +09:00
c86e1a3e9b Merge pull request #2088 from syuilo/greenkeeper/commander-2.17.0
Update commander to the latest version 🚀
2018-08-05 13:40:57 +09:00
128a201b9d #2080 など 2018-08-05 13:40:26 +09:00
b68f74f39c typo 2018-08-05 12:33:55 +09:00
cd28504dd8 Add new MFM syntax 2018-08-05 12:33:51 +09:00
911762fedf Removed start.sh 2018-08-04 13:13:56 -04:00
de448fc99f Added start.sh 2018-08-04 13:13:29 -04:00
a3531981ee New translations ja.yml (French) 2018-08-05 00:30:59 +09:00
fc8d06a9ab New translations ja.yml (Korean) 2018-08-04 23:20:55 +09:00
5de8edf15f New translations ja.yml (Korean) 2018-08-04 23:10:59 +09:00
f762cf2770 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-04 23:04:56 +09:00
d84cae9358 5.14.0 2018-08-04 23:04:45 +09:00
9c54721010 Merge pull request #2090 from syuilo/l10n_master
New Crowdin translations
2018-08-04 23:03:59 +09:00
16f35c81a1 New translations ja.yml (Korean) 2018-08-04 23:00:59 +09:00
d0dbb62a54 New translations ja.yml (English) 2018-08-04 23:00:57 +09:00
9fa68f4478 New translations ja.yml (Catalan) 2018-08-04 22:51:25 +09:00
0d76625868 New translations ja.yml (Portuguese) 2018-08-04 22:51:23 +09:00
5a8a701188 New translations ja.yml (Korean) 2018-08-04 22:51:21 +09:00
121344afbb New translations ja.yml (Polish) 2018-08-04 22:51:19 +09:00
d647cf3446 New translations ja.yml (Chinese Simplified) 2018-08-04 22:51:16 +09:00
04a23b3f2f New translations ja.yml (Italian) 2018-08-04 22:51:14 +09:00
08826e1c41 New translations ja.yml (Russian) 2018-08-04 22:51:12 +09:00
2e31e3c7cb New translations ja.yml (English) 2018-08-04 22:51:10 +09:00
7aed50f9fa New translations ja.yml (Spanish) 2018-08-04 22:51:08 +09:00
2de782dbe4 New translations ja.yml (German) 2018-08-04 22:51:06 +09:00
50693fbe25 New translations ja.yml (French) 2018-08-04 22:51:03 +09:00
9a2ff56a79 動きのあるMFMを無効にするオプションを実装 2018-08-04 22:48:35 +09:00
daed63d66c Update doc 2018-08-04 22:33:37 +09:00
f2241a47b7 New translations ja.yml (Catalan) 2018-08-04 22:31:23 +09:00
de95aac59b New translations ja.yml (Portuguese) 2018-08-04 22:31:20 +09:00
8612ac0c6a New translations ja.yml (Korean) 2018-08-04 22:31:18 +09:00
2118e500a8 New translations ja.yml (Polish) 2018-08-04 22:31:16 +09:00
a7063eab85 New translations ja.yml (Chinese Simplified) 2018-08-04 22:31:14 +09:00
5b5ae0e47f New translations ja.yml (Italian) 2018-08-04 22:31:12 +09:00
b19ecc1a0d New translations ja.yml (Russian) 2018-08-04 22:31:10 +09:00
ac9223957f New translations ja.yml (English) 2018-08-04 22:31:07 +09:00
e580adc41e New translations ja.yml (Spanish) 2018-08-04 22:31:05 +09:00
607a105b78 New translations ja.yml (German) 2018-08-04 22:31:03 +09:00
cc601cf600 New translations ja.yml (French) 2018-08-04 22:31:01 +09:00
be9f6ad294 Implement surrender of reversi 2018-08-04 22:28:01 +09:00
a2952c02cf New translations ja.yml (French) 2018-08-04 21:31:21 +09:00
244d567b3a 5.13.2 2018-08-04 12:38:14 +09:00
61a9ad23f1 Fix bug 2018-08-04 12:35:57 +09:00
4f7c19461e 5.13.1 2018-08-04 11:40:06 +09:00
4ba6e1c2b2 Fix bug 2018-08-04 11:39:59 +09:00
b60af54db1 5.13.0 2018-08-04 11:34:36 +09:00
047320e50a Merge pull request #2085 from syuilo/l10n_master
New Crowdin translations
2018-08-04 11:33:49 +09:00
29418ecbb4 🎨 2018-08-04 11:32:53 +09:00
67e97310cf Clean up 2018-08-04 11:25:39 +09:00
33d3d5c570 スライダーコントロールを追加するなど 2018-08-04 11:24:15 +09:00
864d1a39cd fix(package): update @types/node to version 10.5.6 2018-08-04 01:48:39 +00:00
ee050cc37e ✌️ 2018-08-04 10:40:09 +09:00
e14f244e83 fix(package): update commander to version 2.17.0 2018-08-04 00:14:18 +00:00
1ba43d83b0 New translations ja.yml (French) 2018-08-04 03:23:32 +09:00
72fc6d387f New translations ja.yml (French) 2018-08-04 03:11:27 +09:00
4a935e0659 New translations ja.yml (French) 2018-08-04 03:01:17 +09:00
8a0dab49e0 New translations ja.yml (French) 2018-08-04 02:51:19 +09:00
65574abab7 Merge pull request #2084 from syuilo/l10n_master
New Crowdin translations
2018-08-04 02:14:24 +09:00
37d21462b8 New translations ja.yml (Polish) 2018-08-04 02:11:50 +09:00
1acd25810c Merge pull request #2083 from syuilo/l10n_master
New Crowdin translations
2018-08-04 02:02:04 +09:00
a81b771f15 New translations ja.yml (Polish) 2018-08-04 02:01:40 +09:00
229 changed files with 6766 additions and 2359 deletions

View File

@ -50,8 +50,11 @@ remoteDriveCapacityMb: 8
# If enabled: # If enabled:
# Server will not cache remote files (Using direct link instead). # Server will not cache remote files (Using direct link instead).
# You can save your storage. # You can save your storage.
# Users cannot see remote images when they turn off "Show media from a remote server" setting. #
preventCache: false # NOTE:
# * Users cannot see remote images when they turn off "Show media from a remote server" setting.
# * Since thumbnails are not provided, traffic increases.
preventCacheRemoteFiles: false
drive: drive:
storage: 'db' storage: 'db'
@ -64,7 +67,7 @@ drive:
# config: # config:
# endPoint: # endPoint:
# port: # port:
# secure: # useSSL:
# accessKey: # accessKey:
# secretKey: # secretKey:
@ -75,7 +78,7 @@ drive:
# config: # config:
# endPoint: s3-us-west-2.amazonaws.com # endPoint: s3-us-west-2.amazonaws.com
# region: us-west-2 # region: us-west-2
# secure: true # useSSL: true
# accessKey: XXX # accessKey: XXX
# secretKey: YYY # secretKey: YYY
@ -87,7 +90,7 @@ drive:
# config: # config:
# endPoint: s3-us-west-2.amazonaws.com # endPoint: s3-us-west-2.amazonaws.com
# region: us-west-2 # region: us-west-2
# secure: true # useSSL: true
# accessKey: XXX # accessKey: XXX
# secretKey: YYY # secretKey: YYY
@ -123,6 +126,7 @@ drive:
# google_maps_api_key: example-google-maps-api-key # google_maps_api_key: example-google-maps-api-key
# Twitter integration # Twitter integration
# You need to set the oauth callback url as : https://<your-misskey-instance>/api/tw/cb
# twitter: # twitter:
# consumer_key: example-twitter-consumer-key # consumer_key: example-twitter-consumer-key
# consumer_secret: example-twitter-consumer-secret-key # consumer_secret: example-twitter-consumer-secret-key

1
.gitignore vendored
View File

@ -4,6 +4,7 @@
/node_modules /node_modules
/build /build
/built /built
built
/data /data
/.cache-loader /.cache-loader
npm-debug.log npm-debug.log

View File

@ -22,7 +22,6 @@ addons:
- ubuntu-toolchain-r-test - ubuntu-toolchain-r-test
packages: packages:
- g++-4.8 - g++-4.8
- graphicsmagick
cache: cache:
directories: directories:

4
.vsls.json Normal file
View File

@ -0,0 +1,4 @@
{
"$schema": "http://json.schemastore.org/vsls",
"gitignore": "exclude"
}

View File

@ -5,6 +5,24 @@ ChangeLog
This document describes breaking changes only. This document describes breaking changes only.
7.0.0
-----
### Migration
起動する前に、`node cli/migration/7.0.0`してください。
Please run `node cli/migration/7.0.0` before launch.
6.0.0
-----
### Migration
オブジェクトストレージを使用している場合、設定ファイルの`drive.config.secure``drive.config.useSSL`にリネームしてください。
If you use object storage, please rename `drive.config.secure` to `drive.config.useSSL` in config.
5.0.0 5.0.0
----- -----

View File

@ -7,10 +7,12 @@
[![][dependencies-badge]][dependencies-link] [![][dependencies-badge]][dependencies-link]
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) [![Greenkeeper badge](https://badges.greenkeeper.io/syuilo/misskey.svg)](https://greenkeeper.io/) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) [![Greenkeeper badge](https://badges.greenkeeper.io/syuilo/misskey.svg)](https://greenkeeper.io/)
**Microblogging. Redefined.** Sophisticated microblogging platform, evolving forever.
**[Misskey](https://misskey.xyz)** is a completely open source, [Misskey](https://misskey.xyz) is a decentralized microblogging platform born on Earth.
ultimately sophisticated professional microblogging software. 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?
<a href="https://www.patreon.com/syuilo"><img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" alt="Become a Patron!" width="160" /></a> <a href="https://www.patreon.com/syuilo"><img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" alt="Become a Patron!" width="160" /></a>
@ -28,7 +30,7 @@ ultimately sophisticated professional microblogging software.
and more! You can see it with your own eyes at [misskey.xyz](https://misskey.xyz). and more! You can see it with your own eyes at [misskey.xyz](https://misskey.xyz).
:package: Create your instance :package: Create your own instance
---------------------------------------------------------------- ----------------------------------------------------------------
If you want to run your own instance of Misskey, If you want to run your own instance of Misskey,
please see [Setup and installation guide](./docs/setup.en.md). please see [Setup and installation guide](./docs/setup.en.md).
@ -43,9 +45,40 @@ If you want to...
:heart: Backers & Sponsors :heart: Backers & Sponsors
---------------------------------------------------------------- ----------------------------------------------------------------
| <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"> | <img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12378075/0156f769e20f412594fa6b87d85fe228/1?token-time=2145916800&token-hash=IsIJRUXszzoD6-7pDnRY8I05T9nSznc4GTaxj7C9SwU%3D"> | <img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=S1zP0QyLU52Dqq6dtc9qNYyWfW86XrYHiR4NMbeOrnA%3D"> | <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"> | <!-- PATREON_START -->
|:-:|:-:|:-:|:-:| <table><tr>
| [Gargron](https://www.patreon.com/mastodon) | [39ff](https://www.patreon.com/user/creators?u=12378075) | [dansup](https://www.patreon.com/dansup) | [Takashi Shibuya](https://www.patreon.com/user/creators?u=12531784) | <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12378075/0156f769e20f412594fa6b87d85fe228/1?token-time=2145916800&token-hash=IsIJRUXszzoD6-7pDnRY8I05T9nSznc4GTaxj7C9SwU%3D" alt="39ff"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12731202/0995c46cdcb54153ab5f073f5869b70a/1?token-time=2145916800&token-hash=Yd60FK_SWfQO56SeiJpy1tDHOnCV4xdEywQe8gn5_Wo%3D" alt="negao"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/1?token-time=2145916800&token-hash=f03BFb4S2FUx9YEt87TnEmifb4h33OywGBW2akQVtQY%3D" alt="Melilot"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/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://c8.patreon.com/2/100/12718187" alt="Peter G."></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/2?token-time=2145916800&token-hash=zElv7ZcPL3viGsXbNG_KWiKrbV0vvw1gk0panx8DJoo%3D" alt="Naoki Kosaka"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12931605/ead494101f364dffa90efe49e36fb494/1?token-time=2145916800&token-hash=NzSFPjIlodXyv41rwK61aZWVZWfI4surJaNj8vWKvqM%3D" alt="Reiju"></td>
</tr><tr>
<td><a href="https://www.patreon.com/user?u=12378075">39ff</a></td>
<td><a href="https://www.patreon.com/user?u=12731202">negao</a></td>
<td><a href="https://www.patreon.com/user?u=12913507">Melilot</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/user?u=12718187">Peter G.</a></td>
<td><a href="https://www.patreon.com/user?u=5881381">Naoki Kosaka</a></td>
<td><a href="https://www.patreon.com/user?u=12931605">Reiju</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/4950409/28e7d016209243759d9316be2e21381d/2?token-time=2145916800&token-hash=LuEaDkchH3GQWUcTOhBQ8xfKQYF0s5FjlZRd7Yduia8%3D" alt="mikan54951"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=tMosUojzUYJCH_3t--tvYA-SMCyrS__hzSndyaRSnbo%3D" alt="Takashi Shibuya"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12959468/c249e15aebec4424b5c0f427173671b6/1?token-time=2145916800&token-hash=lubpCEdxAkxPlpR2O6bvZ7BIh8Q4nGf-U_mE1qpjVAQ%3D" alt="fujishan"></td>
</tr><tr>
<td><a href="https://www.patreon.com/dansup">dansup</a></td>
<td><a href="https://www.patreon.com/user?u=4950409">mikan54951</a></td>
<td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
<td><a href="https://www.patreon.com/fujishan">fujishan</a></td>
</tr></table>
**Last updated:** Sat, 18 Aug 2018 02:02:58 UTC
<!-- PATREON_END -->
:four_leaf_clover: Copyright :four_leaf_clover: Copyright
---------------------------------------------------------------- ----------------------------------------------------------------

View File

@ -1,101 +0,0 @@
const chalk = require('chalk');
const log = require('single-line-log').stdout;
const sequential = require('promise-sequential');
const { default: DriveFile, DriveFileChunk } = require('../built/models/drive-file');
const { default: DriveFileThumbnail, DriveFileThumbnailChunk } = require('../built/models/drive-file-thumbnail');
const { default: User } = require('../built/models/user');
const q = {
'metadata._user.host': {
$ne: null
},
'metadata.withoutChunks': false
};
async function main() {
const promiseGens = [];
const count = await DriveFile.count(q);
let prev;
for (let i = 0; i < count; i++) {
promiseGens.push(() => {
const promise = new Promise(async (res, rej) => {
const file = await DriveFile.findOne(prev ? Object.assign({
_id: { $lt: prev._id }
}, q) : q, {
sort: {
_id: -1
}
});
prev = file;
function skip() {
res([i, file, false]);
}
if (file == null) return skip();
log(chalk`{gray ${i}} scanning {bold ${file._id}} ${file.filename} ...`);
const attachingUsersCount = await User.count({
$or: [{
avatarId: file._id
}, {
bannerId: file._id
}]
}, { limit: 1 });
if (attachingUsersCount !== 0) return skip();
Promise.all([
// チャンクをすべて削除
DriveFileChunk.remove({
files_id: file._id
}),
DriveFile.update({ _id: file._id }, {
$set: {
'metadata.withoutChunks': true
}
})
]).then(async () => {
res([i, file, true]);
//#region サムネイルもあれば削除
const thumbnail = await DriveFileThumbnail.findOne({
'metadata.originalId': file._id
});
if (thumbnail) {
DriveFileThumbnailChunk.remove({
files_id: thumbnail._id
});
DriveFileThumbnail.remove({ _id: thumbnail._id });
}
//#endregion
});
});
promise.then(([i, file, deleted]) => {
if (deleted) {
log(chalk`{gray ${i}} {red deleted: {bold ${file._id}} ${file.filename}}`);
} else {
log(chalk`{gray ${i}} {green skipped: {bold ${file._id}} ${file.filename}}`);
}
log.clear();
console.log();
});
return promise;
});
}
return await sequential(promiseGens);
}
main().then(() => {
console.log('ALL DONE');
}).catch(console.error);

View File

@ -1,80 +0,0 @@
const chalk = require('chalk');
const log = require('single-line-log').stdout;
const sequential = require('promise-sequential');
const { default: DriveFile, deleteDriveFile } = require('../built/models/drive-file');
const { default: Note } = require('../built/models/note');
const { default: MessagingMessage } = require('../built/models/messaging-message');
const { default: User } = require('../built/models/user');
async function main() {
const promiseGens = [];
const count = await DriveFile.count({});
let prev;
for (let i = 0; i < count; i++) {
promiseGens.push(() => {
const promise = new Promise(async (res, rej) => {
const file = await DriveFile.findOne(prev ? {
_id: { $lt: prev._id }
} : {}, {
sort: {
_id: -1
}
});
prev = file;
function skip() {
res([i, file, false]);
}
if (file == null) return skip();
log(chalk`{gray ${i}} scanning {bold ${file._id}} ${file.filename} ...`);
const attachingUsersCount = await User.count({
$or: [{
avatarId: file._id
}, {
bannerId: file._id
}]
}, { limit: 1 });
if (attachingUsersCount !== 0) return skip();
const attachingNotesCount = await Note.count({
mediaIds: file._id
}, { limit: 1 });
if (attachingNotesCount !== 0) return skip();
const attachingMessagesCount = await MessagingMessage.count({
fileId: file._id
}, { limit: 1 });
if (attachingMessagesCount !== 0) return skip();
deleteDriveFile(file).then(() => {
res([i, file, true]);
}).catch(rej);
});
promise.then(([i, file, deleted]) => {
if (deleted) {
log(chalk`{gray ${i}} {red deleted: {bold ${file._id}} ${file.filename}}`);
} else {
log(chalk`{gray ${i}} {green skipped: {bold ${file._id}} ${file.filename}}`);
}
log.clear();
console.log();
});
return promise;
});
}
return await sequential(promiseGens);
}
main().then(() => {
console.log('done');
}).catch(console.error);

134
cli/migration/7.0.0.js Normal file
View File

@ -0,0 +1,134 @@
const { default: Stats } = require('../../built/models/stats');
const { default: User } = require('../../built/models/user');
const { default: Note } = require('../../built/models/note');
const { default: DriveFile } = require('../../built/models/drive-file');
const now = new Date();
const y = now.getFullYear();
const m = now.getMonth();
const d = now.getDate();
const today = new Date(y, m, d);
async function main() {
const localUsersCount = await User.count({
host: null
});
const remoteUsersCount = await User.count({
host: { $ne: null }
});
const localNotesCount = await Note.count({
'_user.host': null
});
const remoteNotesCount = await Note.count({
'_user.host': { $ne: null }
});
const localDriveFilesCount = await DriveFile.count({
'metadata._user.host': null
});
const remoteDriveFilesCount = await DriveFile.count({
'metadata._user.host': { $ne: null }
});
const localDriveFilesSize = await DriveFile
.aggregate([{
$match: {
'metadata._user.host': null,
'metadata.deletedAt': { $exists: false }
}
}, {
$project: {
length: true
}
}, {
$group: {
_id: null,
usage: { $sum: '$length' }
}
}])
.then(aggregates => {
if (aggregates.length > 0) {
return aggregates[0].usage;
}
return 0;
});
const remoteDriveFilesSize = await DriveFile
.aggregate([{
$match: {
'metadata._user.host': { $ne: null },
'metadata.deletedAt': { $exists: false }
}
}, {
$project: {
length: true
}
}, {
$group: {
_id: null,
usage: { $sum: '$length' }
}
}])
.then(aggregates => {
if (aggregates.length > 0) {
return aggregates[0].usage;
}
return 0;
});
await Stats.insert({
date: today,
users: {
local: {
total: localUsersCount,
diff: 0
},
remote: {
total: remoteUsersCount,
diff: 0
}
},
notes: {
local: {
total: localNotesCount,
diff: 0,
diffs: {
normal: 0,
reply: 0,
renote: 0
}
},
remote: {
total: remoteNotesCount,
diff: 0,
diffs: {
normal: 0,
reply: 0,
renote: 0
}
}
},
drive: {
local: {
totalCount: localDriveFilesCount,
totalSize: localDriveFilesSize,
diffCount: 0,
diffSize: 0
},
remote: {
totalCount: remoteDriveFilesCount,
totalSize: remoteDriveFilesSize,
diffCount: 0,
diffSize: 0
}
}
});
console.log('done');
}
main();

View File

@ -1,26 +0,0 @@
FROM base/archlinux
MAINTAINER Aya Morisawa
RUN rm /etc/pacman.d/mirrorlist
RUN echo 'Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch' >> /etc/pacman.d/mirrorlist
RUN echo 'Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch' >> /etc/pacman.d/mirrorlist
RUN rm /etc/localtime
RUN ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN pacman -Sy --noconfirm
RUN pacman -S --noconfirm pacman
RUN pacman-db-upgrade
RUN pacman -S --noconfirm archlinux-keyring
RUN pacman -Syyu --noconfirm
RUN pacman -S --noconfirm git nodejs npm mongodb redis
COPY misskey.sh /root/misskey.sh
RUN chmod u+x /root/misskey.sh
EXPOSE 80
EXPOSE 443
EXPOSE 27017
CMD ["/root/misskey.sh"]

View File

@ -1,6 +0,0 @@
#!/bin/sh
redis-server --daemonize yes
mongod > /dev/null &
cd /root/misskey
npm start
tail -f /dev/null

View File

@ -1,29 +0,0 @@
Setup with Docker :whale:
================================================================
Ensure that the working directory is the repository root directory.
To create misskey image:
``` console
$ sudo docker build -t misskey ./docker
```
To run misskey:
``` console
$ sudo docker run --rm -i -t -p $PORT:80 -v $(pwd):/root/misskey -v $DBPATH:/data/db misskey
```
where `$PORT` is the port used to access Misskey Web from host browser
and `$DBPATH` is the path of MongoDB database on the host for data persistence.
ex:
``` console
$ sudo docker run --rm -i -t -p 80:80 -v $(pwd):/root/misskey -v /data/db:/data/db misskey
```
If you want to run misskey in production mode, add `--env NODE_ENV=production` like this:
``` console
$ sudo docker run --rm -i -t -p 80:80 -v $(pwd):/root/misskey -v /data/db:/data/db --env NODE_ENV=production misskey
```
Note that `$(pwd)` is the working directory.

View File

@ -33,14 +33,3 @@ node cli/suspend @syuilo@misskey.xyz
``` shell ``` shell
node cli/reset-password (User-ID or Username) node cli/reset-password (User-ID or Username)
``` ```
## Clean up cached remote files
``` shell
node cli/clean-cached-remote-files
```
## Clean up unused drive files
``` shell
node cli/clean-unused-drive-files
```
> We recommend that you announce a user that unused drive files will be deleted before performing this operation, as it may delete the user's important files.

View File

@ -33,14 +33,3 @@ node cli/suspend @syuilo@misskey.xyz
``` shell ``` shell
node cli/reset-password (ユーザーID または ユーザー名) node cli/reset-password (ユーザーID または ユーザー名)
``` ```
## キャッシュされたリモートファイルをクリーンアップする
``` shell
node cli/clean-cached-remote-files
```
## 使われていないドライブのファイルをクリーンアップする
``` shell
node cli/clean-unused-drive-files
```
> ユーザーの大事なファイルを削除する可能性があるので、この操作を実行する前にユーザーに告知することをお勧めします。

View File

@ -62,6 +62,13 @@ npm install web-push -g
web-push generate-vapid-keys web-push generate-vapid-keys
``` ```
*(optional)* Create a twitter application
----------------------------------------------------------------
If you want to enable the twitter integration, you need to create a twitter app at [https://developer.twitter.com/en/apply/user](https://developer.twitter.com/en/apply/user).
In the app you need to set the oauth callback url as : https://misskey-instance/api/tw/cb
*5.* Make configuration file *5.* Make configuration file
---------------------------------------------------------------- ----------------------------------------------------------------
1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`. 1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`.

5
locales/README.md Normal file
View File

@ -0,0 +1,5 @@
# **Please DO NOT edit these files** except `ja.yml`.
If you want to...
* i18n ... please see [Translation guide](../docs/translate.en.md).
* l10n ... please visit https://crowdin.com/project/misskey

View File

@ -11,6 +11,8 @@ common:
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携" application-authorization: "アプリの連携"
close: "閉じる" close: "閉じる"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
got-it: "わかった"
customization-tips: customization-tips:
title: "カスタマイズのヒント" title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -26,7 +28,6 @@ common:
notified-by: "{}さんから" notified-by: "{}さんから"
reply-from: "{}さんから返信:" reply-from: "{}さんから返信:"
quoted-by: "{}さんが引用:" quoted-by: "{}さんが引用:"
name: "Misskey"
time: time:
unknown: "なぞのじかん" unknown: "なぞのじかん"
future: "未来" future: "未来"
@ -38,13 +39,8 @@ common:
weeks_ago: "{}週間前" weeks_ago: "{}週間前"
months_ago: "{}ヶ月前" months_ago: "{}ヶ月前"
years_ago: "{}年前" years_ago: "{}年前"
month-and-day: "{month}月 {day}日"
trash: "ゴミ箱" trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short: weekday-short:
sunday: "日" sunday: "日"
monday: "月" monday: "月"
@ -70,6 +66,7 @@ common:
congrats: "おめでとう" congrats: "おめでとう"
angry: "おこ" angry: "おこ"
confused: "こまこまのこまり" confused: "こまこまのこまり"
rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-placeholders: note-placeholders:
a: "今どうしてる?" a: "今どうしてる?"
@ -87,7 +84,8 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き" i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示" show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー" verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
reversi: reversi:
drawn: "引き分け" drawn: "引き分け"
my-turn: "あなたのターンです" my-turn: "あなたのターンです"
@ -168,6 +166,12 @@ common/views/components/games/reversi/reversi.vue:
matching: matching:
waiting-for: "{}を待っています" waiting-for: "{}を待っています"
cancel: "キャンセル" cancel: "キャンセル"
common/views/components/games/reversi/reversi.game.vue:
surrender: "投了"
surrendered: "投了により"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
common/views/components/games/reversi/reversi.index.vue: common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi" title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう" sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
@ -235,11 +239,13 @@ common/views/components/messaging-room.vue:
no-history: "これより過去の履歴はありません" no-history: "これより過去の履歴はありません"
resize-form: "ドラッグしてフォームの広さを調整" resize-form: "ドラッグしてフォームの広さを調整"
new-message: "新しいメッセージがあります" new-message: "新しいメッセージがあります"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.form.vue: common/views/components/messaging-room.form.vue:
input-message-here: "ここにメッセージを入力" input-message-here: "ここにメッセージを入力"
send: "送信" send: "送信"
attach-from-local: "PCからファイルを添付する" attach-from-local: "PCからファイルを添付する"
attach-from-drive: "ドライブからファイルを添付する" attach-from-drive: "ドライブからファイルを添付する"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.message.vue: common/views/components/messaging-room.message.vue:
is-read: "既読" is-read: "既読"
deleted: "このメッセージは削除されました" deleted: "このメッセージは削除されました"
@ -279,7 +285,12 @@ common/views/components/signin.vue:
token: "トークン" token: "トークン"
signing-in: "やってます..." signing-in: "やってます..."
signin: "サインイン" signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue: common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "ユーザー名" username: "ユーザー名"
checking: "確認しています..." checking: "確認しています..."
available: "利用できます" available: "利用できます"
@ -388,6 +399,17 @@ common/views/pages/follow.vue:
follow: "フォロー" follow: "フォロー"
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-request: "フォロー申請" follow-request: "フォロー申請"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -522,6 +544,8 @@ desktop/views/components/notes.note.vue:
detail: "詳細" detail: "詳細"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
hide: "隠す"
see-more: "もっと見る"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "読み込みに失敗しました。" error: "読み込みに失敗しました。"
retry: "リトライ" retry: "リトライ"
@ -557,6 +581,7 @@ desktop/views/components/post-form.vue:
geolocation-alert: "お使いの端末は位置情報に対応していません" geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー" error: "エラー"
enter-username: "ユーザー名を入力してください" enter-username: "ユーザー名を入力してください"
annotations: "内容への注釈 (オプション)"
desktop/views/components/post-form-window.vue: desktop/views/components/post-form-window.vue:
note: "新規投稿" note: "新規投稿"
reply: "返信" reply: "返信"
@ -603,9 +628,11 @@ desktop/views/components/settings.vue:
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用" gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開" show-maps: "マップの自動展開"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。" show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "サウンド" sound: "サウンド"
@ -718,6 +745,7 @@ desktop/views/components/timeline.vue:
list: "リスト" list: "リスト"
desktop/views/components/ui.header.vue: desktop/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "おかえりなさい、"
adjective: "さん"
desktop/views/components/ui.header.account.vue: desktop/views/components/ui.header.account.vue:
profile: "プロフィール" profile: "プロフィール"
drive: "ドライブ" drive: "ドライブ"
@ -746,6 +774,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
following: "フォロー" following: "フォロー"
@ -760,6 +789,46 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "閉じる"
desktop/views/pages/admin/admin.vue:
dashboard: "ダッシュボード"
drive: "ドライブ"
users: "ユーザー"
update: "更新"
desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
suspended: "凍結しました"
desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/admin/admin.notes-chart.vue:
title: "投稿"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.users-chart.vue:
title: "ユーザー"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.drive-chart.vue:
title: "ドライブ"
local: "ローカル"
remote: "リモート"
desktop/views/pages/deck/deck.tl-column.vue: desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
@ -792,7 +861,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "キャンセル" cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード" upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue: desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。" not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。" not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue: desktop/views/pages/share.vue:
share-with: "{}で共有" share-with: "{}で共有"
@ -828,6 +897,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"
following: "フォロー" following: "フォロー"
@ -955,6 +1026,7 @@ mobile/views/components/timeline.vue:
load-more: "もっと" load-more: "もっと"
mobile/views/components/ui.header.vue: mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "おかえりなさい、"
adjective: "さん"
mobile/views/components/ui.nav.vue: mobile/views/components/ui.nav.vue:
timeline: "タイムライン" timeline: "タイムライン"
notifications: "通知" notifications: "通知"
@ -1003,6 +1075,8 @@ mobile/views/pages/welcome.vue:
mobile/views/pages/widgets.vue: mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード" dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。" widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
add-widget: "追加"
customization-tips: "カスタマイズのヒント"
mobile/views/pages/widgets/activity.vue: mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ" activity: "アクティビティ"
mobile/views/pages/share.vue: mobile/views/pages/share.vue:
@ -1041,6 +1115,7 @@ mobile/views/pages/settings/settings.profile.vue:
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "検索" search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
mobile/views/pages/selectdrive.vue: mobile/views/pages/selectdrive.vue:
select-file: "ファイルを選択" select-file: "ファイルを選択"
mobile/views/pages/settings.vue: mobile/views/pages/settings.vue:
@ -1057,7 +1132,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する" show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
@ -1135,3 +1211,5 @@ docs:
name: "名前" name: "名前"
type: "型" type: "型"
description: "説明" description: "説明"
dev/views/index.vue:
manage-apps: "アプリの管理"

View File

@ -11,6 +11,8 @@ common:
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携" application-authorization: "アプリの連携"
close: "閉じる" close: "閉じる"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
got-it: "わかった"
customization-tips: customization-tips:
title: "カスタマイズのヒント" title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -26,7 +28,6 @@ common:
notified-by: "{}さんから" notified-by: "{}さんから"
reply-from: "{}さんから返信:" reply-from: "{}さんから返信:"
quoted-by: "{}さんが引用:" quoted-by: "{}さんが引用:"
name: "Misskey"
time: time:
unknown: "Unbekannt" unknown: "Unbekannt"
future: "Zukunft" future: "Zukunft"
@ -38,13 +39,8 @@ common:
weeks_ago: "vor {0} Woche{0:n}" weeks_ago: "vor {0} Woche{0:n}"
months_ago: "vor {0} Monat{0:en}" months_ago: "vor {0} Monat{0:en}"
years_ago: "vor {} Jahr{0:en}" years_ago: "vor {} Jahr{0:en}"
month-and-day: "{month}月 {day}日"
trash: "ゴミ箱" trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short: weekday-short:
sunday: "So" sunday: "So"
monday: "Mo" monday: "Mo"
@ -70,6 +66,7 @@ common:
congrats: "Glückwunsch!" congrats: "Glückwunsch!"
angry: "Wütend" angry: "Wütend"
confused: "Verwirrt" confused: "Verwirrt"
rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-placeholders: note-placeholders:
a: "Was machst du gerade?" a: "Was machst du gerade?"
@ -87,7 +84,8 @@ common:
my-token-regenerated: "Dein Token wurde generiert. Du wirst jetzt abgemeldet." my-token-regenerated: "Dein Token wurde generiert. Du wirst jetzt abgemeldet."
i-like-sushi: "私は(プリンよりむしろ)寿司が好き" i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示" show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー" verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
reversi: reversi:
drawn: "引き分け" drawn: "引き分け"
my-turn: "あなたのターンです" my-turn: "あなたのターンです"
@ -168,6 +166,12 @@ common/views/components/games/reversi/reversi.vue:
matching: matching:
waiting-for: "{}を待っています" waiting-for: "{}を待っています"
cancel: "キャンセル" cancel: "キャンセル"
common/views/components/games/reversi/reversi.game.vue:
surrender: "投了"
surrendered: "投了により"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
common/views/components/games/reversi/reversi.index.vue: common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi" title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう" sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
@ -235,11 +239,13 @@ common/views/components/messaging-room.vue:
no-history: "Keine weitere Chronik vorhanden" no-history: "Keine weitere Chronik vorhanden"
resize-form: "Ziehen um die Größe zu verändern" resize-form: "Ziehen um die Größe zu verändern"
new-message: "Neue Nachricht" new-message: "Neue Nachricht"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.form.vue: common/views/components/messaging-room.form.vue:
input-message-here: "Nachricht hier eingeben" input-message-here: "Nachricht hier eingeben"
send: "Senden" send: "Senden"
attach-from-local: "Wähle Dateien von deinem PC aus" attach-from-local: "Wähle Dateien von deinem PC aus"
attach-from-drive: "Wähle Dateien von deinem Speicher aus" attach-from-drive: "Wähle Dateien von deinem Speicher aus"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.message.vue: common/views/components/messaging-room.message.vue:
is-read: "Gelesen" is-read: "Gelesen"
deleted: "Diese Nachricht wurde gelöscht" deleted: "Diese Nachricht wurde gelöscht"
@ -279,7 +285,12 @@ common/views/components/signin.vue:
token: "Token" token: "Token"
signing-in: "Melde an..." signing-in: "Melde an..."
signin: "Anmelden" signin: "Anmelden"
or: "または"
signin-with-twitter: "Twitterでログイン"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue: common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "Benutzername" username: "Benutzername"
checking: "Überprüfung..." checking: "Überprüfung..."
available: "Verfügbar" available: "Verfügbar"
@ -388,6 +399,17 @@ common/views/pages/follow.vue:
follow: "フォロー" follow: "フォロー"
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-request: "フォロー申請" follow-request: "フォロー申請"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Schwarz ... komplett" total: "Schwarz ... komplett"
notes: "Blau ... Hinweise" notes: "Blau ... Hinweise"
@ -522,6 +544,8 @@ desktop/views/components/notes.note.vue:
detail: "Zeige Details" detail: "Zeige Details"
private: "Dieser Beitrag ist eine privat" private: "Dieser Beitrag ist eine privat"
deleted: "Dieser Beitrag wurde entfernt" deleted: "Dieser Beitrag wurde entfernt"
hide: "隠す"
see-more: "もっと見る"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "Laden fehlgeschlagen." error: "Laden fehlgeschlagen."
retry: "Erneut versuchen" retry: "Erneut versuchen"
@ -557,6 +581,7 @@ desktop/views/components/post-form.vue:
geolocation-alert: "お使いの端末は位置情報に対応していません" geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー" error: "エラー"
enter-username: "ユーザー名を入力してください" enter-username: "ユーザー名を入力してください"
annotations: "内容への注釈 (オプション)"
desktop/views/components/post-form-window.vue: desktop/views/components/post-form-window.vue:
note: "Neue Notiz" note: "Neue Notiz"
reply: "Antworten" reply: "Antworten"
@ -603,9 +628,11 @@ desktop/views/components/settings.vue:
circle-icons: "Kreisförmige Icons" circle-icons: "Kreisförmige Icons"
gradient-window-header: "Übergang in Fensterköpfen" gradient-window-header: "Übergang in Fensterköpfen"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-reply-target: "Zeige Antworten" show-reply-target: "Zeige Antworten"
show-my-renotes: "Zeige meine Reposts auf der Zeitleiste" show-my-renotes: "Zeige meine Reposts auf der Zeitleiste"
show-renoted-my-notes: "Zeige meine Reposts, die geteilt wurden, auf der Zeitleiste" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "Karte anzeigen" show-maps: "Karte anzeigen"
show-maps-desc: "Zeige den Standort zu diesem Beitrag automatisch an." show-maps-desc: "Zeige den Standort zu diesem Beitrag automatisch an."
sound: "Ton" sound: "Ton"
@ -718,6 +745,7 @@ desktop/views/components/timeline.vue:
list: "Listen" list: "Listen"
desktop/views/components/ui.header.vue: desktop/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "おかえりなさい、"
adjective: "さん"
desktop/views/components/ui.header.account.vue: desktop/views/components/ui.header.account.vue:
profile: "Dein Profil" profile: "Dein Profil"
drive: "Speicher" drive: "Speicher"
@ -746,6 +774,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
following: "フォロー" following: "フォロー"
@ -760,6 +789,46 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "閉じる"
desktop/views/pages/admin/admin.vue:
dashboard: "ダッシュボード"
drive: "ドライブ"
users: "ユーザー"
update: "更新"
desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
suspended: "凍結しました"
desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/admin/admin.notes-chart.vue:
title: "投稿"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.users-chart.vue:
title: "ユーザー"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.drive-chart.vue:
title: "ドライブ"
local: "ローカル"
remote: "リモート"
desktop/views/pages/deck/deck.tl-column.vue: desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
@ -792,7 +861,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "Abbrechen" cancel: "Abbrechen"
upload: "PCからドライブにファイルをアップロード" upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue: desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。" not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。" not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue: desktop/views/pages/share.vue:
share-with: "{}で共有" share-with: "{}で共有"
@ -828,6 +897,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"
following: "フォロー" following: "フォロー"
@ -955,6 +1026,7 @@ mobile/views/components/timeline.vue:
load-more: "もっと" load-more: "もっと"
mobile/views/components/ui.header.vue: mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "おかえりなさい、"
adjective: "さん"
mobile/views/components/ui.nav.vue: mobile/views/components/ui.nav.vue:
timeline: "タイムライン" timeline: "タイムライン"
notifications: "通知" notifications: "通知"
@ -1003,6 +1075,8 @@ mobile/views/pages/welcome.vue:
mobile/views/pages/widgets.vue: mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード" dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。" widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
add-widget: "追加"
customization-tips: "カスタマイズのヒント"
mobile/views/pages/widgets/activity.vue: mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ" activity: "アクティビティ"
mobile/views/pages/share.vue: mobile/views/pages/share.vue:
@ -1041,6 +1115,7 @@ mobile/views/pages/settings/settings.profile.vue:
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "検索" search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
mobile/views/pages/selectdrive.vue: mobile/views/pages/selectdrive.vue:
select-file: "ファイルを選択" select-file: "ファイルを選択"
mobile/views/pages/settings.vue: mobile/views/pages/settings.vue:
@ -1057,7 +1132,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する" show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
@ -1135,3 +1211,5 @@ docs:
name: "名前" name: "名前"
type: "型" type: "型"
description: "説明" description: "説明"
dev/views/index.vue:
manage-apps: "アプリの管理"

View File

@ -8,15 +8,17 @@ 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?" 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?"
adblock: adblock:
detected: "Please disable ad blocker." detected: "Please disable ad blocker."
warning: "<strong>Misskey is not running ads</strong>, but some features may be unavailable or malfunctioning if ad blocking features are enabled." warning: "Some features may be unavailable or cause malfunctions if ad blocking features are enabled. <strong>Misskey is not running ads</strong>."
application-authorization: "Application authorizations." application-authorization: "Application authorizations"
close: "Close" close: "Close"
do-not-copy-paste: "Please do not enter or paste the code here. Account may be compromised."
got-it: "Got it!"
customization-tips: customization-tips:
title: "Customization tips" title: "Customization tips"
paragraph1: "Home customization allows you to add/delete, drag and drop and rearrange widgets." paragraph1: "Home customization allows you to add/delete, drag and drop and rearrange widgets."
paragraph2: "You can change the display by <strong>right clicking</strong> on some widgets." paragraph2: "You can change the display by <strong><strong>right</strong> clicking</strong> on some widgets."
paragraph3: "To delete a widget, <strong>drag and drop the widget onto the area labeled \"Trash\"</strong> in the header." paragraph3: "To delete a widget, drag and drop the widget onto <strong>the area labeled \"Trash\"</strong> in the header."
paragraph4: "To finish the customization, click \"Finish\" in the upper right." paragraph4: "To finish the customization, click \"Finish\" on the upper right."
gotit: "Got it!" gotit: "Got it!"
notification: notification:
file-uploaded: "File uploaded!" file-uploaded: "File uploaded!"
@ -26,7 +28,6 @@ common:
notified-by: "Notified by {}:" notified-by: "Notified by {}:"
reply-from: "Reply from {}:" reply-from: "Reply from {}:"
quoted-by: "Quoted by {}:" quoted-by: "Quoted by {}:"
name: "Misskey"
time: time:
unknown: "unknown" unknown: "unknown"
future: "future" future: "future"
@ -38,13 +39,8 @@ common:
weeks_ago: "{}week(s) ago" weeks_ago: "{}week(s) ago"
months_ago: "{}month(s) ago" months_ago: "{}month(s) ago"
years_ago: "{}year(s) ago" years_ago: "{}year(s) ago"
month-and-day: "{month}/{day}"
trash: "Trash" trash: "Trash"
date:
full-year: "Year"
month: "Month"
day: "Day"
hours: "Hour"
minutes: "Minutes"
weekday-short: weekday-short:
sunday: "S" sunday: "S"
monday: "M" monday: "M"
@ -70,14 +66,15 @@ common:
congrats: "Congrats!" congrats: "Congrats!"
angry: "Angry" angry: "Angry"
confused: "Confused" confused: "Confused"
rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-placeholders: note-placeholders:
a: "What are you doing?" a: "What are you doing?"
b: "What's happening?" b: "What's happening?"
c: "Whats on your mind?" c: "Whats on your mind?"
d: "What do you wish to say?" d: "Would you post any words?"
e: "Write here" e: "Write here"
f: "Waiting for your writing..." f: "Waiting for your writing."
search: "Search" search: "Search"
delete: "Delete" delete: "Delete"
loading: "Loading" loading: "Loading"
@ -87,7 +84,8 @@ common:
my-token-regenerated: "Your token has been regenerated, so you will be signed out." my-token-regenerated: "Your token has been regenerated, so you will be signed out."
i-like-sushi: "I prefer sushi rather than pudding" i-like-sushi: "I prefer sushi rather than pudding"
show-reversi-board-labels: "Show row and column labels in Reversi" show-reversi-board-labels: "Show row and column labels in Reversi"
verified-user: "Verified user" verified-user: "Verified account"
disable-animated-mfm: "Disable animated texts in a post"
reversi: reversi:
drawn: "Draw" drawn: "Draw"
my-turn: "Your turn" my-turn: "Your turn"
@ -143,23 +141,23 @@ common:
auth/views/form.vue: auth/views/form.vue:
share-access: "Would you <b>allow</b> <i>{{ app.name }}</i> to access your account?" share-access: "Would you <b>allow</b> <i>{{ app.name }}</i> to access your account?"
permission-ask: "This application requires the following permissions:" permission-ask: "This application requires the following permissions:"
account-read: "Viewing account information:" account-read: "View account information."
account-write: "Modify account informations:" account-write: "Modify account information."
note-write: "Post." note-write: "Post."
like-write: "To react to posts." like-write: "React to posts."
following-write: "Follow or unfollow." following-write: "Follow and unfollow."
drive-read: "Read your drive." drive-read: "Read your drive."
drive-write: "Upload/delete files in your drive." drive-write: "Upload/delete files in your drive."
notification-read: "Read your notifications." notification-read: "Read your notifications."
notification-write: "Manage your notifications." notification-write: "Manage your notifications."
cancel: "Cancel" cancel: "Cancel"
accept: "Grant access." accept: "Allow access."
auth/views/index.vue: auth/views/index.vue:
loading: "Loading" loading: "Loading"
denied: "Application authorization denied." denied: "Application authorization has been denied."
denied-paragraph: "This application will not access your account." denied-paragraph: "This application will not access your account."
already-authorized: "This application has already been authorized." already-authorized: "This application has already been authorized."
allowed: "Application authorizations allowed.+" allowed: "Application authorizations allowed."
callback-url: "Going back to the application." callback-url: "Going back to the application."
please-go-back: "Please go back to the application." please-go-back: "Please go back to the application."
error: "Session does not exist." error: "Session does not exist."
@ -168,6 +166,12 @@ common/views/components/games/reversi/reversi.vue:
matching: matching:
waiting-for: "Waiting for {}" waiting-for: "Waiting for {}"
cancel: "Cancel" cancel: "Cancel"
common/views/components/games/reversi/reversi.game.vue:
surrender: "Surrender"
surrendered: "By surrender"
is-llotheo: "The lesser one wins(Llotheo)"
looped-map: "Looped map"
can-put-everywhere: "Can put everywhere"
common/views/components/games/reversi/reversi.index.vue: common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi" title: "Misskey Reversi"
sub-title: "Play reversi with your friends!" sub-title: "Play reversi with your friends!"
@ -175,13 +179,13 @@ common/views/components/games/reversi/reversi.index.vue:
rule: "How to play" rule: "How to play"
rule-desc: "Reversi is a strategy board game for two players, played on an 8×8 uncheckered board. There are sixty-four identical game pieces called disks (often spelled \"discs\"), which are light on one side and dark on the other. Players take turns placing disks on the board with their assigned color facing up. During a play, any disks of the opponent's color that are in a straight line and bounded by the disk just placed and another disk of the current player's color are turned over to the current player's color. The object of the game is to have the majority of disks turned to display your color when the last playable empty square is filled." rule-desc: "Reversi is a strategy board game for two players, played on an 8×8 uncheckered board. There are sixty-four identical game pieces called disks (often spelled \"discs\"), which are light on one side and dark on the other. Players take turns placing disks on the board with their assigned color facing up. During a play, any disks of the opponent's color that are in a straight line and bounded by the disk just placed and another disk of the current player's color are turned over to the current player's color. The object of the game is to have the majority of disks turned to display your color when the last playable empty square is filled."
mode-invite: "Invite" mode-invite: "Invite"
mode-invite-desc: "Invite to the game a user." mode-invite-desc: "Game with a specified user."
invitations: "You received invitation!" invitations: "Youve got an invitation!"
my-games: "My games" my-games: "My game"
all-games: "All games" all-games: "All games"
enter-username: "Enter username" enter-username: "Enter a username"
game-state: game-state:
ended: "Ended" ended: "Finished"
playing: "In Progress" playing: "In Progress"
common/views/components/games/reversi/reversi.room.vue: common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "Game settings" settings-of-the-game: "Game settings"
@ -190,20 +194,20 @@ common/views/components/games/reversi/reversi.room.vue:
black-or-white: "Black/White" black-or-white: "Black/White"
black-is: "Black is {}" black-is: "Black is {}"
rules: "Rules" rules: "Rules"
is-llotheo: "The lesser one wins" is-llotheo: "The lesser side wins"
looped-map: "Looped map" looped-map: "Looped map"
can-put-everywhere: "Can put everywhere" can-put-everywhere: "Can put everywhere"
settings-of-the-bot: "Bot settings" settings-of-the-bot: "Bot settings"
this-game-is-started-soon: "The game will begin soon" this-game-is-started-soon: "The game will begin in seconds"
waiting-for-other: "Waiting for the other party's preparation" waiting-for-other: "Waiting for the opponent"
waiting-for-me: "Waiting for the your preparation" waiting-for-me: "Waiting for the your preparation"
waiting-for-both: "Waiting for yours" waiting-for-both: "Prepareing"
cancel: "Cancel" cancel: "Cancel"
ready: "Ready" ready: "Ready"
cancel-ready: "Cancel \"Ready\"" cancel-ready: "Cancel \"Ready\""
common/views/components/connect-failed.vue: common/views/components/connect-failed.vue:
title: "Unable to connect to the server" title: "Unable to connect to the server"
description: "There is a problem with your Internet connection, or the server may be down or under maintenance. Please try again later." description: "There is a problem with your Internet connection, or the server may be down or under maintenance. Please {try again} later."
thanks: "Thank you for using Misskey." thanks: "Thank you for using Misskey."
troubleshoot: "Troubleshoot" troubleshoot: "Troubleshoot"
common/views/components/connect-failed.troubleshooter.vue: common/views/components/connect-failed.troubleshooter.vue:
@ -222,7 +226,7 @@ common/views/components/connect-failed.troubleshooter.vue:
no-server: "Unable to connect to the Misskey server" no-server: "Unable to connect to the Misskey server"
no-server-desc: "The network connection of your device is normal, but you could not connect to the Misskey server. There is a possibility that the server is either down, or under maintenance, please try again later." no-server-desc: "The network connection of your device is normal, but you could not connect to the Misskey server. There is a possibility that the server is either down, or under maintenance, please try again later."
success: "Successfully connected to the Misskey server" success: "Successfully connected to the Misskey server"
success-desc: "It seems to be able to connect. Please reload the page." success-desc: "Looks like we have a connection. Please reload the page."
flush: "Clean cache" flush: "Clean cache"
set-version: "Specify version" set-version: "Specify version"
common/views/components/messaging.vue: common/views/components/messaging.vue:
@ -235,11 +239,13 @@ common/views/components/messaging-room.vue:
no-history: "There is no further history" no-history: "There is no further history"
resize-form: "Drag to resize" resize-form: "Drag to resize"
new-message: "New message" new-message: "New message"
only-one-file-attached: "Only ONE file can be attached to a message."
common/views/components/messaging-room.form.vue: common/views/components/messaging-room.form.vue:
input-message-here: "Enter message here" input-message-here: "Enter message here"
send: "Send" send: "Send"
attach-from-local: "Attach files from your device" attach-from-local: "Attach files from your device"
attach-from-drive: "Attach files from your Drive" attach-from-drive: "Attach files from your Drive"
only-one-file-attached: "Only one file can be attached to the message."
common/views/components/messaging-room.message.vue: common/views/components/messaging-room.message.vue:
is-read: "Read" is-read: "Read"
deleted: "This message has been deleted" deleted: "This message has been deleted"
@ -254,9 +260,9 @@ common/views/components/nav.vue:
feedback: "Feedback" feedback: "Feedback"
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
favorite: "Favorite this note" favorite: "Favorite this note"
pin: "Pin to your profile page" pin: "Pin to your profile"
delete: "Delete" delete: "Delete"
delete-confirm: "Are you sure you want to delete this post?" delete-confirm: "Delete this post?"
remote: "Show original note" remote: "Show original note"
common/views/components/poll.vue: common/views/components/poll.vue:
vote-to: "Vote for '{}'" vote-to: "Vote for '{}'"
@ -266,30 +272,35 @@ common/views/components/poll.vue:
show-result: "Show results" show-result: "Show results"
voted: "Voted" voted: "Voted"
common/views/components/poll-editor.vue: common/views/components/poll-editor.vue:
no-only-one-choice: "At least two choices are required for this survey." no-only-one-choice: "At least two choices are required"
choice-n: "Choice {}" choice-n: "Choice {}"
remove: "Delete this choice" remove: "Delete the choice"
add: "+ Add a choice" add: "+ Add a choice"
destroy: "Discard the poll" destroy: "Discard the poll"
common/views/components/reaction-picker.vue: common/views/components/reaction-picker.vue:
choose-reaction: "Express a reaction" choose-reaction: "Send a reaction"
common/views/components/signin.vue: common/views/components/signin.vue:
username: "Username" username: "Username"
password: "Password" password: "Password"
token: "Token" token: "Token"
signing-in: "Signing in..." signing-in: "Signing in..."
signin: "Sign in" signin: "Sign in"
or: "Or"
signin-with-twitter: "Log in with Twitter"
login-failed: "Log in failed. Make sure you have entered your correct username and password."
common/views/components/signup.vue: common/views/components/signup.vue:
invitation-code: "Invitation code"
invitation-info: "If you do not have an invitation code, please contact an <a href=\"{}\">administrator</a>."
username: "Username" username: "Username"
checking: "Checking..." checking: "Confirming..."
available: "Available" available: "Available"
unavailable: "Unavailable" unavailable: "Unavailable"
error: "Network error" error: "Network error"
invalid-format: "Only use letters, numbers and -." invalid-format: "letters, numbers and _ are acceptable."
too-short: "Please enter at least 1 character!" too-short: "Should not be blank!"
too-long: "Please enter up to 20 characters." too-long: "Enter within 20 characters."
password: "Password" password: "Password"
password-placeholder: "We recommend more than 8 characters." password-placeholder: "More than 8 characters are recommended."
weak-password: "Weak password" weak-password: "Weak password"
normal-password: "Fair password" normal-password: "Fair password"
strong-password: "Strong password" strong-password: "Strong password"
@ -319,9 +330,9 @@ common/views/components/uploader.vue:
common/views/components/visibility-chooser.vue: common/views/components/visibility-chooser.vue:
public: "Public" public: "Public"
home: "Home" home: "Home"
home-desc: "Post to the home timeline only" home-desc: "Post to Home only"
followers: "Followers" followers: "Followers"
followers-desc: "Post to followers only" followers-desc: "Post to Followers only"
specified: "Direct" specified: "Direct"
specified-desc: "Post to specified users only" specified-desc: "Post to specified users only"
private: "Private" private: "Private"
@ -332,14 +343,14 @@ common/views/widgets/broadcast.vue:
next: "Next" next: "Next"
common/views/widgets/calendar.vue: common/views/widgets/calendar.vue:
year: "Year {}" year: "Year {}"
month: "Month {}" month: "{},"
day: "Day {}" day: "{}"
today: "Today: " today: "Today: "
this-month: "This month: " this-month: "This month: "
this-year: "This year: " this-year: "This year: "
common/views/widgets/donation.vue: common/views/widgets/donation.vue:
title: "Request for donations" title: "Request for donations"
text: "To keep Misskey up and running, we have to spend money on our domain name, the server costs and so on. Since we don't receive money from advertisements, we count on donations from all of you. If you're interested in helping, contact {}. Thank you for your contribution!" 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!"
common/views/widgets/photo-stream.vue: common/views/widgets/photo-stream.vue:
title: "Photo stream" title: "Photo stream"
no-photos: "No photos" no-photos: "No photos"
@ -380,14 +391,25 @@ common/views/widgets/tips.vue:
tips-line20: "The percentage of the calendar widget shows the percentage of time elapsed." tips-line20: "The percentage of the calendar widget shows the percentage of time elapsed."
tips-line21: "You can also use the API to develop bots." tips-line21: "You can also use the API to develop bots."
tips-line23: "Mayu is so cute with its eyebrows." tips-line23: "Mayu is so cute with its eyebrows."
tips-line24: "Misskey started in 2014." tips-line24: "Misskey has been running since 2014."
tips-line25: "You can receive notification even if Misskey is not open in a compatible browser." tips-line25: "In a browser compatible with notification features, you can receive notifications in case Misskey is not open"
common/views/pages/follow.vue: common/views/pages/follow.vue:
signed-in-as: "Signed in as {}" signed-in-as: "Signed in as {}"
following: "Following" following: "Following"
follow: "Follow" follow: "Follow"
request-pending: "Pending follow request" request-pending: "Pending follow request"
follow-request: "Follow request" follow-request: "Follow request"
desktop:
banner-crop-title: "Crop the part that appears as a banner"
banner: "Banner"
uploading-banner: "Uploading a new banner"
banner-updated: "Successfully updated the banner"
choose-banner: "Choose the banner"
avatar-crop-title: "Crop the part that appears as an avatar"
avatar: "Avatar"
uploading-avatar: "Uploading a new avatar"
avatar-updated: "Successfully updated the avatar"
choose-avatar: "Select an image for the avatar"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -435,7 +457,7 @@ desktop/views/components/drive.file.vue:
rename-file: "Rename file" rename-file: "Rename file"
input-new-file-name: "Enter new name" input-new-file-name: "Enter new name"
copied: "Copied" copied: "Copied"
copied-url-to-clipboard: "Copied URL to clipboard" copied-url-to-clipboard: "URL has been copied to clipboard"
desktop/views/components/drive.folder.vue: desktop/views/components/drive.folder.vue:
unable-to-process: "The operation could not be completed." unable-to-process: "The operation could not be completed."
circular-reference-detected: "The destination folder is a subfolder of the folder you wish to move." circular-reference-detected: "The destination folder is a subfolder of the folder you wish to move."
@ -451,7 +473,7 @@ desktop/views/components/drive.nav-folder.vue:
desktop/views/components/drive.vue: desktop/views/components/drive.vue:
search: "Search" search: "Search"
load-more: "Load more" load-more: "Load more"
empty-draghover: "Drop it here, don't I look cute?" empty-draghover: "Drop it here! Yep, cuz you know I'm cute, right?"
empty-drive: "Your media storage is empty" empty-drive: "Your media storage is empty"
empty-drive-description: "Right-click to open the menu, or drag and drop a file onto here for uploading." empty-drive-description: "Right-click to open the menu, or drag and drop a file onto here for uploading."
empty-folder: "This folder is empty" empty-folder: "This folder is empty"
@ -461,7 +483,7 @@ desktop/views/components/drive.vue:
url-upload: "Upload from a URL" url-upload: "Upload from a URL"
url-of-file: "URL of file you want to upload" url-of-file: "URL of file you want to upload"
url-upload-requested: "Upload requested" url-upload-requested: "Upload requested"
may-take-time: "It may take some time for the upload to complete." may-take-time: "It may take some time until the upload is complete."
create-folder: "Create a folder" create-folder: "Create a folder"
folder-name: "Folder name" folder-name: "Folder name"
contextmenu: contextmenu:
@ -469,7 +491,7 @@ desktop/views/components/drive.vue:
upload: "Upload a file" upload: "Upload a file"
url-upload: "Upload from a URL" url-upload: "Upload from a URL"
desktop/views/components/media-image.vue: desktop/views/components/media-image.vue:
sensitive: "The content is NSFW" sensitive: "NSFW"
click-to-show: "Click to show" click-to-show: "Click to show"
desktop/views/components/media-video.vue: desktop/views/components/media-video.vue:
sensitive: "The content is NSFW" sensitive: "The content is NSFW"
@ -486,7 +508,7 @@ desktop/views/components/followers.vue:
desktop/views/components/following-window.vue: desktop/views/components/following-window.vue:
following: "Following {}" following: "Following {}"
desktop/views/components/following.vue: desktop/views/components/following.vue:
empty: "You dont follow anyone." empty: "It seems you don't have any following users…"
desktop/views/components/friends-maker.vue: desktop/views/components/friends-maker.vue:
title: "Recommended users:" title: "Recommended users:"
empty: "Couldn't find any recommended users." empty: "Couldn't find any recommended users."
@ -508,8 +530,8 @@ desktop/views/components/messaging-window.vue:
title: "Messaging" title: "Messaging"
desktop/views/components/note-detail.vue: desktop/views/components/note-detail.vue:
more: "Load more conversations" more: "Load more conversations"
private: "This post is private" private: "Post is private"
deleted: "This post has been removed" deleted: "Post has been removed"
reposted-by: "Reposted by {}" reposted-by: "Reposted by {}"
location: "Location" location: "Location"
renote: "Repost" renote: "Repost"
@ -520,8 +542,10 @@ desktop/views/components/notes.note.vue:
renote: "Repost" renote: "Repost"
add-reaction: "Add a reaction" add-reaction: "Add a reaction"
detail: "Show details" detail: "Show details"
private: "This post is private" private: "Post is private"
deleted: "The post has been deleted" deleted: "Post has been deleted"
hide: "Hide"
see-more: "See more"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "Loading failed." error: "Loading failed."
retry: "Retry" retry: "Retry"
@ -533,15 +557,15 @@ desktop/views/components/post-form.vue:
add-visible-user: "+Add a user" add-visible-user: "+Add a user"
attach-location-information: "Attach location information" attach-location-information: "Attach location information"
hide-contents: "Hide contents" hide-contents: "Hide contents"
reply-placeholder: "Reply to this note..." reply-placeholder: "Reply to this post..."
quote-placeholder: "Quote this note..." quote-placeholder: "Quote this Post..."
submit: "Post" submit: "Post"
reply: "Reply" reply: "Reply"
renote: "Repost" renote: "Repost"
posted: "Posted!" posted: "Posted!"
replied: "Replied!" replied: "Replied!"
reposted: "Reposted!" reposted: "Reposted!"
note-failed: "Failed to post the note" note-failed: "Failed to post"
reply-failed: "Failed to reply" reply-failed: "Failed to reply"
renote-failed: "Failed to repost" renote-failed: "Failed to repost"
posting: "Posting" posting: "Posting"
@ -554,11 +578,12 @@ desktop/views/components/post-form.vue:
recent-tags: "Recent" recent-tags: "Recent"
click-to-tagging: "Click to tagging" click-to-tagging: "Click to tagging"
visibility: "Visibility" visibility: "Visibility"
geolocation-alert: "Your device does not support geolocalization." geolocation-alert: "Your device does not provide location services."
error: "Error" error: "Error"
enter-username: "Please enter a username..." enter-username: "Please enter a username..."
annotations: "Annotations for the post (optional)"
desktop/views/components/post-form-window.vue: desktop/views/components/post-form-window.vue:
note: "New note" note: "New Post"
reply: "Reply" reply: "Reply"
attaches: "{} media attached" attaches: "{} media attached"
uploading-media: "Uploading {} media" uploading-media: "Uploading {} media"
@ -570,9 +595,9 @@ desktop/views/components/renote-form.vue:
renote: "Repost" renote: "Repost"
reposting: "Reposting..." reposting: "Reposting..."
success: "Reposted!" success: "Reposted!"
failure: "Repost failed" failure: "Failed to Repost"
desktop/views/components/renote-form-window.vue: desktop/views/components/renote-form-window.vue:
title: "Are you sure you want to repost this?" title: "Do you want to Repost it?"
desktop/views/components/settings-window.vue: desktop/views/components/settings-window.vue:
settings: "Settings" settings: "Settings"
desktop/views/components/settings.vue: desktop/views/components/settings.vue:
@ -591,7 +616,7 @@ desktop/views/components/settings.vue:
fetch-on-scroll: "Endless loading on scroll" fetch-on-scroll: "Endless loading on scroll"
fetch-on-scroll-desc: "When you scroll down the page, it automatically fetches additional content." fetch-on-scroll-desc: "When you scroll down the page, it automatically fetches additional content."
auto-popout: "Auto pop-out window" auto-popout: "Auto pop-out window"
auto-popout-desc: "Pops-out a newly opened window (onto a new tab), if possible. This setting is stored in the browser." auto-popout-desc: "If it's possible, pop-out display will be used instead of opening a new window. This setting is stored in your browser."
advanced: "Advanced settings" advanced: "Advanced settings"
api-via-stream: "API request via stream" api-via-stream: "API request via stream"
api-via-stream-desc: "API request is performed via the WebSocket connection instead of native fetch API (for better performance). This setting is stored in the browser." api-via-stream-desc: "API request is performed via the WebSocket connection instead of native fetch API (for better performance). This setting is stored in the browser."
@ -603,11 +628,13 @@ desktop/views/components/settings.vue:
circle-icons: "Use circle icons" circle-icons: "Use circle icons"
gradient-window-header: "Use gradients on window headers" gradient-window-header: "Use gradients on window headers"
post-form-on-timeline: "Display post form at the top of the timeline" post-form-on-timeline: "Display post form at the top of the timeline"
suggest-recent-hashtags: "Show recent popular hashtags on the post form"
show-reply-target: "Display reply target" show-reply-target: "Display reply target"
show-my-renotes: "Show my reposts in the timeline" show-my-renotes: "Show my renotes in the timeline"
show-renoted-my-notes: "Show my posts that have been shared in the timeline" show-renoted-my-notes: "Show renoted my posts in timelines"
show-maps: "Show the map" show-local-renotes: "Show renoted local posts in timelines"
show-maps-desc: "Automatically show the location on the map attached to this post." show-maps: "Display a map to show the location"
show-maps-desc: "If there comes a post contains location information, show a map to display the location."
sound: "Sound" sound: "Sound"
enable-sounds: "Enable sound" enable-sounds: "Enable sound"
enable-sounds-desc: "Play a sound when you receive a post/message. This setting is stored in the browser." enable-sounds-desc: "Play a sound when you receive a post/message. This setting is stored in the browser."
@ -652,34 +679,34 @@ desktop/views/components/settings.vue:
third-parties: "Third-parties" third-parties: "Third-parties"
desktop/views/components/settings.2fa.vue: desktop/views/components/settings.2fa.vue:
intro: "If you set up 2-step verification, you will not only need a password at sign-in, but also a pre-registered physical device (such as your smartphone), which will improve security." intro: "If you set up 2-step verification, you will not only need a password at sign-in, but also a pre-registered physical device (such as your smartphone), which will improve security."
detail: "See details..." detail: "Details"
url: "https://www.google.com/landing/2step/" url: "https://www.google.com/landing/2step/"
caution: "If you lose access to your device, you won't be able to connect to Misskey anymore!" caution: "If you lose access to your registered device, you won't be able to connect to Misskey anymore!"
register: "Register a device" register: "Register a device"
already-registered: "A device is already registered" already-registered: "This device is already registered"
unregister: "Disable" unregister: "Unregister"
unregistered: "Two-factor authentication has been disabled." unregistered: "Two-factor authentication has been disabled."
enter-password: "Enter the password" enter-password: "Enter the password"
authenticator: "First, you need to install Google Authenticator on your device:" authenticator: "First, you need to install Google Authenticator on your device:"
howtoinstall: "How to install" howtoinstall: "How to install"
scan: "And then, scan the QR code:" scan: "And then, scan the QR code:"
done: "Please enter the token displaying on your device:" done: "Please enter the token displayed on your device:"
submit: "Submit" submit: "Submit"
success: "Settings saved!" success: "Settings saved!"
failed: "Failed to setup. Please ensure that the token is correct." failed: "Failed to setup. Please ensure that the token is correct."
info: "From now on, enter the token that is displayed on your device in addition to your password when signing-in to Misskey." info: "From the next time you sign in to Misskey, the token displayed on your device will be necessary too, as well as the password."
desktop/views/components/settings.api.vue: desktop/views/components/settings.api.vue:
intro: "To access the API, set this token as the key 'i' of request parameters." intro: "To access the API, set this token as the key 'i' of request parameters."
caution: "Please do not show this token to third parties (do not enter it somewhere else other than here) otherwise your account could get compromised." caution: "Do not enter this token to any apps nor tell this token to others otherwise your account may get compromised."
regeneration-of-token: "In the unlikely event that this token leaks out, you can regenerate it." regeneration-of-token: "If your token gets leaked, you can regenerate it."
regenerate-token: "Regenerate the token" regenerate-token: "Regenerate the token"
token: "Token:" token: "Token:"
enter-password: "Please enter the password" enter-password: "Please enter the password"
desktop/views/components/settings.apps.vue: desktop/views/components/settings.apps.vue:
no-apps: "No linked applications" no-apps: "No linked applications"
desktop/views/components/settings.drive.vue: desktop/views/components/settings.drive.vue:
max: "Max " max: "Max"
in-use: " in use." in-use: "In use"
desktop/views/components/settings.mute.vue: desktop/views/components/settings.mute.vue:
no-users: "No muted users" no-users: "No muted users"
desktop/views/components/settings.password.vue: desktop/views/components/settings.password.vue:
@ -691,18 +718,18 @@ desktop/views/components/settings.password.vue:
changed: "Password updated" changed: "Password updated"
desktop/views/components/settings.profile.vue: desktop/views/components/settings.profile.vue:
avatar: "Avatar" avatar: "Avatar"
choice-avatar: "Choose an image" choice-avatar: "Select an image"
name: "Name" name: "Name"
location: "Location" location: "Location"
description: "Description" description: "Description"
birthday: "Birthday" birthday: "Birthday"
save: "Update profile" save: "Update profile"
locked-account: "Protect your account" locked-account: "Protect your account"
is-locked: "Make a note private" is-locked: "Make your posts private"
other: "Other" other: "Other"
is-bot: "This account is a Bot" is-bot: "This account is a Bot"
is-cat: "This account is a Cat" is-cat: "This account is a Cat"
profile-updated: "Profile updated" profile-updated: "Your profile has been updated"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "This post is private" private: "This post is private"
deleted: "This post has been deleted" deleted: "This post has been deleted"
@ -718,6 +745,7 @@ desktop/views/components/timeline.vue:
list: "Lists" list: "Lists"
desktop/views/components/ui.header.vue: desktop/views/components/ui.header.vue:
welcome-back: "Welcome back," welcome-back: "Welcome back,"
adjective: "-san"
desktop/views/components/ui.header.account.vue: desktop/views/components/ui.header.account.vue:
profile: "Your profile" profile: "Your profile"
drive: "Media storage" drive: "Media storage"
@ -745,7 +773,8 @@ desktop/views/components/received-follow-requests-window.vue:
reject: "Reject" reject: "Reject"
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "User lists" title: "User lists"
create-list: "Create new list" create-list: "Create list"
list-name: "List name"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "Posts" notes: "Posts"
following: "Following" following: "Following"
@ -760,6 +789,46 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "Pop-out" popout: "Pop-out"
close: "Close" close: "Close"
desktop/views/pages/admin/admin.vue:
dashboard: "Dashboard"
drive: "Drive"
users: "Users"
update: "Updates"
desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "Dashboard"
all-users: "All Users"
original-users: "Users on this instance"
all-notes: "All Posts"
original-notes: "Posts on this instance"
invite: "Invite"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "Suspend a user"
suspend: "Suspend"
suspended: "Successfully suspended."
desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "Unsuspend users"
unsuspend: "Unsuspend"
unsuspended: "The user has successfully unsuspended."
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "User account verification settings"
verify: "Verify account"
verified: "The account is now being verified"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "User account unverification settings"
unverify: "Unverify account"
unverified: "The account is now being unverified"
desktop/views/pages/admin/admin.notes-chart.vue:
title: "Posts"
local: "Local"
remote: "Remote"
desktop/views/pages/admin/admin.users-chart.vue:
title: "Users"
local: "Local"
remote: "Remote"
desktop/views/pages/admin/admin.drive-chart.vue:
title: "Drive"
local: "Local"
remote: "Remote"
desktop/views/pages/deck/deck.tl-column.vue: desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "Only media posts" is-media-only: "Only media posts"
is-media-view: "Media view" is-media-view: "Media view"
@ -773,7 +842,7 @@ desktop/views/pages/welcome.vue:
gotit: "Got it!" gotit: "Got it!"
signin: "Log In" signin: "Log In"
signup: "Sign up" signup: "Sign up"
signin-button: "Log in" signin-button: "Logging in..."
signup-button: "Sign up" signup-button: "Sign up"
timeline: "Timeline" timeline: "Timeline"
powered-by-misskey: "Powered by <b>Misskey</b>." powered-by-misskey: "Powered by <b>Misskey</b>."
@ -784,35 +853,35 @@ desktop/views/pages/favorites.vue:
desktop/views/pages/home-customize.vue: desktop/views/pages/home-customize.vue:
title: "Customize home layout" title: "Customize home layout"
desktop/views/pages/note.vue: desktop/views/pages/note.vue:
prev: "Previous note" prev: "Previous post"
next: "Next note" next: "Next post"
desktop/views/pages/selectdrive.vue: desktop/views/pages/selectdrive.vue:
title: "Choose file(s)" title: "Choose file(s)"
ok: "OK" ok: "OK"
cancel: "Cancel" cancel: "Cancel"
upload: "Upload files from your device" upload: "Upload files from your device"
desktop/views/pages/search.vue: desktop/views/pages/search.vue:
not-available: "The search function can not be used." not-available: "Search feature is turned off in the settings for this instance."
not-found: "No posts were found for '{}'" not-found: "No posts were found for '{}'"
desktop/views/pages/share.vue: desktop/views/pages/share.vue:
share-with: "Share with {}." share-with: "Share with {}."
desktop/views/pages/tag.vue: desktop/views/pages/tag.vue:
no-posts-found: "No posts \"{}\" found." no-posts-found: "No posts contains \"{}\" found."
desktop/views/pages/user-list.users.vue: desktop/views/pages/user-list.users.vue:
users: "User" users: "User"
add-user: "Add a user" add-user: "Add a user"
username: "Username" username: "Username"
desktop/views/pages/user/user.followers-you-know.vue: desktop/views/pages/user/user.followers-you-know.vue:
title: "Followers you know" title: "Followers you may know"
loading: "Loading" loading: "Loading"
no-users: "No followers you know" no-users: "No followers you know"
desktop/views/pages/user/user.friends.vue: desktop/views/pages/user/user.friends.vue:
title: "Frequent mentions" title: "Frequent mentions"
loading: "Loading" loading: "Loading"
no-users: "No users" no-users: "No frequent mentions"
desktop/views/pages/user/user.vue: desktop/views/pages/user/user.vue:
is-suspended: "This account has been suspended." is-suspended: "This account has been suspended."
is-remote: "This user is a remote user, so the information about them that you see here is not complete. " is-remote: "The user is a remote user. The profile that you see here may not complete."
view-remote: "See their complete profile" view-remote: "See their complete profile"
desktop/views/pages/user/user.home.vue: desktop/views/pages/user/user.home.vue:
last-used-at: "Last active:" last-used-at: "Last active:"
@ -828,6 +897,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "Mute" mute: "Mute"
muted: "Muting" muted: "Muting"
unmute: "Unmute" unmute: "Unmute"
push-to-a-list: "Add to list"
list-pushed: "Successfully added {user} to {list}."
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "Notes" posts: "Notes"
following: "Following" following: "Following"
@ -835,18 +906,18 @@ desktop/views/pages/user/user.header.vue:
is-bot: "This account is a Bot" is-bot: "This account is a Bot"
desktop/views/pages/user/user.timeline.vue: desktop/views/pages/user/user.timeline.vue:
default: "Posts" default: "Posts"
with-replies: "Notes and replies" with-replies: "Posts and replies"
with-media: "Media" with-media: "Media"
empty: "This user doesn't seem to have posted anything yet." empty: "This user doesn't seem to have posted anything yet."
desktop/views/widgets/messaging.vue: desktop/views/widgets/messaging.vue:
title: "Messaging" title: "Message"
desktop/views/widgets/notifications.vue: desktop/views/widgets/notifications.vue:
title: "Notifications" title: "Notifications"
settings: "Settings" settings: "Settings"
desktop/views/widgets/polls.vue: desktop/views/widgets/polls.vue:
title: "Polls" title: "Polls"
refresh: "refresh" refresh: "refresh"
nothing: "Nothing" nothing: "No polls found!"
desktop/views/widgets/post-form.vue: desktop/views/widgets/post-form.vue:
title: "Post" title: "Post"
note: "Post" note: "Post"
@ -856,11 +927,11 @@ desktop/views/widgets/profile.vue:
desktop/views/widgets/trends.vue: desktop/views/widgets/trends.vue:
title: "Trend" title: "Trend"
refresh: "refresh" refresh: "refresh"
nothing: "Nothing" nothing: "No trends found!"
desktop/views/widgets/users.vue: desktop/views/widgets/users.vue:
title: "Recommended users" title: "Recommended users"
refresh: "refresh" refresh: "refresh"
no-one: "No one" no-one: "Anyone!"
mobile/views/components/drive.vue: mobile/views/components/drive.vue:
drive: "Media storage" drive: "Media storage"
used: "used" used: "used"
@ -890,7 +961,7 @@ mobile/views/components/drive.file-detail.vue:
hash: "Hash (md5)" hash: "Hash (md5)"
exif: "EXIF" exif: "EXIF"
mobile/views/components/media-image.vue: mobile/views/components/media-image.vue:
sensitive: "The content is NSFW" sensitive: "NSFW"
click-to-show: "Click to show" click-to-show: "Click to show"
mobile/views/components/media-video.vue: mobile/views/components/media-video.vue:
sensitive: "The content is NSFW" sensitive: "The content is NSFW"
@ -901,7 +972,7 @@ mobile/views/components/follow-button.vue:
request-pending: "Pending follow request" request-pending: "Pending follow request"
follow-request: "Follow request" follow-request: "Follow request"
mobile/views/components/friends-maker.vue: mobile/views/components/friends-maker.vue:
title: "Let's follow users" title: "Let's follow them"
empty: "Featured user was not found." empty: "Featured user was not found."
fetching: "Loading" fetching: "Loading"
refresh: "See more" refresh: "See more"
@ -932,7 +1003,7 @@ mobile/views/components/notes.vue:
failed: "Failed to load" failed: "Failed to load"
retry: "Retry" retry: "Retry"
mobile/views/components/notifications.vue: mobile/views/components/notifications.vue:
more: "More" more: "See more"
empty: "No notifications" empty: "No notifications"
mobile/views/components/post-form.vue: mobile/views/components/post-form.vue:
add-visible-user: "Add a user" add-visible-user: "Add a user"
@ -941,7 +1012,7 @@ mobile/views/components/post-form.vue:
renote: "Renote" renote: "Renote"
quote-placeholder: "Quote this post... (optional)" quote-placeholder: "Quote this post... (optional)"
reply-placeholder: "Reply to this note..." reply-placeholder: "Reply to this note..."
cw-placeholder: "Comments about content (optional)" cw-placeholder: "Comments for the post (optional)"
location-alert: "Your device does not provide location services" location-alert: "Your device does not provide location services"
error: "Error" error: "Error"
username-prompt: "Enter user name" username-prompt: "Enter user name"
@ -955,6 +1026,7 @@ mobile/views/components/timeline.vue:
load-more: "More" load-more: "More"
mobile/views/components/ui.header.vue: mobile/views/components/ui.header.vue:
welcome-back: "Welcome back, " welcome-back: "Welcome back, "
adjective: "Sir"
mobile/views/components/ui.nav.vue: mobile/views/components/ui.nav.vue:
timeline: "Timeline" timeline: "Timeline"
notifications: "Notifications" notifications: "Notifications"
@ -966,12 +1038,12 @@ mobile/views/components/ui.nav.vue:
user-lists: "Lists" user-lists: "Lists"
widgets: "Widgets" widgets: "Widgets"
game: "Games" game: "Games"
darkmode: "Dark mode" darkmode: "Dark theme"
settings: "Settings" settings: "Settings"
about: "About Misskey" about: "About Misskey"
mobile/views/components/user-timeline.vue: mobile/views/components/user-timeline.vue:
no-notes: "It seems this user hasn't posted anything yet." no-notes: "It seems this user hasn't posted anything yet."
no-notes-with-media: "There are no notes with media attachments" no-notes-with-media: "There are no posts attaching media"
load-more: "More" load-more: "More"
mobile/views/components/users-list.vue: mobile/views/components/users-list.vue:
all: "All" all: "All"
@ -986,7 +1058,7 @@ mobile/views/pages/drive.vue:
drive: "Drive" drive: "Drive"
more: "Load more" more: "Load more"
mobile/views/pages/signup.vue: mobile/views/pages/signup.vue:
lets-start: "Let's start! 📦" lets-start: "Your account is now ready! 📦"
mobile/views/pages/followers.vue: mobile/views/pages/followers.vue:
followers-of: "Followers of {}" followers-of: "Followers of {}"
mobile/views/pages/following.vue: mobile/views/pages/following.vue:
@ -1002,7 +1074,9 @@ mobile/views/pages/welcome.vue:
signup: "Sign up" signup: "Sign up"
mobile/views/pages/widgets.vue: mobile/views/pages/widgets.vue:
dashboard: "Dashboard" dashboard: "Dashboard"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。" widgets-hints: "You can add/delete/rearrange widgets. To move the widget, drag \"三\". Tap \"x\" to delete the widget. Some widgets can change display by tapping."
add-widget: "Add"
customization-tips: "Customization tips"
mobile/views/pages/widgets/activity.vue: mobile/views/pages/widgets/activity.vue:
activity: "Activity" activity: "Activity"
mobile/views/pages/share.vue: mobile/views/pages/share.vue:
@ -1041,6 +1115,7 @@ mobile/views/pages/settings/settings.profile.vue:
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "Search" search: "Search"
empty: "No posts were found for '{}'" empty: "No posts were found for '{}'"
not-found: "No posts were found for \"{}\"."
mobile/views/pages/selectdrive.vue: mobile/views/pages/selectdrive.vue:
select-file: "Choose files" select-file: "Choose files"
mobile/views/pages/settings.vue: mobile/views/pages/settings.vue:
@ -1052,19 +1127,20 @@ mobile/views/pages/settings.vue:
specify-language: "Select your language" specify-language: "Select your language"
design: "Design and display" design: "Design and display"
dark-mode: "Dark Mode" dark-mode: "Dark Mode"
i-am-under-limited-internet: "I'm under limited internet" i-am-under-limited-internet: "I'm in limited bandwidth"
circle-icons: "Use circle icons" circle-icons: "Use circle icons"
timeline: "Timeline" timeline: "Timeline"
show-reply-target: "Show reply target" show-reply-target: "Show reply target"
show-my-renotes: "Show my reposts" show-my-renotes: "Show my reposts"
show-renoted-my-notes: "Show my reposted posts" show-renoted-my-notes: "Show renoted my posts"
show-local-renotes: "Show renoted local posts"
post-style: "Post design" post-style: "Post design"
post-style-standard: "Standard" post-style-standard: "Standard"
post-style-smart: "Smart" post-style-smart: "Smart"
behavior: "Behavior" behavior: "Behavior"
fetch-on-scroll: "Endless loading on scroll" fetch-on-scroll: "Endless loading on scroll"
disable-via-mobile: "Don't mark the post as 'from mobile'" disable-via-mobile: "Don't mark the post as 'from mobile'"
load-raw-images: "Show attached images in high-quality" load-raw-images: "Show attached images in original quality"
load-remote-media: "Show media from a remote server" load-remote-media: "Show media from a remote server"
twitter: "Twitter integration" twitter: "Twitter integration"
twitter-connect: "Connect to your Twitter account" twitter-connect: "Connect to your Twitter account"
@ -1085,13 +1161,13 @@ mobile/views/pages/user.vue:
follows-you: "Follows you" follows-you: "Follows you"
following: "Following" following: "Following"
followers: "Followers" followers: "Followers"
notes: "Notes" notes: "Posts"
overview: "Overview" overview: "Overview"
timeline: "Timeline" timeline: "Timeline"
media: "Media" media: "Media"
is-suspended: "This account has been suspended." is-suspended: "This account has been suspended."
is-remote: "This user is a remote user, so the information you see here is not complete." is-remote: "The user is a remote user. The profile that you see here may not complete."
view-remote: "See their complete profile" view-remote: "See his/her complete profile"
mobile/views/pages/user/home.vue: mobile/views/pages/user/home.vue:
recent-notes: "Recent notes" recent-notes: "Recent notes"
images: "Images" images: "Images"
@ -1114,8 +1190,8 @@ mobile/views/pages/user/home.photos.vue:
loading: "Loading" loading: "Loading"
no-photos: "No photos" no-photos: "No photos"
docs: docs:
edit-this-page-on-github: "Did you find an error or do you want to contribute to the documentation? " edit-this-page-on-github: "Found a mistake or want to contribute for the documentation?"
edit-this-page-on-github-link: "Edit this page on Github!" edit-this-page-on-github-link: "Edit this page at GitHub!"
api: api:
entities: entities:
properties: "Properties" properties: "Properties"
@ -1126,12 +1202,14 @@ docs:
require-credential: "This endpoint requires the authentication information." require-credential: "This endpoint requires the authentication information."
require-permission: "This endpoint requires {permission} permission." require-permission: "This endpoint requires {permission} permission."
has-limit: "There is a rate limit." has-limit: "There is a rate limit."
duration-limit: "You can't request when a frequency of a request in during {duration} milliseconds exceeds {max} times." duration-limit: "If you have sent your requests more than {max} times in {duration} milliseconds, you will be unable to send more requests."
min-interval-limit: "You can't request before {interval} milliseconds have passed since the previous request." min-interval-limit: "If {interval} milliseconds haven't passed since the last request, you can't send a request."
show-src: "You can view the source code for this endpoint." show-src: "You can view the source code for this endpoint."
show-src-link: "See the code on GitHub" show-src-link: "See the code on GitHub"
generated: "This doc is generated by an API definition." generated: "This document is generated by the API definition."
props: props:
name: "Name" name: "Name"
type: "Type" type: "Type"
description: "Description" description: "Description"
dev/views/index.vue:
manage-apps: "Manage apps"

View File

@ -11,6 +11,8 @@ common:
warning: "<strong>Misskey no tiene anuncios publicitarios.</strong> Sin embargo, algunas características podrían no estar disponibles si el bloqueador de publicidad está habilitado." warning: "<strong>Misskey no tiene anuncios publicitarios.</strong> Sin embargo, algunas características podrían no estar disponibles si el bloqueador de publicidad está habilitado."
application-authorization: "Autorizaciones de la aplicación." application-authorization: "Autorizaciones de la aplicación."
close: "Cerrar" close: "Cerrar"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
got-it: "¡Listo!"
customization-tips: customization-tips:
title: "Consejos de personalización" title: "Consejos de personalización"
paragraph1: "Customización de inicio le permite agregar, borrar, o reorganizar los accesorios." paragraph1: "Customización de inicio le permite agregar, borrar, o reorganizar los accesorios."
@ -26,7 +28,6 @@ common:
notified-by: "Notificado por {}:" notified-by: "Notificado por {}:"
reply-from: "Respuesta de {}:" reply-from: "Respuesta de {}:"
quoted-by: "Citado por {}:" quoted-by: "Citado por {}:"
name: "Misskey"
time: time:
unknown: "Desconocido" unknown: "Desconocido"
future: "Futuro" future: "Futuro"
@ -38,13 +39,8 @@ common:
weeks_ago: "Hace {} semana(s)" weeks_ago: "Hace {} semana(s)"
months_ago: "Hace {} mes(es)" months_ago: "Hace {} mes(es)"
years_ago: "Hace {} año(s)" years_ago: "Hace {} año(s)"
month-and-day: "{day} de {month}"
trash: "Papelera" trash: "Papelera"
date:
full-year: "Año"
month: "Mes"
day: "Día"
hours: "horas"
minutes: "minutos"
weekday-short: weekday-short:
sunday: "domingo" sunday: "domingo"
monday: "lunes" monday: "lunes"
@ -70,6 +66,7 @@ common:
congrats: "felicidades" congrats: "felicidades"
angry: "enfadado" angry: "enfadado"
confused: "confundido" confused: "confundido"
rip: "RIP"
pudding: "Chafado" pudding: "Chafado"
note-placeholders: note-placeholders:
a: "¿Qué haces?" a: "¿Qué haces?"
@ -87,7 +84,8 @@ common:
my-token-regenerated: "Tu token se ha regenerado vas a ser desconectado." my-token-regenerated: "Tu token se ha regenerado vas a ser desconectado."
i-like-sushi: "Prefiero sushi a pudín" i-like-sushi: "Prefiero sushi a pudín"
show-reversi-board-labels: "Mostrar etiquetas de filas y columnas en Reversi" show-reversi-board-labels: "Mostrar etiquetas de filas y columnas en Reversi"
verified-user: "Usuario verificado" verified-user: "公式アカウント"
disable-animated-mfm: "Desactivar texto animado en una publicación"
reversi: reversi:
drawn: "Empatado" drawn: "Empatado"
my-turn: "Mi turno" my-turn: "Mi turno"
@ -168,21 +166,27 @@ common/views/components/games/reversi/reversi.vue:
matching: matching:
waiting-for: "Esperando por {}" waiting-for: "Esperando por {}"
cancel: "Cancelar" cancel: "Cancelar"
common/views/components/games/reversi/reversi.game.vue:
surrender: "Rendirse"
surrendered: "Por rendirse"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
common/views/components/games/reversi/reversi.index.vue: common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi" title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう" sub-title: "¡Juega Reversi con tus amigos!"
invite: "招待" invite: "Invitar"
rule: "遊び方" rule: "Cómo jugar"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。" rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "招待" mode-invite: "Invitar"
mode-invite-desc: "指定したユーザーと対戦するモードです。" mode-invite-desc: "Invitar un usuario al juego."
invitations: "対局の招待があります!" invitations: "¡Has recibido una invitación!"
my-games: "自分の対局" my-games: "Mis juegos"
all-games: "みんなの対局" all-games: "Todos los juegos"
enter-username: "ユーザー名を入力してください" enter-username: "Ingresar nombre de usuario"
game-state: game-state:
ended: "終了" ended: "Finalizado"
playing: "進行中" playing: "En progreso"
common/views/components/games/reversi/reversi.room.vue: common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "Configuración de juego" settings-of-the-game: "Configuración de juego"
choose-map: "Elije un mapa" choose-map: "Elije un mapa"
@ -194,7 +198,7 @@ common/views/components/games/reversi/reversi.room.vue:
looped-map: "Mapa en bucle" looped-map: "Mapa en bucle"
can-put-everywhere: "Puedes colocar donde quieras" can-put-everywhere: "Puedes colocar donde quieras"
settings-of-the-bot: "Configuración de bot" settings-of-the-bot: "Configuración de bot"
this-game-is-started-soon: "ゲームは数秒後に開始されます" this-game-is-started-soon: "El juego comenzará pronto"
waiting-for-other: "Esperando a que se prepare el adversario" waiting-for-other: "Esperando a que se prepare el adversario"
waiting-for-me: "Esperando por la preparación" waiting-for-me: "Esperando por la preparación"
waiting-for-both: "Esperando por ti" waiting-for-both: "Esperando por ti"
@ -235,11 +239,13 @@ common/views/components/messaging-room.vue:
no-history: "El historial se ha acabado" no-history: "El historial se ha acabado"
resize-form: "Arrastra para redimensionar" resize-form: "Arrastra para redimensionar"
new-message: "Nuevo mensaje" new-message: "Nuevo mensaje"
only-one-file-attached: "Un único archivo se puede conectar al mensaje"
common/views/components/messaging-room.form.vue: common/views/components/messaging-room.form.vue:
input-message-here: "Escribe el mensaje aquí" input-message-here: "Escribe el mensaje aquí"
send: "Enviar" send: "Enviar"
attach-from-local: "Adjunta ficheros desde tu PC" attach-from-local: "Adjunta ficheros desde tu PC"
attach-from-drive: "Adjunta ficheros desde tu disco" attach-from-drive: "Adjunta ficheros desde tu disco"
only-one-file-attached: "Un único archivo se puede conectar al mensaje"
common/views/components/messaging-room.message.vue: common/views/components/messaging-room.message.vue:
is-read: "Leer" is-read: "Leer"
deleted: "El mensaje se ha borrado" deleted: "El mensaje se ha borrado"
@ -279,7 +285,12 @@ common/views/components/signin.vue:
token: "Identificador" token: "Identificador"
signing-in: "Entrando..." signing-in: "Entrando..."
signin: "Entra" signin: "Entra"
or: "O"
signin-with-twitter: "Ingresar con Twitter"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue: common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "Usuario" username: "Usuario"
checking: "Comprobando..." checking: "Comprobando..."
available: "Disponible" available: "Disponible"
@ -373,46 +384,57 @@ common/views/widgets/tips.vue:
tips-line9: "Misskey está hecho bajo licencia AGPLv3" tips-line9: "Misskey está hecho bajo licencia AGPLv3"
tips-line10: "Usando el accesorio de Máquina del Tiempo puedes encontrar publicaciones antiguas" tips-line10: "Usando el accesorio de Máquina del Tiempo puedes encontrar publicaciones antiguas"
tips-line11: "Puedes resaltar publicaciones en la página de usuario haciendo click en \"...\"" tips-line11: "Puedes resaltar publicaciones en la página de usuario haciendo click en \"...\""
tips-line13: "投稿に添付したファイルは全てドライブに保存されます" tips-line13: "Todos los archivos añadidos a la publicación se han guardado en tu unidad."
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます" tips-line14: "Cuando personalizas el inicio puedas dar click derecho a un accesorio y cambiar el diseño."
tips-line17: "「**」でテキストを囲むと**強調表示**されます" tips-line17: "Al colocar ** delante y luego del texto, lo estarás destacando en negrillas"
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます" tips-line19: "Algunas ventanas pueden ser separadas fuera del navegador"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています" tips-line20: "El porcentaje mostrando en el accesorio de calendario indica el porcentaje de tiempo transcurrido."
tips-line21: "APIを利用してbotの開発なども行えます" tips-line21: "También puedes usar la API para desarrollar tus propios bots."
tips-line23: "まゆかわいいよまゆ" tips-line23: "Mayu is tan bonito con sus cejas."
tips-line24: "Misskeyは2014年にサービスを開始しました" tips-line24: "Misskey inició en 2014."
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます" tips-line25: "Puedes recibir notificaciones incluso si Misskey no está abierto en un navegador compatible."
common/views/pages/follow.vue: common/views/pages/follow.vue:
signed-in-as: "{}としてサインイン中" signed-in-as: "Autenticado como {}"
following: "フォロー中" following: "Siguiendo"
follow: "フォロー" follow: "Seguir"
request-pending: "フォロー許可待ち" request-pending: "Solicitud pendiente"
follow-request: "フォロー申請" follow-request: "Solicitar suscripción"
desktop:
banner-crop-title: "Corta la parte que aparece como un banner"
banner: "Banner"
uploading-banner: "Cargando un nuevo banner"
banner-updated: "Banner actualizado"
choose-banner: "Escoge un banner"
avatar-crop-title: "Corta la parte que aparece como un avatar"
avatar: "Avatar"
uploading-avatar: "Cargando un nuevo avatar"
avatar-updated: "Avatar actualizado"
choose-avatar: "Escoge una imagen de avatar"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Negro ... Total"
notes: "Blue ... Notes" notes: "Azul ... Notas"
replies: "Red ... Replies" replies: "Rojo ... Respuestas"
renotes: "Green ... Renotes" renotes: "Verde ... Republicaciones"
desktop/views/components/activity.vue: desktop/views/components/activity.vue:
title: "アクティビティ" title: "Actividad"
toggle: "表示を切り替え" toggle: "Alternar vistas"
desktop/views/components/calendar.vue: desktop/views/components/calendar.vue:
title: "{1} {2}" title: "{1} / {2}"
prev: "前の月" prev: "Mes anterior"
next: "次の月" next: "Próximo mes"
go: "クリックして時間遡行" go: "Click para navegar"
desktop/views/components/choose-file-from-drive-window.vue: desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "ファイル選択中" choose-file: "Escoger archivos"
upload: "PCからドライブにファイルをアップロード" upload: "Cargar archivos de tu dispositivo"
cancel: "キャンセル" cancel: "Cancelar"
ok: "決定" ok: "OK"
choose-prompt: "ファイルを選択" choose-prompt: "Escoger archivos"
desktop/views/components/choose-folder-from-drive-window.vue: desktop/views/components/choose-folder-from-drive-window.vue:
cancel: "キャンセル" cancel: "Cancelar"
ok: "決定" ok: "OK"
choose-prompt: "Escoge una Carpeta" choose-prompt: "Escoge una Carpeta"
desktop/views/components/crop-window.vue: desktop/views/components/crop-window.vue:
skip: "クロップをスキップ" skip: "Ignorar el cortado"
cancel: "Cancelar" cancel: "Cancelar"
ok: "OK" ok: "OK"
desktop/views/components/drive-window.vue: desktop/views/components/drive-window.vue:
@ -423,8 +445,8 @@ desktop/views/components/drive.file.vue:
banner: "Banner" banner: "Banner"
contextmenu: contextmenu:
rename: "Renombrar" rename: "Renombrar"
mark-as-sensitive: "閲覧注意に設定" mark-as-sensitive: "Marcar como 'sensible'"
unmark-as-sensitive: "閲覧注意を解除" unmark-as-sensitive: "Desmarcar como 'sensible'"
copy-url: "Copia la URL" copy-url: "Copia la URL"
download: "Descargar" download: "Descargar"
else-files: "Otros" else-files: "Otros"
@ -469,8 +491,8 @@ desktop/views/components/drive.vue:
upload: "Subir fichero" upload: "Subir fichero"
url-upload: "Subir desde una URL" url-upload: "Subir desde una URL"
desktop/views/components/media-image.vue: desktop/views/components/media-image.vue:
sensitive: "閲覧注意" sensitive: "El contenido es NSFW (no seguro para ver en el trabajo, 'not safe for work')"
click-to-show: "クリックして表示" click-to-show: "Click para mostrar"
desktop/views/components/media-video.vue: desktop/views/components/media-video.vue:
sensitive: "閲覧注意" sensitive: "閲覧注意"
click-to-show: "クリックして表示" click-to-show: "クリックして表示"
@ -522,6 +544,8 @@ desktop/views/components/notes.note.vue:
detail: "Mostrar detalles" detail: "Mostrar detalles"
private: "Esta publicación es privada" private: "Esta publicación es privada"
deleted: "Esta publicación ha sido borrada" deleted: "Esta publicación ha sido borrada"
hide: "隠す"
see-more: "もっと見る"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "Error al cargar." error: "Error al cargar."
retry: "Reintentar" retry: "Reintentar"
@ -557,6 +581,7 @@ desktop/views/components/post-form.vue:
geolocation-alert: "Tu dispositivo no tiene soporte de geolocalización." geolocation-alert: "Tu dispositivo no tiene soporte de geolocalización."
error: "Error" error: "Error"
enter-username: "Por favor escribe un nombre de usuario..." enter-username: "Por favor escribe un nombre de usuario..."
annotations: "内容への注釈 (オプション)"
desktop/views/components/post-form-window.vue: desktop/views/components/post-form-window.vue:
note: "Nota nueva" note: "Nota nueva"
reply: "Responder" reply: "Responder"
@ -603,9 +628,11 @@ desktop/views/components/settings.vue:
circle-icons: "Usar iconos circulares" circle-icons: "Usar iconos circulares"
gradient-window-header: "Usar degradados en las cabeceras de las páginas" gradient-window-header: "Usar degradados en las cabeceras de las páginas"
post-form-on-timeline: "Mostrar el formulario de las entradas encima de la línea de tiempo" post-form-on-timeline: "Mostrar el formulario de las entradas encima de la línea de tiempo"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開" show-maps: "マップの自動展開"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。" show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "サウンド" sound: "サウンド"
@ -634,26 +661,26 @@ desktop/views/components/settings.vue:
version: "バージョン:" version: "バージョン:"
latest-version: "最新のバージョン:" latest-version: "最新のバージョン:"
update-checking: "アップデートを確認中" update-checking: "アップデートを確認中"
do-update: "アップデートを確認" do-update: "Chequear por actualizaciones"
update-settings: "詳細設定" update-settings: "Configuración avanzada"
prevent-update: "アップデートを延期する(非推奨)" prevent-update: "Posponer actualizaciones (no recomendado)"
prevent-update-desc: "この設定をオンにしてもアップデートが反映される場合があります。この設定はこのデバイスのみ有効です。" prevent-update-desc: "Incluso si activas esta configuración, algunas actualizaciones podrían aplicarse. Esta configuración está habilitada sólo para este dispositivo."
no-updates: "利用可能な更新はありません" no-updates: "No hay actualizaciones disponibles"
no-updates-desc: "お使いのMisskeyは最新です。" no-updates-desc: "Tu Misskey está actualizado"
update-available: "新しいバージョンが利用可能です" update-available: "Una nueva versión está disponible"
update-available-desc: "ページを再度読み込みすると更新が適用されます。" update-available-desc: "Las actualizaciones se aplicarán cuando actualices la página nuevamente."
advanced-settings: "高度な設定" advanced-settings: "Avanzado"
debug-mode: "デバッグモードを有効にする" debug-mode: "Habilitar modo de depuración"
debug-mode-desc: "この設定はブラウザに記憶されます。" debug-mode-desc: "Esta configuración se ha guardado en el navegador."
experimental: "実験的機能を有効にする" experimental: "Habilitar herramientas experimentales"
experimental-desc: "実験的機能を有効にするとMisskeyの動作が不安定になる可能性があります。この設定はブラウザに記憶されます。" experimental-desc: "Activar esto puede hacer que tu cliente de Misskey se vuelva inestable. La configuración se ha guardado en el navegador."
tools: "ツール" tools: "Herramientas"
task-manager: "タスクマネージャ" task-manager: "Navegador de tareas"
third-parties: "サードパーティ" third-parties: "Servicios externos"
desktop/views/components/settings.2fa.vue: desktop/views/components/settings.2fa.vue:
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。" intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
detail: "詳細..." detail: "Ver detalles..."
url: "https://www.google.co.jp/intl/ja/landing/2step/" url: "https://www.google.com/landing/2step/"
caution: "Si pierdes acceso al dispositivo, no podrás conectarte a Misskey." caution: "Si pierdes acceso al dispositivo, no podrás conectarte a Misskey."
register: "Registrar un dispositivo" register: "Registrar un dispositivo"
already-registered: "Un dispositivo ya fue registrado" already-registered: "Un dispositivo ya fue registrado"
@ -686,19 +713,19 @@ desktop/views/components/settings.password.vue:
reset: "Cambiar contraseña" reset: "Cambiar contraseña"
enter-current-password: "Ingresar contraseña actual" enter-current-password: "Ingresar contraseña actual"
enter-new-password: "Ingresar nueva contraseña" enter-new-password: "Ingresar nueva contraseña"
enter-new-password-again: "もう一度新しいパスワードを入力してください" enter-new-password-again: "Ingresar nueva contraseña de nuevo"
not-match: "新しいパスワードが一致しません" not-match: "Las nuevas contraseñas no se corresponden consigo mismas"
changed: "パスワードを変更しました" changed: "Contraseña actualizada"
desktop/views/components/settings.profile.vue: desktop/views/components/settings.profile.vue:
avatar: "アイコン" avatar: "Avatar"
choice-avatar: "画像を選択" choice-avatar: "Escoger una imagen"
name: "名前" name: "Nombre"
location: "場所" location: "Localización"
description: "自己紹介" description: "Descripción"
birthday: "誕生日" birthday: "Fecha de nacimiento"
save: "保存" save: "Perfil actualizado"
locked-account: "アカウントの保護" locked-account: "Protege tu cuenta"
is-locked: "投稿を非公開にする" is-locked: "Crear una nota privada"
other: "その他" other: "その他"
is-bot: "このアカウントはBotです" is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
@ -718,6 +745,7 @@ desktop/views/components/timeline.vue:
list: "リスト" list: "リスト"
desktop/views/components/ui.header.vue: desktop/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "おかえりなさい、"
adjective: "さん"
desktop/views/components/ui.header.account.vue: desktop/views/components/ui.header.account.vue:
profile: "プロフィール" profile: "プロフィール"
drive: "ドライブ" drive: "ドライブ"
@ -746,6 +774,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
following: "フォロー" following: "フォロー"
@ -760,6 +789,46 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "閉じる"
desktop/views/pages/admin/admin.vue:
dashboard: "ダッシュボード"
drive: "ドライブ"
users: "ユーザー"
update: "更新"
desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
suspended: "凍結しました"
desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/admin/admin.notes-chart.vue:
title: "投稿"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.users-chart.vue:
title: "ユーザー"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.drive-chart.vue:
title: "ドライブ"
local: "ローカル"
remote: "リモート"
desktop/views/pages/deck/deck.tl-column.vue: desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
@ -792,7 +861,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "キャンセル" cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード" upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue: desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。" not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。" not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue: desktop/views/pages/share.vue:
share-with: "{}で共有" share-with: "{}で共有"
@ -828,6 +897,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"
following: "フォロー" following: "フォロー"
@ -955,6 +1026,7 @@ mobile/views/components/timeline.vue:
load-more: "もっと" load-more: "もっと"
mobile/views/components/ui.header.vue: mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "おかえりなさい、"
adjective: "さん"
mobile/views/components/ui.nav.vue: mobile/views/components/ui.nav.vue:
timeline: "タイムライン" timeline: "タイムライン"
notifications: "通知" notifications: "通知"
@ -1003,6 +1075,8 @@ mobile/views/pages/welcome.vue:
mobile/views/pages/widgets.vue: mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード" dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。" widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
add-widget: "追加"
customization-tips: "カスタマイズのヒント"
mobile/views/pages/widgets/activity.vue: mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ" activity: "アクティビティ"
mobile/views/pages/share.vue: mobile/views/pages/share.vue:
@ -1041,6 +1115,7 @@ mobile/views/pages/settings/settings.profile.vue:
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "検索" search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
mobile/views/pages/selectdrive.vue: mobile/views/pages/selectdrive.vue:
select-file: "ファイルを選択" select-file: "ファイルを選択"
mobile/views/pages/settings.vue: mobile/views/pages/settings.vue:
@ -1057,7 +1132,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する" show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
@ -1135,3 +1211,5 @@ docs:
name: "名前" name: "名前"
type: "型" type: "型"
description: "説明" description: "説明"
dev/views/index.vue:
manage-apps: "アプリの管理"

View File

@ -4,29 +4,30 @@ meta:
divider: "" divider: ""
common: common:
misskey: "Une ⭐ du fédiverse" misskey: "Une ⭐ du fédiverse"
about-title: "Une ⭐ du fédiverse." about-title: "Une ⭐ du fédivers."
about: "Merci d'avoir découvert Misskey. Misskey est une <b>plateforme de micro-blogging distribuée</b> née sur Terre. Parce qu'il fait partie du Fédiverse (un univers composé de diverses plateformes de réseaux sociaux organisées), il est mutuellement connecté avec d'autres plateformes de réseaux sociaux. Désirez-vous prendre une pause, pendant un instant, loin de l'agitation de la ville et plonger dans un nouvel Internet ?" about: "Merci d'avoir découvert Misskey. Misskey est une <b>plateforme de microblogage distribuée</b> née sur Terre. Parce qu'il fait partie du Fédivers (un univers composé de diverses plateformes de réseaux sociaux organisées), il est mutuellement connecté avec d'autres plateformes de réseaux sociaux. Désirez-vous prendre une pause, pendant un instant, loin de l'agitation de la ville et plonger dans un nouvel Internet ?"
adblock: adblock:
detected: "Veuillez désactiver le bloqueur de publicités" detected: "Veuillez désactiver votre bloqueur de publicités"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" 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: "アプリの連携" application-authorization: "Permissions de l'application"
close: "Fermer" close: "Fermer"
do-not-copy-paste: "Veuillez ne pas entrer ou coller le code ici. Le compte peut être compromis."
got-it: "J'ai compris !"
customization-tips: customization-tips:
title: "Conseils de personnalisation" title: "Conseils de personnalisation"
paragraph1: "La personnalisation à la maison vous permet d'ajouter / supprimer, glisser et déposer et réorganiser les widgets." paragraph1: "La personnalisation à la maison vous permet d'ajouter / supprimer, glisser et déposer et réorganiser les widgets."
paragraph2: "Vous pouvez changer l'affichage en <strong>cliquant droit</strong> sur certains widgets." paragraph2: "Vous pouvez changer l'affichage en <strong>cliquant droit</strong> sur certains widgets."
paragraph3: "Pour supprimer un widget, <strong>glissez et déposez le widget sur la zone étiquetée \"Corbeille\"</strong> dans l'en-tête." paragraph3: "Pour supprimer un widget, <strong>glissez et déposez le widget sur la zone étiquetée « Corbeille »</strong> dans l'en-tête."
paragraph4: "Pour terminer la personnalisation, cliquez sur \"Terminer\" dans le coin supérieur droit." paragraph4: "Pour terminer la personnalisation, cliquez sur \"Terminer\" dans le coin supérieur droit."
gotit: "Compris!" gotit: "Compris!"
notification: notification:
file-uploaded: "Le fichier a été téléversé !" file-uploaded: "Le fichier a été téléversé !"
message-from: "Message de {} :" message-from: "Message de {} :"
reversi-invited: "対局への招待があります" reversi-invited: "Invité à jouer"
reversi-invited-by: "Invité par {} :" reversi-invited-by: "Invité par {} :"
notified-by: "Notifié par {} :" notified-by: "Notifié par {} :"
reply-from: "Réponse de {} :" reply-from: "Réponse de {} :"
quoted-by: "Cité·e par {} :" quoted-by: "Cité·e par {} :"
name: "Misskey"
time: time:
unknown: "inconnu" unknown: "inconnu"
future: "future" future: "future"
@ -38,13 +39,8 @@ common:
weeks_ago: "Il y a {} semaines·s" weeks_ago: "Il y a {} semaines·s"
months_ago: "Il y a {} mois" months_ago: "Il y a {} mois"
years_ago: "Il y a {} an·s" years_ago: "Il y a {} an·s"
month-and-day: "{month}/{day}"
trash: "Corbeille" trash: "Corbeille"
date:
full-year: "Année "
month: "Mois"
day: "Jour"
hours: "heures"
minutes: "minutes"
weekday-short: weekday-short:
sunday: "D" sunday: "D"
monday: "L" monday: "L"
@ -70,9 +66,10 @@ common:
congrats: "Félicitations !" congrats: "Félicitations !"
angry: "En colère" angry: "En colère"
confused: "Confus" confused: "Confus"
rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-placeholders: note-placeholders:
a: "Que faîtes vous maintenant ?" a: "Que faites vous maintenant ?"
b: "Quoi de neuf ?" b: "Quoi de neuf ?"
c: "Qu'avez-vous en tête ?" c: "Qu'avez-vous en tête ?"
d: "Voulez-vous exprimer quelque chose ?" d: "Voulez-vous exprimer quelque chose ?"
@ -85,9 +82,10 @@ common:
update-available-title: "Mise à jour disponible" update-available-title: "Mise à jour disponible"
update-available: "Une nouvelle version de Misskey est disponible ({newer}, version actuelle: {current}). Veuillez recharger la page pour appliquer la mise à jour." update-available: "Une nouvelle version de Misskey est disponible ({newer}, version actuelle: {current}). Veuillez recharger la page pour appliquer la mise à jour."
my-token-regenerated: "Votre token vient d'être généré, vous allez maintenant être déconnecté." my-token-regenerated: "Votre token vient d'être généré, vous allez maintenant être déconnecté."
i-like-sushi: "Je préfère les sushis (au pudding)" i-like-sushi: "Je préfère les sushis plutôt que le pudding"
show-reversi-board-labels: "Afficher les étiquettes des lignes et colonnes dans Reversi" show-reversi-board-labels: "Afficher les étiquettes des lignes et colonnes dans Reversi"
verified-user: "Utilisateur·trice vérifié·e" verified-user: "Compte vérifié"
disable-animated-mfm: "Désactiver les textes animés dans les publications"
reversi: reversi:
drawn: "Partie nulle" drawn: "Partie nulle"
my-turn: "Cest votre tour" my-turn: "Cest votre tour"
@ -98,25 +96,25 @@ common:
black: "Noirs" black: "Noirs"
white: "Blancs" white: "Blancs"
total: "Total" total: "Total"
this-turn: "Tour de {}" this-turn: "Tour {}"
widgets: widgets:
analog-clock: "Horloge analogique" analog-clock: "Horloge analogique"
profile: "Profil" profile: "Profil"
calendar: "Calendrier" calendar: "Calendrier"
timemachine: "Calendrier (Machine de temps)" timemachine: "Calendrier (Machine temporelle)"
activity: "Activité" activity: "Activité"
rss: "Lecteur de flux RSS" rss: "Lecteur de flux RSS"
memo: "Pense-bête" memo: "Pense-bête"
trends: "Tendances" trends: "Tendances"
photo-stream: "Flux de photos" photo-stream: "Flux de photos"
posts-monitor: "Graph des publications" posts-monitor: "Graphe des publications"
slideshow: "Diaporama" slideshow: "Diaporama"
version: "Version" version: "Version"
broadcast: "Diffusion" broadcast: "Diffusion"
notifications: "Notifications" notifications: "Notifications"
users: "Utilisateurs" users: "Utilisateur·rice·s"
polls: "Sondages" polls: "Sondages"
post-form: "投稿フォーム" post-form: "Formulaire de publication"
messaging: "Messagerie" messaging: "Messagerie"
server: "Info sur le serveur" server: "Info sur le serveur"
donation: "Dons" donation: "Dons"
@ -141,11 +139,11 @@ common:
stack-left: "Vers la gauche" stack-left: "Vers la gauche"
pop-right: "Vers la droite" pop-right: "Vers la droite"
auth/views/form.vue: auth/views/form.vue:
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?" share-access: "Désirez-vous <b>autoriser</b> <i>{{ app.name }}</i> à avoir accès à votre compte ?"
permission-ask: "Cette application nécessite les autorisations suivantes :" permission-ask: "Cette application nécessite les autorisations suivantes :"
account-read: "アカウントの情報を見る。" account-read: "Afficher les informations du compte :"
account-write: "Modifications des informations du compte :" account-write: "Modifications des informations du compte :"
note-write: "投稿する。" note-write: "Publier."
like-write: "Réagir aux publications." like-write: "Réagir aux publications."
following-write: "S'abonner et se désabonner." following-write: "S'abonner et se désabonner."
drive-read: "Lire votre Drive" drive-read: "Lire votre Drive"
@ -156,7 +154,7 @@ auth/views/form.vue:
accept: "Autoriser laccès" accept: "Autoriser laccès"
auth/views/index.vue: auth/views/index.vue:
loading: "Chargement en cours" loading: "Chargement en cours"
denied: "アプリケーションの連携をキャンセルしました。" denied: "L'autorisation de l'application a été refusée."
denied-paragraph: "Cette application ne va pas accéder à votre compte." denied-paragraph: "Cette application ne va pas accéder à votre compte."
already-authorized: "Cette application est déjà autorisée" already-authorized: "Cette application est déjà autorisée"
allowed: "アプリケーションの連携を許可しました" allowed: "アプリケーションの連携を許可しました"
@ -168,20 +166,26 @@ common/views/components/games/reversi/reversi.vue:
matching: matching:
waiting-for: "En attente de {}" waiting-for: "En attente de {}"
cancel: "Annuler" cancel: "Annuler"
common/views/components/games/reversi/reversi.game.vue:
surrender: "Se rendre"
surrendered: "Par abandon"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "Carte en boucle"
can-put-everywhere: "どこでも置けるモード"
common/views/components/games/reversi/reversi.index.vue: common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi" title: "Misskey Reversi"
sub-title: "Jouer à Reversi avec vos amis·es !" sub-title: "Jouer à Reversi avec vos ami·e·s !"
invite: "Inviter" invite: "Inviter"
rule: "Comment Jouer ?" rule: "Comment jouer ?"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。" rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "Inviter" mode-invite: "Inviter"
mode-invite-desc: "Inviter un joueur." mode-invite-desc: "Inviter un·e joueur·se."
invitations: "Vous avez reçu une invitation !" invitations: "Vous avez reçu une invitation !"
my-games: "Mes jeux" my-games: "Mes jeux"
all-games: "Tous les jeux" all-games: "Tous les jeux"
enter-username: "Saisir un nom d'utilisateur" enter-username: "Saisir un nom d'utilisateur·rice"
game-state: game-state:
ended: "Terminé" ended: "Terminée"
playing: "En cours" playing: "En cours"
common/views/components/games/reversi/reversi.room.vue: common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "Paramètres du jeu" settings-of-the-game: "Paramètres du jeu"
@ -191,18 +195,18 @@ common/views/components/games/reversi/reversi.room.vue:
black-is: "{} Noirs" black-is: "{} Noirs"
rules: "Règles" rules: "Règles"
is-llotheo: "石の少ない方が勝ち(ロセオ)" is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ" looped-map: "Carte en boucle"
can-put-everywhere: "どこでも置けるモード" can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Configuration du bot" settings-of-the-bot: "Configuration du bot"
this-game-is-started-soon: "ゲームは数秒後に開始されます" this-game-is-started-soon: "La partie commencera dans quelques instants"
waiting-for-other: "相手の準備が完了するのを待っています" waiting-for-other: "En attente que l'adversaire soit prêt"
waiting-for-me: "あなたの準備が完了するのを待っています" waiting-for-me: "En attente que vous soyez prêt"
waiting-for-both: "準備中" waiting-for-both: "En attente que vous soyez prêt"
cancel: "Annuler" cancel: "Annuler"
ready: "Prêt" ready: "Prêt"
cancel-ready: "準備続行" cancel-ready: "Annuler « Prêt »"
common/views/components/connect-failed.vue: common/views/components/connect-failed.vue:
title: "Impossible de se connecter au server." title: "Échec de connexion au serveur"
description: "Il y a soit un problème avec votre connexion internet, soit le serveur est hors-ligne ou en maintenance. Veuillez {ressayer} plus tard." description: "Il y a soit un problème avec votre connexion internet, soit le serveur est hors-ligne ou en maintenance. Veuillez {ressayer} plus tard."
thanks: "On vous remercie d'utiliser Misskey." thanks: "On vous remercie d'utiliser Misskey."
troubleshoot: "dépanner" troubleshoot: "dépanner"
@ -212,7 +216,7 @@ common/views/components/connect-failed.troubleshooter.vue:
checking-network: "Vérification de la connexion au réseau" checking-network: "Vérification de la connexion au réseau"
internet: "Connexion Internet" internet: "Connexion Internet"
checking-internet: "Vérification de la connexion internet" checking-internet: "Vérification de la connexion internet"
server: "Connexion au server" server: "Connexion au serveur"
checking-server: "Vérification de la connexion au serveur" checking-server: "Vérification de la connexion au serveur"
finding: "Recherche d'un problème" finding: "Recherche d'un problème"
no-network: "Aucune connexion au réseau" no-network: "Aucune connexion au réseau"
@ -220,48 +224,50 @@ common/views/components/connect-failed.troubleshooter.vue:
no-internet: "Aucune connexion internet." no-internet: "Aucune connexion internet."
no-internet-desc: "Veuillez vérifier que vous êtes bien connecté à internet." no-internet-desc: "Veuillez vérifier que vous êtes bien connecté à internet."
no-server: "Impossible de se connecter au serveur" no-server: "Impossible de se connecter au serveur"
no-server-desc: "Votre connexion est OK, mais il a été impossible de vous connecter au serveur de Misskey. Il y a des chances que le serveur soit hors-ligne ou en maintenance, veuillez ressayer plus tard." no-server-desc: "Votre connexion semble correcte, mais il a été impossible de vous connecter au serveur de Misskey. Il se peut que le serveur soit hors-ligne ou en maintenance, veuillez ressayer plus tard."
success: "Connexion au serveur de Misskey reussie!" success: "Connexion au serveur de Misskey réussie !"
success-desc: "La connexion au serveur a été reussie. Veuillez recharger la page." success-desc: "Succès de la connexion au serveur de Misskey. Veuillez recharger la page."
flush: "Vider le cache" flush: "Vider le cache"
set-version: "Choisissez une version" set-version: "Choisissez une version"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "Trouver un utilisateur" search-user: "Trouver un·e utilisateur·rice"
you: "Vous" you: "Vous"
no-history: "Pas d'historique" no-history: "Pas d'historique"
common/views/components/messaging-room.vue: common/views/components/messaging-room.vue:
empty: "Pas de conversations" empty: "Pas de conversations"
more: "Voir Plus" more: "Voir plus"
no-history: "Il n'y a pas plus d'historique" no-history: "Il n'y a pas plus d'historique"
resize-form: "Faites glisser pour redimensionner" resize-form: "Faites glisser pour redimensionner"
new-message: "Nouveau message" new-message: "Nouveau message"
only-one-file-attached: "Un seul fichier peut être joint au message"
common/views/components/messaging-room.form.vue: common/views/components/messaging-room.form.vue:
input-message-here: "Tapez ici votre message" input-message-here: "Tapez ici votre message"
send: "Envoyer" send: "Envoyer"
attach-from-local: "Joindre un fichier depuis votre PC" attach-from-local: "Joindre un fichier depuis votre ordinateur"
attach-from-drive: "Joindre un fichier depuis votre Drive" attach-from-drive: "Joindre un fichier depuis votre Drive"
only-one-file-attached: "Un seul fichier uniquement peut être joint au message"
common/views/components/messaging-room.message.vue: common/views/components/messaging-room.message.vue:
is-read: "Lu" is-read: "Lu"
deleted: "Ce message a été supprimé" deleted: "Ce message a été supprimé"
common/views/components/nav.vue: common/views/components/nav.vue:
about: "À propos" about: "À propos"
stats: "Stats" stats: "Statistiques"
status: "Status" status: "Statut"
wiki: "Wiki" wiki: "Wiki"
donors: "Donateurs" donors: "Donateur·rice·s"
repository: "Repo" repository: "Dépôt"
develop: "Développeurs" develop: "Développeur·se·s"
feedback: "Remarques" feedback: "Remarques"
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
favorite: "Favorite this note" favorite: "Mettre cette note en favoris"
pin: "Épingler sur votre profile" pin: "Épingler sur votre profil"
delete: "Supprimer" delete: "Supprimer"
delete-confirm: "Supprimer cette publication ?" delete-confirm: "Supprimer cette publication ?"
remote: "Afficher les note originale" remote: "Afficher la note originale"
common/views/components/poll.vue: common/views/components/poll.vue:
vote-to: "Voter pour '{}'" vote-to: "Voter pour '{}'"
vote-count: "{} votes" vote-count: "{} votes"
total-users: "{} utilisateurs ont voté" total-users: "{} utilisateur·rice·s ont voté·e·s"
vote: "Vote" vote: "Vote"
show-result: "Montrer les résultats" show-result: "Montrer les résultats"
voted: "Voté" voted: "Voté"
@ -274,48 +280,53 @@ common/views/components/poll-editor.vue:
common/views/components/reaction-picker.vue: common/views/components/reaction-picker.vue:
choose-reaction: "Choisissez votre réaction" choose-reaction: "Choisissez votre réaction"
common/views/components/signin.vue: common/views/components/signin.vue:
username: "Nom d'utilisateur" username: "Nom d'utilisateur·rice"
password: "Mot de passe" password: "Mot de passe"
token: "Token" token: "Token"
signing-in: "Connexion...." signing-in: "Connexion"
signin: "Se connecter" signin: "Se connecter"
or: "Ou"
signin-with-twitter: "Se connecter via Twitter"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue: common/views/components/signup.vue:
username: "Nom d'utilisateur" invitation-code: "Code dinvitation"
checking: "Vérification" invitation-info: "Si vous navez pas de code dinvitation, contactez un·e <a href=\"{}\">administrateur·rice</a>."
username: "Nom d'utilisateur·rice"
checking: "Vérification…"
available: "Disponible" available: "Disponible"
unavailable: "Non disponible" unavailable: "Non disponible"
error: "Erreur de réseau" error: "Erreur du réseau"
invalid-format: "Utilisez seulement des lettres, nombres et/ou -." invalid-format: "Vous pouvez utiliser des lettres, des nombres et _."
too-short: "Veuillez taper au moins un charactère!" too-short: "Veuillez saisir au moins un caractère !"
too-long: "Veuillez entrer au maximum 20 charactères." too-long: "Veuillez entrer au maximum 20 caractères."
password: "Mot de Passe" password: "Mot de passe"
password-placeholder: "Nous recommendons au moins 8 charactères." password-placeholder: "Nous recommandons au moins 8 caractères."
weak-password: "Faible" weak-password: "Faible"
normal-password: "Moyen" normal-password: "Moyen"
strong-password: "Fort" strong-password: "Fort"
retype: "Retapez" retype: "Retapez"
retype-placeholder: "Confirmez votre mot de passe" retype-placeholder: "Confirmez votre mot de passe"
password-matched: "OK" password-matched: "OK"
password-not-matched: "Les mots de passes ne correspondent pas." password-not-matched: "Les mots de passe ne correspondent pas."
recaptcha: "Vérifier" recaptcha: "Vérifier"
create: "Créer un compte" create: "Créer un compte"
some-error: "La création de compte a échoué. Veuillez ressayer." some-error: "La création du compte a échoué. Veuillez réessayer."
common/views/components/special-message.vue: common/views/components/special-message.vue:
new-year: "Bonne année!" new-year: "Bonne année !"
christmas: "Joyeux Noël!" christmas: "Joyeux Noël !"
common/views/components/stream-indicator.vue: common/views/components/stream-indicator.vue:
connecting: "Connexion en cours" connecting: "Connexion en cours"
reconnecting: "Re-connexion en cours" reconnecting: "Reconnexion en cours"
connected: "Connecté" connected: "Connecté"
common/views/components/twitter-setting.vue: 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 profile, vous aurez aussi la possibilité de vous connecter à Misskey en utilisant votre compte Twitter." 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" connected-to: "Vous êtes connecté à ce compte Twitter"
detail: "Detail..." detail: "Détails…"
reconnect: "Reconnecter" reconnect: "Reconnexion"
connect: "Lier votre compte Twitter" connect: "Lier votre compte Twitter"
disconnect: "Deconnecter" disconnect: "Déconnexion"
common/views/components/uploader.vue: common/views/components/uploader.vue:
waiting: "En attente" waiting: "Veuillez patienter"
common/views/components/visibility-chooser.vue: common/views/components/visibility-chooser.vue:
public: "Public" public: "Public"
home: "Accueil" home: "Accueil"
@ -323,87 +334,98 @@ common/views/components/visibility-chooser.vue:
followers: "Abonné·e·s" followers: "Abonné·e·s"
followers-desc: "Publier à vos abonné·e·s uniquement" followers-desc: "Publier à vos abonné·e·s uniquement"
specified: "Direct" specified: "Direct"
specified-desc: "Publier aux utilisateurs mentionnés" specified-desc: "Publier aux utilisateur·rice·s mentionné·e·s"
private: "Privé" private: "Privé"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "Récuperation" fetching: "Récupération"
no-broadcasts: "No broadcasts" no-broadcasts: "Aucune annonce"
have-a-nice-day: "Passez une bonne journée!" have-a-nice-day: "Passez une bonne journée !"
next: "Suivant" next: "Suivant"
common/views/widgets/calendar.vue: common/views/widgets/calendar.vue:
year: "{} année" year: "Année {}"
month: "{} mois" month: "Mois {}"
day: "{} jour" day: "Jour {}"
today: "Aujourd'hui :" today: "Aujourd'hui :"
this-month: "Ce mois-ci :" this-month: "Ce mois-ci :"
this-year: "Cette année :" this-year: "Cette année :"
common/views/widgets/donation.vue: common/views/widgets/donation.vue:
title: "Dons" title: "Faire un don"
text: "Toutes les depences pour couvrir les frais de Misskey sortent directement de notre poche. Nous ne recevons pas d'argent, si vous pouvez nous faire dons d'argent, on vous serait eternellement reconnaissant. Si vous êtes intéressés veuilles contacter {}. Merci pour votre contribution!" 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: common/views/widgets/photo-stream.vue:
title: "Flux de photo" title: "Flux de photos"
no-photos: "Pas de photos" no-photos: "Pas de photo"
common/views/widgets/posts-monitor.vue: common/views/widgets/posts-monitor.vue:
title: "Graph des publications" title: "Graphe des publications"
toggle: "Basculer les vues" toggle: "Basculer entre les vues"
common/views/widgets/hashtags.vue: common/views/widgets/hashtags.vue:
title: "Étiquettes" title: "Étiquettes"
count: "{} utilisateurs mentionnés" count: "{} utilisateur·rice·s mentionné·e·s"
empty: "Aucune tendance" empty: "Aucune tendance"
common/views/widgets/server.vue: common/views/widgets/server.vue:
title: "Info sur le serveur" title: "Informations sur le serveur"
toggle: "Afficher les vues" toggle: "Afficher les vues"
common/views/widgets/memo.vue: common/views/widgets/memo.vue:
title: "Pense-bête" title: "Pense-bête"
memo: "Écrivez ici !" memo: "Écrivez ici !"
save: "Enregistrer" save: "Enregistrer"
common/views/widgets/slideshow.vue: common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください" folder-customize-mode: "Pour pouvoir spécifier un dossier, veuillez quitter le mode de personnalisation"
folder: "Veuillez cliquer pour spécifier le dossier" folder: "Veuillez cliquer pour spécifier le dossier"
no-image: "Il n'y a aucune image dans ce dossier" no-image: "Il n'y a aucune image dans ce dossier"
common/views/widgets/tips.vue: common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます" tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます" tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます" tips-line3: "Vous pouvez glisser et déposer des fichiers sur la fenêtre de la note"
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます" tips-line4: "Vous pouvez coller des images à partir du presse-papier sur la fenêtre de la note"
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます" tips-line5: "Vous pouvez téléverser des fichiers sur le Drive en faisant un glisser-déposer"
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます" tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます" tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
tips-line8: "ホームは設定からカスタマイズできます" tips-line8: "Vous pouvez personnaliser l'Accueil via les paramètres"
tips-line9: "Misskey est sous licence AGPLv3" tips-line9: "Misskey est sous licence AGPLv3"
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます" tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます" tips-line11: "Vous pouvez épingler des notes sur votre page en cliquant sur « … »"
tips-line13: "投稿に添付したファイルは全てドライブに保存されます" tips-line13: "Tous les fichiers attachés à cette publication sont sauvegardés dans le Drive"
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます" tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
tips-line17: "「**」でテキストを囲むと**強調表示**されます" tips-line17: "Vous pouvez mettre un texte en surbrillance en le mettant entre ** **"
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます" tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています" tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
tips-line21: "APIを利用してbotの開発なども行えます" tips-line21: "Vous pouvez aussi utiliser l'API pour développer des Bots."
tips-line23: "まゆかわいいよまゆ" tips-line23: "まゆかわいいよまゆ"
tips-line24: "Misskeyは2014年にサービスを開始しました" tips-line24: "Misskey a vu le jour en 2014"
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます" tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
common/views/pages/follow.vue: common/views/pages/follow.vue:
signed-in-as: "Connecté·é en tant que {}" signed-in-as: "Connecté·e en tant que {}"
following: "Suit" following: "Suit"
follow: "Suivre" follow: "Suivre"
request-pending: "Demande d'abonnement en attente" request-pending: "Demande d'abonnement en attente"
follow-request: "Demande d'abonnement" follow-request: "Demande d'abonnement"
desktop:
banner-crop-title: "Découpez la partie qui apparaitra comme bannière"
banner: "Bannière"
uploading-banner: "Téléversement d'une nouvelle bannière"
banner-updated: "La bannière est mise à jour"
choose-banner: "Choisir une bannière"
avatar-crop-title: "Découpez la partie qui apparaitra comme avatar"
avatar: "Avatar"
uploading-avatar: "Téléversement du nouvel avatar"
avatar-updated: "L'avatar est mis à jour"
choose-avatar: "Choisir un avatar"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Noirs ... Total" total: "Noirs ... Total"
notes: "Bleu ... Notes" notes: "Bleu ... Notes"
replies: "Rouge ... Réponses" replies: "Rouge ... Réponses"
renotes: "Vert ... Partages" renotes: "Vert ... Partages"
desktop/views/components/activity.vue: desktop/views/components/activity.vue:
title: "Activitié" title: "Activité"
toggle: "Afficher les vues" toggle: "Afficher les vues"
desktop/views/components/calendar.vue: desktop/views/components/calendar.vue:
title: "{1} / {2}" title: "{1} / {2}"
prev: "Mois dernier" prev: "Mois dernier"
next: "Mois prochain" next: "Mois prochain"
go: "Cliquer pour naviguer" go: "Cliquez pour naviguer"
desktop/views/components/choose-file-from-drive-window.vue: desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "Sélection de fichiers" choose-file: "Sélection de fichiers"
upload: "Téléverser des fichiers à partir de votre PC" upload: "Téléverser des fichiers à partir de votre ordinateur"
cancel: "Annuler" cancel: "Annuler"
ok: "OK" ok: "OK"
choose-prompt: "Choisir un fichier" choose-prompt: "Choisir un fichier"
@ -434,14 +456,14 @@ desktop/views/components/drive.file.vue:
add-app: "Ajouter une application" add-app: "Ajouter une application"
rename-file: "Renommer le ficher" rename-file: "Renommer le ficher"
input-new-file-name: "Entrer un nouveau nom" input-new-file-name: "Entrer un nouveau nom"
copied: "Copied" copied: "Copié"
copied-url-to-clipboard: "L'URL a été copié dans le presse-papier" copied-url-to-clipboard: "L'URL a été copiée dans le presse-papier"
desktop/views/components/drive.folder.vue: desktop/views/components/drive.folder.vue:
unable-to-process: "L'opération n'a pas pu être complétée" unable-to-process: "L'opération n'a pas pu être complétée"
circular-reference-detected: "Le dossier de destination est un sous-dossier du dossier que vous souhaitez déplacer." circular-reference-detected: "Le dossier de destination est un sous-dossier du dossier que vous souhaitez déplacer."
unhandled-error: "Erreur inconnue" unhandled-error: "Erreur inconnue"
contextmenu: contextmenu:
move-to-this-folder: "Bouger dans ce dossier" move-to-this-folder: "Déplacer dans ce dossier"
show-in-new-window: "Ouvrir dans une nouvelle fenêtre" show-in-new-window: "Ouvrir dans une nouvelle fenêtre"
rename: "Renommer" rename: "Renommer"
rename-folder: "Renommer le dossier" rename-folder: "Renommer le dossier"
@ -522,6 +544,8 @@ desktop/views/components/notes.note.vue:
detail: "Afficher les détails" detail: "Afficher les détails"
private: "cette publication est privée" private: "cette publication est privée"
deleted: "cette publication a été supprimée" deleted: "cette publication a été supprimée"
hide: "Masquer"
see-more: "Voir plus"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "Échec du chargement." error: "Échec du chargement."
retry: "Réessayer" retry: "Réessayer"
@ -530,9 +554,9 @@ desktop/views/components/notifications.vue:
more: "Plus" more: "Plus"
empty: "Pas de notifications" empty: "Pas de notifications"
desktop/views/components/post-form.vue: desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加" add-visible-user: "+Ajouter un utilisateur"
attach-location-information: "位置情報を添付する" attach-location-information: "Attacher des informations de localisation"
hide-contents: "内容を隠す" hide-contents: "Masquer les contenus"
reply-placeholder: "Répondre à cette note" reply-placeholder: "Répondre à cette note"
quote-placeholder: "Citer cette note" quote-placeholder: "Citer cette note"
submit: "Poster" submit: "Poster"
@ -552,11 +576,12 @@ desktop/views/components/post-form.vue:
create-poll: "Créer un sondage" create-poll: "Créer un sondage"
text-remain: "{} charactères restants" text-remain: "{} charactères restants"
recent-tags: "Récent" recent-tags: "Récent"
click-to-tagging: "クリックでタグ付け" click-to-tagging: "Cliquer pour tagguer"
visibility: "公開範囲" visibility: "Visibilité"
geolocation-alert: "お使いの端末は位置情報に対応していません" geolocation-alert: "Votre appareil ne prend pas en charge les services de localisation"
error: "エラー" error: "Erreur"
enter-username: "ユーザー名を入力してください" enter-username: "Saisir un nom d'utilisateur …"
annotations: "内容への注釈 (オプション)"
desktop/views/components/post-form-window.vue: desktop/views/components/post-form-window.vue:
note: "Nouvelle note" note: "Nouvelle note"
reply: "Répondre" reply: "Répondre"
@ -603,9 +628,11 @@ desktop/views/components/settings.vue:
circle-icons: "Utiliser des icônes circulaires" circle-icons: "Utiliser des icônes circulaires"
gradient-window-header: "Utiliser les dégradés sur la barre de titre de la fenêtre" gradient-window-header: "Utiliser les dégradés sur la barre de titre de la fenêtre"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
show-reply-target: "リプライ先を表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-reply-target: "Afficher les réponses"
show-my-renotes: "Afficher mes republications dans le fil" show-my-renotes: "Afficher mes republications dans le fil"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "Afficher la carte" show-maps: "Afficher la carte"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。" show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "Son" sound: "Son"
@ -678,8 +705,8 @@ desktop/views/components/settings.api.vue:
desktop/views/components/settings.apps.vue: desktop/views/components/settings.apps.vue:
no-apps: "Aucune application autorisée" no-apps: "Aucune application autorisée"
desktop/views/components/settings.drive.vue: desktop/views/components/settings.drive.vue:
max: "" max: "Maximum"
in-use: "使用中" in-use: "en cours dutilisation"
desktop/views/components/settings.mute.vue: desktop/views/components/settings.mute.vue:
no-users: "Aucun utilisateurs mis en sourdine" no-users: "Aucun utilisateurs mis en sourdine"
desktop/views/components/settings.password.vue: desktop/views/components/settings.password.vue:
@ -702,7 +729,7 @@ desktop/views/components/settings.profile.vue:
other: "Autre" other: "Autre"
is-bot: "Ce compte est un Bot" is-bot: "Ce compte est un Bot"
is-cat: "Ce compte est un Chat" is-cat: "Ce compte est un Chat"
profile-updated: "プロフィールを更新しました" profile-updated: "Profil mis à jour"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "cette publication est privée" private: "cette publication est privée"
deleted: "cette publication a été supprimée" deleted: "cette publication a été supprimée"
@ -717,7 +744,8 @@ desktop/views/components/timeline.vue:
global: "Global" global: "Global"
list: "Listes" list: "Listes"
desktop/views/components/ui.header.vue: desktop/views/components/ui.header.vue:
welcome-back: "Vous êtes de retour !" welcome-back: "Content de vous revoir !"
adjective: "さん"
desktop/views/components/ui.header.account.vue: desktop/views/components/ui.header.account.vue:
profile: "Votre profil" profile: "Votre profil"
drive: "Drive" drive: "Drive"
@ -746,6 +774,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "Listes de l'utilisateur" title: "Listes de l'utilisateur"
create-list: "Créer une liste" create-list: "Créer une liste"
list-name: "Nom de la liste"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "Publications" notes: "Publications"
following: "Abonné à" following: "Abonné à"
@ -760,6 +789,46 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "Fermer" close: "Fermer"
desktop/views/pages/admin/admin.vue:
dashboard: "ダッシュボード"
drive: "Drive"
users: "Utilisateur·rice·s"
update: "Mises à jour"
desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "Tou·te·s les utilisateur·rice·s"
original-users: "Utilisateur·rice·s sur cette instance"
all-notes: "Toutes les publications"
original-notes: "Publication sur cette instance"
invite: "Invitation"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "Suspendre un·e utilisateur·rice"
suspend: "Suspendre"
suspended: "Suspendu avec succès"
desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "Lever la suspension dutilisateur·rice·s"
unsuspend: "Suspension levée"
unsuspended: "La suspension de lutilisateur·rice a été levée avec succès"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "Vérification du compte"
verified: "Le compte a été vérifié"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/admin/admin.notes-chart.vue:
title: "投稿"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.users-chart.vue:
title: "ユーザー"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.drive-chart.vue:
title: "ドライブ"
local: "ローカル"
remote: "リモート"
desktop/views/pages/deck/deck.tl-column.vue: desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "Les publications médias uniquement" is-media-only: "Les publications médias uniquement"
is-media-view: "Vue média" is-media-view: "Vue média"
@ -776,7 +845,7 @@ desktop/views/pages/welcome.vue:
signin-button: "Se connecter" signin-button: "Se connecter"
signup-button: "S'inscrire" signup-button: "S'inscrire"
timeline: "Fil d'actualité" timeline: "Fil d'actualité"
powered-by-misskey: "Powered by <b>Misskey</b>." powered-by-misskey: "Propulsé par <b>Misskey</b>."
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Lecteur de Misskey" title: "Lecteur de Misskey"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -792,12 +861,12 @@ desktop/views/pages/selectdrive.vue:
cancel: "Annuler" cancel: "Annuler"
upload: "Uploader un ou plusieurs fichier(s) depuis votre PC" upload: "Uploader un ou plusieurs fichier(s) depuis votre PC"
desktop/views/pages/search.vue: desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。" not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。" not-found: "Aucun message trouvé pour '{}'"
desktop/views/pages/share.vue: desktop/views/pages/share.vue:
share-with: "{}で共有" share-with: "Partager avec {}"
desktop/views/pages/tag.vue: desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。" no-posts-found: "Pas de message avec un hashtag {} trouvé."
desktop/views/pages/user-list.users.vue: desktop/views/pages/user-list.users.vue:
users: "Utilisateurs" users: "Utilisateurs"
add-user: "Ajouter un utilisateur" add-user: "Ajouter un utilisateur"
@ -822,12 +891,14 @@ desktop/views/pages/user/user.photos.vue:
no-photos: "Pas de photos" no-photos: "Pas de photos"
desktop/views/pages/user/user.profile.vue: desktop/views/pages/user/user.profile.vue:
follows-you: "Vous suis" follows-you: "Vous suis"
stalk: "ストークする" stalk: "Traquer"
stalking: "ストーキングしています" stalking: "ストーキングしています"
unstalk: "ストーク解除" unstalk: "ストーク解除"
mute: "Mettre en sourdine" mute: "Mettre en sourdine"
muted: "Muting" muted: "Muting"
unmute: "Enlever la sourdine" unmute: "Enlever la sourdine"
push-to-a-list: "Ajouter à la liste"
list-pushed: "Vous avez ajouté {user} à la liste {list}."
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "Notes" posts: "Notes"
following: "Suit" following: "Suit"
@ -870,11 +941,11 @@ mobile/views/components/drive.vue:
load-more: "Charger plus" load-more: "Charger plus"
nothing-in-drive: "Rien" nothing-in-drive: "Rien"
folder-is-empty: "Ce dossier est vide" folder-is-empty: "Ce dossier est vide"
prompt: "何をしますか?(数字を入力してください): <1 → ファイルをアップロード | 2 → ファイルをURLでアップロード | 3 → フォルダ作成 | 4 → このフォルダ名を変更 | 5 → このフォルダを移動 | 6 → このフォルダを削除>" prompt: "Que veux-tu faire ? (Entrez un nombre): <1 → Télécharger le fichier | 2 → Télécharger le fichier avec l'URL | 3 → Créer le dossier | 4 → Modifier le nom du dossier | 5 → Déplacer ce dossier | 6 → Supprimer ce dossier >"
deletion-alert: "Désolé ! La suppression dun dossier nest pas encore implémentée." deletion-alert: "Désolé ! La suppression dun dossier nest pas encore implémentée."
folder-name: "Nom du dossier" folder-name: "Nom du dossier"
root-rename-alert: "現在いる場所はルートで、フォルダではないため名前の変更はできません。名前を変更したいフォルダに移動してからやってください。" root-rename-alert: "L'emplacement actuel est la racine, pas le dossier, vous ne pouvez donc pas le renommer. Veuillez vous déplacer dans le dossier dont vous souhaitez modifier le nom."
root-move-alert: "現在いる場所はルートで、フォルダではないため移動はできません。移動したいフォルダに移動してからやってください。" root-move-alert: "L'emplacement actuel est la racine, ce n'est pas un dossier et il ne peut pas être déplacé. Veuillez vous déplacer dans le dossier que vous souhaitez déplacer."
url-prompt: "URL du fichier que vous souhaitez téléverser" url-prompt: "URL du fichier que vous souhaitez téléverser"
uploading: "アップロードをリクエストしました。アップロードが完了するまで時間がかかる場合があります。" uploading: "アップロードをリクエストしました。アップロードが完了するまで時間がかかる場合があります。"
mobile/views/components/drive-file-detail.vue: mobile/views/components/drive-file-detail.vue:
@ -941,7 +1012,7 @@ mobile/views/components/post-form.vue:
renote: "Republier" renote: "Republier"
quote-placeholder: "Citer ce billet ... (Facultatif)" quote-placeholder: "Citer ce billet ... (Facultatif)"
reply-placeholder: "Répondre à cette note" reply-placeholder: "Répondre à cette note"
cw-placeholder: "内容への注釈 (オプション)" cw-placeholder: "Commenter le contenu (optionnel)"
location-alert: "Votre appareil ne prend pas en charge les services de localisation" location-alert: "Votre appareil ne prend pas en charge les services de localisation"
error: "Erreur" error: "Erreur"
username-prompt: "Saisir un nom d'utilisateur" username-prompt: "Saisir un nom d'utilisateur"
@ -954,7 +1025,8 @@ mobile/views/components/timeline.vue:
empty: "Pas de notes" empty: "Pas de notes"
load-more: "Afficher plus" load-more: "Afficher plus"
mobile/views/components/ui.header.vue: mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "Content de vous revoir ! "
adjective: "さん"
mobile/views/components/ui.nav.vue: mobile/views/components/ui.nav.vue:
timeline: "Fil d'actualité" timeline: "Fil d'actualité"
notifications: "Notifications" notifications: "Notifications"
@ -986,7 +1058,7 @@ mobile/views/pages/drive.vue:
drive: "Drive" drive: "Drive"
more: "Afficher plus ..." more: "Afficher plus ..."
mobile/views/pages/signup.vue: mobile/views/pages/signup.vue:
lets-start: "📦 始めましょう" lets-start: "Commençons ! 📦"
mobile/views/pages/followers.vue: mobile/views/pages/followers.vue:
followers-of: "Abonné·e·s de {}" followers-of: "Abonné·e·s de {}"
mobile/views/pages/following.vue: mobile/views/pages/following.vue:
@ -997,16 +1069,18 @@ mobile/views/pages/home.vue:
hybrid: "Social" hybrid: "Social"
global: "Global" global: "Global"
mobile/views/pages/tag.vue: mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。" no-posts-found: "Pas de message avec un hashtag {} trouvé."
mobile/views/pages/welcome.vue: mobile/views/pages/welcome.vue:
signup: "新規登録" signup: "S'enregistrer"
mobile/views/pages/widgets.vue: mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード" dashboard: "Tableau de bord"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。" widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
add-widget: "Ajouter"
customization-tips: "Conseils de personnalisation"
mobile/views/pages/widgets/activity.vue: mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ" activity: "Activité"
mobile/views/pages/share.vue: mobile/views/pages/share.vue:
share-with: "{}で共有" share-with: "Partager avec {}"
mobile/views/pages/messaging.vue: mobile/views/pages/messaging.vue:
messaging: "Messagerie" messaging: "Messagerie"
mobile/views/pages/messaging-room.vue: mobile/views/pages/messaging-room.vue:
@ -1023,7 +1097,7 @@ mobile/views/pages/notifications.vue:
notifications: "Notifications" notifications: "Notifications"
read-all: "Êtes vous sûr de vouloir marqués toutes les notifications non-lus en tant que lus?" read-all: "Êtes vous sûr de vouloir marqués toutes les notifications non-lus en tant que lus?"
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "リバーシ" reversi: "Reversi"
mobile/views/pages/settings/settings.profile.vue: mobile/views/pages/settings/settings.profile.vue:
title: "Profil" title: "Profil"
name: "Nom" name: "Nom"
@ -1041,6 +1115,7 @@ mobile/views/pages/settings/settings.profile.vue:
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "Chercher" search: "Chercher"
empty: "Aucun message trouvé pour '{}' " empty: "Aucun message trouvé pour '{}' "
not-found: "Aucun post pour {} n'a été trouvé."
mobile/views/pages/selectdrive.vue: mobile/views/pages/selectdrive.vue:
select-file: "Choisissez un fichier" select-file: "Choisissez un fichier"
mobile/views/pages/settings.vue: mobile/views/pages/settings.vue:
@ -1055,9 +1130,10 @@ mobile/views/pages/settings.vue:
i-am-under-limited-internet: "J'ai un accès Internet limité" i-am-under-limited-internet: "J'ai un accès Internet limité"
circle-icons: "Utiliser des icônes circulaires" circle-icons: "Utiliser des icônes circulaires"
timeline: "Fil d'actualité" timeline: "Fil d'actualité"
show-reply-target: "リプライ先を表示する" show-reply-target: "Afficher les réponses"
show-my-renotes: "Afficher mes republications" show-my-renotes: "Afficher mes republications"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する" show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "Style de la publication" post-style: "Style de la publication"
post-style-standard: "Standard" post-style-standard: "Standard"
post-style-smart: "Intelligent" post-style-smart: "Intelligent"
@ -1123,15 +1199,17 @@ docs:
params: "Paramètres" params: "Paramètres"
no-params: "Aucun paramètre" no-params: "Aucun paramètre"
res: "Réponse" res: "Réponse"
require-credential: "このエンドポイントは認証情報が必須です。" require-credential: "Ce point de communication nécessite une authentification."
require-permission: "このエンドポイントは{permission}の権限を必要とします。" require-permission: "Ce point de communication nécessite la permission {permission}."
has-limit: "レートリミットがあります。" has-limit: "レートリミットがあります。"
duration-limit: "直近{duration}ミリ秒の間のこのエンドポイントへのリクエスト数の合計が{max}を超える場合はリクエストできません。" duration-limit: "直近{duration}ミリ秒の間のこのエンドポイントへのリクエスト数の合計が{max}を超える場合はリクエストできません。"
min-interval-limit: "前回のリクエストから{interval}ミリ秒経っていない場合はリクエストできません。" min-interval-limit: "前回のリクエストから{interval}ミリ秒経っていない場合はリクエストできません。"
show-src: "このエンドポイントのソースコードも閲覧できます。" show-src: "Vous pouvez voir le code source ce point de communication."
show-src-link: "Consulter le code sur GitHub" show-src-link: "Consulter le code sur GitHub"
generated: "このドキュメントはAPI定義に基づき自動生成されています。" generated: "Ce document est généré à partir de la définition de lAPI."
props: props:
name: "Nom" name: "Nom"
type: "Type" type: "Type"
description: "Description" description: "Description"
dev/views/index.vue:
manage-apps: "Gestion des applications"

View File

@ -15,6 +15,7 @@ const langs = {
'en': loadLang('en'), 'en': loadLang('en'),
'fr': loadLang('fr'), 'fr': loadLang('fr'),
'ja': native, 'ja': native,
'ja-ks': loadLang('ja-ks'),
'pl': loadLang('pl'), 'pl': loadLang('pl'),
'es': loadLang('es') 'es': loadLang('es')
}; };

View File

@ -11,6 +11,8 @@ common:
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携" application-authorization: "アプリの連携"
close: "閉じる" close: "閉じる"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
got-it: "わかった"
customization-tips: customization-tips:
title: "カスタマイズのヒント" title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -26,7 +28,6 @@ common:
notified-by: "{}さんから" notified-by: "{}さんから"
reply-from: "{}さんから返信:" reply-from: "{}さんから返信:"
quoted-by: "{}さんが引用:" quoted-by: "{}さんが引用:"
name: "Misskey"
time: time:
unknown: "なぞのじかん" unknown: "なぞのじかん"
future: "未来" future: "未来"
@ -38,13 +39,8 @@ common:
weeks_ago: "{}週間前" weeks_ago: "{}週間前"
months_ago: "{}ヶ月前" months_ago: "{}ヶ月前"
years_ago: "{}年前" years_ago: "{}年前"
month-and-day: "{month}月 {day}日"
trash: "ゴミ箱" trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short: weekday-short:
sunday: "日" sunday: "日"
monday: "月" monday: "月"
@ -70,6 +66,7 @@ common:
congrats: "おめでとう" congrats: "おめでとう"
angry: "おこ" angry: "おこ"
confused: "こまこまのこまり" confused: "こまこまのこまり"
rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-placeholders: note-placeholders:
a: "今どうしてる?" a: "今どうしてる?"
@ -87,7 +84,8 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き" i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示" show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー" verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
reversi: reversi:
drawn: "引き分け" drawn: "引き分け"
my-turn: "あなたのターンです" my-turn: "あなたのターンです"
@ -168,6 +166,12 @@ common/views/components/games/reversi/reversi.vue:
matching: matching:
waiting-for: "{}を待っています" waiting-for: "{}を待っています"
cancel: "キャンセル" cancel: "キャンセル"
common/views/components/games/reversi/reversi.game.vue:
surrender: "投了"
surrendered: "投了により"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
common/views/components/games/reversi/reversi.index.vue: common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi" title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう" sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
@ -235,11 +239,13 @@ common/views/components/messaging-room.vue:
no-history: "これより過去の履歴はありません" no-history: "これより過去の履歴はありません"
resize-form: "ドラッグしてフォームの広さを調整" resize-form: "ドラッグしてフォームの広さを調整"
new-message: "新しいメッセージがあります" new-message: "新しいメッセージがあります"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.form.vue: common/views/components/messaging-room.form.vue:
input-message-here: "ここにメッセージを入力" input-message-here: "ここにメッセージを入力"
send: "送信" send: "送信"
attach-from-local: "PCからファイルを添付する" attach-from-local: "PCからファイルを添付する"
attach-from-drive: "ドライブからファイルを添付する" attach-from-drive: "ドライブからファイルを添付する"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.message.vue: common/views/components/messaging-room.message.vue:
is-read: "既読" is-read: "既読"
deleted: "このメッセージは削除されました" deleted: "このメッセージは削除されました"
@ -279,7 +285,12 @@ common/views/components/signin.vue:
token: "トークン" token: "トークン"
signing-in: "やってます..." signing-in: "やってます..."
signin: "サインイン" signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue: common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "ユーザー名" username: "ユーザー名"
checking: "確認しています..." checking: "確認しています..."
available: "利用できます" available: "利用できます"
@ -388,6 +399,17 @@ common/views/pages/follow.vue:
follow: "フォロー" follow: "フォロー"
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-request: "フォロー申請" follow-request: "フォロー申請"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -522,6 +544,8 @@ desktop/views/components/notes.note.vue:
detail: "詳細" detail: "詳細"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
hide: "隠す"
see-more: "もっと見る"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "読み込みに失敗しました。" error: "読み込みに失敗しました。"
retry: "リトライ" retry: "リトライ"
@ -557,6 +581,7 @@ desktop/views/components/post-form.vue:
geolocation-alert: "お使いの端末は位置情報に対応していません" geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー" error: "エラー"
enter-username: "ユーザー名を入力してください" enter-username: "ユーザー名を入力してください"
annotations: "内容への注釈 (オプション)"
desktop/views/components/post-form-window.vue: desktop/views/components/post-form-window.vue:
note: "新規投稿" note: "新規投稿"
reply: "返信" reply: "返信"
@ -603,9 +628,11 @@ desktop/views/components/settings.vue:
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用" gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開" show-maps: "マップの自動展開"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。" show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "サウンド" sound: "サウンド"
@ -718,6 +745,7 @@ desktop/views/components/timeline.vue:
list: "リスト" list: "リスト"
desktop/views/components/ui.header.vue: desktop/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "おかえりなさい、"
adjective: "さん"
desktop/views/components/ui.header.account.vue: desktop/views/components/ui.header.account.vue:
profile: "プロフィール" profile: "プロフィール"
drive: "ドライブ" drive: "ドライブ"
@ -746,6 +774,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
following: "フォロー" following: "フォロー"
@ -760,6 +789,46 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "閉じる"
desktop/views/pages/admin/admin.vue:
dashboard: "ダッシュボード"
drive: "ドライブ"
users: "ユーザー"
update: "更新"
desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
suspended: "凍結しました"
desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/admin/admin.notes-chart.vue:
title: "投稿"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.users-chart.vue:
title: "ユーザー"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.drive-chart.vue:
title: "ドライブ"
local: "ローカル"
remote: "リモート"
desktop/views/pages/deck/deck.tl-column.vue: desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
@ -792,7 +861,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "キャンセル" cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード" upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue: desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。" not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。" not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue: desktop/views/pages/share.vue:
share-with: "{}で共有" share-with: "{}で共有"
@ -828,6 +897,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"
following: "フォロー" following: "フォロー"
@ -955,6 +1026,7 @@ mobile/views/components/timeline.vue:
load-more: "もっと" load-more: "もっと"
mobile/views/components/ui.header.vue: mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "おかえりなさい、"
adjective: "さん"
mobile/views/components/ui.nav.vue: mobile/views/components/ui.nav.vue:
timeline: "タイムライン" timeline: "タイムライン"
notifications: "通知" notifications: "通知"
@ -1003,6 +1075,8 @@ mobile/views/pages/welcome.vue:
mobile/views/pages/widgets.vue: mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード" dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。" widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
add-widget: "追加"
customization-tips: "カスタマイズのヒント"
mobile/views/pages/widgets/activity.vue: mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ" activity: "アクティビティ"
mobile/views/pages/share.vue: mobile/views/pages/share.vue:
@ -1041,6 +1115,7 @@ mobile/views/pages/settings/settings.profile.vue:
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "検索" search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
mobile/views/pages/selectdrive.vue: mobile/views/pages/selectdrive.vue:
select-file: "ファイルを選択" select-file: "ファイルを選択"
mobile/views/pages/settings.vue: mobile/views/pages/settings.vue:
@ -1057,7 +1132,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する" show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
@ -1135,3 +1211,5 @@ docs:
name: "名前" name: "名前"
type: "型" type: "型"
description: "説明" description: "説明"
dev/views/index.vue:
manage-apps: "アプリの管理"

1412
locales/ja-ks.yml Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,136 +1,134 @@
--- ---
meta: meta:
lang: "日本語" lang: "한국어"
divider: "" divider: ""
common: common:
misskey: "A ⭐ of fediverse" misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse." about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。" about: "Misskey를 찾아 주셔서 감사합니다. Misskey은 지구에서 태어난 <b>분산 마이크로 블로그 SNS </b> 입니다. Fediverse (다양한 SNS로 구성되는 우주)에 존재하는 다른 SNS와 상호 연결되어 있습니다. 잠시 도시의 번잡함에서 벗어나 새로운 인터넷에 다이브 해 보지 않겠습니까."
adblock: adblock:
detected: "広告ブロッカーを無効にしてください" detected: "광고 차단기를 해제하십시오"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskey는 광고를 게재하지 않습니다</strong> 그러나 광고를 차단하는 기능 기능을 사용할 경우 일부 기능을 사용할 수 없게 될 가능성이나 결함이 발생하는 경우가 있습니다."
application-authorization: "アプリの連携" application-authorization: "앱의 연계"
close: "閉じる" close: "닫기"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
got-it: "알았습니다"
customization-tips: customization-tips:
title: "カスタマイズのヒント" title: "사용자 정의 팁"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" paragraph1: "홈 정의는 위젯을 추가 / 삭제하거나 드래그 앤 드롭하여 정렬 할 수 있습니다."
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。" paragraph2: "일부 위젯은 <strong>오른쪽 클릭</strong> 하여 모양을 변경할 수 있습니다."
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。" paragraph3: "위젯을 삭제하려면 헤더 <strong>\"휴지통\"</strong> 라고 쓰여진 영역으로 끌어다 놓습니다."
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。" paragraph4: "사용자 정의를 종료하려면 오른쪽 상단의 '완료' 를 클릭합니다."
gotit: "Got it!" gotit: "Got it!"
notification: notification:
file-uploaded: "ファイルがアップロードされました" file-uploaded: "파일이 업로드되었습니다"
message-from: "{}さんからメッセージ:" message-from: "{}씨로부터 메시지:"
reversi-invited: "対局への招待があります" reversi-invited: "대결에 초대되어 있습니다"
reversi-invited-by: "{}さんから" reversi-invited-by: "{}"
notified-by: "{}さんから" notified-by: "{}"
reply-from: "{}さんから返信:" reply-from: "{}님으로부터 답글:"
quoted-by: "{}さんが引用:" quoted-by: "{}씨가 인용:"
name: "Misskey"
time: time:
unknown: "なぞのじかん" unknown: "수수께끼의 시간"
future: "未来" future: "미래"
just_now: "たった今" just_now: "방금"
seconds_ago: "{}秒前" seconds_ago: "{}초전"
minutes_ago: "{}分前" minutes_ago: "{}분전"
hours_ago: "{}時間前" hours_ago: "{}시간전"
days_ago: "{}日前" days_ago: "{}일전"
weeks_ago: "{}週間前" weeks_ago: "{}주전"
months_ago: "{}ヶ月前" months_ago: "{}개월전"
years_ago: "{}年前" years_ago: "{}년전"
trash: "ゴミ箱" month-and-day: "{month}월 {day}일"
date: trash: "휴지통"
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short: weekday-short:
sunday: "" sunday: ""
monday: "" monday: ""
tuesday: "" tuesday: ""
wednesday: "" wednesday: ""
thursday: "" thursday: ""
friday: "" friday: ""
saturday: "" saturday: ""
weekday: weekday:
sunday: "日曜日" sunday: "일요일"
monday: "月曜日" monday: "월요일"
tuesday: "火曜日" tuesday: "화요일"
wednesday: "水曜日" wednesday: "수요일"
thursday: "木曜日" thursday: "목요일"
friday: "金曜日" friday: "금요일"
saturday: "土曜日" saturday: "토요일"
reactions: reactions:
like: "いいね" like: "좋네"
love: "しゅき" love: "좋아"
laugh: "" laugh: "크크"
hmm: "ふぅ~む" hmm: "음..."
surprise: "わお" surprise: "와우"
congrats: "おめでとう" congrats: "받으세요"
angry: "おこ" angry: "화냈어"
confused: "こまこまのこまり" confused: "곤란하고 있어"
rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-placeholders: note-placeholders:
a: "今どうしてる?" a: "지금 어떻게하고있어?"
b: "何かありましたか?" b: "뭔가 있었습니까?"
c: "何をお考えですか?" c: "무엇을 생각하십니까?"
d: "言いたいことは?" d: "말하고 싶은 것은?"
e: "ここに書いてください" e: "여기에 써주십시오"
f: "あなたが書くのを待っています..." f: "당신이 쓸 것을 당신 기다리고 있습니다..."
search: "検索" search: "검색"
delete: "削除" delete: "삭제"
loading: "読み込み中" loading: "로드 중"
ok: "わかった" ok: "확인"
update-available-title: "更新があります" update-available-title: "갱신이 있습니다"
update-available: "Misskeyの新しいバージョンがあります({newer}。現在{current}を利用中)。ページを再度読み込みすると更新が適用されます。" update-available: "Misskey의 새로운 버전이 있습니다 ({newer} 현재 {current}을 사용 중). 페이지를 다시로드하면 업데이트가 적용됩니다."
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" my-token-regenerated: "당신의 토큰이 업데이트되어 있기 때문에 로그 아웃합니다."
i-like-sushi: "私は(プリンよりむしろ)寿司が好き" i-like-sushi: "나는(푸딩보다 오히려)스시가 좋아"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示" show-reversi-board-labels: "리버시 보드의 행과 열 레이블을 표시"
verified-user: "認証済みのユーザー" verified-user: "公式アカウント"
disable-animated-mfm: "게시물의 문자 애니메이션을 비활성화 할"
reversi: reversi:
drawn: "引き分け" drawn: "무승부"
my-turn: "あなたのターンです" my-turn: "당신의 차례입니다"
opponent-turn: "相手のターンです" opponent-turn: "상대의 차례입니다"
turn-of: "{}のターンです" turn-of: "{}의 차례입니다"
past-turn-of: "{}のターン" past-turn-of: "{}"
won: "{}の勝ち" won: "{} 승리"
black: "" black: "검정"
white: "" white: "흰색"
total: "合計" total: "합계"
this-turn: "{}ターン目" this-turn: "{}턴눈"
widgets: widgets:
analog-clock: "アナログ時計" analog-clock: "아날로그 시계"
profile: "プロフィール" profile: "프로필"
calendar: "カレンダー" calendar: "달력"
timemachine: "カレンダー(タイムマシン)" timemachine: "달력(타임머신)"
activity: "アクティビティ" activity: "활동"
rss: "RSSリーダー" rss: "RSS 리더"
memo: "付箋" memo: "끈끈이"
trends: "トレンド" trends: "트렌드"
photo-stream: "フォトストリーム" photo-stream: "포토 스트림"
posts-monitor: "投稿チャート" posts-monitor: "게시물 차트"
slideshow: "スライドショー" slideshow: "슬라이드 쇼"
version: "バージョン" version: "버전"
broadcast: "ブロードキャスト" broadcast: "브로드 캐스트"
notifications: "通知" notifications: "통지"
users: "おすすめユーザー" users: "추천 사용자"
polls: "アンケート" polls: "설문"
post-form: "投稿フォーム" post-form: "게시 양식"
messaging: "メッセージ" messaging: "메시지"
server: "サーバー情報" server: "서버 정보"
donation: "寄付のお願い" donation: "기부 요청"
nav: "ナビゲーション" nav: "네비게이션"
tips: "ヒント" tips: ""
hashtags: "ハッシュタグ" hashtags: "해시 태그"
deck: deck:
widgets: "ウィジェット" widgets: "위젯"
home: "ホーム" home: ""
local: "ローカル" local: "로컬"
hybrid: "ソーシャル" hybrid: "소셜"
global: "グローバル" global: "글로벌"
notifications: "通知" notifications: "통지"
list: "リスト" list: "목록"
swap-left: "左に移動" swap-left: "左に移動"
swap-right: "右に移動" swap-right: "右に移動"
swap-up: "上に移動" swap-up: "上に移動"
@ -152,10 +150,10 @@ auth/views/form.vue:
drive-write: "ドライブを操作する。" drive-write: "ドライブを操作する。"
notification-read: "通知を見る。" notification-read: "通知を見る。"
notification-write: "通知を操作する。" notification-write: "通知を操作する。"
cancel: "キャンセル" cancel: "취소"
accept: "アクセスを許可" accept: "アクセスを許可"
auth/views/index.vue: auth/views/index.vue:
loading: "読み込み中" loading: "로드 중"
denied: "アプリケーションの連携をキャンセルしました。" denied: "アプリケーションの連携をキャンセルしました。"
denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。" denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。"
already-authorized: "このアプリは既に連携済みです" already-authorized: "このアプリは既に連携済みです"
@ -167,12 +165,18 @@ auth/views/index.vue:
common/views/components/games/reversi/reversi.vue: common/views/components/games/reversi/reversi.vue:
matching: matching:
waiting-for: "{}を待っています" waiting-for: "{}を待っています"
cancel: "キャンセル" cancel: "취소"
common/views/components/games/reversi/reversi.game.vue:
surrender: "기권"
surrendered: "投了により"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "루프 지도"
can-put-everywhere: "どこでも置けるモード"
common/views/components/games/reversi/reversi.index.vue: common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi" title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう" sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待" invite: "초대"
rule: "遊び方" rule: "게임 방법"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。" rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "招待" mode-invite: "招待"
mode-invite-desc: "指定したユーザーと対戦するモードです。" mode-invite-desc: "指定したユーザーと対戦するモードです。"
@ -181,26 +185,26 @@ common/views/components/games/reversi/reversi.index.vue:
all-games: "みんなの対局" all-games: "みんなの対局"
enter-username: "ユーザー名を入力してください" enter-username: "ユーザー名を入力してください"
game-state: game-state:
ended: "終了" ended: "종료"
playing: "進行中" playing: "진행중"
common/views/components/games/reversi/reversi.room.vue: common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定" settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択" choose-map: "マップを選択"
random: "ランダム" random: "ランダム"
black-or-white: "先手/後手" black-or-white: "先手/後手"
black-is: "{}が黒" black-is: "{}が黒"
rules: "ルール" rules: "규칙"
is-llotheo: "石の少ない方が勝ち(ロセオ)" is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ" looped-map: "루프 지도"
can-put-everywhere: "どこでも置けるモード" can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定" settings-of-the-bot: "Botの設定"
this-game-is-started-soon: "ゲームは数秒後に開始されます" this-game-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています" waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています" waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中" waiting-for-both: "준비중"
cancel: "キャンセル" cancel: "취소"
ready: "準備完了" ready: "준비 완료"
cancel-ready: "準備続行" cancel-ready: "준비 계속"
common/views/components/connect-failed.vue: common/views/components/connect-failed.vue:
title: "サーバーに接続できません" title: "サーバーに接続できません"
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。" description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
@ -227,7 +231,7 @@ common/views/components/connect-failed.troubleshooter.vue:
set-version: "バージョン指定" set-version: "バージョン指定"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "ユーザーを探す" search-user: "ユーザーを探す"
you: "あなた" you: "당신"
no-history: "履歴はありません" no-history: "履歴はありません"
common/views/components/messaging-room.vue: common/views/components/messaging-room.vue:
empty: "このユーザーと話したことはありません" empty: "このユーザーと話したことはありません"
@ -235,13 +239,15 @@ common/views/components/messaging-room.vue:
no-history: "これより過去の履歴はありません" no-history: "これより過去の履歴はありません"
resize-form: "ドラッグしてフォームの広さを調整" resize-form: "ドラッグしてフォームの広さを調整"
new-message: "新しいメッセージがあります" new-message: "新しいメッセージがあります"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.form.vue: common/views/components/messaging-room.form.vue:
input-message-here: "ここにメッセージを入力" input-message-here: "ここにメッセージを入力"
send: "送信" send: "전송"
attach-from-local: "PCからファイルを添付する" attach-from-local: "PCからファイルを添付する"
attach-from-drive: "ドライブからファイルを添付する" attach-from-drive: "ドライブからファイルを添付する"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.message.vue: common/views/components/messaging-room.message.vue:
is-read: "既読" is-read: "읽음"
deleted: "このメッセージは削除されました" deleted: "このメッセージは削除されました"
common/views/components/nav.vue: common/views/components/nav.vue:
about: "Misskeyについて" about: "Misskeyについて"
@ -279,7 +285,12 @@ common/views/components/signin.vue:
token: "トークン" token: "トークン"
signing-in: "やってます..." signing-in: "やってます..."
signin: "サインイン" signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue: common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "ユーザー名" username: "ユーザー名"
checking: "確認しています..." checking: "確認しています..."
available: "利用できます" available: "利用できます"
@ -388,6 +399,17 @@ common/views/pages/follow.vue:
follow: "フォロー" follow: "フォロー"
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-request: "フォロー申請" follow-request: "フォロー申請"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -522,6 +544,8 @@ desktop/views/components/notes.note.vue:
detail: "詳細" detail: "詳細"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
hide: "隠す"
see-more: "もっと見る"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "読み込みに失敗しました。" error: "読み込みに失敗しました。"
retry: "リトライ" retry: "リトライ"
@ -557,6 +581,7 @@ desktop/views/components/post-form.vue:
geolocation-alert: "お使いの端末は位置情報に対応していません" geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー" error: "エラー"
enter-username: "ユーザー名を入力してください" enter-username: "ユーザー名を入力してください"
annotations: "内容への注釈 (オプション)"
desktop/views/components/post-form-window.vue: desktop/views/components/post-form-window.vue:
note: "新規投稿" note: "新規投稿"
reply: "返信" reply: "返信"
@ -603,9 +628,11 @@ desktop/views/components/settings.vue:
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用" gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開" show-maps: "マップの自動展開"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。" show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "サウンド" sound: "サウンド"
@ -718,6 +745,7 @@ desktop/views/components/timeline.vue:
list: "リスト" list: "リスト"
desktop/views/components/ui.header.vue: desktop/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "おかえりなさい、"
adjective: "さん"
desktop/views/components/ui.header.account.vue: desktop/views/components/ui.header.account.vue:
profile: "プロフィール" profile: "プロフィール"
drive: "ドライブ" drive: "ドライブ"
@ -746,6 +774,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
following: "フォロー" following: "フォロー"
@ -760,6 +789,46 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "閉じる"
desktop/views/pages/admin/admin.vue:
dashboard: "ダッシュボード"
drive: "ドライブ"
users: "ユーザー"
update: "更新"
desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
suspended: "凍結しました"
desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/admin/admin.notes-chart.vue:
title: "投稿"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.users-chart.vue:
title: "ユーザー"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.drive-chart.vue:
title: "ドライブ"
local: "ローカル"
remote: "リモート"
desktop/views/pages/deck/deck.tl-column.vue: desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
@ -792,7 +861,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "キャンセル" cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード" upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue: desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。" not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。" not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue: desktop/views/pages/share.vue:
share-with: "{}で共有" share-with: "{}で共有"
@ -828,6 +897,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"
following: "フォロー" following: "フォロー"
@ -955,6 +1026,7 @@ mobile/views/components/timeline.vue:
load-more: "もっと" load-more: "もっと"
mobile/views/components/ui.header.vue: mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "おかえりなさい、"
adjective: "さん"
mobile/views/components/ui.nav.vue: mobile/views/components/ui.nav.vue:
timeline: "タイムライン" timeline: "タイムライン"
notifications: "通知" notifications: "通知"
@ -1003,6 +1075,8 @@ mobile/views/pages/welcome.vue:
mobile/views/pages/widgets.vue: mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード" dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。" widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
add-widget: "追加"
customization-tips: "カスタマイズのヒント"
mobile/views/pages/widgets/activity.vue: mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ" activity: "アクティビティ"
mobile/views/pages/share.vue: mobile/views/pages/share.vue:
@ -1041,6 +1115,7 @@ mobile/views/pages/settings/settings.profile.vue:
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "検索" search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
mobile/views/pages/selectdrive.vue: mobile/views/pages/selectdrive.vue:
select-file: "ファイルを選択" select-file: "ファイルを選択"
mobile/views/pages/settings.vue: mobile/views/pages/settings.vue:
@ -1057,7 +1132,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する" show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
@ -1135,3 +1211,5 @@ docs:
name: "名前" name: "名前"
type: "型" type: "型"
description: "説明" description: "説明"
dev/views/index.vue:
manage-apps: "アプリの管理"

View File

@ -11,12 +11,14 @@ common:
warning: "<strong>Misskey nie zawiera reklam</strong>, ale część funkcji może nie działać prawidłowo z włączonym blokowaniem reklam." warning: "<strong>Misskey nie zawiera reklam</strong>, ale część funkcji może nie działać prawidłowo z włączonym blokowaniem reklam."
application-authorization: "アプリの連携" application-authorization: "アプリの連携"
close: "Zamknij" close: "Zamknij"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
got-it: "Rozumiem!"
customization-tips: customization-tips:
title: "カスタマイズのヒント" title: "Wskazówki o dostosowywaniu"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" paragraph1: "Dostosowywanie strony głównej pozwala na dodawanie, usuwanie, przeciąganie i zmienianie kolejności widżetów."
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。" paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。" paragraph3: "Aby usunąć widżet, <strong>przeciągnij i upuść widżet do części nazwanej „Kosz”</strong> w nagłówku."
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。" paragraph4: "Aby zakończyć dostosowywanie, naciśnij „Zakończ” w w prawym górnym rogu."
gotit: "Rozumiem!" gotit: "Rozumiem!"
notification: notification:
file-uploaded: "Wysłano plik!" file-uploaded: "Wysłano plik!"
@ -26,7 +28,6 @@ common:
notified-by: "Powiadomiono przez {}:" notified-by: "Powiadomiono przez {}:"
reply-from: "Odpowiedź od {}:" reply-from: "Odpowiedź od {}:"
quoted-by: "Zacytowano przez {}:" quoted-by: "Zacytowano przez {}:"
name: "Misskey"
time: time:
unknown: "nieznany" unknown: "nieznany"
future: "w przyszłości" future: "w przyszłości"
@ -38,13 +39,8 @@ common:
weeks_ago: "{} tyg. temu" weeks_ago: "{} tyg. temu"
months_ago: "{} mies. temu" months_ago: "{} mies. temu"
years_ago: "{} lat temu" years_ago: "{} lat temu"
month-and-day: "{month}-{day}"
trash: "Kosz" trash: "Kosz"
date:
full-year: "Rok"
month: "Miesiąc"
day: "Dzień"
hours: "Godzina"
minutes: "Minuty"
weekday-short: weekday-short:
sunday: "N" sunday: "N"
monday: "Pn" monday: "Pn"
@ -70,6 +66,7 @@ common:
congrats: "Gratuluję!" congrats: "Gratuluję!"
angry: "Wściekły" angry: "Wściekły"
confused: "Zmieszany" confused: "Zmieszany"
rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-placeholders: note-placeholders:
a: "Co robisz?" a: "Co robisz?"
@ -87,7 +84,8 @@ common:
my-token-regenerated: "Twój token został wygenerowany. Zostaniesz wylogowany." my-token-regenerated: "Twój token został wygenerowany. Zostaniesz wylogowany."
i-like-sushi: "Wolę sushi od puddingu" i-like-sushi: "Wolę sushi od puddingu"
show-reversi-board-labels: "Pokazuj podpisy wierszy i kolumn w Reversi" show-reversi-board-labels: "Pokazuj podpisy wierszy i kolumn w Reversi"
verified-user: "Zweryfikowany użytkownik" verified-user: "公式アカウント"
disable-animated-mfm: "Wyłącz animowany tekst we wpisach"
reversi: reversi:
drawn: "Remis" drawn: "Remis"
my-turn: "Twoja kolej" my-turn: "Twoja kolej"
@ -141,66 +139,72 @@ common:
stack-left: "Przypnij do lewej" stack-left: "Przypnij do lewej"
pop-right: "Odepnij w prawo" pop-right: "Odepnij w prawo"
auth/views/form.vue: auth/views/form.vue:
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?" share-access: "Czy chcesz <b>zezwolić</b> <i>{{ app.name }}</i> na dostęp do Twojego konta?"
permission-ask: "このアプリは次の権限を要求しています:" permission-ask: "Ta aplikacja wymaga następujących uprawnień:"
account-read: "アカウントの情報を見る。" account-read: "Wyświetlanie informacji o koncie:"
account-write: "アカウントの情報を操作する。" account-write: "Modyfikowanie informacji o koncie:"
note-write: "投稿する。" note-write: "Publikacja."
like-write: "いいねしたりいいね解除する。" like-write: "Reagowanie na wpisy."
following-write: "フォローしたりフォロー解除する。" following-write: "Śledzenie i cofanie śledzenia."
drive-read: "ドライブを見る。" drive-read: "Odczytywanie Twojego dysku."
drive-write: "ドライブを操作する。" drive-write: "Wysyłanie i usuwanie plików na Twoim dysku."
notification-read: "通知を見る。" notification-read: "Odczytywanie Twoich powiadomień."
notification-write: "通知を操作する。" notification-write: "Zarządzanie Twoimi powiadomieniami."
cancel: "キャンセル" cancel: "Anuluj"
accept: "アクセスを許可" accept: "Przyznaj dostęp."
auth/views/index.vue: auth/views/index.vue:
loading: "読み込み中" loading: "Ładowanie"
denied: "アプリケーションの連携をキャンセルしました。" denied: "Odrzucono uwierzytelnianie aplikacji."
denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。" denied-paragraph: "Ta aplikacja nie uzyska dostępu do Twojego konta."
already-authorized: "このアプリは既に連携済みです" already-authorized: "Ta aplikacja została już uwierzytelniona."
allowed: "アプリケーションの連携を許可しました" allowed: "アプリケーションの連携を許可しました"
callback-url: "アプリケーションに戻っています" callback-url: "Powracam do aplikacji."
please-go-back: "アプリケーションに戻って、やっていってください。" please-go-back: "Wróć do aplikacji."
error: "セッションが存在しません。" error: "Sesja nie istnieje."
sign-in: "サインインしてください" sign-in: "Proszę zalogować się."
common/views/components/games/reversi/reversi.vue: common/views/components/games/reversi/reversi.vue:
matching: matching:
waiting-for: "{}を待っています" waiting-for: "Oczekiwanie na {}"
cancel: "キャンセル" cancel: "Anuluj"
common/views/components/games/reversi/reversi.index.vue: common/views/components/games/reversi/reversi.game.vue:
title: "Misskey Reversi" surrender: "投了"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう" surrendered: "投了により"
invite: "招待"
rule: "遊び方"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "招待"
mode-invite-desc: "指定したユーザーと対戦するモードです。"
invitations: "対局の招待があります!"
my-games: "自分の対局"
all-games: "みんなの対局"
enter-username: "ユーザー名を入力してください"
game-state:
ended: "終了"
playing: "進行中"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
is-llotheo: "石の少ない方が勝ち(ロセオ)" is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ" looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード" can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定" common/views/components/games/reversi/reversi.index.vue:
this-game-is-started-soon: "ゲームは数秒後に開始されます" title: "Misskey Reversi"
sub-title: "Zagraj w Reversi ze znajomymi!"
invite: "Zaproś"
rule: "Jak grać"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "Zaproś"
mode-invite-desc: "Zaproś użytkownika do gry."
invitations: "Otrzymałeś(-aś) zaproszenie!"
my-games: "Moje gry"
all-games: "Wszystkie gry"
enter-username: "Wprowadź nazwę użytkownika"
game-state:
ended: "Zakończono"
playing: "W trakcie"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "Ustawienia gry"
choose-map: "Wybierz mapę"
random: "Losowy"
black-or-white: "Czarny/biały"
black-is: "{}が黒"
rules: "Zasady"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Ustawienia bota"
this-game-is-started-soon: "Gra rozpocznie się wkrótce"
waiting-for-other: "相手の準備が完了するのを待っています" waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています" waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中" waiting-for-both: "Oczekiwanie na Ciebie"
cancel: "キャンセル" cancel: "Anuluj"
ready: "準備完了" ready: "Gotowy"
cancel-ready: "準備続行" cancel-ready: "Cofnij „gotowy”"
common/views/components/connect-failed.vue: common/views/components/connect-failed.vue:
title: "Nie udało się połączyć z serwerem" title: "Nie udało się połączyć z serwerem"
description: "Wystąpił problem z Twoim połączeniem z Internetem, lub z serwerem. {Spróbuj ponownie} wkrótce." description: "Wystąpił problem z Twoim połączeniem z Internetem, lub z serwerem. {Spróbuj ponownie} wkrótce."
@ -235,11 +239,13 @@ common/views/components/messaging-room.vue:
no-history: "Brak dalszej historii" no-history: "Brak dalszej historii"
resize-form: "Przeciągnij aby zmienić rozmiar" resize-form: "Przeciągnij aby zmienić rozmiar"
new-message: "Nowa wiadomość" new-message: "Nowa wiadomość"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.form.vue: common/views/components/messaging-room.form.vue:
input-message-here: "Wprowadź wiadomość tutaj" input-message-here: "Wprowadź wiadomość tutaj"
send: "Wyślij" send: "Wyślij"
attach-from-local: "Załącz pliki z komputera" attach-from-local: "Załącz pliki z komputera"
attach-from-drive: "Załącz pliki z dysku" attach-from-drive: "Załącz pliki z dysku"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.message.vue: common/views/components/messaging-room.message.vue:
is-read: "Przeczytano" is-read: "Przeczytano"
deleted: "Wiadomość została usunięta" deleted: "Wiadomość została usunięta"
@ -279,7 +285,12 @@ common/views/components/signin.vue:
token: "Token" token: "Token"
signing-in: "Logowanie…" signing-in: "Logowanie…"
signin: "Zaloguj" signin: "Zaloguj"
or: "または"
signin-with-twitter: "Zaloguj się za pomocą Twittera"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue: common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "Nazwa użytkownika" username: "Nazwa użytkownika"
checking: "Sprawdzanie…" checking: "Sprawdzanie…"
available: "Dostępna" available: "Dostępna"
@ -331,12 +342,12 @@ common/views/widgets/broadcast.vue:
have-a-nice-day: "Miłego dnia!" have-a-nice-day: "Miłego dnia!"
next: "Dalej" next: "Dalej"
common/views/widgets/calendar.vue: common/views/widgets/calendar.vue:
year: "{}" year: "Rok {}"
month: "{}" month: "Miesiąc {}"
day: "{}" day: "Dzień {}"
today: "今日:" today: "Dzisiaj:"
this-month: "今月:" this-month: "Ten miesiąc:"
this-year: "今年:" this-year: "Ten rok:"
common/views/widgets/donation.vue: common/views/widgets/donation.vue:
title: "Dotacje" title: "Dotacje"
text: "Aby utrzymywać Misskey, płacimy za domenę, serwery i nie tylko… Nie zarabiamy na tym, więc byłoby nam miło, gdybyśmy uzyskali od Ciebie dotację. Jeżeli jesteś zainteresowany, skontaktuj się z {}. Dziękujemy za wsparcie!" text: "Aby utrzymywać Misskey, płacimy za domenę, serwery i nie tylko… Nie zarabiamy na tym, więc byłoby nam miło, gdybyśmy uzyskali od Ciebie dotację. Jeżeli jesteś zainteresowany, skontaktuj się z {}. Dziękujemy za wsparcie!"
@ -358,36 +369,47 @@ common/views/widgets/memo.vue:
memo: "Napisz tutaj!" memo: "Napisz tutaj!"
save: "Zapisz" save: "Zapisz"
common/views/widgets/slideshow.vue: common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください" folder-customize-mode: "Aby określić katalog, opuść tryb dostosowywania"
folder: "クリックしてフォルダを指定してください" folder: "Naciśnij i wybierz folder"
no-image: "このフォルダには画像がありません" no-image: "Brak obrazu w tym folderze"
common/views/widgets/tips.vue: common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます" tips-line1: "Możesz przejść do osi czasu używając <kbd>t</kbd>."
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます" tips-line2: "Otwórz formularz nowego wpisu używając <kbd>p</kbd> lub <kbd>n</kbd>."
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます" tips-line3: "Możesz przeciągnąć i upuścić pliki w formularzu wpisu."
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます" tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます" tips-line5: "Możesz wysłać pliki przeciągając i upuszczając je w Dysku."
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます" tips-line6: "Możesz przenieść katalog przeciągając go w Dysku."
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます" tips-line7: "Możesz przenieść katalog przeciągając go w Dysku."
tips-line8: "ホームは設定からカスタマイズできます" tips-line8: "Strona główna może zostać dostosowana w ustawieniach."
tips-line9: "MisskeyAGPLv3です" tips-line9: "Misskey jest dostępny na licencji AGPLv3."
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます" tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます" tips-line11: "Możesz przypiąć wpis na stronie użytkownika klikając na „…”"
tips-line13: "投稿に添付したファイルは全てドライブに保存されます" tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます" tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
tips-line17: "「**」でテキストを囲むと**強調表示**されます" tips-line17: "Oznaczenie tekstu **w ten sposób** wyróżni go."
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます" tips-line19: "Część okien może zostać odłączona z przeglądarki."
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています" tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
tips-line21: "APIを利用してbotの開発なども行えます" tips-line21: "Możesz też używać API, aby tworzyć boty."
tips-line23: "まゆかわいいよまゆ" tips-line23: "まゆかわいいよまゆ"
tips-line24: "Misskeyは2014年にサービスを開始しました" tips-line24: "Misskey zaczął działać w 2014."
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます" tips-line25: "Możesz otrzymywać powiadomienia nawet jeżeli Misskey nie jest otwarty w obsługiwanej przeglądarce."
common/views/pages/follow.vue: common/views/pages/follow.vue:
signed-in-as: "Zalogowany jako {}" signed-in-as: "Zalogowany jako {}"
following: "Śledzisz" following: "Śledzisz"
follow: "Śledź" follow: "Śledź"
request-pending: "Oczekiwanie na pozwolenie" request-pending: "Oczekiwanie na pozwolenie"
follow-request: "Poproś o śledzenie" follow-request: "Poproś o śledzenie"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "Baner"
uploading-banner: "Wysyłanie baneru"
banner-updated: "Zmieniono baner"
choose-banner: "Wybierz baner"
avatar-crop-title: "Wybierz część obrazu, która zostanie użyta jako awatar"
avatar: "Awatar"
uploading-avatar: "Wysyłanie awatara"
avatar-updated: "Wysłano awatar"
choose-avatar: "Wybierz awatar"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Czarny … Łącznie" total: "Czarny … Łącznie"
notes: "Niebieski … Wpisy" notes: "Niebieski … Wpisy"
@ -522,6 +544,8 @@ desktop/views/components/notes.note.vue:
detail: "Pokaż szczegóły" detail: "Pokaż szczegóły"
private: "ten wpis jest prywatny" private: "ten wpis jest prywatny"
deleted: "ten wpis został usunięty" deleted: "ten wpis został usunięty"
hide: "Zwiń"
see-more: "Więcej"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "Ładowanie nie powiodło się." error: "Ładowanie nie powiodło się."
retry: "Spróbuj ponownie" retry: "Spróbuj ponownie"
@ -530,9 +554,9 @@ desktop/views/components/notifications.vue:
more: "Więcej" more: "Więcej"
empty: "Brak powiadomień" empty: "Brak powiadomień"
desktop/views/components/post-form.vue: desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加" add-visible-user: "+Dodaj użytkownika"
attach-location-information: "位置情報を添付する" attach-location-information: "Załącz informacje o lokalizacji"
hide-contents: "内容を隠す" hide-contents: "Ukryj zawartość"
reply-placeholder: "Odpowiedz na ten wpis…" reply-placeholder: "Odpowiedz na ten wpis…"
quote-placeholder: "Zacytuj ten wpis…" quote-placeholder: "Zacytuj ten wpis…"
submit: "Wyślij" submit: "Wyślij"
@ -553,10 +577,11 @@ desktop/views/components/post-form.vue:
text-remain: "pozostałe znaki: {}" text-remain: "pozostałe znaki: {}"
recent-tags: "Ostatnie" recent-tags: "Ostatnie"
click-to-tagging: "Naciśnij aby oznaczyć" click-to-tagging: "Naciśnij aby oznaczyć"
visibility: "公開範囲" visibility: "Widoczność"
geolocation-alert: "お使いの端末は位置情報に対応していません" geolocation-alert: "Twoje urządzenie nie obsługuje geolokalizacji."
error: "エラー" error: "Bład"
enter-username: "ユーザー名を入力してください" enter-username: "Wprowadź nazwę użytkownika…"
annotations: "Treść ostrzeżenia (opcjonalnie)"
desktop/views/components/post-form-window.vue: desktop/views/components/post-form-window.vue:
note: "Nowy wpis" note: "Nowy wpis"
reply: "Odpowiedz" reply: "Odpowiedz"
@ -603,9 +628,11 @@ desktop/views/components/settings.vue:
circle-icons: "Używaj okrągłych ikon" circle-icons: "Używaj okrągłych ikon"
gradient-window-header: "Używaj gradientów na pasku tytułu okna" gradient-window-header: "Używaj gradientów na pasku tytułu okna"
post-form-on-timeline: "Wyświetlaj formularz tworzenia wpisu w górnej części osi czasu" post-form-on-timeline: "Wyświetlaj formularz tworzenia wpisu w górnej części osi czasu"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-reply-target: "Pokazuj cel odpowiedzi" show-reply-target: "Pokazuj cel odpowiedzi"
show-my-renotes: "Pokazuj moje udostępnienia na osi czasu" show-my-renotes: "Pokazuj moje udostępnienia na osi czasu"
show-renoted-my-notes: "Pokazuj udostępnienia moich wpisów na osi czasu" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "Automatycznie pokazuj mapę" show-maps: "Automatycznie pokazuj mapę"
show-maps-desc: "Mapa będzie automatycznie rozwijana dla wpisów zawierających informacje o lokalizacji." show-maps-desc: "Mapa będzie automatycznie rozwijana dla wpisów zawierających informacje o lokalizacji."
sound: "Dźwięk" sound: "Dźwięk"
@ -678,8 +705,8 @@ desktop/views/components/settings.api.vue:
desktop/views/components/settings.apps.vue: desktop/views/components/settings.apps.vue:
no-apps: "Brak zautoryzowanych aplikacji" no-apps: "Brak zautoryzowanych aplikacji"
desktop/views/components/settings.drive.vue: desktop/views/components/settings.drive.vue:
max: "" max: "Maksymalnie"
in-use: "使用中" in-use: " w użyciu."
desktop/views/components/settings.mute.vue: desktop/views/components/settings.mute.vue:
no-users: "Brak wyciszonych użytkowników" no-users: "Brak wyciszonych użytkowników"
desktop/views/components/settings.password.vue: desktop/views/components/settings.password.vue:
@ -702,7 +729,7 @@ desktop/views/components/settings.profile.vue:
other: "Inne" other: "Inne"
is-bot: "To konto jest prowadzone przez bota" is-bot: "To konto jest prowadzone przez bota"
is-cat: "To konto jest prowadzone przez kota" is-cat: "To konto jest prowadzone przez kota"
profile-updated: "プロフィールを更新しました" profile-updated: "Zaktualizowano profil"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
private: "ten wpis jest prywatny" private: "ten wpis jest prywatny"
deleted: "ten wpis został usunięty" deleted: "ten wpis został usunięty"
@ -718,6 +745,7 @@ desktop/views/components/timeline.vue:
list: "Listy" list: "Listy"
desktop/views/components/ui.header.vue: desktop/views/components/ui.header.vue:
welcome-back: "Witaj ponownie," welcome-back: "Witaj ponownie,"
adjective: "さん"
desktop/views/components/ui.header.account.vue: desktop/views/components/ui.header.account.vue:
profile: "Twój profil" profile: "Twój profil"
drive: "Dysk" drive: "Dysk"
@ -746,6 +774,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "Listy" title: "Listy"
create-list: "Utwórz listę" create-list: "Utwórz listę"
list-name: "Nazwa listy"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "Wpisy" notes: "Wpisy"
following: "Śledzeni" following: "Śledzeni"
@ -760,6 +789,46 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "Pop-out" popout: "Pop-out"
close: "Zamknij" close: "Zamknij"
desktop/views/pages/admin/admin.vue:
dashboard: "ダッシュボード"
drive: "ドライブ"
users: "ユーザー"
update: "更新"
desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
suspended: "凍結しました"
desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/admin/admin.notes-chart.vue:
title: "投稿"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.users-chart.vue:
title: "ユーザー"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.drive-chart.vue:
title: "ドライブ"
local: "ローカル"
remote: "リモート"
desktop/views/pages/deck/deck.tl-column.vue: desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "Tylko wpisy z zawartością multimedialną" is-media-only: "Tylko wpisy z zawartością multimedialną"
is-media-view: "Widok multimediów" is-media-view: "Widok multimediów"
@ -776,7 +845,7 @@ desktop/views/pages/welcome.vue:
signin-button: "Zaloguj się" signin-button: "Zaloguj się"
signup-button: "Zarejestruj się" signup-button: "Zarejestruj się"
timeline: "Oś czasu" timeline: "Oś czasu"
powered-by-misskey: "Powered by <b>Misskey</b>." powered-by-misskey: "Oparto o <b>Misskey</b>."
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Dysk Misskey" title: "Dysk Misskey"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -792,12 +861,12 @@ desktop/views/pages/selectdrive.vue:
cancel: "Anuluj" cancel: "Anuluj"
upload: "Wyślij pliki z Twojego komputera" upload: "Wyślij pliki z Twojego komputera"
desktop/views/pages/search.vue: desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。" not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。" not-found: "Nie znaleziono wpisów zawierających „{}”"
desktop/views/pages/share.vue: desktop/views/pages/share.vue:
share-with: "{}で共有" share-with: "Udostępnij z {}."
desktop/views/pages/tag.vue: desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。" no-posts-found: "Nie znaleziono wpisów zawierających „{}”."
desktop/views/pages/user-list.users.vue: desktop/views/pages/user-list.users.vue:
users: "Użytkownicy" users: "Użytkownicy"
add-user: "Dodaj użytkownika" add-user: "Dodaj użytkownika"
@ -828,6 +897,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "Wycisz" mute: "Wycisz"
muted: "Wyciszyłeś" muted: "Wyciszyłeś"
unmute: "Cofnij wyciszenie" unmute: "Cofnij wyciszenie"
push-to-a-list: "Dodaj do listy"
list-pushed: "Dodałeś(-aś) {user} do {list}."
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "Wpisy" posts: "Wpisy"
following: "Śledzeni" following: "Śledzeni"
@ -954,7 +1025,8 @@ mobile/views/components/timeline.vue:
empty: "Brak wpisów" empty: "Brak wpisów"
load-more: "Więcej" load-more: "Więcej"
mobile/views/components/ui.header.vue: mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "Witaj ponownie, "
adjective: "さん"
mobile/views/components/ui.nav.vue: mobile/views/components/ui.nav.vue:
timeline: "Oś czasu" timeline: "Oś czasu"
notifications: "Powiadomienia" notifications: "Powiadomienia"
@ -986,7 +1058,7 @@ mobile/views/pages/drive.vue:
drive: "Dysk" drive: "Dysk"
more: "Załaduj więcej" more: "Załaduj więcej"
mobile/views/pages/signup.vue: mobile/views/pages/signup.vue:
lets-start: "📦 始めましょう" lets-start: "Rozpocznijmy! 📦"
mobile/views/pages/followers.vue: mobile/views/pages/followers.vue:
followers-of: "Śledzący {}" followers-of: "Śledzący {}"
mobile/views/pages/following.vue: mobile/views/pages/following.vue:
@ -997,16 +1069,18 @@ mobile/views/pages/home.vue:
hybrid: "Społeczność" hybrid: "Społeczność"
global: "Globalne" global: "Globalne"
mobile/views/pages/tag.vue: mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。" no-posts-found: "Nie znaleziono wpisów zawierających „{}”."
mobile/views/pages/welcome.vue: mobile/views/pages/welcome.vue:
signup: "新規登録" signup: "Zarejestruj się"
mobile/views/pages/widgets.vue: mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード" dashboard: "Kokpit"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。" widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
add-widget: "Dodaj"
customization-tips: "カスタマイズのヒント"
mobile/views/pages/widgets/activity.vue: mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ" activity: "Aktywność"
mobile/views/pages/share.vue: mobile/views/pages/share.vue:
share-with: "{}で共有" share-with: "Udostępnij z {}."
mobile/views/pages/messaging.vue: mobile/views/pages/messaging.vue:
messaging: "Wiadomości" messaging: "Wiadomości"
mobile/views/pages/messaging-room.vue: mobile/views/pages/messaging-room.vue:
@ -1023,7 +1097,7 @@ mobile/views/pages/notifications.vue:
notifications: "Powiadomienia" notifications: "Powiadomienia"
read-all: "Czy na pewno chcesz oznaczyć wszystkie powiadomienia jako przeczytane?" read-all: "Czy na pewno chcesz oznaczyć wszystkie powiadomienia jako przeczytane?"
mobile/views/pages/games/reversi.vue: mobile/views/pages/games/reversi.vue:
reversi: "リバーシ" reversi: "Reversi"
mobile/views/pages/settings/settings.profile.vue: mobile/views/pages/settings/settings.profile.vue:
title: "Profil" title: "Profil"
name: "Nazwa" name: "Nazwa"
@ -1041,6 +1115,7 @@ mobile/views/pages/settings/settings.profile.vue:
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "Szukaj" search: "Szukaj"
empty: "Nie znaleziono wpisów zawierających '{}'" empty: "Nie znaleziono wpisów zawierających '{}'"
not-found: "「{}」に関する投稿は見つかりませんでした。"
mobile/views/pages/selectdrive.vue: mobile/views/pages/selectdrive.vue:
select-file: "Wybierz plik" select-file: "Wybierz plik"
mobile/views/pages/settings.vue: mobile/views/pages/settings.vue:
@ -1057,7 +1132,8 @@ mobile/views/pages/settings.vue:
timeline: "Oś czasu" timeline: "Oś czasu"
show-reply-target: "Pokazuj cel odpowiedzi" show-reply-target: "Pokazuj cel odpowiedzi"
show-my-renotes: "Pokazuj moje udostępnienia" show-my-renotes: "Pokazuj moje udostępnienia"
show-renoted-my-notes: "Pokazuj udostępnienia moich wpisów" show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "Styl wpisów" post-style: "Styl wpisów"
post-style-standard: "Standardowy" post-style-standard: "Standardowy"
post-style-smart: "Inteligentny" post-style-smart: "Inteligentny"
@ -1135,3 +1211,5 @@ docs:
name: "Nazwa" name: "Nazwa"
type: "Rodzaj" type: "Rodzaj"
description: "Opis" description: "Opis"
dev/views/index.vue:
manage-apps: "Zarządzaj aplikacjami"

View File

@ -11,6 +11,8 @@ common:
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携" application-authorization: "アプリの連携"
close: "閉じる" close: "閉じる"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
got-it: "わかった"
customization-tips: customization-tips:
title: "カスタマイズのヒント" title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -26,7 +28,6 @@ common:
notified-by: "{}さんから" notified-by: "{}さんから"
reply-from: "{}さんから返信:" reply-from: "{}さんから返信:"
quoted-by: "{}さんが引用:" quoted-by: "{}さんが引用:"
name: "Misskey"
time: time:
unknown: "なぞのじかん" unknown: "なぞのじかん"
future: "未来" future: "未来"
@ -38,13 +39,8 @@ common:
weeks_ago: "{}週間前" weeks_ago: "{}週間前"
months_ago: "{}ヶ月前" months_ago: "{}ヶ月前"
years_ago: "{}年前" years_ago: "{}年前"
month-and-day: "{month}月 {day}日"
trash: "ゴミ箱" trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short: weekday-short:
sunday: "日" sunday: "日"
monday: "月" monday: "月"
@ -70,6 +66,7 @@ common:
congrats: "おめでとう" congrats: "おめでとう"
angry: "おこ" angry: "おこ"
confused: "こまこまのこまり" confused: "こまこまのこまり"
rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-placeholders: note-placeholders:
a: "今どうしてる?" a: "今どうしてる?"
@ -87,7 +84,8 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き" i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示" show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー" verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
reversi: reversi:
drawn: "引き分け" drawn: "引き分け"
my-turn: "あなたのターンです" my-turn: "あなたのターンです"
@ -168,6 +166,12 @@ common/views/components/games/reversi/reversi.vue:
matching: matching:
waiting-for: "{}を待っています" waiting-for: "{}を待っています"
cancel: "キャンセル" cancel: "キャンセル"
common/views/components/games/reversi/reversi.game.vue:
surrender: "投了"
surrendered: "投了により"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
common/views/components/games/reversi/reversi.index.vue: common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi" title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう" sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
@ -235,11 +239,13 @@ common/views/components/messaging-room.vue:
no-history: "これより過去の履歴はありません" no-history: "これより過去の履歴はありません"
resize-form: "ドラッグしてフォームの広さを調整" resize-form: "ドラッグしてフォームの広さを調整"
new-message: "新しいメッセージがあります" new-message: "新しいメッセージがあります"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.form.vue: common/views/components/messaging-room.form.vue:
input-message-here: "ここにメッセージを入力" input-message-here: "ここにメッセージを入力"
send: "送信" send: "送信"
attach-from-local: "PCからファイルを添付する" attach-from-local: "PCからファイルを添付する"
attach-from-drive: "ドライブからファイルを添付する" attach-from-drive: "ドライブからファイルを添付する"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.message.vue: common/views/components/messaging-room.message.vue:
is-read: "既読" is-read: "既読"
deleted: "このメッセージは削除されました" deleted: "このメッセージは削除されました"
@ -279,7 +285,12 @@ common/views/components/signin.vue:
token: "トークン" token: "トークン"
signing-in: "やってます..." signing-in: "やってます..."
signin: "サインイン" signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue: common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "ユーザー名" username: "ユーザー名"
checking: "確認しています..." checking: "確認しています..."
available: "利用できます" available: "利用できます"
@ -388,6 +399,17 @@ common/views/pages/follow.vue:
follow: "フォロー" follow: "フォロー"
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-request: "フォロー申請" follow-request: "フォロー申請"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -522,6 +544,8 @@ desktop/views/components/notes.note.vue:
detail: "詳細" detail: "詳細"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
hide: "隠す"
see-more: "もっと見る"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "読み込みに失敗しました。" error: "読み込みに失敗しました。"
retry: "リトライ" retry: "リトライ"
@ -557,6 +581,7 @@ desktop/views/components/post-form.vue:
geolocation-alert: "お使いの端末は位置情報に対応していません" geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー" error: "エラー"
enter-username: "ユーザー名を入力してください" enter-username: "ユーザー名を入力してください"
annotations: "内容への注釈 (オプション)"
desktop/views/components/post-form-window.vue: desktop/views/components/post-form-window.vue:
note: "新規投稿" note: "新規投稿"
reply: "返信" reply: "返信"
@ -603,9 +628,11 @@ desktop/views/components/settings.vue:
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用" gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開" show-maps: "マップの自動展開"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。" show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "サウンド" sound: "サウンド"
@ -718,6 +745,7 @@ desktop/views/components/timeline.vue:
list: "リスト" list: "リスト"
desktop/views/components/ui.header.vue: desktop/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "おかえりなさい、"
adjective: "さん"
desktop/views/components/ui.header.account.vue: desktop/views/components/ui.header.account.vue:
profile: "プロフィール" profile: "プロフィール"
drive: "ドライブ" drive: "ドライブ"
@ -746,6 +774,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
following: "フォロー" following: "フォロー"
@ -760,6 +789,46 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "閉じる"
desktop/views/pages/admin/admin.vue:
dashboard: "ダッシュボード"
drive: "ドライブ"
users: "ユーザー"
update: "更新"
desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
suspended: "凍結しました"
desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/admin/admin.notes-chart.vue:
title: "投稿"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.users-chart.vue:
title: "ユーザー"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.drive-chart.vue:
title: "ドライブ"
local: "ローカル"
remote: "リモート"
desktop/views/pages/deck/deck.tl-column.vue: desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
@ -792,7 +861,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "キャンセル" cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード" upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue: desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。" not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。" not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue: desktop/views/pages/share.vue:
share-with: "{}で共有" share-with: "{}で共有"
@ -828,6 +897,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"
following: "フォロー" following: "フォロー"
@ -955,6 +1026,7 @@ mobile/views/components/timeline.vue:
load-more: "もっと" load-more: "もっと"
mobile/views/components/ui.header.vue: mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "おかえりなさい、"
adjective: "さん"
mobile/views/components/ui.nav.vue: mobile/views/components/ui.nav.vue:
timeline: "タイムライン" timeline: "タイムライン"
notifications: "通知" notifications: "通知"
@ -1003,6 +1075,8 @@ mobile/views/pages/welcome.vue:
mobile/views/pages/widgets.vue: mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード" dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。" widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
add-widget: "追加"
customization-tips: "カスタマイズのヒント"
mobile/views/pages/widgets/activity.vue: mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ" activity: "アクティビティ"
mobile/views/pages/share.vue: mobile/views/pages/share.vue:
@ -1041,6 +1115,7 @@ mobile/views/pages/settings/settings.profile.vue:
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "検索" search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
mobile/views/pages/selectdrive.vue: mobile/views/pages/selectdrive.vue:
select-file: "ファイルを選択" select-file: "ファイルを選択"
mobile/views/pages/settings.vue: mobile/views/pages/settings.vue:
@ -1057,7 +1132,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する" show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
@ -1135,3 +1211,5 @@ docs:
name: "名前" name: "名前"
type: "型" type: "型"
description: "説明" description: "説明"
dev/views/index.vue:
manage-apps: "アプリの管理"

View File

@ -11,6 +11,8 @@ common:
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携" application-authorization: "アプリの連携"
close: "閉じる" close: "閉じる"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
got-it: "わかった"
customization-tips: customization-tips:
title: "カスタマイズのヒント" title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -26,7 +28,6 @@ common:
notified-by: "{}さんから" notified-by: "{}さんから"
reply-from: "{}さんから返信:" reply-from: "{}さんから返信:"
quoted-by: "{}さんが引用:" quoted-by: "{}さんが引用:"
name: "Misskey"
time: time:
unknown: "なぞのじかん" unknown: "なぞのじかん"
future: "未来" future: "未来"
@ -38,13 +39,8 @@ common:
weeks_ago: "{}週間前" weeks_ago: "{}週間前"
months_ago: "{}ヶ月前" months_ago: "{}ヶ月前"
years_ago: "{}年前" years_ago: "{}年前"
month-and-day: "{month}月 {day}日"
trash: "ゴミ箱" trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short: weekday-short:
sunday: "日" sunday: "日"
monday: "月" monday: "月"
@ -70,6 +66,7 @@ common:
congrats: "おめでとう" congrats: "おめでとう"
angry: "おこ" angry: "おこ"
confused: "こまこまのこまり" confused: "こまこまのこまり"
rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-placeholders: note-placeholders:
a: "今どうしてる?" a: "今どうしてる?"
@ -87,7 +84,8 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き" i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示" show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー" verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
reversi: reversi:
drawn: "引き分け" drawn: "引き分け"
my-turn: "あなたのターンです" my-turn: "あなたのターンです"
@ -168,6 +166,12 @@ common/views/components/games/reversi/reversi.vue:
matching: matching:
waiting-for: "{}を待っています" waiting-for: "{}を待っています"
cancel: "キャンセル" cancel: "キャンセル"
common/views/components/games/reversi/reversi.game.vue:
surrender: "投了"
surrendered: "投了により"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
common/views/components/games/reversi/reversi.index.vue: common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi" title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう" sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
@ -235,11 +239,13 @@ common/views/components/messaging-room.vue:
no-history: "これより過去の履歴はありません" no-history: "これより過去の履歴はありません"
resize-form: "ドラッグしてフォームの広さを調整" resize-form: "ドラッグしてフォームの広さを調整"
new-message: "新しいメッセージがあります" new-message: "新しいメッセージがあります"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.form.vue: common/views/components/messaging-room.form.vue:
input-message-here: "ここにメッセージを入力" input-message-here: "ここにメッセージを入力"
send: "送信" send: "送信"
attach-from-local: "PCからファイルを添付する" attach-from-local: "PCからファイルを添付する"
attach-from-drive: "ドライブからファイルを添付する" attach-from-drive: "ドライブからファイルを添付する"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.message.vue: common/views/components/messaging-room.message.vue:
is-read: "既読" is-read: "既読"
deleted: "このメッセージは削除されました" deleted: "このメッセージは削除されました"
@ -279,7 +285,12 @@ common/views/components/signin.vue:
token: "トークン" token: "トークン"
signing-in: "やってます..." signing-in: "やってます..."
signin: "サインイン" signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue: common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "ユーザー名" username: "ユーザー名"
checking: "確認しています..." checking: "確認しています..."
available: "利用できます" available: "利用できます"
@ -388,6 +399,17 @@ common/views/pages/follow.vue:
follow: "フォロー" follow: "フォロー"
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-request: "フォロー申請" follow-request: "フォロー申請"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -522,6 +544,8 @@ desktop/views/components/notes.note.vue:
detail: "詳細" detail: "詳細"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
hide: "隠す"
see-more: "もっと見る"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "読み込みに失敗しました。" error: "読み込みに失敗しました。"
retry: "リトライ" retry: "リトライ"
@ -557,6 +581,7 @@ desktop/views/components/post-form.vue:
geolocation-alert: "お使いの端末は位置情報に対応していません" geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー" error: "エラー"
enter-username: "ユーザー名を入力してください" enter-username: "ユーザー名を入力してください"
annotations: "内容への注釈 (オプション)"
desktop/views/components/post-form-window.vue: desktop/views/components/post-form-window.vue:
note: "新規投稿" note: "新規投稿"
reply: "返信" reply: "返信"
@ -603,9 +628,11 @@ desktop/views/components/settings.vue:
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用" gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開" show-maps: "マップの自動展開"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。" show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "サウンド" sound: "サウンド"
@ -718,6 +745,7 @@ desktop/views/components/timeline.vue:
list: "リスト" list: "リスト"
desktop/views/components/ui.header.vue: desktop/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "おかえりなさい、"
adjective: "さん"
desktop/views/components/ui.header.account.vue: desktop/views/components/ui.header.account.vue:
profile: "プロフィール" profile: "プロフィール"
drive: "ドライブ" drive: "ドライブ"
@ -746,6 +774,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
following: "フォロー" following: "フォロー"
@ -760,6 +789,46 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "閉じる"
desktop/views/pages/admin/admin.vue:
dashboard: "ダッシュボード"
drive: "ドライブ"
users: "ユーザー"
update: "更新"
desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
suspended: "凍結しました"
desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/admin/admin.notes-chart.vue:
title: "投稿"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.users-chart.vue:
title: "ユーザー"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.drive-chart.vue:
title: "ドライブ"
local: "ローカル"
remote: "リモート"
desktop/views/pages/deck/deck.tl-column.vue: desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
@ -792,7 +861,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "キャンセル" cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード" upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue: desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。" not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。" not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue: desktop/views/pages/share.vue:
share-with: "{}で共有" share-with: "{}で共有"
@ -828,6 +897,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"
following: "フォロー" following: "フォロー"
@ -955,6 +1026,7 @@ mobile/views/components/timeline.vue:
load-more: "もっと" load-more: "もっと"
mobile/views/components/ui.header.vue: mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "おかえりなさい、"
adjective: "さん"
mobile/views/components/ui.nav.vue: mobile/views/components/ui.nav.vue:
timeline: "タイムライン" timeline: "タイムライン"
notifications: "通知" notifications: "通知"
@ -1003,6 +1075,8 @@ mobile/views/pages/welcome.vue:
mobile/views/pages/widgets.vue: mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード" dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。" widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
add-widget: "追加"
customization-tips: "カスタマイズのヒント"
mobile/views/pages/widgets/activity.vue: mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ" activity: "アクティビティ"
mobile/views/pages/share.vue: mobile/views/pages/share.vue:
@ -1041,6 +1115,7 @@ mobile/views/pages/settings/settings.profile.vue:
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "検索" search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
mobile/views/pages/selectdrive.vue: mobile/views/pages/selectdrive.vue:
select-file: "ファイルを選択" select-file: "ファイルを選択"
mobile/views/pages/settings.vue: mobile/views/pages/settings.vue:
@ -1057,7 +1132,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する" show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
@ -1135,3 +1211,5 @@ docs:
name: "名前" name: "名前"
type: "型" type: "型"
description: "説明" description: "説明"
dev/views/index.vue:
manage-apps: "アプリの管理"

View File

@ -11,6 +11,8 @@ common:
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携" application-authorization: "アプリの連携"
close: "閉じる" close: "閉じる"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
got-it: "わかった"
customization-tips: customization-tips:
title: "カスタマイズのヒント" title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。" paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
@ -26,7 +28,6 @@ common:
notified-by: "{}さんから" notified-by: "{}さんから"
reply-from: "{}さんから返信:" reply-from: "{}さんから返信:"
quoted-by: "{}さんが引用:" quoted-by: "{}さんが引用:"
name: "Misskey"
time: time:
unknown: "なぞのじかん" unknown: "なぞのじかん"
future: "未来" future: "未来"
@ -38,13 +39,8 @@ common:
weeks_ago: "{}週間前" weeks_ago: "{}週間前"
months_ago: "{}ヶ月前" months_ago: "{}ヶ月前"
years_ago: "{}年前" years_ago: "{}年前"
month-and-day: "{month}月 {day}日"
trash: "ゴミ箱" trash: "ゴミ箱"
date:
full-year: "年"
month: "月"
day: "日"
hours: "時"
minutes: "分"
weekday-short: weekday-short:
sunday: "日" sunday: "日"
monday: "月" monday: "月"
@ -70,6 +66,7 @@ common:
congrats: "おめでとう" congrats: "おめでとう"
angry: "おこ" angry: "おこ"
confused: "こまこまのこまり" confused: "こまこまのこまり"
rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-placeholders: note-placeholders:
a: "今どうしてる?" a: "今どうしてる?"
@ -87,7 +84,8 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き" i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示" show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー" verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
reversi: reversi:
drawn: "引き分け" drawn: "引き分け"
my-turn: "あなたのターンです" my-turn: "あなたのターンです"
@ -168,6 +166,12 @@ common/views/components/games/reversi/reversi.vue:
matching: matching:
waiting-for: "{}を待っています" waiting-for: "{}を待っています"
cancel: "キャンセル" cancel: "キャンセル"
common/views/components/games/reversi/reversi.game.vue:
surrender: "投了"
surrendered: "投了により"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
common/views/components/games/reversi/reversi.index.vue: common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi" title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう" sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
@ -235,11 +239,13 @@ common/views/components/messaging-room.vue:
no-history: "これより過去の履歴はありません" no-history: "これより過去の履歴はありません"
resize-form: "ドラッグしてフォームの広さを調整" resize-form: "ドラッグしてフォームの広さを調整"
new-message: "新しいメッセージがあります" new-message: "新しいメッセージがあります"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.form.vue: common/views/components/messaging-room.form.vue:
input-message-here: "ここにメッセージを入力" input-message-here: "ここにメッセージを入力"
send: "送信" send: "送信"
attach-from-local: "PCからファイルを添付する" attach-from-local: "PCからファイルを添付する"
attach-from-drive: "ドライブからファイルを添付する" attach-from-drive: "ドライブからファイルを添付する"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.message.vue: common/views/components/messaging-room.message.vue:
is-read: "既読" is-read: "既読"
deleted: "このメッセージは削除されました" deleted: "このメッセージは削除されました"
@ -279,7 +285,12 @@ common/views/components/signin.vue:
token: "トークン" token: "トークン"
signing-in: "やってます..." signing-in: "やってます..."
signin: "サインイン" signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue: common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "ユーザー名" username: "ユーザー名"
checking: "確認しています..." checking: "確認しています..."
available: "利用できます" available: "利用できます"
@ -388,6 +399,17 @@ common/views/pages/follow.vue:
follow: "フォロー" follow: "フォロー"
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-request: "フォロー申請" follow-request: "フォロー申請"
desktop:
banner-crop-title: "バナーとして表示する部分を選択"
banner: "バナー"
uploading-banner: "新しいバナーをアップロードしています"
banner-updated: "バナーを更新しました"
choose-banner: "バナーにする画像を選択"
avatar-crop-title: "アバターとして表示する部分を選択"
avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -522,6 +544,8 @@ desktop/views/components/notes.note.vue:
detail: "詳細" detail: "詳細"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
hide: "隠す"
see-more: "もっと見る"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "読み込みに失敗しました。" error: "読み込みに失敗しました。"
retry: "リトライ" retry: "リトライ"
@ -557,6 +581,7 @@ desktop/views/components/post-form.vue:
geolocation-alert: "お使いの端末は位置情報に対応していません" geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー" error: "エラー"
enter-username: "ユーザー名を入力してください" enter-username: "ユーザー名を入力してください"
annotations: "内容への注釈 (オプション)"
desktop/views/components/post-form-window.vue: desktop/views/components/post-form-window.vue:
note: "新規投稿" note: "新規投稿"
reply: "返信" reply: "返信"
@ -603,9 +628,11 @@ desktop/views/components/settings.vue:
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用" gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する" show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開" show-maps: "マップの自動展開"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。" show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "サウンド" sound: "サウンド"
@ -718,6 +745,7 @@ desktop/views/components/timeline.vue:
list: "リスト" list: "リスト"
desktop/views/components/ui.header.vue: desktop/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "おかえりなさい、"
adjective: "さん"
desktop/views/components/ui.header.account.vue: desktop/views/components/ui.header.account.vue:
profile: "プロフィール" profile: "プロフィール"
drive: "ドライブ" drive: "ドライブ"
@ -746,6 +774,7 @@ desktop/views/components/received-follow-requests-window.vue:
desktop/views/components/user-lists-window.vue: desktop/views/components/user-lists-window.vue:
title: "リスト" title: "リスト"
create-list: "リストを作成" create-list: "リストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue: desktop/views/components/user-preview.vue:
notes: "投稿" notes: "投稿"
following: "フォロー" following: "フォロー"
@ -760,6 +789,46 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "閉じる"
desktop/views/pages/admin/admin.vue:
dashboard: "ダッシュボード"
drive: "ドライブ"
users: "ユーザー"
update: "更新"
desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
suspended: "凍結しました"
desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/admin/admin.notes-chart.vue:
title: "投稿"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.users-chart.vue:
title: "ユーザー"
local: "ローカル"
remote: "リモート"
desktop/views/pages/admin/admin.drive-chart.vue:
title: "ドライブ"
local: "ローカル"
remote: "リモート"
desktop/views/pages/deck/deck.tl-column.vue: desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ" is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー" is-media-view: "メディアビュー"
@ -792,7 +861,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "キャンセル" cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード" upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue: desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。" not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。" not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue: desktop/views/pages/share.vue:
share-with: "{}で共有" share-with: "{}で共有"
@ -828,6 +897,8 @@ desktop/views/pages/user/user.profile.vue:
mute: "ミュートする" mute: "ミュートする"
muted: "ミュートしています" muted: "ミュートしています"
unmute: "ミュート解除" unmute: "ミュート解除"
push-to-a-list: "リストに追加"
list-pushed: "{user}を{list}に追加しました。"
desktop/views/pages/user/user.header.vue: desktop/views/pages/user/user.header.vue:
posts: "投稿" posts: "投稿"
following: "フォロー" following: "フォロー"
@ -955,6 +1026,7 @@ mobile/views/components/timeline.vue:
load-more: "もっと" load-more: "もっと"
mobile/views/components/ui.header.vue: mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、" welcome-back: "おかえりなさい、"
adjective: "さん"
mobile/views/components/ui.nav.vue: mobile/views/components/ui.nav.vue:
timeline: "タイムライン" timeline: "タイムライン"
notifications: "通知" notifications: "通知"
@ -1003,6 +1075,8 @@ mobile/views/pages/welcome.vue:
mobile/views/pages/widgets.vue: mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード" dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。" widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
add-widget: "追加"
customization-tips: "カスタマイズのヒント"
mobile/views/pages/widgets/activity.vue: mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ" activity: "アクティビティ"
mobile/views/pages/share.vue: mobile/views/pages/share.vue:
@ -1041,6 +1115,7 @@ mobile/views/pages/settings/settings.profile.vue:
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "検索" search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。" empty: "「{}」に関する投稿は見つかりませんでした。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
mobile/views/pages/selectdrive.vue: mobile/views/pages/selectdrive.vue:
select-file: "ファイルを選択" select-file: "ファイルを選択"
mobile/views/pages/settings.vue: mobile/views/pages/settings.vue:
@ -1057,7 +1132,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する" show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
@ -1135,3 +1211,5 @@ docs:
name: "名前" name: "名前"
type: "型" type: "型"
description: "説明" description: "説明"
dev/views/index.vue:
manage-apps: "アプリの管理"

View File

@ -1,8 +1,8 @@
{ {
"name": "misskey", "name": "misskey",
"author": "syuilo <i@syuilo.com>", "author": "syuilo <i@syuilo.com>",
"version": "5.12.0", "version": "7.0.0",
"clientVersion": "1.0.7948", "clientVersion": "1.0.8654",
"codename": "nighthike", "codename": "nighthike",
"main": "./built/index.js", "main": "./built/index.js",
"private": true, "private": true,
@ -31,6 +31,7 @@
"@types/dateformat": "1.0.1", "@types/dateformat": "1.0.1",
"@types/debug": "0.0.30", "@types/debug": "0.0.30",
"@types/deep-equal": "1.0.1", "@types/deep-equal": "1.0.1",
"@types/double-ended-queue": "2.1.0",
"@types/elasticsearch": "5.0.25", "@types/elasticsearch": "5.0.25",
"@types/file-type": "5.2.1", "@types/file-type": "5.2.1",
"@types/gulp": "3.8.36", "@types/gulp": "3.8.36",
@ -43,7 +44,6 @@
"@types/is-root": "1.0.0", "@types/is-root": "1.0.0",
"@types/is-url": "1.2.28", "@types/is-url": "1.2.28",
"@types/js-yaml": "3.11.2", "@types/js-yaml": "3.11.2",
"@types/jsdom": "11.0.6",
"@types/koa": "2.0.46", "@types/koa": "2.0.46",
"@types/koa-bodyparser": "5.0.1", "@types/koa-bodyparser": "5.0.1",
"@types/koa-compress": "2.0.8", "@types/koa-compress": "2.0.8",
@ -58,10 +58,9 @@
"@types/minio": "6.0.2", "@types/minio": "6.0.2",
"@types/mkdirp": "0.5.2", "@types/mkdirp": "0.5.2",
"@types/mocha": "5.2.3", "@types/mocha": "5.2.3",
"@types/mongodb": "3.1.3", "@types/mongodb": "3.1.4",
"@types/ms": "0.7.30", "@types/ms": "0.7.30",
"@types/node": "10.5.5", "@types/node": "10.7.1",
"@types/parse5": "5.0.0",
"@types/portscanner": "2.1.0", "@types/portscanner": "2.1.0",
"@types/pug": "2.0.4", "@types/pug": "2.0.4",
"@types/qrcode": "1.2.0", "@types/qrcode": "1.2.0",
@ -78,10 +77,10 @@
"@types/systeminformation": "3.23.0", "@types/systeminformation": "3.23.0",
"@types/tmp": "0.0.33", "@types/tmp": "0.0.33",
"@types/uuid": "3.4.3", "@types/uuid": "3.4.3",
"@types/webpack": "4.4.9", "@types/webpack": "4.4.10",
"@types/webpack-stream": "3.2.10", "@types/webpack-stream": "3.2.10",
"@types/websocket": "0.0.39", "@types/websocket": "0.0.39",
"@types/ws": "5.1.2", "@types/ws": "6.0.0",
"animejs": "2.2.0", "animejs": "2.2.0",
"autosize": "4.0.2", "autosize": "4.0.2",
"autwh": "0.1.0", "autwh": "0.1.0",
@ -90,7 +89,7 @@
"bootstrap-vue": "2.0.0-rc.11", "bootstrap-vue": "2.0.0-rc.11",
"cafy": "11.3.0", "cafy": "11.3.0",
"chalk": "2.4.1", "chalk": "2.4.1",
"commander": "2.16.0", "commander": "2.17.1",
"crc-32": "1.2.0", "crc-32": "1.2.0",
"css-loader": "1.0.0", "css-loader": "1.0.0",
"dateformat": "3.0.3", "dateformat": "3.0.3",
@ -99,8 +98,9 @@
"deepcopy": "0.6.3", "deepcopy": "0.6.3",
"diskusage": "0.2.4", "diskusage": "0.2.4",
"dompurify": "1.0.5", "dompurify": "1.0.5",
"double-ended-queue": "2.1.0-0",
"elasticsearch": "15.1.1", "elasticsearch": "15.1.1",
"element-ui": "2.4.5", "element-ui": "2.4.6",
"emojilib": "2.3.0", "emojilib": "2.3.0",
"escape-regexp": "0.0.1", "escape-regexp": "0.0.1",
"eslint": "5.0.1", "eslint": "5.0.1",
@ -108,7 +108,7 @@
"eventemitter3": "3.1.0", "eventemitter3": "3.1.0",
"exif-js": "2.3.0", "exif-js": "2.3.0",
"file-loader": "1.1.11", "file-loader": "1.1.11",
"file-type": "8.1.0", "file-type": "9.0.0",
"fuckadblock": "3.2.1", "fuckadblock": "3.2.1",
"gulp": "3.9.1", "gulp": "3.9.1",
"gulp-cssnano": "2.1.3", "gulp-cssnano": "2.1.3",
@ -147,8 +147,9 @@
"koa-slow": "2.1.0", "koa-slow": "2.1.0",
"koa-views": "6.1.4", "koa-views": "6.1.4",
"loader-utils": "1.1.0", "loader-utils": "1.1.0",
"lodash.assign": "4.2.0",
"mecab-async": "0.1.2", "mecab-async": "0.1.2",
"minio": "6.0.0", "minio": "7.0.0",
"mkdirp": "0.5.1", "mkdirp": "0.5.1",
"mocha": "5.2.0", "mocha": "5.2.0",
"moji": "0.5.1", "moji": "0.5.1",
@ -156,13 +157,13 @@
"monk": "6.0.6", "monk": "6.0.6",
"ms": "2.1.1", "ms": "2.1.1",
"nan": "2.10.0", "nan": "2.10.0",
"node-sass": "4.9.2", "node-sass": "4.9.3",
"node-sass-json-importer": "3.3.1", "node-sass-json-importer": "3.3.1",
"nprogress": "0.2.0", "nprogress": "0.2.0",
"object-assign-deep": "0.4.0", "object-assign-deep": "0.4.0",
"on-build-webpack": "0.1.0", "on-build-webpack": "0.1.0",
"os-utils": "0.0.14", "os-utils": "0.0.14",
"parse5": "5.0.0", "parse5": "5.1.0",
"portscanner": "2.2.0", "portscanner": "2.2.0",
"progress-bar-webpack-plugin": "1.11.0", "progress-bar-webpack-plugin": "1.11.0",
"promise-sequential": "1.1.1", "promise-sequential": "1.1.1",
@ -173,49 +174,50 @@
"recaptcha-promise": "0.1.3", "recaptcha-promise": "0.1.3",
"reconnecting-websocket": "3.2.2", "reconnecting-websocket": "3.2.2",
"redis": "2.8.0", "redis": "2.8.0",
"request": "2.87.0", "request": "2.88.0",
"request-promise-native": "1.0.5", "request-promise-native": "1.0.5",
"rimraf": "2.6.2", "rimraf": "2.6.2",
"rndstr": "1.0.0", "rndstr": "1.0.0",
"s-age": "1.1.2", "s-age": "1.1.2",
"sass-loader": "7.1.0", "sass-loader": "7.1.0",
"seedrandom": "2.4.3", "seedrandom": "2.4.4",
"sharp": "0.20.5", "sharp": "0.20.5",
"showdown": "1.8.6", "showdown": "1.8.6",
"showdown-highlightjs-extension": "0.1.2", "showdown-highlightjs-extension": "0.1.2",
"single-line-log": "1.1.2", "single-line-log": "1.1.2",
"speakeasy": "2.0.0", "speakeasy": "2.0.0",
"style-loader": "0.21.0", "stringz": "1.0.0",
"style-loader": "0.22.1",
"stylus": "0.54.5", "stylus": "0.54.5",
"stylus-loader": "3.0.2", "stylus-loader": "3.0.2",
"summaly": "2.0.6", "summaly": "2.1.3",
"systeminformation": "3.42.8", "systeminformation": "3.42.9",
"syuilo-password-strength": "0.0.1", "syuilo-password-strength": "0.0.1",
"textarea-caret": "3.1.0", "textarea-caret": "3.1.0",
"tmp": "0.0.33", "tmp": "0.0.33",
"ts-loader": "4.4.1", "ts-loader": "4.4.1",
"ts-node": "7.0.0", "ts-node": "7.0.1",
"tslint": "5.10.0", "tslint": "5.10.0",
"typescript": "2.9.2", "typescript": "2.9.2",
"typescript-eslint-parser": "17.0.1", "typescript-eslint-parser": "18.0.0",
"uglify-es": "3.3.9", "uglify-es": "3.3.9",
"url-loader": "1.0.1", "url-loader": "1.1.1",
"uuid": "3.3.2", "uuid": "3.3.2",
"v-animate-css": "0.0.2", "v-animate-css": "0.0.2",
"vue": "2.5.17", "vue": "2.5.17",
"vue-cropperjs": "2.2.1", "vue-cropperjs": "2.2.1",
"vue-js-modal": "1.3.16", "vue-js-modal": "1.3.17",
"vue-json-tree-view": "2.1.4", "vue-json-tree-view": "2.1.4",
"vue-loader": "15.2.6", "vue-loader": "15.3.0",
"vue-router": "3.0.1", "vue-router": "3.0.1",
"vue-style-loader": "4.1.1", "vue-style-loader": "4.1.2",
"vue-template-compiler": "2.5.17", "vue-template-compiler": "2.5.17",
"vuedraggable": "2.16.0", "vuedraggable": "2.16.0",
"vuex": "3.0.1", "vuex": "3.0.1",
"vuex-persistedstate": "2.5.4", "vuex-persistedstate": "2.5.4",
"web-push": "3.3.2", "web-push": "3.3.2",
"webfinger.js": "2.6.6", "webfinger.js": "2.6.6",
"webpack": "4.16.4", "webpack": "4.16.5",
"webpack-cli": "3.1.0", "webpack-cli": "3.1.0",
"websocket": "1.0.26", "websocket": "1.0.26",
"ws": "6.0.0", "ws": "6.0.0",

View File

@ -8,14 +8,14 @@ import VueRouter from 'vue-router';
import './style.styl'; import './style.styl';
import init from '../init'; import init from '../init';
import Index from './views/index.vue'; import Index from './views/index.vue';
import * as config from '../config';
/** /**
* init * init
*/ */
init(launch => { init(launch => {
document.title = '%i18n:common.name% | %i18n:common.application-authorization%'; document.title = `${config.name} | %i18n:common.application-authorization%`;
// Init router // Init router
const router = new VueRouter({ const router = new VueRouter({

View File

@ -38,7 +38,7 @@ export default function(type, data): Notification {
switch (data.type) { switch (data.type) {
case 'mention': case 'mention':
return { 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), body: getNoteSummary(data),
icon: data.user.avatarUrl icon: data.user.avatarUrl
}; };

View File

@ -1,13 +0,0 @@
export default date => {
if (typeof date == 'string') date = new Date(date);
return (
date.getFullYear() + '%i18n:common.date.full-year%' +
(date.getMonth() + 1) + '%i18n:common.date.month%' +
date.getDate() + '%i18n:common.date.day%' +
' ' +
date.getHours() + '%i18n:common.date.hours%' +
date.getMinutes() + '%i18n:common.date.minutes%' +
' ' +
`(${['日', '月', '火', '水', '木', '金', '土'][date.getDay()]})`
);
};

View File

@ -0,0 +1,10 @@
const faces = [
'(=^・・^=)',
'v(\'ω\')v',
'🐡( \'-\' 🐡 )フグパンチ!!!!',
'🖕(´・_・`)🖕',
'(。><。)',
'(Δ・x・Δ)'
];
export default () => faces[Math.floor(Math.random() * faces.length)];

View File

@ -1,5 +0,0 @@
export default () => [
'(=^・・^=)',
'v(\'ω\')v',
'🐡( \'-\' 🐡 )フグパンチ!!!!'
][Math.floor(Math.random() * 3)];

View File

@ -132,7 +132,7 @@ export default Vue.extend({
this.users = users; this.users = users;
this.fetching = false; this.fetching = false;
} else { } else {
(this as any).api('users/search_by_username', { (this as any).api('users/search', {
query: this.q, query: this.q,
limit: 30 limit: 30
}).then(users => { }).then(users => {

View File

@ -1,6 +1,16 @@
<template> <template>
<router-link class="mk-avatar" :to="user | userPage" :title="user | acct" :target="target" :style="style" v-if="disablePreview"></router-link> <span class="mk-avatar" :class="{ cat }" :title="user | acct" v-if="disableLink && !disablePreview" v-user-preview="user.id" @click="onClick">
<router-link class="mk-avatar" :to="user | userPage" :title="user | acct" :target="target" :style="style" v-else v-user-preview="user.id"></router-link> <span class="inner" :style="style"></span>
</span>
<span class="mk-avatar" :class="{ cat }" :title="user | acct" v-else-if="disableLink && disablePreview" @click="onClick">
<span class="inner" :style="style"></span>
</span>
<router-link class="mk-avatar" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && !disablePreview" v-user-preview="user.id">
<span class="inner" :style="style"></span>
</router-link>
<router-link class="mk-avatar" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && disablePreview">
<span class="inner" :style="style"></span>
</router-link>
</template> </template>
<script lang="ts"> <script lang="ts">
@ -15,6 +25,10 @@ export default Vue.extend({
required: false, required: false,
default: null default: null
}, },
disableLink: {
required: false,
default: false
},
disablePreview: { disablePreview: {
required: false, required: false,
default: false default: false
@ -24,26 +38,71 @@ export default Vue.extend({
lightmode(): boolean { lightmode(): boolean {
return this.$store.state.device.lightmode; return this.$store.state.device.lightmode;
}, },
cat(): boolean {
return this.user.isCat && this.$store.state.settings.circleIcons;
},
style(): any { style(): any {
return { return {
backgroundColor: this.lightmode backgroundColor: this.lightmode
? `rgb(${ this.user.avatarColor.slice(0, 3).join(',') })` ? `rgb(${this.user.avatarColor.slice(0, 3).join(',')})`
: this.user.avatarColor && this.user.avatarColor.length == 3 : this.user.avatarColor && this.user.avatarColor.length == 3
? `rgb(${ this.user.avatarColor.join(',') })` ? `rgb(${this.user.avatarColor.join(',')})`
: null, : null,
backgroundImage: this.lightmode ? null : `url(${ this.user.avatarUrl })`, backgroundImage: this.lightmode ? null : `url(${this.user.avatarUrl})`,
borderRadius: this.$store.state.settings.circleIcons ? '100%' : null borderRadius: this.$store.state.settings.circleIcons ? '100%' : null
}; };
} }
},
methods: {
onClick(e) {
this.$emit('click', e);
}
} }
}); });
</script> </script>
<style lang="stylus" scoped> <style lang="stylus" scoped>
.mk-avatar
root(isDark)
display inline-block display inline-block
vertical-align bottom vertical-align bottom
background-size cover
background-position center center &:not(.cat)
transition border-radius 1s ease overflow hidden
border-radius 8px
&.cat::before,
&.cat::after
background #df548f
border solid 4px isDark ? #e0eefd : #202224
box-sizing border-box
content ''
display inline-block
height 50%
width 50%
&.cat::before
border-radius 0 75% 75%
transform rotate(37.5deg) skew(30deg)
&.cat::after
border-radius 75% 0 75% 75%
transform rotate(-37.5deg) skew(-30deg)
.inner
background-position center center
background-size cover
bottom 0
left 0
position absolute
right 0
top 0
transition border-radius 1s ease
z-index 1
.mk-avatar[data-darkmode]
root(true)
.mk-avatar:not([data-darkmode])
root(false)
</style> </style>

View File

@ -1,14 +1,18 @@
<template> <template>
<div class="xqnhankfuuilcwvhgsopeqncafzsquya"> <div class="xqnhankfuuilcwvhgsopeqncafzsquya">
<header><b>{{ blackUser | userName }}</b>(%i18n:common.reversi.black%) vs <b>{{ whiteUser | userName }}</b>(%i18n:common.reversi.white%)</header> <button class="go-index" v-if="selfNav" @click="goIndex">%fa:arrow-left%</button>
<header><b><router-link :to="blackUser | userPage">{{ blackUser | userName }}</router-link></b>(%i18n:common.reversi.black%) vs <b><router-link :to="whiteUser | userPage">{{ whiteUser | userName }}</router-link></b>(%i18n:common.reversi.white%)</header>
<div style="overflow: hidden"> <div style="overflow: hidden; line-height: 28px;">
<p class="turn" v-if="!iAmPlayer && !game.isEnded">{{ '%i18n:common.reversi.turn-of%'.replace('{}', $options.filters.userName(turnUser)) }}<mk-ellipsis/></p> <p class="turn" v-if="!iAmPlayer && !game.isEnded">{{ '%i18n:common.reversi.turn-of%'.replace('{}', $options.filters.userName(turnUser)) }}<mk-ellipsis/></p>
<p class="turn" v-if="logPos != logs.length">{{ '%i18n:common.reversi.past-turn-of%'.replace('{}', $options.filters.userName(turnUser)) }}</p> <p class="turn" v-if="logPos != logs.length">{{ '%i18n:common.reversi.past-turn-of%'.replace('{}', $options.filters.userName(turnUser)) }}</p>
<p class="turn1" v-if="iAmPlayer && !game.isEnded && !isMyTurn">%i18n:common.reversi.opponent-turn%<mk-ellipsis/></p> <p class="turn1" v-if="iAmPlayer && !game.isEnded && !isMyTurn">%i18n:common.reversi.opponent-turn%<mk-ellipsis/></p>
<p class="turn2" v-if="iAmPlayer && !game.isEnded && isMyTurn" v-animate-css="{ classes: 'tada', iteration: 'infinite' }">%i18n:common.reversi.my-turn%</p> <p class="turn2" v-if="iAmPlayer && !game.isEnded && isMyTurn" v-animate-css="{ classes: 'tada', iteration: 'infinite' }">%i18n:common.reversi.my-turn%</p>
<p class="result" v-if="game.isEnded && logPos == logs.length"> <p class="result" v-if="game.isEnded && logPos == logs.length">
<template v-if="game.winner">{{ '%i18n:common.reversi.won%'.replace('{}', $options.filters.userName(game.winner)) }}{{ game.settings.isLlotheo ? ' (ロセオ)' : '' }}</template> <template v-if="game.winner">
<span>{{ '%i18n:common.reversi.won%'.replace('{}', $options.filters.userName(game.winner)) }}</span>
<span v-if="game.surrendered != null"> (%i18n:@surrendered%)</span>
</template>
<template v-else>%i18n:common.reversi.drawn%</template> <template v-else>%i18n:common.reversi.drawn%</template>
</p> </p>
</div> </div>
@ -41,6 +45,10 @@
<p class="status"><b>{{ '%i18n:common.reversi.this-turn%'.split('{}')[0] }}{{ logPos }}{{ '%i18n:common.reversi.this-turn%'.split('{}')[1] }}</b> %i18n:common.reversi.black%:{{ o.blackCount }} %i18n:common.reversi.white%:{{ o.whiteCount }} %i18n:common.reversi.total%:{{ o.blackCount + o.whiteCount }}</p> <p class="status"><b>{{ '%i18n:common.reversi.this-turn%'.split('{}')[0] }}{{ logPos }}{{ '%i18n:common.reversi.this-turn%'.split('{}')[1] }}</b> %i18n:common.reversi.black%:{{ o.blackCount }} %i18n:common.reversi.white%:{{ o.whiteCount }} %i18n:common.reversi.total%:{{ o.blackCount + o.whiteCount }}</p>
<div class="actions" v-if="!game.isEnded && iAmPlayer">
<form-button @click="surrender">%i18n:@surrender%</form-button>
</div>
<div class="player" v-if="game.isEnded"> <div class="player" v-if="game.isEnded">
<el-button-group> <el-button-group>
<el-button type="primary" @click="logPos = 0" :disabled="logPos == 0">%fa:angle-double-left%</el-button> <el-button type="primary" @click="logPos = 0" :disabled="logPos == 0">%fa:angle-double-left%</el-button>
@ -52,6 +60,12 @@
<el-button type="primary" @click="logPos = logs.length" :disabled="logPos == logs.length">%fa:angle-double-right%</el-button> <el-button type="primary" @click="logPos = logs.length" :disabled="logPos == logs.length">%fa:angle-double-right%</el-button>
</el-button-group> </el-button-group>
</div> </div>
<div class="info">
<p v-if="game.settings.isLlotheo">%i18n:@is-llotheo%</p>
<p v-if="game.settings.loopedBoard">%i18n:@looped-map%</p>
<p v-if="game.settings.canPutEverywhere">%i18n:@can-put-everywhere%</p>
</div>
</div> </div>
</template> </template>
@ -62,7 +76,20 @@ import Reversi, { Color } from '../../../../../../../games/reversi/core';
import { url } from '../../../../../config'; import { url } from '../../../../../config';
export default Vue.extend({ export default Vue.extend({
props: ['initGame', 'connection'], props: {
initGame: {
type: Object,
require: true
},
connection: {
type: Object,
require: true
},
selfNav: {
type: Boolean,
require: true
}
},
data() { data() {
return { return {
@ -79,22 +106,27 @@ export default Vue.extend({
if (!this.$store.getters.isSignedIn) return false; if (!this.$store.getters.isSignedIn) return false;
return this.game.user1Id == this.$store.state.i.id || this.game.user2Id == this.$store.state.i.id; return this.game.user1Id == this.$store.state.i.id || this.game.user2Id == this.$store.state.i.id;
}, },
myColor(): Color { myColor(): Color {
if (!this.iAmPlayer) return null; if (!this.iAmPlayer) return null;
if (this.game.user1Id == this.$store.state.i.id && this.game.black == 1) return true; if (this.game.user1Id == this.$store.state.i.id && this.game.black == 1) return true;
if (this.game.user2Id == this.$store.state.i.id && this.game.black == 2) return true; if (this.game.user2Id == this.$store.state.i.id && this.game.black == 2) return true;
return false; return false;
}, },
opColor(): Color { opColor(): Color {
if (!this.iAmPlayer) return null; if (!this.iAmPlayer) return null;
return this.myColor === true ? false : true; return this.myColor === true ? false : true;
}, },
blackUser(): any { blackUser(): any {
return this.game.black == 1 ? this.game.user1 : this.game.user2; return this.game.black == 1 ? this.game.user1 : this.game.user2;
}, },
whiteUser(): any { whiteUser(): any {
return this.game.black == 1 ? this.game.user2 : this.game.user1; return this.game.black == 1 ? this.game.user2 : this.game.user1;
}, },
turnUser(): any { turnUser(): any {
if (this.o.turn === true) { if (this.o.turn === true) {
return this.game.black == 1 ? this.game.user1 : this.game.user2; return this.game.black == 1 ? this.game.user1 : this.game.user2;
@ -104,11 +136,13 @@ export default Vue.extend({
return null; return null;
} }
}, },
isMyTurn(): boolean { isMyTurn(): boolean {
if (!this.iAmPlayer) return false; if (!this.iAmPlayer) return false;
if (this.turnUser == null) return false; if (this.turnUser == null) return false;
return this.turnUser.id == this.$store.state.i.id; return this.turnUser.id == this.$store.state.i.id;
}, },
cellsStyle(): any { cellsStyle(): any {
return { return {
'grid-template-rows': `repeat(${this.game.settings.map.length}, 1fr)`, 'grid-template-rows': `repeat(${this.game.settings.map.length}, 1fr)`,
@ -165,11 +199,13 @@ export default Vue.extend({
mounted() { mounted() {
this.connection.on('set', this.onSet); this.connection.on('set', this.onSet);
this.connection.on('rescue', this.onRescue); this.connection.on('rescue', this.onRescue);
this.connection.on('ended', this.onEnded);
}, },
beforeDestroy() { beforeDestroy() {
this.connection.off('set', this.onSet); this.connection.off('set', this.onSet);
this.connection.off('rescue', this.onRescue); this.connection.off('rescue', this.onRescue);
this.connection.off('ended', this.onEnded);
clearInterval(this.pollingClock); clearInterval(this.pollingClock);
}, },
@ -215,6 +251,10 @@ export default Vue.extend({
} }
}, },
onEnded(x) {
this.game = x.game;
},
checkEnd() { checkEnd() {
this.game.isEnded = this.o.isEnded; this.game.isEnded = this.o.isEnded;
if (this.game.isEnded) { if (this.game.isEnded) {
@ -250,6 +290,16 @@ export default Vue.extend({
this.checkEnd(); this.checkEnd();
this.$forceUpdate(); this.$forceUpdate();
},
surrender() {
(this as any).api('games/reversi/games/surrender', {
gameId: this.game.id
});
},
goIndex() {
this.$emit('go-index');
} }
} }
}); });
@ -261,10 +311,21 @@ export default Vue.extend({
root(isDark) root(isDark)
text-align center text-align center
> .go-index
position absolute
top 0
left 0
z-index 1
width 42px
height 42px
> header > header
padding 8px padding 8px
border-bottom dashed 1px isDark ? #4c5761 : #c4cdd4 border-bottom dashed 1px isDark ? #4c5761 : #c4cdd4
a
color inherit
> .board > .board
width calc(100% - 16px) width calc(100% - 16px)
max-width 500px max-width 500px
@ -381,6 +442,9 @@ root(isDark)
margin 0 margin 0
padding 16px 0 padding 16px 0
> .actions
padding-bottom 16px
> .player > .player
padding-bottom 32px padding-bottom 32px

View File

@ -1,7 +1,7 @@
<template> <template>
<div> <div>
<x-room v-if="!g.isStarted" :game="g" :connection="connection"/> <x-room v-if="!g.isStarted" :game="g" :connection="connection"/>
<x-game v-else :init-game="g" :connection="connection"/> <x-game v-else :init-game="g" :connection="connection" :self-nav="selfNav" @go-index="goIndex"/>
</div> </div>
</template> </template>
@ -16,7 +16,16 @@ export default Vue.extend({
XGame, XGame,
XRoom XRoom
}, },
props: ['game'], props: {
game: {
type: Object,
required: true
},
selfNav: {
type: Boolean,
require: true
}
},
data() { data() {
return { return {
connection: null, connection: null,
@ -36,6 +45,9 @@ export default Vue.extend({
onStarted(game) { onStarted(game) {
Object.assign(this.g, game); Object.assign(this.g, game);
this.$forceUpdate(); this.$forceUpdate();
},
goIndex() {
this.$emit('go-index');
} }
} }
}); });

View File

@ -32,6 +32,7 @@
<mk-avatar class="avatar" :user="g.user2"/> <mk-avatar class="avatar" :user="g.user2"/>
<span><b>{{ g.user1 | userName }}</b> vs <b>{{ g.user2 | userName }}</b></span> <span><b>{{ g.user1 | userName }}</b> vs <b>{{ g.user2 | userName }}</b></span>
<span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span> <span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span>
<mk-time :time="g.createdAt" />
</a> </a>
</section> </section>
<section v-if="games.length > 0"> <section v-if="games.length > 0">
@ -41,6 +42,7 @@
<mk-avatar class="avatar" :user="g.user2"/> <mk-avatar class="avatar" :user="g.user2"/>
<span><b>{{ g.user1 | userName }}</b> vs <b>{{ g.user2 | userName }}</b></span> <span><b>{{ g.user1 | userName }}</b> vs <b>{{ g.user2 | userName }}</b></span>
<span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span> <span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span>
<mk-time :time="g.createdAt" />
</a> </a>
</section> </section>
</div> </div>
@ -96,11 +98,7 @@ export default Vue.extend({
methods: { methods: {
go(game) { go(game) {
(this as any).api('games/reversi/games/show', { this.$emit('go', game);
gameId: game.id
}).then(game => {
this.$emit('go', game);
});
}, },
match() { match() {

View File

@ -53,7 +53,7 @@
</div> </div>
</div> </div>
<div class="card" v-if="form"> <div class="card form" v-if="form">
<header> <header>
<span>%i18n:@settings-of-the-bot%</span> <span>%i18n:@settings-of-the-bot%</span>
</header> </header>
@ -65,7 +65,7 @@
:key="message.id"/> :key="message.id"/>
<template v-for="item in form"> <template v-for="item in form">
<mk-switch v-if="item.type == 'button'" v-model="item.value" :key="item.id" :text="item.label" @change="onChangeForm($event, item)">{{ item.desc || '' }}</mk-switch> <mk-switch v-if="item.type == 'switch'" v-model="item.value" :key="item.id" :text="item.label" @change="onChangeForm(item)">{{ item.desc || '' }}</mk-switch>
<div class="card" v-if="item.type == 'radio'" :key="item.id"> <div class="card" v-if="item.type == 'radio'" :key="item.id">
<header> <header>
@ -73,7 +73,17 @@
</header> </header>
<div> <div>
<form-radio v-for="(r, i) in item.items" :key="item.id + ':' + i" v-model="item.value" :value="r.value" @change="onChangeForm($event, item)">{{ r.label }}</form-radio> <form-radio v-for="(r, i) in item.items" :key="item.id + ':' + i" v-model="item.value" :value="r.value" @change="onChangeForm(item)">{{ r.label }}</form-radio>
</div>
</div>
<div class="card" v-if="item.type == 'slider'" :key="item.id">
<header>
<span>{{ item.label }}</span>
</header>
<div>
<input type="range" :min="item.min" :max="item.max" :step="item.step || 1" v-model="item.value" @change="onChangeForm(item)"/>
</div> </div>
</div> </div>
@ -83,7 +93,7 @@
</header> </header>
<div> <div>
<el-input v-model="item.value" @change="onChangeForm($event, item)"/> <el-input v-model="item.value" @change="onChangeForm(item)"/>
</div> </div>
</div> </div>
</template> </template>
@ -210,11 +220,11 @@ export default Vue.extend({
this.messages.unshift(x.message); this.messages.unshift(x.message);
}, },
onChangeForm(v, item) { onChangeForm(item) {
this.connection.send({ this.connection.send({
type: 'update-form', type: 'update-form',
id: item.id, id: item.id,
value: v value: item.value
}); });
}, },
@ -274,6 +284,9 @@ root(isDark)
color isDark ? #fff : #606266 color isDark ? #fff : #606266
cursor pointer cursor pointer
transition border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1) transition border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)
-webkit-appearance none
-moz-appearance none
appearance none
&:hover &:hover
border-color isDark ? #a7aebd : #c0c4cc border-color isDark ? #a7aebd : #c0c4cc
@ -312,6 +325,14 @@ root(isDark)
&[data-none] &[data-none]
border-color transparent border-color transparent
&.form
> div
> .card + .card
margin-top 16px
input[type='range']
width 100%
.card .card
max-width 400px max-width 400px
border-radius 4px border-radius 4px

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="vchtoekanapleubgzioubdtmlkribzfd"> <div class="vchtoekanapleubgzioubdtmlkribzfd">
<div v-if="game"> <div v-if="game">
<x-gameroom :game="game"/> <x-gameroom :game="game" :self-nav="selfNav" @go-index="goIndex"/>
</div> </div>
<div class="matching" v-else-if="matching"> <div class="matching" v-else-if="matching">
<h1>{{ '%i18n:@matching.waiting-for%'.split('{}')[0] }}<b>{{ matching | userName }}</b>{{ '%i18n:@matching.waiting-for%'.split('{}')[1] }}<mk-ellipsis/></h1> <h1>{{ '%i18n:@matching.waiting-for%'.split('{}')[0] }}<b>{{ matching | userName }}</b>{{ '%i18n:@matching.waiting-for%'.split('{}')[1] }}<mk-ellipsis/></h1>
@ -34,6 +34,11 @@ export default Vue.extend({
gameId: { gameId: {
type: String, type: String,
required: false required: false
},
selfNav: {
type: Boolean,
require: false,
default: true
} }
}, },
@ -48,6 +53,10 @@ export default Vue.extend({
}, },
watch: { watch: {
game() {
this.$emit('gamed', this.game);
},
gameId() { gameId() {
this.fetch(); this.fetch();
} }
@ -91,18 +100,24 @@ export default Vue.extend({
(this as any).api('games/reversi/games/show', { (this as any).api('games/reversi/games/show', {
gameId: this.gameId gameId: this.gameId
}).then(game => { }).then(game => {
this.nav(game, true); this.game = game;
Progress.done(); Progress.done();
}); });
} }
}, },
nav(game, silent) { async nav(game, actualNav = true) {
this.matching = null; if (this.selfNav) {
this.game = game; // 受け取ったゲーム情報が省略されたものなら完全な情報を取得する
if (game != null && (game.settings == null || game.settings.map == null)) {
game = await (this as any).api('games/reversi/games/show', {
gameId: game.id
});
}
if (!silent) { this.game = game;
this.$emit('nav', this.game); } else {
this.$emit('nav', game, actualNav);
} }
}, },
@ -121,7 +136,8 @@ export default Vue.extend({
}).then(game => { }).then(game => {
if (game) { if (game) {
this.matching = null; this.matching = null;
this.game = game;
this.nav(game);
} }
}); });
}, },
@ -129,6 +145,11 @@ export default Vue.extend({
onMatched(game) { onMatched(game) {
this.matching = null; this.matching = null;
this.game = game; this.game = game;
this.nav(game, false);
},
goIndex() {
this.nav(null);
} }
} }
}); });

View File

@ -83,7 +83,7 @@ export default Vue.extend({
} }
} else { } else {
if (items[0].kind == 'file') { if (items[0].kind == 'file') {
alert('メッセージに添付できるのはひとつのファイルのみです'); alert('%i18n:only-one-file-attached%');
} }
} }
}, },
@ -105,7 +105,7 @@ export default Vue.extend({
return; return;
} else if (e.dataTransfer.files.length > 1) { } else if (e.dataTransfer.files.length > 1) {
e.preventDefault(); e.preventDefault();
alert('メッセージに添付できるのはひとつのファイルのみです'); alert('%i18n:only-one-file-attached%');
return; return;
} }

View File

@ -61,7 +61,7 @@ export default Vue.extend({
const date = new Date(message.createdAt).getDate(); const date = new Date(message.createdAt).getDate();
const month = new Date(message.createdAt).getMonth() + 1; const month = new Date(message.createdAt).getMonth() + 1;
message._date = date; message._date = date;
message._datetext = `${month}${date}`; message._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
return message; return message;
}); });
}, },
@ -111,7 +111,7 @@ export default Vue.extend({
this.form.upload(e.dataTransfer.files[0]); this.form.upload(e.dataTransfer.files[0]);
return; return;
} else if (e.dataTransfer.files.length > 1) { } else if (e.dataTransfer.files.length > 1) {
alert('メッセージに添付できるのはひとつのファイルのみです'); alert('%i18n:@only-one-file-attached%');
return; return;
} }

View File

@ -1,5 +1,6 @@
import Vue from 'vue'; import Vue from 'vue';
import * as emojilib from 'emojilib'; import * as emojilib from 'emojilib';
import { length } from 'stringz';
import parse from '../../../../../mfm/parse'; import parse from '../../../../../mfm/parse';
import getAcct from '../../../../../misc/acct/render'; import getAcct from '../../../../../misc/acct/render';
import { url } from '../../../config'; import { url } from '../../../config';
@ -40,10 +41,13 @@ export default Vue.component('misskey-flavored-markdown', {
ast = this.ast; ast = this.ast;
} }
let bigCount = 0;
let motionCount = 0;
// Parse ast to DOM // Parse ast to DOM
const els = flatten(ast.map(token => { const els = flatten(ast.map(token => {
switch (token.type) { switch (token.type) {
case 'text': case 'text': {
const text = token.content.replace(/(\r\n|\n|\r)/g, '\n'); const text = token.content.replace(/(\r\n|\n|\r)/g, '\n');
if (this.shouldBreak) { if (this.shouldBreak) {
@ -54,30 +58,52 @@ export default Vue.component('misskey-flavored-markdown', {
} else { } else {
return createElement('span', text.replace(/\n/g, ' ')); return createElement('span', text.replace(/\n/g, ' '));
} }
}
case 'bold': case 'bold': {
return createElement('b', token.bold); return createElement('b', token.bold);
}
case 'big': case 'big': {
bigCount++;
const isLong = length(token.big) > 10;
const isMany = bigCount > 3;
return (createElement as any)('strong', { return (createElement as any)('strong', {
attrs: { attrs: {
style: 'display: inline-block; font-size: 200%;' style: `display: inline-block; font-size: ${ isMany ? '100%' : '150%' };`
}, },
directives: [{ directives: [this.$store.state.settings.disableAnimatedMfm || isLong || isMany ? {} : {
name: 'animate-css', name: 'animate-css',
value: { classes: 'tada', iteration: 'infinite' } value: { classes: 'tada', iteration: 'infinite' }
}] }]
}, token.big); }, token.big);
}
case 'url': case 'motion': {
motionCount++;
const isLong = length(token.motion) > 10;
const isMany = motionCount > 3;
return (createElement as any)('span', {
attrs: {
style: 'display: inline-block;'
},
directives: [this.$store.state.settings.disableAnimatedMfm || isLong || isMany ? {} : {
name: 'animate-css',
value: { classes: 'rubberBand', iteration: 'infinite' }
}]
}, token.motion);
}
case 'url': {
return createElement(MkUrl, { return createElement(MkUrl, {
props: { props: {
url: token.content, url: token.content,
target: '_blank' target: '_blank'
} }
}); });
}
case 'link': case 'link': {
return createElement('a', { return createElement('a', {
attrs: { attrs: {
class: 'link', class: 'link',
@ -86,8 +112,9 @@ export default Vue.component('misskey-flavored-markdown', {
title: token.url title: token.url
} }
}, token.title); }, token.title);
}
case 'mention': case 'mention': {
return (createElement as any)('a', { return (createElement as any)('a', {
attrs: { attrs: {
href: `${url}/@${getAcct(token)}`, href: `${url}/@${getAcct(token)}`,
@ -99,16 +126,18 @@ export default Vue.component('misskey-flavored-markdown', {
value: token.content value: token.content
}] }]
}, token.content); }, token.content);
}
case 'hashtag': case 'hashtag': {
return createElement('a', { return createElement('a', {
attrs: { attrs: {
href: `${url}/tags/${encodeURIComponent(token.hashtag)}`, href: `${url}/tags/${encodeURIComponent(token.hashtag)}`,
target: '_blank' target: '_blank'
} }
}, token.content); }, token.content);
}
case 'code': case 'code': {
return createElement('pre', { return createElement('pre', {
class: 'code' class: 'code'
}, [ }, [
@ -118,15 +147,17 @@ export default Vue.component('misskey-flavored-markdown', {
} }
}) })
]); ]);
}
case 'inline-code': case 'inline-code': {
return createElement('code', { return createElement('code', {
domProps: { domProps: {
innerHTML: token.html innerHTML: token.html
} }
}); });
}
case 'quote': case 'quote': {
const text2 = token.quote.replace(/(\r\n|\n|\r)/g, '\n'); const text2 = token.quote.replace(/(\r\n|\n|\r)/g, '\n');
if (this.shouldBreak) { if (this.shouldBreak) {
@ -145,27 +176,32 @@ export default Vue.component('misskey-flavored-markdown', {
} }
}, text2.replace(/\n/g, ' ')); }, text2.replace(/\n/g, ' '));
} }
}
case 'title': case 'title': {
return createElement('div', { return createElement('div', {
attrs: { attrs: {
class: 'title' class: 'title'
} }
}, token.title); }, token.title);
}
case 'emoji': case 'emoji': {
const emoji = emojilib.lib[token.emoji]; const emoji = emojilib.lib[token.emoji];
return createElement('span', emoji ? emoji.char : token.content); return createElement('span', emoji ? emoji.char : token.content);
}
case 'search': case 'search': {
return createElement(MkGoogle, { return createElement(MkGoogle, {
props: { props: {
q: token.query q: token.query
} }
}); });
}
default: default: {
console.log('unknown ast type:', token.type); console.log('unknown ast type:', token.type);
}
} }
})); }));

View File

@ -2,7 +2,7 @@
<header class="bvonvjxbwzaiskogyhbwgyxvcgserpmu"> <header class="bvonvjxbwzaiskogyhbwgyxvcgserpmu">
<mk-avatar class="avatar" :user="note.user" v-if="$store.state.device.postStyle == 'smart'"/> <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">{{ note.user | userName }}</router-link>
<span class="is-verified" v-if="note.user.isVerified" title="%i18n:common.verified-user%">%fa:bookmark%</span> <span class="is-verified" v-if="note.user.isVerified" title="%i18n:common.verified-user%">%fa:star%</span>
<span class="is-admin" v-if="note.user.isAdmin">admin</span> <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-bot" v-if="note.user.isBot">bot</span>
<span class="is-cat" v-if="note.user.isCat">cat</span> <span class="is-cat" v-if="note.user.isCat">cat</span>

View File

@ -8,6 +8,7 @@
<img v-if="reaction == 'congrats'" src="/assets/reactions/congrats.png" alt="%i18n:common.reactions.congrats%"> <img v-if="reaction == 'congrats'" src="/assets/reactions/congrats.png" alt="%i18n:common.reactions.congrats%">
<img v-if="reaction == 'angry'" src="/assets/reactions/angry.png" alt="%i18n:common.reactions.angry%"> <img v-if="reaction == 'angry'" src="/assets/reactions/angry.png" alt="%i18n:common.reactions.angry%">
<img v-if="reaction == 'confused'" src="/assets/reactions/confused.png" alt="%i18n:common.reactions.confused%"> <img v-if="reaction == 'confused'" src="/assets/reactions/confused.png" alt="%i18n:common.reactions.confused%">
<img v-if="reaction == 'rip'" src="/assets/reactions/rip.png" alt="%i18n:common.reactions.rip%">
<template v-if="reaction == 'pudding'"> <template v-if="reaction == 'pudding'">
<img v-if="$store.getters.isSignedIn && $store.state.settings.iLikeSushi" src="/assets/reactions/sushi.png" alt="%i18n:common.reactions.pudding%"> <img v-if="$store.getters.isSignedIn && $store.state.settings.iLikeSushi" src="/assets/reactions/sushi.png" alt="%i18n:common.reactions.pudding%">
<img v-else src="/assets/reactions/pudding.png" alt="%i18n:common.reactions.pudding%"> <img v-else src="/assets/reactions/pudding.png" alt="%i18n:common.reactions.pudding%">

View File

@ -10,9 +10,10 @@
<button @click="react('hmm')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="4" title="%i18n:common.reactions.hmm%"><mk-reaction-icon reaction='hmm'/></button> <button @click="react('hmm')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="4" title="%i18n:common.reactions.hmm%"><mk-reaction-icon reaction='hmm'/></button>
<button @click="react('surprise')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="5" title="%i18n:common.reactions.surprise%"><mk-reaction-icon reaction='surprise'/></button> <button @click="react('surprise')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="5" title="%i18n:common.reactions.surprise%"><mk-reaction-icon reaction='surprise'/></button>
<button @click="react('congrats')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="6" title="%i18n:common.reactions.congrats%"><mk-reaction-icon reaction='congrats'/></button> <button @click="react('congrats')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="6" title="%i18n:common.reactions.congrats%"><mk-reaction-icon reaction='congrats'/></button>
<button @click="react('angry')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="4" title="%i18n:common.reactions.angry%"><mk-reaction-icon reaction='angry'/></button> <button @click="react('angry')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="7" title="%i18n:common.reactions.angry%"><mk-reaction-icon reaction='angry'/></button>
<button @click="react('confused')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="5" title="%i18n:common.reactions.confused%"><mk-reaction-icon reaction='confused'/></button> <button @click="react('confused')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="8" title="%i18n:common.reactions.confused%"><mk-reaction-icon reaction='confused'/></button>
<button @click="react('pudding')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="6" title="%i18n:common.reactions.pudding%"><mk-reaction-icon reaction='pudding'/></button> <button @click="react('rip')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="9" title="%i18n:common.reactions.rip%"><mk-reaction-icon reaction='rip'/></button>
<button @click="react('pudding')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="10" title="%i18n:common.reactions.pudding%"><mk-reaction-icon reaction='pudding'/></button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,15 +1,16 @@
<template> <template>
<div class="mk-reactions-viewer"> <div class="mk-reactions-viewer">
<template v-if="reactions"> <template v-if="reactions">
<span v-if="reactions.like"><mk-reaction-icon reaction="like"/><span>{{ reactions.like }}</span></span> <span :class="{notReacted}" @click="react('like')" v-if="reactions.like"><mk-reaction-icon reaction="like"/><span>{{ reactions.like }}</span></span>
<span v-if="reactions.love"><mk-reaction-icon reaction="love"/><span>{{ reactions.love }}</span></span> <span :class="{notReacted}" @click="react('love')" v-if="reactions.love"><mk-reaction-icon reaction="love"/><span>{{ reactions.love }}</span></span>
<span v-if="reactions.laugh"><mk-reaction-icon reaction="laugh"/><span>{{ reactions.laugh }}</span></span> <span :class="{notReacted}" @click="react('laugh')" v-if="reactions.laugh"><mk-reaction-icon reaction="laugh"/><span>{{ reactions.laugh }}</span></span>
<span v-if="reactions.hmm"><mk-reaction-icon reaction="hmm"/><span>{{ reactions.hmm }}</span></span> <span :class="{notReacted}" @click="react('hmm')" v-if="reactions.hmm"><mk-reaction-icon reaction="hmm"/><span>{{ reactions.hmm }}</span></span>
<span v-if="reactions.surprise"><mk-reaction-icon reaction="surprise"/><span>{{ reactions.surprise }}</span></span> <span :class="{notReacted}" @click="react('surprise')" v-if="reactions.surprise"><mk-reaction-icon reaction="surprise"/><span>{{ reactions.surprise }}</span></span>
<span v-if="reactions.congrats"><mk-reaction-icon reaction="congrats"/><span>{{ reactions.congrats }}</span></span> <span :class="{notReacted}" @click="react('congrats')" v-if="reactions.congrats"><mk-reaction-icon reaction="congrats"/><span>{{ reactions.congrats }}</span></span>
<span v-if="reactions.angry"><mk-reaction-icon reaction="angry"/><span>{{ reactions.angry }}</span></span> <span :class="{notReacted}" @click="react('angry')" v-if="reactions.angry"><mk-reaction-icon reaction="angry"/><span>{{ reactions.angry }}</span></span>
<span v-if="reactions.confused"><mk-reaction-icon reaction="confused"/><span>{{ reactions.confused }}</span></span> <span :class="{notReacted}" @click="react('confused')" v-if="reactions.confused"><mk-reaction-icon reaction="confused"/><span>{{ reactions.confused }}</span></span>
<span v-if="reactions.pudding"><mk-reaction-icon reaction="pudding"/><span>{{ reactions.pudding }}</span></span> <span :class="{notReacted}" @click="react('rip')" v-if="reactions.rip"><mk-reaction-icon reaction="rip"/><span>{{ reactions.rip }}</span></span>
<span :class="{notReacted}" @click="react('pudding')" v-if="reactions.pudding"><mk-reaction-icon reaction="pudding"/><span>{{ reactions.pudding }}</span></span>
</template> </template>
</div> </div>
</template> </template>
@ -21,6 +22,17 @@ export default Vue.extend({
computed: { computed: {
reactions(): number { reactions(): number {
return this.note.reactionCounts; return this.note.reactionCounts;
},
notReacted(): boolean {
return this.note.myReaction == null;
}
},
methods: {
react(reaction: string) {
(this as any).api('notes/reactions/create', {
noteId: this.note.id,
reaction: reaction
});
} }
} }
}); });
@ -39,6 +51,9 @@ root(isDark)
> span > span
margin-right 8px margin-right 8px
&.notReacted
cursor pointer
> .mk-reaction-icon > .mk-reaction-icon
font-size 1.4em font-size 1.4em

View File

@ -12,13 +12,13 @@
</ui-input> </ui-input>
<ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required/> <ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required/>
<ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button> <ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button>
<p style="margin: 8px 0;">または<a :href="`${apiUrl}/signin/twitter`">Twitterでログイン</a></p> <p style="margin: 8px 0;" v-if="twitterIntegration">%i18n:@or% <a :href="`${apiUrl}/signin/twitter`">%i18n:@signin-with-twitter%</a></p>
</form> </form>
</template> </template>
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import { apiUrl, host } from '../../../config'; import { apiUrl, host, twitterIntegration } from '../../../config';
export default Vue.extend({ export default Vue.extend({
props: { props: {
@ -36,7 +36,8 @@ export default Vue.extend({
password: '', password: '',
token: '', token: '',
apiUrl, apiUrl,
host host,
twitterIntegration
}; };
}, },
methods: { methods: {
@ -59,7 +60,7 @@ export default Vue.extend({
}).then(() => { }).then(() => {
location.reload(); location.reload();
}).catch(() => { }).catch(() => {
alert('something happened'); alert('%i18n:@login-failed%');
this.signing = false; this.signing = false;
}); });
} }

View File

@ -1,5 +1,10 @@
<template> <template>
<form class="mk-signup" @submit.prevent="onSubmit" :autocomplete="Math.random()"> <form class="mk-signup" @submit.prevent="onSubmit" :autocomplete="Math.random()">
<ui-input v-if="meta.disableRegistration" v-model="invitationCode" type="text" :autocomplete="Math.random()" spellcheck="false" required>
<span>%i18n:@invitation-code%</span>
<span slot="prefix">%fa:id-card-alt%</span>
<p slot="text" v-html="'%i18n:@invitation-info%'.replace('{}', meta.maintainer.url)"></p>
</ui-input>
<ui-input v-model="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :autocomplete="Math.random()" spellcheck="false" required @input="onChangeUsername"> <ui-input v-model="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :autocomplete="Math.random()" spellcheck="false" required @input="onChangeUsername">
<span>%i18n:@username%</span> <span>%i18n:@username%</span>
<span slot="prefix">@</span> <span slot="prefix">@</span>
@ -46,11 +51,13 @@ export default Vue.extend({
username: '', username: '',
password: '', password: '',
retypedPassword: '', retypedPassword: '',
invitationCode: '',
url, url,
recaptchaSitekey, recaptchaSitekey,
usernameState: null, usernameState: null,
passwordStrength: '', passwordStrength: '',
passwordRetypeState: null passwordRetypeState: null,
meta: null
} }
}, },
computed: { computed: {
@ -61,6 +68,11 @@ export default Vue.extend({
this.usernameState != 'max-range'); this.usernameState != 'max-range');
} }
}, },
created() {
(this as any).os.getMeta().then(meta => {
this.meta = meta;
});
},
methods: { methods: {
onChangeUsername() { onChangeUsername() {
if (this.username == '') { if (this.username == '') {
@ -110,6 +122,7 @@ export default Vue.extend({
(this as any).api('signup', { (this as any).api('signup', {
username: this.username, username: this.username,
password: this.password, password: this.password,
invitationCode: this.invitationCode,
'g-recaptcha-response': recaptchaSitekey != null ? (window as any).grecaptcha.getResponse() : null 'g-recaptcha-response': recaptchaSitekey != null ? (window as any).grecaptcha.getResponse() : null
}).then(() => { }).then(() => {
(this as any).api('signin', { (this as any).api('signin', {

View File

@ -45,6 +45,9 @@ root(isDark)
color isDark ? #fff : #606266 color isDark ? #fff : #606266
transition 0.1s transition 0.1s
*
pointer-events none
&:hover &:hover
&:focus &:focus
color $theme-color color $theme-color

View File

@ -1,7 +1,5 @@
<template> <template>
<iframe v-if="youtubeId" type="text/html" height="250" <iframe v-if="player" :src="player" heigth="250" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen />
:src="`https://www.youtube.com/embed/${youtubeId}?origin=${misskeyUrl}`"
frameborder="0"/>
<div v-else-if="tweetUrl && detail" class="twitter"> <div v-else-if="tweetUrl && detail" class="twitter">
<blockquote ref="tweet" class="twitter-tweet" :data-theme="$store.state.device.darkmode ? 'dark' : null"> <blockquote ref="tweet" class="twitter-tweet" :data-theme="$store.state.device.darkmode ? 'dark' : null">
<a :href="url"></a> <a :href="url"></a>
@ -48,7 +46,7 @@ export default Vue.extend({
thumbnail: null, thumbnail: null,
icon: null, icon: null,
sitename: null, sitename: null,
youtubeId: null, player: null,
tweetUrl: null, tweetUrl: null,
misskeyUrl misskeyUrl
}; };
@ -56,11 +54,7 @@ export default Vue.extend({
created() { created() {
const url = new URL(this.url); const url = new URL(this.url);
if (url.hostname == 'www.youtube.com') { if (this.detail && url.hostname == 'twitter.com' && /^\/.+\/status(es)?\/\d+/.test(url.pathname)) {
this.youtubeId = url.searchParams.get('v');
} else if (url.hostname == 'youtu.be') {
this.youtubeId = url.pathname;
} else if (this.detail && url.hostname == 'twitter.com' && /^\/.+\/status(es)?\/\d+/.test(url.pathname)) {
this.tweetUrl = url; this.tweetUrl = url;
const twttr = (window as any).twttr || {}; const twttr = (window as any).twttr || {};
const loadTweet = () => twttr.widgets.load(this.$refs.tweet); const loadTweet = () => twttr.widgets.load(this.$refs.tweet);
@ -79,20 +73,99 @@ export default Vue.extend({
twttr.ready = loadTweet; twttr.ready = loadTweet;
(window as any).twttr = twttr; (window as any).twttr = twttr;
} }
} else { return;
fetch('/url?url=' + encodeURIComponent(this.url)).then(res => { }
res.json().then(info => { fetch('/url?url=' + encodeURIComponent(this.url)).then(res => {
res.json().then(info => {
if (info.url != null) {
this.title = info.title; this.title = info.title;
this.description = info.description; this.description = info.description;
this.thumbnail = info.thumbnail; this.thumbnail = info.thumbnail;
this.icon = info.icon; this.icon = info.icon;
this.sitename = info.sitename; this.sitename = info.sitename;
this.fetching = false; this.fetching = false;
}); if ([ // THIS IS THE WHITELIST FOR THE EMBED PLAYER
}); 'afreecatv.com',
} 'aparat.com',
} 'applemusic.com',
'amazon.com',
'awa.fm',
'bandcamp.com',
'bbc.co.uk',
'beatport.com',
'bilibili.com',
'boomstream.com',
'breakers.tv',
'cam4.com',
'cavelis.net',
'chaturbate.com',
'cnn.com',
'cybergame.tv',
'dailymotion.com',
'deezer.com',
'djlive.pl',
'e-onkyo.com',
'eventials.com',
'facebook.com',
'fc2.com',
'gameplank.tv',
'goodgame.ru',
'google.com',
'hardtunes.com',
'instagram.com',
'johnnylooch.com',
'kexp.org',
'lahzenegar.com',
'liveedu.tv',
'livetube.cc',
'livestream.com',
'meridix.com',
'mixcloud.com',
'mixer.com',
'mobcrush.com',
'mylive.in.th',
'myspace.com',
'netflix.com',
'newretrowave.com',
'nhk.or.jp',
'nicovideo.jp',
'nico.ms',
'noisetrade.com',
'nood.tv',
'npr.org',
'openrec.tv',
'pandora.com',
'pandora.tv',
'picarto.tv',
'pscp.tv',
'restream.io',
'reverbnation.com',
'sermonaudio.com',
'smashcast.tv',
'songkick.com',
'soundcloud.com',
'spinninrecords.com',
'spotify.com',
'stitcher.com',
'stream.me',
'switchboard.live',
'tunein.com',
'twitcasting.tv',
'twitch.tv',
'twitter.com',
'vaughnlive.tv',
'veoh.com',
'vimeo.com',
'watchpeoplecode.com',
'web.tv',
'youtube.com',
'youtu.be'
].some(x => x == url.hostname || url.hostname.endsWith(`.${x}`)))
this.player = info.player;
} // info.url
}) // json
}); // fetch
} // created
}); });
</script> </script>

View File

@ -44,7 +44,12 @@ import Vue from 'vue';
import * as anime from 'animejs'; import * as anime from 'animejs';
export default Vue.extend({ export default Vue.extend({
props: ['source', 'compact', 'v'], props: ['source', 'compact'],
data() {
return {
v: this.$store.state.device.visibility || 'public'
}
},
mounted() { mounted() {
this.$nextTick(() => { this.$nextTick(() => {
const popover = this.$refs.popover as any; const popover = this.$refs.popover as any;
@ -92,6 +97,7 @@ export default Vue.extend({
}, },
methods: { methods: {
choose(visibility) { choose(visibility) {
this.$store.commit('device/setVisibility', visibility);
this.$emit('chosen', visibility); this.$emit('chosen', visibility);
this.$destroy(); this.$destroy();
}, },

View File

@ -71,7 +71,6 @@ export default Vue.extend({
this.user = user; this.user = user;
this.fetching = false; this.fetching = false;
Progress.done(); Progress.done();
document.title = getUserName(this.user) + ' | %i18n:common.name%';
}); });
}, },

View File

@ -122,7 +122,7 @@ export default Vue.extend({
this.memP = (stats.mem.used / stats.mem.total * 100).toFixed(0); this.memP = (stats.mem.used / stats.mem.total * 100).toFixed(0);
}, },
onStatsLog(statsLog) { onStatsLog(statsLog) {
statsLog.forEach(stats => this.onStats(stats)); statsLog.reverse().forEach(stats => this.onStats(stats));
} }
} }
}); });

View File

@ -4,7 +4,7 @@
<div> <div>
<p>%fa:R hdd%Storage</p> <p>%fa:R hdd%Storage</p>
<p>Total: {{ total | bytes(1) }}</p> <p>Total: {{ total | bytes(1) }}</p>
<p>Available: {{ available | bytes(1) }}</p> <p>Free: {{ available | bytes(1) }}</p>
<p>Used: {{ used | bytes(1) }}</p> <p>Used: {{ used | bytes(1) }}</p>
</div> </div>
</div> </div>

View File

@ -22,6 +22,7 @@ declare const _CODENAME_: string;
declare const _LICENSE_: string; declare const _LICENSE_: string;
declare const _GOOGLE_MAPS_API_KEY_: string; declare const _GOOGLE_MAPS_API_KEY_: string;
declare const _WELCOME_BG_URL_: string; declare const _WELCOME_BG_URL_: string;
declare const _TWITTER_INTEGRATION_: boolean;
export const host = _HOST_; export const host = _HOST_;
export const hostname = _HOSTNAME_; export const hostname = _HOSTNAME_;
@ -47,3 +48,4 @@ export const codename = _CODENAME_;
export const license = _LICENSE_; export const license = _LICENSE_;
export const googleMapsApiKey = _GOOGLE_MAPS_API_KEY_; export const googleMapsApiKey = _GOOGLE_MAPS_API_KEY_;
export const welcomeBgUrl = _WELCOME_BG_URL_; export const welcomeBgUrl = _WELCOME_BG_URL_;
export const twitterIntegration = _TWITTER_INTEGRATION_;

View File

@ -8,7 +8,7 @@ export default (os: OS) => (cb, file = null) => {
const w = os.new(CropWindow, { const w = os.new(CropWindow, {
image: file, image: file,
title: 'アバターとして表示する部分を選択', title: '%i18n:desktop.avatar-crop-title%',
aspectRatio: 1 / 1 aspectRatio: 1 / 1
}); });
@ -18,11 +18,11 @@ export default (os: OS) => (cb, file = null) => {
data.append('file', blob, file.name + '.cropped.png'); data.append('file', blob, file.name + '.cropped.png');
os.api('drive/folders/find', { os.api('drive/folders/find', {
name: 'アイコン' name: '%i18n:desktop.avatar%'
}).then(iconFolder => { }).then(iconFolder => {
if (iconFolder.length === 0) { if (iconFolder.length === 0) {
os.api('drive/folders/create', { os.api('drive/folders/create', {
name: 'アイコン' name: '%i18n:desktop.avatar%'
}).then(iconFolder => { }).then(iconFolder => {
upload(data, iconFolder); upload(data, iconFolder);
}); });
@ -41,7 +41,7 @@ export default (os: OS) => (cb, file = null) => {
const upload = (data, folder) => { const upload = (data, folder) => {
const dialog = os.new(ProgressDialog, { const dialog = os.new(ProgressDialog, {
title: '新しいアバターをアップロードしています' title: '%i18n:desktop.uploading-avatar%'
}); });
document.body.appendChild(dialog.$el); document.body.appendChild(dialog.$el);
@ -76,10 +76,10 @@ export default (os: OS) => (cb, file = null) => {
}); });
os.apis.dialog({ os.apis.dialog({
title: '%fa:info-circle%アバターを更新しました', title: '%fa:info-circle% %i18n:desktop.avatar-updated%',
text: '新しいアバターが反映されるまで時間がかかる場合があります。', text: null,
actions: [{ actions: [{
text: 'わかった' text: '%i18n:common.got-it%'
}] }]
}); });
@ -92,7 +92,7 @@ export default (os: OS) => (cb, file = null) => {
} else { } else {
os.apis.chooseDriveFile({ os.apis.chooseDriveFile({
multiple: false, multiple: false,
title: '%fa:image%アバターにする画像を選択' title: '%fa:image% %i18n:desktop.choose-avatar%'
}).then(file => { }).then(file => {
fileSelected(file); fileSelected(file);
}); });

View File

@ -8,7 +8,7 @@ export default (os: OS) => {
const cropImage = file => new Promise((resolve, reject) => { const cropImage = file => new Promise((resolve, reject) => {
const w = os.new(CropWindow, { const w = os.new(CropWindow, {
image: file, image: file,
title: 'バナーとして表示する部分を選択', title: '%i18n:desktop.banner-crop-title%',
aspectRatio: 16 / 9 aspectRatio: 16 / 9
}); });
@ -18,11 +18,11 @@ export default (os: OS) => {
data.append('file', blob, file.name + '.cropped.png'); data.append('file', blob, file.name + '.cropped.png');
os.api('drive/folders/find', { os.api('drive/folders/find', {
name: 'バナー' name: '%i18n:desktop.banner%'
}).then(bannerFolder => { }).then(bannerFolder => {
if (bannerFolder.length === 0) { if (bannerFolder.length === 0) {
os.api('drive/folders/create', { os.api('drive/folders/create', {
name: 'バナー' name: '%i18n:desktop.banner%'
}).then(iconFolder => { }).then(iconFolder => {
resolve(upload(data, iconFolder)); resolve(upload(data, iconFolder));
}); });
@ -43,7 +43,7 @@ export default (os: OS) => {
const upload = (data, folder) => new Promise((resolve, reject) => { const upload = (data, folder) => new Promise((resolve, reject) => {
const dialog = os.new(ProgressDialog, { const dialog = os.new(ProgressDialog, {
title: '新しいバナーをアップロードしています' title: '%i18n:desktop.uploading-banner%'
}); });
document.body.appendChild(dialog.$el); document.body.appendChild(dialog.$el);
@ -79,10 +79,10 @@ export default (os: OS) => {
}); });
os.apis.dialog({ os.apis.dialog({
title: '%fa:info-circle%バナーを更新しました', title: '%fa:info-circle% %i18n:desktop.banner-updated%',
text: '新しいバナーが反映されるまで時間がかかる場合があります。', text: null,
actions: [{ actions: [{
text: 'わかった' text: '%i18n:common.got-it%'
}] }]
}); });
@ -95,7 +95,7 @@ export default (os: OS) => {
? Promise.resolve(file) ? Promise.resolve(file)
: os.apis.chooseDriveFile({ : os.apis.chooseDriveFile({
multiple: false, multiple: false,
title: '%fa:image%バナーにする画像を選択' title: '%fa:image% %i18n:desktop.choose-banner%'
}); });
return selectedFile return selectedFile

View File

@ -24,6 +24,7 @@ import updateBanner from './api/update-banner';
import MkIndex from './views/pages/index.vue'; import MkIndex from './views/pages/index.vue';
import MkDeck from './views/pages/deck/deck.vue'; import MkDeck from './views/pages/deck/deck.vue';
import MkAdmin from './views/pages/admin/admin.vue';
import MkUser from './views/pages/user/user.vue'; import MkUser from './views/pages/user/user.vue';
import MkFavorites from './views/pages/favorites.vue'; import MkFavorites from './views/pages/favorites.vue';
import MkSelectDrive from './views/pages/selectdrive.vue'; import MkSelectDrive from './views/pages/selectdrive.vue';
@ -55,6 +56,7 @@ init(async (launch) => {
routes: [ routes: [
{ path: '/', name: 'index', component: MkIndex }, { path: '/', name: 'index', component: MkIndex },
{ path: '/deck', name: 'deck', component: MkDeck }, { path: '/deck', name: 'deck', component: MkDeck },
{ path: '/admin', name: 'admin', component: MkAdmin },
{ path: '/i/customize-home', component: MkHomeCustomize }, { path: '/i/customize-home', component: MkHomeCustomize },
{ path: '/i/favorites', component: MkFavorites }, { path: '/i/favorites', component: MkFavorites },
{ path: '/i/messaging/:user', component: MkMessagingRoom }, { path: '/i/messaging/:user', component: MkMessagingRoom },

View File

@ -9,14 +9,20 @@
@contextmenu.prevent.stop="onContextmenu" @contextmenu.prevent.stop="onContextmenu"
:title="title" :title="title"
> >
<div class="label" v-if="$store.state.i.avatarId == file.id"><img src="/assets/label.svg"/> <div class="label" v-if="$store.state.i.avatarId == file.id">
<img src="/assets/label.svg"/>
<p>%i18n:@avatar%</p> <p>%i18n:@avatar%</p>
</div> </div>
<div class="label" v-if="$store.state.i.bannerId == file.id"><img src="/assets/label.svg"/> <div class="label" v-if="$store.state.i.bannerId == file.id">
<img src="/assets/label.svg"/>
<p>%i18n:@banner%</p> <p>%i18n:@banner%</p>
</div> </div>
<div class="label red" v-if="file.isSensitive">
<img src="/assets/label-red.svg"/>
<p>%i18n:@nsfw%</p>
</div>
<div class="thumbnail" ref="thumbnail" :style="`background-color: ${ background }`"> <div class="thumbnail" ref="thumbnail" :style="`background-color: ${ background }`">
<img :src="file.url" alt="" @load="onThumbnailLoaded"/> <img :src="file.thumbnailUrl" alt="" @load="onThumbnailLoaded"/>
</div> </div>
<p class="name"> <p class="name">
<span>{{ file.name.lastIndexOf('.') != -1 ? file.name.substr(0, file.name.lastIndexOf('.')) : file.name }}</span> <span>{{ file.name.lastIndexOf('.') != -1 ? file.name.substr(0, file.name.lastIndexOf('.')) : file.name }}</span>
@ -99,7 +105,7 @@ export default Vue.extend({
text: '%i18n:@contextmenu.set-as-banner%', text: '%i18n:@contextmenu.set-as-banner%',
action: this.setAsBanner action: this.setAsBanner
}] }]
}, { }, /*{
type: 'nest', type: 'nest',
text: '%i18n:@contextmenu.open-in-app%', text: '%i18n:@contextmenu.open-in-app%',
menu: [{ menu: [{
@ -107,11 +113,11 @@ export default Vue.extend({
text: '%i18n:@contextmenu.add-app%...', text: '%i18n:@contextmenu.add-app%...',
action: this.addApp action: this.addApp
}] }]
}], { }*/], {
closed: () => { closed: () => {
this.isContextmenuShowing = false; this.isContextmenuShowing = false;
} }
}); });
}, },
onDragstart(e) { onDragstart(e) {
@ -212,6 +218,11 @@ root(isDark)
&:after &:after
background #0b65a5 background #0b65a5
&.red
&:before
&:after
background #c12113
&:active &:active
background rgba(#000, 0.1) background rgba(#000, 0.1)
@ -220,6 +231,11 @@ root(isDark)
&:after &:after
background #0b588c background #0b588c
&.red
&:before
&:after
background #ce2212
&[data-is-selected] &[data-is-selected]
background $theme-color background $theme-color
@ -256,26 +272,29 @@ root(isDark)
pointer-events none pointer-events none
&:before &:before
content ""
display block
position absolute
z-index 1
top 0
left 57px
width 28px
height 8px
background #0c7ac9
&:after &:after
content "" content ""
display block display block
position absolute position absolute
z-index 1 z-index 1
background #0c7ac9
&:before
top 0
left 57px
width 28px
height 8px
&:after
top 57px top 57px
left 0 left 0
width 8px width 8px
height 28px height 28px
background #0c7ac9
&.red
&:before
&:after
background #c12113
> img > img
position absolute position absolute

View File

@ -67,16 +67,16 @@ export default Vue.extend({
text: '%i18n:@contextmenu.rename%', text: '%i18n:@contextmenu.rename%',
icon: '%fa:i-cursor%', icon: '%fa:i-cursor%',
action: this.rename action: this.rename
}, null, { }/*, null, {
type: 'item', type: 'item',
text: '%i18n:common.delete%', text: '%i18n:common.delete%',
icon: '%fa:R trash-alt%', icon: '%fa:R trash-alt%',
action: this.deleteFolder action: this.deleteFolder
}], { }*/], {
closed: () => { closed: () => {
this.isContextmenuShowing = false; this.isContextmenuShowing = false;
} }
}); });
}, },
onMouseover() { onMouseover() {

View File

@ -567,6 +567,7 @@ export default Vue.extend({
// ファイル一覧取得 // ファイル一覧取得
(this as any).api('drive/files', { (this as any).api('drive/files', {
folderId: this.folder ? this.folder.id : null, folderId: this.folder ? this.folder.id : null,
untilId: this.files[this.files.length - 1].id,
limit: max + 1 limit: max + 1
}).then(files => { }).then(files => {
if (files.length == max + 1) { if (files.length == max + 1) {

View File

@ -37,7 +37,7 @@ export default Vue.extend({
style(): any { style(): any {
return { return {
'background-color': this.image.properties.avgColor && this.image.properties.avgColor.length == 3 ? `rgb(${this.image.properties.avgColor.join(',')})` : 'transparent', 'background-color': this.image.properties.avgColor && this.image.properties.avgColor.length == 3 ? `rgb(${this.image.properties.avgColor.join(',')})` : 'transparent',
'background-image': this.raw ? `url(${this.image.url})` : `url(${this.image.url})` 'background-image': this.raw ? `url(${this.image.url})` : `url(${this.image.thumbnailUrl})`
}; };
} }
}, },

View File

@ -55,15 +55,15 @@
</div> </div>
<footer> <footer>
<mk-reactions-viewer :note="p"/> <mk-reactions-viewer :note="p"/>
<button @click="reply" title=""> <button class="replyButton" @click="reply" title="">
<template v-if="p.reply">%fa:reply-all%</template> <template v-if="p.reply">%fa:reply-all%</template>
<template v-else>%fa:reply%</template> <template v-else>%fa:reply%</template>
<p class="count" v-if="p.repliesCount > 0">{{ p.repliesCount }}</p> <p class="count" v-if="p.repliesCount > 0">{{ p.repliesCount }}</p>
</button> </button>
<button @click="renote" title="%i18n:@renote%"> <button class="renoteButton" @click="renote" title="%i18n:@renote%">
%fa:retweet%<p class="count" v-if="p.renoteCount > 0">{{ p.renoteCount }}</p> %fa:retweet%<p class="count" v-if="p.renoteCount > 0">{{ p.renoteCount }}</p>
</button> </button>
<button :class="{ reacted: p.myReaction != null }" @click="react" ref="reactButton" title="%i18n:@add-reaction%"> <button class="reactionButton" :class="{ reacted: p.myReaction != null }" @click="react" ref="reactButton" title="%i18n:@add-reaction%">
%fa:plus%<p class="count" v-if="p.reactions_count > 0">{{ p.reactions_count }}</p> %fa:plus%<p class="count" v-if="p.reactions_count > 0">{{ p.reactions_count }}</p>
</button> </button>
<button @click="menu" ref="menuButton"> <button @click="menu" ref="menuButton">
@ -79,7 +79,6 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import dateStringify from '../../../common/scripts/date-stringify';
import parse from '../../../../../mfm/parse'; import parse from '../../../../../mfm/parse';
import MkPostFormWindow from './post-form-window.vue'; import MkPostFormWindow from './post-form-window.vue';
@ -129,7 +128,7 @@ export default Vue.extend({
: 0; : 0;
}, },
title(): string { title(): string {
return dateStringify(this.p.createdAt); return new Date(this.p.createdAt).toLocaleString();
}, },
urls(): string[] { urls(): string[] {
if (this.p.text) { if (this.p.text) {
@ -373,15 +372,24 @@ root(isDark)
cursor pointer cursor pointer
&:hover &:hover
color isDark ? #9198af : #666 color isDark ? #a1a8bf : #444
&.replyButton:hover
color #0af
&.renoteButton:hover
color #8d0
&.reactionButton:hover
color #fa0
> .count > .count
display inline display inline
margin 0 0 0 8px margin 0 0 0 8px
color #999 color #999
&.reacted &.reacted, &.reacted:hover
color $theme-color color #fa0
> .replies > .replies
> * > *

View File

@ -12,7 +12,6 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import dateStringify from '../../../common/scripts/date-stringify';
export default Vue.extend({ export default Vue.extend({
props: { props: {
@ -28,7 +27,7 @@ export default Vue.extend({
}, },
computed: { computed: {
title(): string { title(): string {
return dateStringify(this.note.createdAt); return new Date(this.note.createdAt).toLocaleString();
} }
} }
}); });

View File

@ -12,13 +12,12 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import dateStringify from '../../../common/scripts/date-stringify';
export default Vue.extend({ export default Vue.extend({
props: ['note'], props: ['note'],
computed: { computed: {
title(): string { title(): string {
return dateStringify(this.note.createdAt); return new Date(this.note.createdAt).toLocaleString();
} }
} }
}); });

View File

@ -18,7 +18,7 @@
<div class="body"> <div class="body">
<p v-if="p.cw != null" class="cw"> <p v-if="p.cw != null" class="cw">
<span class="text" v-if="p.cw != ''">{{ p.cw }}</span> <span class="text" v-if="p.cw != ''">{{ p.cw }}</span>
<span class="toggle" @click="showContent = !showContent">{{ showContent ? '隠す' : 'もっと見る' }}</span> <span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span>
</p> </p>
<div class="content" v-show="p.cw == null || showContent"> <div class="content" v-show="p.cw == null || showContent">
<div class="text"> <div class="text">
@ -42,15 +42,15 @@
</div> </div>
<footer> <footer>
<mk-reactions-viewer :note="p" ref="reactionsViewer"/> <mk-reactions-viewer :note="p" ref="reactionsViewer"/>
<button @click="reply" title="%i18n:@reply%"> <button class="replyButton" @click="reply" title="%i18n:@reply%">
<template v-if="p.reply">%fa:reply-all%</template> <template v-if="p.reply">%fa:reply-all%</template>
<template v-else>%fa:reply%</template> <template v-else>%fa:reply%</template>
<p class="count" v-if="p.repliesCount > 0">{{ p.repliesCount }}</p> <p class="count" v-if="p.repliesCount > 0">{{ p.repliesCount }}</p>
</button> </button>
<button @click="renote" title="%i18n:@renote%"> <button class="renoteButton" @click="renote" title="%i18n:@renote%">
%fa:retweet%<p class="count" v-if="p.renoteCount > 0">{{ p.renoteCount }}</p> %fa:retweet%<p class="count" v-if="p.renoteCount > 0">{{ p.renoteCount }}</p>
</button> </button>
<button :class="{ reacted: p.myReaction != null }" @click="react" ref="reactButton" title="%i18n:@add-reaction%"> <button class="reactionButton" :class="{ reacted: p.myReaction != null }" @click="react" ref="reactButton" title="%i18n:@add-reaction%">
%fa:plus%<p class="count" v-if="p.reactions_count > 0">{{ p.reactions_count }}</p> %fa:plus%<p class="count" v-if="p.reactions_count > 0">{{ p.reactions_count }}</p>
</button> </button>
<button @click="menu" ref="menuButton"> <button @click="menu" ref="menuButton">
@ -71,7 +71,6 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import dateStringify from '../../../common/scripts/date-stringify';
import parse from '../../../../../mfm/parse'; import parse from '../../../../../mfm/parse';
import MkPostFormWindow from './post-form-window.vue'; import MkPostFormWindow from './post-form-window.vue';
@ -128,7 +127,7 @@ export default Vue.extend({
}, },
title(): string { title(): string {
return dateStringify(this.p.createdAt); return new Date(this.p.createdAt).toLocaleString();
}, },
urls(): string[] { urls(): string[] {
@ -488,20 +487,24 @@ root(isDark)
cursor pointer cursor pointer
&:hover &:hover
color isDark ? #9198af : #666 color isDark ? #a1a8bf : #444
&.replyButton:hover
color #0af
&.renoteButton:hover
color #8d0
&.reactionButton:hover
color #fa0
> .count > .count
display inline display inline
margin 0 0 0 8px margin 0 0 0 8px
color #999 color #999
&.reacted &.reacted, &.reacted:hover
color $theme-color color #fa0
&:last-child
position absolute
right 0
margin 0
> .detail > .detail
padding-top 4px padding-top 4px

View File

@ -33,7 +33,7 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import { url } from '../../../config'; import * as config from '../../../config';
import getNoteSummary from '../../../../../misc/get-note-summary'; import getNoteSummary from '../../../../../misc/get-note-summary';
import XNote from './notes.note.vue'; import XNote from './notes.note.vue';
@ -69,7 +69,7 @@ export default Vue.extend({
const date = new Date(note.createdAt).getDate(); const date = new Date(note.createdAt).getDate();
const month = new Date(note.createdAt).getMonth() + 1; const month = new Date(note.createdAt).getMonth() + 1;
note._date = date; note._date = date;
note._datetext = `${month}${date}`; note._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
return note; return note;
}); });
} }
@ -135,6 +135,12 @@ export default Vue.extend({
return; return;
} }
} }
if (this.$store.state.settings.showLocalRenotes === false) {
if (isPureRenote && (note.renote.user.host == null)) {
return;
}
}
//#endregion //#endregion
// 投稿が自分のものではないかつ、タブが非表示またはスクロール位置が最上部ではないならタイトルで通知 // 投稿が自分のものではないかつ、タブが非表示またはスクロール位置が最上部ではないならタイトルで通知
@ -149,7 +155,7 @@ export default Vue.extend({
// サウンドを再生する // サウンドを再生する
if (this.$store.state.device.enableSounds && !silent) { if (this.$store.state.device.enableSounds && !silent) {
const sound = new Audio(`${url}/assets/post.mp3`); const sound = new Audio(`${config.url}/assets/post.mp3`);
sound.volume = this.$store.state.device.soundVolume; sound.volume = this.$store.state.device.soundVolume;
sound.play(); sound.play();
} }
@ -187,7 +193,7 @@ export default Vue.extend({
clearNotification() { clearNotification() {
this.unreadCount = 0; this.unreadCount = 0;
document.title = '%i18n:common.name%'; document.title = config.name;
}, },
onVisibilitychange() { onVisibilitychange() {

View File

@ -130,7 +130,7 @@ export default Vue.extend({
const date = new Date(notification.createdAt).getDate(); const date = new Date(notification.createdAt).getDate();
const month = new Date(notification.createdAt).getMonth() + 1; const month = new Date(notification.createdAt).getMonth() + 1;
notification._date = date; notification._date = date;
notification._datetext = `${month}${date}`; notification._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
return notification; return notification;
}); });
} }

View File

@ -10,11 +10,11 @@
<span v-for="u in visibleUsers">{{ u | userName }}<a @click="removeVisibleUser(u)">[x]</a></span> <span v-for="u in visibleUsers">{{ u | userName }}<a @click="removeVisibleUser(u)">[x]</a></span>
<a @click="addVisibleUser">%i18n:@add-visible-user%</a> <a @click="addVisibleUser">%i18n:@add-visible-user%</a>
</div> </div>
<div class="hashtags" v-if="recentHashtags.length > 0"> <div class="hashtags" v-if="recentHashtags.length > 0 && $store.state.settings.suggestRecentHashtags">
<b>%i18n:@recent-tags%:</b> <b>%i18n:@recent-tags%:</b>
<a v-for="tag in recentHashtags.slice(0, 5)" @click="addTag(tag)" title="%@click-to-tagging%">#{{ tag }}</a> <a v-for="tag in recentHashtags.slice(0, 5)" @click="addTag(tag)" title="%@click-to-tagging%">#{{ tag }}</a>
</div> </div>
<input v-show="useCw" v-model="cw" placeholder="内容への注釈 (オプション)"> <input v-show="useCw" v-model="cw" placeholder="%i18n:@annotations%">
<textarea :class="{ with: (files.length != 0 || poll) }" <textarea :class="{ with: (files.length != 0 || poll) }"
ref="text" v-model="text" :disabled="posting" ref="text" v-model="text" :disabled="posting"
@keydown="onKeydown" @paste="onPaste" :placeholder="placeholder" @keydown="onKeydown" @paste="onPaste" :placeholder="placeholder"
@ -23,7 +23,7 @@
<div class="medias" :class="{ with: poll }" v-show="files.length != 0"> <div class="medias" :class="{ with: poll }" v-show="files.length != 0">
<x-draggable :list="files" :options="{ animation: 150 }"> <x-draggable :list="files" :options="{ animation: 150 }">
<div v-for="file in files" :key="file.id"> <div v-for="file in files" :key="file.id">
<div class="img" :style="{ backgroundImage: `url(${file.url})` }" :title="file.name"></div> <div class="img" :style="{ backgroundImage: `url(${file.thumbnailUrl})` }" :title="file.name"></div>
<img class="remove" @click="detachMedia(file.id)" src="/assets/desktop/remove.png" title="%i18n:@attach-cancel%" alt=""/> <img class="remove" @click="detachMedia(file.id)" src="/assets/desktop/remove.png" title="%i18n:@attach-cancel%" alt=""/>
</div> </div>
</x-draggable> </x-draggable>
@ -58,7 +58,7 @@
import Vue from 'vue'; import Vue from 'vue';
import insertTextAtCursor from 'insert-text-at-cursor'; import insertTextAtCursor from 'insert-text-at-cursor';
import * as XDraggable from 'vuedraggable'; import * as XDraggable from 'vuedraggable';
import getKao from '../../../common/scripts/get-kao'; import getFace from '../../../common/scripts/get-face';
import MkVisibilityChooser from '../../../common/views/components/visibility-chooser.vue'; import MkVisibilityChooser from '../../../common/views/components/visibility-chooser.vue';
import parse from '../../../../../mfm/parse'; import parse from '../../../../../mfm/parse';
import { host } from '../../../config'; import { host } from '../../../config';
@ -99,7 +99,7 @@ export default Vue.extend({
useCw: false, useCw: false,
cw: null, cw: null,
geo: null, geo: null,
visibility: 'public', visibility: this.$store.state.device.visibility || 'public',
visibleUsers: [], visibleUsers: [],
autocomplete: null, autocomplete: null,
draghover: false, draghover: false,
@ -326,8 +326,7 @@ export default Vue.extend({
setVisibility() { setVisibility() {
const w = (this as any).os.new(MkVisibilityChooser, { const w = (this as any).os.new(MkVisibilityChooser, {
source: this.$refs.visibilityButton, source: this.$refs.visibilityButton
v: this.visibility
}); });
w.$once('chosen', v => { w.$once('chosen', v => {
this.visibility = v; this.visibility = v;
@ -422,7 +421,7 @@ export default Vue.extend({
}, },
kao() { kao() {
this.text += getKao(); this.text += getFace();
} }
} }
}); });

View File

@ -48,13 +48,16 @@
<mk-switch v-model="$store.state.settings.iLikeSushi" @change="onChangeILikeSushi" text="%i18n:common.i-like-sushi%"/> <mk-switch v-model="$store.state.settings.iLikeSushi" @change="onChangeILikeSushi" text="%i18n:common.i-like-sushi%"/>
</div> </div>
<mk-switch v-model="$store.state.settings.showPostFormOnTopOfTl" @change="onChangeShowPostFormOnTopOfTl" text="%i18n:@post-form-on-timeline%"/> <mk-switch v-model="$store.state.settings.showPostFormOnTopOfTl" @change="onChangeShowPostFormOnTopOfTl" text="%i18n:@post-form-on-timeline%"/>
<mk-switch v-model="$store.state.settings.suggestRecentHashtags" @change="onChangeSuggestRecentHashtags" text="%i18n:@suggest-recent-hashtags%"/>
<mk-switch v-model="$store.state.settings.showReplyTarget" @change="onChangeShowReplyTarget" text="%i18n:@show-reply-target%"/> <mk-switch v-model="$store.state.settings.showReplyTarget" @change="onChangeShowReplyTarget" text="%i18n:@show-reply-target%"/>
<mk-switch v-model="$store.state.settings.showMyRenotes" @change="onChangeShowMyRenotes" text="%i18n:@show-my-renotes%"/> <mk-switch v-model="$store.state.settings.showMyRenotes" @change="onChangeShowMyRenotes" text="%i18n:@show-my-renotes%"/>
<mk-switch v-model="$store.state.settings.showRenotedMyNotes" @change="onChangeShowRenotedMyNotes" text="%i18n:@show-renoted-my-notes%"/> <mk-switch v-model="$store.state.settings.showRenotedMyNotes" @change="onChangeShowRenotedMyNotes" text="%i18n:@show-renoted-my-notes%"/>
<mk-switch v-model="$store.state.settings.showLocalRenotes" @change="onChangeShowLocalRenotes" text="%i18n:@show-local-renotes%"/>
<mk-switch v-model="$store.state.settings.showMaps" @change="onChangeShowMaps" text="%i18n:@show-maps%"> <mk-switch v-model="$store.state.settings.showMaps" @change="onChangeShowMaps" text="%i18n:@show-maps%">
<span>%i18n:@show-maps-desc%</span> <span>%i18n:@show-maps-desc%</span>
</mk-switch> </mk-switch>
<mk-switch v-model="$store.state.settings.reversiBoardLabels" @change="onChangeReversiBoardLabels" text="%i18n:common.show-reversi-board-labels%"/> <mk-switch v-model="$store.state.settings.reversiBoardLabels" @change="onChangeReversiBoardLabels" text="%i18n:common.show-reversi-board-labels%"/>
<mk-switch v-model="$store.state.settings.disableAnimatedMfm" @change="onChangeDisableAnimatedMfm" text="%i18n:common.disable-animated-mfm%"/>
</section> </section>
<section class="web" v-show="page == 'web'"> <section class="web" v-show="page == 'web'">
@ -334,6 +337,12 @@ export default Vue.extend({
value: v value: v
}); });
}, },
onChangeSuggestRecentHashtags(v) {
this.$store.dispatch('settings/set', {
key: 'suggestRecentHashtags',
value: v
});
},
onChangeShowReplyTarget(v) { onChangeShowReplyTarget(v) {
this.$store.dispatch('settings/set', { this.$store.dispatch('settings/set', {
key: 'showReplyTarget', key: 'showReplyTarget',
@ -352,6 +361,12 @@ export default Vue.extend({
value: v value: v
}); });
}, },
onChangeShowLocalRenotes(v) {
this.$store.dispatch('settings/set', {
key: 'showLocalRenotes',
value: v
});
},
onChangeShowMaps(v) { onChangeShowMaps(v) {
this.$store.dispatch('settings/set', { this.$store.dispatch('settings/set', {
key: 'showMaps', key: 'showMaps',
@ -376,6 +391,12 @@ export default Vue.extend({
value: v value: v
}); });
}, },
onChangeDisableAnimatedMfm(v) {
this.$store.dispatch('settings/set', {
key: 'disableAnimatedMfm',
value: v
});
},
onChangeGradientWindowHeader(v) { onChangeGradientWindowHeader(v) {
this.$store.dispatch('settings/set', { this.$store.dispatch('settings/set', {
key: 'gradientWindowHeader', key: 'gradientWindowHeader',

View File

@ -100,7 +100,8 @@ export default Vue.extend({
limit: fetchLimit + 1, limit: fetchLimit + 1,
untilDate: this.date ? this.date.getTime() : undefined, untilDate: this.date ? this.date.getTime() : undefined,
includeMyRenotes: this.$store.state.settings.showMyRenotes, includeMyRenotes: this.$store.state.settings.showMyRenotes,
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
}).then(notes => { }).then(notes => {
if (notes.length == fetchLimit + 1) { if (notes.length == fetchLimit + 1) {
notes.pop(); notes.pop();
@ -122,7 +123,8 @@ export default Vue.extend({
limit: fetchLimit + 1, limit: fetchLimit + 1,
untilId: (this.$refs.timeline as any).tail().id, untilId: (this.$refs.timeline as any).tail().id,
includeMyRenotes: this.$store.state.settings.showMyRenotes, includeMyRenotes: this.$store.state.settings.showMyRenotes,
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
}); });
promise.then(notes => { promise.then(notes => {

View File

@ -4,7 +4,7 @@
<div class="main" ref="main"> <div class="main" ref="main">
<div class="backdrop"></div> <div class="backdrop"></div>
<div class="main"> <div class="main">
<p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>さん</p> <p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>%i18n:@adjective%</p>
<div class="container" ref="mainContainer"> <div class="container" ref="mainContainer">
<div class="left"> <div class="left">
<x-nav/> <x-nav/>
@ -155,10 +155,15 @@ root(isDark)
max-width 1300px max-width 1300px
margin 0 auto margin 0 auto
> *
position absolute
height 48px
> .center > .center
margin auto right 0
> .icon > .icon
margin auto
display block display block
width 48px width 48px
height 48px height 48px
@ -169,11 +174,12 @@ root(isDark)
opacity 0.3 opacity 0.3
cursor pointer cursor pointer
> .left > .left,
height 48px > .center
left 0
> .right > .right
height 48px right 0
> * > *
display inline-block display inline-block

View File

@ -47,7 +47,8 @@ export default Vue.extend({
listId: this.list.id, listId: this.list.id,
limit: fetchLimit + 1, limit: fetchLimit + 1,
includeMyRenotes: this.$store.state.settings.showMyRenotes, includeMyRenotes: this.$store.state.settings.showMyRenotes,
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
}).then(notes => { }).then(notes => {
if (notes.length == fetchLimit + 1) { if (notes.length == fetchLimit + 1) {
notes.pop(); notes.pop();
@ -67,7 +68,8 @@ export default Vue.extend({
limit: fetchLimit + 1, limit: fetchLimit + 1,
untilId: (this.$refs.timeline as any).tail().id, untilId: (this.$refs.timeline as any).tail().id,
includeMyRenotes: this.$store.state.settings.showMyRenotes, includeMyRenotes: this.$store.state.settings.showMyRenotes,
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
}); });
promise.then(notes => { promise.then(notes => {

View File

@ -27,7 +27,7 @@ export default Vue.extend({
methods: { methods: {
add() { add() {
(this as any).apis.input({ (this as any).apis.input({
title: 'リスト名', title: '%i18n:@list-name%',
}).then(async title => { }).then(async title => {
const list = await (this as any).api('users/lists/create', { const list = await (this as any).api('users/lists/create', {
title title

View File

@ -10,13 +10,13 @@
<div class="description">{{ u.description }}</div> <div class="description">{{ u.description }}</div>
<div class="status"> <div class="status">
<div> <div>
<p>%i18n:@notes%</p><a>{{ u.notesCount }}</a> <p>%i18n:@notes%</p><span>{{ u.notesCount }}</span>
</div> </div>
<div> <div>
<p>%i18n:@following%</p><a>{{ u.followingCount }}</a> <p>%i18n:@following%</p><span>{{ u.followingCount }}</span>
</div> </div>
<div> <div>
<p>%i18n:@followers%</p><a>{{ u.followersCount }}</a> <p>%i18n:@followers%</p><span>{{ u.followersCount }}</span>
</div> </div>
</div> </div>
<mk-follow-button v-if="$store.getters.isSignedIn && u.id != $store.state.i.id" :user="u"/> <mk-follow-button v-if="$store.getters.isSignedIn && u.id != $store.state.i.id" :user="u"/>
@ -149,7 +149,7 @@ root(isDark)
font-size 0.7em font-size 0.7em
color #aaa color #aaa
> a > span
font-size 1em font-size 1em
color $theme-color color $theme-color

View File

@ -0,0 +1,144 @@
<template>
<div class="zyknedwtlthezamcjlolyusmipqmjgxz">
<svg :viewBox="`0 0 ${ viewBoxX } ${ viewBoxY }`">
<defs>
<linearGradient :id="cpuGradientId" x1="0" x2="0" y1="1" y2="0">
<stop offset="0%" stop-color="hsl(180, 80%, 70%)"></stop>
<stop offset="100%" stop-color="hsl(0, 80%, 70%)"></stop>
</linearGradient>
<mask :id="cpuMaskId" x="0" y="0" :width="viewBoxX" :height="viewBoxY">
<polygon
:points="cpuPolygonPoints"
fill="#fff"
fill-opacity="0.5"/>
<polyline
:points="cpuPolylinePoints"
fill="none"
stroke="#fff"
stroke-width="1"/>
</mask>
</defs>
<rect
x="0" y="0"
:width="viewBoxX" :height="viewBoxY"
:style="`stroke: none; fill: url(#${ cpuGradientId }); mask: url(#${ cpuMaskId })`"/>
<text x="1" y="12">CPU <tspan>{{ cpuP }}%</tspan></text>
</svg>
<svg :viewBox="`0 0 ${ viewBoxX } ${ viewBoxY }`">
<defs>
<linearGradient :id="memGradientId" x1="0" x2="0" y1="1" y2="0">
<stop offset="0%" stop-color="hsl(180, 80%, 70%)"></stop>
<stop offset="100%" stop-color="hsl(0, 80%, 70%)"></stop>
</linearGradient>
<mask :id="memMaskId" x="0" y="0" :width="viewBoxX" :height="viewBoxY">
<polygon
:points="memPolygonPoints"
fill="#fff"
fill-opacity="0.5"/>
<polyline
:points="memPolylinePoints"
fill="none"
stroke="#fff"
stroke-width="1"/>
</mask>
</defs>
<rect
x="0" y="0"
:width="viewBoxX" :height="viewBoxY"
:style="`stroke: none; fill: url(#${ memGradientId }); mask: url(#${ memMaskId })`"/>
<text x="1" y="12">MEM <tspan>{{ memP }}%</tspan></text>
</svg>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import * as uuid from 'uuid';
export default Vue.extend({
props: ['connection'],
data() {
return {
viewBoxX: 200,
viewBoxY: 70,
stats: [],
cpuGradientId: uuid(),
cpuMaskId: uuid(),
memGradientId: uuid(),
memMaskId: uuid(),
cpuPolylinePoints: '',
memPolylinePoints: '',
cpuPolygonPoints: '',
memPolygonPoints: '',
cpuP: '',
memP: ''
};
},
mounted() {
this.connection.on('stats', this.onStats);
this.connection.on('statsLog', this.onStatsLog);
this.connection.send({
type: 'requestLog',
id: Math.random().toString(),
length: 200
});
},
beforeDestroy() {
this.connection.off('stats', this.onStats);
this.connection.off('statsLog', this.onStatsLog);
},
methods: {
onStats(stats) {
this.stats.push(stats);
if (this.stats.length > 200) this.stats.shift();
const cpuPolylinePoints = this.stats.map((s, i) => [this.viewBoxX - ((this.stats.length - 1) - i), (1 - s.cpu_usage) * this.viewBoxY]);
const memPolylinePoints = this.stats.map((s, i) => [this.viewBoxX - ((this.stats.length - 1) - i), (1 - (s.mem.used / s.mem.total)) * this.viewBoxY]);
this.cpuPolylinePoints = cpuPolylinePoints.map(xy => `${xy[0]},${xy[1]}`).join(' ');
this.memPolylinePoints = memPolylinePoints.map(xy => `${xy[0]},${xy[1]}`).join(' ');
this.cpuPolygonPoints = `${this.viewBoxX - (this.stats.length - 1)},${this.viewBoxY} ${this.cpuPolylinePoints} ${this.viewBoxX},${this.viewBoxY}`;
this.memPolygonPoints = `${this.viewBoxX - (this.stats.length - 1)},${this.viewBoxY} ${this.memPolylinePoints} ${this.viewBoxX},${this.viewBoxY}`;
this.cpuP = (stats.cpu_usage * 100).toFixed(0);
this.memP = (stats.mem.used / stats.mem.total * 100).toFixed(0);
},
onStatsLog(statsLog) {
statsLog.reverse().forEach(stats => this.onStats(stats));
}
}
});
</script>
<style lang="stylus" scoped>
root(isDark)
> svg
display block
width 50%
float left
&:first-child
padding-right 5px
&:last-child
padding-left 5px
> text
font-size 10px
fill isDark ? rgba(#fff, 0.55) : rgba(#000, 0.55)
> tspan
opacity 0.5
&:after
content ""
display block
clear both
.zyknedwtlthezamcjlolyusmipqmjgxz[data-darkmode]
root(true)
.zyknedwtlthezamcjlolyusmipqmjgxz:not([data-darkmode])
root(false)
</style>

View File

@ -0,0 +1,86 @@
<template>
<div class="obdskegsannmntldydackcpzezagxqfy card">
<header>%i18n:@dashboard%</header>
<div v-if="stats" class="stats">
<div><b>%fa:user% {{ stats.originalUsersCount | number }}</b><span>%i18n:@original-users%</span></div>
<div><span>%fa:user% {{ stats.usersCount | number }}</span><span>%i18n:@all-users%</span></div>
<div><b>%fa:pen% {{ stats.originalNotesCount | number }}</b><span>%i18n:@original-notes%</span></div>
<div><span>%fa:pen% {{ stats.notesCount | number }}</span><span>%i18n:@all-notes%</span></div>
</div>
<div class="cpu-memory">
<x-cpu-memory :connection="connection"/>
</div>
<div>
<button class="ui" @click="invite">%i18n:@invite%</button>
<p v-if="inviteCode">Code: <code>{{ inviteCode }}</code></p>
</div>
</div>
</template>
<script lang="ts">
import Vue from "vue";
import XCpuMemory from "./admin.cpu-memory.vue";
export default Vue.extend({
components: {
XCpuMemory
},
data() {
return {
stats: null,
inviteCode: null,
connection: null,
connectionId: null
};
},
created() {
this.connection = (this as any).os.streams.serverStatsStream.getConnection();
this.connectionId = (this as any).os.streams.serverStatsStream.use();
(this as any).api('stats').then(stats => {
this.stats = stats;
});
},
beforeDestroy() {
(this as any).os.streams.serverStatsStream.dispose(this.connectionId);
},
methods: {
invite() {
(this as any).api('admin/invite').then(x => {
this.inviteCode = x.code;
});
}
}
});
</script>
<style lang="stylus" scoped>
@import '~const.styl'
.obdskegsannmntldydackcpzezagxqfy
> .stats
display flex
justify-content center
margin-bottom 16px
padding 16px
border solid 1px #eee
border-radius 8px
> div
flex 1
text-align center
> *:first-child
display block
color $theme-color
> *:last-child
font-size 70%
> .cpu-memory
margin-bottom 16px
padding 16px
border solid 1px #eee
border-radius: 8px
</style>

View File

@ -0,0 +1,51 @@
<template>
<svg :viewBox="`0 0 ${ viewBoxX } ${ viewBoxY }`">
<polyline
:points="points"
fill="none"
stroke-width="1"
stroke="#555"/>
</svg>
</template>
<script lang="ts">
import Vue from 'vue';
export default Vue.extend({
props: {
chart: {
required: true
},
type: {
type: String,
required: true
}
},
data() {
return {
viewBoxX: 365,
viewBoxY: 70,
points: null
};
},
created() {
const peak = Math.max.apply(null, this.chart.map(d => this.type == 'local' ? d.drive.local.totalSize : d.drive.remote.totalSize));
if (peak != 0) {
const data = this.chart.slice().reverse().map(x => ({
size: this.type == 'local' ? x.drive.local.totalSize : x.drive.remote.totalSize
}));
this.points = data.map((d, i) => `${i},${(1 - (d.size / peak)) * this.viewBoxY}`).join(' ');
}
}
});
</script>
<style lang="stylus" scoped>
svg
display block
padding 10px
width 100%
</style>

View File

@ -0,0 +1,34 @@
<template>
<div class="card">
<header>%i18n:@title%</header>
<div class="card">
<header>%i18n:@local%</header>
<x-chart v-if="chart" :chart="chart" type="local"/>
</div>
<div class="card">
<header>%i18n:@remote%</header>
<x-chart v-if="chart" :chart="chart" type="remote"/>
</div>
</div>
</template>
<script lang="ts">
import Vue from "vue";
import XChart from "./admin.drive-chart.chart.vue";
export default Vue.extend({
components: {
XChart
},
props: {
chart: {
required: true
}
}
});
</script>
<style lang="stylus" scoped>
@import '~const.styl'
</style>

View File

@ -0,0 +1,76 @@
<template>
<svg :viewBox="`0 0 ${ viewBoxX } ${ viewBoxY }`">
<polyline
:points="pointsNote"
fill="none"
stroke-width="1"
stroke="#41ddde"/>
<polyline
:points="pointsReply"
fill="none"
stroke-width="1"
stroke="#f7796c"/>
<polyline
:points="pointsRenote"
fill="none"
stroke-width="1"
stroke="#a1de41"/>
<polyline
:points="pointsTotal"
fill="none"
stroke-width="1"
stroke="#555"
stroke-dasharray="2 2"/>
</svg>
</template>
<script lang="ts">
import Vue from 'vue';
export default Vue.extend({
props: {
chart: {
required: true
},
type: {
type: String,
required: true
}
},
data() {
return {
viewBoxX: 365,
viewBoxY: 70,
pointsNote: null,
pointsReply: null,
pointsRenote: null,
pointsTotal: null
};
},
created() {
const peak = Math.max.apply(null, this.chart.map(d => this.type == 'local' ? d.notes.local.diff : d.notes.remote.diff));
if (peak != 0) {
const data = this.chart.slice().reverse().map(x => ({
normal: this.type == 'local' ? x.notes.local.diffs.normal : x.notes.remote.diffs.normal,
reply: this.type == 'local' ? x.notes.local.diffs.reply : x.notes.remote.diffs.reply,
renote: this.type == 'local' ? x.notes.local.diffs.renote : x.notes.remote.diffs.renote,
total: this.type == 'local' ? x.notes.local.diff : x.notes.remote.diff
}));
this.pointsNote = data.map((d, i) => `${i},${(1 - (d.normal / peak)) * this.viewBoxY}`).join(' ');
this.pointsReply = data.map((d, i) => `${i},${(1 - (d.reply / peak)) * this.viewBoxY}`).join(' ');
this.pointsRenote = data.map((d, i) => `${i},${(1 - (d.renote / peak)) * this.viewBoxY}`).join(' ');
this.pointsTotal = data.map((d, i) => `${i},${(1 - (d.total / peak)) * this.viewBoxY}`).join(' ');
}
}
});
</script>
<style lang="stylus" scoped>
svg
display block
padding 10px
width 100%
</style>

View File

@ -0,0 +1,34 @@
<template>
<div class="card">
<header>%i18n:@title%</header>
<div class="card">
<header>%i18n:@local%</header>
<x-chart v-if="chart" :chart="chart" type="local"/>
</div>
<div class="card">
<header>%i18n:@remote%</header>
<x-chart v-if="chart" :chart="chart" type="remote"/>
</div>
</div>
</template>
<script lang="ts">
import Vue from "vue";
import XChart from "./admin.notes-chart.chart.vue";
export default Vue.extend({
components: {
XChart
},
props: {
chart: {
required: true
}
}
});
</script>
<style lang="stylus" scoped>
@import '~const.styl'
</style>

View File

@ -0,0 +1,51 @@
<template>
<div class="card">
<header>%i18n:@suspend-user%</header>
<input v-model="username" type="text" class="ui"/>
<button class="ui" @click="suspendUser" :disabled="suspending">%i18n:@suspend%</button>
</div>
</template>
<script lang="ts">
import Vue from "vue";
import parseAcct from "../../../../../../misc/acct/parse";
export default Vue.extend({
data() {
return {
username: null,
suspending: false
};
},
methods: {
async suspendUser() {
this.suspending = true;
const user = await (this as any).os.api(
"users/show",
parseAcct(this.username)
);
await (this as any).os.api("admin/suspend-user", {
userId: user.id
});
this.suspending = false;
(this as any).os.apis.dialog({ text: "%i18n:@suspended%" });
}
}
});
</script>
<style lang="stylus" scoped>
@import '~const.styl'
header
margin 10px 0
button
margin 16px 0
</style>

View File

@ -0,0 +1,51 @@
<template>
<div class="card">
<header>%i18n:@unsuspend-user%</header>
<input v-model="username" type="text" class="ui"/>
<button class="ui" @click="unsuspendUser" :disabled="unsuspending">%i18n:@unsuspend%</button>
</div>
</template>
<script lang="ts">
import Vue from "vue";
import parseAcct from "../../../../../../misc/acct/parse";
export default Vue.extend({
data() {
return {
username: null,
unsuspending: false
};
},
methods: {
async unsuspendUser() {
this.unsuspending = true;
const user = await (this as any).os.api(
"users/show",
parseAcct(this.username)
);
await (this as any).os.api("admin/unsuspend-user", {
userId: user.id
});
this.unsuspending = false;
(this as any).os.apis.dialog({ text: "%i18n:@unsuspended%" });
}
}
});
</script>
<style lang="stylus" scoped>
@import '~const.styl'
header
margin 10px 0
button
margin 16px 0
</style>

View File

@ -0,0 +1,51 @@
<template>
<div class="card">
<header>%i18n:@unverify-user%</header>
<input v-model="username" type="text" class="ui"/>
<button class="ui" @click="unverifyUser" :disabled="unverifying">%i18n:@unverify%</button>
</div>
</template>
<script lang="ts">
import Vue from "vue";
import parseAcct from "../../../../../../misc/acct/parse";
export default Vue.extend({
data() {
return {
username: null,
unverifying: false
};
},
methods: {
async unverifyUser() {
this.unverifying = true;
const user = await (this as any).os.api(
"users/show",
parseAcct(this.username)
);
await (this as any).os.api("admin/unverify-user", {
userId: user.id
});
this.unverifying = false;
(this as any).os.apis.dialog({ text: "%i18n:@unverified%" });
}
}
});
</script>
<style lang="stylus" scoped>
@import '~const.styl'
header
margin 10px 0
button
margin 16px 0
</style>

View File

@ -0,0 +1,51 @@
<template>
<svg :viewBox="`0 0 ${ viewBoxX } ${ viewBoxY }`">
<polyline
:points="points"
fill="none"
stroke-width="1"
stroke="#555"/>
</svg>
</template>
<script lang="ts">
import Vue from 'vue';
export default Vue.extend({
props: {
chart: {
required: true
},
type: {
type: String,
required: true
}
},
data() {
return {
viewBoxX: 365,
viewBoxY: 70,
points: null
};
},
created() {
const peak = Math.max.apply(null, this.chart.map(d => this.type == 'local' ? d.users.local.diff : d.users.remote.diff));
if (peak != 0) {
const data = this.chart.slice().reverse().map(x => ({
count: this.type == 'local' ? x.users.local.diff : x.users.remote.diff
}));
this.points = data.map((d, i) => `${i},${(1 - (d.count / peak)) * this.viewBoxY}`).join(' ');
}
}
});
</script>
<style lang="stylus" scoped>
svg
display block
padding 10px
width 100%
</style>

View File

@ -0,0 +1,34 @@
<template>
<div class="card">
<header>%i18n:@title%</header>
<div class="card">
<header>%i18n:@local%</header>
<x-chart v-if="chart" :chart="chart" type="local"/>
</div>
<div class="card">
<header>%i18n:@remote%</header>
<x-chart v-if="chart" :chart="chart" type="remote"/>
</div>
</div>
</template>
<script lang="ts">
import Vue from "vue";
import XChart from "./admin.users-chart.chart.vue";
export default Vue.extend({
components: {
XChart
},
props: {
chart: {
required: true
}
}
});
</script>
<style lang="stylus" scoped>
@import '~const.styl'
</style>

View File

@ -0,0 +1,51 @@
<template>
<div class="card">
<header>%i18n:@verify-user%</header>
<input v-model="username" type="text" class="ui"/>
<button class="ui" @click="verifyUser" :disabled="verifying">%i18n:@verify%</button>
</div>
</template>
<script lang="ts">
import Vue from "vue";
import parseAcct from "../../../../../../misc/acct/parse";
export default Vue.extend({
data() {
return {
username: null,
verifying: false
};
},
methods: {
async verifyUser() {
this.verifying = true;
const user = await (this as any).os.api(
"users/show",
parseAcct(this.username)
);
await (this as any).os.api("admin/verify-user", {
userId: user.id
});
this.verifying = false;
(this as any).os.apis.dialog({ text: "%i18n:@verified%" });
}
}
});
</script>
<style lang="stylus" scoped>
@import '~const.styl'
header
margin 10px 0
button
margin 16px 0
</style>

View File

@ -0,0 +1,133 @@
<template>
<div class="mk-admin">
<nav>
<ul>
<li @click="nav('dashboard')" :class="{ active: page == 'dashboard' }">%fa:chalkboard .fw%%i18n:@dashboard%</li>
<li @click="nav('users')" :class="{ active: page == 'users' }">%fa:users .fw%%i18n:@users%</li>
<!-- <li @click="nav('drive')" :class="{ active: page == 'drive' }">%fa:cloud .fw%%i18n:@drive%</li> -->
<!-- <li @click="nav('update')" :class="{ active: page == 'update' }">%i18n:@update%</li> -->
</ul>
</nav>
<main>
<div v-show="page == 'dashboard'">
<x-dashboard/>
<x-users-chart :chart="chart"/>
<x-notes-chart :chart="chart"/>
<x-drive-chart :chart="chart"/>
</div>
<div v-if="page == 'users'">
<x-suspend-user/>
<x-unsuspend-user/>
<x-verify-user/>
<x-unverify-user/>
</div>
<div v-if="page == 'drive'"></div>
<div v-if="page == 'update'"></div>
</main>
</div>
</template>
<script lang="ts">
import Vue from "vue";
import XDashboard from "./admin.dashboard.vue";
import XSuspendUser from "./admin.suspend-user.vue";
import XUnsuspendUser from "./admin.unsuspend-user.vue";
import XVerifyUser from "./admin.verify-user.vue";
import XUnverifyUser from "./admin.unverify-user.vue";
import XUsersChart from "./admin.users-chart.vue";
import XNotesChart from "./admin.notes-chart.vue";
import XDriveChart from "./admin.drive-chart.vue";
export default Vue.extend({
components: {
XDashboard,
XSuspendUser,
XUnsuspendUser,
XVerifyUser,
XUnverifyUser,
XUsersChart,
XNotesChart,
XDriveChart
},
data() {
return {
page: 'dashboard',
chart: null
};
},
created() {
(this as any).api('admin/chart').then(chart => {
this.chart = chart;
});
},
methods: {
nav(page: string) {
this.page = page;
}
}
});
</script>
<style lang="stylus">
@import '~const.styl'
.mk-admin
display flex
height 100%
margin 32px
> nav
flex 0 0 250px
width 100%
height 100%
padding 16px 0 0 0
overflow auto
border-right solid 1px #ddd
> ul
list-style none
> li
display block
padding 10px 16px
margin 0
color #666
cursor pointer
user-select none
transition margin-left 0.2s ease
> [data-fa]
margin-right 4px
&:hover
color #555
&.active
margin-left 8px
color $theme-color !important
> main
width 100%
padding 16px 32px
> div
> div
max-width 800px
.card
padding 32px
background #fff
box-shadow 0 2px 8px rgba(#000, 0.1)
&:not(:last-child)
margin-bottom 16px
> header
margin 0 0 1em 0
padding 0 0 8px 0
font-size 1em
color #555
border-bottom solid 1px #eee
</style>

View File

@ -70,7 +70,8 @@ export default Vue.extend({
limit: fetchLimit + 1, limit: fetchLimit + 1,
mediaOnly: this.mediaOnly, mediaOnly: this.mediaOnly,
includeMyRenotes: this.$store.state.settings.showMyRenotes, includeMyRenotes: this.$store.state.settings.showMyRenotes,
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
}).then(notes => { }).then(notes => {
if (notes.length == fetchLimit + 1) { if (notes.length == fetchLimit + 1) {
notes.pop(); notes.pop();
@ -91,7 +92,8 @@ export default Vue.extend({
untilId: (this.$refs.timeline as any).tail().id, untilId: (this.$refs.timeline as any).tail().id,
mediaOnly: this.mediaOnly, mediaOnly: this.mediaOnly,
includeMyRenotes: this.$store.state.settings.showMyRenotes, includeMyRenotes: this.$store.state.settings.showMyRenotes,
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
}); });
promise.then(notes => { promise.then(notes => {

View File

@ -72,7 +72,7 @@ export default Vue.extend({
const date = new Date(note.createdAt).getDate(); const date = new Date(note.createdAt).getDate();
const month = new Date(note.createdAt).getMonth() + 1; const month = new Date(note.createdAt).getMonth() + 1;
note._date = date; note._date = date;
note._datetext = `${month}${date}`; note._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
return note; return note;
}); });
} }
@ -140,6 +140,12 @@ export default Vue.extend({
return; return;
} }
} }
if (this.$store.state.settings.showLocalRenotes === false) {
if (isPureRenote && (note.renote.user.host == null)) {
return;
}
}
//#endregion //#endregion
if (this.isScrollTop()) { if (this.isScrollTop()) {

View File

@ -51,7 +51,7 @@ export default Vue.extend({
const date = new Date(notification.createdAt).getDate(); const date = new Date(notification.createdAt).getDate();
const month = new Date(notification.createdAt).getMonth() + 1; const month = new Date(notification.createdAt).getMonth() + 1;
notification._date = date; notification._date = date;
notification._datetext = `${month}${date}`; notification._datetext = '%i18n:common.month-and-day%'.replace('{month}', month.toString()).replace('{day}', date.toString());
return notification; return notification;
}); });
} }

View File

@ -98,7 +98,8 @@ export default Vue.extend({
limit: fetchLimit + 1, limit: fetchLimit + 1,
mediaOnly: this.mediaOnly, mediaOnly: this.mediaOnly,
includeMyRenotes: this.$store.state.settings.showMyRenotes, includeMyRenotes: this.$store.state.settings.showMyRenotes,
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
}).then(notes => { }).then(notes => {
if (notes.length == fetchLimit + 1) { if (notes.length == fetchLimit + 1) {
notes.pop(); notes.pop();
@ -119,7 +120,8 @@ export default Vue.extend({
mediaOnly: this.mediaOnly, mediaOnly: this.mediaOnly,
untilId: (this.$refs.timeline as any).tail().id, untilId: (this.$refs.timeline as any).tail().id,
includeMyRenotes: this.$store.state.settings.showMyRenotes, includeMyRenotes: this.$store.state.settings.showMyRenotes,
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
}); });
promise.then(notes => { promise.then(notes => {

View File

@ -1,6 +1,6 @@
<template> <template>
<component :is="ui ? 'mk-ui' : 'div'"> <component :is="ui ? 'mk-ui' : 'div'">
<mk-reversi :game-id="$route.params.game" @nav="nav"/> <mk-reversi :game-id="$route.params.game" @nav="nav" :self-nav="false"/>
</component> </component>
</template> </template>
@ -14,9 +14,14 @@ export default Vue.extend({
} }
}, },
methods: { methods: {
nav(game) { nav(game, actualNav) {
history.pushState(null, null, '/reversi/' + game.id); if (actualNav) {
}, this.$router.push('/reversi/' + game.id);
} else {
// TODO: https://github.com/vuejs/vue-router/issues/703
this.$router.push('/reversi/' + game.id);
}
}
} }
}); });
</script> </script>

View File

@ -4,9 +4,11 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import * as config from '../../../config';
export default Vue.extend({ export default Vue.extend({
mounted() { mounted() {
document.title = '%i18n:common.name% - %i18n:@title%'; document.title = `${config.name} - %i18n:@title%`;
} }
}); });
</script> </script>

View File

@ -7,6 +7,7 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import Progress from '../../../common/scripts/loading'; import Progress from '../../../common/scripts/loading';
import * as config from '../../../config';
export default Vue.extend({ export default Vue.extend({
props: { props: {
@ -16,7 +17,7 @@ export default Vue.extend({
} }
}, },
mounted() { mounted() {
document.title = '%i18n:common.name%'; document.title = config.name;
Progress.start(); Progress.start();
}, },

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="pptjhabgjtt7kwskbfv4y3uml6fpuhmr"> <div class="pptjhabgjtt7kwskbfv4y3uml6fpuhmr">
<h1>{{'%i18n:@share-with%'.split("{}")[0] + '%i18n:common.name%' + '%i18n:@share-with%'.split("{}")[1]}}</h1> <h1>{{ '%i18n:@share-with%'.replace('{}', name) }}</h1>
<div> <div>
<mk-signin v-if="!$store.getters.isSignedIn"/> <mk-signin v-if="!$store.getters.isSignedIn"/>
<mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/> <mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/>
@ -12,10 +12,12 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import * as config from '../../../config';
export default Vue.extend({ export default Vue.extend({
data() { data() {
return { return {
name: config.name,
posted: false, posted: false,
text: new URLSearchParams(location.search).get('text') text: new URLSearchParams(location.search).get('text')
}; };

Some files were not shown because too many files have changed in this diff Show More