Compare commits

..

269 Commits

Author SHA1 Message Date
c87a43bdba 8.38.0 2018-09-14 15:16:55 +09:00
fa6a7186e0 Merge pull request #2705 from syuilo/greenkeeper/webpack-4.19.0
Update webpack to the latest version 🚀
2018-09-14 15:16:31 +09:00
34a5adf951 常に閲覧注意の画像を表示するオプションを追加 & リファクタリング 2018-09-14 15:14:59 +09:00
4b3ece439e 🎨 2018-09-14 12:39:11 +09:00
10dc97c43f fix(package): update webpack to version 4.19.0 2018-09-14 03:29:26 +00:00
2c59da36c2 8.37.0 2018-09-14 09:19:24 +09:00
f457fb6067 Merge pull request #2703 from syuilo/l10n_develop
New Crowdin translations
2018-09-14 09:16:14 +09:00
6843019481 メモリリークを承知でいくつかの重要な部分のアニメーションを有効化 2018-09-14 09:15:37 +09:00
17cc5a9b95 fix(package): update webpack to version 4.18.1 (#2704) 2018-09-13 19:35:35 +09:00
b51843ed50 8.36.0 2018-09-13 18:42:30 +09:00
ecf44a4fc7 New translations ja-JP.yml (English) 2018-09-13 18:41:38 +09:00
8be0188140 Merge pull request #2702 from syuilo/greenkeeper/systeminformation-3.45.6
fix(package): update systeminformation to version 3.45.6
2018-09-13 18:34:56 +09:00
1008e38abc Merge pull request #2696 from syuilo/l10n_develop
New Crowdin translations
2018-09-13 18:34:15 +09:00
b862e53a56 New translations ja-JP.yml (Norwegian) 2018-09-13 18:33:09 +09:00
94042c2ea9 New translations ja-JP.yml (Dutch) 2018-09-13 18:33:05 +09:00
1d76bb42bb New translations ja-JP.yml (Japanese, Kansai) 2018-09-13 18:33:01 +09:00
d71a3b59b4 New translations ja-JP.yml (Spanish) 2018-09-13 18:32:56 +09:00
1e0c486f2a New translations ja-JP.yml (Russian) 2018-09-13 18:32:51 +09:00
98ec9e2254 New translations ja-JP.yml (Portuguese) 2018-09-13 18:32:47 +09:00
f18c6c26a5 New translations ja-JP.yml (Polish) 2018-09-13 18:32:43 +09:00
b6f69b6477 New translations ja-JP.yml (Korean) 2018-09-13 18:32:39 +09:00
901709057e New translations ja-JP.yml (Italian) 2018-09-13 18:32:35 +09:00
30c4718b0d New translations ja-JP.yml (German) 2018-09-13 18:32:32 +09:00
24fe68d75f New translations ja-JP.yml (French) 2018-09-13 18:32:28 +09:00
d0de0bc815 New translations ja-JP.yml (English) 2018-09-13 18:32:25 +09:00
9643b1c44a New translations ja-JP.yml (Chinese Simplified) 2018-09-13 18:32:22 +09:00
c1d02a4e1b New translations ja-JP.yml (Catalan) 2018-09-13 18:32:19 +09:00
be842b5071 fix(package): update webpack to version 4.18.0 (#2680) 2018-09-13 18:29:48 +09:00
c2eb80b44c fix(package): update @types/mongodb to version 3.1.7 (#2701)
Closes #2681
2018-09-13 18:29:29 +09:00
9ed2a82d3b fix(package): update debug to version 4.0.1 (#2700)
Closes #2682
2018-09-13 18:29:11 +09:00
b28eb54cac fix(package): update vue-loader to version 15.4.2 (#2692) 2018-09-13 18:28:12 +09:00
683d3a70b2 #2562 #2563 2018-09-13 18:23:44 +09:00
84fb010789 New translations ja-JP.yml (English) 2018-09-13 18:21:40 +09:00
278c586414 New translations ja-JP.yml (Norwegian) 2018-09-13 18:12:48 +09:00
e9165bc6e0 New translations ja-JP.yml (Dutch) 2018-09-13 18:12:45 +09:00
e3d190072f New translations ja-JP.yml (Japanese, Kansai) 2018-09-13 18:12:42 +09:00
e7004ef9f1 New translations ja-JP.yml (Spanish) 2018-09-13 18:12:38 +09:00
8336601ded New translations ja-JP.yml (Russian) 2018-09-13 18:12:36 +09:00
1dfb82b85b New translations ja-JP.yml (Portuguese) 2018-09-13 18:12:33 +09:00
0ffc30dcbf New translations ja-JP.yml (Polish) 2018-09-13 18:12:29 +09:00
3aa74de53c New translations ja-JP.yml (Korean) 2018-09-13 18:12:26 +09:00
f78f5c7b02 New translations ja-JP.yml (Italian) 2018-09-13 18:12:23 +09:00
0345fe6b30 New translations ja-JP.yml (German) 2018-09-13 18:12:20 +09:00
a51ba0d57c New translations ja-JP.yml (French) 2018-09-13 18:12:16 +09:00
6a7719ccf3 New translations ja-JP.yml (English) 2018-09-13 18:12:12 +09:00
4c18d9edc6 New translations ja-JP.yml (Chinese Simplified) 2018-09-13 18:12:09 +09:00
c6d0fe3c6e New translations ja-JP.yml (Catalan) 2018-09-13 18:12:05 +09:00
03e1d3fbc4 Refactor 2018-09-13 18:01:50 +09:00
700f8c9bb4 CWが適用されない箇所を修正 2018-09-13 17:44:36 +09:00
5a0fd674bb New translations ja-JP.yml (English) 2018-09-13 06:31:50 +09:00
44099c551c Update README.md 2018-09-13 05:39:12 +09:00
111f44ce09 Update README.md 2018-09-13 05:35:11 +09:00
c3c885de47 8.35.0 2018-09-13 02:52:29 +09:00
6d536c61e8 fix(package): update systeminformation to version 3.45.6
Closes #2617
2018-09-12 17:48:43 +00:00
8a8c079b2f Improve following/followers view
Closes #2235
2018-09-13 02:08:17 +09:00
b4a30e2a25 Refactor: remove needless await 2018-09-13 02:07:03 +09:00
f19f92c538 Clean up: Remove unused import 2018-09-13 01:50:36 +09:00
e1a946ab45 Fix bug 2018-09-13 01:50:21 +09:00
aa1817737e Fix glitch 2018-09-13 01:06:18 +09:00
25ec5a24ab Add toLowerCase 2018-09-12 06:33:02 +09:00
68784b3f8e New translations ja-JP.yml (Japanese, Kansai) 2018-09-12 04:01:26 +09:00
2118fadc48 Add toUpperCase function (#2697) 2018-09-12 03:51:33 +09:00
f14cde4db9 New translations ja-JP.yml (Japanese, Kansai) 2018-09-12 03:51:26 +09:00
75ce3f2eb8 New translations ja-JP.yml (Japanese, Kansai) 2018-09-12 03:41:31 +09:00
ca2230f690 Refactor 2018-09-12 03:32:47 +09:00
aa1dbe2710 New translations ja-JP.yml (Japanese, Kansai) 2018-09-12 03:31:32 +09:00
deddeb570e New translations ja-JP.yml (Japanese, Kansai) 2018-09-12 03:21:41 +09:00
0ed197d4d9 Use unique (#2695) 2018-09-12 03:02:14 +09:00
046976dffc Resolve #2691 2018-09-12 02:48:19 +09:00
bb8139196e Fix wrong indentation 2018-09-12 01:48:30 +09:00
1fea2cdcbe Fix bug 2018-09-11 20:57:25 +09:00
fe3dd25bc3 8.34.4 2018-09-10 21:40:14 +09:00
5b09209ef9 Fix bug 2018-09-10 21:36:43 +09:00
62db650e3c Revert "Fix bug"
This reverts commit f3ab8199a5.
2018-09-10 21:17:49 +09:00
b847886254 fix docs (#2678) 2018-09-10 18:32:51 +09:00
c6e69ffae4 8.34.3 2018-09-10 18:07:38 +09:00
b24f368d3f サロゲートペアを字数にカウントしないようにする (#2661)
* Update post-form.vue

* Update messaging-message.ts

* Update post-form.vue

* Update note.ts

* Update post-form.vue

refs: https://github.com/syuilo/misskey/pull/2661#issuecomment-419579444

* Update post-form.vue

refs: https://github.com/syuilo/misskey/pull/2661#issuecomment-419579444

* Update messaging-message.ts

refs: https://github.com/syuilo/misskey/pull/2661#issuecomment-419579444

* Update note.ts

refs: https://github.com/syuilo/misskey/pull/2661#issuecomment-419579444

* Update post-form.vue

refs: https://github.com/syuilo/misskey/pull/2661#discussion_r216175581

* Update post-form.vue

* Update post-form.vue

refs: https://github.com/syuilo/misskey/pull/2661#discussion_r216242002

* Update post-form.vue

refs: https://github.com/syuilo/misskey/pull/2661#discussion_r216242105
2018-09-10 18:02:46 +09:00
4dc8351f56 Optimize booting script 2018-09-10 17:50:34 +09:00
f3ab8199a5 Fix bug 2018-09-10 17:40:41 +09:00
28d953933a Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-09-10 15:07:52 +09:00
77d9ae92f6 8.34.2 2018-09-10 15:07:37 +09:00
7d00754587 Merge pull request #2676 from syuilo/l10n_develop
New Crowdin translations
2018-09-10 14:51:16 +09:00
982b5eb698 New translations ja-JP.yml (English) 2018-09-10 14:50:54 +09:00
20a9c25d70 Fix #2677 2018-09-10 14:48:19 +09:00
eebed9944c 8.34.1 2018-09-10 05:45:59 +09:00
507a192489 Fix bug 2018-09-10 05:45:29 +09:00
689dc3b9d5 New translations ja-JP.yml (French) 2018-09-10 05:20:52 +09:00
d765803b83 New translations ja-JP.yml (French) 2018-09-10 05:11:20 +09:00
0fabb6a057 8.34.0 2018-09-10 03:40:01 +09:00
23efaae85e lint 2018-09-10 03:39:00 +09:00
5b2f15726f Fix #2675 2018-09-10 03:15:46 +09:00
bc3a5f3512 Fix #2596 2018-09-10 03:02:06 +09:00
ba05f236bd Resolve #2101 2018-09-10 02:47:34 +09:00
6ac92ac4b8 Fix #2321 2018-09-10 02:43:16 +09:00
d9a1cd082c #2623 2018-09-10 02:21:16 +09:00
a32071541a Clean up 2018-09-10 02:20:09 +09:00
eb4f625bbd Fix #2096 2018-09-10 02:09:33 +09:00
e36d45507a Fix #2513 2018-09-10 02:07:13 +09:00
e32884f07f Fix #1740 2018-09-10 01:57:19 +09:00
1344ffa67d 削除された投稿にリアクションできないように
Closes #1778
2018-09-10 01:55:14 +09:00
e07210524f Refactor: Add comments 2018-09-10 01:54:08 +09:00
6f3996c061 Update theme color 2018-09-10 01:51:57 +09:00
fd06fd4dc1 Resolve #2560 2018-09-10 01:51:46 +09:00
d86d5feae3 Merge pull request #2660 from syuilo/l10n_develop
New Crowdin translations
2018-09-09 22:01:03 +09:00
0e20a8f07b New translations ja-JP.yml (English) 2018-09-09 17:31:05 +09:00
a40d784e3a New translations ja-JP.yml (English) 2018-09-09 17:10:50 +09:00
e145131b95 New translations ja-JP.yml (English) 2018-09-09 17:00:56 +09:00
92873b8bb5 New translations ja-JP.yml (English) 2018-09-09 03:41:10 +09:00
d359b71c81 New translations ja-JP.yml (English) 2018-09-09 03:30:40 +09:00
f1a0bf4257 New translations ja-JP.yml (English) 2018-09-09 03:01:16 +09:00
ea4e2da58d Fix AP Announce detection (#2672) 2018-09-09 02:59:14 +09:00
1301b3b49e New translations ja-JP.yml (English) 2018-09-09 02:51:10 +09:00
424625846e Merge branch 'master' into develop 2018-09-09 02:46:54 +09:00
0790dd7a2c 8.33.1 2018-09-09 02:45:29 +09:00
b238d7b934 New translations ja-JP.yml (French) 2018-09-09 00:01:22 +09:00
011e4fded2 New translations ja-JP.yml (French) 2018-09-08 23:51:17 +09:00
2fe872a9c9 Update README.md 2018-09-08 23:34:51 +09:00
02c1515a0f Update README.md 2018-09-08 23:30:29 +09:00
408118a1e8 8.33.0 2018-09-08 23:20:15 +09:00
6a45bb21c3 #2668 の一部をRevert 2018-09-08 23:19:11 +09:00
5d4e9aa949 Show ai image in welcome page 2018-09-08 23:16:02 +09:00
c87b98c2af Add ai illust 2018-09-08 23:15:39 +09:00
5a13c38a6d インスタンス名がブラウザタイトルに反映されないのを修正 (#2668)
* titleが反映されないのを修正

* deckでtitleが反映されるように修正
2018-09-08 21:44:28 +09:00
67f60ab307 fix wrong reaction img (#2666)
* use svg and cdn to download reactions

* fix wrong reaction img
2018-09-08 19:25:59 +09:00
08c278578d use svg and cdn to download reactions (#2665) 2018-09-08 19:03:20 +09:00
5e9d2d079d New translations ja-JP.yml (French) 2018-09-08 18:31:00 +09:00
0e01fb5fc3 Update setup.ja.md (#2663)
Sudoに関する記述を追加
2018-09-08 17:10:47 +09:00
d44dc7e00d 8.32.0 2018-09-08 15:30:07 +09:00
82ee3a538b Improve welcome page 2018-09-08 15:28:38 +09:00
fdc16253d1 New translations ja-JP.yml (Norwegian) 2018-09-08 15:21:38 +09:00
7e83cd2d74 New translations ja-JP.yml (Dutch) 2018-09-08 15:21:35 +09:00
083eb75eff New translations ja-JP.yml (Japanese, Kansai) 2018-09-08 15:21:33 +09:00
f50afa768f New translations ja-JP.yml (Spanish) 2018-09-08 15:21:31 +09:00
1a80fe91ce New translations ja-JP.yml (Russian) 2018-09-08 15:21:29 +09:00
4de1a5ef6c New translations ja-JP.yml (Portuguese) 2018-09-08 15:21:26 +09:00
d0d389299b New translations ja-JP.yml (Polish) 2018-09-08 15:21:24 +09:00
dc70804350 New translations ja-JP.yml (Korean) 2018-09-08 15:21:22 +09:00
78d691571b New translations ja-JP.yml (Italian) 2018-09-08 15:21:20 +09:00
b7cbf4a42a New translations ja-JP.yml (German) 2018-09-08 15:21:17 +09:00
87ca7c50b4 New translations ja-JP.yml (French) 2018-09-08 15:21:14 +09:00
6c7550b3f3 New translations ja-JP.yml (English) 2018-09-08 15:21:12 +09:00
4239ffa13f New translations ja-JP.yml (Chinese Simplified) 2018-09-08 15:21:09 +09:00
c6cfb0df76 New translations ja-JP.yml (Catalan) 2018-09-08 15:21:06 +09:00
380cf0de69 Improve welcome page 2018-09-08 15:11:12 +09:00
11f25ea2e7 8.31.0 2018-09-08 06:44:34 +09:00
ef62497777 ActivityPub Outboxの修正とactivity idのURLを実装 (#2662)
* Fix Outbox structure

* Implement activity endpoint

* Use in instead of or

* Use in, addition
2018-09-08 05:24:55 +09:00
2824d8a5b6 Add animation 2018-09-08 04:54:11 +09:00
1c84c0828e 良い感じに 2018-09-08 01:46:01 +09:00
39e4494836 🎨 2018-09-08 01:31:50 +09:00
dc174ca759 New translations ja-JP.yml (French) 2018-09-08 00:52:35 +09:00
b61cfd0407 New translations ja-JP.yml (English) 2018-09-07 23:22:01 +09:00
53405e54a8 New translations ja-JP.yml (English) 2018-09-07 21:33:04 +09:00
c7ef7531a9 New translations ja-JP.yml (Norwegian) 2018-09-07 21:22:27 +09:00
626b4bf314 New translations ja-JP.yml (Dutch) 2018-09-07 21:22:24 +09:00
323d0e0154 New translations ja-JP.yml (Japanese, Kansai) 2018-09-07 21:22:21 +09:00
6d1338317b New translations ja-JP.yml (Spanish) 2018-09-07 21:22:18 +09:00
1ce26d8aec New translations ja-JP.yml (Russian) 2018-09-07 21:22:16 +09:00
7ba3d3ec98 New translations ja-JP.yml (Portuguese) 2018-09-07 21:22:14 +09:00
24f58b3ecb New translations ja-JP.yml (Polish) 2018-09-07 21:22:11 +09:00
d1d8587096 New translations ja-JP.yml (Korean) 2018-09-07 21:22:09 +09:00
96db630f5e New translations ja-JP.yml (Italian) 2018-09-07 21:22:07 +09:00
91fae0ae8b New translations ja-JP.yml (German) 2018-09-07 21:22:05 +09:00
bfa1235b48 New translations ja-JP.yml (French) 2018-09-07 21:22:02 +09:00
95d324a413 New translations ja-JP.yml (English) 2018-09-07 21:22:00 +09:00
ef3535319b New translations ja-JP.yml (Chinese Simplified) 2018-09-07 21:21:57 +09:00
e9c04f4fa0 New translations ja-JP.yml (Catalan) 2018-09-07 21:21:55 +09:00
e7180d529a 8.30.0 2018-09-07 21:14:27 +09:00
b8cd872738 Merge pull request #2659 from syuilo/greenkeeper/commander-2.18.0
Update commander to the latest version 🚀
2018-09-07 21:14:02 +09:00
efaaa76185 Improve note visibility settings
Closes #2312
Closes #2313
2018-09-07 21:13:15 +09:00
19e1f996a6 Fix bug 2018-09-07 21:10:31 +09:00
40a69bf200 Merge pull request #2654 from syuilo/l10n_develop
New Crowdin translations
2018-09-07 20:41:54 +09:00
9e3abb9989 Improve welcome page 2018-09-07 20:41:12 +09:00
5ba48e06f7 New translations ja-JP.yml (English) 2018-09-07 20:31:22 +09:00
8b3a0a524b Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-09-07 20:24:00 +09:00
d9fe9cc5df 返すタグの数を制限 2018-09-07 20:23:46 +09:00
b202c7906a New translations ja-JP.yml (Norwegian) 2018-09-07 20:23:33 +09:00
b9c868cac6 New translations ja-JP.yml (Dutch) 2018-09-07 20:23:30 +09:00
33adf3c88d New translations ja-JP.yml (Japanese, Kansai) 2018-09-07 20:23:28 +09:00
8b84f40975 New translations ja-JP.yml (Spanish) 2018-09-07 20:23:25 +09:00
fa131d2023 New translations ja-JP.yml (Russian) 2018-09-07 20:23:23 +09:00
a83b38b50a New translations ja-JP.yml (Portuguese) 2018-09-07 20:23:20 +09:00
dcd7b286ef New translations ja-JP.yml (Polish) 2018-09-07 20:23:18 +09:00
b85bf769cd New translations ja-JP.yml (Korean) 2018-09-07 20:23:15 +09:00
630a20d61e New translations ja-JP.yml (Italian) 2018-09-07 20:23:12 +09:00
88c3794cf1 New translations ja-JP.yml (German) 2018-09-07 20:23:10 +09:00
42eb457ad0 New translations ja-JP.yml (French) 2018-09-07 20:23:08 +09:00
d153a8de20 New translations ja-JP.yml (English) 2018-09-07 20:23:06 +09:00
7f7551f44c New translations ja-JP.yml (Chinese Simplified) 2018-09-07 20:23:03 +09:00
23082b55a4 New translations ja-JP.yml (Catalan) 2018-09-07 20:23:00 +09:00
dac7387a7f fix(package): update minio to version 7.0.1 (#2655) 2018-09-07 20:22:04 +09:00
8c6856d894 Improve welcome page 2018-09-07 20:21:25 +09:00
2c0e514fb2 fix(package): update commander to version 2.18.0 2018-09-07 10:32:06 +00:00
1917b0339e #2652 (#2658) 2018-09-07 19:24:18 +09:00
c05419f223 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-09-07 19:23:51 +09:00
e0deaec695 Implement new endpoint 2018-09-07 19:23:39 +09:00
d70e2a788e Add some meta alternate links (#2657) 2018-09-07 19:22:14 +09:00
7343e6e2e8 統計で無視するハッシュタグを設定できるように 2018-09-07 19:20:50 +09:00
106d4cc0d6 🎨 2018-09-07 06:04:00 +09:00
c98879cb7a New translations ja-JP.yml (Norwegian) 2018-09-07 05:52:06 +09:00
9ca755c313 New translations ja-JP.yml (Dutch) 2018-09-07 05:52:04 +09:00
25e0b98840 New translations ja-JP.yml (Japanese, Kansai) 2018-09-07 05:52:01 +09:00
5599c43c71 New translations ja-JP.yml (Spanish) 2018-09-07 05:51:59 +09:00
eb7597d7e4 New translations ja-JP.yml (Russian) 2018-09-07 05:51:56 +09:00
d5767e92c4 New translations ja-JP.yml (Portuguese) 2018-09-07 05:51:54 +09:00
ba3749d373 New translations ja-JP.yml (Polish) 2018-09-07 05:51:51 +09:00
d8088acdf2 New translations ja-JP.yml (Korean) 2018-09-07 05:51:49 +09:00
ad93e0aa3d New translations ja-JP.yml (Italian) 2018-09-07 05:51:46 +09:00
691e58f03d New translations ja-JP.yml (German) 2018-09-07 05:51:44 +09:00
95d5bccfca New translations ja-JP.yml (French) 2018-09-07 05:51:42 +09:00
2aa8e0a4bf New translations ja-JP.yml (English) 2018-09-07 05:51:39 +09:00
6e96d6677d New translations ja-JP.yml (Chinese Simplified) 2018-09-07 05:51:36 +09:00
8816c20f51 New translations ja-JP.yml (Catalan) 2018-09-07 05:51:34 +09:00
e955fe1ffd 8.29.0 2018-09-07 05:47:47 +09:00
5cbcac713a Fix 2018-09-07 05:47:19 +09:00
2b50364ab4 ユーザー名にコントラストを付けるデザインのオンオフを切り替えられるように 2018-09-07 05:45:13 +09:00
fa04ac789e 🎨 2018-09-07 05:37:15 +09:00
95ce8dce3d 8.28.1 2018-09-07 05:32:18 +09:00
0b5eec4ca8 Fix bug 2018-09-07 05:32:09 +09:00
6d9716f90e 8.28.0 2018-09-07 04:24:08 +09:00
aa31061d90 fix(package): update node-sass-json-importer to version 4.0.1 (#2645) 2018-09-07 04:23:26 +09:00
acc7797dff New Crowdin translations (#2615)
* New translations ja-JP.yml (Catalan)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Catalan)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (English)
2018-09-07 04:22:16 +09:00
7959196dc7 Add sum function (#2653) 2018-09-07 04:21:04 +09:00
c6ff6939a5 Add capitalize function (#2651) 2018-09-07 03:22:55 +09:00
769960f29e Encode fetch URI if needed (#2649) 2018-09-07 02:26:31 +09:00
d92e9759f3 Refactor analog clock widget (#2648) 2018-09-07 01:20:23 +09:00
bf7e19b288 🎨 2018-09-07 01:18:47 +09:00
98954cd6d4 Trim image 2018-09-07 01:02:31 +09:00
538bb978ed Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-09-07 00:52:21 +09:00
10232c5866 Fix bug & some refactor 2018-09-07 00:52:13 +09:00
5cd6a0db16 Fix typo: serive -> service (#2647) 2018-09-07 00:44:57 +09:00
ff0a05a2d6 Add unique function (#2644) 2018-09-07 00:10:03 +09:00
e34b264af2 Fix bug (#2643) 2018-09-07 00:03:44 +09:00
00d79487cd Add erase function (#2641) 2018-09-07 00:02:55 +09:00
3cace734c7 Add concat function (#2640) 2018-09-06 21:31:15 +09:00
f428372869 Refactor effects function (#2639) 2018-09-06 20:06:16 +09:00
5dd2feba9b fix(package): update @types/minio to version 7.0.0 (#2626) 2018-09-06 19:55:29 +09:00
a1b026239e fix(package): update @types/ws to version 6.0.1 (#2636) 2018-09-06 19:55:20 +09:00
40735ce76b Fix bug (#2638) 2018-09-06 19:28:52 +09:00
4a00c13b33 🎨 2018-09-06 16:03:00 +09:00
8e359d54bd if elimination (#2635) 2018-09-06 06:06:22 +09:00
fb76dff836 New translations ja-JP.yml (English) 2018-09-06 05:01:19 +09:00
7167c8c593 New translations ja-JP.yml (Norwegian) 2018-09-06 04:36:02 +09:00
51b79d4250 New translations ja-JP.yml (Dutch) 2018-09-06 04:36:00 +09:00
925fcc1c64 New translations ja-JP.yml (Japanese, Kansai) 2018-09-06 04:35:54 +09:00
fcdc14862c New translations ja-JP.yml (Spanish) 2018-09-06 04:35:50 +09:00
dac2844cae New translations ja-JP.yml (Russian) 2018-09-06 04:35:45 +09:00
706b0cea16 New translations ja-JP.yml (Portuguese) 2018-09-06 04:35:41 +09:00
842e7844c7 New translations ja-JP.yml (Polish) 2018-09-06 04:35:39 +09:00
1dceda50d8 New translations ja-JP.yml (Korean) 2018-09-06 04:35:33 +09:00
af8b9abba4 New translations ja-JP.yml (Italian) 2018-09-06 04:35:28 +09:00
07b07685fa New translations ja-JP.yml (German) 2018-09-06 04:35:26 +09:00
cde43fe3c8 New translations ja-JP.yml (French) 2018-09-06 04:35:24 +09:00
2fe84aa75b New translations ja-JP.yml (English) 2018-09-06 04:35:21 +09:00
7d79a4840d New translations ja-JP.yml (Chinese Simplified) 2018-09-06 04:35:19 +09:00
3ee9479572 New translations ja-JP.yml (Catalan) 2018-09-06 04:35:16 +09:00
16da91d8d1 New translations ja-JP.yml (Norwegian) 2018-09-05 13:51:56 +09:00
8ffd62b462 New translations ja-JP.yml (Dutch) 2018-09-05 13:51:54 +09:00
935367e167 New translations ja-JP.yml (Japanese, Kansai) 2018-09-05 13:51:50 +09:00
00618260f2 New translations ja-JP.yml (Spanish) 2018-09-05 13:51:46 +09:00
77d66fac7b New translations ja-JP.yml (Russian) 2018-09-05 13:51:40 +09:00
17d7f59b06 New translations ja-JP.yml (Portuguese) 2018-09-05 13:51:38 +09:00
2561547db1 New translations ja-JP.yml (Polish) 2018-09-05 13:51:36 +09:00
7738438616 New translations ja-JP.yml (Korean) 2018-09-05 13:51:34 +09:00
3d8fc4a794 New translations ja-JP.yml (Italian) 2018-09-05 13:51:28 +09:00
87b4e7905e New translations ja-JP.yml (German) 2018-09-05 13:51:25 +09:00
13c5d4985a New translations ja-JP.yml (French) 2018-09-05 13:51:23 +09:00
f0df4096fd New translations ja-JP.yml (English) 2018-09-05 13:51:21 +09:00
5044424549 New translations ja-JP.yml (Chinese Simplified) 2018-09-05 13:51:19 +09:00
8ce67cdcd6 New translations ja-JP.yml (Catalan) 2018-09-05 13:51:16 +09:00
130 changed files with 2847 additions and 1398 deletions

View File

@ -1,4 +1,4 @@
<img src="https://github.com/syuilo/misskey/blob/b3f42e62af698a67c2250533c437569559f1fdf9/src/himasaku/resources/himasaku.png?raw=true" align="right" width="320px"/> <img src="https://github.com/syuilo/misskey/blob/develop/assets/ai-orig.png?raw=true" align="right" height="320px"/>
[![Misskey](/assets/title.png)](https://misskey.xyz/) [![Misskey](/assets/title.png)](https://misskey.xyz/)
================================================================ ================================================================
@ -7,12 +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/)
Sophisticated microblogging platform, evolving forever. **Sophisticated microblogging platform, evolving forever.**
[Misskey](https://misskey.xyz) is a decentralized microblogging platform born on Earth. [Misskey](https://misskey.xyz) is a decentralized microblogging platform born on Earth.
Since it exists within the Fediverse (a universe where various social media platforms are organized), Since it exists within the Fediverse (a universe where various social media platforms are organized),
it is mutually linked with other social media platforms. 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? Why don't you take a short break from the hustle and bustle of the city, and dive into a new Internet? [Find instance!](https://joinmisskey.github.io/)
<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>
@ -20,15 +20,44 @@ Why don't you take a short break from the hustle and bustle of the city, and div
:sparkles: Features :sparkles: Features
---------------------------------------------------------------- ----------------------------------------------------------------
* Rich text contents
* Reactions
* User lists
* Customizable column view (called MisskeyDeck)
* Customizable widgets
* Private messages
* ActivityPub support
and more! You can see it with your own eyes at [misskey.xyz](https://misskey.xyz). <img src="/assets/about/post.png" align="left" height="200px"/>
<h3 align="left">Posting</h3>
<p align="left">
Just post your idea, hot topics and anything you want to share. You may want to decorate your words, attach your favorite pictures, send files including movies and create a poll - those are the things you can do on Misskey!
</p>
---
<img src="/assets/about/reaction.png" align="right" height="200px"/>
<h3 align="right">Reactions</h3>
<p align="right">
Easiest way to tell your emotions. Misskey allows you to add various type of reactions to others post. The emotional experience on Misskey will never be on other SNSs which only able to push “likes”.
</p>
---
<img src="/assets/about/ui.png" align="left" height="200px"/>
<h3 align="left">Interface</h3>
<p align="left">
No UI fits for everyone. Therefore, Misskey has a highly customizable UI for your taste. You can edit layouts of your timeline, place selectable widgets you can easily move and create your unique home as this place will be your home.
</p>
---
<img src="/assets/about/drive.png" align="right" width="300px"/>
<h3 align="right">Misskey Drive</h3>
<p align="right">
Wanna post a picture you have already uploaded? Wish to organize, name and create a folder for your uploaded files? Misskey Drive is the best solution for you. Very easy to share your files online.
</p>
---
and more! You can see it with your own eyes at [misskey.xyz](https://misskey.xyz) or [other instances](https://joinmisskey.github.io/).
:package: Create your own instance :package: Create your own instance
---------------------------------------------------------------- ----------------------------------------------------------------

BIN
assets/about/drive.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
assets/about/post.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB

BIN
assets/about/reaction.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
assets/about/ui.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

BIN
assets/ai-orig.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

BIN
assets/ai.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

View File

@ -10,7 +10,7 @@ Misskeyサーバーの構築にご関心をお寄せいただきありがとう
*1.* Misskeyユーザーの作成 *1.* Misskeyユーザーの作成
---------------------------------------------------------------- ----------------------------------------------------------------
Misskeyrootで実行しない方がよいため、代わりにユーザーを作成します。 Misskeyrootユーザーで実行しない方がよいため、代わりにユーザーを作成します。
Debianの例: Debianの例:
``` ```
@ -109,6 +109,7 @@ Restart=always
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
``` ```
CentOSで1024以下のポートを使用してMisskeyを使用する場合は`ExecStart=/usr/bin/sudo /usr/bin/npm start`に変更する必要があります。
3. `systemctl daemon-reload ; systemctl enable misskey` systemdを再読み込みしmisskeyサービスを有効化 3. `systemctl daemon-reload ; systemctl enable misskey` systemdを再読み込みしmisskeyサービスを有効化
4. `systemctl start misskey` misskeyサービスの起動 4. `systemctl start misskey` misskeyサービスの起動

View File

@ -6,6 +6,19 @@ common:
misskey: "A ⭐ of fediverse" misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse." about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。" about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
intro:
title: "Misskeyって"
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
features: "特徴"
rich-contents: "投稿"
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
reaction: "リアクション"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "インターフェース"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "ドライブ"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
adblock: adblock:
detected: "広告ブロッカーを無効にしてください" detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
@ -68,6 +81,15 @@ common:
confused: "こまこまのこまり" confused: "こまこまのこまり"
rip: "RIP" rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-visibility:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
note-placeholders: note-placeholders:
a: "今どうしてる?" a: "今どうしてる?"
b: "何かありましたか?" b: "何かありましたか?"
@ -231,6 +253,9 @@ common/views/components/connect-failed.troubleshooter.vue:
success-desc: "正常に接続できるようです。ページを再度読み込みしてください。" success-desc: "正常に接続できるようです。ページを再度読み込みしてください。"
flush: "キャッシュの削除" flush: "キャッシュの削除"
set-version: "バージョン指定" set-version: "バージョン指定"
common/views/components/cw-button.vue:
hide: "隠す"
show: "もっと見る"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "ユーザーを探す" search-user: "ユーザーを探す"
you: "あなた" you: "あなた"
@ -569,8 +594,6 @@ 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: "リトライ"
@ -640,6 +663,9 @@ desktop/views/components/settings.vue:
behaviour: "動作" behaviour: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。" fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
auto-popout: "ウィンドウの自動ポップアウト" auto-popout: "ウィンドウの自動ポップアウト"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。" auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "詳細設定" advanced: "詳細設定"
@ -651,6 +677,7 @@ desktop/views/components/settings.vue:
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "ダークモード"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用" gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -751,7 +778,7 @@ desktop/views/components/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
save: "保存" save: "保存"
locked-account: "アカウントの保護" locked-account: "アカウントの保護"
is-locked: "投稿を非公開にする" is-locked: "フォローを承認制にする"
other: "その他" other: "その他"
is-bot: "このアカウントはBotです" is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
@ -865,7 +892,10 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる" signin-button: "やってる"
signup-button: "やる" signup-button: "やる"
timeline: "タイムライン" timeline: "タイムライン"
announcements: "お知らせ"
photos: "最近の画像"
powered-by-misskey: "Powered by <b>Misskey</b>." powered-by-misskey: "Powered by <b>Misskey</b>."
info: "情報"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -1002,8 +1032,6 @@ mobile/views/components/friends-maker.vue:
close: "閉じる" close: "閉じる"
mobile/views/components/note.vue: mobile/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
more: "もっと見る"
less: "隠す"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
location: "位置情報" location: "位置情報"
@ -1132,6 +1160,9 @@ mobile/views/pages/settings/settings.profile.vue:
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -1153,6 +1184,7 @@ mobile/views/pages/settings.vue:
dark-mode: "ダークモード" dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている" i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
@ -1161,8 +1193,14 @@ mobile/views/pages/settings.vue:
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
notification-position: "通知の表示"
notification-position-bottom: "下"
notification-position-top: "上"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する" load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する" load-remote-media: "リモートサーバーのメディアを表示する"
@ -1182,7 +1220,7 @@ mobile/views/pages/settings.vue:
settings: "設定" settings: "設定"
signout: "サインアウト" signout: "サインアウト"
sound: "サウンド" sound: "サウンド"
enableSounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
mobile/views/pages/user.vue: mobile/views/pages/user.vue:
follows-you: "フォローされています" follows-you: "フォローされています"
following: "フォロー" following: "フォロー"

View File

@ -6,6 +6,19 @@ common:
misskey: "A ⭐ of fediverse" misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse." about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。" about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
intro:
title: "Misskeyって"
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
features: "特徴"
rich-contents: "投稿"
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
reaction: "リアクション"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "インターフェース"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "ドライブ"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
adblock: adblock:
detected: "広告ブロッカーを無効にしてください" detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
@ -68,6 +81,15 @@ common:
confused: "Verwirrt" confused: "Verwirrt"
rip: "RIP" rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-visibility:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
note-placeholders: note-placeholders:
a: "Was machst du gerade?" a: "Was machst du gerade?"
b: "Was ist so passiert?" b: "Was ist so passiert?"
@ -231,6 +253,9 @@ common/views/components/connect-failed.troubleshooter.vue:
success-desc: "Die Verbindung scheint zu funktionieren. Bitte lade die Seite neu." success-desc: "Die Verbindung scheint zu funktionieren. Bitte lade die Seite neu."
flush: "Cache leeren" flush: "Cache leeren"
set-version: "Version angeben" set-version: "Version angeben"
common/views/components/cw-button.vue:
hide: "隠す"
show: "もっと見る"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "Einen Nutzer suchen" search-user: "Einen Nutzer suchen"
you: "Du" you: "Du"
@ -569,8 +594,6 @@ 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"
@ -640,6 +663,9 @@ desktop/views/components/settings.vue:
behaviour: "Verhalten" behaviour: "Verhalten"
fetch-on-scroll: "Aktualisieren beim scrollen" fetch-on-scroll: "Aktualisieren beim scrollen"
fetch-on-scroll-desc: "Wenn du runterscrollst empfängt die Seite automatisch zusätzliche Inhalte." fetch-on-scroll-desc: "Wenn du runterscrollst empfängt die Seite automatisch zusätzliche Inhalte."
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
auto-popout: "Automatische Pop-out Fenster" auto-popout: "Automatische Pop-out Fenster"
auto-popout-desc: "Pop-out ein offenes Fenster wenn möglich. Diese Einstellung wird im Browser gespeichert." auto-popout-desc: "Pop-out ein offenes Fenster wenn möglich. Diese Einstellung wird im Browser gespeichert."
advanced: "Erweiterte Einstellungen" advanced: "Erweiterte Einstellungen"
@ -651,6 +677,7 @@ desktop/views/components/settings.vue:
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "Nacht Modus" dark-mode: "Nacht Modus"
circle-icons: "Kreisförmige Icons" circle-icons: "Kreisförmige Icons"
contrasted-acct: "ユーザー名にコントラストを付ける"
gradient-window-header: "Übergang in Fensterköpfen" gradient-window-header: "Übergang in Fensterköpfen"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -751,7 +778,7 @@ desktop/views/components/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
save: "Profil aktualisieren" save: "Profil aktualisieren"
locked-account: "アカウントの保護" locked-account: "アカウントの保護"
is-locked: "投稿を非公開にする" is-locked: "フォローを承認制にする"
other: "その他" other: "その他"
is-bot: "このアカウントはBotです" is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
@ -865,7 +892,10 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる" signin-button: "やってる"
signup-button: "やる" signup-button: "やる"
timeline: "タイムライン" timeline: "タイムライン"
announcements: "お知らせ"
photos: "最近の画像"
powered-by-misskey: "Powered by <b>Misskey</b>." powered-by-misskey: "Powered by <b>Misskey</b>."
info: "情報"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -1002,8 +1032,6 @@ mobile/views/components/friends-maker.vue:
close: "閉じる" close: "閉じる"
mobile/views/components/note.vue: mobile/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
more: "もっと見る"
less: "隠す"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
location: "位置情報" location: "位置情報"
@ -1132,6 +1160,9 @@ mobile/views/pages/settings/settings.profile.vue:
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存" save: "保存"
saved: "Profil wurde aktualisiert" saved: "Profil wurde aktualisiert"
uploading: "アップロード中" uploading: "アップロード中"
@ -1153,6 +1184,7 @@ mobile/views/pages/settings.vue:
dark-mode: "ダークモード" dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている" i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
@ -1161,8 +1193,14 @@ mobile/views/pages/settings.vue:
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
notification-position: "通知の表示"
notification-position-bottom: "下"
notification-position-top: "上"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する" load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する" load-remote-media: "リモートサーバーのメディアを表示する"
@ -1182,7 +1220,7 @@ mobile/views/pages/settings.vue:
settings: "設定" settings: "設定"
signout: "サインアウト" signout: "サインアウト"
sound: "サウンド" sound: "サウンド"
enableSounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
mobile/views/pages/user.vue: mobile/views/pages/user.vue:
follows-you: "フォローされています" follows-you: "フォローされています"
following: "フォロー" following: "フォロー"

View File

@ -6,6 +6,19 @@ common:
misskey: "A ⭐ of the fediverse" misskey: "A ⭐ of the fediverse"
about-title: "A ⭐ of the fediverse." about-title: "A ⭐ of the fediverse."
about: "Thank you for finding Misskey. Misskey is a <b>decentralized microblogging platform</b> born on Earth. Since it exists within the Fediverse (a universe where various social media platforms are organized), it is mutually linked with other social media platforms. Why don't you take a short break from the hustle and bustle of the city, and dive into a new Internet?" about: "Thank you for finding Misskey. Misskey is a <b>decentralized microblogging platform</b> born on Earth. Since it exists within the Fediverse (a universe where various social media platforms are organized), it is mutually linked with other social media platforms. Why don't you take a short break from the hustle and bustle of the city, and dive into a new Internet?"
intro:
title: "What is Misskey?"
about: "Misskey is a open-source <b>decentralized microblogging service</b>. Sophisticated fully customizable Ui, varieties of reaction for posts, free file storage providing integrated management system and other advancing functions are available. Also, network system called “Fediverse” enables us to communicate with users on other SNSs. Like, if you post something, then your posts will sent not only to Misskey but also mastodon. Just imagine that the planet is sending a microwave to other planet to communication."
features: "Features"
rich-contents: "Post"
rich-contents-desc: "Just post your idea, hot topics and anything you want to share. You may want to decorate your words, attach your favorite pictures, send files including movies and create a poll - those are the things you can do on Misskey!"
reaction: "Reactions"
reaction-desc: "Easiest way to tell your emotions. Misskey allows you to add various type of reactions to others post. The emotional experience on Misskey will never be on other SNSs which only able to push “likes”."
ui: "Interface"
ui-desc: "No UI fits for everyone. Therefore, Misskey has a highly customizable UI for your taste. Make your original home by editing, adjusting layouts of timeline and placing selectable widgets you can easily customize."
drive: "Misskey Drive"
drive-desc: "Wanna post a picture you have already uploaded? Wish to organize, name and create a folder for your uploaded files? Misskey Drive is the best solution for you. Very easy to share your files online."
outro: "Check further Misskey-unique features on your eyes! Feeling like this is not for you, try other instances as Misskey is a decentralized SNS so that you can easily find your mates. Then, GLHF!"
adblock: adblock:
detected: "Please disable ad blocker." detected: "Please disable ad blocker."
warning: "Some features may be unavailable or cause malfunctions if ad blocking features are enabled. <strong>Misskey is not running ads</strong>." warning: "Some features may be unavailable or cause malfunctions if ad blocking features are enabled. <strong>Misskey is not running ads</strong>."
@ -68,6 +81,15 @@ common:
confused: "Confused" confused: "Confused"
rip: "RIP" rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-visibility:
public: "Public"
home: "Home"
home-desc: "Post to the home timeline only"
followers: "Followers"
followers-desc: "Post to followers only"
specified: "Direct"
specified-desc: "Post to specified users only"
private: "Private"
note-placeholders: note-placeholders:
a: "What are you doing?" a: "What are you doing?"
b: "What's happening?" b: "What's happening?"
@ -231,6 +253,9 @@ common/views/components/connect-failed.troubleshooter.vue:
success-desc: "Looks like we have a connection. 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/cw-button.vue:
hide: "Hide"
show: "See more"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "Find a user" search-user: "Find a user"
you: "You" you: "You"
@ -569,8 +594,6 @@ desktop/views/components/notes.note.vue:
detail: "Show details" detail: "Show details"
private: "Post is private" private: "Post is private"
deleted: "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"
@ -640,6 +663,9 @@ desktop/views/components/settings.vue:
behaviour: "Behavior" behaviour: "Behavior"
fetch-on-scroll: "Endless loading on scroll" fetch-on-scroll: "Endless loading on scroll"
fetch-on-scroll-desc: "When you scroll down the page, it automatically fetches additional content." fetch-on-scroll-desc: "When you scroll down the page, it automatically fetches additional content."
note-visibility: "Post visibility"
default-note-visibility: "Default visibility"
remember-note-visibility: "Remember post visibility"
auto-popout: "Auto pop-out window" auto-popout: "Auto pop-out window"
auto-popout-desc: "If it's possible, pop-out display will be used instead of opening a new window. This setting is stored in your browser." auto-popout-desc: "If it's possible, pop-out display will be used instead of opening a new window. This setting is stored in your browser."
advanced: "Advanced settings" advanced: "Advanced settings"
@ -651,6 +677,7 @@ desktop/views/components/settings.vue:
delete-wallpaper: "Remove background" delete-wallpaper: "Remove background"
dark-mode: "Dark Mode" dark-mode: "Dark Mode"
circle-icons: "Use circle icons" circle-icons: "Use circle icons"
contrasted-acct: "Add contrast to username"
gradient-window-header: "Use gradients on window headers" gradient-window-header: "Use gradients on window headers"
post-form-on-timeline: "Display post form at the top of the timeline" post-form-on-timeline: "Display post form at the top of the timeline"
suggest-recent-hashtags: "Show recent popular hashtags on the post form" suggest-recent-hashtags: "Show recent popular hashtags on the post form"
@ -751,7 +778,7 @@ desktop/views/components/settings.profile.vue:
birthday: "Birthday" birthday: "Birthday"
save: "Update profile" save: "Update profile"
locked-account: "Protect your account" locked-account: "Protect your account"
is-locked: "Make your posts private" is-locked: "フォローを承認制にする"
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"
@ -865,7 +892,10 @@ desktop/views/pages/welcome.vue:
signin-button: "Logging in..." signin-button: "Logging in..."
signup-button: "Sign up" signup-button: "Sign up"
timeline: "Timeline" timeline: "Timeline"
announcements: "Announcements"
photos: "Recent uploaded"
powered-by-misskey: "Powered by <b>Misskey</b>." powered-by-misskey: "Powered by <b>Misskey</b>."
info: "Information"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey storage" title: "Misskey storage"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -901,7 +931,7 @@ desktop/views/pages/user/user.friends.vue:
no-users: "No frequent mentions" no-users: "No frequent mentions"
desktop/views/pages/user/user.vue: desktop/views/pages/user/user.vue:
is-suspended: "This account has been suspended." is-suspended: "This account has been suspended."
is-remote: "The user is a remote user. The profile that you see here may not complete." is-remote: "This profile belongs to a remote user. The profile that you see here may not be complete. "
view-remote: "See their complete profile" view-remote: "See their complete profile"
desktop/views/pages/user/user.home.vue: desktop/views/pages/user/user.home.vue:
last-used-at: "Last active:" last-used-at: "Last active:"
@ -1002,8 +1032,6 @@ mobile/views/components/friends-maker.vue:
close: "Close" close: "Close"
mobile/views/components/note.vue: mobile/views/components/note.vue:
reposted-by: "Reposted by {}" reposted-by: "Reposted by {}"
more: "See more"
less: "Hide"
private: "This post is private" private: "This post is private"
deleted: "This post has been deleted" deleted: "This post has been deleted"
location: "Location" location: "Location"
@ -1132,6 +1160,9 @@ mobile/views/pages/settings/settings.profile.vue:
avatar: "Avatar" avatar: "Avatar"
banner: "Banner" banner: "Banner"
is-cat: "This account is a Cat" is-cat: "This account is a Cat"
is-locked: "フォローを承認制にする"
advanced: "Advanced"
privacy: "Privacy"
save: "Update profile" save: "Update profile"
saved: "Profile updated" saved: "Profile updated"
uploading: "Uploading" uploading: "Uploading"
@ -1153,6 +1184,7 @@ mobile/views/pages/settings.vue:
dark-mode: "Dark Mode" dark-mode: "Dark Mode"
i-am-under-limited-internet: "I'm in limited bandwidth" i-am-under-limited-internet: "I'm in limited bandwidth"
circle-icons: "Use circle icons" circle-icons: "Use circle icons"
contrasted-acct: "Add contrast to username"
timeline: "Timeline" timeline: "Timeline"
show-reply-target: "Show reply target" show-reply-target: "Show reply target"
show-my-renotes: "Show my reposts" show-my-renotes: "Show my reposts"
@ -1161,8 +1193,14 @@ mobile/views/pages/settings.vue:
post-style: "Post design" post-style: "Post design"
post-style-standard: "Standard" post-style-standard: "Standard"
post-style-smart: "Smart" post-style-smart: "Smart"
notification-position: "Notification style"
notification-position-bottom: "Bottom"
notification-position-top: "Top"
behavior: "Behavior" behavior: "Behavior"
fetch-on-scroll: "Endless loading on scroll" fetch-on-scroll: "Endless loading on scroll"
note-visibility: "Post visibility"
default-note-visibility: "Default visibility"
remember-note-visibility: "Remember post visibility"
disable-via-mobile: "Don't mark the post as 'from mobile'" disable-via-mobile: "Don't mark the post as 'from mobile'"
load-raw-images: "Show attached images in original quality" load-raw-images: "Show attached images in original quality"
load-remote-media: "Show media from a remote server" load-remote-media: "Show media from a remote server"
@ -1182,7 +1220,7 @@ mobile/views/pages/settings.vue:
settings: "Settings" settings: "Settings"
signout: "Sign out" signout: "Sign out"
sound: "Sounds" sound: "Sounds"
enableSounds: "Enable sounds" enable-sounds: "Enable sounds"
mobile/views/pages/user.vue: mobile/views/pages/user.vue:
follows-you: "Follows you" follows-you: "Follows you"
following: "Following" following: "Following"

View File

@ -6,6 +6,19 @@ common:
misskey: "Una ⭐️ del fediverso" misskey: "Una ⭐️ del fediverso"
about-title: "Una ⭐️ del fediverso" about-title: "Una ⭐️ del fediverso"
about: "Gracias por encontrae Misskey. Misskey es una <b>plataforma descentralizada de microblogging</b> nacida en la Tierra. Gracias a existir dentro del Fediverso (un universo donde se organizan varias plataformas sociales) se encuentra enlazada mutuamente con otras plataformas sociales. ¿Por què no te tomas un respiro del caos de la ciudad y te sumerges es una nueva manera de entender Internet?" about: "Gracias por encontrae Misskey. Misskey es una <b>plataforma descentralizada de microblogging</b> nacida en la Tierra. Gracias a existir dentro del Fediverso (un universo donde se organizan varias plataformas sociales) se encuentra enlazada mutuamente con otras plataformas sociales. ¿Por què no te tomas un respiro del caos de la ciudad y te sumerges es una nueva manera de entender Internet?"
intro:
title: "Misskeyって"
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
features: "特徴"
rich-contents: "投稿"
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
reaction: "リアクション"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "インターフェース"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "ドライブ"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
adblock: adblock:
detected: "Por favor, desactive el bloqueador de publicidad." detected: "Por favor, desactive el bloqueador de publicidad."
warning: "<strong>Misskey no tiene anuncios publicitarios.</strong> Sin embargo, algunas características podrían no estar disponibles si el bloqueador de publicidad está habilitado." warning: "<strong>Misskey no tiene anuncios publicitarios.</strong> Sin embargo, algunas características podrían no estar disponibles si el bloqueador de publicidad está habilitado."
@ -68,6 +81,15 @@ common:
confused: "confundido" confused: "confundido"
rip: "RIP" rip: "RIP"
pudding: "Chafado" pudding: "Chafado"
note-visibility:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
note-placeholders: note-placeholders:
a: "¿Qué haces?" a: "¿Qué haces?"
b: "¿Qué está pasando?" b: "¿Qué está pasando?"
@ -231,6 +253,9 @@ common/views/components/connect-failed.troubleshooter.vue:
success-desc: "Parece que la conexión ha sido posible. Por favor refresca la página." success-desc: "Parece que la conexión ha sido posible. Por favor refresca la página."
flush: "Limpiar la memoria caché" flush: "Limpiar la memoria caché"
set-version: "Escoge la versión" set-version: "Escoge la versión"
common/views/components/cw-button.vue:
hide: "隠す"
show: "もっと見る"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "Encuentra un usuario" search-user: "Encuentra un usuario"
you: "Tu" you: "Tu"
@ -569,8 +594,6 @@ 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: "Esconder"
see-more: "Ver más"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "Error al cargar." error: "Error al cargar."
retry: "Reintentar" retry: "Reintentar"
@ -640,6 +663,9 @@ desktop/views/components/settings.vue:
behaviour: "Acciones" behaviour: "Acciones"
fetch-on-scroll: "Desplazamiento infinito" fetch-on-scroll: "Desplazamiento infinito"
fetch-on-scroll-desc: "Cuando te deslizas al final de la página nuevo contenido se carga automáticamente." fetch-on-scroll-desc: "Cuando te deslizas al final de la página nuevo contenido se carga automáticamente."
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
auto-popout: "Ventana emergente automática" auto-popout: "Ventana emergente automática"
auto-popout-desc: "Muestra una ventana emergente si es posible. Esta configuración depende del navegador." auto-popout-desc: "Muestra una ventana emergente si es posible. Esta configuración depende del navegador."
advanced: "Configuración avanzada" advanced: "Configuración avanzada"
@ -651,6 +677,7 @@ desktop/views/components/settings.vue:
delete-wallpaper: "Suprimir fondo" delete-wallpaper: "Suprimir fondo"
dark-mode: "Modo Nocturno" dark-mode: "Modo Nocturno"
circle-icons: "Usar iconos circulares" circle-icons: "Usar iconos circulares"
contrasted-acct: "ユーザー名にコントラストを付ける"
gradient-window-header: "Usar degradados en las cabeceras de las páginas" gradient-window-header: "Usar degradados en las cabeceras de las páginas"
post-form-on-timeline: "Mostrar el formulario de las entradas encima de la línea de tiempo" post-form-on-timeline: "Mostrar el formulario de las entradas encima de la línea de tiempo"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -751,7 +778,7 @@ desktop/views/components/settings.profile.vue:
birthday: "Fecha de nacimiento" birthday: "Fecha de nacimiento"
save: "Perfil actualizado" save: "Perfil actualizado"
locked-account: "Protege tu cuenta" locked-account: "Protege tu cuenta"
is-locked: "Crear una nota privada" is-locked: "フォローを承認制にする"
other: "その他" other: "その他"
is-bot: "このアカウントはBotです" is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
@ -865,7 +892,10 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる" signin-button: "やってる"
signup-button: "やる" signup-button: "やる"
timeline: "タイムライン" timeline: "タイムライン"
announcements: "お知らせ"
photos: "最近の画像"
powered-by-misskey: "Powered by <b>Misskey</b>." powered-by-misskey: "Powered by <b>Misskey</b>."
info: "情報"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -1002,8 +1032,6 @@ mobile/views/components/friends-maker.vue:
close: "閉じる" close: "閉じる"
mobile/views/components/note.vue: mobile/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
more: "もっと見る"
less: "隠す"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
location: "位置情報" location: "位置情報"
@ -1132,6 +1160,9 @@ mobile/views/pages/settings/settings.profile.vue:
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -1153,6 +1184,7 @@ mobile/views/pages/settings.vue:
dark-mode: "ダークモード" dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている" i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
@ -1161,8 +1193,14 @@ mobile/views/pages/settings.vue:
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
notification-position: "通知の表示"
notification-position-bottom: "下"
notification-position-top: "上"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する" load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する" load-remote-media: "リモートサーバーのメディアを表示する"
@ -1182,7 +1220,7 @@ mobile/views/pages/settings.vue:
settings: "設定" settings: "設定"
signout: "サインアウト" signout: "サインアウト"
sound: "サウンド" sound: "サウンド"
enableSounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
mobile/views/pages/user.vue: mobile/views/pages/user.vue:
follows-you: "フォローされています" follows-you: "フォローされています"
following: "フォロー" following: "フォロー"

View File

@ -6,6 +6,19 @@ common:
misskey: "Une ⭐ du fédiverse" misskey: "Une ⭐ du fédiverse"
about-title: "Une ⭐ du fédivers." about-title: "Une ⭐ du fédivers."
about: "Merci d'avoir découvert Misskey. Misskey est une <b>plateforme de microblogage distribuée</b> née sur Terre. Parce qu'il fait partie du Fédivers (un univers composé de diverses plateformes de réseaux sociaux organisées), il est mutuellement connecté avec d'autres plateformes de réseaux sociaux. Désirez-vous prendre une pause, pendant un instant, loin de l'agitation de la ville et plonger dans un nouvel Internet ?" about: "Merci d'avoir découvert Misskey. Misskey est une <b>plateforme de microblogage distribuée</b> née sur Terre. Parce qu'il fait partie du Fédivers (un univers composé de diverses plateformes de réseaux sociaux organisées), il est mutuellement connecté avec d'autres plateformes de réseaux sociaux. Désirez-vous prendre une pause, pendant un instant, loin de l'agitation de la ville et plonger dans un nouvel Internet ?"
intro:
title: "Cest quoi Misskey ?"
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
features: "Fonctionnalités"
rich-contents: "Notes"
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
reaction: "Réactions"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "Interface utilisateur"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "Drive"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
adblock: adblock:
detected: "Veuillez désactiver votre bloqueur de publicités" detected: "Veuillez désactiver votre bloqueur de publicités"
warning: "<strong>Misskey n'utilise pas de publicités</strong>, mais quelques options peuvent être non disponibles ou fonctionneraient mal si un bloqueur de publicités est activé." warning: "<strong>Misskey n'utilise pas de publicités</strong>, mais quelques options peuvent être non disponibles ou fonctionneraient mal si un bloqueur de publicités est activé."
@ -68,6 +81,15 @@ common:
confused: "Confus" confused: "Confus"
rip: "RIP" rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-visibility:
public: "Public"
home: "Accueil"
home-desc: "Publier sur le fil local uniquement"
followers: "Abonnés·es"
followers-desc: "Publier à vos abonnés·es uniquement"
specified: "Direct"
specified-desc: "Publier aux utilisateurs·trices mentionnés·es"
private: "Privé"
note-placeholders: note-placeholders:
a: "Que faites-vous maintenant ?" a: "Que faites-vous maintenant ?"
b: "Quoi de neuf ?" b: "Quoi de neuf ?"
@ -173,7 +195,7 @@ common/views/components/games/reversi/reversi.game.vue:
surrendered: "Par abandon" surrendered: "Par abandon"
is-llotheo: "石の少ない方が勝ち(ロセオ)" is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "Carte en boucle" looped-map: "Carte en boucle"
can-put-everywhere: "どこでも置けるモード" can-put-everywhere: "Peut poser partout"
common/views/components/games/reversi/reversi.index.vue: common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi" title: "Misskey Reversi"
sub-title: "Jouer à Reversi avec vos ami·e·s !" sub-title: "Jouer à Reversi avec vos ami·e·s !"
@ -231,6 +253,9 @@ common/views/components/connect-failed.troubleshooter.vue:
success-desc: "Succès de la connexion au serveur de Misskey. 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/cw-button.vue:
hide: "隠す"
show: "もっと見る"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "Trouver un·e utilisateur·trice" search-user: "Trouver un·e utilisateur·trice"
you: "Vous" you: "Vous"
@ -261,8 +286,8 @@ common/views/components/nav.vue:
develop: "Développeur·se·s" develop: "Développeur·se·s"
feedback: "Remarques" feedback: "Remarques"
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
detail: "詳細" detail: "Détails"
copy-link: "リンクをコピー" copy-link: "Copier le lien"
favorite: "Mettre cette note en favoris" favorite: "Mettre cette note en favoris"
pin: "Épingler sur votre profil" pin: "Épingler sur votre profil"
delete: "Supprimer" delete: "Supprimer"
@ -341,8 +366,8 @@ common/views/components/visibility-chooser.vue:
specified-desc: "Publier aux utilisateur·rice·s mentionné·e·s" specified-desc: "Publier aux utilisateur·rice·s mentionné·e·s"
private: "Privé" private: "Privé"
common/views/components/trends.vue: common/views/components/trends.vue:
count: "{}人が投稿" count: "{} utilisateurs·trices mentionnés·es"
empty: "トレンドなし" empty: "Aucune tendance"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "Récupération" fetching: "Récupération"
no-broadcasts: "Aucune annonce" no-broadcasts: "Aucune annonce"
@ -395,7 +420,7 @@ common/views/widgets/tips.vue:
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます" tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています" tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
tips-line21: "Vous pouvez aussi utiliser l'API pour développer des Bots." tips-line21: "Vous pouvez aussi utiliser l'API pour développer des Bots."
tips-line23: "まゆかわいいよまゆ" tips-line23: "Mayu est mignone avec ses sourcils."
tips-line24: "Misskey a vu le jour en 2014" tips-line24: "Misskey a vu le jour en 2014"
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます" tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
common/views/pages/follow.vue: common/views/pages/follow.vue:
@ -441,8 +466,8 @@ desktop/views/components/charts.vue:
local-notes: "投稿の増減 (ローカル)" local-notes: "投稿の増減 (ローカル)"
remote-notes: "投稿の増減 (リモート)" remote-notes: "投稿の増減 (リモート)"
notes-total: "投稿の累計" notes-total: "投稿の累計"
users: "ユーザーの増減" users: "Nombre dutilisateurs·trices : augmentation/diminution"
users-total: "ユーザーの累計" users-total: "Nombre total dutilisateurs·trices : total cumulé"
drive: "ドライブ使用量の増減" drive: "ドライブ使用量の増減"
drive-total: "ドライブ使用量の累計" drive-total: "ドライブ使用量の累計"
drive-files: "ドライブのファイル数の増減" drive-files: "ドライブのファイル数の増減"
@ -569,8 +594,6 @@ 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"
@ -640,6 +663,9 @@ desktop/views/components/settings.vue:
behaviour: "Comportement" behaviour: "Comportement"
fetch-on-scroll: "Chargement lors du défilement" fetch-on-scroll: "Chargement lors du défilement"
fetch-on-scroll-desc: "Chargement automatique du contenu lors du défilement de la page." fetch-on-scroll-desc: "Chargement automatique du contenu lors du défilement de la page."
note-visibility: "Visibilité de la publication"
default-note-visibility: "Visibilité par défaut"
remember-note-visibility: "投稿の公開範囲を記憶する"
auto-popout: "Fenêtre contextuelle automatique" auto-popout: "Fenêtre contextuelle automatique"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。" auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "Paramètres avancés" advanced: "Paramètres avancés"
@ -651,8 +677,9 @@ desktop/views/components/settings.vue:
delete-wallpaper: "Supprimer le fond d'écran" delete-wallpaper: "Supprimer le fond d'écran"
dark-mode: "Mode nuit" dark-mode: "Mode nuit"
circle-icons: "Utiliser des icônes circulaires" circle-icons: "Utiliser des icônes circulaires"
contrasted-acct: "Nom dutilisateur contrasté"
gradient-window-header: "Utiliser les dégradés sur la barre de titre de la fenêtre" gradient-window-header: "Utiliser les dégradés sur la barre de titre de la fenêtre"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "Afficher le formulaire en haut du fil"
suggest-recent-hashtags: "Afficher les hashtags populaires dans le champs de saisie" suggest-recent-hashtags: "Afficher les hashtags populaires dans le champs de saisie"
show-clock-on-header: "Afficher l'horloge à droite sur le coté supérieur" show-clock-on-header: "Afficher l'horloge à droite sur le coté supérieur"
show-reply-target: "Afficher les réponses" show-reply-target: "Afficher les réponses"
@ -751,7 +778,7 @@ desktop/views/components/settings.profile.vue:
birthday: "Date de naissance" birthday: "Date de naissance"
save: "Mettre à jour le profil" save: "Mettre à jour le profil"
locked-account: "Protéger votre compte" locked-account: "Protéger votre compte"
is-locked: "Rendre la note privée" is-locked: "フォローを承認制にする"
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"
@ -865,7 +892,10 @@ desktop/views/pages/welcome.vue:
signin-button: "Se connecter" signin-button: "Se connecter"
signup-button: "S'inscrire" signup-button: "S'inscrire"
timeline: "Fil d'actualité" timeline: "Fil d'actualité"
announcements: "Notices"
photos: "Images récentes"
powered-by-misskey: "Propulsé par <b>Misskey</b>." powered-by-misskey: "Propulsé par <b>Misskey</b>."
info: "Informations"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Lecteur de Misskey" title: "Lecteur de Misskey"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -975,14 +1005,14 @@ mobile/views/components/drive-file-chooser.vue:
mobile/views/components/drive-folder-chooser.vue: mobile/views/components/drive-folder-chooser.vue:
select-folder: "Choisissez un dossier" select-folder: "Choisissez un dossier"
mobile/views/components/drive.file.vue: mobile/views/components/drive.file.vue:
nsfw: "閲覧注意" nsfw: "CW"
mobile/views/components/drive.file-detail.vue: mobile/views/components/drive.file-detail.vue:
download: "Télécharger" download: "Télécharger"
rename: "Renommer" rename: "Renommer"
move: "Déplacer" move: "Déplacer"
hash: "Hash (md5)" hash: "Hash (md5)"
exif: "EXIF" exif: "EXIF"
nsfw: "閲覧注意" nsfw: "CW"
mobile/views/components/media-image.vue: mobile/views/components/media-image.vue:
sensitive: "Le contenu est NSFW" sensitive: "Le contenu est NSFW"
click-to-show: "Cliquer pour afficher" click-to-show: "Cliquer pour afficher"
@ -1002,8 +1032,6 @@ mobile/views/components/friends-maker.vue:
close: "Fermer" close: "Fermer"
mobile/views/components/note.vue: mobile/views/components/note.vue:
reposted-by: "Renoté par {}" reposted-by: "Renoté par {}"
more: "Voir plus"
less: "Masquer"
private: "cette publication est privée" private: "cette publication est privée"
deleted: "cette publication a été supprimée" deleted: "cette publication a été supprimée"
location: "Géolocalisation" location: "Géolocalisation"
@ -1049,7 +1077,7 @@ mobile/views/components/timeline.vue:
load-more: "Afficher plus" load-more: "Afficher plus"
mobile/views/components/ui.header.vue: mobile/views/components/ui.header.vue:
welcome-back: "Content de vous revoir ! " welcome-back: "Content de vous revoir ! "
adjective: "さん" adjective: "M."
mobile/views/components/ui.nav.vue: mobile/views/components/ui.nav.vue:
timeline: "Fil d'actualité" timeline: "Fil d'actualité"
notifications: "Notifications" notifications: "Notifications"
@ -1132,6 +1160,9 @@ mobile/views/pages/settings/settings.profile.vue:
avatar: "Avatar" avatar: "Avatar"
banner: "Bannière" banner: "Bannière"
is-cat: "Ce compte est un Bot" is-cat: "Ce compte est un Bot"
is-locked: "フォローを承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "Mettre à jour le profil" save: "Mettre à jour le profil"
saved: "Profil mis à jour avec succès" saved: "Profil mis à jour avec succès"
uploading: "En cours d'envoi" uploading: "En cours d'envoi"
@ -1153,6 +1184,7 @@ mobile/views/pages/settings.vue:
dark-mode: "Mode nuit" dark-mode: "Mode nuit"
i-am-under-limited-internet: "J'ai un accès Internet limité" i-am-under-limited-internet: "J'ai un accès Internet limité"
circle-icons: "Utiliser des icônes circulaires" circle-icons: "Utiliser des icônes circulaires"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "Fil d'actualité" timeline: "Fil d'actualité"
show-reply-target: "Afficher les réponses" show-reply-target: "Afficher les réponses"
show-my-renotes: "Afficher mes republications" show-my-renotes: "Afficher mes republications"
@ -1161,8 +1193,14 @@ mobile/views/pages/settings.vue:
post-style: "Style de la publication" post-style: "Style de la publication"
post-style-standard: "Standard" post-style-standard: "Standard"
post-style-smart: "Intelligent" post-style-smart: "Intelligent"
notification-position: "Style de notification"
notification-position-bottom: "en bas"
notification-position-top: "en haut"
behavior: "Comportement" behavior: "Comportement"
fetch-on-scroll: "Chargement lors du défilement" fetch-on-scroll: "Chargement lors du défilement"
note-visibility: "Visibilité de la publication"
default-note-visibility: "Visibilité par défaut"
remember-note-visibility: "Se souvenir du mode de visibilité de la publication"
disable-via-mobile: "Ne pas mentionner que ma publication provient d'un 'périphérique mobile'" disable-via-mobile: "Ne pas mentionner que ma publication provient d'un 'périphérique mobile'"
load-raw-images: "Afficher les photos jointes en haute qualité" load-raw-images: "Afficher les photos jointes en haute qualité"
load-remote-media: "Afficher les médias sur le serveur distant" load-remote-media: "Afficher les médias sur le serveur distant"
@ -1182,7 +1220,7 @@ mobile/views/pages/settings.vue:
settings: "Réglages" settings: "Réglages"
signout: "Déconnexion" signout: "Déconnexion"
sound: "Sons" sound: "Sons"
enableSounds: "Activer le son" enable-sounds: "Activer les sons"
mobile/views/pages/user.vue: mobile/views/pages/user.vue:
follows-you: "vous suit" follows-you: "vous suit"
following: "Abonnements" following: "Abonnements"
@ -1227,7 +1265,7 @@ docs:
res: "Réponse" res: "Réponse"
require-credential: "Ce point de communication nécessite une authentification." require-credential: "Ce point de communication nécessite une authentification."
require-permission: "Ce point de communication nécessite la permission {permission}." require-permission: "Ce point de communication nécessite la permission {permission}."
has-limit: "レートリミットがあります。" has-limit: "Il ya un taux limite."
duration-limit: "直近{duration}ミリ秒の間のこのエンドポイントへのリクエスト数の合計が{max}を超える場合はリクエストできません。" duration-limit: "直近{duration}ミリ秒の間のこのエンドポイントへのリクエスト数の合計が{max}を超える場合はリクエストできません。"
min-interval-limit: "前回のリクエストから{interval}ミリ秒経っていない場合はリクエストできません。" min-interval-limit: "前回のリクエストから{interval}ミリ秒経っていない場合はリクエストできません。"
show-src: "Vous pouvez voir le code source ce point de communication." show-src: "Vous pouvez voir le code source ce point de communication."

View File

@ -6,6 +6,19 @@ common:
misskey: "A ⭐ of fediverse" misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse." about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。" about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
intro:
title: "Misskeyって"
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
features: "特徴"
rich-contents: "投稿"
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
reaction: "リアクション"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "インターフェース"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "ドライブ"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
adblock: adblock:
detected: "広告ブロッカーを無効にしてください" detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
@ -68,6 +81,15 @@ common:
confused: "こまこまのこまり" confused: "こまこまのこまり"
rip: "RIP" rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-visibility:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
note-placeholders: note-placeholders:
a: "今どうしてる?" a: "今どうしてる?"
b: "何かありましたか?" b: "何かありましたか?"
@ -231,6 +253,9 @@ common/views/components/connect-failed.troubleshooter.vue:
success-desc: "正常に接続できるようです。ページを再度読み込みしてください。" success-desc: "正常に接続できるようです。ページを再度読み込みしてください。"
flush: "キャッシュの削除" flush: "キャッシュの削除"
set-version: "バージョン指定" set-version: "バージョン指定"
common/views/components/cw-button.vue:
hide: "隠す"
show: "もっと見る"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "ユーザーを探す" search-user: "ユーザーを探す"
you: "あなた" you: "あなた"
@ -569,8 +594,6 @@ 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: "リトライ"
@ -640,6 +663,9 @@ desktop/views/components/settings.vue:
behaviour: "動作" behaviour: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。" fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
auto-popout: "ウィンドウの自動ポップアウト" auto-popout: "ウィンドウの自動ポップアウト"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。" auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "詳細設定" advanced: "詳細設定"
@ -651,6 +677,7 @@ desktop/views/components/settings.vue:
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "ダークモード"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用" gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -751,7 +778,7 @@ desktop/views/components/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
save: "保存" save: "保存"
locked-account: "アカウントの保護" locked-account: "アカウントの保護"
is-locked: "投稿を非公開にする" is-locked: "フォローを承認制にする"
other: "その他" other: "その他"
is-bot: "このアカウントはBotです" is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
@ -865,7 +892,10 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる" signin-button: "やってる"
signup-button: "やる" signup-button: "やる"
timeline: "タイムライン" timeline: "タイムライン"
announcements: "お知らせ"
photos: "最近の画像"
powered-by-misskey: "Powered by <b>Misskey</b>." powered-by-misskey: "Powered by <b>Misskey</b>."
info: "情報"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -1002,8 +1032,6 @@ mobile/views/components/friends-maker.vue:
close: "閉じる" close: "閉じる"
mobile/views/components/note.vue: mobile/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
more: "もっと見る"
less: "隠す"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
location: "位置情報" location: "位置情報"
@ -1132,6 +1160,9 @@ mobile/views/pages/settings/settings.profile.vue:
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -1153,6 +1184,7 @@ mobile/views/pages/settings.vue:
dark-mode: "ダークモード" dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている" i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
@ -1161,8 +1193,14 @@ mobile/views/pages/settings.vue:
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
notification-position: "通知の表示"
notification-position-bottom: "下"
notification-position-top: "上"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する" load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する" load-remote-media: "リモートサーバーのメディアを表示する"
@ -1182,7 +1220,7 @@ mobile/views/pages/settings.vue:
settings: "設定" settings: "設定"
signout: "サインアウト" signout: "サインアウト"
sound: "サウンド" sound: "サウンド"
enableSounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
mobile/views/pages/user.vue: mobile/views/pages/user.vue:
follows-you: "フォローされています" follows-you: "フォローされています"
following: "フォロー" following: "フォロー"

View File

@ -6,6 +6,19 @@ common:
misskey: "A ⭐ of fediverse" misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse." about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。" about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
intro:
title: "Misskeyって"
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
features: "特徴"
rich-contents: "投稿"
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
reaction: "リアクション"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "インターフェース"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "ドライブ"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
adblock: adblock:
detected: "広告ブロッカーを無効にしてください" detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
@ -73,6 +86,16 @@ common:
rip: "RIP" rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-visibility:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
note-placeholders: note-placeholders:
a: "今どうしてる?" a: "今どうしてる?"
b: "何かありましたか?" b: "何かありましたか?"
@ -93,6 +116,8 @@ common:
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける" use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
verified-user: "公式アカウント" verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする" disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
always-show-nsfw: "常に閲覧注意のメディアを表示する"
this-setting-is-this-device-only: "このデバイスのみ"
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。' do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
@ -250,6 +275,10 @@ common/views/components/connect-failed.troubleshooter.vue:
flush: "キャッシュの削除" flush: "キャッシュの削除"
set-version: "バージョン指定" set-version: "バージョン指定"
common/views/components/cw-button.vue:
hide: "隠す"
show: "もっと見る"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "ユーザーを探す" search-user: "ユーザーを探す"
you: "あなた" you: "あなた"
@ -643,8 +672,6 @@ 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: "読み込みに失敗しました。"
@ -724,6 +751,9 @@ desktop/views/components/settings.vue:
behaviour: "動作" behaviour: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。" fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
auto-popout: "ウィンドウの自動ポップアウト" auto-popout: "ウィンドウの自動ポップアウト"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。" auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "詳細設定" advanced: "詳細設定"
@ -736,6 +766,7 @@ desktop/views/components/settings.vue:
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "ダークモード"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用" gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -851,7 +882,7 @@ desktop/views/components/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
save: "保存" save: "保存"
locked-account: "アカウントの保護" locked-account: "アカウントの保護"
is-locked: "投稿を非公開にする" is-locked: "フォローを承認制にする"
other: "その他" other: "その他"
is-bot: "このアカウントはBotです" is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
@ -993,6 +1024,7 @@ desktop/views/pages/welcome.vue:
announcements: "お知らせ" announcements: "お知らせ"
photos: "最近の画像" photos: "最近の画像"
powered-by-misskey: "Powered by <b>Misskey</b>." powered-by-misskey: "Powered by <b>Misskey</b>."
info: "情報"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
@ -1164,8 +1196,6 @@ mobile/views/components/friends-maker.vue:
mobile/views/components/note.vue: mobile/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
more: "もっと見る"
less: "隠す"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
location: "位置情報" location: "位置情報"
@ -1325,6 +1355,9 @@ mobile/views/pages/settings/settings.profile.vue:
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -1349,6 +1382,7 @@ mobile/views/pages/settings.vue:
dark-mode: "ダークモード" dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている" i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
@ -1362,6 +1396,9 @@ mobile/views/pages/settings.vue:
notification-position-top: "上" notification-position-top: "上"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する" load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する" load-remote-media: "リモートサーバーのメディアを表示する"
@ -1381,7 +1418,7 @@ mobile/views/pages/settings.vue:
settings: "設定" settings: "設定"
signout: "サインアウト" signout: "サインアウト"
sound: "サウンド" sound: "サウンド"
enableSounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
mobile/views/pages/user.vue: mobile/views/pages/user.vue:
follows-you: "フォローされています" follows-you: "フォローされています"

View File

@ -6,6 +6,19 @@ common:
misskey: "A ⭐ of fediverse" misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse." about-title: "A ⭐ of fediverse."
about: "ようMisskeyを見つけてくれて、おおきにやで。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>やねん。Fediverse(ぎょうさんのSNSで構成されとる宇宙)っちゅうもんの中におるから、お隣さんのSNSとも仲良うさせてもろてんねん。ちょいとやかましい心斎橋から離れて、新しいインターネットにダイブしてみぃひん" about: "ようMisskeyを見つけてくれて、おおきにやで。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>やねん。Fediverse(ぎょうさんのSNSで構成されとる宇宙)っちゅうもんの中におるから、お隣さんのSNSとも仲良うさせてもろてんねん。ちょいとやかましい心斎橋から離れて、新しいインターネットにダイブしてみぃひん"
intro:
title: "Misskeyってなんやねん"
about: "Misskeyってのはな、オープンソースの<b>分散型マイクロブログSNS</b>のことや。ごっついええ感じにできるUIやったり、投稿へのリアクションやったり、ファイルをまとめとけるドライブやったり、いろんな機能が目白押しや。Fediverseに対応しとるから、よそのSNSともリツッコミできるんやで。タイガースが東京ドームに野球しに行くようなもんや。"
features: "ええとこ"
rich-contents: "投稿"
rich-contents-desc: "思っとること、タイガースの実況、他に言いたいことがあればなんでも言ってええで。いろんな構文あるから、好きにつこうてくれや。画像や動画、アンケートも添付できるで。"
reaction: "リアクション"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "インターフェース"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "ドライブ"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
adblock: adblock:
detected: "広告ブロッカーを無効にしてや" detected: "広告ブロッカーを無効にしてや"
warning: "<strong>Misskeyは広告を掲載してへん</strong>けど、広告をブロックしはる機能がおると一部の機能が利用できんくなったり、不具合が発生するかも分からん。知らんけど。" warning: "<strong>Misskeyは広告を掲載してへん</strong>けど、広告をブロックしはる機能がおると一部の機能が利用できんくなったり、不具合が発生するかも分からん。知らんけど。"
@ -68,6 +81,15 @@ common:
confused: "こまこまのこまりやわぁ" confused: "こまこまのこまりやわぁ"
rip: "RIP" rip: "RIP"
pudding: "アメちゃんちゃうんちゃう?" pudding: "アメちゃんちゃうんちゃう?"
note-visibility:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
note-placeholders: note-placeholders:
a: "今なにしてん?" a: "今なにしてん?"
b: "何かあったんか?" b: "何かあったんか?"
@ -231,6 +253,9 @@ common/views/components/connect-failed.troubleshooter.vue:
success-desc: "正常に接続できるようやわ。ページを再度読み込みしてな。" success-desc: "正常に接続できるようやわ。ページを再度読み込みしてな。"
flush: "キャッシュの削除" flush: "キャッシュの削除"
set-version: "バージョン指定" set-version: "バージョン指定"
common/views/components/cw-button.vue:
hide: "隠す"
show: "もっと見る"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "ユーザーを探す" search-user: "ユーザーを探す"
you: "あんさん" you: "あんさん"
@ -261,7 +286,7 @@ common/views/components/nav.vue:
develop: "開発者" develop: "開発者"
feedback: "フィードバック" feedback: "フィードバック"
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
detail: "詳細" detail: "もっと"
copy-link: "リンクをコピー" copy-link: "リンクをコピー"
favorite: "お気に入り" favorite: "お気に入り"
pin: "ピン留め" pin: "ピン留め"
@ -289,7 +314,7 @@ common/views/components/signin.vue:
token: "トークン" token: "トークン"
signing-in: "サインイン中や..." signing-in: "サインイン中や..."
signin: "サインイン" signin: "サインイン"
or: "または" or: "それか"
signin-with-twitter: "Twitterでサインイン" signin-with-twitter: "Twitterでサインイン"
login-failed: "なんかログインできんかったわ。ユーザー名とパスワードとかを確認してや。" login-failed: "なんかログインできんかったわ。ユーザー名とパスワードとかを確認してや。"
common/views/components/signup.vue: common/views/components/signup.vue:
@ -299,12 +324,12 @@ common/views/components/signup.vue:
checking: "確認中や…" checking: "確認中や…"
available: "使えるで" available: "使えるで"
unavailable: "もう使われとるで" unavailable: "もう使われとるで"
error: "通信エラー" error: "通信あかんわ"
invalid-format: "a~z、A~Z、0~9、_が使えるで" invalid-format: "a~z、A~Z、0~9、_が使えるで"
too-short: "1文字以上でお願いします" too-short: "1文字以上で!"
too-long: "20文字以内でお願いします" too-long: "20文字以内でお願いします"
password: "パスワード" password: "パスワード"
password-placeholder: "8文字以上を推奨します" password-placeholder: "8文字以上にしときや"
weak-password: "へぼいパスワード" weak-password: "へぼいパスワード"
normal-password: "ぼちぼちなパスワード" normal-password: "ぼちぼちなパスワード"
strong-password: "良さげなパスワード" strong-password: "良さげなパスワード"
@ -319,18 +344,18 @@ common/views/components/special-message.vue:
new-year: "Happy New Year!" new-year: "Happy New Year!"
christmas: "Merry Christmas!" christmas: "Merry Christmas!"
common/views/components/stream-indicator.vue: common/views/components/stream-indicator.vue:
connecting: "接続中" connecting: "つないどるで"
reconnecting: "再接続中" reconnecting: "つなぎ直すで"
connected: "接続完了" connected: "つないだわ"
common/views/components/twitter-setting.vue: common/views/components/twitter-setting.vue:
description: "あんさんがつことるTwitterアカウントをMisskeyアカウントに接続しとくと、あんさんのプロフィールにTwitterアカウント情報が表示されるようになったり、Twitterをつこた便利なサインインが使えるようになったりすんで。" description: "あんさんがつことるTwitterアカウントをMisskeyアカウントに接続しとくと、あんさんのプロフィールにTwitterアカウント情報が表示されるようになったり、Twitterをつこた便利なサインインが使えるようになったりすんで。"
connected-to: "次のTwitterアカウントに接続されとるで" connected-to: "次のTwitterアカウントに接続されとるで"
detail: "詳細..." detail: "詳細..."
reconnect: "再接続する" reconnect: "つなぎ直す"
connect: "Twitterと接続する" connect: "Twitterと接続する"
disconnect: "切断する" disconnect: "さいならする"
common/views/components/uploader.vue: common/views/components/uploader.vue:
waiting: "待機中" waiting: "待っとる"
common/views/components/visibility-chooser.vue: common/views/components/visibility-chooser.vue:
public: "公開" public: "公開"
home: "ホーム" home: "ホーム"
@ -344,7 +369,7 @@ common/views/components/trends.vue:
count: "{}人が投稿" count: "{}人が投稿"
empty: "トレンドなし" empty: "トレンドなし"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "確認中" fetching: "見てみるわ…"
no-broadcasts: "お知らせはあらへんで" no-broadcasts: "お知らせはあらへんで"
have-a-nice-day: "良い一日を!" have-a-nice-day: "良い一日を!"
next: "次" next: "次"
@ -371,12 +396,12 @@ common/views/widgets/server.vue:
toggle: "表示を切り替え" toggle: "表示を切り替え"
common/views/widgets/memo.vue: common/views/widgets/memo.vue:
title: "付箋" title: "付箋"
memo: "ここに書いて" memo: "書くんや"
save: "保存" save: "保存"
common/views/widgets/slideshow.vue: common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するんやったら、一旦カスタマイズモードを終了してや" folder-customize-mode: "フォルダを指定するんやったら、一旦カスタマイズモードを終了してや"
folder: "クリックしてフォルダを指定してください" folder: "クリックしてフォルダ決めてや"
no-image: "このフォルダには画像がありません" no-image: "このフォルダには画像無いわ"
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>で投稿フォームを開くで"
@ -409,13 +434,13 @@ desktop:
banner: "バナー" banner: "バナー"
uploading-banner: "新しいバナーをアップロードしとるで" uploading-banner: "新しいバナーをアップロードしとるで"
banner-updated: "バナーを更新したで" banner-updated: "バナーを更新したで"
choose-banner: "バナーにする画像を選択" choose-banner: "バナーにする画像選んでや"
avatar-crop-title: "アバターとして表示する部分を選択" avatar-crop-title: "どこアバターとして出しとく?"
avatar: "アバター" avatar: "アバター"
uploading-avatar: "新しいアバターをアップロードしています" uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました" avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択" choose-avatar: "アバターにする画像を選択"
invalid-filetype: "この形式のファイルはサポートされていません" invalid-filetype: "この形式のファイル無理やねん"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -467,29 +492,29 @@ desktop/views/components/drive-window.vue:
desktop/views/components/drive.file.vue: desktop/views/components/drive.file.vue:
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
nsfw: "閲覧注意" nsfw: "見たらあかんで"
contextmenu: contextmenu:
rename: "名前を変えるで" rename: "名前を変えるで"
mark-as-sensitive: "閲覧注意に設定" mark-as-sensitive: "見たらあかん感じにしとく"
unmark-as-sensitive: "閲覧注意を解除" unmark-as-sensitive: "やっぱ見せたるわ"
copy-url: "URLをコピー" copy-url: "URLをコピー"
download: "ダウンロード" download: "ダウンロード"
else-files: "その他..." else-files: "もっとあるで…"
set-as-avatar: "アイコンに設定" set-as-avatar: "アイコンにする"
set-as-banner: "バナーに設定" set-as-banner: "バナーにする"
open-in-app: "アプリで開く" open-in-app: "アプリで開く"
add-app: "アプリを追加" add-app: "アプリ増やす"
rename-file: "ファイル名の変更" rename-file: "ファイル名をいらう(変える)"
input-new-file-name: "新しいファイル名を入力してや" input-new-file-name: "新しいファイル名を入力してや"
copied: "コピー完了や" copied: "コピー完了や"
copied-url-to-clipboard: "URLをクリップボードにコピーしました" copied-url-to-clipboard: "URLをクリップボードにした"
desktop/views/components/drive.folder.vue: desktop/views/components/drive.folder.vue:
unable-to-process: "操作を完了できません" unable-to-process: "あかん、無理やわ"
circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。" circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダー。"
unhandled-error: "ようわからん" unhandled-error: "ようわからん"
contextmenu: contextmenu:
move-to-this-folder: "このフォルダへ移動" move-to-this-folder: "ここに持ってくるわ"
show-in-new-window: "新しいウィンドウで表示" show-in-new-window: "新しいウィンドウで出す"
rename: "名前を変えるで" rename: "名前を変えるで"
rename-folder: "フォルダ名を変えるで" rename-folder: "フォルダ名を変えるで"
input-new-folder-name: "新しいフォルダ名を入力してや" input-new-folder-name: "新しいフォルダ名を入力してや"
@ -497,24 +522,24 @@ desktop/views/components/drive.nav-folder.vue:
drive: "ドライブ" drive: "ドライブ"
desktop/views/components/drive.vue: desktop/views/components/drive.vue:
search: "検索" search: "検索"
load-more: "もっと読み込む" load-more: "もっとあらへんのか!"
empty-draghover: "ドロップですか?いいですよ、ボクはカワイイですからね" empty-draghover: "ドロップですか?いいですよ、ボクはカワイイですからね"
empty-drive: "ドライブには何もあらへんで。" empty-drive: "ドライブには何もあらへんで。"
empty-drive-description: "右クリックして「ファイルをアップロード」を選んだり、ファイルをドラッグ&ドロップすることでもアップロードできます。" empty-drive-description: "右クリックして「ファイルをアップロード」を選んだり、ファイルをドラッグ&ドロップすることでもアップロードできます。"
empty-folder: "このフォルダーは空です" empty-folder: "このフォルダーは空です"
unable-to-process: "操作を完了できません" unable-to-process: "あかん、無理やわ"
circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。" circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。"
unhandled-error: "不明なエラー" unhandled-error: "ようわからん"
url-upload: "URLアップロード" url-upload: "URLアップロード"
url-of-file: "アップロードしたいファイルのURL" url-of-file: "このURLのファイルをアップロードしたいねん"
url-upload-requested: "アップロードをリクエストしました" url-upload-requested: "アップロードしたい言うといたで"
may-take-time: "アップロードが完了するまで時間がかかる場合があります。" may-take-time: "アップロードが完了するまで時間がかかる場合があります。"
create-folder: "フォルダー作成" create-folder: "フォルダー作成"
folder-name: "フォルダー名" folder-name: "フォルダー名"
contextmenu: contextmenu:
create-folder: "フォルダーを作成" create-folder: "フォルダー作る"
upload: "ファイルをアップロード" upload: "ファイル上げる"
url-upload: "URLからアップロード" url-upload: "URLつこうて上げる"
desktop/views/components/media-image.vue: desktop/views/components/media-image.vue:
sensitive: "ちょっと見せられへんわ" sensitive: "ちょっと見せられへんわ"
click-to-show: "クリックして見せるで" click-to-show: "クリックして見せるで"
@ -522,30 +547,30 @@ desktop/views/components/media-video.vue:
sensitive: "ちょっと見せられへんわ" sensitive: "ちょっと見せられへんわ"
click-to-show: "クリックして見せるで" click-to-show: "クリックして見せるで"
desktop/views/components/follow-button.vue: desktop/views/components/follow-button.vue:
following: "フォロー" following: "フォローしとる"
follow: "フォロー" follow: "フォロー"
request-pending: "フォロー許可待ち" request-pending: "フォローの許し待っとる"
follow-request: "フォロー申請" follow-request: "フォロー許してくれや!言うてみる"
desktop/views/components/followers-window.vue: desktop/views/components/followers-window.vue:
followers: "{} のフォロワー" followers: "{} のフォロワー"
desktop/views/components/followers.vue: desktop/views/components/followers.vue:
empty: "フォロワーはいないようです。" empty: "フォロワーはおらんっぽいで、知らんけど。"
desktop/views/components/following-window.vue: desktop/views/components/following-window.vue:
following: "{} のフォロー" following: "{} のフォロー"
desktop/views/components/following.vue: desktop/views/components/following.vue:
empty: "フォロー中のユーザーはいないようです。" empty: "フォロー中のユーザーはおらんっぽいで、知らんけど。"
desktop/views/components/friends-maker.vue: desktop/views/components/friends-maker.vue:
title: "気になるユーザーをフォロー:" title: "おもろそうやな:"
empty: "おすすめのユーザーは見つかりませんでした。" empty: "おもろいユーザー居らんかったわ"
fetching: "読み込んでいます" fetching: "読みこんどるで…"
refresh: "もっと見る" refresh: "もっとあるやろ!"
close: "閉じる" close: "閉じる"
desktop/views/components/game-window.vue: desktop/views/components/game-window.vue:
game: "ゲーム" game: "ゲーム"
desktop/views/components/home.vue: desktop/views/components/home.vue:
done: "完了" done: "完了"
add-widget: "ウィジェットを追加:" add-widget: "ウィジェット増やす"
add: "追加" add: "増やす"
desktop/views/input-dialog.vue: desktop/views/input-dialog.vue:
cancel: "やめとくわ" cancel: "やめとくわ"
ok: "決定" ok: "決定"
@ -554,32 +579,30 @@ desktop/views/components/messaging-room-window.vue:
desktop/views/components/messaging-window.vue: desktop/views/components/messaging-window.vue:
title: "メッセージ" title: "メッセージ"
desktop/views/components/note-detail.vue: desktop/views/components/note-detail.vue:
more: "会話をもっと読み込む" more: "もっと会話あるやろ!"
private: "この投稿は非公開です" private: "この投稿は見せられへんわ"
deleted: "この投稿は削除されました" deleted: "この投稿なんか無くなってもうたわ"
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
location: "位置情報" location: "ここおるで:"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
desktop/views/components/notes.note.vue: desktop/views/components/notes.note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
reply: "返" reply: "返"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
detail: "詳細" detail: "詳細"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
hide: "隠す"
see-more: "もっと見る"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "読み込みに失敗しました。" error: "あかん、読み込めへんわ"
retry: "リトライ" retry: "もっぺん"
load-more: "もっと読み込む" load-more: "もっとあらへんのか!"
desktop/views/components/notifications.vue: desktop/views/components/notifications.vue:
more: "もっと見る" more: "もっとあるやろ!"
empty: "ありません!" empty: "あらへん!"
desktop/views/components/post-form.vue: desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加" add-visible-user: "+ユーザー増やす"
attach-location-information: "いる場所くっつけるで" attach-location-information: "いる場所くっつけるで"
hide-contents: "内容を隠す" hide-contents: "内容を隠す"
reply-placeholder: "この投稿への返信..." reply-placeholder: "この投稿への返信..."
@ -589,13 +612,13 @@ desktop/views/components/post-form.vue:
renote: "Renote" renote: "Renote"
posted: "投稿したで!" posted: "投稿したで!"
replied: "返信したで!" replied: "返信したで!"
reposted: "Renoteしました!" reposted: "Renoteした"
note-failed: "投稿に失敗したで" note-failed: "投稿に失敗したで"
reply-failed: "返信に失敗したで" reply-failed: "返信に失敗したで"
renote-failed: "Renoteに失敗しました" renote-failed: "Renoteでけへん"
posting: "投稿中" posting: "投稿中"
attach-media-from-local: "PCからメディアを添付" attach-media-from-local: "PCからメディア持ってくる"
attach-media-from-drive: "ドライブからメディアを添付" attach-media-from-drive: "ドライブからメディア持ってくる"
attach-cancel: "くっつけるのやめよか" attach-cancel: "くっつけるのやめよか"
insert-a-kao: "v('ω')v" insert-a-kao: "v('ω')v"
create-poll: "アンケートを作成" create-poll: "アンケートを作成"
@ -606,16 +629,16 @@ desktop/views/components/post-form.vue:
geolocation-alert: "あんさんのつことる端末は位置情報に対応しとらんみたいやわ、知らんけど。" geolocation-alert: "あんさんのつことる端末は位置情報に対応しとらんみたいやわ、知らんけど。"
error: "エラー" error: "エラー"
enter-username: "ユーザー名を入力してや" enter-username: "ユーザー名を入力してや"
annotations: "内容への注釈 (オプション)" annotations: "もっと教えてな(別にええけど)"
desktop/views/components/post-form-window.vue: desktop/views/components/post-form-window.vue:
note: "新規投稿" note: "新規投稿"
reply: "返" reply: "返"
attaches: "添付: {}メディア" attaches: "添付: {}メディア"
uploading-media: "{}個のメディアをアップロード中" uploading-media: "{}個のメディアを上げてるで…"
desktop/views/components/progress-dialog.vue: desktop/views/components/progress-dialog.vue:
waiting: "待機中" waiting: "待っとる"
desktop/views/components/renote-form.vue: desktop/views/components/renote-form.vue:
quote: "引用する..." quote: "持ってくる…"
cancel: "やめとくわ" cancel: "やめとくわ"
renote: "Renote" renote: "Renote"
reposting: "しています..." reposting: "しています..."
@ -640,6 +663,9 @@ desktop/views/components/settings.vue:
behaviour: "動作" behaviour: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。" fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
auto-popout: "ウィンドウの自動ポップアウト" auto-popout: "ウィンドウの自動ポップアウト"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。" auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "詳細設定" advanced: "詳細設定"
@ -649,37 +675,38 @@ desktop/views/components/settings.vue:
customize: "ホームをカスタマイズ" customize: "ホームをカスタマイズ"
choose-wallpaper: "壁紙を選択" choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "夜にすんで"
circle-icons: "円形のアイコンを使用" circle-icons: "アイコンもタコ焼きも丸いやんな?"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用" contrasted-acct: "ユーザー名ようわからんし見やすしといて"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" gradient-window-header: "ウィンドウのタイトルバーにグラデーション付ける"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" post-form-on-timeline: "タイムラインの上の方で投稿できるようにせえへん?"
show-clock-on-header: "右上に時計を表示す" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示すんで"
show-reply-target: "リプライ先を表示する" show-clock-on-header: "右上をカリヨン広場にする(時計表示)"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-reply-target: "どこにリプライするんや見せて"
show-renoted-my-notes: "自分の投稿のRenoteタイムラインに表示する" show-my-renotes: "わしのRenoteタイムライン載せてくれや"
show-local-renotes: "ローカルの投稿のRenoteタイムラインに表示する" show-renoted-my-notes: "わしのRenoteタイムライン載せてくれや"
show-maps: "マップの自動展開" show-local-renotes: "ローカル投稿のRenoteも見たいんや"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。" show-maps: "地図勝手にバァーって開いてくれ"
show-maps-desc: "どこにおるんかわかっとる投稿の地図は自動で見せるで"
sound: "サウンド" sound: "サウンド"
enable-sounds: "サウンドを有効にする" enable-sounds: "サウンド鳴らす"
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。" enable-sounds-desc: "投稿やメッセージもろたとき、音鳴らしたるわ。大丈夫や、この設定はブラウザが覚えてくれとる。"
volume: "ボリューム" volume: "ボリューム"
test: "テスト" test: "テスト"
mobile: "モバイル" mobile: "モバイル"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグなんて要らんわ"
language: "言語" language: "言語"
pick-language: "言語を選択" pick-language: "言語選んでや"
recommended: "推奨" recommended: "おすすめ"
auto: "自動" auto: "自動"
specify-language: "言語を指定" specify-language: "言語選んでくれ"
language-desc: "変更はページの再度読み込み後に反映されます。" language-desc: "変更はページの再度読み込み後に反映されんで。"
cache: "キャッシュ" cache: "キャッシュ"
clean-cache: "クリーンアップ" clean-cache: "お掃除"
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。" cache-warn: "お掃除するとな、ブラウザが覚えてくれとるアカウントのあれこれや書きかけの投稿・返信・メッセージや設定情報なんかのデータが全部飛んでいくんや。これやったらページ再読込しといてな。"
cache-cleared: "キャッシュを削除しました" cache-cleared: "キャッシュお掃除したで"
cache-cleared-desc: "ページを再度読み込みしてください。" cache-cleared-desc: "もっぺんページ読みこみ直してくれや"
auto-watch: "投稿の自動ウォッチ" auto-watch: "投稿勝手にウォッチしといてや"
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。" auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
about: "Misskeyについて" about: "Misskeyについて"
operator: "このサーバーの運営者" operator: "このサーバーの運営者"
@ -751,7 +778,7 @@ desktop/views/components/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
save: "保存" save: "保存"
locked-account: "アカウントの保護" locked-account: "アカウントの保護"
is-locked: "投稿を非公開にする" is-locked: "フォローを承認制にする"
other: "その他" other: "その他"
is-bot: "このアカウントはBotです" is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
@ -865,7 +892,10 @@ desktop/views/pages/welcome.vue:
signin-button: "サインイン中…" signin-button: "サインイン中…"
signup-button: "サインアップ" signup-button: "サインアップ"
timeline: "タイムライン" timeline: "タイムライン"
announcements: "お知らせ"
photos: "最近の画像"
powered-by-misskey: "Powered by <b>Misskey</b>." powered-by-misskey: "Powered by <b>Misskey</b>."
info: "情報"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "ドライブ" title: "ドライブ"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -1002,8 +1032,6 @@ mobile/views/components/friends-maker.vue:
close: "閉じる" close: "閉じる"
mobile/views/components/note.vue: mobile/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
more: "もっと見る"
less: "隠す"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
location: "位置情報" location: "位置情報"
@ -1132,6 +1160,9 @@ mobile/views/pages/settings/settings.profile.vue:
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -1153,6 +1184,7 @@ mobile/views/pages/settings.vue:
dark-mode: "ダークモード" dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている" i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
@ -1161,8 +1193,14 @@ mobile/views/pages/settings.vue:
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "べっぴんさん" post-style-smart: "べっぴんさん"
notification-position: "通知の表示"
notification-position-bottom: "下"
notification-position-top: "上"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する" load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する" load-remote-media: "リモートサーバーのメディアを表示する"
@ -1182,7 +1220,7 @@ mobile/views/pages/settings.vue:
settings: "設定" settings: "設定"
signout: "サインアウト" signout: "サインアウト"
sound: "サウンド" sound: "サウンド"
enableSounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
mobile/views/pages/user.vue: mobile/views/pages/user.vue:
follows-you: "フォローされています" follows-you: "フォローされています"
following: "フォロー" following: "フォロー"

View File

@ -6,6 +6,19 @@ common:
misskey: "A ⭐ of fediverse" misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse." about-title: "A ⭐ of fediverse."
about: "Misskey를 찾아 주셔서 감사합니다. Misskey은 지구에서 태어난 <b>분산 마이크로 블로그 SNS </b> 입니다. Fediverse (다양한 SNS로 구성되는 우주)에 존재하는 다른 SNS와 상호 연결되어 있습니다. 잠시 도시의 번잡함에서 벗어나 새로운 인터넷에 다이브 해 보지 않겠습니까." about: "Misskey를 찾아 주셔서 감사합니다. Misskey은 지구에서 태어난 <b>분산 마이크로 블로그 SNS </b> 입니다. Fediverse (다양한 SNS로 구성되는 우주)에 존재하는 다른 SNS와 상호 연결되어 있습니다. 잠시 도시의 번잡함에서 벗어나 새로운 인터넷에 다이브 해 보지 않겠습니까."
intro:
title: "Misskeyって"
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
features: "特徴"
rich-contents: "投稿"
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
reaction: "リアクション"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "インターフェース"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "ドライブ"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
adblock: adblock:
detected: "광고 차단기를 해제하십시오" detected: "광고 차단기를 해제하십시오"
warning: "<strong>Misskey는 광고를 게재하지 않습니다</strong> 그러나 광고를 차단하는 기능 기능을 사용할 경우 일부 기능을 사용할 수 없게 될 가능성이나 결함이 발생하는 경우가 있습니다." warning: "<strong>Misskey는 광고를 게재하지 않습니다</strong> 그러나 광고를 차단하는 기능 기능을 사용할 경우 일부 기능을 사용할 수 없게 될 가능성이나 결함이 발생하는 경우가 있습니다."
@ -68,6 +81,15 @@ common:
confused: "곤란하고 있어" confused: "곤란하고 있어"
rip: "RIP" rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-visibility:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
note-placeholders: note-placeholders:
a: "지금 어떻게하고있어?" a: "지금 어떻게하고있어?"
b: "뭔가 있었습니까?" b: "뭔가 있었습니까?"
@ -231,6 +253,9 @@ common/views/components/connect-failed.troubleshooter.vue:
success-desc: "正常に接続できるようです。ページを再度読み込みしてください。" success-desc: "正常に接続できるようです。ページを再度読み込みしてください。"
flush: "キャッシュの削除" flush: "キャッシュの削除"
set-version: "バージョン指定" set-version: "バージョン指定"
common/views/components/cw-button.vue:
hide: "隠す"
show: "もっと見る"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "ユーザーを探す" search-user: "ユーザーを探す"
you: "당신" you: "당신"
@ -569,8 +594,6 @@ 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: "リトライ"
@ -640,6 +663,9 @@ desktop/views/components/settings.vue:
behaviour: "動作" behaviour: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。" fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
auto-popout: "ウィンドウの自動ポップアウト" auto-popout: "ウィンドウの自動ポップアウト"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。" auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "詳細設定" advanced: "詳細設定"
@ -651,6 +677,7 @@ desktop/views/components/settings.vue:
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "ダークモード"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用" gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -751,7 +778,7 @@ desktop/views/components/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
save: "保存" save: "保存"
locked-account: "アカウントの保護" locked-account: "アカウントの保護"
is-locked: "投稿を非公開にする" is-locked: "フォローを承認制にする"
other: "その他" other: "その他"
is-bot: "このアカウントはBotです" is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
@ -865,7 +892,10 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる" signin-button: "やってる"
signup-button: "やる" signup-button: "やる"
timeline: "タイムライン" timeline: "タイムライン"
announcements: "お知らせ"
photos: "最近の画像"
powered-by-misskey: "Powered by <b>Misskey</b>." powered-by-misskey: "Powered by <b>Misskey</b>."
info: "情報"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -1002,8 +1032,6 @@ mobile/views/components/friends-maker.vue:
close: "閉じる" close: "閉じる"
mobile/views/components/note.vue: mobile/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
more: "もっと見る"
less: "隠す"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
location: "位置情報" location: "位置情報"
@ -1132,6 +1160,9 @@ mobile/views/pages/settings/settings.profile.vue:
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -1153,6 +1184,7 @@ mobile/views/pages/settings.vue:
dark-mode: "ダークモード" dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている" i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
@ -1161,8 +1193,14 @@ mobile/views/pages/settings.vue:
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
notification-position: "通知の表示"
notification-position-bottom: "下"
notification-position-top: "上"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する" load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する" load-remote-media: "リモートサーバーのメディアを表示する"
@ -1182,7 +1220,7 @@ mobile/views/pages/settings.vue:
settings: "設定" settings: "設定"
signout: "サインアウト" signout: "サインアウト"
sound: "サウンド" sound: "サウンド"
enableSounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
mobile/views/pages/user.vue: mobile/views/pages/user.vue:
follows-you: "フォローされています" follows-you: "フォローされています"
following: "フォロー" following: "フォロー"

View File

@ -6,6 +6,19 @@ common:
misskey: "Deel alles met anderen die ook Misskey gebruiken." misskey: "Deel alles met anderen die ook Misskey gebruiken."
about-title: "A ⭐ of fediverse." about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。" about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
intro:
title: "Misskeyって"
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
features: "特徴"
rich-contents: "投稿"
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
reaction: "リアクション"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "インターフェース"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "ドライブ"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
adblock: adblock:
detected: "広告ブロッカーを無効にしてください" detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
@ -68,6 +81,15 @@ common:
confused: "Verward" confused: "Verward"
rip: "RIP" rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-visibility:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
note-placeholders: note-placeholders:
a: "今どうしてる?" a: "今どうしてる?"
b: "何かありましたか?" b: "何かありましたか?"
@ -231,6 +253,9 @@ common/views/components/connect-failed.troubleshooter.vue:
success-desc: "Het verbinden lijkt te lukken. Herlaad de pagina." success-desc: "Het verbinden lijkt te lukken. Herlaad de pagina."
flush: "Cache leegmaken" flush: "Cache leegmaken"
set-version: "Versie opgeven" set-version: "Versie opgeven"
common/views/components/cw-button.vue:
hide: "隠す"
show: "もっと見る"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "Gebruiker zoeken" search-user: "Gebruiker zoeken"
you: "Jij" you: "Jij"
@ -569,8 +594,6 @@ desktop/views/components/notes.note.vue:
detail: "Details tonen" detail: "Details tonen"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
hide: "隠す"
see-more: "もっと見る"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
error: "Laden mislukt." error: "Laden mislukt."
retry: "Opnieuw proberen" retry: "Opnieuw proberen"
@ -640,6 +663,9 @@ desktop/views/components/settings.vue:
behaviour: "Gedrag" behaviour: "Gedrag"
fetch-on-scroll: "Ophalen bij scrollen" fetch-on-scroll: "Ophalen bij scrollen"
fetch-on-scroll-desc: "Als je omlaag scrolt, wordt de rest van de inhoud automatisch opgehaald." fetch-on-scroll-desc: "Als je omlaag scrolt, wordt de rest van de inhoud automatisch opgehaald."
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
auto-popout: "Venster automatisch uitvouwen" auto-popout: "Venster automatisch uitvouwen"
auto-popout-desc: "Venster uitvouwen, indien mogelijk. Deze instelling wordt opgeslagen in je browser." auto-popout-desc: "Venster uitvouwen, indien mogelijk. Deze instelling wordt opgeslagen in je browser."
advanced: "Geavanceerde instellingen" advanced: "Geavanceerde instellingen"
@ -651,6 +677,7 @@ desktop/views/components/settings.vue:
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "Donkere modus" dark-mode: "Donkere modus"
circle-icons: "Ronde pictogrammen gebruiken" circle-icons: "Ronde pictogrammen gebruiken"
contrasted-acct: "ユーザー名にコントラストを付ける"
gradient-window-header: "Kleurverloop gebruiken op vensterkoppen" gradient-window-header: "Kleurverloop gebruiken op vensterkoppen"
post-form-on-timeline: "Berichtformulier boven de tijdlijn tonen" post-form-on-timeline: "Berichtformulier boven de tijdlijn tonen"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -751,7 +778,7 @@ desktop/views/components/settings.profile.vue:
birthday: "Geboortedatum" birthday: "Geboortedatum"
save: "Profiel bijwerken" save: "Profiel bijwerken"
locked-account: "アカウントの保護" locked-account: "アカウントの保護"
is-locked: "投稿を非公開にする" is-locked: "フォローを承認制にする"
other: "その他" other: "その他"
is-bot: "Dit account is een Bot" is-bot: "Dit account is een Bot"
is-cat: "Dit account is een Kat" is-cat: "Dit account is een Kat"
@ -865,7 +892,10 @@ desktop/views/pages/welcome.vue:
signin-button: "Inloggen" signin-button: "Inloggen"
signup-button: "Registreren" signup-button: "Registreren"
timeline: "Tijdlijn" timeline: "Tijdlijn"
announcements: "お知らせ"
photos: "最近の画像"
powered-by-misskey: "Powered by <b>Misskey</b>." powered-by-misskey: "Powered by <b>Misskey</b>."
info: "情報"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -1002,8 +1032,6 @@ mobile/views/components/friends-maker.vue:
close: "閉じる" close: "閉じる"
mobile/views/components/note.vue: mobile/views/components/note.vue:
reposted-by: "Renote door {}" reposted-by: "Renote door {}"
more: "もっと見る"
less: "隠す"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
location: "位置情報" location: "位置情報"
@ -1132,6 +1160,9 @@ mobile/views/pages/settings/settings.profile.vue:
avatar: "Gebruikersafbeelding" avatar: "Gebruikersafbeelding"
banner: "Omslagfoto" banner: "Omslagfoto"
is-cat: "Dit account is een Kat" is-cat: "Dit account is een Kat"
is-locked: "フォローを承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "Profiel bijwerken" save: "Profiel bijwerken"
saved: "Profiel bijgewerkt" saved: "Profiel bijgewerkt"
uploading: "Bezig met uploaden" uploading: "Bezig met uploaden"
@ -1153,6 +1184,7 @@ mobile/views/pages/settings.vue:
dark-mode: "Donkere modus" dark-mode: "Donkere modus"
i-am-under-limited-internet: "Ik heb beperkt internet" i-am-under-limited-internet: "Ik heb beperkt internet"
circle-icons: "Ronde pictogrammen gebruiken" circle-icons: "Ronde pictogrammen gebruiken"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "Tijdlijn" timeline: "Tijdlijn"
show-reply-target: "Antwoordknop tonen" show-reply-target: "Antwoordknop tonen"
show-my-renotes: "Mijn renotes tonen" show-my-renotes: "Mijn renotes tonen"
@ -1161,8 +1193,14 @@ mobile/views/pages/settings.vue:
post-style: "Berichtontwerp" post-style: "Berichtontwerp"
post-style-standard: "Standaard" post-style-standard: "Standaard"
post-style-smart: "Slim" post-style-smart: "Slim"
notification-position: "通知の表示"
notification-position-bottom: "下"
notification-position-top: "上"
behavior: "Gedrag" behavior: "Gedrag"
fetch-on-scroll: "Ophalen bij scrollen" fetch-on-scroll: "Ophalen bij scrollen"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
disable-via-mobile: "Zonder 'mobiele berichten'" disable-via-mobile: "Zonder 'mobiele berichten'"
load-raw-images: "添付された画像を高画質で表示する" load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する" load-remote-media: "リモートサーバーのメディアを表示する"
@ -1182,7 +1220,7 @@ mobile/views/pages/settings.vue:
settings: "Instellingen" settings: "Instellingen"
signout: "Uitloggen" signout: "Uitloggen"
sound: "サウンド" sound: "サウンド"
enableSounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
mobile/views/pages/user.vue: mobile/views/pages/user.vue:
follows-you: "Volgt jou" follows-you: "Volgt jou"
following: "Volgend" following: "Volgend"

View File

@ -6,6 +6,19 @@ common:
misskey: "A ⭐ of fediverse" misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse." about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。" about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
intro:
title: "Misskeyって"
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
features: "特徴"
rich-contents: "投稿"
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
reaction: "リアクション"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "インターフェース"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "ドライブ"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
adblock: adblock:
detected: "広告ブロッカーを無効にしてください" detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
@ -68,6 +81,15 @@ common:
confused: "Forvirret" confused: "Forvirret"
rip: "RIP" rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-visibility:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
note-placeholders: note-placeholders:
a: "今どうしてる?" a: "今どうしてる?"
b: "何かありましたか?" b: "何かありましたか?"
@ -231,6 +253,9 @@ common/views/components/connect-failed.troubleshooter.vue:
success-desc: "正常に接続できるようです。ページを再度読み込みしてください。" success-desc: "正常に接続できるようです。ページを再度読み込みしてください。"
flush: "キャッシュの削除" flush: "キャッシュの削除"
set-version: "バージョン指定" set-version: "バージョン指定"
common/views/components/cw-button.vue:
hide: "隠す"
show: "もっと見る"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "ユーザーを探す" search-user: "ユーザーを探す"
you: "あなた" you: "あなた"
@ -569,8 +594,6 @@ 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: "リトライ"
@ -640,6 +663,9 @@ desktop/views/components/settings.vue:
behaviour: "動作" behaviour: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。" fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
auto-popout: "ウィンドウの自動ポップアウト" auto-popout: "ウィンドウの自動ポップアウト"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。" auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "詳細設定" advanced: "詳細設定"
@ -651,6 +677,7 @@ desktop/views/components/settings.vue:
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "ダークモード"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用" gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -751,7 +778,7 @@ desktop/views/components/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
save: "保存" save: "保存"
locked-account: "アカウントの保護" locked-account: "アカウントの保護"
is-locked: "投稿を非公開にする" is-locked: "フォローを承認制にする"
other: "その他" other: "その他"
is-bot: "このアカウントはBotです" is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
@ -865,7 +892,10 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる" signin-button: "やってる"
signup-button: "やる" signup-button: "やる"
timeline: "タイムライン" timeline: "タイムライン"
announcements: "お知らせ"
photos: "最近の画像"
powered-by-misskey: "Powered by <b>Misskey</b>." powered-by-misskey: "Powered by <b>Misskey</b>."
info: "情報"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -1002,8 +1032,6 @@ mobile/views/components/friends-maker.vue:
close: "閉じる" close: "閉じる"
mobile/views/components/note.vue: mobile/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
more: "もっと見る"
less: "隠す"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
location: "位置情報" location: "位置情報"
@ -1132,6 +1160,9 @@ mobile/views/pages/settings/settings.profile.vue:
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -1153,6 +1184,7 @@ mobile/views/pages/settings.vue:
dark-mode: "ダークモード" dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている" i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
@ -1161,8 +1193,14 @@ mobile/views/pages/settings.vue:
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
notification-position: "通知の表示"
notification-position-bottom: "下"
notification-position-top: "上"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する" load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する" load-remote-media: "リモートサーバーのメディアを表示する"
@ -1182,7 +1220,7 @@ mobile/views/pages/settings.vue:
settings: "設定" settings: "設定"
signout: "サインアウト" signout: "サインアウト"
sound: "サウンド" sound: "サウンド"
enableSounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
mobile/views/pages/user.vue: mobile/views/pages/user.vue:
follows-you: "フォローされています" follows-you: "フォローされています"
following: "フォロー" following: "フォロー"

View File

@ -6,6 +6,19 @@ common:
misskey: "⭐ Fediwersum" misskey: "⭐ Fediwersum"
about-title: "⭐ Fediwersum" about-title: "⭐ Fediwersum"
about: "Dziękujemy za znalezienie Misskey. Misskey jest <b>zdecentralizowaną platformą mikroblogową</b> powstałą na Ziemi. Ponieważ działa ona w Fediwersum (uniwersum, w którego skład wchodzi wiele sieci społecznościowych), jest ona połączona z innymi platformami społecznościowymi. Spróbujesz odpocząć od zatłoczoneo miasta i zanurzyć się w nowym Internecie?" about: "Dziękujemy za znalezienie Misskey. Misskey jest <b>zdecentralizowaną platformą mikroblogową</b> powstałą na Ziemi. Ponieważ działa ona w Fediwersum (uniwersum, w którego skład wchodzi wiele sieci społecznościowych), jest ona połączona z innymi platformami społecznościowymi. Spróbujesz odpocząć od zatłoczoneo miasta i zanurzyć się w nowym Internecie?"
intro:
title: "Misskeyって"
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
features: "特徴"
rich-contents: "投稿"
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
reaction: "リアクション"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "インターフェース"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "ドライブ"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
adblock: adblock:
detected: "Spróbuj wyłączyć blokadę reklam." detected: "Spróbuj wyłączyć blokadę reklam."
warning: "<strong>Misskey nie zawiera reklam</strong>, ale część funkcji może nie działać prawidłowo z włączonym blokowaniem reklam." warning: "<strong>Misskey nie zawiera reklam</strong>, ale część funkcji może nie działać prawidłowo z włączonym blokowaniem reklam."
@ -68,6 +81,15 @@ common:
confused: "Zmieszany" confused: "Zmieszany"
rip: "RIP" rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-visibility:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
note-placeholders: note-placeholders:
a: "Co robisz?" a: "Co robisz?"
b: "Co się wydarzyło?" b: "Co się wydarzyło?"
@ -231,6 +253,9 @@ common/views/components/connect-failed.troubleshooter.vue:
success-desc: "Wygląda na to, że udało się połączyć. Odśwież stronę." success-desc: "Wygląda na to, że udało się połączyć. Odśwież stronę."
flush: "Wyczyść pamięć podręczną" flush: "Wyczyść pamięć podręczną"
set-version: "Określ wersję" set-version: "Określ wersję"
common/views/components/cw-button.vue:
hide: "隠す"
show: "もっと見る"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "Znajdź użytkownika" search-user: "Znajdź użytkownika"
you: "Ty" you: "Ty"
@ -569,8 +594,6 @@ 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"
@ -640,6 +663,9 @@ desktop/views/components/settings.vue:
behaviour: "Zachowanie" behaviour: "Zachowanie"
fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół" fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół"
fetch-on-scroll-desc: "Po przewinięciu na dół strony automatycznie zostaną załadowane nowe treści." fetch-on-scroll-desc: "Po przewinięciu na dół strony automatycznie zostaną załadowane nowe treści."
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
auto-popout: "Automatycznie pojawiające się okna" auto-popout: "Automatycznie pojawiające się okna"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。" auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "Ustawienia zaawansowane" advanced: "Ustawienia zaawansowane"
@ -651,6 +677,7 @@ desktop/views/components/settings.vue:
delete-wallpaper: "Usuń tło" delete-wallpaper: "Usuń tło"
dark-mode: "Tryb ciemny" dark-mode: "Tryb ciemny"
circle-icons: "Używaj okrągłych ikon" circle-icons: "Używaj okrągłych ikon"
contrasted-acct: "ユーザー名にコントラストを付ける"
gradient-window-header: "Używaj gradientów na pasku tytułu okna" gradient-window-header: "Używaj gradientów na pasku tytułu okna"
post-form-on-timeline: "Wyświetlaj formularz tworzenia wpisu w górnej części osi czasu" post-form-on-timeline: "Wyświetlaj formularz tworzenia wpisu w górnej części osi czasu"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -751,7 +778,7 @@ desktop/views/components/settings.profile.vue:
birthday: "Data urodzenia" birthday: "Data urodzenia"
save: "Aktualizuj profil" save: "Aktualizuj profil"
locked-account: "Zabezpiecz swoje konto" locked-account: "Zabezpiecz swoje konto"
is-locked: "Uczyń wpis prywatnym" is-locked: "フォローを承認制にする"
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"
@ -865,7 +892,10 @@ desktop/views/pages/welcome.vue:
signin-button: "Zaloguj się" signin-button: "Zaloguj się"
signup-button: "Zarejestruj się" signup-button: "Zarejestruj się"
timeline: "Oś czasu" timeline: "Oś czasu"
announcements: "お知らせ"
photos: "最近の画像"
powered-by-misskey: "Oparto o <b>Misskey</b>." powered-by-misskey: "Oparto o <b>Misskey</b>."
info: "情報"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Dysk Misskey" title: "Dysk Misskey"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -1002,8 +1032,6 @@ mobile/views/components/friends-maker.vue:
close: "Zamknij" close: "Zamknij"
mobile/views/components/note.vue: mobile/views/components/note.vue:
reposted-by: "Udostępniono przez {}" reposted-by: "Udostępniono przez {}"
more: "Rozwiń"
less: "Zwiń"
private: "ten wpis jest prywatny" private: "ten wpis jest prywatny"
deleted: "ten wpis został usunięty" deleted: "ten wpis został usunięty"
location: "Informacje o lokalizacji" location: "Informacje o lokalizacji"
@ -1132,6 +1160,9 @@ mobile/views/pages/settings/settings.profile.vue:
avatar: "Awatar" avatar: "Awatar"
banner: "Baner" banner: "Baner"
is-cat: "To konto jest prowadzone przez kota" is-cat: "To konto jest prowadzone przez kota"
is-locked: "フォローを承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "Aktualizuj profil" save: "Aktualizuj profil"
saved: "Pomyślnie zaktualizowano profil" saved: "Pomyślnie zaktualizowano profil"
uploading: "Wysyłanie" uploading: "Wysyłanie"
@ -1153,6 +1184,7 @@ mobile/views/pages/settings.vue:
dark-mode: "Tryb ciemny" dark-mode: "Tryb ciemny"
i-am-under-limited-internet: "Ograniczaj zużycie transferu" i-am-under-limited-internet: "Ograniczaj zużycie transferu"
circle-icons: "Używaj okrągłych ikon" circle-icons: "Używaj okrągłych ikon"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "Oś czasu" timeline: "Oś czasu"
show-reply-target: "Pokazuj cel odpowiedzi" show-reply-target: "Pokazuj cel odpowiedzi"
show-my-renotes: "Pokazuj moje udostępnienia" show-my-renotes: "Pokazuj moje udostępnienia"
@ -1161,8 +1193,14 @@ mobile/views/pages/settings.vue:
post-style: "Styl wpisów" post-style: "Styl wpisów"
post-style-standard: "Standardowy" post-style-standard: "Standardowy"
post-style-smart: "Inteligentny" post-style-smart: "Inteligentny"
notification-position: "通知の表示"
notification-position-bottom: "下"
notification-position-top: "上"
behavior: "Zachowanie" behavior: "Zachowanie"
fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół" fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
disable-via-mobile: "Nie oznaczaj wpisów jako „wysłane z telefonu”" disable-via-mobile: "Nie oznaczaj wpisów jako „wysłane z telefonu”"
load-raw-images: "Wyświetlaj załączone zdjęcia w wysokiej jakości" load-raw-images: "Wyświetlaj załączone zdjęcia w wysokiej jakości"
load-remote-media: "Wyświetlaj zawartość multimedialną ze zdalnych serwerów" load-remote-media: "Wyświetlaj zawartość multimedialną ze zdalnych serwerów"
@ -1182,7 +1220,7 @@ mobile/views/pages/settings.vue:
settings: "Ustawienia" settings: "Ustawienia"
signout: "Wyloguj" signout: "Wyloguj"
sound: "サウンド" sound: "サウンド"
enableSounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
mobile/views/pages/user.vue: mobile/views/pages/user.vue:
follows-you: "Śledzi Cię" follows-you: "Śledzi Cię"
following: "Śledzeni" following: "Śledzeni"

View File

@ -6,6 +6,19 @@ common:
misskey: "Uma ⭐ do fediverso" misskey: "Uma ⭐ do fediverso"
about-title: "Uma ⭐ do fediverso." about-title: "Uma ⭐ do fediverso."
about: "Obrigado por encontrar Misskey. Uma <b>plataforma descentralizada de microblog</b> nascida na Terra. Já que ela existe no Fediverso (um universo onde várias plataformas de mídia social são organizadas), ela é ligada com outras plataformas.Por que você não tira uma folga do agito e confusão da cidade, e mergulha em uma nova internet?" about: "Obrigado por encontrar Misskey. Uma <b>plataforma descentralizada de microblog</b> nascida na Terra. Já que ela existe no Fediverso (um universo onde várias plataformas de mídia social são organizadas), ela é ligada com outras plataformas.Por que você não tira uma folga do agito e confusão da cidade, e mergulha em uma nova internet?"
intro:
title: "Misskeyって"
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
features: "特徴"
rich-contents: "投稿"
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
reaction: "リアクション"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "インターフェース"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "ドライブ"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
adblock: adblock:
detected: "Por favor, desative o bloqueador de anúncios." detected: "Por favor, desative o bloqueador de anúncios."
warning: "Alguns recursos podem não estar disponíveis ou apresentar mal funcionamento se o bloqueio de anúncios estiver ativado. <strong>Misskey não está usando anúncios</strong>" warning: "Alguns recursos podem não estar disponíveis ou apresentar mal funcionamento se o bloqueio de anúncios estiver ativado. <strong>Misskey não está usando anúncios</strong>"
@ -68,6 +81,15 @@ common:
confused: "Confuso" confused: "Confuso"
rip: "RIP" rip: "RIP"
pudding: "Pudim" pudding: "Pudim"
note-visibility:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
note-placeholders: note-placeholders:
a: "O que está fazendo?" a: "O que está fazendo?"
b: "O que está acontecendo?" b: "O que está acontecendo?"
@ -231,6 +253,9 @@ common/views/components/connect-failed.troubleshooter.vue:
success-desc: "正常に接続できるようです。ページを再度読み込みしてください。" success-desc: "正常に接続できるようです。ページを再度読み込みしてください。"
flush: "Limpar o cache" flush: "Limpar o cache"
set-version: "バージョン指定" set-version: "バージョン指定"
common/views/components/cw-button.vue:
hide: "隠す"
show: "もっと見る"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "ユーザーを探す" search-user: "ユーザーを探す"
you: "Você" you: "Você"
@ -569,8 +594,6 @@ 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: "リトライ"
@ -640,6 +663,9 @@ desktop/views/components/settings.vue:
behaviour: "動作" behaviour: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。" fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
auto-popout: "ウィンドウの自動ポップアウト" auto-popout: "ウィンドウの自動ポップアウト"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。" auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "詳細設定" advanced: "詳細設定"
@ -651,6 +677,7 @@ desktop/views/components/settings.vue:
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "ダークモード"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用" gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -751,7 +778,7 @@ desktop/views/components/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
save: "保存" save: "保存"
locked-account: "アカウントの保護" locked-account: "アカウントの保護"
is-locked: "投稿を非公開にする" is-locked: "フォローを承認制にする"
other: "その他" other: "その他"
is-bot: "このアカウントはBotです" is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
@ -865,7 +892,10 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる" signin-button: "やってる"
signup-button: "やる" signup-button: "やる"
timeline: "Timeline" timeline: "Timeline"
announcements: "お知らせ"
photos: "最近の画像"
powered-by-misskey: "Desenvolvido por <b>Misskey</b>." powered-by-misskey: "Desenvolvido por <b>Misskey</b>."
info: "情報"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Drive Misskey" title: "Drive Misskey"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -1002,8 +1032,6 @@ mobile/views/components/friends-maker.vue:
close: "閉じる" close: "閉じる"
mobile/views/components/note.vue: mobile/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
more: "もっと見る"
less: "隠す"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
location: "位置情報" location: "位置情報"
@ -1132,6 +1160,9 @@ mobile/views/pages/settings/settings.profile.vue:
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -1153,6 +1184,7 @@ mobile/views/pages/settings.vue:
dark-mode: "ダークモード" dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている" i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
@ -1161,8 +1193,14 @@ mobile/views/pages/settings.vue:
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
notification-position: "通知の表示"
notification-position-bottom: "下"
notification-position-top: "上"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する" load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する" load-remote-media: "リモートサーバーのメディアを表示する"
@ -1182,7 +1220,7 @@ mobile/views/pages/settings.vue:
settings: "設定" settings: "設定"
signout: "サインアウト" signout: "サインアウト"
sound: "サウンド" sound: "サウンド"
enableSounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
mobile/views/pages/user.vue: mobile/views/pages/user.vue:
follows-you: "フォローされています" follows-you: "フォローされています"
following: "フォロー" following: "フォロー"

View File

@ -6,6 +6,19 @@ common:
misskey: "A ⭐ of fediverse" misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse." about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。" about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
intro:
title: "Misskeyって"
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
features: "特徴"
rich-contents: "投稿"
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
reaction: "リアクション"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "インターフェース"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "ドライブ"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
adblock: adblock:
detected: "広告ブロッカーを無効にしてください" detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
@ -68,6 +81,15 @@ common:
confused: "こまこまのこまり" confused: "こまこまのこまり"
rip: "RIP" rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-visibility:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
note-placeholders: note-placeholders:
a: "今どうしてる?" a: "今どうしてる?"
b: "何かありましたか?" b: "何かありましたか?"
@ -231,6 +253,9 @@ common/views/components/connect-failed.troubleshooter.vue:
success-desc: "正常に接続できるようです。ページを再度読み込みしてください。" success-desc: "正常に接続できるようです。ページを再度読み込みしてください。"
flush: "キャッシュの削除" flush: "キャッシュの削除"
set-version: "バージョン指定" set-version: "バージョン指定"
common/views/components/cw-button.vue:
hide: "隠す"
show: "もっと見る"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "ユーザーを探す" search-user: "ユーザーを探す"
you: "あなた" you: "あなた"
@ -569,8 +594,6 @@ 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: "リトライ"
@ -640,6 +663,9 @@ desktop/views/components/settings.vue:
behaviour: "動作" behaviour: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。" fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
auto-popout: "ウィンドウの自動ポップアウト" auto-popout: "ウィンドウの自動ポップアウト"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。" auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "詳細設定" advanced: "詳細設定"
@ -651,6 +677,7 @@ desktop/views/components/settings.vue:
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "ダークモード"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用" gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -751,7 +778,7 @@ desktop/views/components/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
save: "保存" save: "保存"
locked-account: "アカウントの保護" locked-account: "アカウントの保護"
is-locked: "投稿を非公開にする" is-locked: "フォローを承認制にする"
other: "その他" other: "その他"
is-bot: "このアカウントはBotです" is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
@ -865,7 +892,10 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる" signin-button: "やってる"
signup-button: "やる" signup-button: "やる"
timeline: "タイムライン" timeline: "タイムライン"
announcements: "お知らせ"
photos: "最近の画像"
powered-by-misskey: "Powered by <b>Misskey</b>." powered-by-misskey: "Powered by <b>Misskey</b>."
info: "情報"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -1002,8 +1032,6 @@ mobile/views/components/friends-maker.vue:
close: "閉じる" close: "閉じる"
mobile/views/components/note.vue: mobile/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
more: "もっと見る"
less: "隠す"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
location: "位置情報" location: "位置情報"
@ -1132,6 +1160,9 @@ mobile/views/pages/settings/settings.profile.vue:
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -1153,6 +1184,7 @@ mobile/views/pages/settings.vue:
dark-mode: "ダークモード" dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている" i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
@ -1161,8 +1193,14 @@ mobile/views/pages/settings.vue:
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
notification-position: "通知の表示"
notification-position-bottom: "下"
notification-position-top: "上"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する" load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する" load-remote-media: "リモートサーバーのメディアを表示する"
@ -1182,7 +1220,7 @@ mobile/views/pages/settings.vue:
settings: "設定" settings: "設定"
signout: "サインアウト" signout: "サインアウト"
sound: "サウンド" sound: "サウンド"
enableSounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
mobile/views/pages/user.vue: mobile/views/pages/user.vue:
follows-you: "フォローされています" follows-you: "フォローされています"
following: "フォロー" following: "フォロー"

View File

@ -6,6 +6,19 @@ common:
misskey: "A ⭐ of fediverse" misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse." about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。" about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
intro:
title: "Misskeyって"
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
features: "特徴"
rich-contents: "投稿"
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
reaction: "リアクション"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "インターフェース"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "ドライブ"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
adblock: adblock:
detected: "広告ブロッカーを無効にしてください" detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。" warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
@ -68,6 +81,15 @@ common:
confused: "こまこまのこまり" confused: "こまこまのこまり"
rip: "RIP" rip: "RIP"
pudding: "Pudding" pudding: "Pudding"
note-visibility:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
note-placeholders: note-placeholders:
a: "今どうしてる?" a: "今どうしてる?"
b: "何かありましたか?" b: "何かありましたか?"
@ -231,6 +253,9 @@ common/views/components/connect-failed.troubleshooter.vue:
success-desc: "正常に接続できるようです。ページを再度読み込みしてください。" success-desc: "正常に接続できるようです。ページを再度読み込みしてください。"
flush: "キャッシュの削除" flush: "キャッシュの削除"
set-version: "バージョン指定" set-version: "バージョン指定"
common/views/components/cw-button.vue:
hide: "隠す"
show: "もっと見る"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "ユーザーを探す" search-user: "ユーザーを探す"
you: "あなた" you: "あなた"
@ -569,8 +594,6 @@ 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: "リトライ"
@ -640,6 +663,9 @@ desktop/views/components/settings.vue:
behaviour: "動作" behaviour: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。" fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
auto-popout: "ウィンドウの自動ポップアウト" auto-popout: "ウィンドウの自動ポップアウト"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。" auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "詳細設定" advanced: "詳細設定"
@ -651,6 +677,7 @@ desktop/views/components/settings.vue:
delete-wallpaper: "壁紙を削除" delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード" dark-mode: "ダークモード"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用" gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する" post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -751,7 +778,7 @@ desktop/views/components/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
save: "保存" save: "保存"
locked-account: "アカウントの保護" locked-account: "アカウントの保護"
is-locked: "投稿を非公開にする" is-locked: "フォローを承認制にする"
other: "その他" other: "その他"
is-bot: "このアカウントはBotです" is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
@ -865,7 +892,10 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる" signin-button: "やってる"
signup-button: "やる" signup-button: "やる"
timeline: "タイムライン" timeline: "タイムライン"
announcements: "お知らせ"
photos: "最近の画像"
powered-by-misskey: "Powered by <b>Misskey</b>." powered-by-misskey: "Powered by <b>Misskey</b>."
info: "情報"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -1002,8 +1032,6 @@ mobile/views/components/friends-maker.vue:
close: "閉じる" close: "閉じる"
mobile/views/components/note.vue: mobile/views/components/note.vue:
reposted-by: "{}がRenote" reposted-by: "{}がRenote"
more: "もっと見る"
less: "隠す"
private: "この投稿は非公開です" private: "この投稿は非公開です"
deleted: "この投稿は削除されました" deleted: "この投稿は削除されました"
location: "位置情報" location: "位置情報"
@ -1132,6 +1160,9 @@ mobile/views/pages/settings/settings.profile.vue:
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-cat: "このアカウントはCatです" is-cat: "このアカウントはCatです"
is-locked: "フォローを承認制にする"
advanced: "その他"
privacy: "プライバシー"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -1153,6 +1184,7 @@ mobile/views/pages/settings.vue:
dark-mode: "ダークモード" dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている" i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用" circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン" timeline: "タイムライン"
show-reply-target: "リプライ先を表示する" show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "自分の行ったRenoteを表示する"
@ -1161,8 +1193,14 @@ mobile/views/pages/settings.vue:
post-style: "投稿の表示スタイル" post-style: "投稿の表示スタイル"
post-style-standard: "標準" post-style-standard: "標準"
post-style-smart: "スマート" post-style-smart: "スマート"
notification-position: "通知の表示"
notification-position-bottom: "下"
notification-position-top: "上"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する" load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する" load-remote-media: "リモートサーバーのメディアを表示する"
@ -1182,7 +1220,7 @@ mobile/views/pages/settings.vue:
settings: "設定" settings: "設定"
signout: "サインアウト" signout: "サインアウト"
sound: "サウンド" sound: "サウンド"
enableSounds: "サウンドを有効にする" enable-sounds: "サウンドを有効にする"
mobile/views/pages/user.vue: mobile/views/pages/user.vue:
follows-you: "フォローされています" follows-you: "フォローされています"
following: "フォロー" following: "フォロー"

View File

@ -1,8 +1,8 @@
{ {
"name": "misskey", "name": "misskey",
"author": "syuilo <i@syuilo.com>", "author": "syuilo <i@syuilo.com>",
"version": "8.27.0", "version": "8.38.0",
"clientVersion": "1.0.9378", "clientVersion": "1.0.9647",
"codename": "nighthike", "codename": "nighthike",
"main": "./built/index.js", "main": "./built/index.js",
"private": true, "private": true,
@ -55,10 +55,10 @@
"@types/koa-send": "4.1.1", "@types/koa-send": "4.1.1",
"@types/koa-views": "2.0.3", "@types/koa-views": "2.0.3",
"@types/koa__cors": "2.2.3", "@types/koa__cors": "2.2.3",
"@types/minio": "6.0.2", "@types/minio": "7.0.0",
"@types/mkdirp": "0.5.2", "@types/mkdirp": "0.5.2",
"@types/mocha": "5.2.3", "@types/mocha": "5.2.3",
"@types/mongodb": "3.1.4", "@types/mongodb": "3.1.7",
"@types/ms": "0.7.30", "@types/ms": "0.7.30",
"@types/node": "10.9.4", "@types/node": "10.9.4",
"@types/portscanner": "2.1.0", "@types/portscanner": "2.1.0",
@ -80,7 +80,7 @@
"@types/webpack": "4.4.11", "@types/webpack": "4.4.11",
"@types/webpack-stream": "3.2.10", "@types/webpack-stream": "3.2.10",
"@types/websocket": "0.0.40", "@types/websocket": "0.0.40",
"@types/ws": "6.0.0", "@types/ws": "6.0.1",
"animejs": "2.2.0", "animejs": "2.2.0",
"autosize": "4.0.2", "autosize": "4.0.2",
"autwh": "0.1.0", "autwh": "0.1.0",
@ -94,7 +94,7 @@
"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",
"debug": "3.1.0", "debug": "4.0.1",
"deep-equal": "1.0.1", "deep-equal": "1.0.1",
"deepcopy": "0.6.3", "deepcopy": "0.6.3",
"diskusage": "0.2.4", "diskusage": "0.2.4",
@ -151,7 +151,7 @@
"lodash.assign": "4.2.0", "lodash.assign": "4.2.0",
"mecab-async": "0.1.2", "mecab-async": "0.1.2",
"merge-options": "1.0.1", "merge-options": "1.0.1",
"minio": "7.0.0", "minio": "7.0.1",
"mkdirp": "0.5.1", "mkdirp": "0.5.1",
"mocha": "5.2.0", "mocha": "5.2.0",
"moji": "0.5.1", "moji": "0.5.1",
@ -161,7 +161,7 @@
"nan": "2.11.0", "nan": "2.11.0",
"nested-property": "0.0.7", "nested-property": "0.0.7",
"node-sass": "4.9.3", "node-sass": "4.9.3",
"node-sass-json-importer": "4.0.0", "node-sass-json-importer": "4.0.1",
"nprogress": "0.2.0", "nprogress": "0.2.0",
"object-assign-deep": "0.4.0", "object-assign-deep": "0.4.0",
"on-build-webpack": "0.1.0", "on-build-webpack": "0.1.0",
@ -194,7 +194,7 @@
"stylus": "0.54.5", "stylus": "0.54.5",
"stylus-loader": "3.0.2", "stylus-loader": "3.0.2",
"summaly": "2.2.0", "summaly": "2.2.0",
"systeminformation": "3.45.1", "systeminformation": "3.45.6",
"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",
@ -212,16 +212,17 @@
"vue-cropperjs": "2.2.1", "vue-cropperjs": "2.2.1",
"vue-js-modal": "1.3.26", "vue-js-modal": "1.3.26",
"vue-json-tree-view": "2.1.4", "vue-json-tree-view": "2.1.4",
"vue-loader": "15.4.1", "vue-loader": "15.4.2",
"vue-router": "3.0.1", "vue-router": "3.0.1",
"vue-style-loader": "4.1.2", "vue-style-loader": "4.1.2",
"vue-template-compiler": "2.5.17", "vue-template-compiler": "2.5.17",
"vuedraggable": "2.16.0", "vuedraggable": "2.16.0",
"vuewordcloud": "18.7.11",
"vuex": "3.0.1", "vuex": "3.0.1",
"vuex-persistedstate": "2.5.4", "vuex-persistedstate": "2.5.4",
"web-push": "3.3.2", "web-push": "3.3.2",
"webfinger.js": "2.6.6", "webfinger.js": "2.6.6",
"webpack": "4.17.2", "webpack": "4.19.0",
"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

@ -18,6 +18,8 @@
return; return;
} }
const langs = LANGS;
//#region Load settings //#region Load settings
let settings = null; let settings = null;
const vuex = localStorage.getItem('vuex'); const vuex = localStorage.getItem('vuex');
@ -40,10 +42,10 @@
//#region Detect the user language //#region Detect the user language
let lang = null; let lang = null;
if (LANGS.includes(navigator.language)) { if (langs.includes(navigator.language)) {
lang = navigator.language; lang = navigator.language;
} else { } else {
lang = LANGS.find(x => x.split('-')[0] == navigator.language); lang = langs.find(x => x.split('-')[0] == navigator.language);
if (lang == null) { if (lang == null) {
// Fallback // Fallback
@ -52,7 +54,7 @@
} }
if (settings && settings.device.lang && if (settings && settings.device.lang &&
LANGS.includes(settings.device.lang)) { langs.includes(settings.device.lang)) {
lang = settings.device.lang; lang = settings.device.lang;
} }
//#endregion //#endregion
@ -140,7 +142,7 @@
// Random // Random
localStorage.setItem('salt', Math.random().toString()); localStorage.setItem('salt', Math.random().toString());
// Clear cache (serive worker) // Clear cache (service worker)
try { try {
navigator.serviceWorker.controller.postMessage('clear'); navigator.serviceWorker.controller.postMessage('clear');

View File

@ -9,7 +9,7 @@ export default async function(mios: MiOS, force = false, silent = false) {
localStorage.setItem('should-refresh', 'true'); localStorage.setItem('should-refresh', 'true');
localStorage.setItem('v', newer); localStorage.setItem('v', newer);
// Clear cache (serive worker) // Clear cache (service worker)
try { try {
if (navigator.serviceWorker.controller) { if (navigator.serviceWorker.controller) {
navigator.serviceWorker.controller.postMessage('clear'); navigator.serviceWorker.controller.postMessage('clear');

View File

@ -1,6 +1,7 @@
import { EventEmitter } from 'eventemitter3'; import { EventEmitter } from 'eventemitter3';
import * as uuid from 'uuid'; import * as uuid from 'uuid';
import Connection from './stream'; import Connection from './stream';
import { erase } from '../../../../../prelude/array';
/** /**
* ストリーム接続を管理するクラス * ストリーム接続を管理するクラス
@ -89,7 +90,7 @@ export default abstract class StreamManager<T extends Connection> extends EventE
* @param userId use で発行したユーザーID * @param userId use で発行したユーザーID
*/ */
public dispose(userId) { public dispose(userId) {
this.users = this.users.filter(id => id != userId); this.users = erase(userId, this.users);
this._connection.user = `Managed (${ this.users.length })`; this._connection.user = `Managed (${ this.users.length })`;

View File

@ -1,7 +1,7 @@
<template> <template>
<span class="mk-acct"> <span class="mk-acct">
<span class="name">@{{ user.username }}</span> <span class="name">@{{ user.username }}</span>
<span class="host" v-if="user.host || detail">@{{ user.host || host }}</span> <span class="host" :class="{ fade: $store.state.settings.contrastedAcct }" v-if="user.host || detail">@{{ user.host || host }}</span>
</span> </span>
</template> </template>
@ -20,6 +20,6 @@ export default Vue.extend({
<style lang="stylus" scoped> <style lang="stylus" scoped>
.mk-acct .mk-acct
> .host > .host.fade
opacity 0.5 opacity 0.5
</style> </style>

View File

@ -1,15 +1,15 @@
<template> <template>
<span class="mk-avatar" :class="{ cat }" :title="user | acct" v-if="disableLink && !disablePreview" v-user-preview="user.id" @click="onClick"> <span class="mk-avatar" :style="style" :class="{ cat }" :title="user | acct" v-if="disableLink && !disablePreview" v-user-preview="user.id" @click="onClick">
<span class="inner" :style="style"></span> <span class="inner" :style="icon"></span>
</span> </span>
<span class="mk-avatar" :class="{ cat }" :title="user | acct" v-else-if="disableLink && disablePreview" @click="onClick"> <span class="mk-avatar" :style="style" :class="{ cat }" :title="user | acct" v-else-if="disableLink && disablePreview" @click="onClick">
<span class="inner" :style="style"></span> <span class="inner" :style="icon"></span>
</span> </span>
<router-link class="mk-avatar" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && !disablePreview" v-user-preview="user.id"> <router-link class="mk-avatar" :style="style" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && !disablePreview" v-user-preview="user.id">
<span class="inner" :style="style"></span> <span class="inner" :style="icon"></span>
</router-link> </router-link>
<router-link class="mk-avatar" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && disablePreview"> <router-link class="mk-avatar" :style="style" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && disablePreview">
<span class="inner" :style="style"></span> <span class="inner" :style="icon"></span>
</router-link> </router-link>
</template> </template>
@ -42,6 +42,11 @@ export default Vue.extend({
return this.user.isCat && this.$store.state.settings.circleIcons; return this.user.isCat && this.$store.state.settings.circleIcons;
}, },
style(): any { style(): any {
return {
borderRadius: this.$store.state.settings.circleIcons ? '100%' : null
};
},
icon(): any {
return { return {
backgroundColor: this.lightmode backgroundColor: this.lightmode
? `rgb(${this.user.avatarColor.slice(0, 3).join(',')})` ? `rgb(${this.user.avatarColor.slice(0, 3).join(',')})`

View File

@ -0,0 +1,44 @@
<template>
<button class="nrvgflfuaxwgkxoynpnumyookecqrrvh" @click="toggle">{{ value ? '%i18n:@hide%' : '%i18n:@show%' }}</button>
</template>
<script lang="ts">
import Vue from 'vue';
export default Vue.extend({
props: {
value: {
type: Boolean,
required: true
}
},
methods: {
toggle() {
this.$emit('input', !this.value);
}
}
});
</script>
<style lang="stylus" scoped>
root(isDark)
display inline-block
padding 4px 8px
font-size 0.7em
color isDark ? #393f4f : #fff
background isDark ? #687390 : #b1b9c1
border-radius 2px
cursor pointer
user-select none
&:hover
background isDark ? #707b97 : #bbc4ce
.nrvgflfuaxwgkxoynpnumyookecqrrvh[data-darkmode]
root(true)
.nrvgflfuaxwgkxoynpnumyookecqrrvh:not([data-darkmode])
root(false)
</style>

View File

@ -1,5 +1,7 @@
import Vue from 'vue'; import Vue from 'vue';
import cwButton from './cw-button.vue';
import tagCloud from './tag-cloud.vue';
import trends from './trends.vue'; import trends from './trends.vue';
import analogClock from './analog-clock.vue'; import analogClock from './analog-clock.vue';
import menu from './menu.vue'; import menu from './menu.vue';
@ -41,6 +43,8 @@ import uiSelect from './ui/select.vue';
import formButton from './ui/form/button.vue'; import formButton from './ui/form/button.vue';
import formRadio from './ui/form/radio.vue'; import formRadio from './ui/form/radio.vue';
Vue.component('mk-cw-button', cwButton);
Vue.component('mk-tag-cloud', tagCloud);
Vue.component('mk-trends', trends); Vue.component('mk-trends', trends);
Vue.component('mk-analog-clock', analogClock); Vue.component('mk-analog-clock', analogClock);
Vue.component('mk-menu', menu); Vue.component('mk-menu', menu);

View File

@ -1,4 +1,4 @@
import Vue from 'vue'; import Vue, { VNode } from 'vue';
import * as emojilib from 'emojilib'; import * as emojilib from 'emojilib';
import { length } from 'stringz'; import { length } from 'stringz';
import parse from '../../../../../mfm/parse'; import parse from '../../../../../mfm/parse';
@ -6,10 +6,7 @@ import getAcct from '../../../../../misc/acct/render';
import { url } from '../../../config'; import { url } from '../../../config';
import MkUrl from './url.vue'; import MkUrl from './url.vue';
import MkGoogle from './google.vue'; import MkGoogle from './google.vue';
import { concat } from '../../../../../prelude/array';
const flatten = list => list.reduce(
(a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []
);
export default Vue.component('misskey-flavored-markdown', { export default Vue.component('misskey-flavored-markdown', {
props: { props: {
@ -32,20 +29,20 @@ export default Vue.component('misskey-flavored-markdown', {
}, },
render(createElement) { render(createElement) {
let ast; let ast: any[];
if (this.ast == null) { if (this.ast == null) {
// Parse text to ast // Parse text to ast
ast = parse(this.text); ast = parse(this.text);
} else { } else {
ast = this.ast; ast = this.ast as any[];
} }
let bigCount = 0; let bigCount = 0;
let motionCount = 0; let motionCount = 0;
// Parse ast to DOM // Parse ast to DOM
const els = flatten(ast.map(token => { const els = concat(ast.map((token): VNode[] => {
switch (token.type) { switch (token.type) {
case 'text': { case 'text': {
const text = token.content.replace(/(\r\n|\n|\r)/g, '\n'); const text = token.content.replace(/(\r\n|\n|\r)/g, '\n');
@ -56,12 +53,12 @@ export default Vue.component('misskey-flavored-markdown', {
x[x.length - 1].pop(); x[x.length - 1].pop();
return x; return x;
} else { } else {
return createElement('span', text.replace(/\n/g, ' ')); return [createElement('span', text.replace(/\n/g, ' '))];
} }
} }
case 'bold': { case 'bold': {
return createElement('b', token.bold); return [createElement('b', token.bold)];
} }
case 'big': { case 'big': {
@ -95,23 +92,23 @@ export default Vue.component('misskey-flavored-markdown', {
} }
case 'url': { case 'url': {
return createElement(MkUrl, { return [createElement(MkUrl, {
props: { props: {
url: token.content, url: token.content,
target: '_blank' target: '_blank'
} }
}); })];
} }
case 'link': { case 'link': {
return createElement('a', { return [createElement('a', {
attrs: { attrs: {
class: 'link', class: 'link',
href: token.url, href: token.url,
target: '_blank', target: '_blank',
title: token.url title: token.url
} }
}, token.title); }, token.title)];
} }
case 'mention': { case 'mention': {
@ -129,16 +126,16 @@ export default Vue.component('misskey-flavored-markdown', {
} }
case 'hashtag': { case 'hashtag': {
return createElement('a', { return [createElement('a', {
attrs: { attrs: {
href: `${url}/tags/${encodeURIComponent(token.hashtag)}`, href: `${url}/tags/${encodeURIComponent(token.hashtag)}`,
target: '_blank' target: '_blank'
} }
}, token.content); }, token.content)];
} }
case 'code': { case 'code': {
return createElement('pre', { return [createElement('pre', {
class: 'code' class: 'code'
}, [ }, [
createElement('code', { createElement('code', {
@ -146,15 +143,15 @@ export default Vue.component('misskey-flavored-markdown', {
innerHTML: token.html innerHTML: token.html
} }
}) })
]); ])];
} }
case 'inline-code': { case 'inline-code': {
return createElement('code', { return [createElement('code', {
domProps: { domProps: {
innerHTML: token.html innerHTML: token.html
} }
}); })];
} }
case 'quote': { case 'quote': {
@ -164,43 +161,45 @@ export default Vue.component('misskey-flavored-markdown', {
const x = text2.split('\n') const x = text2.split('\n')
.map(t => [createElement('span', t), createElement('br')]); .map(t => [createElement('span', t), createElement('br')]);
x[x.length - 1].pop(); x[x.length - 1].pop();
return createElement('div', { return [createElement('div', {
attrs: { attrs: {
class: 'quote' class: 'quote'
} }
}, x); }, x)];
} else { } else {
return createElement('span', { return [createElement('span', {
attrs: { attrs: {
class: 'quote' class: 'quote'
} }
}, text2.replace(/\n/g, ' ')); }, text2.replace(/\n/g, ' '))];
} }
} }
case 'title': { case 'title': {
return createElement('div', { return [createElement('div', {
attrs: { attrs: {
class: 'title' class: 'title'
} }
}, token.title); }, token.title)];
} }
case 'emoji': { case 'emoji': {
const emoji = emojilib.lib[token.emoji]; const emoji = emojilib.lib[token.emoji];
return createElement('span', emoji ? emoji.char : token.content); return [createElement('span', emoji ? emoji.char : token.content)];
} }
case 'search': { case 'search': {
return createElement(MkGoogle, { return [createElement(MkGoogle, {
props: { props: {
q: token.query q: token.query
} }
}); })];
} }
default: { default: {
console.log('unknown ast type:', token.type); console.log('unknown ast type:', token.type);
return [];
} }
} }
})); }));

View File

@ -20,6 +20,7 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import { erase } from '../../../../../prelude/array';
export default Vue.extend({ export default Vue.extend({
data() { data() {
return { return {
@ -53,7 +54,7 @@ export default Vue.extend({
get() { get() {
return { return {
choices: this.choices.filter(choice => choice != '') choices: erase('', this.choices)
} }
}, },

View File

@ -21,6 +21,7 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import { sum } from '../../../../../prelude/array';
export default Vue.extend({ export default Vue.extend({
props: ['note'], props: ['note'],
data() { data() {
@ -33,7 +34,7 @@ export default Vue.extend({
return this.note.poll; return this.note.poll;
}, },
total(): number { total(): number {
return this.poll.choices.reduce((a, b) => a + b.votes, 0); return sum(this.poll.choices.map(x => x.votes));
}, },
isVoted(): boolean { isVoted(): boolean {
return this.poll.choices.some(c => c.isVoted); return this.poll.choices.some(c => c.isVoted);

View File

@ -1,17 +1,17 @@
<template> <template>
<span class="mk-reaction-icon"> <span class="mk-reaction-icon">
<img v-if="reaction == 'like'" src="/assets/reactions/like.png" alt="%i18n:common.reactions.like%"> <img v-if="reaction == 'like'" src="https://twemoji.maxcdn.com/2/svg/1f44d.svg" alt="%i18n:common.reactions.like%">
<img v-if="reaction == 'love'" src="/assets/reactions/love.png" alt="%i18n:common.reactions.love%"> <img v-if="reaction == 'love'" src="https://twemoji.maxcdn.com/2/svg/2764.svg" alt="%i18n:common.reactions.love%">
<img v-if="reaction == 'laugh'" src="/assets/reactions/laugh.png" alt="%i18n:common.reactions.laugh%"> <img v-if="reaction == 'laugh'" src="https://twemoji.maxcdn.com/2/svg/1f606.svg" alt="%i18n:common.reactions.laugh%">
<img v-if="reaction == 'hmm'" src="/assets/reactions/hmm.png" alt="%i18n:common.reactions.hmm%"> <img v-if="reaction == 'hmm'" src="https://twemoji.maxcdn.com/2/svg/1f914.svg" alt="%i18n:common.reactions.hmm%">
<img v-if="reaction == 'surprise'" src="/assets/reactions/surprise.png" alt="%i18n:common.reactions.surprise%"> <img v-if="reaction == 'surprise'" src="https://twemoji.maxcdn.com/2/svg/1f62e.svg" alt="%i18n:common.reactions.surprise%">
<img v-if="reaction == 'congrats'" src="/assets/reactions/congrats.png" alt="%i18n:common.reactions.congrats%"> <img v-if="reaction == 'congrats'" src="https://twemoji.maxcdn.com/2/svg/1f389.svg" alt="%i18n:common.reactions.congrats%">
<img v-if="reaction == 'angry'" src="/assets/reactions/angry.png" alt="%i18n:common.reactions.angry%"> <img v-if="reaction == 'angry'" src="https://twemoji.maxcdn.com/2/svg/1f4a2.svg" alt="%i18n:common.reactions.angry%">
<img v-if="reaction == 'confused'" src="/assets/reactions/confused.png" alt="%i18n:common.reactions.confused%"> <img v-if="reaction == 'confused'" src="https://twemoji.maxcdn.com/2/svg/1f625.svg" alt="%i18n:common.reactions.confused%">
<img v-if="reaction == 'rip'" src="/assets/reactions/rip.png" alt="%i18n:common.reactions.rip%"> <img v-if="reaction == 'rip'" src="https://twemoji.maxcdn.com/2/svg/1f607.svg" alt="%i18n:common.reactions.rip%">
<template v-if="reaction == 'pudding'"> <template v-if="reaction == 'pudding'">
<img v-if="$store.getters.isSignedIn && $store.state.settings.iLikeSushi" src="/assets/reactions/sushi.png" alt="%i18n:common.reactions.pudding%"> <img v-if="$store.getters.isSignedIn && $store.state.settings.iLikeSushi" src="https://twemoji.maxcdn.com/2/svg/1f363.svg" alt="%i18n:common.reactions.pudding%">
<img v-else src="/assets/reactions/pudding.png" alt="%i18n:common.reactions.pudding%"> <img v-else src="https://twemoji.maxcdn.com/2/svg/1f36e.svg" alt="%i18n:common.reactions.pudding%">
</template> </template>
</span> </span>
</template> </template>

View File

@ -0,0 +1,90 @@
<template>
<div class="jtivnzhfwquxpsfidertopbmwmchmnmo">
<p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
<p class="empty" v-else-if="tags.length == 0">%fa:exclamation-circle%%i18n:@empty%</p>
<div v-else>
<vue-word-cloud
:words="tags.slice(0, 20).map(x => [x.name, x.count])"
:color="color"
:spacing="1">
<template slot-scope="{word, text, weight}">
<div style="cursor: pointer;" :title="weight">
{{ text }}
</div>
</template>
</vue-word-cloud>
</div>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import * as VueWordCloud from 'vuewordcloud';
export default Vue.extend({
components: {
[VueWordCloud.name]: VueWordCloud
},
data() {
return {
tags: [],
fetching: true,
clock: null
};
},
mounted() {
this.fetch();
this.clock = setInterval(this.fetch, 1000 * 60);
},
beforeDestroy() {
clearInterval(this.clock);
},
methods: {
fetch() {
(this as any).api('aggregation/hashtags').then(tags => {
this.tags = tags;
this.fetching = false;
});
},
color([, weight]) {
const peak = Math.max.apply(null, this.tags.map(x => x.count));
const w = weight / peak;
if (w > 0.9) {
return this.$store.state.device.darkmode ? '#ff4e69' : '#ff4e69';
} else if (w > 0.5) {
return this.$store.state.device.darkmode ? '#3bc4c7' : '#3bc4c7';
} else {
return this.$store.state.device.darkmode ? '#fff' : '#555';
}
}
}
});
</script>
<style lang="stylus" scoped>
root(isDark)
height 100%
width 100%
> .fetching
> .empty
margin 0
padding 16px
text-align center
color #aaa
> [data-fa]
margin-right 4px
> div
height 100%
width 100%
.jtivnzhfwquxpsfidertopbmwmchmnmo[data-darkmode]
root(true)
.jtivnzhfwquxpsfidertopbmwmchmnmo:not([data-darkmode])
root(false)
</style>

View File

@ -14,7 +14,7 @@
<header> <header>
<h1>{{ title }}</h1> <h1>{{ title }}</h1>
</header> </header>
<p>{{ description }}</p> <p>{{ description.length > 85 ? description.slice(0, 85) + '…' : description }}</p>
<footer> <footer>
<img class="icon" v-if="icon" :src="icon"/> <img class="icon" v-if="icon" :src="icon"/>
<p>{{ sitename }}</p> <p>{{ sitename }}</p>

View File

@ -47,7 +47,7 @@ export default Vue.extend({
props: ['source', 'compact'], props: ['source', 'compact'],
data() { data() {
return { return {
v: this.$store.state.device.visibility || 'public' v: this.$store.state.settings.rememberNoteVisibility ? (this.$store.state.device.visibility || this.$store.state.settings.defaultNoteVisibility) : this.$store.state.settings.defaultNoteVisibility
} }
}, },
mounted() { mounted() {
@ -97,7 +97,9 @@ export default Vue.extend({
}, },
methods: { methods: {
choose(visibility) { choose(visibility) {
this.$store.commit('device/setVisibility', visibility); if (this.$store.state.settings.rememberNoteVisibility) {
this.$store.commit('device/setVisibility', visibility);
}
this.$emit('chosen', visibility); this.$emit('chosen', visibility);
this.$destroy(); this.$destroy();
}, },

View File

@ -1,22 +1,24 @@
<template> <template>
<div class="mk-welcome-timeline"> <div class="mk-welcome-timeline">
<div v-for="note in notes"> <transition-group name="ldzpakcixzickvggyixyrhqwjaefknon" tag="div">
<mk-avatar class="avatar" :user="note.user" target="_blank"/> <div v-for="note in notes" :key="note.id">
<div class="body"> <mk-avatar class="avatar" :user="note.user" target="_blank"/>
<header> <div class="body">
<router-link class="name" :to="note.user | userPage" v-user-preview="note.user.id">{{ note.user | userName }}</router-link> <header>
<span class="username">@{{ note.user | acct }}</span> <router-link class="name" :to="note.user | userPage" v-user-preview="note.user.id">{{ note.user | userName }}</router-link>
<div class="info"> <span class="username">@{{ note.user | acct }}</span>
<router-link class="created-at" :to="note | notePage"> <div class="info">
<mk-time :time="note.createdAt"/> <router-link class="created-at" :to="note | notePage">
</router-link> <mk-time :time="note.createdAt"/>
</router-link>
</div>
</header>
<div class="text">
<misskey-flavored-markdown v-if="note.text" :text="note.text"/>
</div> </div>
</header>
<div class="text">
<misskey-flavored-markdown v-if="note.text" :text="note.text"/>
</div> </div>
</div> </div>
</div> </transition-group>
</div> </div>
</template> </template>
@ -83,64 +85,73 @@ export default Vue.extend({
</script> </script>
<style lang="stylus" scoped> <style lang="stylus" scoped>
.ldzpakcixzickvggyixyrhqwjaefknon-enter
.ldzpakcixzickvggyixyrhqwjaefknon-leave-to
opacity 0
transform translateY(-30px)
root(isDark) root(isDark)
background isDark ? #282C37 : #fff background isDark ? #282C37 : #fff
> div > div
padding 16px > *
overflow-wrap break-word transition transform .3s ease, opacity .3s ease
font-size .9em
color isDark ? #fff : #4C4C4C
border-bottom 1px solid isDark ? rgba(#000, 0.1) : rgba(#000, 0.05)
&:after > div
content "" padding 16px
display block overflow-wrap break-word
clear both font-size .9em
color isDark ? #fff : #4C4C4C
border-bottom 1px solid isDark ? rgba(#000, 0.1) : rgba(#000, 0.05)
> .avatar &:after
display block content ""
float left display block
position -webkit-sticky clear both
position sticky
top 16px
width 42px
height 42px
border-radius 6px
> .body > .avatar
float right display block
width calc(100% - 42px) float left
padding-left 12px position -webkit-sticky
position sticky
top 16px
width 42px
height 42px
border-radius 6px
> header > .body
display flex float right
align-items center width calc(100% - 42px)
margin-bottom 4px padding-left 12px
white-space nowrap
> .name > header
display block display flex
margin 0 .5em 0 0 align-items center
padding 0 margin-bottom 4px
overflow hidden white-space nowrap
font-weight bold
text-overflow ellipsis
color isDark ? #fff : #627079
> .username > .name
margin 0 .5em 0 0 display block
color isDark ? #606984 : #ccc margin 0 .5em 0 0
padding 0
overflow hidden
font-weight bold
text-overflow ellipsis
color isDark ? #fff : #627079
> .info > .username
margin-left auto margin 0 .5em 0 0
font-size 0.9em color isDark ? #606984 : #ccc
> .created-at > .info
color isDark ? #606984 : #c0c0c0 margin-left auto
font-size 0.9em
> .text > .created-at
text-align left color isDark ? #606984 : #c0c0c0
> .text
text-align left
.mk-welcome-timeline[data-darkmode] .mk-welcome-timeline[data-darkmode]
root(true) root(true)

View File

@ -32,7 +32,6 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import parseAcct from '../../../../../misc/acct/parse'; import parseAcct from '../../../../../misc/acct/parse';
import getUserName from '../../../../../misc/get-user-name';
import Progress from '../../../common/scripts/loading'; import Progress from '../../../common/scripts/loading';
export default Vue.extend({ export default Vue.extend({

View File

@ -1,8 +1,8 @@
<template> <template>
<div class="mkw-analog-clock"> <div class="mkw-analog-clock">
<mk-widget-container :naked="!(props.design % 2)" :show-header="false"> <mk-widget-container :naked="props.style % 2 === 0" :show-header="false">
<div class="mkw-analog-clock--body"> <div class="mkw-analog-clock--body">
<mk-analog-clock :dark="$store.state.device.darkmode" :smooth="!(props.design && ~props.design)"/> <mk-analog-clock :dark="$store.state.device.darkmode" :smooth="props.style < 2"/>
</div> </div>
</mk-widget-container> </mk-widget-container>
</div> </div>
@ -13,13 +13,12 @@ import define from '../../../common/define-widget';
export default define({ export default define({
name: 'analog-clock', name: 'analog-clock',
props: () => ({ props: () => ({
design: -1 style: 0
}) })
}).extend({ }).extend({
methods: { methods: {
func() { func() {
if (++this.props.design > 2) this.props.style = (this.props.style + 1) % 4;
this.props.design = -1;
this.save(); this.save();
} }
} }

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="anltbovirfeutcigvwgmgxipejaeozxi" <div class="anltbovirfeutcigvwgmgxipejaeozxi"
:data-found="broadcasts.length != 0" :data-found="announcements && announcements.length != 0"
:data-melt="props.design == 1" :data-melt="props.design == 1"
:data-mobile="platform == 'mobile'" :data-mobile="platform == 'mobile'"
> >
@ -14,12 +14,12 @@
</svg> </svg>
</div> </div>
<p class="fetching" v-if="fetching">%i18n:@fetching%<mk-ellipsis/></p> <p class="fetching" v-if="fetching">%i18n:@fetching%<mk-ellipsis/></p>
<h1 v-if="!fetching">{{ broadcasts.length == 0 ? '%i18n:@no-broadcasts%' : broadcasts[i].title }}</h1> <h1 v-if="!fetching">{{ announcements.length == 0 ? '%i18n:@no-broadcasts%' : announcements[i].title }}</h1>
<p v-if="!fetching"> <p v-if="!fetching">
<span v-if="broadcasts.length != 0" v-html="broadcasts[i].text"></span> <span v-if="announcements.length != 0" v-html="announcements[i].text"></span>
<template v-if="broadcasts.length == 0">%i18n:@have-a-nice-day%</template> <template v-if="announcements.length == 0">%i18n:@have-a-nice-day%</template>
</p> </p>
<a v-if="broadcasts.length > 1" @click="next">%i18n:@next% &gt;&gt;</a> <a v-if="announcements.length > 1" @click="next">%i18n:@next% &gt;&gt;</a>
</div> </div>
</template> </template>
@ -36,18 +36,18 @@ export default define({
return { return {
i: 0, i: 0,
fetching: true, fetching: true,
broadcasts: [] announcements: []
}; };
}, },
mounted() { mounted() {
(this as any).os.getMeta().then(meta => { (this as any).os.getMeta().then(meta => {
this.broadcasts = meta.broadcasts; this.announcements = meta.broadcasts;
this.fetching = false; this.fetching = false;
}); });
}, },
methods: { methods: {
next() { next() {
if (this.i == this.broadcasts.length - 1) { if (this.i == this.announcements.length - 1) {
this.i = 0; this.i = 0;
} else { } else {
this.i++; this.i++;
@ -126,7 +126,7 @@ root(isDark)
margin 0 margin 0
font-size 0.95em font-size 0.95em
font-weight normal font-weight normal
color #4078c0 color isDark ? #539eff : #4078c0
> p > p
display block display block

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="ldwbgwstjsdgcjruamauqdrffetqudry" v-if="image.isSensitive && hide" @click="hide = false"> <div class="ldwbgwstjsdgcjruamauqdrffetqudry" v-if="image.isSensitive && hide && !$store.state.device.alwaysShowNsfw" @click="hide = false">
<div> <div>
<b>%fa:exclamation-triangle% %i18n:@sensitive%</b> <b>%fa:exclamation-triangle% %i18n:@sensitive%</b>
<span>%i18n:@click-to-show%</span> <span>%i18n:@click-to-show%</span>

View File

@ -37,20 +37,26 @@
</router-link> </router-link>
</header> </header>
<div class="body"> <div class="body">
<div class="text"> <p v-if="p.cw != null" class="cw">
<span v-if="p.isHidden" style="opacity: 0.5">%i18n:@private%</span> <span class="text" v-if="p.cw != ''">{{ p.cw }}</span>
<span v-if="p.deletedAt" style="opacity: 0.5">%i18n:@deleted%</span> <mk-cw-button v-model="showContent"/>
<misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i"/> </p>
</div> <div class="content" v-show="p.cw == null || showContent">
<div class="files" v-if="p.files.length > 0"> <div class="text">
<mk-media-list :media-list="p.files" :raw="true"/> <span v-if="p.isHidden" style="opacity: 0.5">%i18n:@private%</span>
</div> <span v-if="p.deletedAt" style="opacity: 0.5">%i18n:@deleted%</span>
<mk-poll v-if="p.poll" :note="p"/> <misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i"/>
<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="true"/> </div>
<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a> <div class="files" v-if="p.files.length > 0">
<div class="map" v-if="p.geo" ref="map"></div> <mk-media-list :media-list="p.files" :raw="true"/>
<div class="renote" v-if="p.renote"> </div>
<mk-note-preview :note="p.renote"/> <mk-poll v-if="p.poll" :note="p"/>
<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="true"/>
<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
<div class="map" v-if="p.geo" ref="map"></div>
<div class="renote" v-if="p.renote">
<mk-note-preview :note="p.renote"/>
</div>
</div> </div>
</div> </div>
<footer> <footer>
@ -86,6 +92,7 @@ import MkRenoteFormWindow from './renote-form-window.vue';
import MkNoteMenu from '../../../common/views/components/note-menu.vue'; import MkNoteMenu from '../../../common/views/components/note-menu.vue';
import MkReactionPicker from '../../../common/views/components/reaction-picker.vue'; import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
import XSub from './notes.note.sub.vue'; import XSub from './notes.note.sub.vue';
import { sum } from '../../../../../prelude/array';
export default Vue.extend({ export default Vue.extend({
components: { components: {
@ -104,6 +111,7 @@ export default Vue.extend({
data() { data() {
return { return {
showContent: false,
conversation: [], conversation: [],
conversationFetching: false, conversationFetching: false,
replies: [] replies: []
@ -117,19 +125,21 @@ export default Vue.extend({
this.note.fileIds.length == 0 && this.note.fileIds.length == 0 &&
this.note.poll == null); this.note.poll == null);
}, },
p(): any { p(): any {
return this.isRenote ? this.note.renote : this.note; return this.isRenote ? this.note.renote : this.note;
}, },
reactionsCount(): number { reactionsCount(): number {
return this.p.reactionCounts return this.p.reactionCounts
? Object.keys(this.p.reactionCounts) ? sum(Object.values(this.p.reactionCounts))
.map(key => this.p.reactionCounts[key])
.reduce((a, b) => a + b)
: 0; : 0;
}, },
title(): string { title(): string {
return new Date(this.p.createdAt).toLocaleString(); return new Date(this.p.createdAt).toLocaleString();
}, },
urls(): string[] { urls(): string[] {
if (this.p.text) { if (this.p.text) {
const ast = parse(this.p.text); const ast = parse(this.p.text);
@ -184,22 +194,26 @@ export default Vue.extend({
this.conversation = conversation.reverse(); this.conversation = conversation.reverse();
}); });
}, },
reply() { reply() {
(this as any).os.new(MkPostFormWindow, { (this as any).os.new(MkPostFormWindow, {
reply: this.p reply: this.p
}); });
}, },
renote() { renote() {
(this as any).os.new(MkRenoteFormWindow, { (this as any).os.new(MkRenoteFormWindow, {
note: this.p note: this.p
}); });
}, },
react() { react() {
(this as any).os.new(MkReactionPicker, { (this as any).os.new(MkReactionPicker, {
source: this.$refs.reactButton, source: this.$refs.reactButton,
note: this.p note: this.p
}); });
}, },
menu() { menu() {
(this as any).os.new(MkNoteMenu, { (this as any).os.new(MkNoteMenu, {
source: this.$refs.menuButton, source: this.$refs.menuButton,
@ -327,37 +341,49 @@ root(isDark)
> .body > .body
padding 8px 0 padding 8px 0
> .text > .cw
cursor default cursor default
display block display block
margin 0 margin 0
padding 0 padding 0
overflow-wrap break-word overflow-wrap break-word
font-size 1.5em
color isDark ? #fff : #717171 color isDark ? #fff : #717171
> .renote > .text
margin 8px 0 margin-right 8px
> .mk-note-preview > .content
padding 16px > .text
border dashed 1px #c0dac6 cursor default
border-radius 8px display block
margin 0
padding 0
overflow-wrap break-word
font-size 1.5em
color isDark ? #fff : #717171
> .location > .renote
margin 4px 0 margin 8px 0
font-size 12px
color #ccc
> .map > *
width 100% padding 16px
height 300px border dashed 1px #c0dac6
border-radius 8px
&:empty > .location
display none margin 4px 0
font-size 12px
color #ccc
> .mk-url-preview > .map
margin-top 8px width 100%
height 300px
&:empty
display none
> .mk-url-preview
margin-top 8px
> footer > footer
font-size 1.2em font-size 1.2em

View File

@ -1,10 +1,16 @@
<template> <template>
<div class="mk-note-preview" :title="title"> <div class="qiziqtywpuaucsgarwajitwaakggnisj" :title="title">
<mk-avatar class="avatar" :user="note.user" v-if="!mini"/> <mk-avatar class="avatar" :user="note.user" v-if="!mini"/>
<div class="main"> <div class="main">
<mk-note-header class="header" :note="note" :mini="true"/> <mk-note-header class="header" :note="note" :mini="true"/>
<div class="body"> <div class="body">
<mk-sub-note-content class="text" :note="note"/> <p v-if="note.cw != null" class="cw">
<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
<mk-cw-button v-model="showContent"/>
</p>
<div class="content" v-show="note.cw == null || showContent">
<mk-sub-note-content class="text" :note="note"/>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -25,6 +31,13 @@ export default Vue.extend({
default: false default: false
} }
}, },
data() {
return {
showContent: false
};
},
computed: { computed: {
title(): string { title(): string {
return new Date(this.note.createdAt).toLocaleString(); return new Date(this.note.createdAt).toLocaleString();
@ -52,16 +65,28 @@ root(isDark)
> .body > .body
> .text > .cw
cursor default cursor default
display block
margin 0 margin 0
padding 0 padding 0
color isDark ? #959ba7 : #717171 overflow-wrap break-word
color isDark ? #fff : #717171
.mk-note-preview[data-darkmode] > .text
margin-right 8px
> .content
> .text
cursor default
margin 0
padding 0
color isDark ? #959ba7 : #717171
.qiziqtywpuaucsgarwajitwaakggnisj[data-darkmode]
root(true) root(true)
.mk-note-preview:not([data-darkmode]) .qiziqtywpuaucsgarwajitwaakggnisj:not([data-darkmode])
root(false) root(false)
</style> </style>

View File

@ -1,10 +1,16 @@
<template> <template>
<div class="sub" :title="title"> <div class="tkfdzaxtkdeianobciwadajxzbddorql" :title="title">
<mk-avatar class="avatar" :user="note.user"/> <mk-avatar class="avatar" :user="note.user"/>
<div class="main"> <div class="main">
<mk-note-header class="header" :note="note"/> <mk-note-header class="header" :note="note"/>
<div class="body"> <div class="body">
<mk-sub-note-content class="text" :note="note"/> <p v-if="note.cw != null" class="cw">
<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
<mk-cw-button v-model="showContent"/>
</p>
<div class="content" v-show="note.cw == null || showContent">
<mk-sub-note-content class="text" :note="note"/>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -14,7 +20,19 @@
import Vue from 'vue'; import Vue from 'vue';
export default Vue.extend({ export default Vue.extend({
props: ['note'], props: {
note: {
type: Object,
required: true
}
},
data() {
return {
showContent: false
};
},
computed: { computed: {
title(): string { title(): string {
return new Date(this.note.createdAt).toLocaleString(); return new Date(this.note.createdAt).toLocaleString();
@ -48,20 +66,32 @@ root(isDark)
> .body > .body
> .text > .cw
cursor default cursor default
display block
margin 0 margin 0
padding 0 padding 0
color isDark ? #959ba7 : #717171 overflow-wrap break-word
color isDark ? #fff : #717171
pre > .text
max-height 120px margin-right 8px
font-size 80%
.sub[data-darkmode] > .content
> .text
cursor default
margin 0
padding 0
color isDark ? #959ba7 : #717171
pre
max-height 120px
font-size 80%
.tkfdzaxtkdeianobciwadajxzbddorql[data-darkmode]
root(true) root(true)
.sub:not([data-darkmode]) .tkfdzaxtkdeianobciwadajxzbddorql:not([data-darkmode])
root(false) root(false)
</style> </style>

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 ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span> <mk-cw-button v-model="showContent"/>
</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">
@ -34,9 +34,7 @@
<mk-poll v-if="p.poll" :note="p" ref="pollViewer"/> <mk-poll v-if="p.poll" :note="p" ref="pollViewer"/>
<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% 位置情報</a> <a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% 位置情報</a>
<div class="map" v-if="p.geo" ref="map"></div> <div class="map" v-if="p.geo" ref="map"></div>
<div class="renote" v-if="p.renote"> <div class="renote" v-if="p.renote"><mk-note-preview :note="p.renote"/></div>
<mk-note-preview :note="p.renote"/>
</div>
<mk-url-preview v-for="url in urls" :url="url" :key="url"/> <mk-url-preview v-for="url in urls" :url="url" :key="url"/>
</div> </div>
</div> </div>
@ -78,6 +76,7 @@ import MkRenoteFormWindow from './renote-form-window.vue';
import MkNoteMenu from '../../../common/views/components/note-menu.vue'; import MkNoteMenu from '../../../common/views/components/note-menu.vue';
import MkReactionPicker from '../../../common/views/components/reaction-picker.vue'; import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
import XSub from './notes.note.sub.vue'; import XSub from './notes.note.sub.vue';
import { sum } from '../../../../../prelude/array';
function focus(el, fn) { function focus(el, fn) {
const target = fn(el); const target = fn(el);
@ -95,7 +94,12 @@ export default Vue.extend({
XSub XSub
}, },
props: ['note'], props: {
note: {
type: Object,
required: true
}
},
data() { data() {
return { return {
@ -120,9 +124,7 @@ export default Vue.extend({
reactionsCount(): number { reactionsCount(): number {
return this.p.reactionCounts return this.p.reactionCounts
? Object.keys(this.p.reactionCounts) ? sum(Object.values(this.p.reactionCounts))
.map(key => this.p.reactionCounts[key])
.reduce((a, b) => a + b)
: 0; : 0;
}, },
@ -399,19 +401,6 @@ root(isDark)
> .text > .text
margin-right 8px margin-right 8px
> .toggle
display inline-block
padding 4px 8px
font-size 0.7em
color isDark ? #393f4f : #fff
background isDark ? #687390 : #b1b9c1
border-radius 2px
cursor pointer
user-select none
&:hover
background isDark ? #707b97 : #bbc4ce
> .content > .content
> .text > .text
@ -470,7 +459,7 @@ root(isDark)
> .renote > .renote
margin 8px 0 margin 8px 0
> .mk-note-preview > *
padding 16px padding 16px
border dashed 1px isDark ? #4e945e : #c0dac6 border dashed 1px isDark ? #4e945e : #c0dac6
border-radius 8px border-radius 8px

View File

@ -10,8 +10,7 @@
</div> </div>
<!-- トランジションを有効にするとなぜかメモリリークする --> <!-- トランジションを有効にするとなぜかメモリリークする -->
<!--<transition-group name="mk-notes" class="transition">--> <transition-group name="mk-notes" class="notes transition" tag="div">
<div class="notes">
<template v-for="(note, i) in _notes"> <template v-for="(note, i) in _notes">
<x-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)"/> <x-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)"/>
<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date"> <p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
@ -19,8 +18,7 @@
<span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span> <span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span>
</p> </p>
</template> </template>
</div> </transition-group>
<!--</transition-group>-->
<footer v-if="more"> <footer v-if="more">
<button @click="loadMore" :disabled="moreFetching" :style="{ cursor: moreFetching ? 'wait' : 'pointer' }"> <button @click="loadMore" :disabled="moreFetching" :style="{ cursor: moreFetching ? 'wait' : 'pointer' }">

View File

@ -2,8 +2,7 @@
<div class="mk-notifications"> <div class="mk-notifications">
<div class="notifications" v-if="notifications.length != 0"> <div class="notifications" v-if="notifications.length != 0">
<!-- トランジションを有効にするとなぜかメモリリークする --> <!-- トランジションを有効にするとなぜかメモリリークする -->
<!-- <transition-group name="mk-notifications" class="transition"> --> <transition-group name="mk-notifications" class="transition" tag="div">
<div>
<template v-for="(notification, i) in _notifications"> <template v-for="(notification, i) in _notifications">
<div class="notification" :class="notification.type" :key="notification.id"> <div class="notification" :class="notification.type" :key="notification.id">
<mk-time :time="notification.createdAt"/> <mk-time :time="notification.createdAt"/>
@ -97,8 +96,7 @@
<span>%fa:angle-down%{{ _notifications[i + 1]._datetext }}</span> <span>%fa:angle-down%{{ _notifications[i + 1]._datetext }}</span>
</p> </p>
</template> </template>
</div> </transition-group>
<!-- </transition-group> -->
</div> </div>
<button class="more" :class="{ fetching: fetchingMoreNotifications }" v-if="moreNotifications" @click="fetchMoreNotifications" :disabled="fetchingMoreNotifications"> <button class="more" :class="{ fetching: fetchingMoreNotifications }" v-if="moreNotifications" @click="fetchMoreNotifications" :disabled="fetchingMoreNotifications">
<template v-if="fetchingMoreNotifications">%fa:spinner .pulse .fw%</template>{{ fetchingMoreNotifications ? '%i18n:common.loading%' : '%i18n:@more%' }} <template v-if="fetchingMoreNotifications">%fa:spinner .pulse .fw%</template>{{ fetchingMoreNotifications ? '%i18n:common.loading%' : '%i18n:@more%' }}

View File

@ -45,7 +45,7 @@
<span v-if="visibility === 'specified'">%fa:envelope%</span> <span v-if="visibility === 'specified'">%fa:envelope%</span>
<span v-if="visibility === 'private'">%fa:lock%</span> <span v-if="visibility === 'private'">%fa:lock%</span>
</button> </button>
<p class="text-count" :class="{ over: text.length > 1000 }">{{ 1000 - text.length }}</p> <p class="text-count" :class="{ over: this.trimmedLength(text) > 1000 }">{{ 1000 - this.trimmedLength(text) }}</p>
<button :class="{ posting }" class="submit" :disabled="!canPost" @click="post"> <button :class="{ posting }" class="submit" :disabled="!canPost" @click="post">
{{ posting ? '%i18n:@posting%' : submitText }}<mk-ellipsis v-if="posting"/> {{ posting ? '%i18n:@posting%' : submitText }}<mk-ellipsis v-if="posting"/>
</button> </button>
@ -62,6 +62,9 @@ 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';
import { erase, unique } from '../../../../../prelude/array';
import { length } from 'stringz';
import parseAcct from '../../../../../misc/acct/parse';
export default Vue.extend({ export default Vue.extend({
components: { components: {
@ -99,7 +102,7 @@ export default Vue.extend({
useCw: false, useCw: false,
cw: null, cw: null,
geo: null, geo: null,
visibility: this.$store.state.device.visibility || 'public', visibility: this.$store.state.settings.rememberNoteVisibility ? (this.$store.state.device.visibility || this.$store.state.settings.defaultNoteVisibility) : this.$store.state.settings.defaultNoteVisibility,
visibleUsers: [], visibleUsers: [],
autocomplete: null, autocomplete: null,
draghover: false, draghover: false,
@ -145,7 +148,7 @@ export default Vue.extend({
canPost(): boolean { canPost(): boolean {
return !this.posting && return !this.posting &&
(1 <= this.text.length || 1 <= this.files.length || this.poll || this.renote) && (1 <= this.text.length || 1 <= this.files.length || this.poll || this.renote) &&
(this.text.trim().length <= 1000); (length(this.text.trim()) <= 1000);
} }
}, },
@ -197,6 +200,10 @@ export default Vue.extend({
}, },
methods: { methods: {
trimmedLength(text: string) {
return length(text.trim());
},
addTag(tag: string) { addTag(tag: string) {
insertTextAtCursor(this.$refs.text, ` #${tag} `); insertTextAtCursor(this.$refs.text, ` #${tag} `);
}, },
@ -336,17 +343,16 @@ export default Vue.extend({
addVisibleUser() { addVisibleUser() {
(this as any).apis.input({ (this as any).apis.input({
title: '%i18n:@enter-username%' title: '%i18n:@enter-username%'
}).then(username => { }).then(acct => {
(this as any).api('users/show', { if (acct.startsWith('@')) acct = acct.substr(1);
username (this as any).api('users/show', parseAcct(acct)).then(user => {
}).then(user => {
this.visibleUsers.push(user); this.visibleUsers.push(user);
}); });
}); });
}, },
removeVisibleUser(user) { removeVisibleUser(user) {
this.visibleUsers = this.visibleUsers.filter(u => u != user); this.visibleUsers = erase(user, this.visibleUsers);
}, },
post() { post() {
@ -391,7 +397,7 @@ export default Vue.extend({
if (this.text && this.text != '') { if (this.text && this.text != '') {
const hashtags = parse(this.text).filter(x => x.type == 'hashtag').map(x => x.hashtag); const hashtags = parse(this.text).filter(x => x.type == 'hashtag').map(x => x.hashtag);
const history = JSON.parse(localStorage.getItem('hashtags') || '[]') as string[]; const history = JSON.parse(localStorage.getItem('hashtags') || '[]') as string[];
localStorage.setItem('hashtags', JSON.stringify(hashtags.concat(history).reduce((a, c) => a.includes(c) ? a : [...a, c], []))); localStorage.setItem('hashtags', JSON.stringify(unique(hashtags.concat(history))));
} }
}, },

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="mk-renote-form"> <div class="mk-renote-form">
<mk-note-preview :note="note"/> <mk-note-preview class="preview" :note="note"/>
<template v-if="!quote"> <template v-if="!quote">
<footer> <footer>
<a class="quote" v-if="!quote" @click="onQuote">%i18n:@quote%</a> <a class="quote" v-if="!quote" @click="onQuote">%i18n:@quote%</a>
@ -61,7 +61,7 @@ export default Vue.extend({
root(isDark) root(isDark)
> .mk-note-preview > .preview
margin 16px 22px margin 16px 22px
> footer > footer

View File

@ -20,12 +20,28 @@
<section class="web" v-show="page == 'web'"> <section class="web" v-show="page == 'web'">
<h1>%i18n:@behaviour%</h1> <h1>%i18n:@behaviour%</h1>
<mk-switch v-model="$store.state.settings.fetchOnScroll" @change="onChangeFetchOnScroll" text="%i18n:@fetch-on-scroll%"> <mk-switch v-model="fetchOnScroll" text="%i18n:@fetch-on-scroll%">
<span>%i18n:@fetch-on-scroll-desc%</span> <span>%i18n:@fetch-on-scroll-desc%</span>
</mk-switch> </mk-switch>
<mk-switch v-model="autoPopout" text="%i18n:@auto-popout%"> <mk-switch v-model="autoPopout" text="%i18n:@auto-popout%">
<span>%i18n:@auto-popout-desc%</span> <span>%i18n:@auto-popout-desc%</span>
</mk-switch> </mk-switch>
<section>
<header>%i18n:@note-visibility%</header>
<mk-switch v-model="rememberNoteVisibility" text="%i18n:@remember-note-visibility%"/>
<section>
<header>%i18n:@default-note-visibility%</header>
<ui-select v-model="defaultNoteVisibility">
<option value="public">%i18n:common.note-visibility.public%</option>
<option value="home">%i18n:common.note-visibility.home%</option>
<option value="followers">%i18n:common.note-visibility.followers%</option>
<option value="specified">%i18n:common.note-visibility.specified%</option>
<option value="private">%i18n:common.note-visibility.private%</option>
</ui-select>
</section>
</section>
<details> <details>
<summary>%i18n:@advanced%</summary> <summary>%i18n:@advanced%</summary>
<mk-switch v-model="apiViaStream" text="%i18n:@api-via-stream%"> <mk-switch v-model="apiViaStream" text="%i18n:@api-via-stream%">
@ -43,23 +59,25 @@
<button class="ui" @click="updateWallpaper">%i18n:@choose-wallpaper%</button> <button class="ui" @click="updateWallpaper">%i18n:@choose-wallpaper%</button>
<button class="ui" @click="deleteWallpaper">%i18n:@delete-wallpaper%</button> <button class="ui" @click="deleteWallpaper">%i18n:@delete-wallpaper%</button>
<mk-switch v-model="darkmode" text="%i18n:@dark-mode%"/> <mk-switch v-model="darkmode" text="%i18n:@dark-mode%"/>
<mk-switch v-model="$store.state.settings.circleIcons" @change="onChangeCircleIcons" text="%i18n:@circle-icons%"/> <mk-switch v-model="circleIcons" text="%i18n:@circle-icons%"/>
<mk-switch v-model="$store.state.settings.gradientWindowHeader" @change="onChangeGradientWindowHeader" text="%i18n:@gradient-window-header%"/> <mk-switch v-model="contrastedAcct" text="%i18n:@contrasted-acct%"/>
<mk-switch v-model="$store.state.settings.iLikeSushi" @change="onChangeILikeSushi" text="%i18n:common.i-like-sushi%"/> <mk-switch v-model="gradientWindowHeader" text="%i18n:@gradient-window-header%"/>
<mk-switch v-model="iLikeSushi" 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="showPostFormOnTopOfTl" 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="suggestRecentHashtags" text="%i18n:@suggest-recent-hashtags%"/>
<mk-switch v-model="$store.state.settings.showClockOnHeader" @change="onChangeShowClockOnHeader" text="%i18n:@show-clock-on-header%"/> <mk-switch v-model="showClockOnHeader" text="%i18n:@show-clock-on-header%"/>
<mk-switch v-model="$store.state.settings.showReplyTarget" @change="onChangeShowReplyTarget" text="%i18n:@show-reply-target%"/> <mk-switch v-model="alwaysShowNsfw" text="%i18n:common.always-show-nsfw%"/>
<mk-switch v-model="$store.state.settings.showMyRenotes" @change="onChangeShowMyRenotes" text="%i18n:@show-my-renotes%"/> <mk-switch v-model="showReplyTarget" text="%i18n:@show-reply-target%"/>
<mk-switch v-model="$store.state.settings.showRenotedMyNotes" @change="onChangeShowRenotedMyNotes" text="%i18n:@show-renoted-my-notes%"/> <mk-switch v-model="showMyRenotes" text="%i18n:@show-my-renotes%"/>
<mk-switch v-model="$store.state.settings.showLocalRenotes" @change="onChangeShowLocalRenotes" text="%i18n:@show-local-renotes%"/> <mk-switch v-model="showRenotedMyNotes" text="%i18n:@show-renoted-my-notes%"/>
<mk-switch v-model="$store.state.settings.showMaps" @change="onChangeShowMaps" text="%i18n:@show-maps%"> <mk-switch v-model="showLocalRenotes" text="%i18n:@show-local-renotes%"/>
<mk-switch v-model="showMaps" 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.disableAnimatedMfm" @change="onChangeDisableAnimatedMfm" text="%i18n:common.disable-animated-mfm%"/> <mk-switch v-model="disableAnimatedMfm" text="%i18n:common.disable-animated-mfm%"/>
<mk-switch v-model="$store.state.settings.games.reversi.showBoardLabels" @change="onChangeReversiBoardLabels" text="%i18n:common.show-reversi-board-labels%"/> <mk-switch v-model="games_reversi_showBoardLabels" text="%i18n:common.show-reversi-board-labels%"/>
<mk-switch v-model="$store.state.settings.games.reversi.useContrastStones" @change="onChangeUseContrastReversiStones" text="%i18n:common.use-contrast-reversi-stones%"/> <mk-switch v-model="games_reversi_useContrastStones" text="%i18n:common.use-contrast-reversi-stones%"/>
</section> </section>
<section class="web" v-show="page == 'web'"> <section class="web" v-show="page == 'web'">
@ -81,7 +99,7 @@
<section class="web" v-show="page == 'web'"> <section class="web" v-show="page == 'web'">
<h1>%i18n:@mobile%</h1> <h1>%i18n:@mobile%</h1>
<mk-switch v-model="$store.state.settings.disableViaMobile" @change="onChangeDisableViaMobile" text="%i18n:@disable-via-mobile%"/> <mk-switch v-model="disableViaMobile" text="%i18n:@disable-via-mobile%"/>
</section> </section>
<section class="web" v-show="page == 'web'"> <section class="web" v-show="page == 'web'">
@ -276,7 +294,107 @@ export default Vue.extend({
enableExperimentalFeatures: { enableExperimentalFeatures: {
get() { return this.$store.state.device.enableExperimentalFeatures; }, get() { return this.$store.state.device.enableExperimentalFeatures; },
set(value) { this.$store.commit('device/set', { key: 'enableExperimentalFeatures', value }); } set(value) { this.$store.commit('device/set', { key: 'enableExperimentalFeatures', value }); }
} },
alwaysShowNsfw: {
get() { return this.$store.state.device.alwaysShowNsfw; },
set(value) { this.$store.commit('device/set', { key: 'alwaysShowNsfw', value }); }
},
fetchOnScroll: {
get() { return this.$store.state.settings.fetchOnScroll; },
set(value) { this.$store.dispatch('settings/set', { key: 'fetchOnScroll', value }); }
},
rememberNoteVisibility: {
get() { return this.$store.state.settings.rememberNoteVisibility; },
set(value) { this.$store.dispatch('settings/set', { key: 'rememberNoteVisibility', value }); }
},
defaultNoteVisibility: {
get() { return this.$store.state.settings.defaultNoteVisibility; },
set(value) { this.$store.dispatch('settings/set', { key: 'defaultNoteVisibility', value }); }
},
showReplyTarget: {
get() { return this.$store.state.settings.showReplyTarget; },
set(value) { this.$store.dispatch('settings/set', { key: 'showReplyTarget', value }); }
},
showMyRenotes: {
get() { return this.$store.state.settings.showMyRenotes; },
set(value) { this.$store.dispatch('settings/set', { key: 'showMyRenotes', value }); }
},
showRenotedMyNotes: {
get() { return this.$store.state.settings.showRenotedMyNotes; },
set(value) { this.$store.dispatch('settings/set', { key: 'showRenotedMyNotes', value }); }
},
showLocalRenotes: {
get() { return this.$store.state.settings.showLocalRenotes; },
set(value) { this.$store.dispatch('settings/set', { key: 'showLocalRenotes', value }); }
},
showPostFormOnTopOfTl: {
get() { return this.$store.state.settings.showPostFormOnTopOfTl; },
set(value) { this.$store.dispatch('settings/set', { key: 'showPostFormOnTopOfTl', value }); }
},
suggestRecentHashtags: {
get() { return this.$store.state.settings.suggestRecentHashtags; },
set(value) { this.$store.dispatch('settings/set', { key: 'suggestRecentHashtags', value }); }
},
showClockOnHeader: {
get() { return this.$store.state.settings.showClockOnHeader; },
set(value) { this.$store.dispatch('settings/set', { key: 'showClockOnHeader', value }); }
},
showMaps: {
get() { return this.$store.state.settings.showMaps; },
set(value) { this.$store.dispatch('settings/set', { key: 'showMaps', value }); }
},
circleIcons: {
get() { return this.$store.state.settings.circleIcons; },
set(value) { this.$store.dispatch('settings/set', { key: 'circleIcons', value }); }
},
contrastedAcct: {
get() { return this.$store.state.settings.contrastedAcct; },
set(value) { this.$store.dispatch('settings/set', { key: 'contrastedAcct', value }); }
},
iLikeSushi: {
get() { return this.$store.state.settings.iLikeSushi; },
set(value) { this.$store.dispatch('settings/set', { key: 'iLikeSushi', value }); }
},
games_reversi_showBoardLabels: {
get() { return this.$store.state.settings.games.reversi.showBoardLabels; },
set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.showBoardLabels', value }); }
},
games_reversi_useContrastStones: {
get() { return this.$store.state.settings.games.reversi.useContrastStones; },
set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.useContrastStones', value }); }
},
disableAnimatedMfm: {
get() { return this.$store.state.settings.disableAnimatedMfm; },
set(value) { this.$store.dispatch('settings/set', { key: 'disableAnimatedMfm', value }); }
},
disableViaMobile: {
get() { return this.$store.state.settings.disableViaMobile; },
set(value) { this.$store.dispatch('settings/set', { key: 'disableViaMobile', value }); }
},
gradientWindowHeader: {
get() { return this.$store.state.settings.gradientWindowHeader; },
set(value) { this.$store.dispatch('settings/set', { key: 'gradientWindowHeader', value }); }
},
}, },
created() { created() {
(this as any).os.getMeta().then(meta => { (this as any).os.getMeta().then(meta => {
@ -305,113 +423,11 @@ export default Vue.extend({
wallpaperId: null wallpaperId: null
}); });
}, },
onChangeFetchOnScroll(v) {
this.$store.dispatch('settings/set', {
key: 'fetchOnScroll',
value: v
});
},
onChangeAutoWatch(v) { onChangeAutoWatch(v) {
(this as any).api('i/update', { (this as any).api('i/update', {
autoWatch: v autoWatch: v
}); });
}, },
onChangeDark(v) {
this.$store.dispatch('settings/set', {
key: 'dark',
value: v
});
},
onChangeShowPostFormOnTopOfTl(v) {
this.$store.dispatch('settings/set', {
key: 'showPostFormOnTopOfTl',
value: v
});
},
onChangeSuggestRecentHashtags(v) {
this.$store.dispatch('settings/set', {
key: 'suggestRecentHashtags',
value: v
});
},
onChangeShowClockOnHeader(v) {
this.$store.dispatch('settings/set', {
key: 'showClockOnHeader',
value: v
});
},
onChangeShowReplyTarget(v) {
this.$store.dispatch('settings/set', {
key: 'showReplyTarget',
value: v
});
},
onChangeShowMyRenotes(v) {
this.$store.dispatch('settings/set', {
key: 'showMyRenotes',
value: v
});
},
onChangeShowRenotedMyNotes(v) {
this.$store.dispatch('settings/set', {
key: 'showRenotedMyNotes',
value: v
});
},
onChangeShowLocalRenotes(v) {
this.$store.dispatch('settings/set', {
key: 'showLocalRenotes',
value: v
});
},
onChangeShowMaps(v) {
this.$store.dispatch('settings/set', {
key: 'showMaps',
value: v
});
},
onChangeCircleIcons(v) {
this.$store.dispatch('settings/set', {
key: 'circleIcons',
value: v
});
},
onChangeILikeSushi(v) {
this.$store.dispatch('settings/set', {
key: 'iLikeSushi',
value: v
});
},
onChangeReversiBoardLabels(v) {
this.$store.dispatch('settings/set', {
key: 'games.reversi.showBoardLabels',
value: v
});
},
onChangeUseContrastReversiStones(v) {
this.$store.dispatch('settings/set', {
key: 'games.reversi.useContrastStones',
value: v
});
},
onChangeDisableAnimatedMfm(v) {
this.$store.dispatch('settings/set', {
key: 'disableAnimatedMfm',
value: v
});
},
onChangeGradientWindowHeader(v) {
this.$store.dispatch('settings/set', {
key: 'gradientWindowHeader',
value: v
});
},
onChangeDisableViaMobile(v) {
this.$store.dispatch('settings/set', {
key: 'disableViaMobile',
value: v
});
},
checkForUpdate() { checkForUpdate() {
this.checkingForUpdate = true; this.checkingForUpdate = true;
checkForUpdate((this as any).os, true, true).then(newer => { checkForUpdate((this as any).os, true, true).then(newer => {

View File

@ -2,8 +2,8 @@
<div class="mk-timeline"> <div class="mk-timeline">
<header> <header>
<span :data-active="src == 'home'" @click="src = 'home'">%fa:home% %i18n:@home%</span> <span :data-active="src == 'home'" @click="src = 'home'">%fa:home% %i18n:@home%</span>
<span :data-active="src == 'local'" @click="src = 'local'">%fa:R comments% %i18n:@local%</span> <span :data-active="src == 'local'" @click="src = 'local'" v-if="enableLocalTimeline">%fa:R comments% %i18n:@local%</span>
<span :data-active="src == 'hybrid'" @click="src = 'hybrid'">%fa:share-alt% %i18n:@hybrid%</span> <span :data-active="src == 'hybrid'" @click="src = 'hybrid'" v-if="enableLocalTimeline">%fa:share-alt% %i18n:@hybrid%</span>
<span :data-active="src == 'global'" @click="src = 'global'">%fa:globe% %i18n:@global%</span> <span :data-active="src == 'global'" @click="src = 'global'">%fa:globe% %i18n:@global%</span>
<span :data-active="src == 'list'" @click="src = 'list'" v-if="list">%fa:list% {{ list.title }}</span> <span :data-active="src == 'list'" @click="src = 'list'" v-if="list">%fa:list% {{ list.title }}</span>
<button @click="chooseList" title="%i18n:@list%">%fa:list%</button> <button @click="chooseList" title="%i18n:@list%">%fa:list%</button>
@ -29,7 +29,8 @@ export default Vue.extend({
data() { data() {
return { return {
src: 'home', src: 'home',
list: null list: null,
enableLocalTimeline: false
}; };
}, },
@ -44,6 +45,10 @@ export default Vue.extend({
}, },
created() { created() {
(this as any).os.getMeta().then(meta => {
this.enableLocalTimeline = !meta.disableLocalTimeline;
});
if (this.$store.state.device.tl) { if (this.$store.state.device.tl) {
this.src = this.$store.state.device.tl.src; this.src = this.$store.state.device.tl.src;
if (this.src == 'list') { if (this.src == 'list') {

View File

@ -1,17 +1,16 @@
<template> <template>
<div class="root item"> <div class="zvdbznxvfixtmujpsigoccczftvpiwqh">
<mk-avatar class="avatar" :user="user"/> <div class="banner" :style="bannerStyle"></div>
<div class="main"> <mk-avatar class="avatar" :user="user" :disable-preview="true"/>
<header> <div class="body">
<router-link class="name" :to="user | userPage" v-user-preview="user.id">{{ user | userName }}</router-link> <router-link :to="user | userPage" class="name">{{ user | userName }}</router-link>
<span class="username">@{{ user | acct }}</span> <span class="username">@{{ user | acct }}</span>
</header> <div class="description">
<div class="body"> <misskey-flavored-markdown v-if="user.description" :text="user.description" :i="$store.state.i"/>
<p class="followed" v-if="user.isFollowed">%i18n:@followed%</p>
<div class="description">{{ user.description }}</div>
</div> </div>
<p class="followed" v-if="user.isFollowed">%i18n:@followed%</p>
<mk-follow-button :user="user" :size="'big'"/>
</div> </div>
<mk-follow-button :user="user"/>
</div> </div>
</template> </template>
@ -19,76 +18,69 @@
import Vue from 'vue'; import Vue from 'vue';
export default Vue.extend({ export default Vue.extend({
props: ['user'] props: ['user'],
computed: {
bannerStyle(): any {
if (this.user.bannerUrl == null) return {};
return {
backgroundColor: this.user.bannerColor && this.user.bannerColor.length == 3 ? `rgb(${ this.user.bannerColor.join(',') })` : null,
backgroundImage: `url(${ this.user.bannerUrl })`
};
}
},
}); });
</script> </script>
<style lang="stylus" scoped> <style lang="stylus" scoped>
.root.item .zvdbznxvfixtmujpsigoccczftvpiwqh
padding 16px $bg = #fff
font-size 16px
&:after margin 16px auto
content "" max-width calc(100% - 32px)
display block font-size 16px
clear both text-align center
background $bg
box-shadow 0 2px 4px rgba(0, 0, 0, 0.1)
> .banner
height 100px
background-color #f9f4f4
background-position center
background-size cover
> .avatar > .avatar
display block display block
float left margin -40px auto 0 auto
margin 0 16px 0 0 width 80px
width 58px height 80px
height 58px border-radius 100%
border-radius 8px border solid 4px $bg
> .main > .body
float left padding 4px 32px 32px 32px
width calc(100% - 74px)
> header @media (max-width 400px)
margin-bottom 2px padding 4px 16px 16px 16px
> .name > .name
display inline font-size 20px
margin 0 font-weight bold
padding 0
color #777
font-size 1em
font-weight 700
text-align left
text-decoration none
&:hover > .username
text-decoration underline display block
opacity 0.7
> .username > .description
text-align left margin 16px 0
margin 0 0 0 8px
color #ccc
> .body > .followed
> .followed margin 0 0 16px 0
display inline-block padding 0
margin 0 0 4px 0 line-height 24px
padding 2px 8px font-size 0.8em
vertical-align top color #71afc7
font-size 10px background #eefaff
color #71afc7 border-radius 4px
background #eefaff
border-radius 4px
> .description
cursor default
display block
margin 0
padding 0
overflow-wrap break-word
font-size 1.1em
color #717171
> .mk-follow-button
position absolute
top 16px
right 16px
</style> </style>

View File

@ -33,7 +33,7 @@ export default Vue.extend({
props: ['fetch', 'count', 'youKnowCount'], props: ['fetch', 'count', 'youKnowCount'],
data() { data() {
return { return {
limit: 30, limit: 20,
mode: 'all', mode: 'all',
fetching: true, fetching: true,
moreFetching: false, moreFetching: false,
@ -73,10 +73,14 @@ export default Vue.extend({
.mk-users-list .mk-users-list
height 100% height 100%
background #fff overflow auto
background #eee
> nav > nav
z-index 1 z-index 10
position sticky
top 0
background #fff
box-shadow 0 1px 0 rgba(#000, 0.1) box-shadow 0 1px 0 rgba(#000, 0.1)
> div > div
@ -114,16 +118,14 @@ export default Vue.extend({
background #eee background #eee
border-radius 20px border-radius 20px
> .users > button
height calc(100% - 54px) display block
overflow auto width calc(100% - 32px)
margin 16px
padding 16px
> * &:hover
border-bottom solid 1px rgba(#000, 0.05) background rgba(#000, 0.1)
> *
max-width 600px
margin 0 auto
> .no > .no
margin 0 margin 0

View File

@ -1,22 +1,34 @@
<template> <template>
<div class="obdskegsannmntldydackcpzezagxqfy mk-admin-card"> <div class="obdskegsannmntldydackcpzezagxqfy mk-admin-card">
<header>%i18n:@dashboard%</header> <header>%i18n:@dashboard%</header>
<div v-if="stats" class="stats"> <div v-if="stats" class="stats">
<div><b>%fa:user% {{ stats.originalUsersCount | number }}</b><span>%i18n:@original-users%</span></div> <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><span>%fa:user% {{ stats.usersCount | number }}</span><span>%i18n:@all-users%</span></div>
<div><b>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</b><span>%i18n:@original-notes%</span></div> <div><b>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</b><span>%i18n:@original-notes%</span></div>
<div><span>%fa:pencil-alt% {{ stats.notesCount | number }}</span><span>%i18n:@all-notes%</span></div> <div><span>%fa:pencil-alt% {{ stats.notesCount | number }}</span><span>%i18n:@all-notes%</span></div>
</div> </div>
<div class="cpu-memory"> <div class="cpu-memory">
<x-cpu-memory :connection="connection"/> <x-cpu-memory :connection="connection"/>
</div> </div>
<div>
<label> <div class="form">
<input type="checkbox" v-model="disableRegistration" @change="updateMeta"> <div>
<span>disableRegistration</span> <label>
</label> <input type="checkbox" v-model="disableRegistration" @change="updateMeta">
<button class="ui" @click="invite">%i18n:@invite%</button> <span>%i18n:@disableRegistration%</span>
<p v-if="inviteCode">Code: <code>{{ inviteCode }}</code></p> </label>
<button class="ui" @click="invite">%i18n:@invite%</button>
<p v-if="inviteCode">Code: <code>{{ inviteCode }}</code></p>
</div>
<div>
<label>
<input type="checkbox" v-model="disableLocalTimeline" @change="updateMeta">
<span>%i18n:@disableLocalTimeline%</span>
</label>
</div>
</div> </div>
</div> </div>
</template> </template>
@ -33,6 +45,7 @@ export default Vue.extend({
return { return {
stats: null, stats: null,
disableRegistration: false, disableRegistration: false,
disableLocalTimeline: false,
inviteCode: null, inviteCode: null,
connection: null, connection: null,
connectionId: null connectionId: null
@ -44,6 +57,7 @@ export default Vue.extend({
(this as any).os.getMeta().then(meta => { (this as any).os.getMeta().then(meta => {
this.disableRegistration = meta.disableRegistration; this.disableRegistration = meta.disableRegistration;
this.disableLocalTimeline = meta.disableLocalTimeline;
}); });
(this as any).api('stats').then(stats => { (this as any).api('stats').then(stats => {
@ -61,7 +75,8 @@ export default Vue.extend({
}, },
updateMeta() { updateMeta() {
(this as any).api('admin/update-meta', { (this as any).api('admin/update-meta', {
disableRegistration: this.disableRegistration disableRegistration: this.disableRegistration,
disableLocalTimeline: this.disableLocalTimeline
}); });
} }
} }
@ -97,4 +112,8 @@ export default Vue.extend({
border solid 1px #eee border solid 1px #eee
border-radius: 8px border-radius: 8px
> .form
> div
border-bottom solid 1px #eee
</style> </style>

View File

@ -0,0 +1,41 @@
<template>
<div class="jdnqwkzlnxcfftthoybjxrebyolvoucw mk-admin-card">
<header>%i18n:@hided-tags%</header>
<textarea v-model="hidedTags"></textarea>
<button class="ui" @click="save">%i18n:@save%</button>
</div>
</template>
<script lang="ts">
import Vue from "vue";
export default Vue.extend({
data() {
return {
hidedTags: '',
};
},
created() {
(this as any).os.getMeta().then(meta => {
this.hidedTags = meta.hidedTags.join('\n');
});
},
methods: {
save() {
(this as any).api('admin/update-meta', {
hidedTags: this.hidedTags.split('\n')
});
}
}
});
</script>
<style lang="stylus" scoped>
@import '~const.styl'
.jdnqwkzlnxcfftthoybjxrebyolvoucw
textarea
width 100%
min-height 300px
</style>

View File

@ -5,6 +5,8 @@
<li @click="nav('dashboard')" :class="{ active: page == 'dashboard' }">%fa:chalkboard .fw%%i18n:@dashboard%</li> <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('users')" :class="{ active: page == 'users' }">%fa:users .fw%%i18n:@users%</li>
<li @click="nav('announcements')" :class="{ active: page == 'announcements' }">%fa:broadcast-tower .fw%%i18n:@announcements%</li> <li @click="nav('announcements')" :class="{ active: page == 'announcements' }">%fa:broadcast-tower .fw%%i18n:@announcements%</li>
<li @click="nav('hashtags')" :class="{ active: page == 'hashtags' }">%fa:hashtag .fw%%i18n:@hashtags%</li>
<!-- <li @click="nav('drive')" :class="{ active: page == 'drive' }">%fa:cloud .fw%%i18n:@drive%</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> --> <!-- <li @click="nav('update')" :class="{ active: page == 'update' }">%i18n:@update%</li> -->
</ul> </ul>
@ -17,6 +19,9 @@
<div v-show="page == 'announcements'"> <div v-show="page == 'announcements'">
<x-announcements/> <x-announcements/>
</div> </div>
<div v-show="page == 'hashtags'">
<x-hashtags/>
</div>
<div v-if="page == 'users'"> <div v-if="page == 'users'">
<x-suspend-user/> <x-suspend-user/>
<x-unsuspend-user/> <x-unsuspend-user/>
@ -33,6 +38,7 @@
import Vue from "vue"; import Vue from "vue";
import XDashboard from "./admin.dashboard.vue"; import XDashboard from "./admin.dashboard.vue";
import XAnnouncements from "./admin.announcements.vue"; import XAnnouncements from "./admin.announcements.vue";
import XHashtags from "./admin.hashtags.vue";
import XSuspendUser from "./admin.suspend-user.vue"; import XSuspendUser from "./admin.suspend-user.vue";
import XUnsuspendUser from "./admin.unsuspend-user.vue"; import XUnsuspendUser from "./admin.unsuspend-user.vue";
import XVerifyUser from "./admin.verify-user.vue"; import XVerifyUser from "./admin.verify-user.vue";
@ -43,6 +49,7 @@ export default Vue.extend({
components: { components: {
XDashboard, XDashboard,
XAnnouncements, XAnnouncements,
XHashtags,
XSuspendUser, XSuspendUser,
XUnsuspendUser, XUnsuspendUser,
XVerifyUser, XVerifyUser,

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 ? '%i18n:@less%' : '%i18n:@more%' }}</span> <mk-cw-button v-model="showContent"/>
</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">
@ -394,7 +394,7 @@ root(isDark)
> .renote > .renote
margin 8px 0 margin 8px 0
> .mk-note-preview > *
padding 16px padding 16px
border dashed 1px isDark ? #4e945e : #c0dac6 border dashed 1px isDark ? #4e945e : #c0dac6
border-radius 8px border-radius 8px

View File

@ -85,6 +85,7 @@ export default Vue.extend({
}, },
mounted() { mounted() {
document.title = (this as any).os.instanceName;
document.documentElement.style.overflow = 'hidden'; document.documentElement.style.overflow = 'hidden';
}, },

View File

@ -7,68 +7,130 @@
<mk-forkit class="forkit"/> <mk-forkit class="forkit"/>
<div class="body"> <main>
<div class="main block"> <div class="body">
<div> <div class="main block">
<h1 v-if="name != 'Misskey'">{{ name }}</h1>
<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name"></h1>
<div class="info">
<span><b>{{ host }}</b> - <span v-html="'%i18n:@powered-by-misskey%'"></span></span>
<span class="stats" v-if="stats">
<span>%fa:user% {{ stats.originalUsersCount | number }}</span>
<span>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</span>
</span>
</div>
<p class="desc" v-html="description || '%i18n:common.about%'"></p>
<p class="sign">
<span class="signup" @click="signup">%i18n:@signup%</span>
<span class="divider">|</span>
<span class="signin" @click="signin">%i18n:@signin%</span>
</p>
</div>
</div>
<div class="announcements block">
<header>%fa:broadcast-tower% %i18n:@announcements%</header>
<div>
<div v-for="announcement in announcements">
<h1 v-html="announcement.title"></h1>
<div v-html="announcement.text"></div>
</div>
</div>
</div>
<div class="photos block">
<header>%fa:images% %i18n:@photos%</header>
<div>
<div v-for="photo in photos" :style="`background-image: url(${photo.thumbnailUrl})`"></div>
</div>
</div>
<div class="nav block">
<div>
<mk-nav class="nav"/>
</div>
</div>
<div class="side">
<div class="trends block">
<div> <div>
<mk-trends/> <h1 v-if="name != 'Misskey'">{{ name }}</h1>
<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name"></h1>
<div class="info">
<span><b>{{ host }}</b> - <span v-html="'%i18n:@powered-by-misskey%'"></span></span>
<span class="stats" v-if="stats">
<span>%fa:user% {{ stats.originalUsersCount | number }}</span>
<span>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</span>
</span>
</div>
<div class="desc">
<span class="desc" v-html="description || '%i18n:common.about%'"></span>
<a class="about" @click="about">%i18n:@about%</a>
</div>
<p class="sign">
<span class="signup" @click="signup">%i18n:@signup%</span>
<span class="divider">|</span>
<span class="signin" @click="signin">%i18n:@signin%</span>
</p>
<img src="/assets/ai.png" alt="" title="藍" class="char">
</div> </div>
</div> </div>
<div class="tl block"> <div class="announcements block">
<header>%fa:comment-alt R% %i18n:@timeline%</header> <header>%fa:broadcast-tower% %i18n:@announcements%</header>
<div v-if="announcements && announcements.length > 0">
<div v-for="announcement in announcements">
<h1 v-html="announcement.title"></h1>
<div v-html="announcement.text"></div>
</div>
</div>
</div>
<div class="photos block">
<header>%fa:images% %i18n:@photos%</header>
<div> <div>
<mk-welcome-timeline class="tl" :max="20"/> <div v-for="photo in photos" :style="`background-image: url(${photo.thumbnailUrl})`"></div>
</div>
</div>
<div class="tag-cloud block">
<div>
<mk-tag-cloud/>
</div>
</div>
<div class="nav block">
<div>
<mk-nav class="nav"/>
</div>
</div>
<div class="side">
<div class="trends block">
<div>
<mk-trends/>
</div>
</div>
<div class="tl block">
<header>%fa:comment-alt R% %i18n:@timeline%</header>
<div>
<mk-welcome-timeline class="tl" :max="20"/>
</div>
</div>
<div class="info block">
<header>%fa:info-circle% %i18n:@info%</header>
<div>
<div v-if="meta" class="body">
<p>Version: <b>{{ meta.version }}</b></p>
<p>Maintainer: <b><a :href="meta.maintainer.url" target="_blank">{{ meta.maintainer.name }}</a></b></p>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </main>
<modal name="about" :class="$store.state.device.darkmode ? ['about', 'modal-dark'] : ['about', 'modal-light']" width="800px" height="auto" scrollable>
<article class="fpdezooorhntlzyeszemrsqdlgbysvxq">
<h1>%i18n:common.intro.title%</h1>
<p v-html="'%i18n:common.intro.about%'"></p>
<section>
<h2>%i18n:common.intro.features%</h2>
<section>
<div class="body">
<h3>%i18n:common.intro.rich-contents%</h3>
<p v-html="'%i18n:common.intro.rich-contents-desc%'"></p>
</div>
<div class="image"><img src="/assets/about/post.png" alt=""></div>
</section>
<section>
<div class="body">
<h3>%i18n:common.intro.reaction%</h3>
<p v-html="'%i18n:common.intro.reaction-desc%'"></p>
</div>
<div class="image"><img src="/assets/about/reaction.png" alt=""></div>
</section>
<section>
<div class="body">
<h3>%i18n:common.intro.ui%</h3>
<p v-html="'%i18n:common.intro.ui-desc%'"></p>
</div>
<div class="image"><img src="/assets/about/ui.png" alt=""></div>
</section>
<section>
<div class="body">
<h3>%i18n:common.intro.drive%</h3>
<p v-html="'%i18n:common.intro.drive-desc%'"></p>
</div>
<div class="image"><img src="/assets/about/drive.png" alt=""></div>
</section>
</section>
<p v-html="'%i18n:common.intro.outro%'"></p>
</article>
</modal>
<modal name="signup" :class="$store.state.device.darkmode ? 'modal-dark' : 'modal-light'" width="450px" height="auto" scrollable> <modal name="signup" :class="$store.state.device.darkmode ? 'modal-dark' : 'modal-light'" width="450px" height="auto" scrollable>
<header class="formHeader">%i18n:@signup%</header> <header class="formHeader">%i18n:@signup%</header>
@ -85,10 +147,12 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import { host, copyright } from '../../../config'; import { host, copyright } from '../../../config';
import { concat } from '../../../../../prelude/array';
export default Vue.extend({ export default Vue.extend({
data() { data() {
return { return {
meta: null,
stats: null, stats: null,
copyright, copyright,
host, host,
@ -101,6 +165,7 @@ export default Vue.extend({
created() { created() {
(this as any).os.getMeta().then(meta => { (this as any).os.getMeta().then(meta => {
this.meta = meta;
this.name = meta.name; this.name = meta.name;
this.description = meta.description; this.description = meta.description;
this.announcements = meta.broadcasts; this.announcements = meta.broadcasts;
@ -119,13 +184,17 @@ export default Vue.extend({
(this as any).api('notes/local-timeline', { (this as any).api('notes/local-timeline', {
fileType: image, fileType: image,
limit: 6 limit: 6
}).then(notes => { }).then((notes: any[]) => {
const files = [].concat(...notes.map(n => n.files)); const files = concat(notes.map((n: any): any[] => n.files));
this.photos = files.filter(f => image.includes(f.type)).slice(0, 6); this.photos = files.filter(f => image.includes(f.type)).slice(0, 6);
}); });
}, },
methods: { methods: {
about() {
this.$modal.show('about');
},
signup() { signup() {
this.$modal.show('signup'); this.$modal.show('signup');
}, },
@ -178,6 +247,54 @@ export default Vue.extend({
margin 0 48px margin 0 48px
font-size 1.5em font-size 1.5em
.v--modal-overlay.about
.v--modal-box.v--modal
margin 32px 0
.fpdezooorhntlzyeszemrsqdlgbysvxq
padding 64px
> p:last-child
margin-bottom 0
> h1
margin-top 0
> section
> h2
border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
> section
display grid
grid-template-rows 1fr
grid-template-columns 180px 1fr
gap 32px
margin-bottom 32px
padding-bottom 32px
border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
&:nth-child(odd)
grid-template-columns 1fr 180px
> .body
grid-column 1
> .image
grid-column 2
> .body
grid-row 1
grid-column 2
> .image
grid-row 1
grid-column 1
> img
display block
width 100%
height 100%
object-fit cover
</style> </style>
<style lang="stylus" scoped> <style lang="stylus" scoped>
@ -205,17 +322,11 @@ root(isDark)
font-size 18px font-size 18px
color isDark ? #fff : #444 color isDark ? #fff : #444
> .body > main
display grid
grid-template-rows 1fr 1fr 64px
grid-template-columns 1fr 1fr 350px
gap 16px
width 100%
max-width 1200px
height 100vh
min-height 1000px
margin 0 auto margin 0 auto
padding 64px padding 64px
width 100%
max-width 1200px
.block .block
color isDark ? #fff : #444 color isDark ? #fff : #444
@ -239,105 +350,148 @@ root(isDark)
> div > div
overflow auto overflow auto
> .main > .body
grid-row 1 display grid
grid-column 1 / 3 grid-template-rows 390px 1fr 256px 64px
border-top solid 5px $theme-color grid-template-columns 1fr 1fr 350px
gap 16px
height 1150px
> div > .main
padding 32px grid-row 1
grid-column 1 / 3
> h1 border-top solid 5px $theme-color
margin 0
> img
margin -8px 0 0 -16px
max-width 280px
> .info
margin 0 auto 16px auto
width $width
font-size 14px
> .stats
margin-left 16px
padding-left 16px
border-left solid 1px isDark ? #fff : #444
> *
margin-right 16px
> .sign
font-size 120%
> .divider
margin 0 16px
> .signin
> .signup
cursor pointer
&:hover
color $theme-color
> .announcements
grid-row 2
grid-column 1
> div
padding 32px
> div > div
padding 0 0 16px 0 padding 32px
margin 0 0 16px 0 min-height 100%
border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
> h1 > h1
margin 0 margin 0
font-size 1.25em
> .photos > img
grid-row 2 margin -8px 0 0 -16px
grid-column 2 max-width 280px
> div > .info
display grid margin 0 auto 16px auto
grid-template-rows 1fr 1fr 1fr width $width
grid-template-columns 1fr 1fr font-size 14px
gap 8px
height 100%
padding 16px
> div > .stats
//border-radius 4px margin-left 16px
background-position center center padding-left 16px
background-size cover border-left solid 1px isDark ? #fff : #444
> .nav > *
display flex margin-right 16px
justify-content center
align-items center
grid-row 3
grid-column 1 / 3
font-size 14px
> .side > .desc
display grid max-width calc(100% - 150px)
grid-row 1 / 4
grid-column 3
grid-template-rows 1fr 350px
grid-template-columns 1fr
gap 16px
> .tl > .sign
grid-row 1 font-size 120%
grid-column 1 margin-bottom 0
overflow auto
> .trends > .divider
margin 0 16px
> .signin
> .signup
cursor pointer
&:hover
color $theme-color
> .char
display block
position absolute
right 16px
bottom 0
height 320px
opacity 0.7
> *:not(.char)
z-index 1
> .announcements
grid-row 2 grid-row 2
grid-column 1 grid-column 1
padding 8px
> div
padding 32px
> div
padding 0 0 16px 0
margin 0 0 16px 0
border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
> h1
margin 0
font-size 1.25em
> .photos
grid-row 2
grid-column 2
> div
display grid
grid-template-rows 1fr 1fr 1fr
grid-template-columns 1fr 1fr
gap 8px
height 100%
padding 16px
> div
//border-radius 4px
background-position center center
background-size cover
> .tag-cloud
grid-row 3
grid-column 1 / 3
> div
height 256px
padding 32px
> .nav
display flex
justify-content center
align-items center
grid-row 4
grid-column 1 / 3
font-size 14px
> .side
display grid
grid-row 1 / 5
grid-column 3
grid-template-rows 1fr 350px
grid-template-columns 1fr
gap 16px
> .tl
grid-row 1
grid-column 1
overflow auto
> .trends
grid-row 2
grid-column 1
padding 8px
> .info
grid-row 3
grid-column 1
> div
padding 16px
> .body
> p
display block
margin 0
.mk-welcome[data-darkmode] .mk-welcome[data-darkmode]
root(true) root(true)

View File

@ -17,6 +17,7 @@ import Err from './common/views/components/connect-failed.vue';
import { LocalTimelineStreamManager } from './common/scripts/streaming/local-timeline'; import { LocalTimelineStreamManager } from './common/scripts/streaming/local-timeline';
import { HybridTimelineStreamManager } from './common/scripts/streaming/hybrid-timeline'; import { HybridTimelineStreamManager } from './common/scripts/streaming/hybrid-timeline';
import { GlobalTimelineStreamManager } from './common/scripts/streaming/global-timeline'; import { GlobalTimelineStreamManager } from './common/scripts/streaming/global-timeline';
import { erase } from '../../prelude/array';
//#region api requests //#region api requests
let spinner = null; let spinner = null;
@ -537,7 +538,7 @@ export default class MiOS extends EventEmitter {
} }
public unregisterStreamConnection(connection: Connection) { public unregisterStreamConnection(connection: Connection) {
this.connections = this.connections.filter(c => c != connection); this.connections = erase(connection, this.connections);
} }
} }

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="qjewsnkgzzxlxtzncydssfbgjibiehcy" v-if="image.isSensitive && hide" @click="hide = false"> <div class="qjewsnkgzzxlxtzncydssfbgjibiehcy" v-if="image.isSensitive && hide && !$store.state.device.alwaysShowNsfw" @click="hide = false">
<div> <div>
<b>%fa:exclamation-triangle% %i18n:@sensitive%</b> <b>%fa:exclamation-triangle% %i18n:@sensitive%</b>
<span>%i18n:@click-to-show%</span> <span>%i18n:@click-to-show%</span>

View File

@ -35,20 +35,26 @@
</div> </div>
</header> </header>
<div class="body"> <div class="body">
<div class="text"> <p v-if="p.cw != null" class="cw">
<span v-if="p.isHidden" style="opacity: 0.5">(%i18n:@private%)</span> <span class="text" v-if="p.cw != ''">{{ p.cw }}</span>
<span v-if="p.deletedAt" style="opacity: 0.5">(%i18n:@deleted%)</span> <mk-cw-button v-model="showContent"/>
<misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i"/> </p>
</div> <div class="content" v-show="p.cw == null || showContent">
<div class="files" v-if="p.files.length > 0"> <div class="text">
<mk-media-list :media-list="p.files" :raw="true"/> <span v-if="p.isHidden" style="opacity: 0.5">(%i18n:@private%)</span>
</div> <span v-if="p.deletedAt" style="opacity: 0.5">(%i18n:@deleted%)</span>
<mk-poll v-if="p.poll" :note="p"/> <misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i"/>
<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="true"/> </div>
<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a> <div class="files" v-if="p.files.length > 0">
<div class="map" v-if="p.geo" ref="map"></div> <mk-media-list :media-list="p.files" :raw="true"/>
<div class="renote" v-if="p.renote"> </div>
<mk-note-preview :note="p.renote"/> <mk-poll v-if="p.poll" :note="p"/>
<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="true"/>
<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
<div class="map" v-if="p.geo" ref="map"></div>
<div class="renote" v-if="p.renote">
<mk-note-preview :note="p.renote"/>
</div>
</div> </div>
</div> </div>
<router-link class="time" :to="p | notePage"> <router-link class="time" :to="p | notePage">
@ -85,6 +91,7 @@ import parse from '../../../../../mfm/parse';
import MkNoteMenu from '../../../common/views/components/note-menu.vue'; import MkNoteMenu from '../../../common/views/components/note-menu.vue';
import MkReactionPicker from '../../../common/views/components/reaction-picker.vue'; import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
import XSub from './note.sub.vue'; import XSub from './note.sub.vue';
import { sum } from '../../../../../prelude/array';
export default Vue.extend({ export default Vue.extend({
components: { components: {
@ -103,6 +110,7 @@ export default Vue.extend({
data() { data() {
return { return {
showContent: false,
conversation: [], conversation: [],
conversationFetching: false, conversationFetching: false,
replies: [] replies: []
@ -123,9 +131,7 @@ export default Vue.extend({
reactionsCount(): number { reactionsCount(): number {
return this.p.reactionCounts return this.p.reactionCounts
? Object.keys(this.p.reactionCounts) ? sum(Object.values(this.p.reactionCounts))
.map(key => this.p.reactionCounts[key])
.reduce((a, b) => a + b)
: 0; : 0;
}, },
@ -335,44 +341,57 @@ root(isDark)
> .body > .body
padding 8px 0 padding 8px 0
> .text > .cw
cursor default
display block display block
margin 0 margin 0
padding 0 padding 0
overflow-wrap break-word overflow-wrap break-word
font-size 16px
color isDark ? #fff : #717171 color isDark ? #fff : #717171
@media (min-width 500px) > .text
font-size 24px margin-right 8px
> .renote > .content
margin 8px 0
> .mk-note-preview > .text
padding 16px
border dashed 1px #c0dac6
border-radius 8px
> .location
margin 4px 0
font-size 12px
color #ccc
> .map
width 100%
height 200px
&:empty
display none
> .mk-url-preview
margin-top 8px
> .files
> img
display block display block
max-width 100% margin 0
padding 0
overflow-wrap break-word
font-size 16px
color isDark ? #fff : #717171
@media (min-width 500px)
font-size 24px
> .renote
margin 8px 0
> *
padding 16px
border dashed 1px #c0dac6
border-radius 8px
> .location
margin 4px 0
font-size 12px
color #ccc
> .map
width 100%
height 200px
&:empty
display none
> .mk-url-preview
margin-top 8px
> .files
> img
display block
max-width 100%
> .time > .time
font-size 16px font-size 16px

View File

@ -1,10 +1,16 @@
<template> <template>
<div class="mk-note-preview" :class="{ smart: $store.state.device.postStyle == 'smart' }"> <div class="yohlumlkhizgfkvvscwfcrcggkotpvry" :class="{ smart: $store.state.device.postStyle == 'smart' }">
<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'"/>
<div class="main"> <div class="main">
<mk-note-header class="header" :note="note" :mini="true"/> <mk-note-header class="header" :note="note" :mini="true"/>
<div class="body"> <div class="body">
<mk-sub-note-content class="text" :note="note"/> <p v-if="note.cw != null" class="cw">
<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
<mk-cw-button v-model="showContent"/>
</p>
<div class="content" v-show="note.cw == null || showContent">
<mk-sub-note-content class="text" :note="note"/>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -14,7 +20,18 @@
import Vue from 'vue'; import Vue from 'vue';
export default Vue.extend({ export default Vue.extend({
props: ['note'] props: {
note: {
type: Object,
required: true
}
},
data() {
return {
showContent: false
};
}
}); });
</script> </script>
@ -65,16 +82,28 @@ root(isDark)
> .body > .body
> .text > .cw
cursor default cursor default
display block
margin 0 margin 0
padding 0 padding 0
color isDark ? #959ba7 : #717171 overflow-wrap break-word
color isDark ? #fff : #717171
.mk-note-preview[data-darkmode] > .text
margin-right 8px
> .content
> .text
cursor default
margin 0
padding 0
color isDark ? #959ba7 : #717171
.yohlumlkhizgfkvvscwfcrcggkotpvry[data-darkmode]
root(true) root(true)
.mk-note-preview:not([data-darkmode]) .yohlumlkhizgfkvvscwfcrcggkotpvry:not([data-darkmode])
root(false) root(false)
</style> </style>

View File

@ -1,10 +1,16 @@
<template> <template>
<div class="sub" :class="{ smart: $store.state.device.postStyle == 'smart' }"> <div class="zlrxdaqttccpwhpaagdmkawtzklsccam" :class="{ smart: $store.state.device.postStyle == 'smart' }">
<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'"/>
<div class="main"> <div class="main">
<mk-note-header class="header" :note="note" :mini="true"/> <mk-note-header class="header" :note="note" :mini="true"/>
<div class="body"> <div class="body">
<mk-sub-note-content class="text" :note="note"/> <p v-if="note.cw != null" class="cw">
<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
<mk-cw-button v-model="showContent"/>
</p>
<div class="content" v-show="note.cw == null || showContent">
<mk-sub-note-content class="text" :note="note"/>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -24,6 +30,12 @@ export default Vue.extend({
type: Boolean, type: Boolean,
default: true default: true
} }
},
data() {
return {
showContent: false
};
} }
}); });
</script> </script>
@ -77,20 +89,31 @@ root(isDark)
margin-bottom 2px margin-bottom 2px
> .body > .body
> .cw
> .text cursor default
display block
margin 0 margin 0
padding 0 padding 0
color isDark ? #959ba7 : #717171 overflow-wrap break-word
color isDark ? #fff : #717171
pre > .text
max-height 120px margin-right 8px
font-size 80%
.sub[data-darkmode] > .content
> .text
margin 0
padding 0
color isDark ? #959ba7 : #717171
pre
max-height 120px
font-size 80%
.zlrxdaqttccpwhpaagdmkawtzklsccam[data-darkmode]
root(true) root(true)
.sub:not([data-darkmode]) .zlrxdaqttccpwhpaagdmkawtzklsccam:not([data-darkmode])
root(false) root(false)
</style> </style>

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 ? '%i18n:@less%' : '%i18n:@more%' }}</span> <mk-cw-button v-model="showContent"/>
</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">
@ -35,9 +35,7 @@
<mk-url-preview v-for="url in urls" :url="url" :key="url"/> <mk-url-preview v-for="url in urls" :url="url" :key="url"/>
<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a> <a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
<div class="map" v-if="p.geo" ref="map"></div> <div class="map" v-if="p.geo" ref="map"></div>
<div class="renote" v-if="p.renote"> <div class="renote" v-if="p.renote"><mk-note-preview :note="p.renote"/></div>
<mk-note-preview :note="p.renote"/>
</div>
</div> </div>
<span class="app" v-if="p.app">via <b>{{ p.app.name }}</b></span> <span class="app" v-if="p.app">via <b>{{ p.app.name }}</b></span>
</div> </div>
@ -70,6 +68,7 @@ import parse from '../../../../../mfm/parse';
import MkNoteMenu from '../../../common/views/components/note-menu.vue'; import MkNoteMenu from '../../../common/views/components/note-menu.vue';
import MkReactionPicker from '../../../common/views/components/reaction-picker.vue'; import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
import XSub from './note.sub.vue'; import XSub from './note.sub.vue';
import { sum } from '../../../../../prelude/array';
export default Vue.extend({ export default Vue.extend({
components: { components: {
@ -100,9 +99,7 @@ export default Vue.extend({
reactionsCount(): number { reactionsCount(): number {
return this.p.reactionCounts return this.p.reactionCounts
? Object.keys(this.p.reactionCounts) ? sum(Object.values(this.p.reactionCounts))
.map(key => this.p.reactionCounts[key])
.reduce((a, b) => a + b)
: 0; : 0;
}, },
@ -353,19 +350,6 @@ root(isDark)
> .text > .text
margin-right 8px margin-right 8px
> .toggle
display inline-block
padding 4px 8px
font-size 0.7em
color isDark ? #393f4f : #fff
background isDark ? #687390 : #b1b9c1
border-radius 2px
cursor pointer
user-select none
&:hover
background isDark ? #707b97 : #bbc4ce
> .content > .content
> .text > .text
@ -437,7 +421,7 @@ root(isDark)
> .renote > .renote
margin 8px 0 margin 8px 0
> .mk-note-preview > *
padding 16px padding 16px
border dashed 1px isDark ? #4e945e : #c0dac6 border dashed 1px isDark ? #4e945e : #c0dac6
border-radius 8px border-radius 8px

View File

@ -14,8 +14,7 @@
</div> </div>
<!-- トランジションを有効にするとなぜかメモリリークする --> <!-- トランジションを有効にするとなぜかメモリリークする -->
<!-- <transition-group name="mk-notes" class="transition"> --> <transition-group name="mk-notes" class="transition" tag="div">
<div class="transition">
<template v-for="(note, i) in _notes"> <template v-for="(note, i) in _notes">
<mk-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)"/> <mk-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)"/>
<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date"> <p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
@ -23,8 +22,7 @@
<span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span> <span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span>
</p> </p>
</template> </template>
</div> </transition-group>
<!-- </transition-group> -->
<footer v-if="more"> <footer v-if="more">
<button @click="loadMore" :disabled="moreFetching" :style="{ cursor: moreFetching ? 'wait' : 'pointer' }"> <button @click="loadMore" :disabled="moreFetching" :style="{ cursor: moreFetching ? 'wait' : 'pointer' }">

View File

@ -45,7 +45,7 @@ export default Vue.extend({
$height = 78px $height = 78px
position fixed position fixed
z-index 1024 z-index 10000
left 0 left 0
right 0 right 0
width 100% width 100%

View File

@ -4,14 +4,14 @@
<header> <header>
<button class="cancel" @click="cancel">%fa:times%</button> <button class="cancel" @click="cancel">%fa:times%</button>
<div> <div>
<span class="text-count" :class="{ over: text.length > 1000 }">{{ 1000 - text.length }}</span> <span class="text-count" :class="{ over: trimmedLength(text) > 1000 }">{{ 1000 - trimmedLength(text) }}</span>
<span class="geo" v-if="geo">%fa:map-marker-alt%</span> <span class="geo" v-if="geo">%fa:map-marker-alt%</span>
<button class="submit" :disabled="!canPost" @click="post">{{ submitText }}</button> <button class="submit" :disabled="!canPost" @click="post">{{ submitText }}</button>
</div> </div>
</header> </header>
<div class="form"> <div class="form">
<mk-note-preview v-if="reply" :note="reply"/> <mk-note-preview class="preview" v-if="reply" :note="reply"/>
<mk-note-preview v-if="renote" :note="renote"/> <mk-note-preview class="preview" v-if="renote" :note="renote"/>
<div v-if="visibility == 'specified'" class="visibleUsers"> <div v-if="visibility == 'specified'" class="visibleUsers">
<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>
@ -59,6 +59,9 @@ import MkVisibilityChooser from '../../../common/views/components/visibility-cho
import getFace from '../../../common/scripts/get-face'; import getFace from '../../../common/scripts/get-face';
import parse from '../../../../../mfm/parse'; import parse from '../../../../../mfm/parse';
import { host } from '../../../config'; import { host } from '../../../config';
import { erase } from '../../../../../prelude/array';
import { length } from 'stringz';
import parseAcct from '../../../../../misc/acct/parse';
export default Vue.extend({ export default Vue.extend({
components: { components: {
@ -94,7 +97,7 @@ export default Vue.extend({
files: [], files: [],
poll: false, poll: false,
geo: null, geo: null,
visibility: this.$store.state.device.visibility || 'public', visibility: this.$store.state.settings.rememberNoteVisibility ? (this.$store.state.device.visibility || this.$store.state.settings.defaultNoteVisibility) : this.$store.state.settings.defaultNoteVisibility,
visibleUsers: [], visibleUsers: [],
useCw: false, useCw: false,
cw: null, cw: null,
@ -178,6 +181,10 @@ export default Vue.extend({
}, },
methods: { methods: {
trimmedLength(text: string) {
return length(text.trim());
},
addTag(tag: string) { addTag(tag: string) {
insertTextAtCursor(this.$refs.text, ` #${tag} `); insertTextAtCursor(this.$refs.text, ` #${tag} `);
}, },
@ -252,17 +259,16 @@ export default Vue.extend({
addVisibleUser() { addVisibleUser() {
(this as any).apis.input({ (this as any).apis.input({
title: '%i18n:@username-prompt%' title: '%i18n:@username-prompt%'
}).then(username => { }).then(acct => {
(this as any).api('users/show', { if (acct.startsWith('@')) acct = acct.substr(1);
username (this as any).api('users/show', parseAcct(acct)).then(user => {
}).then(user => {
this.visibleUsers.push(user); this.visibleUsers.push(user);
}); });
}); });
}, },
removeVisibleUser(user) { removeVisibleUser(user) {
this.visibleUsers = this.visibleUsers.filter(u => u != user); this.visibleUsers = erase(user, this.visibleUsers);
}, },
clear() { clear() {
@ -302,7 +308,7 @@ export default Vue.extend({
if (this.text && this.text != '') { if (this.text && this.text != '') {
const hashtags = parse(this.text).filter(x => x.type == 'hashtag').map(x => x.hashtag); const hashtags = parse(this.text).filter(x => x.type == 'hashtag').map(x => x.hashtag);
const history = JSON.parse(localStorage.getItem('hashtags') || '[]') as string[]; const history = JSON.parse(localStorage.getItem('hashtags') || '[]') as string[];
localStorage.setItem('hashtags', JSON.stringify(hashtags.concat(history).reduce((a, c) => a.includes(c) ? a : [...a, c], []))); localStorage.setItem('hashtags', JSON.stringify(unique(hashtags.concat(history))));
} }
}, },
@ -381,7 +387,7 @@ root(isDark)
max-width 500px max-width 500px
margin 0 auto margin 0 auto
> .mk-note-preview > .preview
padding 16px padding 16px
> .visibleUsers > .visibleUsers

View File

@ -34,7 +34,7 @@
<li @click="dark"><p><template v-if="$store.state.device.darkmode">%fa:moon%</template><template v-else>%fa:R moon%</template><span>%i18n:@darkmode%</span></p></li> <li @click="dark"><p><template v-if="$store.state.device.darkmode">%fa:moon%</template><template v-else>%fa:R moon%</template><span>%i18n:@darkmode%</span></p></li>
</ul> </ul>
</div> </div>
<div class="announcements" v-if="announcements.length > 0"> <div class="announcements" v-if="announcements && announcements.length > 0">
<article v-for="announcement in announcements"> <article v-for="announcement in announcements">
<span v-html="announcement.title" class="title"></span> <span v-html="announcement.title" class="title"></span>
<div v-html="announcement.text"></div> <div v-html="announcement.text"></div>

View File

@ -24,8 +24,8 @@
<div class="body"> <div class="body">
<div> <div>
<span :data-active="src == 'home'" @click="src = 'home'">%fa:home% %i18n:@home%</span> <span :data-active="src == 'home'" @click="src = 'home'">%fa:home% %i18n:@home%</span>
<span :data-active="src == 'local'" @click="src = 'local'">%fa:R comments% %i18n:@local%</span> <span :data-active="src == 'local'" @click="src = 'local'" v-if="enableLocalTimeline">%fa:R comments% %i18n:@local%</span>
<span :data-active="src == 'hybrid'" @click="src = 'hybrid'">%fa:share-alt% %i18n:@hybrid%</span> <span :data-active="src == 'hybrid'" @click="src = 'hybrid'" v-if="enableLocalTimeline">%fa:share-alt% %i18n:@hybrid%</span>
<span :data-active="src == 'global'" @click="src = 'global'">%fa:globe% %i18n:@global%</span> <span :data-active="src == 'global'" @click="src = 'global'">%fa:globe% %i18n:@global%</span>
<template v-if="lists"> <template v-if="lists">
<span v-for="l in lists" :data-active="src == 'list' && list == l" @click="src = 'list'; list = l" :key="l.id">%fa:list% {{ l.title }}</span> <span v-for="l in lists" :data-active="src == 'list' && list == l" @click="src = 'list'; list = l" :key="l.id">%fa:list% {{ l.title }}</span>
@ -60,7 +60,8 @@ export default Vue.extend({
src: 'home', src: 'home',
list: null, list: null,
lists: null, lists: null,
showNav: false showNav: false,
enableLocalTimeline: false
}; };
}, },
@ -85,6 +86,10 @@ export default Vue.extend({
}, },
created() { created() {
(this as any).os.getMeta().then(meta => {
this.enableLocalTimeline = !meta.disableLocalTimeline;
});
if (this.$store.state.device.tl) { if (this.$store.state.device.tl) {
this.src = this.$store.state.device.tl.src; this.src = this.$store.state.device.tl.src;
if (this.src == 'list') { if (this.src == 'list') {

View File

@ -12,20 +12,22 @@
<section> <section>
<ui-switch v-model="darkmode">%i18n:@dark-mode%</ui-switch> <ui-switch v-model="darkmode">%i18n:@dark-mode%</ui-switch>
<ui-switch v-model="$store.state.settings.circleIcons" @change="onChangeCircleIcons">%i18n:@circle-icons%</ui-switch> <ui-switch v-model="circleIcons">%i18n:@circle-icons%</ui-switch>
<ui-switch v-model="$store.state.settings.iLikeSushi" @change="onChangeILikeSushi">%i18n:common.i-like-sushi%</ui-switch> <ui-switch v-model="contrastedAcct">%i18n:@contrasted-acct%</ui-switch>
<ui-switch v-model="$store.state.settings.disableAnimatedMfm" @change="onChangeDisableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch> <ui-switch v-model="iLikeSushi">%i18n:common.i-like-sushi%</ui-switch>
<ui-switch v-model="$store.state.settings.games.reversi.showBoardLabels" @change="onChangeReversiBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch> <ui-switch v-model="disableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch>
<ui-switch v-model="$store.state.settings.games.reversi.useContrastStones" @change="onChangeUseContrastReversiStones">%i18n:common.use-contrast-reversi-stones%</ui-switch> <ui-switch v-model="alwaysShowNsfw">%i18n:common.always-show-nsfw% (%i18n:common.this-setting-is-this-device-only%)</ui-switch>
<ui-switch v-model="games_reversi_showBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch>
<ui-switch v-model="games_reversi_useContrastStones">%i18n:common.use-contrast-reversi-stones%</ui-switch>
</section> </section>
<section> <section>
<header>%i18n:@timeline%</header> <header>%i18n:@timeline%</header>
<div> <div>
<ui-switch v-model="$store.state.settings.showReplyTarget" @change="onChangeShowReplyTarget">%i18n:@show-reply-target%</ui-switch> <ui-switch v-model="showReplyTarget">%i18n:@show-reply-target%</ui-switch>
<ui-switch v-model="$store.state.settings.showMyRenotes" @change="onChangeShowMyRenotes">%i18n:@show-my-renotes%</ui-switch> <ui-switch v-model="showMyRenotes">%i18n:@show-my-renotes%</ui-switch>
<ui-switch v-model="$store.state.settings.showRenotedMyNotes" @change="onChangeShowRenotedMyNotes">%i18n:@show-renoted-my-notes%</ui-switch> <ui-switch v-model="showRenotedMyNotes">%i18n:@show-renoted-my-notes%</ui-switch>
<ui-switch v-model="$store.state.settings.showLocalRenotes" @change="onChangeShowLocalRenotes">%i18n:@show-local-renotes%</ui-switch> <ui-switch v-model="showLocalRenotes">%i18n:@show-local-renotes%</ui-switch>
</div> </div>
</section> </section>
@ -46,12 +48,27 @@
<div slot="title">%fa:cog% %i18n:@behavior%</div> <div slot="title">%fa:cog% %i18n:@behavior%</div>
<section> <section>
<ui-switch v-model="$store.state.settings.fetchOnScroll" @change="onChangeFetchOnScroll">%i18n:@fetch-on-scroll%</ui-switch> <ui-switch v-model="fetchOnScroll">%i18n:@fetch-on-scroll%</ui-switch>
<ui-switch v-model="$store.state.settings.disableViaMobile" @change="onChangeDisableViaMobile">%i18n:@disable-via-mobile%</ui-switch> <ui-switch v-model="disableViaMobile">%i18n:@disable-via-mobile%</ui-switch>
<ui-switch v-model="loadRawImages">%i18n:@load-raw-images%</ui-switch> <ui-switch v-model="loadRawImages">%i18n:@load-raw-images%</ui-switch>
<ui-switch v-model="$store.state.settings.loadRemoteMedia" @change="onChangeLoadRemoteMedia">%i18n:@load-remote-media%</ui-switch> <ui-switch v-model="loadRemoteMedia">%i18n:@load-remote-media%</ui-switch>
<ui-switch v-model="lightmode">%i18n:@i-am-under-limited-internet%</ui-switch> <ui-switch v-model="lightmode">%i18n:@i-am-under-limited-internet%</ui-switch>
</section> </section>
<section>
<header>%i18n:@note-visibility%</header>
<ui-switch v-model="rememberNoteVisibility">%i18n:@remember-note-visibility%</ui-switch>
<section>
<header>%i18n:@default-note-visibility%</header>
<ui-select v-model="defaultNoteVisibility">
<option value="public">%i18n:common.note-visibility.public%</option>
<option value="home">%i18n:common.note-visibility.home%</option>
<option value="followers">%i18n:common.note-visibility.followers%</option>
<option value="specified">%i18n:common.note-visibility.specified%</option>
<option value="private">%i18n:common.note-visibility.private%</option>
</ui-select>
</section>
</section>
</ui-card> </ui-card>
<ui-card> <ui-card>
@ -150,6 +167,11 @@ export default Vue.extend({
set(value) { this.$store.commit('device/set', { key: 'darkmode', value }); } set(value) { this.$store.commit('device/set', { key: 'darkmode', value }); }
}, },
alwaysShowNsfw: {
get() { return this.$store.state.device.alwaysShowNsfw; },
set(value) { this.$store.commit('device/set', { key: 'alwaysShowNsfw', value }); }
},
postStyle: { postStyle: {
get() { return this.$store.state.device.postStyle; }, get() { return this.$store.state.device.postStyle; },
set(value) { this.$store.commit('device/set', { key: 'postStyle', value }); } set(value) { this.$store.commit('device/set', { key: 'postStyle', value }); }
@ -179,6 +201,81 @@ export default Vue.extend({
get() { return this.$store.state.device.enableSounds; }, get() { return this.$store.state.device.enableSounds; },
set(value) { this.$store.commit('device/set', { key: 'enableSounds', value }); } set(value) { this.$store.commit('device/set', { key: 'enableSounds', value }); }
}, },
fetchOnScroll: {
get() { return this.$store.state.settings.fetchOnScroll; },
set(value) { this.$store.dispatch('settings/set', { key: 'fetchOnScroll', value }); }
},
rememberNoteVisibility: {
get() { return this.$store.state.settings.rememberNoteVisibility; },
set(value) { this.$store.dispatch('settings/set', { key: 'rememberNoteVisibility', value }); }
},
disableViaMobile: {
get() { return this.$store.state.settings.disableViaMobile; },
set(value) { this.$store.dispatch('settings/set', { key: 'disableViaMobile', value }); }
},
loadRemoteMedia: {
get() { return this.$store.state.settings.loadRemoteMedia; },
set(value) { this.$store.dispatch('settings/set', { key: 'loadRemoteMedia', value }); }
},
circleIcons: {
get() { return this.$store.state.settings.circleIcons; },
set(value) { this.$store.dispatch('settings/set', { key: 'circleIcons', value }); }
},
contrastedAcct: {
get() { return this.$store.state.settings.contrastedAcct; },
set(value) { this.$store.dispatch('settings/set', { key: 'contrastedAcct', value }); }
},
iLikeSushi: {
get() { return this.$store.state.settings.iLikeSushi; },
set(value) { this.$store.dispatch('settings/set', { key: 'iLikeSushi', value }); }
},
games_reversi_showBoardLabels: {
get() { return this.$store.state.settings.games.reversi.showBoardLabels; },
set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.showBoardLabels', value }); }
},
games_reversi_useContrastStones: {
get() { return this.$store.state.settings.games.reversi.useContrastStones; },
set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.useContrastStones', value }); }
},
disableAnimatedMfm: {
get() { return this.$store.state.settings.disableAnimatedMfm; },
set(value) { this.$store.dispatch('settings/set', { key: 'disableAnimatedMfm', value }); }
},
showReplyTarget: {
get() { return this.$store.state.settings.showReplyTarget; },
set(value) { this.$store.dispatch('settings/set', { key: 'showReplyTarget', value }); }
},
showMyRenotes: {
get() { return this.$store.state.settings.showMyRenotes; },
set(value) { this.$store.dispatch('settings/set', { key: 'showMyRenotes', value }); }
},
showRenotedMyNotes: {
get() { return this.$store.state.settings.showRenotedMyNotes; },
set(value) { this.$store.dispatch('settings/set', { key: 'showRenotedMyNotes', value }); }
},
showLocalRenotes: {
get() { return this.$store.state.settings.showLocalRenotes; },
set(value) { this.$store.dispatch('settings/set', { key: 'showLocalRenotes', value }); }
},
defaultNoteVisibility: {
get() { return this.$store.state.settings.defaultNoteVisibility; },
set(value) { this.$store.dispatch('settings/set', { key: 'defaultNoteVisibility', value }); }
},
}, },
mounted() { mounted() {
@ -190,90 +287,6 @@ export default Vue.extend({
(this as any).os.signout(); (this as any).os.signout();
}, },
onChangeFetchOnScroll(v) {
this.$store.dispatch('settings/set', {
key: 'fetchOnScroll',
value: v
});
},
onChangeDisableViaMobile(v) {
this.$store.dispatch('settings/set', {
key: 'disableViaMobile',
value: v
});
},
onChangeLoadRemoteMedia(v) {
this.$store.dispatch('settings/set', {
key: 'loadRemoteMedia',
value: v
});
},
onChangeCircleIcons(v) {
this.$store.dispatch('settings/set', {
key: 'circleIcons',
value: v
});
},
onChangeILikeSushi(v) {
this.$store.dispatch('settings/set', {
key: 'iLikeSushi',
value: v
});
},
onChangeReversiBoardLabels(v) {
this.$store.dispatch('settings/set', {
key: 'games.reversi.showBoardLabels',
value: v
});
},
onChangeUseContrastReversiStones(v) {
this.$store.dispatch('settings/set', {
key: 'games.reversi.useContrastStones',
value: v
});
},
onChangeDisableAnimatedMfm(v) {
this.$store.dispatch('settings/set', {
key: 'disableAnimatedMfm',
value: v
});
},
onChangeShowReplyTarget(v) {
this.$store.dispatch('settings/set', {
key: 'showReplyTarget',
value: v
});
},
onChangeShowMyRenotes(v) {
this.$store.dispatch('settings/set', {
key: 'showMyRenotes',
value: v
});
},
onChangeShowRenotedMyNotes(v) {
this.$store.dispatch('settings/set', {
key: 'showRenotedMyNotes',
value: v
});
},
onChangeShowLocalRenotes(v) {
this.$store.dispatch('settings/set', {
key: 'showLocalRenotes',
value: v
});
},
checkForUpdate() { checkForUpdate() {
this.checkingForUpdate = true; this.checkingForUpdate = true;
checkForUpdate((this as any).os, true, true).then(newer => { checkForUpdate((this as any).os, true, true).then(newer => {

View File

@ -40,11 +40,25 @@
<span slot="text" v-if="bannerUploading">%i18n:@uploading%<mk-ellipsis/></span> <span slot="text" v-if="bannerUploading">%i18n:@uploading%<mk-ellipsis/></span>
</ui-input> </ui-input>
<ui-switch v-model="isCat">%i18n:@is-cat%</ui-switch> <ui-button @click="save(true)">%i18n:@save%</ui-button>
<ui-button @click="save">%i18n:@save%</ui-button>
</ui-form> </ui-form>
</section> </section>
<section>
<header>%i18n:@advanced%</header>
<div>
<ui-switch v-model="isCat" @change="save(false)">%i18n:@is-cat%</ui-switch>
</div>
</section>
<section>
<header>%i18n:@privacy%</header>
<div>
<ui-switch v-model="isLocked" @change="save(false)">%i18n:@is-locked%</ui-switch>
</div>
</section>
</ui-card> </ui-card>
</template> </template>
@ -64,6 +78,7 @@ export default Vue.extend({
avatarId: null, avatarId: null,
bannerId: null, bannerId: null,
isCat: false, isCat: false,
isLocked: false,
saving: false, saving: false,
avatarUploading: false, avatarUploading: false,
bannerUploading: false bannerUploading: false
@ -79,6 +94,7 @@ export default Vue.extend({
this.avatarId = this.$store.state.i.avatarId; this.avatarId = this.$store.state.i.avatarId;
this.bannerId = this.$store.state.i.bannerId; this.bannerId = this.$store.state.i.bannerId;
this.isCat = this.$store.state.i.isCat; this.isCat = this.$store.state.i.isCat;
this.isLocked = this.$store.state.i.isLocked;
}, },
methods: { methods: {
@ -126,7 +142,7 @@ export default Vue.extend({
}); });
}, },
save() { save(notify) {
this.saving = true; this.saving = true;
(this as any).api('i/update', { (this as any).api('i/update', {
@ -136,7 +152,8 @@ export default Vue.extend({
birthday: this.birthday || null, birthday: this.birthday || null,
avatarId: this.avatarId, avatarId: this.avatarId,
bannerId: this.bannerId, bannerId: this.bannerId,
isCat: this.isCat isCat: this.isCat,
isLocked: this.isLocked
}).then(i => { }).then(i => {
this.saving = false; this.saving = false;
this.$store.state.i.avatarId = i.avatarId; this.$store.state.i.avatarId = i.avatarId;
@ -144,7 +161,9 @@ export default Vue.extend({
this.$store.state.i.bannerId = i.bannerId; this.$store.state.i.bannerId = i.bannerId;
this.$store.state.i.bannerUrl = i.bannerUrl; this.$store.state.i.bannerUrl = i.bannerUrl;
alert('%i18n:@saved%'); if (notify) {
alert('%i18n:@saved%');
}
}); });
} }
} }

View File

@ -15,7 +15,7 @@
<mk-welcome-timeline/> <mk-welcome-timeline/>
</div> </div>
<div class="hashtags"> <div class="hashtags">
<router-link v-for="tag in tags" :key="tag" :to="`/tags/${ tag }`" :title="tag">#{{ tag }}</router-link> <mk-tag-cloud/>
</div> </div>
<div class="photos"> <div class="photos">
<div v-for="photo in photos" :style="`background-image: url(${photo.thumbnailUrl})`"></div> <div v-for="photo in photos" :style="`background-image: url(${photo.thumbnailUrl})`"></div>
@ -30,6 +30,38 @@
<div v-html="announcement.text"></div> <div v-html="announcement.text"></div>
</article> </article>
</div> </div>
<article class="about-misskey">
<h1>%i18n:common.intro.title%</h1>
<p v-html="'%i18n:common.intro.about%'"></p>
<section>
<h2>%i18n:common.intro.features%</h2>
<section>
<h3>%i18n:common.intro.rich-contents%</h3>
<div class="image"><img src="/assets/about/post.png" alt=""></div>
<p v-html="'%i18n:common.intro.rich-contents-desc%'"></p>
</section>
<section>
<h3>%i18n:common.intro.reaction%</h3>
<div class="image"><img src="/assets/about/reaction.png" alt=""></div>
<p v-html="'%i18n:common.intro.reaction-desc%'"></p>
</section>
<section>
<h3>%i18n:common.intro.ui%</h3>
<div class="image"><img src="/assets/about/ui.png" alt=""></div>
<p v-html="'%i18n:common.intro.ui-desc%'"></p>
</section>
<section>
<h3>%i18n:common.intro.drive%</h3>
<div class="image"><img src="/assets/about/drive.png" alt=""></div>
<p v-html="'%i18n:common.intro.drive-desc%'"></p>
</section>
</section>
<p v-html="'%i18n:common.intro.outro%'"></p>
</article>
<div class="info" v-if="meta">
<p>Version: <b>{{ meta.version }}</b></p>
<p>Maintainer: <b><a :href="meta.maintainer.url" target="_blank">{{ meta.maintainer.name }}</a></b></p>
</div>
<footer> <footer>
<small>{{ copyright }}</small> <small>{{ copyright }}</small>
</footer> </footer>
@ -39,24 +71,25 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import { apiUrl, copyright, host } from '../../../config'; import { copyright, host } from '../../../config';
import { concat } from '../../../../../prelude/array';
export default Vue.extend({ export default Vue.extend({
data() { data() {
return { return {
apiUrl, meta: null,
copyright, copyright,
stats: null, stats: null,
host, host,
name: 'Misskey', name: 'Misskey',
description: '', description: '',
tags: [],
photos: [], photos: [],
announcements: [] announcements: []
}; };
}, },
created() { created() {
(this as any).os.getMeta().then(meta => { (this as any).os.getMeta().then(meta => {
this.meta = meta;
this.name = meta.name; this.name = meta.name;
this.description = meta.description; this.description = meta.description;
this.announcements = meta.broadcasts; this.announcements = meta.broadcasts;
@ -66,10 +99,6 @@ export default Vue.extend({
this.stats = stats; this.stats = stats;
}); });
(this as any).api('hashtags/trend').then(stats => {
this.tags = stats.map(x => x.tag);
});
const image = [ const image = [
'image/jpeg', 'image/jpeg',
'image/png', 'image/png',
@ -79,8 +108,8 @@ export default Vue.extend({
(this as any).api('notes/local-timeline', { (this as any).api('notes/local-timeline', {
fileType: image, fileType: image,
limit: 6 limit: 6
}).then(notes => { }).then((notes: any[]) => {
const files = [].concat(...notes.map(n => n.files)); const files = concat(notes.map((n: any): any[] => n.files));
this.photos = files.filter(f => image.includes(f.type)).slice(0, 6); this.photos = files.filter(f => image.includes(f.type)).slice(0, 6);
}); });
} }
@ -164,12 +193,8 @@ root(isDark)
-webkit-overflow-scrolling touch -webkit-overflow-scrolling touch
> .hashtags > .hashtags
padding 16px 0 padding 0 8px
border solid 2px #ddd height 200px
border-radius 8px
> *
margin 0 16px
> .photos > .photos
display grid display grid
@ -209,6 +234,54 @@ root(isDark)
> .title > .title
font-weight bold font-weight bold
> .about-misskey
margin 16px 0
padding 32px
font-size 14px
background #fff
border-radius 6px
overflow hidden
color #3a3e46
> h1
margin 0
& + p
margin-top 8px
> p:last-child
margin-bottom 0
> section
> h2
border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
> section
margin-bottom 16px
padding-bottom 16px
border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
> h3
margin-bottom 8px
> p
margin-bottom 0
> .image
> img
display block
width 100%
height 120px
object-fit cover
> .info
padding 16px 0
border solid 2px #ddd
border-radius 8px
> *
margin 0 16px
> footer > footer
text-align center text-align center
color #444 color #444

View File

@ -4,6 +4,7 @@ import * as nestedProperty from 'nested-property';
import MiOS from './mios'; import MiOS from './mios';
import { hostname } from './config'; import { hostname } from './config';
import { erase } from '../../prelude/array';
const defaultSettings = { const defaultSettings = {
home: null, home: null,
@ -15,6 +16,7 @@ const defaultSettings = {
suggestRecentHashtags: true, suggestRecentHashtags: true,
showClockOnHeader: true, showClockOnHeader: true,
circleIcons: true, circleIcons: true,
contrastedAcct: true,
gradientWindowHeader: false, gradientWindowHeader: false,
showReplyTarget: true, showReplyTarget: true,
showMyRenotes: true, showMyRenotes: true,
@ -24,6 +26,8 @@ const defaultSettings = {
disableViaMobile: false, disableViaMobile: false,
memo: null, memo: null,
iLikeSushi: false, iLikeSushi: false,
rememberNoteVisibility: false,
defaultNoteVisibility: 'public',
games: { games: {
reversi: { reversi: {
showBoardLabels: false, showBoardLabels: false,
@ -43,6 +47,7 @@ const defaultDeviceSettings = {
debug: false, debug: false,
lightmode: false, lightmode: false,
loadRawImages: false, loadRawImages: false,
alwaysShowNsfw: false,
postStyle: 'standard', postStyle: 'standard',
mobileNotificationPosition: 'bottom' mobileNotificationPosition: 'bottom'
}; };
@ -195,7 +200,7 @@ export default (os: MiOS) => new Vuex.Store({
removeDeckColumn(state, id) { removeDeckColumn(state, id) {
state.deck.columns = state.deck.columns.filter(c => c.id != id); state.deck.columns = state.deck.columns.filter(c => c.id != id);
state.deck.layout = state.deck.layout.map(ids => ids.filter(x => x != id)); state.deck.layout = state.deck.layout.map(ids => erase(id, ids));
state.deck.layout = state.deck.layout.filter(ids => ids.length > 0); state.deck.layout = state.deck.layout.filter(ids => ids.length > 0);
}, },
@ -266,7 +271,7 @@ export default (os: MiOS) => new Vuex.Store({
stackLeftDeckColumn(state, id) { stackLeftDeckColumn(state, id) {
const i = state.deck.layout.findIndex(ids => ids.indexOf(id) != -1); const i = state.deck.layout.findIndex(ids => ids.indexOf(id) != -1);
state.deck.layout = state.deck.layout.map(ids => ids.filter(x => x != id)); state.deck.layout = state.deck.layout.map(ids => erase(id, ids));
const left = state.deck.layout[i - 1]; const left = state.deck.layout[i - 1];
if (left) state.deck.layout[i - 1].push(id); if (left) state.deck.layout[i - 1].push(id);
state.deck.layout = state.deck.layout.filter(ids => ids.length > 0); state.deck.layout = state.deck.layout.filter(ids => ids.length > 0);
@ -274,7 +279,7 @@ export default (os: MiOS) => new Vuex.Store({
popRightDeckColumn(state, id) { popRightDeckColumn(state, id) {
const i = state.deck.layout.findIndex(ids => ids.indexOf(id) != -1); const i = state.deck.layout.findIndex(ids => ids.indexOf(id) != -1);
state.deck.layout = state.deck.layout.map(ids => ids.filter(x => x != id)); state.deck.layout = state.deck.layout.map(ids => erase(id, ids));
state.deck.layout.splice(i + 1, 0, [id]); state.deck.layout.splice(i + 1, 0, [id]);
state.deck.layout = state.deck.layout.filter(ids => ids.length > 0); state.deck.layout = state.deck.layout.filter(ids => ids.length > 0);
}, },

View File

@ -3,6 +3,7 @@
*/ */
import composeNotification from './common/scripts/compose-notification'; import composeNotification from './common/scripts/compose-notification';
import { erase } from '../../prelude/array';
// キャッシュするリソース // キャッシュするリソース
const cachee = [ const cachee = [
@ -24,8 +25,7 @@ self.addEventListener('activate', ev => {
// Clean up old caches // Clean up old caches
ev.waitUntil( ev.waitUntil(
caches.keys().then(keys => Promise.all( caches.keys().then(keys => Promise.all(
keys erase(_VERSION_, keys)
.filter(key => key != _VERSION_)
.map(key => caches.delete(key)) .map(key => caches.delete(key))
)) ))
); );

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 KiB

After

Width:  |  Height:  |  Size: 274 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -1,5 +1,5 @@
{ {
"copyright": "Copyright (c) 2014-2018 syuilo", "copyright": "Copyright (c) 2014-2018 syuilo",
"themeColor": "#f6584f", "themeColor": "#fb4e4e",
"themeColorForeground": "#fff" "themeColorForeground": "#fff"
} }

View File

@ -1,4 +1,4 @@
import { count, countIf } from "../../prelude/array"; import { count, concat } from "../../prelude/array";
// MISSKEY REVERSI ENGINE // MISSKEY REVERSI ENGINE
@ -110,7 +110,7 @@ export default class Reversi {
* 白石の数 * 白石の数
*/ */
public get whiteCount() { public get whiteCount() {
return count(BLACK, this.board); return count(WHITE, this.board);
} }
/** /**
@ -238,87 +238,55 @@ export default class Reversi {
/** /**
* 指定のマスに石を置いた時の、反転させられる石を取得します * 指定のマスに石を置いた時の、反転させられる石を取得します
* @param color 自分の色 * @param color 自分の色
* @param pos 位置 * @param initPos 位置
*/ */
public effects(color: Color, pos: number): number[] { public effects(color: Color, initPos: number): number[] {
const enemyColor = !color; const enemyColor = !color;
// ひっくり返せる石(の位置)リスト const diffVectors: [number, number][] = [
let stones: number[] = []; [ 0, -1], // 上
[ +1, -1], // 右上
[ +1, 0], // 右
[ +1, +1], // 右下
[ 0, +1], // 下
[ -1, +1], // 左下
[ -1, 0], // 左
[ -1, -1] // 左上
];
const initPos = pos; const effectsInLine = ([dx, dy]: [number, number]): number[] => {
const nextPos = (x: number, y: number): [number, number] => [x + dx, y + dy];
// 走査
const iterate = (fn: (i: number) => number[]) => {
let i = 1;
const found = [];
const found: number[] = []; // 挟めるかもしれない相手の石を入れておく配列
let [x, y] = this.transformPosToXy(initPos);
while (true) { while (true) {
let [x, y] = fn(i); [x, y] = nextPos(x, y);
// 座標が指し示す位置がボード外に出たとき // 座標が指し示す位置がボード外に出たとき
if (this.opts.loopedBoard) { if (this.opts.loopedBoard) {
if (x < 0 ) x = this.mapWidth - ((-x) % this.mapWidth); x = ((x % this.mapWidth) + this.mapWidth) % this.mapWidth;
if (y < 0 ) y = this.mapHeight - ((-y) % this.mapHeight); y = ((y % this.mapHeight) + this.mapHeight) % this.mapHeight;
if (x >= this.mapWidth ) x = x % this.mapWidth;
if (y >= this.mapHeight) y = y % this.mapHeight;
// for debug
//if (x < 0 || y < 0 || x >= this.mapWidth || y >= this.mapHeight) {
// console.log(x, y);
//}
// 一周して自分に帰ってきたら
if (this.transformXyToPos(x, y) == initPos) { if (this.transformXyToPos(x, y) == initPos) {
// ↓のコメントアウトを外すと、「現時点で自分の石が隣接していないが、 // 盤面の境界でループし、自分が石を置く位置に戻ってきたとき、挟めるようにしている (ref: Test4のマップ)
// そこに置いたとするとループして最終的に挟んだことになる」というケースを有効化します。(Test4のマップで違いが分かります) return found;
// このケースを有効にした方が良いのか無効にした方が良いのか判断がつかなかったためとりあえず無効としておきます
// (あと無効な方がゲームとしておもしろそうだった)
stones = stones.concat(found);
break;
} }
} else { } else {
if (x == -1 || y == -1 || x == this.mapWidth || y == this.mapHeight) break; if (x == -1 || y == -1 || x == this.mapWidth || y == this.mapHeight) {
return []; // 挟めないことが確定 (盤面外に到達)
}
} }
const pos = this.transformXyToPos(x, y); const pos = this.transformXyToPos(x, y);
if (this.mapDataGet(pos) === 'null') return []; // 挟めないことが確定 (配置不可能なマスに到達)
//#region 「配置不能」マスに当たった場合走査終了
const pixel = this.mapDataGet(pos);
if (pixel == 'null') break;
//#endregion
// 石取得
const stone = this.board[pos]; const stone = this.board[pos];
if (stone === null) return []; // 挟めないことが確定 (石が置かれていないマスに到達)
// 石が置かれていないマスなら走査終了 if (stone === enemyColor) found.push(pos); // 挟めるかもしれない (相手の石を発見)
if (stone === null) break; if (stone === color) return found; // 挟めることが確定 (対となる自分の石を発見)
// 相手の石なら「ひっくり返せるかもリスト」に入れておく
if (stone === enemyColor) found.push(pos);
// 自分の石なら「ひっくり返せるかもリスト」を「ひっくり返せるリスト」に入れ、走査終了
if (stone === color) {
stones = stones.concat(found);
break;
}
i++;
} }
}; };
const [x, y] = this.transformPosToXy(pos); return concat(diffVectors.map(effectsInLine));
iterate(i => [x , y - i]); // 上
iterate(i => [x + i, y - i]); // 右上
iterate(i => [x + i, y ]); // 右
iterate(i => [x + i, y + i]); // 右下
iterate(i => [x , y + i]); // 下
iterate(i => [x - i, y + i]); // 左下
iterate(i => [x - i, y ]); // 左
iterate(i => [x - i, y - i]); // 左上
return stones;
} }
/** /**

View File

@ -1,3 +1,5 @@
import { capitalize, toUpperCase } from "../../../prelude/string";
function escape(text: string) { function escape(text: string) {
return text return text
.replace(/>/g, '&gt;') .replace(/>/g, '&gt;')
@ -89,8 +91,8 @@ const _keywords = [
]; ];
const keywords = _keywords const keywords = _keywords
.concat(_keywords.map(k => k[0].toUpperCase() + k.substr(1))) .concat(_keywords.map(capitalize))
.concat(_keywords.map(k => k.toUpperCase())) .concat(_keywords.map(toUpperCase))
.sort((a, b) => b.length - a.length); .sort((a, b) => b.length - a.length);
const symbols = [ const symbols = [

View File

@ -4,6 +4,7 @@ import { pack as packUser } from './user';
import { pack as packFile } from './drive-file'; import { pack as packFile } from './drive-file';
import db from '../db/mongodb'; import db from '../db/mongodb';
import MessagingHistory, { deleteMessagingHistory } from './messaging-history'; import MessagingHistory, { deleteMessagingHistory } from './messaging-history';
import { length } from 'stringz';
const MessagingMessage = db.get<IMessagingMessage>('messagingMessages'); const MessagingMessage = db.get<IMessagingMessage>('messagingMessages');
export default MessagingMessage; export default MessagingMessage;
@ -19,7 +20,7 @@ export interface IMessagingMessage {
} }
export function isValidText(text: string): boolean { export function isValidText(text: string): boolean {
return text.length <= 1000 && text.trim() != ''; return length(text.trim()) <= 1000 && text.trim() != '';
} }
/** /**

View File

@ -4,12 +4,14 @@ const Meta = db.get<IMeta>('meta');
export default Meta; export default Meta;
export type IMeta = { export type IMeta = {
broadcasts: any[]; broadcasts?: any[];
stats: { stats?: {
notesCount: number; notesCount: number;
originalNotesCount: number; originalNotesCount: number;
usersCount: number; usersCount: number;
originalUsersCount: number; originalUsersCount: number;
}; };
disableRegistration: boolean; disableRegistration?: boolean;
disableLocalTimeline?: boolean;
hidedTags?: string[];
}; };

View File

@ -2,6 +2,7 @@ import * as mongo from 'mongodb';
const deepcopy = require('deepcopy'); const deepcopy = require('deepcopy');
import rap from '@prezzemolo/rap'; import rap from '@prezzemolo/rap';
import db from '../db/mongodb'; import db from '../db/mongodb';
import { length } from 'stringz';
import { IUser, pack as packUser } from './user'; import { IUser, pack as packUser } from './user';
import { pack as packApp } from './app'; import { pack as packApp } from './app';
import PollVote, { deletePollVote } from './poll-vote'; import PollVote, { deletePollVote } from './poll-vote';
@ -21,24 +22,14 @@ Note.createIndex('_files.contentType');
Note.createIndex({ Note.createIndex({
createdAt: -1 createdAt: -1
}); });
// 後方互換性のため
Note.update({}, {
$rename: {
mediaIds: 'fileIds'
}
}, {
multi: true
});
export default Note; export default Note;
export function isValidText(text: string): boolean { export function isValidText(text: string): boolean {
return text.length <= 1000 && text.trim() != ''; return length(text.trim()) <= 1000 && text.trim() != '';
} }
export function isValidCw(text: string): boolean { export function isValidCw(text: string): boolean {
return text.length <= 100; return length(text.trim()) <= 100;
} }
export type INote = { export type INote = {
@ -172,6 +163,66 @@ export async function deleteNote(note: string | mongo.ObjectID | INote) {
console.log(`Note: deleted ${n._id}`); console.log(`Note: deleted ${n._id}`);
} }
export const hideNote = async (packedNote: any, meId: mongo.ObjectID) => {
let hide = false;
// visibility が private かつ投稿者のIDが自分のIDではなかったら非表示
if (packedNote.visibility == 'private' && (meId == null || !meId.equals(packedNote.userId))) {
hide = true;
}
// visibility が specified かつ自分が指定されていなかったら非表示
if (packedNote.visibility == 'specified') {
if (meId == null) {
hide = true;
} else if (meId.equals(packedNote.userId)) {
hide = false;
} else {
// 指定されているかどうか
const specified = packedNote.visibleUserIds.some((id: mongo.ObjectID) => id.equals(meId));
if (specified) {
hide = false;
} else {
hide = true;
}
}
}
// visibility が followers かつ自分が投稿者のフォロワーでなかったら非表示
if (packedNote.visibility == 'followers') {
if (meId == null) {
hide = true;
} else if (meId.equals(packedNote.userId)) {
hide = false;
} else {
// フォロワーかどうか
const following = await Following.findOne({
followeeId: packedNote.userId,
followerId: meId
});
if (following == null) {
hide = true;
} else {
hide = false;
}
}
}
if (hide) {
packedNote.fileIds = [];
packedNote.files = [];
packedNote.text = null;
packedNote.poll = null;
packedNote.cw = null;
packedNote.tags = [];
packedNote.tagsLower = [];
packedNote.geo = null;
packedNote.isHidden = true;
}
};
/** /**
* Pack a note for API response * Pack a note for API response
* *
@ -184,11 +235,13 @@ export const pack = async (
note: string | mongo.ObjectID | INote, note: string | mongo.ObjectID | INote,
me?: string | mongo.ObjectID | IUser, me?: string | mongo.ObjectID | IUser,
options?: { options?: {
detail: boolean detail?: boolean;
skipHide?: boolean;
} }
) => { ) => {
const opts = Object.assign({ const opts = Object.assign({
detail: true detail: true,
skipHide: false
}, options); }, options);
// Me // Me
@ -217,52 +270,6 @@ export const pack = async (
if (!_note) throw `invalid note arg ${note}`; if (!_note) throw `invalid note arg ${note}`;
let hide = false;
// visibility が private かつ投稿者のIDが自分のIDではなかったら非表示
if (_note.visibility == 'private' && (meId == null || !meId.equals(_note.userId))) {
hide = true;
}
// visibility が specified かつ自分が指定されていなかったら非表示
if (_note.visibility == 'specified') {
if (meId == null) {
hide = true;
} else if (meId.equals(_note.userId)) {
hide = false;
} else {
// 指定されているかどうか
const specified = _note.visibleUserIds.some((id: mongo.ObjectID) => id.equals(meId));
if (specified) {
hide = false;
} else {
hide = true;
}
}
}
// visibility が followers かつ自分が投稿者のフォロワーでなかったら非表示
if (_note.visibility == 'followers') {
if (meId == null) {
hide = true;
} else if (meId.equals(_note.userId)) {
hide = false;
} else {
// フォロワーかどうか
const following = await Following.findOne({
followeeId: _note.userId,
followerId: meId
});
if (following == null) {
hide = true;
} else {
hide = false;
}
}
}
const id = _note._id; const id = _note._id;
// Rename _id to id // Rename _id to id
@ -284,7 +291,7 @@ export const pack = async (
} }
// Populate files // Populate files
_note.files = hide ? [] : Promise.all(_note.fileIds.map((fileId: mongo.ObjectID) => _note.files = Promise.all(_note.fileIds.map((fileId: mongo.ObjectID) =>
packFile(fileId) packFile(fileId)
)); ));
@ -314,7 +321,7 @@ export const pack = async (
} }
// Poll // Poll
if (meId && _note.poll && !hide) { if (meId && _note.poll) {
_note.poll = (async poll => { _note.poll = (async poll => {
const vote = await PollVote const vote = await PollVote
.findOne({ .findOne({
@ -359,15 +366,8 @@ export const pack = async (
_note.text = _note.text.replace(/な/g, 'にゃ').replace(/ナ/g, 'ニャ').replace(/ナ/g, 'ニャ'); _note.text = _note.text.replace(/な/g, 'にゃ').replace(/ナ/g, 'ニャ').replace(/ナ/g, 'ニャ');
} }
if (hide) { if (!opts.skipHide) {
_note.fileIds = []; await hideNote(_note, meId);
_note.text = null;
_note.poll = null;
_note.cw = null;
_note.tags = [];
_note.tagsLower = [];
_note.geo = null;
_note.isHidden = true;
} }
return _note; return _note;

View File

@ -6,6 +6,22 @@ export function count<T>(x: T, xs: T[]): number {
return countIf(y => x === y, xs); return countIf(y => x === y, xs);
} }
export function intersperse<T>(sep: T, xs: T[]): T[] { export function concat<T>(xss: T[][]): T[] {
return [].concat(...xs.map(x => [sep, x])).slice(1); return ([] as T[]).concat(...xss);
}
export function intersperse<T>(sep: T, xs: T[]): T[] {
return concat(xs.map(x => [sep, x])).slice(1);
}
export function erase<T>(x: T, xs: T[]): T[] {
return xs.filter(y => x !== y);
}
export function unique<T>(xs: T[]): T[] {
return [...new Set(xs)];
}
export function sum(xs: number[]): number {
return xs.reduce((a, b) => a + b, 0);
} }

11
src/prelude/string.ts Normal file
View File

@ -0,0 +1,11 @@
export function capitalize(s: string): string {
return toUpperCase(s.charAt(0)) + toLowerCase(s.slice(1));
}
export function toUpperCase(s: string): string {
return s.toUpperCase();
}
export function toLowerCase(s: string): string {
return s.toLowerCase();
}

View File

@ -4,9 +4,8 @@ import parse from '../../../mfm/parse';
import config from '../../../config'; import config from '../../../config';
export default function(note: INote) { export default function(note: INote) {
if (note.text == null) return null;
let html = toHtml(parse(note.text), note.mentionedRemoteUsers); let html = toHtml(parse(note.text), note.mentionedRemoteUsers);
if (html == null) html = '';
if (note.poll != null) { if (note.poll != null) {
const url = `${config.url}/notes/${note._id}`; const url = `${config.url}/notes/${note._id}`;

View File

@ -91,7 +91,7 @@ export async function createNote(value: any, resolver?: Resolver, silent = false
const reply = note.inReplyTo ? await resolveNote(note.inReplyTo, resolver) : null; const reply = note.inReplyTo ? await resolveNote(note.inReplyTo, resolver) : null;
// テキストのパース // テキストのパース
const text = htmlToMFM(note.content); const text = note._misskey_content ? note._misskey_content : htmlToMFM(note.content);
// ユーザーの情報が古かったらついでに更新しておく // ユーザーの情報が古かったらついでに更新しておく
if (actor.updatedAt == null || Date.now() - actor.updatedAt.getTime() > 1000 * 60 * 60 * 24) { if (actor.updatedAt == null || Date.now() - actor.updatedAt.getTime() > 1000 * 60 * 60 * 24) {

View File

@ -5,7 +5,7 @@ export default (object: any, note: INote) => {
const attributedTo = `${config.url}/users/${note.userId}`; const attributedTo = `${config.url}/users/${note.userId}`;
return { return {
id: `${config.url}/notes/${note._id}`, id: `${config.url}/notes/${note._id}/activity`,
actor: `${config.url}/users/${note.userId}`, actor: `${config.url}/users/${note.userId}`,
type: 'Announce', type: 'Announce',
published: note.createdAt.toISOString(), published: note.createdAt.toISOString(),

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