Compare commits

..

467 Commits

Author SHA1 Message Date
syuilo
5fbf3c3f72 5.10.0 2018-08-02 09:53:23 +09:00
syuilo
5c497d7563 ✌️ 2018-08-02 09:52:47 +09:00
syuilo
7ee3f63eff Merge pull request #2059 from syuilo/l10n_master
New Crowdin translations
2018-08-02 09:51:14 +09:00
syuilo
ee85a76678 New translations ja.yml (English) 2018-08-02 09:50:53 +09:00
syuilo
e691524416 Fix bug 2018-08-02 09:37:13 +09:00
syuilo
ce0f6f7ebe type指定廃止 2018-08-02 09:30:57 +09:00
syuilo
dfa5cb567f Define new index 2018-08-02 09:29:46 +09:00
syuilo
bcf854b7bb Clean up 2018-08-02 09:27:30 +09:00
syuilo
be0e811e45 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-02 09:24:11 +09:00
syuilo
ab009cfbd7 🎨 2018-08-02 09:24:08 +09:00
syuilo
3fc7ebf80b Merge pull request #2056 from syuilo/l10n_master
New Crowdin translations
2018-08-02 08:34:15 +09:00
syuilo
8c02c0cb30 New translations ja.yml (Catalan) 2018-08-02 08:31:35 +09:00
syuilo
11c015c24e New translations ja.yml (Portuguese) 2018-08-02 08:31:33 +09:00
syuilo
d937730ab7 New translations ja.yml (Korean) 2018-08-02 08:31:30 +09:00
syuilo
b2b5b1e4c9 New translations ja.yml (Polish) 2018-08-02 08:31:28 +09:00
syuilo
d84b3088ec New translations ja.yml (Chinese Simplified) 2018-08-02 08:31:26 +09:00
syuilo
24f2a4731e New translations ja.yml (Italian) 2018-08-02 08:31:24 +09:00
syuilo
152fba9ba7 New translations ja.yml (Russian) 2018-08-02 08:31:22 +09:00
syuilo
3e2edcb815 New translations ja.yml (English) 2018-08-02 08:31:20 +09:00
syuilo
9c8e92b2bc New translations ja.yml (Spanish) 2018-08-02 08:31:18 +09:00
syuilo
24c9e1b8d9 New translations ja.yml (German) 2018-08-02 08:31:16 +09:00
syuilo
127cad8bc1 New translations ja.yml (French) 2018-08-02 08:11:01 +09:00
syuilo
1d4f4b829f Improve i18n 2018-08-02 08:04:16 +09:00
syuilo
66d7135a5c New translations ja.yml (French) 2018-08-02 08:01:11 +09:00
syuilo
635eee980d Update 2018-08-02 07:54:59 +09:00
syuilo
23f2370c4b Improve i18n 2018-08-02 07:53:11 +09:00
syuilo
f2b88002a3 New translations ja.yml (English) 2018-08-02 07:51:26 +09:00
syuilo
6c41265625 New translations ja.yml (Catalan) 2018-08-02 07:41:18 +09:00
syuilo
b939cb8b4c New translations ja.yml (Portuguese) 2018-08-02 07:41:16 +09:00
syuilo
d74710260a New translations ja.yml (Korean) 2018-08-02 07:41:14 +09:00
syuilo
609a15cfb1 New translations ja.yml (Polish) 2018-08-02 07:41:12 +09:00
syuilo
644532d4db New translations ja.yml (Chinese Simplified) 2018-08-02 07:41:09 +09:00
syuilo
e9b0ffef0f New translations ja.yml (Italian) 2018-08-02 07:41:07 +09:00
syuilo
31a133e7f0 New translations ja.yml (Russian) 2018-08-02 07:41:05 +09:00
syuilo
277a24f8e0 New translations ja.yml (English) 2018-08-02 07:41:03 +09:00
syuilo
6c07411755 New translations ja.yml (Spanish) 2018-08-02 07:41:01 +09:00
syuilo
6894eee6d4 New translations ja.yml (German) 2018-08-02 07:40:58 +09:00
syuilo
babdeb5d6e New translations ja.yml (French) 2018-08-02 07:40:56 +09:00
syuilo
7f08d84989 Merge branch 'master' into l10n_master 2018-08-02 07:38:44 +09:00
syuilo
32053d963f i18n reversi 2018-08-02 07:36:25 +09:00
syuilo
5994ea9465 New translations ja.yml (Catalan) 2018-08-02 07:11:32 +09:00
syuilo
7384a3825a New translations ja.yml (Portuguese) 2018-08-02 07:11:30 +09:00
syuilo
e31bf214a7 New translations ja.yml (Korean) 2018-08-02 07:11:27 +09:00
syuilo
48c143d47c New translations ja.yml (Polish) 2018-08-02 07:11:26 +09:00
syuilo
35d17d4274 New translations ja.yml (Chinese Simplified) 2018-08-02 07:11:23 +09:00
syuilo
1e2b8cab02 New translations ja.yml (Italian) 2018-08-02 07:11:21 +09:00
syuilo
0a9a45b33b New translations ja.yml (Russian) 2018-08-02 07:11:19 +09:00
syuilo
63a512306d New translations ja.yml (English) 2018-08-02 07:11:17 +09:00
syuilo
190c0c687c New translations ja.yml (Spanish) 2018-08-02 07:11:15 +09:00
syuilo
c7094986c9 New translations ja.yml (German) 2018-08-02 07:11:13 +09:00
syuilo
c201a65f82 New translations ja.yml (French) 2018-08-02 07:11:11 +09:00
syuilo
dd167a476f Remove some outdated tips 2018-08-02 07:06:31 +09:00
syuilo
b255bbf62a New translations ja.yml (Catalan) 2018-08-02 07:01:32 +09:00
syuilo
e19300f424 New translations ja.yml (Portuguese) 2018-08-02 07:01:31 +09:00
syuilo
aeb0512eaf New translations ja.yml (Korean) 2018-08-02 07:01:29 +09:00
syuilo
192abef237 New translations ja.yml (Polish) 2018-08-02 07:01:27 +09:00
syuilo
2d278c563e New translations ja.yml (Chinese Simplified) 2018-08-02 07:01:25 +09:00
syuilo
7de9066dda New translations ja.yml (Italian) 2018-08-02 07:01:23 +09:00
syuilo
5a2a2371fb New translations ja.yml (Russian) 2018-08-02 07:01:21 +09:00
syuilo
a433a25b16 New translations ja.yml (English) 2018-08-02 07:01:19 +09:00
syuilo
9098aaee3e New translations ja.yml (Spanish) 2018-08-02 07:01:17 +09:00
syuilo
ea28b788bc New translations ja.yml (German) 2018-08-02 07:01:14 +09:00
syuilo
bd9981b998 New translations ja.yml (French) 2018-08-02 07:01:12 +09:00
syuilo
b7f1b087e8 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-02 06:58:17 +09:00
syuilo
b0fdf25b24 Improve i18n 2018-08-02 06:58:15 +09:00
syuilo
58f6e4cf00 New translations ja.yml (Catalan) 2018-08-02 06:51:58 +09:00
syuilo
d6fe396c76 New translations ja.yml (Portuguese) 2018-08-02 06:51:56 +09:00
syuilo
5a01c6c9a5 New translations ja.yml (Korean) 2018-08-02 06:51:54 +09:00
syuilo
dc98b2b5c2 New translations ja.yml (Polish) 2018-08-02 06:51:53 +09:00
syuilo
60626c2a07 New translations ja.yml (Chinese Simplified) 2018-08-02 06:51:50 +09:00
syuilo
0459ce07fa New translations ja.yml (Italian) 2018-08-02 06:51:48 +09:00
syuilo
b480865031 New translations ja.yml (Russian) 2018-08-02 06:51:46 +09:00
syuilo
c928d38ec0 New translations ja.yml (English) 2018-08-02 06:51:44 +09:00
syuilo
1f44602f38 New translations ja.yml (Spanish) 2018-08-02 06:51:42 +09:00
syuilo
932d007745 New translations ja.yml (German) 2018-08-02 06:51:40 +09:00
syuilo
a1dd839909 New translations ja.yml (French) 2018-08-02 06:51:37 +09:00
syuilo
12b1c6c886 Merge pull request #2055 from syuilo/greenkeeper/vue-2.5.17
Update vue to the latest version 🚀
2018-08-02 06:50:21 +09:00
greenkeeper[bot]
e4a4a4a469 fix(package): update vue to version 2.5.17 2018-08-01 21:48:35 +00:00
syuilo
2ffb8f7cf8 Merge pull request #2054 from syuilo/greenkeeper/vue-template-compiler-2.5.17
Update vue-template-compiler to the latest version 🚀
2018-08-02 06:46:23 +09:00
syuilo
25dec8b977 Merge pull request #2053 from gutfuckllc/devel
Translated the totality of desktop views and common views, a great bunch of mobile views
2018-08-02 06:44:46 +09:00
greenkeeper[bot]
8b4ee292b1 fix(package): update vue-template-compiler to version 2.5.17 2018-08-01 21:41:18 +00:00
gutfuckllc
2f8b64d6fb Translated mobile/views/pages/widgets/activity.vue and mobile/views/pages/widgets.vue 2018-08-01 17:34:27 -04:00
gutfuckllc
b608e594af Translated mobile/views/pages/welcome.vue 2018-08-01 17:30:54 -04:00
gutfuckllc
9652440579 Translated mobile/views/pages/welcome.vue 2018-08-01 17:30:35 -04:00
gutfuckllc
55d2ae2050 Translated mobile/views/pages/signup.vue 2018-08-01 16:43:47 -04:00
gutfuckllc
bdde0c3c63 Fixed welcome.vue build bug. 2018-08-01 16:37:36 -04:00
gutfuckllc
08afa44e09 Localized mobile/views/pages/reversi.vue
Also added common.name line, as to allow easier rebranding.
2018-08-01 15:09:42 -04:00
gutfuckllc
3ec3fa2d1e Localized mobile/views/components/ui.header.vue
Also added name i18n line, as to allow easier rebranding should there be any.
2018-08-01 15:04:00 -04:00
gutfuckllc
df74a4eb20 Forgot to add vue. here 2018-08-01 14:55:30 -04:00
gutfuckllc
fdaf483293 Added i18n line and typo fix to desktop/views/pages/welcome.vue: 2018-08-01 14:54:57 -04:00
gutfuckllc
5ab4d0c29b Translated desktop/views/pages/tag.vue
More weird syntax fiddling. Should work nonetheless
2018-08-01 14:52:53 -04:00
gutfuckllc
d6fab5fd6c Translated desktop/views/components/settings.drive.vue 2018-08-01 14:42:52 -04:00
gutfuckllc
8df35650e5 Merge remote-tracking branch 'upstream/master' into devel 2018-08-01 14:26:08 -04:00
gutfuckllc
c5b682dc89 common/views/widgets/calendar.vue
Did weird formatting tricks. Hopefully should work.
2018-08-01 14:25:55 -04:00
gutfuckllc
86d49c6704 Translated common/views/widgets/tips.vue
Double lines. Might want to check that.
2018-08-01 14:14:53 -04:00
greenkeeper[bot]
9e251b3ea0 fix(package): update sass-loader to version 7.1.0 2018-08-02 01:49:40 +09:00
gutfuckllc
8630cd8df6 Merge remote-tracking branch 'upstream/master' into devel 2018-08-01 12:35:51 -04:00
gutfuckllc
e42c8859b4 Translated desktop\views\pages\search.vue
Needed some weird text hack. Might want to check it later.
2018-08-01 12:20:41 -04:00
gutfuckllc
3636db3f85 Translated desktop/views/pages/share.vue 2018-08-01 12:09:59 -04:00
syuilo
fd4d03db58 Merge pull request #2043 from syuilo/greenkeeper/@types/node-10.5.5
Update @types/node to the latest version 🚀
2018-08-01 11:15:42 +09:00
syuilo
2c3ea0cfef Fix #2042 2018-08-01 11:07:30 +09:00
greenkeeper[bot]
bc34b4f198 fix(package): update @types/node to version 10.5.5 2018-08-01 01:40:10 +00:00
syuilo
e93503066c 5.9.0 2018-08-01 08:45:35 +09:00
syuilo
c4351acf7c Clean up 2018-08-01 08:44:58 +09:00
syuilo
bffd7bbb3b Clean up 2018-08-01 08:38:56 +09:00
syuilo
aad131c913 Merge pull request #2037 from syuilo/l10n_master
New Crowdin translations
2018-08-01 08:34:45 +09:00
syuilo
77faf7a84c Merge branch 'master' into l10n_master 2018-08-01 08:34:22 +09:00
syuilo
86a7c4772e New translations ja.yml (English) 2018-08-01 08:31:12 +09:00
syuilo
7430e258b1 New translations ja.yml (French) 2018-08-01 08:31:10 +09:00
syuilo
4efdd90066 New translations ja.yml (Catalan) 2018-08-01 08:21:28 +09:00
syuilo
4c0da272ce New translations ja.yml (Portuguese) 2018-08-01 08:21:26 +09:00
syuilo
cf48b5348f New translations ja.yml (Korean) 2018-08-01 08:21:24 +09:00
syuilo
aa74262564 New translations ja.yml (Polish) 2018-08-01 08:21:22 +09:00
syuilo
209383274e New translations ja.yml (Chinese Simplified) 2018-08-01 08:21:20 +09:00
syuilo
c6b1f206a6 New translations ja.yml (Italian) 2018-08-01 08:21:18 +09:00
syuilo
be504fc1fc New translations ja.yml (Russian) 2018-08-01 08:21:16 +09:00
syuilo
7118f7fec1 New translations ja.yml (English) 2018-08-01 08:21:14 +09:00
syuilo
7451a735e6 New translations ja.yml (Spanish) 2018-08-01 08:21:12 +09:00
syuilo
604a900664 New translations ja.yml (German) 2018-08-01 08:21:09 +09:00
syuilo
d7066de378 New translations ja.yml (French) 2018-08-01 08:21:07 +09:00
syuilo
f0bfb051c3 Merge pull request #2033 from syuilo/greenkeeper/qrcode-1.2.2
Update qrcode to the latest version 🚀
2018-08-01 08:18:40 +09:00
syuilo
54c4eb512f Merge pull request #2038 from gutfuckllc/devel
Translated slideshow.vue
2018-08-01 08:18:05 +09:00
gutfuckllc
3750b4d7d0 Translated slieshow.vue 2018-07-31 19:12:30 -04:00
syuilo
29c5f8c8e7 New translations ja.yml (Catalan) 2018-08-01 08:11:45 +09:00
syuilo
6b87edf63b New translations ja.yml (Portuguese) 2018-08-01 08:11:43 +09:00
syuilo
9b3180d74f New translations ja.yml (Korean) 2018-08-01 08:11:41 +09:00
syuilo
70331a0383 New translations ja.yml (Polish) 2018-08-01 08:11:39 +09:00
syuilo
2220b852c0 New translations ja.yml (Chinese Simplified) 2018-08-01 08:11:37 +09:00
syuilo
e5fa171df5 New translations ja.yml (Italian) 2018-08-01 08:11:35 +09:00
syuilo
d083c10ae3 New translations ja.yml (Russian) 2018-08-01 08:11:33 +09:00
syuilo
7a37b1c641 New translations ja.yml (English) 2018-08-01 08:11:30 +09:00
syuilo
e54449fbdb New translations ja.yml (Spanish) 2018-08-01 08:11:29 +09:00
syuilo
b5b384772a New translations ja.yml (German) 2018-08-01 08:11:26 +09:00
syuilo
733755bb5a New translations ja.yml (French) 2018-08-01 08:11:24 +09:00
syuilo
d6341d8ab6 Merge pull request #2036 from gutfuckllc/devel
Translated more/ Should build
2018-08-01 08:11:01 +09:00
gutfuckllc
b39384258c Added i18n line to hint
home.vue
2018-07-31 18:54:43 -04:00
gutfuckllc
dfa032d3f2 Escaped quotes
Should stop permanent breakages
2018-07-31 14:58:58 -04:00
gutfuckllc
f28fc08a57 Bettered french translation 2018-07-31 14:31:28 -04:00
gutfuckllc
e20e35c48d Unbroken more yaml 2018-07-31 14:29:28 -04:00
gutfuckllc
bddb47b0bd Unbroken yaml 2018-07-31 14:28:08 -04:00
gutfuckllc
469b21bb29 Translated customization tips to french 2018-07-31 14:25:56 -04:00
gutfuckllc
0a8213b851 Fully translated settings.profile.vue
Added relevant translation lines
2018-07-31 14:03:43 -04:00
gutfuckllc
460a4edb13 Added uncommitted file 2018-07-31 13:56:21 -04:00
gutfuckllc
2855ec0372 Reformat, more translation
Translated the totality of desktop/post-form.vue, reformated customization-tips.
2018-07-31 13:54:12 -04:00
gutfuckllc
0f34ed3ccd Added got it to the local files
Home.vue got it was still untranslated. It now has a localization file
2018-07-31 13:32:18 -04:00
gutfuckllc
cbb73e4e15 Localized customization tips on home.vue
Added relevant customization lines.
2018-07-31 13:29:18 -04:00
greenkeeper[bot]
99de2cd0ae fix(package): update qrcode to version 1.2.2 2018-07-31 16:16:30 +00:00
gutfuckllc
aed7d06af5 Translated trash on main menu
Translated trash on main menu
2018-07-31 11:36:15 -04:00
greenkeeper[bot]
2c348b51f1 fix(package): update @types/koa__cors to version 2.2.3 2018-07-31 12:24:22 +09:00
greenkeeper[bot]
14ac8327cf fix(package): update hard-source-webpack-plugin to version 0.12.0 2018-07-30 22:10:49 +09:00
syuilo
c520f17f3b New Crowdin translations (#2026)
* New translations ja.yml
2018-07-30 20:55:37 +09:00
syuilo
6c3d3ed322 New translations ja.yml (English) 2018-07-30 20:41:43 +09:00
syuilo
f4cf3840e4 New translations ja.yml (Catalan) 2018-07-30 20:21:45 +09:00
syuilo
3b2f116af0 New translations ja.yml (Portuguese) 2018-07-30 20:21:43 +09:00
syuilo
bba8f87687 New translations ja.yml (Korean) 2018-07-30 20:21:41 +09:00
syuilo
41b799b369 New translations ja.yml (Polish) 2018-07-30 20:21:39 +09:00
syuilo
d59c6af32c New translations ja.yml (Chinese Simplified) 2018-07-30 20:21:37 +09:00
syuilo
1b5023793a New translations ja.yml (Italian) 2018-07-30 20:21:34 +09:00
syuilo
f01a62c83b New translations ja.yml (Russian) 2018-07-30 20:21:31 +09:00
syuilo
ca84202f4c New translations ja.yml (English) 2018-07-30 20:21:29 +09:00
syuilo
9d7ffd1ae1 New translations ja.yml (Spanish) 2018-07-30 20:21:26 +09:00
syuilo
8f6886db82 New translations ja.yml (German) 2018-07-30 20:21:24 +09:00
syuilo
da5e708e0f New translations ja.yml (French) 2018-07-30 20:21:22 +09:00
Aya Morisawa
ff6993478f #332 2018-07-30 20:13:30 +09:00
syuilo
a54950f101 5.8.0 2018-07-30 16:25:22 +09:00
syuilo
6b567fdc05 ドキュメントにDisqus設置 2018-07-30 16:24:46 +09:00
syuilo
a4788fae45 Fix doc 2018-07-30 15:49:35 +09:00
syuilo
1ba1a7aa40 Fix bug 2018-07-30 14:46:11 +09:00
syuilo
835057d970 Revert "Fix bug"
This reverts commit 4e6dcd16ac.
2018-07-30 14:45:48 +09:00
syuilo
48f39e70c3 5.7.0 2018-07-30 07:24:22 +09:00
syuilo
3314640b01 Fix bug 2018-07-30 07:23:44 +09:00
syuilo
83d9730d93 #2020 2018-07-30 07:20:27 +09:00
syuilo
4e6dcd16ac Fix bug 2018-07-30 06:20:06 +09:00
syuilo
6debf45004 Merge pull request #2021 from syuilo/l10n_master
New Crowdin translations
2018-07-29 20:37:56 +09:00
syuilo
66b57e11db New translations ja.yml (French) 2018-07-29 20:00:50 +09:00
syuilo
1fc1c8a025 New translations ja.yml (French) 2018-07-29 19:50:57 +09:00
syuilo
6076f52390 Merge pull request #2019 from syuilo/l10n_master
New Crowdin translations
2018-07-29 17:23:21 +09:00
syuilo
3f33dbf6e8 New translations ja.yml (English) 2018-07-29 17:20:46 +09:00
syuilo
33f0dd8d43 #2018 2018-07-29 09:17:07 +09:00
syuilo
921fb0012b Fix bug 2018-07-29 05:34:08 +09:00
syuilo
2bdad9c411 ✌️ 2018-07-28 18:01:49 +09:00
syuilo
01f60c829d ✌️ 2018-07-28 17:57:24 +09:00
syuilo
1d6c0e1c6f Merge branch 'master' of https://github.com/syuilo/misskey 2018-07-28 17:52:56 +09:00
syuilo
fb74f1d72b いくつかのコマンドラインオプションを追加するなど 2018-07-28 17:52:54 +09:00
nzws
33e1c08273 Fix margin in visibleUsers (mobile) 2018-07-28 13:17:32 +09:00
syuilo
23c32f1211 5.6.2 2018-07-28 11:43:11 +09:00
syuilo
c8a5d693ed Merge pull request #2012 from syuilo/l10n_master
New Crowdin translations
2018-07-28 11:42:18 +09:00
syuilo
4a54d01ca8 Merge pull request #2015 from syuilo/greenkeeper/@types/node-10.5.4
Update @types/node to the latest version 🚀
2018-07-28 11:42:11 +09:00
syuilo
359a7a7b98 Merge pull request #2014 from syuilo/greenkeeper/@types/koa-router-7.0.31
Update @types/koa-router to the latest version 🚀
2018-07-28 11:42:04 +09:00
greenkeeper[bot]
aaa25deaa9 fix(package): update @types/node to version 10.5.4 2018-07-28 00:57:57 +00:00
greenkeeper[bot]
cd07ae4d2e fix(package): update @types/koa-router to version 7.0.31 2018-07-28 00:48:10 +00:00
syuilo
1e8c1efe2f Fix #2013 2018-07-28 07:56:33 +09:00
syuilo
ce405fc4f6 Fix #2007 2018-07-28 07:52:48 +09:00
syuilo
50a6efd568 Fix #2000 2018-07-28 07:38:29 +09:00
syuilo
2c6f881093 管理者用パスワードリセットコマンドを実装 2018-07-28 04:02:52 +09:00
syuilo
e4bf0392af クラスタ数を制限するオプションを追加 2018-07-28 03:55:41 +09:00
syuilo
fcb9133f27 New translations ja.yml (French) 2018-07-27 22:12:20 +09:00
syuilo
5c6f24dc39 Merge pull request #2011 from syuilo/greenkeeper/webpack-4.16.3
Update webpack to the latest version 🚀
2018-07-27 19:31:42 +09:00
greenkeeper[bot]
ce562f3bca fix(package): update webpack to version 4.16.3 2018-07-27 10:24:24 +00:00
syuilo
9ef477f04b Merge pull request #2010 from acid-chicken/acid-chicken-patch-1
Minify Mk-III
2018-07-27 19:17:15 +09:00
Acid Chicken (硫酸鶏)
5268fee5b5 Fix bug 2018-07-27 19:15:38 +09:00
Aya Morisawa
68e28faedc 2018-07-27 19:12:16 +09:00
syuilo
12f63db62e 5.6.1 2018-07-27 18:52:07 +09:00
syuilo
08e1c87fa6 oops 2018-07-27 18:50:15 +09:00
syuilo
8ee962b729 5.6.0 2018-07-27 18:43:36 +09:00
syuilo
3d8b45ecdd Use os-utils 2018-07-27 18:42:58 +09:00
syuilo
2347d9cea2 Merge branch 'master' of https://github.com/syuilo/misskey 2018-07-27 18:40:41 +09:00
syuilo
8a57f490ce バギーなのでジョブキュー無効化 2018-07-27 18:40:38 +09:00
syuilo
a880f5cbb8 Merge pull request #2009 from acid-chicken/acid-chicken-patch-1
Minify Mk-II
2018-07-27 18:29:24 +09:00
Acid Chicken (硫酸鶏)
df5a7c7e0c Update calendar.vue 2018-07-27 18:28:06 +09:00
syuilo
b7b82456d8 Merge branch 'master' of https://github.com/syuilo/misskey 2018-07-27 18:18:49 +09:00
syuilo
6b19e54c23 Fix bug 2018-07-27 18:18:05 +09:00
Aya Morisawa
75d04858e6 2018-07-27 17:58:19 +09:00
Aya Morisawa
9332551791 2018-07-27 17:51:40 +09:00
Aya Morisawa
32117a573b Fix bug 2018-07-27 17:47:10 +09:00
Aya Morisawa
d4d3316d18 2018-07-27 17:43:04 +09:00
2vg
43a7eb233c fix: critical memory leak. 2018-07-27 17:33:21 +09:00
2vg
178093861b memory usage excludes buffer and cache. 2018-07-27 17:31:19 +09:00
syuilo
3fb26534b7 Merge pull request #2004 from syuilo/greenkeeper/jsdom-11.12.0
Update jsdom to the latest version 🚀
2018-07-27 14:48:59 +09:00
greenkeeper[bot]
19a9fdfd38 fix(package): update jsdom to version 11.12.0 2018-07-27 04:58:58 +00:00
syuilo
6438e97324 Merge pull request #2002 from yuzulabo/fix/visibility-icon-mobile
#1993 をモバイル版に対応
2018-07-27 13:37:45 +09:00
nzws
b29492e8eb Change VisibilityButton's icon in mobile view 2018-07-27 13:30:46 +09:00
greenkeeper[bot]
5ab4f10230 fix(package): update typescript-eslint-parser to version 17.0.1 2018-07-27 09:39:21 +09:00
syuilo
80b251e12c Merge branch 'master' of https://github.com/syuilo/misskey 2018-07-27 07:29:26 +09:00
syuilo
bfd8b12a4f Clean up 2018-07-27 07:29:24 +09:00
syuilo
1c2e94658b Update README.md 2018-07-27 07:21:03 +09:00
syuilo
286da28cd6 5.5.0 2018-07-27 07:05:33 +09:00
syuilo
a4ee93a355 Fix bug 2018-07-27 07:05:12 +09:00
syuilo
ab56cb1788 Update doc 2018-07-27 06:07:13 +09:00
syuilo
32435e4d8e Update docs 2018-07-27 05:58:52 +09:00
syuilo
900cdf9d9a Update doc 2018-07-27 05:56:00 +09:00
syuilo
e79019266f Update doc 2018-07-27 05:50:37 +09:00
syuilo
deee7361f0 5.4.0 2018-07-27 04:26:48 +09:00
syuilo
bdcf09c618 Update doc 2018-07-27 04:25:38 +09:00
syuilo
7b5d6dcd9b Update doc 2018-07-27 04:21:48 +09:00
syuilo
0595d87759 Update doc 2018-07-27 04:10:16 +09:00
syuilo
fab0a0d6e2 ログインしていないとリバーシを観戦できない問題を修正 2018-07-27 04:01:12 +09:00
syuilo
3eb6b36866 Fix bug 2018-07-27 03:46:12 +09:00
syuilo
50327158e2 wip doc 2018-07-27 03:43:23 +09:00
syuilo
a99756ef85 ✌️ 2018-07-27 03:34:28 +09:00
syuilo
1c25dbed66 5.3.0 2018-07-27 03:23:17 +09:00
syuilo
7e8c5c0c3c Improve readability 2018-07-27 03:21:50 +09:00
syuilo
0b747b901c Merge pull request #1998 from syuilo/greenkeeper/typescript-eslint-parser-17.0.0
Update typescript-eslint-parser to the latest version 🚀
2018-07-27 01:54:09 +09:00
syuilo
8dd5051201 Merge pull request #1990 from mei23/mei-osurl
オブジェクトストレージの参照URLを上書きできるようにする
2018-07-27 01:53:42 +09:00
syuilo
f7b0fedc9d Merge pull request #1989 from mei23/mei-oscc
オブジェクトストレージ格納時にCache-Controlを指定する
2018-07-27 01:52:19 +09:00
greenkeeper[bot]
0411d0b242 fix(package): update typescript-eslint-parser to version 17.0.0 2018-07-26 13:37:52 +00:00
nzws
3fcc793269 Fix problem displaying button in profile page 2018-07-26 21:47:02 +09:00
nzws
fd27a0efef Hide follow button of my account 2018-07-26 21:45:43 +09:00
nzws
4474a2568e Change VisibilityButton's icon when changing visibility 2018-07-26 21:44:21 +09:00
mei23
9d944243a3 Add S3 examples 2018-07-26 17:42:08 +09:00
mei23
8ef38ebab1 Add config.drive.baseUrl 2018-07-26 17:29:05 +09:00
syuilo
f457a23eab Merge pull request #1988 from syuilo/greenkeeper/element-ui-2.4.5
Update element-ui to the latest version 🚀
2018-07-26 17:16:45 +09:00
greenkeeper[bot]
5d1eeaf1d8 fix(package): update element-ui to version 2.4.5 2018-07-26 08:16:21 +00:00
syuilo
77f732c6a4 5.2.1 2018-07-26 17:15:20 +09:00
syuilo
ac07f04ad8 Update job queue setting 2018-07-26 17:15:00 +09:00
syuilo
dddd760efd Fix bug 2018-07-26 17:13:55 +09:00
syuilo
0f7fbacb17 Fix bug 2018-07-26 17:10:43 +09:00
syuilo
2697107770 5.2.0 2018-07-26 17:04:33 +09:00
syuilo
e1e1cd0574 Update job queue settings 2018-07-26 17:02:34 +09:00
syuilo
93786aa510 Merge branch 'master' of https://github.com/syuilo/misskey 2018-07-26 16:51:00 +09:00
syuilo
d8b9a8715b ✌️ 2018-07-26 16:50:50 +09:00
mei23
e8783b15b1 Set Cache-Control to object-storage 2018-07-26 16:06:43 +09:00
syuilo
0995d5c5a2 Merge pull request #1986 from acid-chicken/master
Resolves #1985
2018-07-26 13:49:24 +09:00
Acid Chicken (硫酸鶏)
0852045928 Update misskey-flavored-markdown.ts 2018-07-26 13:48:08 +09:00
Acid Chicken (硫酸鶏)
04de0e9a50 Update hashtags.vue 2018-07-26 13:47:06 +09:00
syuilo
951b693d17 Merge pull request #1983 from mei23/mei-osct 2018-07-26 11:56:00 +09:00
mei23
308f357c4f Set Content-Type to object-storage 2018-07-26 10:47:12 +09:00
syuilo
206ddd6d36 5.1.0 2018-07-26 09:22:33 +09:00
syuilo
b4cf963bd6 Merge branch 'master' of https://github.com/syuilo/misskey 2018-07-26 08:11:49 +09:00
syuilo
77b493c9b0 Use bee-queue instead of Kue 2018-07-26 08:11:47 +09:00
syuilo
95a5ff5625 Merge pull request #1981 from syuilo/l10n_master
New Crowdin translations
2018-07-26 05:41:50 +09:00
syuilo
190753aa99 New translations ja.yml (Polish) 2018-07-26 05:41:28 +09:00
syuilo
f778696a76 ✌️ 2018-07-26 05:27:27 +09:00
syuilo
ce4fb49d4c Improve tweet embed 2018-07-26 04:55:39 +09:00
syuilo
91b89b79d2 Fix bug 2018-07-26 04:29:09 +09:00
syuilo
3cd3e19199 Update version 2018-07-26 03:46:55 +09:00
syuilo
ed36ceadbc ✌️ 2018-07-26 03:46:18 +09:00
syuilo
8736c9dfe6 Merge pull request #1977 from yarnaimo/embedded-tweet
ツイートの埋め込み
2018-07-26 02:31:00 +09:00
ysr227
e44f33bf14 Embed tweet when tweet url attached 2018-07-26 00:03:32 +09:00
Aya Morisawa
6e39b73f07 Fix #1961 2018-07-25 13:37:40 +09:00
Aya Morisawa
01703e5584 Fix #1975 2018-07-25 13:30:59 +09:00
syuilo
fee7cb41cb Merge pull request #1965 from syuilo/l10n_master
New Crowdin translations
2018-07-25 13:07:06 +09:00
greenkeeper[bot]
bb14af8b40 fix(package): update gulp-uglify to version 3.0.1 2018-07-25 12:15:40 +09:00
greenkeeper[bot]
54b849e548 fix(package): update @types/node to version 10.5.3 2018-07-25 12:15:29 +09:00
syuilo
8f50482896 Add note 2018-07-25 09:54:03 +09:00
syuilo
b3b82e7595 Fix bug nado 2018-07-25 08:01:12 +09:00
syuilo
9c4e0a4ae6 ✌️ 2018-07-25 07:46:56 +09:00
syuilo
0b656999d8 Clean up 2018-07-25 07:45:38 +09:00
syuilo
7605a512ba Update appveyor.yml 2018-07-25 07:33:49 +09:00
syuilo
2018a29968 Update docs 2018-07-25 07:29:55 +09:00
syuilo
dbf335a05d Refactor: withFile --> requireFile 2018-07-25 07:18:50 +09:00
syuilo
ad5a7e9d70 Update CHANGELOG 2018-07-25 07:08:53 +09:00
syuilo
f8477fa88d 🎨 2018-07-25 04:36:02 +09:00
syuilo
a22ddb05ba Update docs 2018-07-25 04:15:22 +09:00
syuilo
9455edf2da Update docs 2018-07-25 04:10:56 +09:00
syuilo
4a2244327f New translations ja.yml (English) 2018-07-25 01:41:43 +09:00
syuilo
708a800a25 New translations ja.yml (Catalan) 2018-07-25 01:21:58 +09:00
syuilo
a34193ca16 New translations ja.yml (Portuguese) 2018-07-25 01:21:56 +09:00
syuilo
a4886975e4 New translations ja.yml (Korean) 2018-07-25 01:21:54 +09:00
syuilo
8b6a015602 New translations ja.yml (Polish) 2018-07-25 01:21:52 +09:00
syuilo
f915560752 New translations ja.yml (Chinese Simplified) 2018-07-25 01:21:50 +09:00
syuilo
f2f0910771 New translations ja.yml (Italian) 2018-07-25 01:21:48 +09:00
syuilo
9316e2ce15 New translations ja.yml (Russian) 2018-07-25 01:21:46 +09:00
syuilo
128573e73e New translations ja.yml (English) 2018-07-25 01:21:44 +09:00
syuilo
3d132ad803 New translations ja.yml (Spanish) 2018-07-25 01:21:42 +09:00
syuilo
6f671325fa New translations ja.yml (German) 2018-07-25 01:21:40 +09:00
syuilo
7e6ac77341 New translations ja.yml (French) 2018-07-25 01:21:38 +09:00
syuilo
51bafe8259 #1893 2018-07-25 01:14:38 +09:00
syuilo
f1bbbcfedf Fix #1960 2018-07-25 00:51:30 +09:00
syuilo
7d99b154c0 Update config template: Add missing property definition 2018-07-25 00:40:27 +09:00
syuilo
575da76235 Clean up: Remove unmaintained codes 2018-07-25 00:33:48 +09:00
syuilo
c3b3b9b9a6 #1955 2018-07-25 00:29:18 +09:00
syuilo
7432de3d33 Merge pull request #1968 from syuilo/object-storage
Object storage support
2018-07-24 23:45:19 +09:00
syuilo
03ce87d710 wip 2018-07-24 23:43:14 +09:00
syuilo
5e9fb8bd84 wip 2018-07-24 23:35:19 +09:00
greenkeeper[bot]
68a205486e fix(package): update eslint-plugin-vue to version 4.7.1 2018-07-24 21:41:03 +09:00
greenkeeper[bot]
94c106a87a fix(package): update @types/webpack to version 4.4.8 2018-07-24 12:06:05 +09:00
greenkeeper[bot]
1b2a04bd2a fix(package): update gulp-rename to version 1.4.0 2018-07-24 06:24:11 +09:00
syuilo
a048939cf1 wip 2018-07-24 06:21:21 +09:00
syuilo
6296846078 New translations ja.yml (French) 2018-07-24 05:41:37 +09:00
syuilo
e530d12f7f New translations ja.yml (French) 2018-07-24 05:31:39 +09:00
syuilo
adc3c16ef3 wip 2018-07-24 05:04:43 +09:00
syuilo
5458b10774 wip 2018-07-24 01:58:11 +09:00
Aya Morisawa
9ad403af00 Enhance #1958 2018-07-23 20:58:59 +09:00
Aya Morisawa
8d7f16caed Update setup.*.md 2018-07-23 20:48:55 +09:00
Aya Morisawa
e5c20ca9a7 Update dependencyInfo.ts 2018-07-23 20:45:21 +09:00
greenkeeper[bot]
bd4a7d8cbb fix(package): update webpack to version 4.16.2 2018-07-23 20:19:24 +09:00
Aya Morisawa
5b116737b6 Fix typo 2018-07-23 20:11:20 +09:00
syuilo
8adc799041 Merge pull request #1959 from acid-chicken/top
Go to top
2018-07-23 14:37:18 +09:00
Acid Chicken (硫酸鶏)
41e657b64e Go to top 2018-07-23 14:35:00 +09:00
Aya Morisawa
f16cda51fb #1957 2018-07-23 14:07:09 +09:00
Aya Morisawa
886510d721 Clean up 2018-07-23 14:04:53 +09:00
Aya Morisawa
427b3dcd73 Fix semantic errors 2018-07-23 13:56:25 +09:00
Aya Morisawa
138fa1454f Fix #1957 2018-07-23 13:37:29 +09:00
greenkeeper[bot]
7ec9b03990 fix(package): update swagger-jsdoc to version 1.10.3 2018-07-23 12:54:02 +09:00
syuilo
65a91c5709 Merge pull request #1951 from syuilo/greenkeeper/hard-source-webpack-plugin-0.11.2
Update hard-source-webpack-plugin to the latest version 🚀
2018-07-22 21:56:55 +09:00
greenkeeper[bot]
e679f47c1a fix(package): update hard-source-webpack-plugin to version 0.11.2 2018-07-22 04:47:40 +00:00
syuilo
337ecafa56 Merge pull request #1949 from syuilo/greenkeeper/ratelimiter-3.2.0
Update ratelimiter to the latest version 🚀
2018-07-22 00:58:36 +09:00
syuilo
2c46098fb5 Merge pull request #1950 from syuilo/greenkeeper/ws-6.0.0
Update ws to the latest version 🚀
2018-07-22 00:58:06 +09:00
greenkeeper[bot]
35247af220 fix(package): update ws to version 6.0.0 2018-07-21 13:49:12 +00:00
greenkeeper[bot]
e71da1f659 fix(package): update ratelimiter to version 3.2.0 2018-07-21 12:57:47 +00:00
syuilo
91daa1958b 4.27.0 2018-07-21 19:46:29 +09:00
syuilo
900a9cb34f sharedInbox対応 2018-07-21 19:33:56 +09:00
syuilo
297a7f541e #1947 2018-07-21 19:17:15 +09:00
syuilo
049085fb7a Merge pull request #1945 from syuilo/greenkeeper/@types/mongodb-3.1.2
Update @types/mongodb to the latest version 🚀
2018-07-21 11:26:25 +09:00
greenkeeper[bot]
f594a2d0f4 fix(package): update @types/mongodb to version 3.1.2 2018-07-21 02:19:33 +00:00
syuilo
ffd13accca Refactor 2018-07-21 11:08:27 +09:00
syuilo
edf2503ee5 💯 2018-07-21 11:06:01 +09:00
syuilo
4d0c303660 Fix #1901 2018-07-21 11:03:32 +09:00
syuilo
49bc00102b Fix bug 2018-07-21 08:54:41 +09:00
syuilo
29f074267c Merge pull request #1943 from syuilo/refactor-notes-create
Refactor notes create
2018-07-21 08:51:56 +09:00
syuilo
7671c37f2a wip 2018-07-21 08:47:48 +09:00
syuilo
91ad9e4c41 wip 2018-07-21 07:05:51 +09:00
syuilo
ed48349e39 wip 2018-07-21 06:59:53 +09:00
syuilo
2df02a9d70 wip 2018-07-21 05:35:43 +09:00
syuilo
1d027613e4 🎨 2018-07-21 04:33:04 +09:00
syuilo
e9de73d2f6 Fix 2018-07-21 03:24:39 +09:00
syuilo
7b9b01688c Merge pull request #1942 from syuilo/l10n_master
New Crowdin translations
2018-07-21 03:21:16 +09:00
syuilo
afcf2fddb1 Improve hashtag suggestion 2018-07-21 03:15:31 +09:00
syuilo
78de3ba691 New translations ja.yml (English) 2018-07-21 03:11:10 +09:00
syuilo
2cfefee94d New translations ja.yml (Catalan) 2018-07-21 03:02:52 +09:00
syuilo
d50940cdf8 New translations ja.yml (Portuguese) 2018-07-21 03:02:51 +09:00
syuilo
e38ee663dc New translations ja.yml (Korean) 2018-07-21 03:02:49 +09:00
syuilo
5a160a76f7 New translations ja.yml (Polish) 2018-07-21 03:02:47 +09:00
syuilo
c504f27a51 New translations ja.yml (Chinese Simplified) 2018-07-21 03:02:45 +09:00
syuilo
3f5155e9b5 New translations ja.yml (Italian) 2018-07-21 03:02:43 +09:00
syuilo
dcb85073da New translations ja.yml (Russian) 2018-07-21 03:02:41 +09:00
syuilo
2a5f3491a6 New translations ja.yml (English) 2018-07-21 03:02:39 +09:00
syuilo
6f6b01344d New translations ja.yml (Spanish) 2018-07-21 03:02:37 +09:00
syuilo
73810758d9 New translations ja.yml (German) 2018-07-21 03:02:35 +09:00
syuilo
6cb527fd58 New translations ja.yml (French) 2018-07-21 03:02:33 +09:00
syuilo
7316352ff5 ✌️ 2018-07-21 02:58:44 +09:00
syuilo
ad76d5d8e2 Merge pull request #1939 from acid-chicken/sushi
🍣回転寿司🍣
2018-07-21 02:23:13 +09:00
syuilo
539f307500 Merge branch 'master' of https://github.com/syuilo/misskey 2018-07-21 02:18:40 +09:00
syuilo
5f68d08cbc Improve log 2018-07-21 02:18:35 +09:00
syuilo
bc8bea11c0 Merge pull request #1940 from acid-chicken/acid-chicken-patch-1
投稿できない際にショートカットキーをトリガーしないようにする
2018-07-21 02:16:11 +09:00
Acid Chicken (硫酸鶏)
9bb02e5bf6 Update post-form.vue 2018-07-21 02:14:24 +09:00
Acid Chicken (硫酸鶏)
ae68e6372c Update messaging-room.form.vue 2018-07-21 02:07:50 +09:00
Acid Chicken (硫酸鶏)
69593994ef Update post-form.vue 2018-07-21 02:06:49 +09:00
Acid Chicken (硫酸鶏)
cb52ebe65b インデクサーを忘れていた 2018-07-21 01:25:55 +09:00
Acid Chicken (硫酸鶏)
9b989ebac6 保存し忘れ 2018-07-21 01:24:12 +09:00
Acid Chicken (硫酸鶏)
f13bef4ac8 回転寿司 2018-07-21 01:21:27 +09:00
syuilo
29b1aa0d9b Merge pull request #1938 from acid-chicken/vscode
Add extension suggestion for VSCode
2018-07-21 00:49:07 +09:00
Acid Chicken (硫酸鶏)
5aa2e47c49 Add extension suggestion for VSCode 2018-07-21 00:38:08 +09:00
Aya Morisawa
773d104306 Fix #1868 2018-07-20 21:59:09 +09:00
syuilo
b8e948b009 Merge pull request #1936 from syuilo/patch-1803
Fix #1803
2018-07-20 21:47:35 +09:00
Aya Morisawa
49298d2f3f Update ISSUE_TEMPLATE 2018-07-20 21:41:06 +09:00
Aya Morisawa
ac19567f2b Fix #1803 2018-07-20 21:39:21 +09:00
Acid Chicken (硫酸鶏)
bc627fc55c タグサジェストが重複しないようにする 2018-07-20 21:12:28 +09:00
Aya Morisawa
eb6c2d0f73 Update bug_report.md 2018-07-20 21:08:12 +09:00
Aya Morisawa
436757c71d Enrich ISSUE_TEMPLATE
Close #1932
2018-07-20 21:05:58 +09:00
Aya Morisawa
5d09b7e38b mark as read all -> mark all as read
Close #855
2018-07-20 14:16:02 +09:00
syuilo
a8cf67198f Update README.md 2018-07-20 06:39:30 +09:00
syuilo
06539db1a0 4.26.0 2018-07-20 05:30:59 +09:00
syuilo
de10890bd8 Merge pull request #1930 from syuilo/l10n_master
New Crowdin translations
2018-07-20 05:30:41 +09:00
syuilo
8dc5375d55 最近使ったハッシュタグを表示するようにするなど 2018-07-20 05:29:56 +09:00
syuilo
1d23076191 New translations ja.yml (English) 2018-07-20 05:02:48 +09:00
syuilo
cbdc061891 Merge branch 'master' of https://github.com/syuilo/misskey 2018-07-20 04:59:12 +09:00
syuilo
9536d76b61 Improve 賢さ 2018-07-20 04:59:04 +09:00
syuilo
7a030901c8 Update README.md 2018-07-20 03:51:50 +09:00
syuilo
bcc02047ca New translations ja.yml (Catalan) 2018-07-20 03:01:45 +09:00
syuilo
c61616388e New translations ja.yml (Portuguese) 2018-07-20 03:01:43 +09:00
syuilo
499486f559 New translations ja.yml (Korean) 2018-07-20 03:01:40 +09:00
syuilo
179d231fd8 New translations ja.yml (Polish) 2018-07-20 03:01:38 +09:00
syuilo
2e4a391eda New translations ja.yml (Chinese Simplified) 2018-07-20 03:01:36 +09:00
syuilo
3d214fee4b New translations ja.yml (Italian) 2018-07-20 03:01:34 +09:00
syuilo
509a4c7955 New translations ja.yml (Russian) 2018-07-20 03:01:32 +09:00
syuilo
c754046eaf New translations ja.yml (English) 2018-07-20 03:01:30 +09:00
syuilo
92571d9133 New translations ja.yml (Spanish) 2018-07-20 03:01:28 +09:00
syuilo
add425abdb New translations ja.yml (German) 2018-07-20 03:01:26 +09:00
syuilo
1890d9e2ee New translations ja.yml (French) 2018-07-20 03:01:23 +09:00
syuilo
83f2926f0c 4.25.0 2018-07-20 02:55:27 +09:00
syuilo
738ced81ec 動画もNSFW 2018-07-20 02:53:32 +09:00
syuilo
b22c1ae520 New translations ja.yml (English) 2018-07-20 02:53:19 +09:00
syuilo
e2e7489b1f New translations ja.yml (Catalan) 2018-07-20 02:42:02 +09:00
syuilo
6ae7b8303d New translations ja.yml (Portuguese) 2018-07-20 02:42:00 +09:00
syuilo
55f40af51c New translations ja.yml (Korean) 2018-07-20 02:41:58 +09:00
syuilo
7a784cea3b New translations ja.yml (Polish) 2018-07-20 02:41:56 +09:00
syuilo
f86cccec0c New translations ja.yml (Chinese Simplified) 2018-07-20 02:41:54 +09:00
syuilo
9d90a28d76 New translations ja.yml (Italian) 2018-07-20 02:41:52 +09:00
syuilo
1724cf7c17 New translations ja.yml (Russian) 2018-07-20 02:41:50 +09:00
syuilo
d64d92ccf5 New translations ja.yml (English) 2018-07-20 02:41:48 +09:00
syuilo
f64ced8677 New translations ja.yml (Spanish) 2018-07-20 02:41:46 +09:00
syuilo
db1c0468aa New translations ja.yml (German) 2018-07-20 02:41:44 +09:00
syuilo
77c5d3276a New translations ja.yml (French) 2018-07-20 02:41:41 +09:00
syuilo
ec2b1ec3f0 #1334 2018-07-20 02:40:37 +09:00
syuilo
85bf76dd98 4.24.1 2018-07-19 22:49:12 +09:00
syuilo
bfa326af2c WIP: Support sharedInbox 2018-07-19 22:40:44 +09:00
syuilo
534c47935a chore: Update backers 2018-07-19 22:15:54 +09:00
syuilo
31a6f2b421 Clean up 2018-07-19 22:02:30 +09:00
Aya Morisawa
66c106722c Hide settings button
It is unimplemented
2018-07-19 16:40:40 +09:00
Aya Morisawa
9d0204f2fa Hide detail button
It is unimplemented
2018-07-19 16:21:22 +09:00
syuilo
fceb0e2158 4.24.0 2018-07-19 11:55:11 +09:00
syuilo
14e7caaa5d Merge pull request #1926 from syuilo/greenkeeper/emojilib-2.3.0
Update emojilib to the latest version 🚀
2018-07-19 11:49:29 +09:00
syuilo
744e009690 #1927 2018-07-19 11:47:18 +09:00
syuilo
713dcd9083 #1921 2018-07-19 11:45:55 +09:00
Aya Morisawa
e03ec67b5c Show error message if searching is not available 2018-07-19 08:24:03 +09:00
Aya Morisawa
7e27e2757f Hide delete button
It is unimplemented
2018-07-19 07:48:42 +09:00
Aya Morisawa
f05c5ff617 Update gulpfile.ts 2018-07-19 06:53:46 +09:00
greenkeeper[bot]
1afb26f04a fix(package): update emojilib to version 2.3.0 2018-07-18 21:07:40 +00:00
syuilo
7873905cde 🎨 2018-07-19 04:50:46 +09:00
syuilo
41a9100477 Merge pull request #1925 from syuilo/greenkeeper/swagger-jsdoc-1.10.2
fix(package): update swagger-jsdoc to version 1.10.2
2018-07-19 04:19:34 +09:00
syuilo
b8cc1eb993 Merge pull request #1922 from syuilo/greenkeeper/webpack-cli-3.1.0
Update webpack-cli to the latest version 🚀
2018-07-19 04:19:14 +09:00
greenkeeper[bot]
adbbfd9dc2 fix(package): update swagger-jsdoc to version 1.10.2
Closes #1924
2018-07-18 18:38:00 +00:00
syuilo
84da99d56c 🎨 2018-07-19 03:25:37 +09:00
syuilo
aaf8f09cfd Merge pull request #1923 from acid-chicken/master
Animate calender meters
2018-07-19 00:16:33 +09:00
Acid Chicken (硫酸鶏)
6da464fd1b Update calendar.vue 2018-07-19 00:13:58 +09:00
syuilo
efaa41ba49 reCAPTCHAをオプションに 2018-07-19 00:04:09 +09:00
greenkeeper[bot]
67e8e1d819 fix(package): update webpack-cli to version 3.1.0 2018-07-18 15:01:30 +00:00
Aya Morisawa
532f8f8e4c Fix indent 2018-07-18 19:36:36 +09:00
Aya Morisawa
0109e8e57c Add white spaces 2018-07-18 19:24:31 +09:00
Aya Morisawa
6e720b2798 Hide drive search form
It is unimplemented
2018-07-18 19:13:41 +09:00
Aya Morisawa
d3f2a97dd4 English for ISSUE_TEMPLATE
Close #1796
2018-07-18 17:41:28 +09:00
syuilo
9f7b04b0ec Merge pull request #1920 from syuilo/greenkeeper/vue-loader-15.2.6
Update vue-loader to the latest version 🚀
2018-07-18 14:28:54 +09:00
greenkeeper[bot]
c4118c78b7 fix(package): update vue-loader to version 15.2.6 2018-07-18 03:41:17 +00:00
syuilo
84147c558f 4.23.1 2018-07-18 07:34:33 +09:00
syuilo
4cb51a2d32 Fix bugs 2018-07-18 07:34:17 +09:00
syuilo
4727780a3d 4.23.0 2018-07-18 07:20:25 +09:00
syuilo
df20f5063d #1720 #59 2018-07-18 07:19:24 +09:00
syuilo
d2a5f4c5c1 ✌️ 2018-07-18 06:53:31 +09:00
syuilo
64ba85aa9b 🎨 2018-07-18 06:13:54 +09:00
syuilo
51c33989fe Merge pull request #1919 from acid-chicken/master
Improve analog clock
2018-07-18 02:15:12 +09:00
Acid Chicken (硫酸鶏)
4713822122 Update analog-clock.vue 2018-07-18 02:06:01 +09:00
Acid Chicken (硫酸鶏)
e10de62a7a Update analog-clock.vue 2018-07-18 02:04:07 +09:00
Acid Chicken (硫酸鶏)
14b235e3a4 Update analog-clock.vue 2018-07-18 02:02:52 +09:00
syuilo
eb4aac3902 Merge pull request #1918 from acid-chicken/master
Minify
2018-07-18 01:47:38 +09:00
Acid Chicken (硫酸鶏)
180bf33a28 Update calendar.vue 2018-07-18 01:46:21 +09:00
214 changed files with 4432 additions and 20474 deletions

View File

@@ -41,9 +41,11 @@ redis:
port: 6379
pass: example-pass
recaptcha:
site_key: example-site-key
secret_key: example-secret-key
# Drive capacity of a local user (MB)
localDriveCapacityMb: 256
# Drive capacity of a remote user (MB)
remoteDriveCapacityMb: 8
# If enabled:
# Server will not cache remote files (Using direct link instead).
@@ -51,6 +53,44 @@ recaptcha:
# Users cannot see remote images when they turn off "Show media from a remote server" setting.
preventCache: false
drive:
storage: 'db'
# OR
# storage: 'minio'
# bucket:
# prefix:
# config:
# endPoint:
# port:
# secure:
# accessKey:
# secretKey:
# S3 example
# storage: 'minio'
# bucket: bucket-name
# prefix: files
# config:
# endPoint: s3-us-west-2.amazonaws.com
# region: us-west-2
# secure: true
# accessKey: XXX
# secretKey: YYY
# S3 example (with CDN, custom domain)
# storage: 'minio'
# bucket: drive.example.com
# prefix: files
# baseUrl: https://drive.example.com
# config:
# endPoint: s3-us-west-2.amazonaws.com
# region: us-west-2
# secure: true
# accessKey: XXX
# secretKey: YYY
#
# Below settings are optional
#
@@ -67,6 +107,11 @@ preventCache: false
# port: 9200
# pass: null
# reCAPTCHA
# recaptcha:
# site_key: example-site-key
# secret_key: example-secret-key
# ServiceWorker
# sw:
# # Public key of VAPID
@@ -81,3 +126,11 @@ preventCache: false
# twitter:
# consumer_key: example-twitter-consumer-key
# consumer_secret: example-twitter-consumer-secret-key
# Ghost
# Ghost account is an account used for the purpose of delegating
# followers when putting users in the list.
# ghost: user-id-of-your-ghost-account
# Clustering
# clusterLimit: 1

View File

@@ -1,7 +0,0 @@
<!--
Misskeyへの貢献ありがとうございます。
バグの報告や提案などで、可能であれば以下の情報を含めてください。
* お使いのブラウザ
* デスクトップ版Misskeyかモバイル版Misskeyか
-->

22
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,22 @@
---
name: Bug Report
about: Create a report to help us improve
---
# Summary
<!-- Tell us what the bug is -->
# Expected Behavior
<!--- Tell us what should happen -->
# Actual Behavior
<!--- Tell us what happens instead of the expected behavior -->
# Steps to Reproduce
1.
2.
3.
# Environment
<!-- Tell us where on the platform it happens -->
<!-- e.g. desktop or mobile version, your browser, your OS -->

View File

@@ -0,0 +1,11 @@
---
name: Feature Request
about: Suggest an idea for this project
---
# Summary
<!-- Tell us what the suggestion is -->
# Environment
<!-- Tell us where on the platform it related -->
<!-- e.g. desktop or mobile version, your browser, your OS -->

1
.npmrc
View File

@@ -1 +1,2 @@
save-exact=true
package-lock = false

12
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,12 @@
{
"recommendations": [
"ducksoupdev.vue2",
"editorconfig.editorconfig",
"eg2.tslint",
"eg2.vscode-npm-script",
"hollowtree.vue-snippets",
"ms-vscode.typescript-javascript-grammar",
"octref.vetur",
"sysoev.language-stylus"
]
}

View File

@@ -5,6 +5,15 @@ ChangeLog
This document describes breaking changes only.
5.0.0
-----
### Migration
起動する前に、`node cli/migration/5.0.0`してください。
Please run `node cli/migration/5.0.0` before launch.
4.0.0
-----

View File

@@ -7,7 +7,7 @@
[![][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/)
> Lead Maintainer: [syuilo][syuilo-link]
**Microblogging. Redefined.**
**[Misskey](https://misskey.xyz)** is a completely open source,
ultimately sophisticated professional microblogging software.
@@ -18,14 +18,13 @@ ultimately sophisticated professional microblogging software.
:sparkles: Features
----------------------------------------------------------------
* Rich text contents
* Reactions
* User lists
* Customizable column view (called MisskeyDeck)
* and widgets!
* Private messages
* Mute
* Real-time timelines
* ActivityPub compatible
* ActivityPub support
and more! You can see it with your own eyes at [misskey.xyz](https://misskey.xyz).
@@ -44,9 +43,9 @@ If you want to...
:heart: Backers & Sponsors
----------------------------------------------------------------
| ![][nagarus-icon] | ![][dansup-icon] |
|:-:|:-:|
| [nagarus][nagarus-link] | [dansup][dansup-link] |
| <img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/619786/32cf01444db24e578cd1982c197f6fc6/1?token-time=2145916800&token-hash=tB1e_r8RlZ5sFL0KV_e8dugapxatNBRK1Z3h67TO1g8%3D"> | <img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12378075/0156f769e20f412594fa6b87d85fe228/1?token-time=2145916800&token-hash=IsIJRUXszzoD6-7pDnRY8I05T9nSznc4GTaxj7C9SwU%3D"> | <img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=S1zP0QyLU52Dqq6dtc9qNYyWfW86XrYHiR4NMbeOrnA%3D"> | <img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=tMosUojzUYJCH_3t--tvYA-SMCyrS__hzSndyaRSnbo%3D"> |
|:-:|:-:|:-:|:-:|
| [Gargron](https://www.patreon.com/mastodon) | [39ff](https://www.patreon.com/user/creators?u=12378075) | [dansup](https://www.patreon.com/dansup) | [Takashi Shibuya](https://www.patreon.com/user/creators?u=12531784) |
:four_leaf_clover: Copyright
----------------------------------------------------------------
@@ -73,9 +72,3 @@ Misskey is an open-source software licensed under the [GNU AGPLv3](LICENSE).
[syuilo-link]: https://syuilo.com
[syuilo-icon]: https://avatars2.githubusercontent.com/u/4439005?v=3&s=70
[nagarus-link]: https://www.patreon.com/user/creators?u=11601413
[nagarus-icon]: https://c10.patreonusercontent.com/3/eyJ2IjoiMSIsInciOjIwMH0%3D/patreon-media/user/11601413/20cb15f209924302b399b99d3c98b850?token-time=2145916800&token-hash=IO31nK6VZCMWBWU2VAk2c824BX2QZ4DNPKyHHZXS0iw%3D
[dansup-link]: https://www.patreon.com/dansup
[dansup-icon]: https://c10.patreonusercontent.com/3/eyJ2IjoiMSIsInciOjIwMH0%3D/patreon-media/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb?token-time=2145916800&token-hash=opXAM_pnhUTuN1jCA6p_Nn_YsaqohY465YFjWFqMEEE%3D

View File

@@ -1,41 +0,0 @@
# appveyor file
# http://www.appveyor.com/docs/appveyor-yml
environment:
matrix:
- nodejs_version: 10.1.0
cache:
- node_modules
build: off
install:
# Update Node.js
# 標準で入っている Node.js を更新します (2014/11/13 時点では、v0.10.32 が標準)
- ps: Update-NodeJsInstallation (Get-NodeJsLatestBuild $env:nodejs_version)
- node --version
# Update NPM
- npm install -g npm
- npm --version
# Update node-gyp
# 必須! node-gyp のバージョンを上げないと、ネイティブモジュールのコンパイルに失敗します
- npm install -g node-gyp
- npm install
init:
# git clone の際の改行を変換しないようにします
- git config --global core.autocrlf false
before_test:
# 設定ファイルを配置
- cp ./.travis/default.yml ./.config
- cp ./.travis/test.yml ./.config
- npm run build
test_script:
- npm test

View File

@@ -9,7 +9,7 @@ const q = {
'metadata._user.host': {
$ne: null
},
'metadata.isMetaOnly': false
'metadata.withoutChunks': false
};
async function main() {
@@ -57,7 +57,7 @@ async function main() {
DriveFile.update({ _id: file._id }, {
$set: {
'metadata.isMetaOnly': true
'metadata.withoutChunks': true
}
})
]).then(async () => {

23
cli/mark-admin.js Normal file
View File

@@ -0,0 +1,23 @@
const mongo = require('mongodb');
const User = require('../built/models/user').default;
const args = process.argv.slice(2);
const user = args[0];
const q = user.startsWith('@') ? {
username: user.split('@')[1],
host: user.split('@')[2] || null
} : { _id: new mongo.ObjectID(user) };
console.log(`Mark as admin ${user}...`);
User.update(q, {
$set: {
isAdmin: true
}
}).then(() => {
console.log(`Done ${user}`);
}, e => {
console.error(e);
});

23
cli/mark-verified.js Normal file
View File

@@ -0,0 +1,23 @@
const mongo = require('mongodb');
const User = require('../built/models/user').default;
const args = process.argv.slice(2);
const user = args[0];
const q = user.startsWith('@') ? {
username: user.split('@')[1],
host: user.split('@')[2] || null
} : { _id: new mongo.ObjectID(user) };
console.log(`Mark as verfied ${user}...`);
User.update(q, {
$set: {
isVerified: true
}
}).then(() => {
console.log(`Done ${user}`);
}, e => {
console.error(e);
});

View File

@@ -3,8 +3,8 @@
const chalk = require('chalk');
const sequential = require('promise-sequential');
const { default: User } = require('../built/models/user');
const { default: DriveFile } = require('../built/models/drive-file');
const { default: User } = require('../../built/models/user');
const { default: DriveFile } = require('../../built/models/drive-file');
async function main() {
const promiseGens = [];

View File

@@ -3,8 +3,8 @@
const chalk = require('chalk');
const sequential = require('promise-sequential');
const { default: User } = require('../built/models/user');
const { default: DriveFile } = require('../built/models/drive-file');
const { default: User } = require('../../built/models/user');
const { default: DriveFile } = require('../../built/models/drive-file');
async function main() {
const promiseGens = [];

9
cli/migration/5.0.0.js Normal file
View File

@@ -0,0 +1,9 @@
const { default: DriveFile } = require('../../built/models/drive-file');
DriveFile.update({}, {
$rename: {
'metadata.isMetaOnly': 'metadata.withoutChunks'
}
}, {
multi: true
});

29
cli/reset-password.js Normal file
View File

@@ -0,0 +1,29 @@
const mongo = require('mongodb');
const bcrypt = require('bcryptjs');
const User = require('../built/models/user').default;
const args = process.argv.slice(2);
const user = args[0];
const q = user.startsWith('@') ? {
username: user.split('@')[1],
host: user.split('@')[2] || null
} : { _id: new mongo.ObjectID(user) };
console.log(`Resetting password for ${user}...`);
const passwd = 'yo';
// Generate hash of password
const hash = bcrypt.hashSync(passwd);
User.update(q, {
$set: {
password: hash
}
}).then(() => {
console.log(`Password of ${user} is now '${passwd}'`);
}, e => {
console.error(e);
});

View File

@@ -14,7 +14,7 @@ RUN pacman -S --noconfirm pacman
RUN pacman-db-upgrade
RUN pacman -S --noconfirm archlinux-keyring
RUN pacman -Syyu --noconfirm
RUN pacman -S --noconfirm git nodejs npm mongodb redis imagemagick
RUN pacman -S --noconfirm git nodejs npm mongodb redis
COPY misskey.sh /root/misskey.sh
RUN chmod u+x /root/misskey.sh

View File

@@ -1,11 +1,17 @@
# Management guide
## Check the status of the job queue
In the directory of Misskey:
coming soon
## Mark as 'admin' user
``` shell
node_modules/kue/bin/kue-dashboard -p 3050
node cli/mark-admin (User-ID or Username)
```
## Mark as 'verified' user
``` shell
node cli/mark-verified (User-ID or Username)
```
When you access port 3050, you will see the UI.
## Suspend users
``` shell
@@ -23,6 +29,11 @@ node cli/suspend @syuilo
node cli/suspend @syuilo@misskey.xyz
```
## Reset password
``` shell
node cli/reset-password (User-ID or Username)
```
## Clean up cached remote files
``` shell
node cli/clean-cached-remote-files

View File

@@ -1,11 +1,17 @@
# 運営ガイド
## ジョブキューの状態を調べる
Misskeyのディレクトリで:
coming soon
## 管理者ユーザーを設定する
``` shell
node_modules/kue/bin/kue-dashboard -p 3050
node cli/mark-admin (ユーザーID または ユーザー名)
```
## 'verified'ユーザーを設定する
``` shell
node cli/mark-verified (ユーザーID または ユーザー名)
```
ポート3050にアクセスするとUIが表示されます
## ユーザーを凍結する
``` shell
@@ -23,6 +29,11 @@ node cli/suspend @syuilo
node cli/suspend @syuilo@misskey.xyz
```
## ユーザーのパスワードをリセットする
``` shell
node cli/reset-password (ユーザーID または ユーザー名)
```
## キャッシュされたリモートファイルをクリーンアップする
``` shell
node cli/clean-cached-remote-files

View File

@@ -22,16 +22,15 @@ adduser --disabled-password --disabled-login misskey
Please install and setup these softwares:
#### Dependencies :package:
* *Node.js* and *npm*
* **[Node.js](https://nodejs.org/en/)**
* **[MongoDB](https://www.mongodb.com/)** >= 3.6
* **[Redis](https://redis.io/)**
* **[ImageMagick](http://www.imagemagick.org/script/index.php)** >= 7.0
##### Optional
* [Elasticsearch](https://www.elastic.co/) - used to provide searching feature instead of MongoDB
*3.* Setup Mongodb Database
*3.* Setup MongoDB
----------------------------------------------------------------
In root :
1. `mongo` Go to the mongo shell
@@ -48,9 +47,9 @@ In root :
4. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest)
5. `npm install` Install misskey dependencies.
*5.* reCAPTCHA tokens
*(optional)* reCAPTCHA tokens
----------------------------------------------------------------
Misskey requires reCAPTCHA tokens.
If you want to enable reCAPTCHA, you need to generate reCAPTCHA tokens:
Please visit https://www.google.com/recaptcha/intro/ and generate keys.
*(optional)* Generating VAPID keys
@@ -63,13 +62,12 @@ npm install web-push -g
web-push generate-vapid-keys
```
*6.* Make configuration file
*5.* Make configuration file
----------------------------------------------------------------
1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`.
2. Edit `default.yml`
*7.* Build Misskey
*6.* Build Misskey
----------------------------------------------------------------
Build misskey with the following:
@@ -85,7 +83,7 @@ If you're still encountering errors about some modules, use node-gyp:
3. `node-gyp build`
4. `npm run build`
*8.* That is it.
*7.* That is it.
----------------------------------------------------------------
Well done! Now, you have an environment that run to Misskey.
@@ -126,3 +124,7 @@ You can check if the service is running with `systemctl status misskey`.
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
3. `npm install`
4. `npm run build`
----------------------------------------------------------------
If you have any questions or troubles, feel free to contact us!

View File

@@ -22,15 +22,14 @@ adduser --disabled-password --disabled-login misskey
これらのソフトウェアをインストール・設定してください:
#### 依存関係 :package:
* *Node.js* と *npm*
* **[Node.js](https://nodejs.org/en/)**
* **[MongoDB](https://www.mongodb.com/)** (3.6以上)
* **[Redis](https://redis.io/)**
* **[ImageMagick](http://www.imagemagick.org/script/index.php)**
##### オプション
* [Elasticsearch](https://www.elastic.co/) - 検索機能を向上させるために用います。
*3.* Mongodbの設定
*3.* MongoDBの設定
----------------------------------------------------------------
ルートで:
1. `mongo` mongoシェルを起動
@@ -47,10 +46,10 @@ adduser --disabled-password --disabled-login misskey
4. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
5. `npm install` Misskeyの依存パッケージをインストール
*5.* reCAPTCHAトークン
*(オプション)* reCAPTCHAトークン
----------------------------------------------------------------
MisskeyはreCAPTCHAトークンを必要とします。
https://www.google.com/recaptcha/intro/ にアクセスしてトークンを生成してください。
reCAPTCHAを有効にする場合、reCAPTCHAトークンを取得する必要があります。
https://www.google.com/recaptcha/intro/ にアクセスしてトークンを取得してください。
*(オプション)* VAPIDキーペアの生成
----------------------------------------------------------------
@@ -61,12 +60,12 @@ npm install web-push -g
web-push generate-vapid-keys
```
*6.* Make configuration file
*5.* 設定ファイルを作成する
----------------------------------------------------------------
1. `cp .config/example.yml .config/default.yml` `.config/example.yml`をコピーし名前を`default.yml`にする。
2. `default.yml` を編集する。
*7.* Misskeyのビルド
*6.* Misskeyのビルド
----------------------------------------------------------------
次のコマンドでMisskeyをビルドしてください:
@@ -81,8 +80,7 @@ Debianをお使いであれば、`build-essential`パッケージをインスト
3. `node-gyp build`
4. `npm run build`
*6.* 以上です!
*7.* 以上です!
----------------------------------------------------------------
お疲れ様でした。これでMisskeyを動かす準備は整いました。
@@ -123,13 +121,6 @@ WantedBy=multi-user.target
3. `npm install`
4. `npm run build`
## メモリが足りなくてビルドできない場合
Misskeyの(クライアントの)ビルドには、目安として8GBくらいのメモリを必要とします。
VPSなどでビルドする時は、もしかしたらメモリが足りなくなる可能性があります。
そうなった場合、もしVPSではなくあなたのPCが十分なメモリを搭載しているなら、あなたのPC上でビルドし、生成されたファイルをVPSにFTPでアップロードする方法を採ることができます。
----------------------------------------------------------------
1. あなたのPC上にMisskeyをインストールする
2. 設定ファイルを用意する。設定ファイルは、サーバーに合わせた設定にします。
3. npm run webpack
4. built/client をサーバーにアップロードする
5. サーバー上で、npm run gulp
なにかお困りのことがありましたらお気軽にご連絡ください。

View File

@@ -23,7 +23,6 @@ const uglifyes = require('uglify-es');
const locales = require('./locales');
import { fa } from './src/misc/fa';
const client = require('./built/client/meta.json');
import config from './src/config';
const uglify = uglifyComposer(uglifyes, console);
@@ -46,8 +45,6 @@ gulp.task('build', [
'doc'
]);
gulp.task('rebuild', ['clean', 'build']);
gulp.task('build:ts', () => {
const tsProject = ts.createProject('./tsconfig.json');
@@ -84,19 +81,19 @@ gulp.task('lint', () =>
);
gulp.task('format', () =>
gulp.src('./src/**/*.ts')
.pipe(tslint({
formatter: 'verbose',
fix: true
}))
.pipe(tslint.report())
gulp.src('./src/**/*.ts')
.pipe(tslint({
formatter: 'verbose',
fix: true
}))
.pipe(tslint.report())
);
gulp.task('mocha', () =>
gulp.src([])
gulp.src('./test/**/*.ts')
.pipe(mocha({
exit: true,
compilers: 'ts:ts-node/register'
require: 'ts-node/register'
} as any))
);
@@ -117,8 +114,9 @@ gulp.task('build:client', [
'copy:client'
]);
gulp.task('build:client:script', () =>
gulp.src(['./src/client/app/boot.js', './src/client/app/safe.js'])
gulp.task('build:client:script', () => {
const client = require('./built/client/meta.json');
return gulp.src(['./src/client/app/boot.js', './src/client/app/safe.js'])
.pipe(replace('VERSION', JSON.stringify(client.version)))
.pipe(replace('API', JSON.stringify(config.api_url)))
.pipe(replace('ENV', JSON.stringify(env)))
@@ -126,8 +124,8 @@ gulp.task('build:client:script', () =>
.pipe(isProduction ? uglify({
toplevel: true
} as any) : gutil.noop())
.pipe(gulp.dest('./built/client/assets/')) as any
);
.pipe(gulp.dest('./built/client/assets/'));
});
gulp.task('build:client:styles', () =>
gulp.src('./src/client/app/init.css')

View File

@@ -6,6 +6,14 @@ common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
name: "Misskey"
time:
unknown: "なぞのじかん"
future: "未来"
@@ -17,6 +25,7 @@ common:
weeks_ago: "{}週間前"
months_ago: "{}ヶ月前"
years_ago: "{}年前"
trash: "ゴミ箱"
weekday-short:
sunday: "日"
monday: "月"
@@ -25,6 +34,14 @@ common:
thursday: "木"
friday: "金"
saturday: "土"
weekday:
sunday: "日曜日"
monday: "月曜日"
tuesday: "火曜日"
wednesday: "水曜日"
thursday: "木曜日"
friday: "金曜日"
saturday: "土曜日"
reactions:
like: "いいね"
love: "しゅき"
@@ -51,12 +68,18 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
reversi:
drawn: "引き分け"
my-turn: "あなたのターンです"
opponent-turn: "相手のターンです"
turn-of: "{}のターンです"
past-turn-of: "{}のターン"
won: "{}の勝ち"
black: "黒"
white: "白"
total: "合計"
this-turn: "{}ターン目"
widgets:
analog-clock: "アナログ時計"
profile: "プロフィール"
@@ -98,6 +121,42 @@ common:
rename: "名前を変更"
stack-left: "左に重ねる"
pop-right: "右に出す"
common/views/components/games/reversi/reversi.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
rule: "遊び方"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "招待"
mode-invite-desc: "指定したユーザーと対戦するモードです。"
invitations: "対局の招待があります!"
my-games: "自分の対局"
all-games: "みんなの対局"
enter-username: "ユーザー名を入力してください"
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
cancel: "キャンセル"
ready: "準備完了"
cancel-ready: "準備続行"
common/views/components/connect-failed.vue:
title: "サーバーに接続できません"
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
@@ -227,6 +286,13 @@ common/views/widgets/broadcast.vue:
no-broadcasts: "お知らせはありません"
have-a-nice-day: "良い一日を!"
next: "次"
common/views/widgets/calendar.vue:
year: "{}年"
month: "{}月"
day: "{}日"
today: "今日:"
this-month: "今月:"
this-year: "今年:"
common/views/widgets/donation.vue:
title: "寄付のお願い"
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
@@ -247,6 +313,31 @@ common/views/widgets/memo.vue:
title: "付箋"
memo: "ここに書いて!"
save: "保存"
common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
folder: "クリックしてフォルダを指定してください"
no-image: "このフォルダには画像がありません"
common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます"
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
tips-line8: "ホームは設定からカスタマイズできます"
tips-line9: "MisskeyはAGPLv3です"
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
tips-line21: "APIを利用してbotの開発なども行えます"
tips-line23: "まゆかわいいよまゆ"
tips-line24: "Misskeyは2014年にサービスを開始しました"
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
common/views/pages/follow.vue:
signed-in-as: "{}としてサインイン中"
following: "フォロー中"
@@ -288,6 +379,8 @@ desktop/views/components/drive.file.vue:
banner: "バナー"
contextmenu:
rename: "名前を変更"
mark-as-sensitive: "閲覧注意に設定"
unmark-as-sensitive: "閲覧注意を解除"
copy-url: "URLをコピー"
download: "ダウンロード"
else-files: "その他..."
@@ -331,6 +424,12 @@ desktop/views/components/drive.vue:
create-folder: "フォルダーを作成"
upload: "ファイルをアップロード"
url-upload: "URLからアップロード"
desktop/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
@@ -387,6 +486,9 @@ desktop/views/components/notifications.vue:
more: "もっと見る"
empty: "ありません!"
desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加"
attach-location-information: "位置情報を添付する"
hide-contents: "内容を隠す"
reply-placeholder: "この投稿への返信..."
quote-placeholder: "この投稿を引用..."
submit: "投稿"
@@ -405,6 +507,12 @@ desktop/views/components/post-form.vue:
insert-a-kao: "v('ω')v"
create-poll: "アンケートを作成"
text-remain: "残り{}文字"
recent-tags: "最近"
click-to-tagging: "クリックでタグ付け"
visibility: "公開範囲"
geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー"
enter-username: "ユーザー名を入力してください"
desktop/views/components/post-form-window.vue:
note: "新規投稿"
reply: "返信"
@@ -525,6 +633,9 @@ desktop/views/components/settings.api.vue:
enter-password: "パスワードを入力してください"
desktop/views/components/settings.apps.vue:
no-apps: "連携しているアプリケーションはありません"
desktop/views/components/settings.drive.vue:
max: "中"
in-use: "使用中"
desktop/views/components/settings.mute.vue:
no-users: "ミュートしているユーザーはいません"
desktop/views/components/settings.password.vue:
@@ -547,6 +658,7 @@ desktop/views/components/settings.profile.vue:
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
@@ -620,6 +732,7 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
powered-by-misskey: "Powered by <b>Misskey</b>."
desktop/views/pages/drive.vue:
title: "Misskey Drive"
desktop/views/pages/favorites.vue:
@@ -634,6 +747,14 @@ desktop/views/pages/selectdrive.vue:
ok: "決定"
cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
users: "ユーザー"
add-user: "ユーザーを追加"
@@ -725,6 +846,12 @@ mobile/views/components/drive.file-detail.vue:
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
@@ -783,6 +910,8 @@ mobile/views/components/sub-note-content.vue:
mobile/views/components/timeline.vue:
empty: "投稿がありません"
load-more: "もっと"
mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、"
mobile/views/components/ui.nav.vue:
timeline: "タイムライン"
notifications: "通知"
@@ -813,6 +942,8 @@ mobile/views/pages/user-lists.vue:
mobile/views/pages/drive.vue:
drive: "ドライブ"
more: "もっと見る"
mobile/views/pages/signup.vue:
lets-start: "📦 始めましょう"
mobile/views/pages/followers.vue:
followers-of: "{}のフォロワー"
mobile/views/pages/following.vue:
@@ -822,6 +953,14 @@ mobile/views/pages/home.vue:
local: "ローカル"
hybrid: "ソーシャル"
global: "グローバル"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
@@ -837,6 +976,8 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"

View File

@@ -6,6 +6,14 @@ common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
name: "Misskey"
time:
unknown: "Unbekannt"
future: "Zukunft"
@@ -17,6 +25,7 @@ common:
weeks_ago: "vor {0} Woche{0:n}"
months_ago: "vor {0} Monat{0:en}"
years_ago: "vor {} Jahr{0:en}"
trash: "ゴミ箱"
weekday-short:
sunday: "So"
monday: "Mo"
@@ -25,6 +34,14 @@ common:
thursday: "Do"
friday: "Fr"
saturday: "Sa"
weekday:
sunday: "日曜日"
monday: "月曜日"
tuesday: "火曜日"
wednesday: "水曜日"
thursday: "木曜日"
friday: "金曜日"
saturday: "土曜日"
reactions:
like: "Gefällt mir"
love: "Lieben"
@@ -51,12 +68,18 @@ common:
my-token-regenerated: "Dein Token wurde generiert. Du wirst jetzt abgemeldet."
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
reversi:
drawn: "引き分け"
my-turn: "あなたのターンです"
opponent-turn: "相手のターンです"
turn-of: "{}のターンです"
past-turn-of: "{}のターン"
won: "{}の勝ち"
black: "黒"
white: "白"
total: "合計"
this-turn: "{}ターン目"
widgets:
analog-clock: "Analoge Uhr"
profile: "Profil"
@@ -98,6 +121,42 @@ common:
rename: "Umbenennen"
stack-left: "Nach links schichten"
pop-right: "右に出す"
common/views/components/games/reversi/reversi.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
rule: "遊び方"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "招待"
mode-invite-desc: "指定したユーザーと対戦するモードです。"
invitations: "対局の招待があります!"
my-games: "自分の対局"
all-games: "みんなの対局"
enter-username: "ユーザー名を入力してください"
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
cancel: "キャンセル"
ready: "準備完了"
cancel-ready: "準備続行"
common/views/components/connect-failed.vue:
title: "Verbindung zum Server ist fehlgeschlagen"
description: "Es gibt entweder ein Problem mit deiner Internetverbindung, der Server ist nicht erreichbar oder wird gerade gewartet. Bitte versuche es später noch einmal."
@@ -227,6 +286,13 @@ common/views/widgets/broadcast.vue:
no-broadcasts: "Keine Broadcasts"
have-a-nice-day: "Schönen Tag!"
next: "Nächster"
common/views/widgets/calendar.vue:
year: "{}年"
month: "{}月"
day: "{}日"
today: "今日:"
this-month: "今月:"
this-year: "今年:"
common/views/widgets/donation.vue:
title: "Spende"
text: "Um Misskey am Laufen zu halten geben wir Geld für Domain, Server usw. aus. Wir bekommen dafür kein Geld und würden uns freuen, wenn du spenden würdest. Wenn du interessiert bist, dann kontaktiere {}. Danke für deine Unterstützung!"
@@ -247,6 +313,31 @@ common/views/widgets/memo.vue:
title: "Notizen"
memo: "Schreib hier!"
save: "Speichern"
common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
folder: "クリックしてフォルダを指定してください"
no-image: "このフォルダには画像がありません"
common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます"
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
tips-line8: "ホームは設定からカスタマイズできます"
tips-line9: "MisskeyはAGPLv3です"
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
tips-line21: "APIを利用してbotの開発なども行えます"
tips-line23: "まゆかわいいよまゆ"
tips-line24: "Misskeyは2014年にサービスを開始しました"
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
common/views/pages/follow.vue:
signed-in-as: "{}としてサインイン中"
following: "フォロー中"
@@ -288,6 +379,8 @@ desktop/views/components/drive.file.vue:
banner: "Banner"
contextmenu:
rename: "Umbenennen"
mark-as-sensitive: "閲覧注意に設定"
unmark-as-sensitive: "閲覧注意を解除"
copy-url: "URL kopieren"
download: "Download"
else-files: "Anderes…"
@@ -331,6 +424,12 @@ desktop/views/components/drive.vue:
create-folder: "Ein Verzeichnis erstellen"
upload: "Eine Datei hochladen"
url-upload: "Von einer URL hochladen"
desktop/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/follow-button.vue:
following: "Folge ich"
follow: "Folgen"
@@ -387,6 +486,9 @@ desktop/views/components/notifications.vue:
more: "Mehr"
empty: "Keine Benachrichtigungen"
desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加"
attach-location-information: "位置情報を添付する"
hide-contents: "内容を隠す"
reply-placeholder: "Antworte auf diese Anmerkung..."
quote-placeholder: "Zitiere diese Anmerkung..."
submit: "Beitragsform"
@@ -405,6 +507,12 @@ desktop/views/components/post-form.vue:
insert-a-kao: "v('ω')v"
create-poll: "Eine Abstimmung erstellen"
text-remain: "{} Zeichen verbleibend"
recent-tags: "最近"
click-to-tagging: "クリックでタグ付け"
visibility: "公開範囲"
geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー"
enter-username: "ユーザー名を入力してください"
desktop/views/components/post-form-window.vue:
note: "Neue Notiz"
reply: "Antworten"
@@ -525,6 +633,9 @@ desktop/views/components/settings.api.vue:
enter-password: "Bitte Passwort eingeben"
desktop/views/components/settings.apps.vue:
no-apps: "連携しているアプリケーションはありません"
desktop/views/components/settings.drive.vue:
max: "中"
in-use: "使用中"
desktop/views/components/settings.mute.vue:
no-users: "ミュートしているユーザーはいません"
desktop/views/components/settings.password.vue:
@@ -547,6 +658,7 @@ desktop/views/components/settings.profile.vue:
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
@@ -620,6 +732,7 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
powered-by-misskey: "Powered by <b>Misskey</b>."
desktop/views/pages/drive.vue:
title: "Misskey Drive"
desktop/views/pages/favorites.vue:
@@ -634,6 +747,14 @@ desktop/views/pages/selectdrive.vue:
ok: "OK"
cancel: "Abbrechen"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
users: "ユーザー"
add-user: "ユーザーを追加"
@@ -725,6 +846,12 @@ mobile/views/components/drive.file-detail.vue:
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
@@ -783,6 +910,8 @@ mobile/views/components/sub-note-content.vue:
mobile/views/components/timeline.vue:
empty: "投稿がありません"
load-more: "もっと"
mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、"
mobile/views/components/ui.nav.vue:
timeline: "タイムライン"
notifications: "通知"
@@ -813,6 +942,8 @@ mobile/views/pages/user-lists.vue:
mobile/views/pages/drive.vue:
drive: "ドライブ"
more: "もっと見る"
mobile/views/pages/signup.vue:
lets-start: "📦 始めましょう"
mobile/views/pages/followers.vue:
followers-of: "{}のフォロワー"
mobile/views/pages/following.vue:
@@ -822,6 +953,14 @@ mobile/views/pages/home.vue:
local: "ローカル"
hybrid: "ソーシャル"
global: "グローバル"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
@@ -837,6 +976,8 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "Profil"
name: "名前"

View File

@@ -6,6 +6,14 @@ common:
misskey: "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?"
customization-tips:
title: "Customization tips"
paragraph1: "Home customization allows you to add/delete, drag and drop and rearrange widgets."
paragraph2: "You can change the display by <strong>right clicking</strong> on some widgets."
paragraph3: "To delete a widget, <strong>drag and drop the widget onto the area labeled \"Trash\"</strong> in the header."
paragraph4: "To finish the customization, click \"Finish\" in the upper right."
gotit: "Got it!"
name: "Misskey"
time:
unknown: "unknown"
future: "future"
@@ -17,6 +25,7 @@ common:
weeks_ago: "{}week(s) ago"
months_ago: "{}month(s) ago"
years_ago: "{}year(s) ago"
trash: "Trash"
weekday-short:
sunday: "S"
monday: "M"
@@ -25,6 +34,14 @@ common:
thursday: "T"
friday: "F"
saturday: "S"
weekday:
sunday: "Sunday"
monday: "Monday"
tuesday: "Tuesday"
wednesday: "Wednesday"
thursday: "Thursday"
friday: "Friday"
saturday: "Saturday"
reactions:
like: "Like"
love: "Love"
@@ -51,12 +68,18 @@ common:
my-token-regenerated: "Your token has been regenerated, so you will be signed out."
i-like-sushi: "I prefer sushi rather than pudding"
show-reversi-board-labels: "Show row and column labels in Reversi"
verified-user: "Verified user"
reversi:
drawn: "Draw"
my-turn: "Your turn"
opponent-turn: "Opponent's turn"
turn-of: "{}'s turn"
past-turn-of: "{}'s turn"
won: "{} won"
black: "Black"
white: "White"
total: "Total"
this-turn: "Turn {}"
widgets:
analog-clock: "Analog clock"
profile: "Profile"
@@ -98,6 +121,42 @@ common:
rename: "Rename"
stack-left: "Stack to the left"
pop-right: "Dock on the right"
common/views/components/games/reversi/reversi.vue:
title: "Misskey Reversi"
sub-title: "Play reversi with your friends!"
invite: "Invite"
rule: "How to play"
rule-desc: "Reversi is a strategy board game for two players, played on an 8×8 uncheckered board. There are sixty-four identical game pieces called disks (often spelled \"discs\"), which are light on one side and dark on the other. Players take turns placing disks on the board with their assigned color facing up. During a play, any disks of the opponent's color that are in a straight line and bounded by the disk just placed and another disk of the current player's color are turned over to the current player's color. The object of the game is to have the majority of disks turned to display your color when the last playable empty square is filled."
mode-invite: "Invite"
mode-invite-desc: "Invite to the game a user"
invitations: "You received invitation!"
my-games: "My games"
all-games: "All games"
enter-username: "Enter username"
game-state:
ended: "Ended"
playing: "In Progress"
matching:
waiting-for: "Waiting for {}"
cacnel: "Cancel"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "Game settings"
choose-map: "Choose a map"
random: "Random"
black-or-white: "Black/White"
black-is: "Black is {}"
rules: "Rules"
is-llotheo: "The lesser one wins"
looped-map: "Looped map"
can-put-everywhere: "Can put everywhere"
settings-of-the-bot: "Bot settings"
this-gane-is-started-soon: "This game will start soon"
waiting-for-other: "Waiting for the other party's preparation"
waiting-for-me: "Waiting for the your preparation"
waiting-for-both: "Waiting for yours"
cancel: "Cancel"
ready: "Ready"
cancel-ready: "Cancel \"Ready\""
common/views/components/connect-failed.vue:
title: "Unable to connect to the server"
description: "There is a problem with your Internet connection, or the server may be down or under maintenance. Please try again later."
@@ -153,8 +212,8 @@ common/views/components/note-menu.vue:
favorite: "Favorite this note"
pin: "Pin to your profile page"
delete: "Delete"
delete-confirm: "Delete this post for sure?"
remote: "Show the originating note"
delete-confirm: "Are you sure you want to delete this post?"
remote: "Show original note"
common/views/components/poll.vue:
vote-to: "Vote for '{}'"
vote-count: "{} votes"
@@ -227,6 +286,13 @@ common/views/widgets/broadcast.vue:
no-broadcasts: "No announcements"
have-a-nice-day: "Have a nice day!"
next: "Next"
common/views/widgets/calendar.vue:
year: "Year {}"
month: "Month {}"
day: "Day {}"
today: "Today: "
this-month: "This month: "
this-year: "This year: "
common/views/widgets/donation.vue:
title: "Request for donations"
text: "To keep Misskey up and running, we have to spend money on our domain name, the server costs and so on. Since we don't receive money from advertisements, we count on donations from all of you. If you're interested in helping, contact {}. Thank you for your contribution!"
@@ -247,6 +313,31 @@ common/views/widgets/memo.vue:
title: "Sticky note"
memo: "Write here!"
save: "Save"
common/views/widgets/slideshow.vue:
folder-customize-mode: "To specify a folder, please exit customize mode"
folder: "Please click and specify a folder"
no-image: "There is no image in this folder"
common/views/widgets/tips.vue:
tips-line1: "You can focus on the timeline with <kbd>t</kbd>."
tips-line2: "Open posting form with <kbd>p</kbd> or <kbd>n</kbd>."
tips-line3: "You can drag and drop files on the post form."
tips-line4: "You can paste an image from the clipboard into the submission form."
tips-line5: "You can upload files by dragging and dropping them to Drive."
tips-line6: "You can move a folder by dragging it within the Drive."
tips-line7: "You can move folders by dragging them within the Drive."
tips-line8: "Home can be customized from the settings."
tips-line9: "Misskey is licensed under AGPLv3."
tips-line10: "Using the Time Machine widget makes it easy to trace back to the past timeline."
tips-line11: "You can pin posts to user page by clicking on \"...\""
tips-line13: "All the files attached to the post are saved to Drive."
tips-line14: "While customizing the home, you can right click on the widget and change the design."
tips-line17: "Surrounding the text with ** ** will highlight it."
tips-line19: "Several windows can be detached outside the browser."
tips-line20: "The percentage of the calendar widget shows the percentage of time elapsed."
tips-line21: "You can also use the API to develop bots."
tips-line23: "Mayu is so cute with its eyebrows."
tips-line24: "Misskey started in 2014."
tips-line25: "You can receive notification even if Misskey is not open in a compatible browser."
common/views/pages/follow.vue:
signed-in-as: "Signed in as {}"
following: "Following"
@@ -288,6 +379,8 @@ desktop/views/components/drive.file.vue:
banner: "Banner"
contextmenu:
rename: "Rename"
mark-as-sensitive: "Mark as 'sensitive'"
unmark-as-sensitive: "Unmark as 'sensitive'"
copy-url: "Copy URL"
download: "Download"
else-files: "Others"
@@ -331,6 +424,12 @@ desktop/views/components/drive.vue:
create-folder: "Create a folder"
upload: "Upload a file"
url-upload: "Upload from a URL"
desktop/views/components/media-image.vue:
sensitive: "The content is NSFW"
click-to-show: "Click to show"
desktop/views/components/media-video.vue:
sensitive: "The content is NSFW"
click-to-show: "Click to show"
desktop/views/components/follow-button.vue:
following: "Following"
follow: "Follow"
@@ -387,6 +486,9 @@ desktop/views/components/notifications.vue:
more: "More"
empty: "No notifications!"
desktop/views/components/post-form.vue:
add-visible-user: "+Add a user"
attach-location-information: "Attach location information"
hide-contents: "Hide contents"
reply-placeholder: "Reply to this note..."
quote-placeholder: "Quote this note..."
submit: "Post"
@@ -405,6 +507,12 @@ desktop/views/components/post-form.vue:
insert-a-kao: "v('ω')v"
create-poll: "Create a poll"
text-remain: "{} characters remaining"
recent-tags: "Recent"
click-to-tagging: "Click to tagging"
visibility: "Visibility"
geolocation-alert: "Your device does not support geolocalization."
error: "Error"
enter-username: "Please enter a username..."
desktop/views/components/post-form-window.vue:
note: "New note"
reply: "Reply"
@@ -525,6 +633,9 @@ desktop/views/components/settings.api.vue:
enter-password: "Please enter the password"
desktop/views/components/settings.apps.vue:
no-apps: "No linked applications"
desktop/views/components/settings.drive.vue:
max: "Max "
in-use: " in use."
desktop/views/components/settings.mute.vue:
no-users: "No muted users"
desktop/views/components/settings.password.vue:
@@ -547,6 +658,7 @@ desktop/views/components/settings.profile.vue:
other: "Other"
is-bot: "This account is a Bot"
is-cat: "This account is a Cat"
profile-updated: "Profile updated"
desktop/views/components/sub-note-content.vue:
private: "This post is private"
deleted: "This post has been deleted"
@@ -620,6 +732,7 @@ desktop/views/pages/welcome.vue:
signin-button: "Log in"
signup-button: "Sign up"
timeline: "Timeline"
powered-by-misskey: "Powered by <b>Misskey</b>."
desktop/views/pages/drive.vue:
title: "Misskey storage"
desktop/views/pages/favorites.vue:
@@ -634,6 +747,14 @@ desktop/views/pages/selectdrive.vue:
ok: "OK"
cancel: "Cancel"
upload: "Upload files from your device"
desktop/views/pages/search.vue:
not-available: "The search function can not be used."
not-found: "No posts were found for '{}'"
desktop/views/pages/share.vue:
share-with: "Share with Misskey"
close: "Close"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
users: "User"
add-user: "Add a user"
@@ -725,6 +846,12 @@ mobile/views/components/drive.file-detail.vue:
move: "Move"
hash: "Hash (md5)"
exif: "EXIF"
mobile/views/components/media-image.vue:
sensitive: "The content is NSFW"
click-to-show: "Click to show"
mobile/views/components/media-video.vue:
sensitive: "The content is NSFW"
click-to-show: "Click to show"
mobile/views/components/follow-button.vue:
following: "Following"
follow: "Follow"
@@ -783,6 +910,8 @@ mobile/views/components/sub-note-content.vue:
mobile/views/components/timeline.vue:
empty: "No notes"
load-more: "More"
mobile/views/components/ui.header.vue:
welcome-back: "Welcome back, "
mobile/views/components/ui.nav.vue:
timeline: "Timeline"
notifications: "Notifications"
@@ -813,6 +942,8 @@ mobile/views/pages/user-lists.vue:
mobile/views/pages/drive.vue:
drive: "Drive"
more: "Load more"
mobile/views/pages/signup.vue:
lets-start: "Let's start! 📦"
mobile/views/pages/followers.vue:
followers-of: "Followers of {}"
mobile/views/pages/following.vue:
@@ -822,6 +953,14 @@ mobile/views/pages/home.vue:
local: "Local"
hybrid: "Social"
global: "Global"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "Sign up"
mobile/views/pages/widgets.vue:
dashboard: "Dashboard"
mobile/views/pages/widgets/activity.vue:
activity: "Activity"
mobile/views/pages/messaging.vue:
messaging: "Messaging"
mobile/views/pages/messaging-room.vue:
@@ -837,6 +976,8 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "Notifications"
read-all: "Do you wish to mark all notifications as read?"
mobile/views/pages/reversi.vue:
reversi: "Reversi"
mobile/views/pages/settings/settings.profile.vue:
title: "Profile"
name: "Name"
@@ -940,8 +1081,8 @@ docs:
require-permission: "This endpoint requires {permission} permission."
has-limit: "There is a rate limit."
duration-limit: "You can't request when a frequency of a request in during {duration} milliseconds exceeds {max} times."
min-interval-limit: "You can't request before {interval} milliseconds has passed since previous request."
show-src: "You can view source code for this endpoint."
min-interval-limit: "You can't request before {interval} milliseconds have passed since the previous request."
show-src: "You can view the source code for this endpoint."
show-src-link: "See the code on GitHub"
generated: "This doc is generated by an API definition."
props:

View File

@@ -6,6 +6,14 @@ common:
misskey: "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?"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
name: "Misskey"
time:
unknown: "Desconocido"
future: "Futuro"
@@ -17,6 +25,7 @@ common:
weeks_ago: "Hace {} semana(s)"
months_ago: "Hace {} mes(es)"
years_ago: "Hace {} año(s)"
trash: "ゴミ箱"
weekday-short:
sunday: "domingo"
monday: "lunes"
@@ -25,6 +34,14 @@ common:
thursday: "jueves"
friday: "viernes"
saturday: "sábado"
weekday:
sunday: "日曜日"
monday: "月曜日"
tuesday: "火曜日"
wednesday: "水曜日"
thursday: "木曜日"
friday: "金曜日"
saturday: "土曜日"
reactions:
like: "me gusta"
love: "amor"
@@ -51,12 +68,18 @@ common:
my-token-regenerated: "Tu token se ha regenerado vas a ser desconectado."
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
reversi:
drawn: "引き分け"
my-turn: "あなたのターンです"
opponent-turn: "相手のターンです"
turn-of: "{}のターンです"
past-turn-of: "{}のターン"
won: "{}の勝ち"
black: "黒"
white: "白"
total: "合計"
this-turn: "{}ターン目"
widgets:
analog-clock: "Reloj analógico"
profile: "Perfil"
@@ -98,6 +121,42 @@ common:
rename: "Renombrar"
stack-left: "A la izqda."
pop-right: "A la dcha."
common/views/components/games/reversi/reversi.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
rule: "遊び方"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "招待"
mode-invite-desc: "指定したユーザーと対戦するモードです。"
invitations: "対局の招待があります!"
my-games: "自分の対局"
all-games: "みんなの対局"
enter-username: "ユーザー名を入力してください"
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
cancel: "キャンセル"
ready: "準備完了"
cancel-ready: "準備続行"
common/views/components/connect-failed.vue:
title: "Imposible conectar al servidor"
description: "Hay un problema en tu conexió o puede que el servidor esté caido o en mantenimiento. Por favor {try again} más tarde."
@@ -227,6 +286,13 @@ common/views/widgets/broadcast.vue:
no-broadcasts: "Sin emisión"
have-a-nice-day: "¡Buenos dias!"
next: "Siguiente"
common/views/widgets/calendar.vue:
year: "{}年"
month: "{}月"
day: "{}日"
today: "今日:"
this-month: "今月:"
this-year: "今年:"
common/views/widgets/donation.vue:
title: "Donaciones"
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
@@ -247,6 +313,31 @@ common/views/widgets/memo.vue:
title: "付箋"
memo: "ここに書いて!"
save: "保存"
common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
folder: "クリックしてフォルダを指定してください"
no-image: "このフォルダには画像がありません"
common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます"
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
tips-line8: "ホームは設定からカスタマイズできます"
tips-line9: "MisskeyはAGPLv3です"
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
tips-line21: "APIを利用してbotの開発なども行えます"
tips-line23: "まゆかわいいよまゆ"
tips-line24: "Misskeyは2014年にサービスを開始しました"
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
common/views/pages/follow.vue:
signed-in-as: "{}としてサインイン中"
following: "フォロー中"
@@ -288,6 +379,8 @@ desktop/views/components/drive.file.vue:
banner: "Banner"
contextmenu:
rename: "Renombrar"
mark-as-sensitive: "閲覧注意に設定"
unmark-as-sensitive: "閲覧注意を解除"
copy-url: "Copia la URL"
download: "Descargar"
else-files: "Otros"
@@ -331,6 +424,12 @@ desktop/views/components/drive.vue:
create-folder: "Crear una carpeta"
upload: "Subir fichero"
url-upload: "Subir desde una URL"
desktop/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/follow-button.vue:
following: "Siguiendo"
follow: "Sigue"
@@ -387,6 +486,9 @@ desktop/views/components/notifications.vue:
more: "もっと見る"
empty: "ありません!"
desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加"
attach-location-information: "位置情報を添付する"
hide-contents: "内容を隠す"
reply-placeholder: "この投稿への返信..."
quote-placeholder: "この投稿を引用..."
submit: "投稿"
@@ -405,6 +507,12 @@ desktop/views/components/post-form.vue:
insert-a-kao: "v('ω')v"
create-poll: "Crea una encuesta"
text-remain: "quedan {} caracteres"
recent-tags: "最近"
click-to-tagging: "クリックでタグ付け"
visibility: "公開範囲"
geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー"
enter-username: "ユーザー名を入力してください"
desktop/views/components/post-form-window.vue:
note: "Nota nueva"
reply: "Responder"
@@ -525,6 +633,9 @@ desktop/views/components/settings.api.vue:
enter-password: "パスワードを入力してください"
desktop/views/components/settings.apps.vue:
no-apps: "連携しているアプリケーションはありません"
desktop/views/components/settings.drive.vue:
max: "中"
in-use: "使用中"
desktop/views/components/settings.mute.vue:
no-users: "ミュートしているユーザーはいません"
desktop/views/components/settings.password.vue:
@@ -547,6 +658,7 @@ desktop/views/components/settings.profile.vue:
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
@@ -620,6 +732,7 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
powered-by-misskey: "Powered by <b>Misskey</b>."
desktop/views/pages/drive.vue:
title: "Misskey Drive"
desktop/views/pages/favorites.vue:
@@ -634,6 +747,14 @@ desktop/views/pages/selectdrive.vue:
ok: "決定"
cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
users: "ユーザー"
add-user: "ユーザーを追加"
@@ -725,6 +846,12 @@ mobile/views/components/drive.file-detail.vue:
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
@@ -783,6 +910,8 @@ mobile/views/components/sub-note-content.vue:
mobile/views/components/timeline.vue:
empty: "投稿がありません"
load-more: "もっと"
mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、"
mobile/views/components/ui.nav.vue:
timeline: "タイムライン"
notifications: "通知"
@@ -813,6 +942,8 @@ mobile/views/pages/user-lists.vue:
mobile/views/pages/drive.vue:
drive: "ドライブ"
more: "もっと見る"
mobile/views/pages/signup.vue:
lets-start: "📦 始めましょう"
mobile/views/pages/followers.vue:
followers-of: "{}のフォロワー"
mobile/views/pages/following.vue:
@@ -822,6 +953,14 @@ mobile/views/pages/home.vue:
local: "ローカル"
hybrid: "ソーシャル"
global: "グローバル"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
@@ -837,6 +976,8 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"

View File

@@ -6,6 +6,14 @@ common:
misskey: "Une ⭐ du fédiverse"
about-title: "Une ⭐ du fédiverse."
about: "Merci d'avoir découvert Misskey. Misskey est une <b>plateforme de micro-blogging distribuée</b> née sur Terre. Parce qu'il fait partie du Fédiverse (un univers composé de diverses plateformes de réseaux sociaux organisées), il est mutuellement connecté avec d'autres plateformes de réseaux sociaux. Désirez-vous prendre une pause, pendant un instant, loin de l'agitation de la ville et plonger dans un nouvel Internet ?"
customization-tips:
title: "Conseils de personnalisation"
paragraph1: "La personnalisation à la maison vous permet d'ajouter / supprimer, glisser et déposer et réorganiser les widgets."
paragraph2: "Vous pouvez changer l'affichage en <strong>cliquant droit</strong> sur certains widgets."
paragraph3: "Pour supprimer un widget, <strong>glissez et déposez le widget sur la zone étiquetée \"Corbeille\"</strong> dans l'en-tête."
paragraph4: "Pour terminer la personnalisation, cliquez sur \"Terminer\" dans le coin supérieur droit."
gotit: "Compris!"
name: "Misskey"
time:
unknown: "inconnu"
future: "future"
@@ -17,6 +25,7 @@ common:
weeks_ago: "Il y a {} semaines·s"
months_ago: "Il y a {} mois"
years_ago: "Il y a {} an·s"
trash: "Corbeille"
weekday-short:
sunday: "D"
monday: "L"
@@ -25,6 +34,14 @@ common:
thursday: "J"
friday: "V"
saturday: "S"
weekday:
sunday: "日曜日"
monday: "月曜日"
tuesday: "火曜日"
wednesday: "水曜日"
thursday: "木曜日"
friday: "金曜日"
saturday: "土曜日"
reactions:
like: "Aime"
love: "Adore"
@@ -51,17 +68,23 @@ common:
my-token-regenerated: "Votre token vient d'être généré, vous allez maintenant être déconnecté."
i-like-sushi: "Je préfère les sushis (au pudding)"
show-reversi-board-labels: "Afficher les étiquettes des lignes et colonnes dans Reversi"
verified-user: "Utilisateur·trice vérifié·e"
reversi:
drawn: "Partie nulle"
my-turn: "Cest votre tour"
opponent-turn: "Tour de ladversaire"
turn-of: "Cest le tour de {}"
past-turn-of: "C'est au tour de {}"
won: "{} a gagné"
black: "黒"
white: "白"
total: "合計"
this-turn: "{}ターン目"
widgets:
analog-clock: "Horloge analogique"
profile: "Profil"
calendar: "Calendrier"
timemachine: "カレンダー(タイムマシン)"
timemachine: "Calendrier (Machine de temps)"
activity: "Activité"
rss: "Lecteur de flux RSS"
memo: "Pense-bête"
@@ -85,7 +108,7 @@ common:
widgets: "Widgets"
home: "Accueil"
local: "Local"
hybrid: "ソーシャル"
hybrid: "Social"
global: "Global"
notifications: "Notifications"
list: "Liste"
@@ -98,6 +121,42 @@ common:
rename: "Renommer"
stack-left: "Vers la gauche"
pop-right: "Vers la droite"
common/views/components/games/reversi/reversi.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
rule: "遊び方"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "招待"
mode-invite-desc: "指定したユーザーと対戦するモードです。"
invitations: "対局の招待があります!"
my-games: "自分の対局"
all-games: "みんなの対局"
enter-username: "ユーザー名を入力してください"
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
cancel: "キャンセル"
ready: "準備完了"
cancel-ready: "準備続行"
common/views/components/connect-failed.vue:
title: "Impossible de se connecter au server."
description: "Il y a soit un problème avec votre connexion internet, soit le serveur est hors-ligne ou en maintenance. Veuillez {ressayer} plus tard."
@@ -217,8 +276,8 @@ common/views/components/visibility-chooser.vue:
public: "Public"
home: "Accueil"
home-desc: "Publier sur le fil d'Accueil uniquement"
followers: "Abonnés"
followers-desc: "Publier à vos abonnés uniquement"
followers: "Abonné·e·s"
followers-desc: "Publier à vos abonné·e·s uniquement"
specified: "Direct"
specified-desc: "Publier aux utilisateurs mentionnés"
private: "Privé"
@@ -227,6 +286,13 @@ common/views/widgets/broadcast.vue:
no-broadcasts: "No broadcasts"
have-a-nice-day: "Passez une bonne journée!"
next: "Suivant"
common/views/widgets/calendar.vue:
year: "{}年"
month: "{}月"
day: "{}日"
today: "今日:"
this-month: "今月:"
this-year: "今年:"
common/views/widgets/donation.vue:
title: "Dons"
text: "Toutes les depences pour couvrir les frais de Misskey sortent directement de notre poche. Nous ne recevons pas d'argent, si vous pouvez nous faire dons d'argent, on vous serait eternellement reconnaissant. Si vous êtes intéressés veuilles contacter {}. Merci pour votre contribution!"
@@ -247,6 +313,31 @@ common/views/widgets/memo.vue:
title: "Pense-bête"
memo: "Écrivez ici !"
save: "Enregistrer"
common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
folder: "クリックしてフォルダを指定してください"
no-image: "このフォルダには画像がありません"
common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます"
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
tips-line8: "ホームは設定からカスタマイズできます"
tips-line9: "MisskeyはAGPLv3です"
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
tips-line21: "APIを利用してbotの開発なども行えます"
tips-line23: "まゆかわいいよまゆ"
tips-line24: "Misskeyは2014年にサービスを開始しました"
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
common/views/pages/follow.vue:
signed-in-as: "Connecté en tant que {}"
following: "Suit"
@@ -288,6 +379,8 @@ desktop/views/components/drive.file.vue:
banner: "Bannière"
contextmenu:
rename: "Renommer"
mark-as-sensitive: "Marquer comme sensible"
unmark-as-sensitive: "Ne pas marquer comme sensible"
copy-url: "Copier l'URL"
download: "Télécharger"
else-files: "Autres..."
@@ -331,15 +424,21 @@ desktop/views/components/drive.vue:
create-folder: "Créer un dossier"
upload: "Uploader un fichier"
url-upload: "Uploader d'un URL"
desktop/views/components/media-image.vue:
sensitive: "Le contenu est NSFW"
click-to-show: "Cliquer pour afficher"
desktop/views/components/media-video.vue:
sensitive: "Le contenu est NSFW"
click-to-show: "Cliquer pour afficher"
desktop/views/components/follow-button.vue:
following: "Abonnements"
follow: "Suivre"
request-pending: "En attente d'approbation"
follow-request: "Demande d'abonnement"
desktop/views/components/followers-window.vue:
followers: "{} abonnés"
followers: "{} abonné·e·s"
desktop/views/components/followers.vue:
empty: "Il semble que vous n'avez pas encore d'abonnés."
empty: "Il semble que vous n'avez pas encore d'abonné·e·s."
desktop/views/components/following-window.vue:
following: "Suit {}"
desktop/views/components/following.vue:
@@ -382,11 +481,14 @@ desktop/views/components/notes.note.vue:
desktop/views/components/notes.vue:
error: "Échec du chargement."
retry: "Réessayer"
load-more: "もっと読み込む"
load-more: "Afficher plus"
desktop/views/components/notifications.vue:
more: "Plus"
empty: "Pas de notifications"
desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加"
attach-location-information: "位置情報を添付する"
hide-contents: "内容を隠す"
reply-placeholder: "Répondre à cette note"
quote-placeholder: "Citer cette note"
submit: "Poster"
@@ -405,6 +507,12 @@ desktop/views/components/post-form.vue:
insert-a-kao: "v('ω')v"
create-poll: "Créer un sondage"
text-remain: "{} charactères restants"
recent-tags: "Récent"
click-to-tagging: "クリックでタグ付け"
visibility: "公開範囲"
geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー"
enter-username: "ユーザー名を入力してください"
desktop/views/components/post-form-window.vue:
note: "Nouvelle note"
reply: "Répondre"
@@ -445,8 +553,8 @@ desktop/views/components/settings.vue:
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
display: "Affichage et design"
customize: "Personnaliser l'Accueil"
choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除"
choose-wallpaper: "Sélectionner un fond d'écran"
delete-wallpaper: "Supprimer le fond d'écran"
dark-mode: "Mode nuit"
circle-icons: "Utiliser des icônes circulaires"
gradient-window-header: "Utiliser les dégradés sur la barre de titre de la fenêtre"
@@ -474,7 +582,7 @@ desktop/views/components/settings.vue:
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
cache-cleared: "Cache nettoyé"
cache-cleared-desc: "Veuillez recharger la page."
auto-watch: "投稿の自動ウォッチ"
auto-watch: "Montre automatique"
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
about: "À propose de Misskey"
operator: "L'admin de cette instance"
@@ -525,6 +633,9 @@ desktop/views/components/settings.api.vue:
enter-password: "Veuillez entrer le mot de passe"
desktop/views/components/settings.apps.vue:
no-apps: "Aucune application autorisée"
desktop/views/components/settings.drive.vue:
max: "中"
in-use: "使用中"
desktop/views/components/settings.mute.vue:
no-users: "Aucun utilisateurs mis en sourdine"
desktop/views/components/settings.password.vue:
@@ -542,11 +653,12 @@ desktop/views/components/settings.profile.vue:
description: "Description"
birthday: "Date de naissance"
save: "Mettre à jour le profil"
locked-account: "アカウントの保護"
is-locked: "投稿を非公開にする"
other: "その他"
locked-account: "Protéger votre compte"
is-locked: "Rendre la note privée"
other: "Autre"
is-bot: "Ce compte est un Bot"
is-cat: "Ce compte est un Chat"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue:
private: "cette publication est privée"
deleted: "cette publication a été supprimée"
@@ -557,7 +669,7 @@ desktop/views/components/taskmanager.vue:
desktop/views/components/timeline.vue:
home: "Accueil"
local: "Local"
hybrid: "ソーシャル"
hybrid: "Social"
global: "Global"
list: "Listes"
desktop/views/components/ui.header.vue:
@@ -568,7 +680,7 @@ desktop/views/components/ui.header.account.vue:
favorites: "Favorites"
lists: "Listes"
follow-requests: "Demandes de suivi"
customize: "ホームのカスタマイズ"
customize: "Personnaliser l'Accueil"
settings: "Réglages"
signout: "Déconnexion"
dark: "Fall in dark"
@@ -593,7 +705,7 @@ desktop/views/components/user-lists-window.vue:
desktop/views/components/user-preview.vue:
notes: "Publications"
following: "Abonné à"
followers: "Abonnés"
followers: "Abonné·e·s"
desktop/views/components/users-list.vue:
all: "Tout"
iknow: "Vous connaissez"
@@ -607,7 +719,7 @@ desktop/views/components/window.vue:
desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "Les publications médias uniquement"
is-media-view: "Vue média"
edit: "オプション"
edit: "Options"
desktop/views/pages/deck/deck.note.vue:
reposted-by: "Reposté par {}"
private: "cette publication est privée"
@@ -620,6 +732,7 @@ desktop/views/pages/welcome.vue:
signin-button: "Se connecter"
signup-button: "S'inscrire"
timeline: "Fil d'actualité"
powered-by-misskey: "Powered by <b>Misskey</b>."
desktop/views/pages/drive.vue:
title: "Lecteur de Misskey"
desktop/views/pages/favorites.vue:
@@ -634,12 +747,20 @@ desktop/views/pages/selectdrive.vue:
ok: "OK"
cancel: "Annuler"
upload: "Uploader un ou plusieurs fichier(s) depuis votre PC"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
users: "Utilisateurs"
add-user: "Ajouter un utilisateur"
username: "Nom d'utilisateur"
desktop/views/pages/user/user.followers-you-know.vue:
title: "Abonnés que vous connaissez"
title: "Abonné·e·s que vous connaissez"
loading: "Chargement en cours"
no-users: "Pas d'utilisateurs"
desktop/views/pages/user/user.friends.vue:
@@ -665,9 +786,9 @@ desktop/views/pages/user/user.profile.vue:
muted: "Muting"
unmute: "Enlever la sourdine"
desktop/views/pages/user/user.header.vue:
posts: "投稿"
posts: "Notes"
following: "Suit"
followers: "Abonnés"
followers: "Abonné·e·s"
is-bot: "Ce compte est un Bot"
desktop/views/pages/user/user.timeline.vue:
default: "Publications"
@@ -725,6 +846,12 @@ mobile/views/components/drive.file-detail.vue:
move: "Déplacer"
hash: "Hash (md5)"
exif: "EXIF"
mobile/views/components/media-image.vue:
sensitive: "Le contenu est NSFW"
click-to-show: "Cliquer pour afficher"
mobile/views/components/media-video.vue:
sensitive: "Le contenu est NSFW"
click-to-show: "Cliquer pour afficher"
mobile/views/components/follow-button.vue:
following: "Abonnements"
follow: "Suivre"
@@ -783,6 +910,8 @@ mobile/views/components/sub-note-content.vue:
mobile/views/components/timeline.vue:
empty: "Pas de notes"
load-more: "Afficher plus"
mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、"
mobile/views/components/ui.nav.vue:
timeline: "Fil d'actualité"
notifications: "Notifications"
@@ -813,15 +942,25 @@ mobile/views/pages/user-lists.vue:
mobile/views/pages/drive.vue:
drive: "Drive"
more: "Afficher plus ..."
mobile/views/pages/signup.vue:
lets-start: "📦 始めましょう"
mobile/views/pages/followers.vue:
followers-of: "Abonnés de {}"
followers-of: "Abonné·e·s de {}"
mobile/views/pages/following.vue:
following-of: "Abonnements de {}"
mobile/views/pages/home.vue:
home: "Accueil"
local: "Local"
hybrid: "ソーシャル"
hybrid: "Social"
global: "Global"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/messaging.vue:
messaging: "Messagerie"
mobile/views/pages/messaging-room.vue:
@@ -837,6 +976,8 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "Notifications"
read-all: "Êtes vous sûr de vouloir marqués toutes les notifications non-lus en tant que lus?"
mobile/views/pages/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "Profil"
name: "Nom"
@@ -897,8 +1038,8 @@ mobile/views/pages/settings.vue:
mobile/views/pages/user.vue:
follows-you: "vous suit"
following: "Abonnements"
followers: "Abonnés"
notes: "Posts"
followers: "Abonné·e·s"
notes: "Notes"
overview: "Aperçu"
timeline: "Fil d'actualité"
media: "Media"
@@ -912,7 +1053,7 @@ mobile/views/pages/user/home.vue:
keywords: "Mot clés"
domains: "Domaines"
frequently-replied-users: "Utilisateurs qui interagissent souvent"
followers-you-know: "Abonnés que vous connaissez"
followers-you-know: "Abonné·e·s que vous connaissez"
last-used-at: "Dernière connexion il y a"
mobile/views/pages/user/home.followers-you-know.vue:
loading: "Chargement"
@@ -934,7 +1075,7 @@ docs:
properties: "Propriétés"
endpoints:
params: "Paramètres"
no-params: "パラメータはありません"
no-params: "Aucun paramètre"
res: "Réponse"
require-credential: "このエンドポイントは認証情報が必須です。"
require-permission: "このエンドポイントは{permission}の権限を必要とします。"
@@ -942,7 +1083,7 @@ docs:
duration-limit: "直近{duration}ミリ秒の間のこのエンドポイントへのリクエスト数の合計が{max}を超える場合はリクエストできません。"
min-interval-limit: "前回のリクエストから{interval}ミリ秒経っていない場合はリクエストできません。"
show-src: "このエンドポイントのソースコードも閲覧できます。"
show-src-link: "コードをGitHubで見る"
show-src-link: "Consulter le code sur GitHub"
generated: "このドキュメントはAPI定義に基づき自動生成されています。"
props:
name: "Nom"

View File

@@ -19,7 +19,7 @@ const langs = {
'es': loadLang('es')
};
Object.entries(langs).map(([, locale]) => {
Object.values(langs).forEach(locale => {
// Extend native language (Japanese)
locale = Object.assign({}, native, locale);
});

View File

@@ -6,6 +6,14 @@ common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
name: "Misskey"
time:
unknown: "なぞのじかん"
future: "未来"
@@ -17,6 +25,7 @@ common:
weeks_ago: "{}週間前"
months_ago: "{}ヶ月前"
years_ago: "{}年前"
trash: "ゴミ箱"
weekday-short:
sunday: "日"
monday: "月"
@@ -25,6 +34,14 @@ common:
thursday: "木"
friday: "金"
saturday: "土"
weekday:
sunday: "日曜日"
monday: "月曜日"
tuesday: "火曜日"
wednesday: "水曜日"
thursday: "木曜日"
friday: "金曜日"
saturday: "土曜日"
reactions:
like: "いいね"
love: "しゅき"
@@ -51,12 +68,18 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
reversi:
drawn: "引き分け"
my-turn: "あなたのターンです"
opponent-turn: "相手のターンです"
turn-of: "{}のターンです"
past-turn-of: "{}のターン"
won: "{}の勝ち"
black: "黒"
white: "白"
total: "合計"
this-turn: "{}ターン目"
widgets:
analog-clock: "アナログ時計"
profile: "プロフィール"
@@ -98,6 +121,42 @@ common:
rename: "名前を変更"
stack-left: "左に重ねる"
pop-right: "右に出す"
common/views/components/games/reversi/reversi.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
rule: "遊び方"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "招待"
mode-invite-desc: "指定したユーザーと対戦するモードです。"
invitations: "対局の招待があります!"
my-games: "自分の対局"
all-games: "みんなの対局"
enter-username: "ユーザー名を入力してください"
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
cancel: "キャンセル"
ready: "準備完了"
cancel-ready: "準備続行"
common/views/components/connect-failed.vue:
title: "サーバーに接続できません"
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
@@ -227,6 +286,13 @@ common/views/widgets/broadcast.vue:
no-broadcasts: "お知らせはありません"
have-a-nice-day: "良い一日を!"
next: "次"
common/views/widgets/calendar.vue:
year: "{}年"
month: "{}月"
day: "{}日"
today: "今日:"
this-month: "今月:"
this-year: "今年:"
common/views/widgets/donation.vue:
title: "寄付のお願い"
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
@@ -247,6 +313,31 @@ common/views/widgets/memo.vue:
title: "付箋"
memo: "ここに書いて!"
save: "保存"
common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
folder: "クリックしてフォルダを指定してください"
no-image: "このフォルダには画像がありません"
common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます"
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
tips-line8: "ホームは設定からカスタマイズできます"
tips-line9: "MisskeyはAGPLv3です"
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
tips-line21: "APIを利用してbotの開発なども行えます"
tips-line23: "まゆかわいいよまゆ"
tips-line24: "Misskeyは2014年にサービスを開始しました"
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
common/views/pages/follow.vue:
signed-in-as: "{}としてサインイン中"
following: "フォロー中"
@@ -288,6 +379,8 @@ desktop/views/components/drive.file.vue:
banner: "バナー"
contextmenu:
rename: "名前を変更"
mark-as-sensitive: "閲覧注意に設定"
unmark-as-sensitive: "閲覧注意を解除"
copy-url: "URLをコピー"
download: "ダウンロード"
else-files: "その他..."
@@ -331,6 +424,12 @@ desktop/views/components/drive.vue:
create-folder: "フォルダーを作成"
upload: "ファイルをアップロード"
url-upload: "URLからアップロード"
desktop/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
@@ -387,6 +486,9 @@ desktop/views/components/notifications.vue:
more: "もっと見る"
empty: "ありません!"
desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加"
attach-location-information: "位置情報を添付する"
hide-contents: "内容を隠す"
reply-placeholder: "この投稿への返信..."
quote-placeholder: "この投稿を引用..."
submit: "投稿"
@@ -405,6 +507,12 @@ desktop/views/components/post-form.vue:
insert-a-kao: "v('ω')v"
create-poll: "アンケートを作成"
text-remain: "残り{}文字"
recent-tags: "最近"
click-to-tagging: "クリックでタグ付け"
visibility: "公開範囲"
geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー"
enter-username: "ユーザー名を入力してください"
desktop/views/components/post-form-window.vue:
note: "新規投稿"
reply: "返信"
@@ -525,6 +633,9 @@ desktop/views/components/settings.api.vue:
enter-password: "パスワードを入力してください"
desktop/views/components/settings.apps.vue:
no-apps: "連携しているアプリケーションはありません"
desktop/views/components/settings.drive.vue:
max: "中"
in-use: "使用中"
desktop/views/components/settings.mute.vue:
no-users: "ミュートしているユーザーはいません"
desktop/views/components/settings.password.vue:
@@ -547,6 +658,7 @@ desktop/views/components/settings.profile.vue:
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
@@ -620,6 +732,7 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
powered-by-misskey: "Powered by <b>Misskey</b>."
desktop/views/pages/drive.vue:
title: "Misskey Drive"
desktop/views/pages/favorites.vue:
@@ -634,6 +747,14 @@ desktop/views/pages/selectdrive.vue:
ok: "決定"
cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
users: "ユーザー"
add-user: "ユーザーを追加"
@@ -725,6 +846,12 @@ mobile/views/components/drive.file-detail.vue:
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
@@ -783,6 +910,8 @@ mobile/views/components/sub-note-content.vue:
mobile/views/components/timeline.vue:
empty: "投稿がありません"
load-more: "もっと"
mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、"
mobile/views/components/ui.nav.vue:
timeline: "タイムライン"
notifications: "通知"
@@ -813,6 +942,8 @@ mobile/views/pages/user-lists.vue:
mobile/views/pages/drive.vue:
drive: "ドライブ"
more: "もっと見る"
mobile/views/pages/signup.vue:
lets-start: "📦 始めましょう"
mobile/views/pages/followers.vue:
followers-of: "{}のフォロワー"
mobile/views/pages/following.vue:
@@ -822,6 +953,14 @@ mobile/views/pages/home.vue:
local: "ローカル"
hybrid: "ソーシャル"
global: "グローバル"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
@@ -837,6 +976,8 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"

View File

@@ -6,7 +6,14 @@ common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
name: "Misskey"
time:
unknown: "なぞのじかん"
future: "未来"
@@ -19,6 +26,8 @@ common:
months_ago: "{}ヶ月前"
years_ago: "{}年前"
trash: "ゴミ箱"
weekday-short:
sunday: "日"
monday: "月"
@@ -28,6 +37,15 @@ common:
friday: "金"
saturday: "土"
weekday:
sunday: "日曜日"
monday: "月曜日"
tuesday: "火曜日"
wednesday: "水曜日"
thursday: "木曜日"
friday: "金曜日"
saturday: "土曜日"
reactions:
like: "いいね"
love: "しゅき"
@@ -56,6 +74,7 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
reversi:
drawn: "引き分け"
@@ -63,6 +82,11 @@ common:
opponent-turn: "相手のターンです"
turn-of: "{}のターンです"
past-turn-of: "{}のターン"
won: "{}の勝ち"
black: "黒"
white: "白"
total: "合計"
this-turn: "{}ターン目"
widgets:
analog-clock: "アナログ時計"
@@ -107,6 +131,44 @@ common:
stack-left: "左に重ねる"
pop-right: "右に出す"
common/views/components/games/reversi/reversi.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
rule: "遊び方"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "招待"
mode-invite-desc: "指定したユーザーと対戦するモードです。"
invitations: "対局の招待があります!"
my-games: "自分の対局"
all-games: "みんなの対局"
enter-username: "ユーザー名を入力してください"
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
cancel: "キャンセル"
ready: "準備完了"
cancel-ready: "準備続行"
common/views/components/connect-failed.vue:
title: "サーバーに接続できません"
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
@@ -255,6 +317,14 @@ common/views/widgets/broadcast.vue:
have-a-nice-day: "良い一日を!"
next: "次"
common/views/widgets/calendar.vue:
year: "{}年"
month: "{}月"
day: "{}日"
today: "今日:"
this-month: "今月:"
this-year: "今年:"
common/views/widgets/donation.vue:
title: "寄付のお願い"
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
@@ -281,6 +351,33 @@ common/views/widgets/memo.vue:
memo: "ここに書いて!"
save: "保存"
common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
folder: "クリックしてフォルダを指定してください"
no-image: "このフォルダには画像がありません"
common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます"
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
tips-line8: "ホームは設定からカスタマイズできます"
tips-line9: "MisskeyはAGPLv3です"
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
tips-line21: "APIを利用してbotの開発なども行えます"
tips-line23: "まゆかわいいよまゆ"
tips-line24: "Misskeyは2014年にサービスを開始しました"
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
common/views/pages/follow.vue:
signed-in-as: "{}としてサインイン中"
following: "フォロー中"
@@ -330,6 +427,8 @@ desktop/views/components/drive.file.vue:
banner: "バナー"
contextmenu:
rename: "名前を変更"
mark-as-sensitive: "閲覧注意に設定"
unmark-as-sensitive: "閲覧注意を解除"
copy-url: "URLをコピー"
download: "ダウンロード"
else-files: "その他..."
@@ -377,6 +476,14 @@ desktop/views/components/drive.vue:
upload: "ファイルをアップロード"
url-upload: "URLからアップロード"
desktop/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
@@ -448,6 +555,9 @@ desktop/views/components/notifications.vue:
empty: "ありません!"
desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加"
attach-location-information: "位置情報を添付する"
hide-contents: "内容を隠す"
reply-placeholder: "この投稿への返信..."
quote-placeholder: "この投稿を引用..."
submit: "投稿"
@@ -466,6 +576,12 @@ desktop/views/components/post-form.vue:
insert-a-kao: "v('ω')v"
create-poll: "アンケートを作成"
text-remain: "残り{}文字"
recent-tags: "最近"
click-to-tagging: "クリックでタグ付け"
visibility: "公開範囲"
geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー"
enter-username: "ユーザー名を入力してください"
desktop/views/components/post-form-window.vue:
note: "新規投稿"
@@ -606,6 +722,10 @@ desktop/views/components/settings.api.vue:
desktop/views/components/settings.apps.vue:
no-apps: "連携しているアプリケーションはありません"
desktop/views/components/settings.drive.vue:
max: "中"
in-use: "使用中"
desktop/views/components/settings.mute.vue:
no-users: "ミュートしているユーザーはいません"
@@ -630,6 +750,7 @@ desktop/views/components/settings.profile.vue:
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です"
@@ -681,6 +802,8 @@ desktop/views/components/received-follow-requests-window.vue:
accept: "承認"
reject: "拒否"
desktop/views/components/user-lists-window.vue:
title: "リスト"
create-list: "リストを作成"
@@ -721,6 +844,7 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
powered-by-misskey: "Powered by <b>Misskey</b>."
desktop/views/pages/drive.vue:
title: "Misskey Drive"
@@ -741,6 +865,17 @@ desktop/views/pages/selectdrive.vue:
cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
users: "ユーザー"
add-user: "ユーザーを追加"
@@ -853,6 +988,14 @@ mobile/views/components/drive.file-detail.vue:
hash: "ハッシュ (md5)"
exif: "EXIF"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
@@ -922,6 +1065,9 @@ mobile/views/components/timeline.vue:
empty: "投稿がありません"
load-more: "もっと"
mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、"
mobile/views/components/ui.nav.vue:
timeline: "タイムライン"
notifications: "通知"
@@ -958,6 +1104,9 @@ mobile/views/pages/drive.vue:
drive: "ドライブ"
more: "もっと見る"
mobile/views/pages/signup.vue:
lets-start: "📦 始めましょう"
mobile/views/pages/followers.vue:
followers-of: "{}のフォロワー"
@@ -970,6 +1119,18 @@ mobile/views/pages/home.vue:
hybrid: "ソーシャル"
global: "グローバル"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
@@ -990,6 +1151,9 @@ mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"

View File

@@ -6,6 +6,14 @@ common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
name: "Misskey"
time:
unknown: "なぞのじかん"
future: "未来"
@@ -17,6 +25,7 @@ common:
weeks_ago: "{}週間前"
months_ago: "{}ヶ月前"
years_ago: "{}年前"
trash: "ゴミ箱"
weekday-short:
sunday: "日"
monday: "月"
@@ -25,6 +34,14 @@ common:
thursday: "木"
friday: "金"
saturday: "土"
weekday:
sunday: "日曜日"
monday: "月曜日"
tuesday: "火曜日"
wednesday: "水曜日"
thursday: "木曜日"
friday: "金曜日"
saturday: "土曜日"
reactions:
like: "いいね"
love: "しゅき"
@@ -51,12 +68,18 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
reversi:
drawn: "引き分け"
my-turn: "あなたのターンです"
opponent-turn: "相手のターンです"
turn-of: "{}のターンです"
past-turn-of: "{}のターン"
won: "{}の勝ち"
black: "黒"
white: "白"
total: "合計"
this-turn: "{}ターン目"
widgets:
analog-clock: "アナログ時計"
profile: "プロフィール"
@@ -98,6 +121,42 @@ common:
rename: "名前を変更"
stack-left: "左に重ねる"
pop-right: "右に出す"
common/views/components/games/reversi/reversi.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
rule: "遊び方"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "招待"
mode-invite-desc: "指定したユーザーと対戦するモードです。"
invitations: "対局の招待があります!"
my-games: "自分の対局"
all-games: "みんなの対局"
enter-username: "ユーザー名を入力してください"
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
cancel: "キャンセル"
ready: "準備完了"
cancel-ready: "準備続行"
common/views/components/connect-failed.vue:
title: "サーバーに接続できません"
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
@@ -227,6 +286,13 @@ common/views/widgets/broadcast.vue:
no-broadcasts: "お知らせはありません"
have-a-nice-day: "良い一日を!"
next: "次"
common/views/widgets/calendar.vue:
year: "{}年"
month: "{}月"
day: "{}日"
today: "今日:"
this-month: "今月:"
this-year: "今年:"
common/views/widgets/donation.vue:
title: "寄付のお願い"
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
@@ -247,6 +313,31 @@ common/views/widgets/memo.vue:
title: "付箋"
memo: "ここに書いて!"
save: "保存"
common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
folder: "クリックしてフォルダを指定してください"
no-image: "このフォルダには画像がありません"
common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます"
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
tips-line8: "ホームは設定からカスタマイズできます"
tips-line9: "MisskeyはAGPLv3です"
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
tips-line21: "APIを利用してbotの開発なども行えます"
tips-line23: "まゆかわいいよまゆ"
tips-line24: "Misskeyは2014年にサービスを開始しました"
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
common/views/pages/follow.vue:
signed-in-as: "{}としてサインイン中"
following: "フォロー中"
@@ -288,6 +379,8 @@ desktop/views/components/drive.file.vue:
banner: "バナー"
contextmenu:
rename: "名前を変更"
mark-as-sensitive: "閲覧注意に設定"
unmark-as-sensitive: "閲覧注意を解除"
copy-url: "URLをコピー"
download: "ダウンロード"
else-files: "その他..."
@@ -331,6 +424,12 @@ desktop/views/components/drive.vue:
create-folder: "フォルダーを作成"
upload: "ファイルをアップロード"
url-upload: "URLからアップロード"
desktop/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
@@ -387,6 +486,9 @@ desktop/views/components/notifications.vue:
more: "もっと見る"
empty: "ありません!"
desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加"
attach-location-information: "位置情報を添付する"
hide-contents: "内容を隠す"
reply-placeholder: "この投稿への返信..."
quote-placeholder: "この投稿を引用..."
submit: "投稿"
@@ -405,6 +507,12 @@ desktop/views/components/post-form.vue:
insert-a-kao: "v('ω')v"
create-poll: "アンケートを作成"
text-remain: "残り{}文字"
recent-tags: "最近"
click-to-tagging: "クリックでタグ付け"
visibility: "公開範囲"
geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー"
enter-username: "ユーザー名を入力してください"
desktop/views/components/post-form-window.vue:
note: "新規投稿"
reply: "返信"
@@ -525,6 +633,9 @@ desktop/views/components/settings.api.vue:
enter-password: "パスワードを入力してください"
desktop/views/components/settings.apps.vue:
no-apps: "連携しているアプリケーションはありません"
desktop/views/components/settings.drive.vue:
max: "中"
in-use: "使用中"
desktop/views/components/settings.mute.vue:
no-users: "ミュートしているユーザーはいません"
desktop/views/components/settings.password.vue:
@@ -547,6 +658,7 @@ desktop/views/components/settings.profile.vue:
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
@@ -620,6 +732,7 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
powered-by-misskey: "Powered by <b>Misskey</b>."
desktop/views/pages/drive.vue:
title: "Misskey Drive"
desktop/views/pages/favorites.vue:
@@ -634,6 +747,14 @@ desktop/views/pages/selectdrive.vue:
ok: "決定"
cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
users: "ユーザー"
add-user: "ユーザーを追加"
@@ -725,6 +846,12 @@ mobile/views/components/drive.file-detail.vue:
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
@@ -783,6 +910,8 @@ mobile/views/components/sub-note-content.vue:
mobile/views/components/timeline.vue:
empty: "投稿がありません"
load-more: "もっと"
mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、"
mobile/views/components/ui.nav.vue:
timeline: "タイムライン"
notifications: "通知"
@@ -813,6 +942,8 @@ mobile/views/pages/user-lists.vue:
mobile/views/pages/drive.vue:
drive: "ドライブ"
more: "もっと見る"
mobile/views/pages/signup.vue:
lets-start: "📦 始めましょう"
mobile/views/pages/followers.vue:
followers-of: "{}のフォロワー"
mobile/views/pages/following.vue:
@@ -822,6 +953,14 @@ mobile/views/pages/home.vue:
local: "ローカル"
hybrid: "ソーシャル"
global: "グローバル"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
@@ -837,6 +976,8 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"

View File

@@ -6,6 +6,14 @@ common:
misskey: "⭐ 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?"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
name: "Misskey"
time:
unknown: "nieznany"
future: "w przyszłości"
@@ -17,6 +25,7 @@ common:
weeks_ago: "{} tyg. temu"
months_ago: "{} mies. temu"
years_ago: "{} lat temu"
trash: "ゴミ箱"
weekday-short:
sunday: "N"
monday: "Pn"
@@ -25,6 +34,14 @@ common:
thursday: "C"
friday: "P"
saturday: "S"
weekday:
sunday: "日曜日"
monday: "月曜日"
tuesday: "火曜日"
wednesday: "水曜日"
thursday: "木曜日"
friday: "金曜日"
saturday: "土曜日"
reactions:
like: "Lubię"
love: "Kocham"
@@ -51,12 +68,18 @@ common:
my-token-regenerated: "Twój token został wygenerowany. Zostaniesz wylogowany."
i-like-sushi: "Wolę sushi od puddingu"
show-reversi-board-labels: "Pokazuj podpisy wierszy i kolumn w Reversi"
verified-user: "Zweryfikowany użytkownik"
reversi:
drawn: "Remis"
my-turn: "Twoja kolej"
opponent-turn: "Kolej na przeciwnika"
turn-of: "Kolej na {}"
past-turn-of: "Kolej {}"
won: "{}の勝ち"
black: "黒"
white: "白"
total: "合計"
this-turn: "{}ターン目"
widgets:
analog-clock: "Zegar analogowy"
profile: "Profil"
@@ -98,6 +121,42 @@ common:
rename: "Zmień nazwę"
stack-left: "Przypnij do lewej"
pop-right: "Odepnij w prawo"
common/views/components/games/reversi/reversi.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
rule: "遊び方"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "招待"
mode-invite-desc: "指定したユーザーと対戦するモードです。"
invitations: "対局の招待があります!"
my-games: "自分の対局"
all-games: "みんなの対局"
enter-username: "ユーザー名を入力してください"
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
cancel: "キャンセル"
ready: "準備完了"
cancel-ready: "準備続行"
common/views/components/connect-failed.vue:
title: "Nie udało się połączyć z serwerem"
description: "Wystąpił problem z Twoim połączeniem z Internetem, lub z serwerem. {Spróbuj ponownie} wkrótce."
@@ -227,6 +286,13 @@ common/views/widgets/broadcast.vue:
no-broadcasts: "Brak transmisji"
have-a-nice-day: "Miłego dnia!"
next: "Dalej"
common/views/widgets/calendar.vue:
year: "{}年"
month: "{}月"
day: "{}日"
today: "今日:"
this-month: "今月:"
this-year: "今年:"
common/views/widgets/donation.vue:
title: "Dotacje"
text: "Aby utrzymywać Misskey, płacimy za domenę, serwery i nie tylko… Nie zarabiamy na tym, więc byłoby nam miło, gdybyśmy uzyskali od Ciebie dotację. Jeżeli jesteś zainteresowany, skontaktuj się z {}. Dziękujemy za wsparcie!"
@@ -247,6 +313,31 @@ common/views/widgets/memo.vue:
title: "Notatka"
memo: "Napisz tutaj!"
save: "Zapisz"
common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
folder: "クリックしてフォルダを指定してください"
no-image: "このフォルダには画像がありません"
common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます"
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
tips-line8: "ホームは設定からカスタマイズできます"
tips-line9: "MisskeyはAGPLv3です"
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
tips-line21: "APIを利用してbotの開発なども行えます"
tips-line23: "まゆかわいいよまゆ"
tips-line24: "Misskeyは2014年にサービスを開始しました"
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
common/views/pages/follow.vue:
signed-in-as: "Zalogowany jako {}"
following: "Śledzisz"
@@ -288,6 +379,8 @@ desktop/views/components/drive.file.vue:
banner: "Baner"
contextmenu:
rename: "Zmień nazwę"
mark-as-sensitive: "Oznacz jako zawartość wrażliwą"
unmark-as-sensitive: "Cofnij oznaczenie jako zawartość wrażliwą"
copy-url: "Skopiuj adres"
download: "Pobierz"
else-files: "Inne"
@@ -331,6 +424,12 @@ desktop/views/components/drive.vue:
create-folder: "Utwórz katalog"
upload: "Wyślij plik"
url-upload: "Wyślij z adresu URL"
desktop/views/components/media-image.vue:
sensitive: "To jest zawartość NSFW"
click-to-show: "Naciśnij aby wyświetlić"
desktop/views/components/media-video.vue:
sensitive: "To jest zawartość NSFW"
click-to-show: "Naciśnij aby wyświetlić"
desktop/views/components/follow-button.vue:
following: "Śledzisz"
follow: "Śledź"
@@ -387,6 +486,9 @@ desktop/views/components/notifications.vue:
more: "Więcej"
empty: "Brak powiadomień"
desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加"
attach-location-information: "位置情報を添付する"
hide-contents: "内容を隠す"
reply-placeholder: "Odpowiedz na ten wpis…"
quote-placeholder: "Zacytuj ten wpis…"
submit: "Wyślij"
@@ -405,6 +507,12 @@ desktop/views/components/post-form.vue:
insert-a-kao: "v('ω')v"
create-poll: "Utwórz ankietę"
text-remain: "pozostałe znaki: {}"
recent-tags: "Ostatnie"
click-to-tagging: "Naciśnij aby oznaczyć"
visibility: "公開範囲"
geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー"
enter-username: "ユーザー名を入力してください"
desktop/views/components/post-form-window.vue:
note: "Nowy wpis"
reply: "Odpowiedz"
@@ -525,6 +633,9 @@ desktop/views/components/settings.api.vue:
enter-password: "Wprowadź hasło"
desktop/views/components/settings.apps.vue:
no-apps: "Brak zautoryzowanych aplikacji"
desktop/views/components/settings.drive.vue:
max: "中"
in-use: "使用中"
desktop/views/components/settings.mute.vue:
no-users: "Brak wyciszonych użytkowników"
desktop/views/components/settings.password.vue:
@@ -547,6 +658,7 @@ desktop/views/components/settings.profile.vue:
other: "Inne"
is-bot: "To konto jest prowadzone przez bota"
is-cat: "To konto jest prowadzone przez kota"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue:
private: "ten wpis jest prywatny"
deleted: "ten wpis został usunięty"
@@ -620,6 +732,7 @@ desktop/views/pages/welcome.vue:
signin-button: "Zaloguj się"
signup-button: "Zarejestruj się"
timeline: "Oś czasu"
powered-by-misskey: "Powered by <b>Misskey</b>."
desktop/views/pages/drive.vue:
title: "Dysk Misskey"
desktop/views/pages/favorites.vue:
@@ -634,6 +747,14 @@ desktop/views/pages/selectdrive.vue:
ok: "OK"
cancel: "Anuluj"
upload: "Wyślij pliki z Twojego komputera"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
users: "Użytkownicy"
add-user: "Dodaj użytkownika"
@@ -725,6 +846,12 @@ mobile/views/components/drive.file-detail.vue:
move: "Przenieś"
hash: "Hash (md5)"
exif: "EXIF"
mobile/views/components/media-image.vue:
sensitive: "To jest zawartość NSFW"
click-to-show: "Naciśnij aby wyświetlić"
mobile/views/components/media-video.vue:
sensitive: "To jest zawartość NSFW"
click-to-show: "Naciśnij aby wyświetlić"
mobile/views/components/follow-button.vue:
following: "Śledzisz"
follow: "Śledź"
@@ -783,6 +910,8 @@ mobile/views/components/sub-note-content.vue:
mobile/views/components/timeline.vue:
empty: "Brak wpisów"
load-more: "Więcej"
mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、"
mobile/views/components/ui.nav.vue:
timeline: "Oś czasu"
notifications: "Powiadomienia"
@@ -813,6 +942,8 @@ mobile/views/pages/user-lists.vue:
mobile/views/pages/drive.vue:
drive: "Dysk"
more: "Załaduj więcej"
mobile/views/pages/signup.vue:
lets-start: "📦 始めましょう"
mobile/views/pages/followers.vue:
followers-of: "Śledzący {}"
mobile/views/pages/following.vue:
@@ -822,6 +953,14 @@ mobile/views/pages/home.vue:
local: "Lokalne"
hybrid: "Społeczność"
global: "Globalne"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/messaging.vue:
messaging: "Wiadomości"
mobile/views/pages/messaging-room.vue:
@@ -837,6 +976,8 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "Powiadomienia"
read-all: "Czy na pewno chcesz oznaczyć wszystkie powiadomienia jako przeczytane?"
mobile/views/pages/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "Profil"
name: "Nazwa"
@@ -934,14 +1075,14 @@ docs:
properties: "Właściwości"
endpoints:
params: "Parametry"
no-params: "パラメータはありません"
no-params: "Brak parametrów."
res: "Odpowiedź"
require-credential: "このエンドポイントは認証情報が必須です。"
require-permission: "このエンドポイントは{permission}の権限を必要とします。"
has-limit: "レートリミットがあります。"
require-credential: "Punkt końcowy wymaga informacji o uwierzytelnieniu."
require-permission: "Ten punkt końcowy wymaga uprawnienia {permission}."
has-limit: "Istnieje limit częstotliwości."
duration-limit: "直近{duration}ミリ秒の間のこのエンドポイントへのリクエスト数の合計が{max}を超える場合はリクエストできません。"
min-interval-limit: "前回のリクエストから{interval}ミリ秒経っていない場合はリクエストできません。"
show-src: "このエンドポイントのソースコードも閲覧できます。"
min-interval-limit: "Nie możesz wykonać żądania przed upłynięciem {interval} od ostatniego żądania."
show-src: "Możesz zobaczyć kod źródłowy tego punktu końcowego."
show-src-link: "Zobacz kod na GitHubie"
generated: "このドキュメントはAPI定義に基づき自動生成されています。"
props:

View File

@@ -6,6 +6,14 @@ common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
name: "Misskey"
time:
unknown: "なぞのじかん"
future: "未来"
@@ -17,6 +25,7 @@ common:
weeks_ago: "{}週間前"
months_ago: "{}ヶ月前"
years_ago: "{}年前"
trash: "ゴミ箱"
weekday-short:
sunday: "日"
monday: "月"
@@ -25,6 +34,14 @@ common:
thursday: "木"
friday: "金"
saturday: "土"
weekday:
sunday: "日曜日"
monday: "月曜日"
tuesday: "火曜日"
wednesday: "水曜日"
thursday: "木曜日"
friday: "金曜日"
saturday: "土曜日"
reactions:
like: "いいね"
love: "しゅき"
@@ -51,12 +68,18 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
reversi:
drawn: "引き分け"
my-turn: "あなたのターンです"
opponent-turn: "相手のターンです"
turn-of: "{}のターンです"
past-turn-of: "{}のターン"
won: "{}の勝ち"
black: "黒"
white: "白"
total: "合計"
this-turn: "{}ターン目"
widgets:
analog-clock: "アナログ時計"
profile: "プロフィール"
@@ -98,6 +121,42 @@ common:
rename: "名前を変更"
stack-left: "左に重ねる"
pop-right: "右に出す"
common/views/components/games/reversi/reversi.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
rule: "遊び方"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "招待"
mode-invite-desc: "指定したユーザーと対戦するモードです。"
invitations: "対局の招待があります!"
my-games: "自分の対局"
all-games: "みんなの対局"
enter-username: "ユーザー名を入力してください"
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
cancel: "キャンセル"
ready: "準備完了"
cancel-ready: "準備続行"
common/views/components/connect-failed.vue:
title: "サーバーに接続できません"
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
@@ -227,6 +286,13 @@ common/views/widgets/broadcast.vue:
no-broadcasts: "お知らせはありません"
have-a-nice-day: "良い一日を!"
next: "次"
common/views/widgets/calendar.vue:
year: "{}年"
month: "{}月"
day: "{}日"
today: "今日:"
this-month: "今月:"
this-year: "今年:"
common/views/widgets/donation.vue:
title: "寄付のお願い"
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
@@ -247,6 +313,31 @@ common/views/widgets/memo.vue:
title: "付箋"
memo: "ここに書いて!"
save: "保存"
common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
folder: "クリックしてフォルダを指定してください"
no-image: "このフォルダには画像がありません"
common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます"
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
tips-line8: "ホームは設定からカスタマイズできます"
tips-line9: "MisskeyはAGPLv3です"
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
tips-line21: "APIを利用してbotの開発なども行えます"
tips-line23: "まゆかわいいよまゆ"
tips-line24: "Misskeyは2014年にサービスを開始しました"
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
common/views/pages/follow.vue:
signed-in-as: "{}としてサインイン中"
following: "フォロー中"
@@ -288,6 +379,8 @@ desktop/views/components/drive.file.vue:
banner: "バナー"
contextmenu:
rename: "名前を変更"
mark-as-sensitive: "閲覧注意に設定"
unmark-as-sensitive: "閲覧注意を解除"
copy-url: "URLをコピー"
download: "ダウンロード"
else-files: "その他..."
@@ -331,6 +424,12 @@ desktop/views/components/drive.vue:
create-folder: "フォルダーを作成"
upload: "ファイルをアップロード"
url-upload: "URLからアップロード"
desktop/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
@@ -387,6 +486,9 @@ desktop/views/components/notifications.vue:
more: "もっと見る"
empty: "ありません!"
desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加"
attach-location-information: "位置情報を添付する"
hide-contents: "内容を隠す"
reply-placeholder: "この投稿への返信..."
quote-placeholder: "この投稿を引用..."
submit: "投稿"
@@ -405,6 +507,12 @@ desktop/views/components/post-form.vue:
insert-a-kao: "v('ω')v"
create-poll: "アンケートを作成"
text-remain: "残り{}文字"
recent-tags: "最近"
click-to-tagging: "クリックでタグ付け"
visibility: "公開範囲"
geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー"
enter-username: "ユーザー名を入力してください"
desktop/views/components/post-form-window.vue:
note: "新規投稿"
reply: "返信"
@@ -525,6 +633,9 @@ desktop/views/components/settings.api.vue:
enter-password: "パスワードを入力してください"
desktop/views/components/settings.apps.vue:
no-apps: "連携しているアプリケーションはありません"
desktop/views/components/settings.drive.vue:
max: "中"
in-use: "使用中"
desktop/views/components/settings.mute.vue:
no-users: "ミュートしているユーザーはいません"
desktop/views/components/settings.password.vue:
@@ -547,6 +658,7 @@ desktop/views/components/settings.profile.vue:
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
@@ -620,6 +732,7 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
powered-by-misskey: "Powered by <b>Misskey</b>."
desktop/views/pages/drive.vue:
title: "Misskey Drive"
desktop/views/pages/favorites.vue:
@@ -634,6 +747,14 @@ desktop/views/pages/selectdrive.vue:
ok: "決定"
cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
users: "ユーザー"
add-user: "ユーザーを追加"
@@ -725,6 +846,12 @@ mobile/views/components/drive.file-detail.vue:
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
@@ -783,6 +910,8 @@ mobile/views/components/sub-note-content.vue:
mobile/views/components/timeline.vue:
empty: "投稿がありません"
load-more: "もっと"
mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、"
mobile/views/components/ui.nav.vue:
timeline: "タイムライン"
notifications: "通知"
@@ -813,6 +942,8 @@ mobile/views/pages/user-lists.vue:
mobile/views/pages/drive.vue:
drive: "ドライブ"
more: "もっと見る"
mobile/views/pages/signup.vue:
lets-start: "📦 始めましょう"
mobile/views/pages/followers.vue:
followers-of: "{}のフォロワー"
mobile/views/pages/following.vue:
@@ -822,6 +953,14 @@ mobile/views/pages/home.vue:
local: "ローカル"
hybrid: "ソーシャル"
global: "グローバル"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
@@ -837,6 +976,8 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"

View File

@@ -6,6 +6,14 @@ common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
name: "Misskey"
time:
unknown: "なぞのじかん"
future: "未来"
@@ -17,6 +25,7 @@ common:
weeks_ago: "{}週間前"
months_ago: "{}ヶ月前"
years_ago: "{}年前"
trash: "ゴミ箱"
weekday-short:
sunday: "日"
monday: "月"
@@ -25,6 +34,14 @@ common:
thursday: "木"
friday: "金"
saturday: "土"
weekday:
sunday: "日曜日"
monday: "月曜日"
tuesday: "火曜日"
wednesday: "水曜日"
thursday: "木曜日"
friday: "金曜日"
saturday: "土曜日"
reactions:
like: "いいね"
love: "しゅき"
@@ -51,12 +68,18 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
reversi:
drawn: "引き分け"
my-turn: "あなたのターンです"
opponent-turn: "相手のターンです"
turn-of: "{}のターンです"
past-turn-of: "{}のターン"
won: "{}の勝ち"
black: "黒"
white: "白"
total: "合計"
this-turn: "{}ターン目"
widgets:
analog-clock: "アナログ時計"
profile: "プロフィール"
@@ -98,6 +121,42 @@ common:
rename: "名前を変更"
stack-left: "左に重ねる"
pop-right: "右に出す"
common/views/components/games/reversi/reversi.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
rule: "遊び方"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "招待"
mode-invite-desc: "指定したユーザーと対戦するモードです。"
invitations: "対局の招待があります!"
my-games: "自分の対局"
all-games: "みんなの対局"
enter-username: "ユーザー名を入力してください"
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
cancel: "キャンセル"
ready: "準備完了"
cancel-ready: "準備続行"
common/views/components/connect-failed.vue:
title: "サーバーに接続できません"
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
@@ -227,6 +286,13 @@ common/views/widgets/broadcast.vue:
no-broadcasts: "お知らせはありません"
have-a-nice-day: "良い一日を!"
next: "次"
common/views/widgets/calendar.vue:
year: "{}年"
month: "{}月"
day: "{}日"
today: "今日:"
this-month: "今月:"
this-year: "今年:"
common/views/widgets/donation.vue:
title: "寄付のお願い"
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
@@ -247,6 +313,31 @@ common/views/widgets/memo.vue:
title: "付箋"
memo: "ここに書いて!"
save: "保存"
common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
folder: "クリックしてフォルダを指定してください"
no-image: "このフォルダには画像がありません"
common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます"
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
tips-line8: "ホームは設定からカスタマイズできます"
tips-line9: "MisskeyはAGPLv3です"
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
tips-line21: "APIを利用してbotの開発なども行えます"
tips-line23: "まゆかわいいよまゆ"
tips-line24: "Misskeyは2014年にサービスを開始しました"
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
common/views/pages/follow.vue:
signed-in-as: "{}としてサインイン中"
following: "フォロー中"
@@ -288,6 +379,8 @@ desktop/views/components/drive.file.vue:
banner: "バナー"
contextmenu:
rename: "名前を変更"
mark-as-sensitive: "閲覧注意に設定"
unmark-as-sensitive: "閲覧注意を解除"
copy-url: "URLをコピー"
download: "ダウンロード"
else-files: "その他..."
@@ -331,6 +424,12 @@ desktop/views/components/drive.vue:
create-folder: "フォルダーを作成"
upload: "ファイルをアップロード"
url-upload: "URLからアップロード"
desktop/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
@@ -387,6 +486,9 @@ desktop/views/components/notifications.vue:
more: "もっと見る"
empty: "ありません!"
desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加"
attach-location-information: "位置情報を添付する"
hide-contents: "内容を隠す"
reply-placeholder: "この投稿への返信..."
quote-placeholder: "この投稿を引用..."
submit: "投稿"
@@ -405,6 +507,12 @@ desktop/views/components/post-form.vue:
insert-a-kao: "v('ω')v"
create-poll: "アンケートを作成"
text-remain: "残り{}文字"
recent-tags: "最近"
click-to-tagging: "クリックでタグ付け"
visibility: "公開範囲"
geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー"
enter-username: "ユーザー名を入力してください"
desktop/views/components/post-form-window.vue:
note: "新規投稿"
reply: "返信"
@@ -525,6 +633,9 @@ desktop/views/components/settings.api.vue:
enter-password: "パスワードを入力してください"
desktop/views/components/settings.apps.vue:
no-apps: "連携しているアプリケーションはありません"
desktop/views/components/settings.drive.vue:
max: "中"
in-use: "使用中"
desktop/views/components/settings.mute.vue:
no-users: "ミュートしているユーザーはいません"
desktop/views/components/settings.password.vue:
@@ -547,6 +658,7 @@ desktop/views/components/settings.profile.vue:
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
@@ -620,6 +732,7 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
powered-by-misskey: "Powered by <b>Misskey</b>."
desktop/views/pages/drive.vue:
title: "Misskey Drive"
desktop/views/pages/favorites.vue:
@@ -634,6 +747,14 @@ desktop/views/pages/selectdrive.vue:
ok: "決定"
cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
users: "ユーザー"
add-user: "ユーザーを追加"
@@ -725,6 +846,12 @@ mobile/views/components/drive.file-detail.vue:
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
@@ -783,6 +910,8 @@ mobile/views/components/sub-note-content.vue:
mobile/views/components/timeline.vue:
empty: "投稿がありません"
load-more: "もっと"
mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、"
mobile/views/components/ui.nav.vue:
timeline: "タイムライン"
notifications: "通知"
@@ -813,6 +942,8 @@ mobile/views/pages/user-lists.vue:
mobile/views/pages/drive.vue:
drive: "ドライブ"
more: "もっと見る"
mobile/views/pages/signup.vue:
lets-start: "📦 始めましょう"
mobile/views/pages/followers.vue:
followers-of: "{}のフォロワー"
mobile/views/pages/following.vue:
@@ -822,6 +953,14 @@ mobile/views/pages/home.vue:
local: "ローカル"
hybrid: "ソーシャル"
global: "グローバル"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
@@ -837,6 +976,8 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"

View File

@@ -6,6 +6,14 @@ common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
name: "Misskey"
time:
unknown: "なぞのじかん"
future: "未来"
@@ -17,6 +25,7 @@ common:
weeks_ago: "{}週間前"
months_ago: "{}ヶ月前"
years_ago: "{}年前"
trash: "ゴミ箱"
weekday-short:
sunday: "日"
monday: "月"
@@ -25,6 +34,14 @@ common:
thursday: "木"
friday: "金"
saturday: "土"
weekday:
sunday: "日曜日"
monday: "月曜日"
tuesday: "火曜日"
wednesday: "水曜日"
thursday: "木曜日"
friday: "金曜日"
saturday: "土曜日"
reactions:
like: "いいね"
love: "しゅき"
@@ -51,12 +68,18 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
reversi:
drawn: "引き分け"
my-turn: "あなたのターンです"
opponent-turn: "相手のターンです"
turn-of: "{}のターンです"
past-turn-of: "{}のターン"
won: "{}の勝ち"
black: "黒"
white: "白"
total: "合計"
this-turn: "{}ターン目"
widgets:
analog-clock: "アナログ時計"
profile: "プロフィール"
@@ -98,6 +121,42 @@ common:
rename: "名前を変更"
stack-left: "左に重ねる"
pop-right: "右に出す"
common/views/components/games/reversi/reversi.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
rule: "遊び方"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "招待"
mode-invite-desc: "指定したユーザーと対戦するモードです。"
invitations: "対局の招待があります!"
my-games: "自分の対局"
all-games: "みんなの対局"
enter-username: "ユーザー名を入力してください"
game-state:
ended: "終了"
playing: "進行中"
matching:
waiting-for: "{}を待っています"
cacnel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-gane-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
cancel: "キャンセル"
ready: "準備完了"
cancel-ready: "準備続行"
common/views/components/connect-failed.vue:
title: "サーバーに接続できません"
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
@@ -227,6 +286,13 @@ common/views/widgets/broadcast.vue:
no-broadcasts: "お知らせはありません"
have-a-nice-day: "良い一日を!"
next: "次"
common/views/widgets/calendar.vue:
year: "{}年"
month: "{}月"
day: "{}日"
today: "今日:"
this-month: "今月:"
this-year: "今年:"
common/views/widgets/donation.vue:
title: "寄付のお願い"
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
@@ -247,6 +313,31 @@ common/views/widgets/memo.vue:
title: "付箋"
memo: "ここに書いて!"
save: "保存"
common/views/widgets/slideshow.vue:
folder-customize-mode: "フォルダを指定するには、カスタマイズモードを終了してください"
folder: "クリックしてフォルダを指定してください"
no-image: "このフォルダには画像がありません"
common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます"
tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
tips-line8: "ホームは設定からカスタマイズできます"
tips-line9: "MisskeyはAGPLv3です"
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
tips-line17: "「**」でテキストを囲むと**強調表示**されます"
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
tips-line21: "APIを利用してbotの開発なども行えます"
tips-line23: "まゆかわいいよまゆ"
tips-line24: "Misskeyは2014年にサービスを開始しました"
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
common/views/pages/follow.vue:
signed-in-as: "{}としてサインイン中"
following: "フォロー中"
@@ -288,6 +379,8 @@ desktop/views/components/drive.file.vue:
banner: "バナー"
contextmenu:
rename: "名前を変更"
mark-as-sensitive: "閲覧注意に設定"
unmark-as-sensitive: "閲覧注意を解除"
copy-url: "URLをコピー"
download: "ダウンロード"
else-files: "その他..."
@@ -331,6 +424,12 @@ desktop/views/components/drive.vue:
create-folder: "フォルダーを作成"
upload: "ファイルをアップロード"
url-upload: "URLからアップロード"
desktop/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
desktop/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
@@ -387,6 +486,9 @@ desktop/views/components/notifications.vue:
more: "もっと見る"
empty: "ありません!"
desktop/views/components/post-form.vue:
add-visible-user: "+ユーザーを追加"
attach-location-information: "位置情報を添付する"
hide-contents: "内容を隠す"
reply-placeholder: "この投稿への返信..."
quote-placeholder: "この投稿を引用..."
submit: "投稿"
@@ -405,6 +507,12 @@ desktop/views/components/post-form.vue:
insert-a-kao: "v('ω')v"
create-poll: "アンケートを作成"
text-remain: "残り{}文字"
recent-tags: "最近"
click-to-tagging: "クリックでタグ付け"
visibility: "公開範囲"
geolocation-alert: "お使いの端末は位置情報に対応していません"
error: "エラー"
enter-username: "ユーザー名を入力してください"
desktop/views/components/post-form-window.vue:
note: "新規投稿"
reply: "返信"
@@ -525,6 +633,9 @@ desktop/views/components/settings.api.vue:
enter-password: "パスワードを入力してください"
desktop/views/components/settings.apps.vue:
no-apps: "連携しているアプリケーションはありません"
desktop/views/components/settings.drive.vue:
max: "中"
in-use: "使用中"
desktop/views/components/settings.mute.vue:
no-users: "ミュートしているユーザーはいません"
desktop/views/components/settings.password.vue:
@@ -547,6 +658,7 @@ desktop/views/components/settings.profile.vue:
other: "その他"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
profile-updated: "プロフィールを更新しました"
desktop/views/components/sub-note-content.vue:
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
@@ -620,6 +732,7 @@ desktop/views/pages/welcome.vue:
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
powered-by-misskey: "Powered by <b>Misskey</b>."
desktop/views/pages/drive.vue:
title: "Misskey Drive"
desktop/views/pages/favorites.vue:
@@ -634,6 +747,14 @@ desktop/views/pages/selectdrive.vue:
ok: "決定"
cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "Misskeyで共有"
close: "閉じる"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
users: "ユーザー"
add-user: "ユーザーを追加"
@@ -725,6 +846,12 @@ mobile/views/components/drive.file-detail.vue:
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/media-video.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
mobile/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
@@ -783,6 +910,8 @@ mobile/views/components/sub-note-content.vue:
mobile/views/components/timeline.vue:
empty: "投稿がありません"
load-more: "もっと"
mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、"
mobile/views/components/ui.nav.vue:
timeline: "タイムライン"
notifications: "通知"
@@ -813,6 +942,8 @@ mobile/views/pages/user-lists.vue:
mobile/views/pages/drive.vue:
drive: "ドライブ"
more: "もっと見る"
mobile/views/pages/signup.vue:
lets-start: "📦 始めましょう"
mobile/views/pages/followers.vue:
followers-of: "{}のフォロワー"
mobile/views/pages/following.vue:
@@ -822,6 +953,14 @@ mobile/views/pages/home.vue:
local: "ローカル"
hybrid: "ソーシャル"
global: "グローバル"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
@@ -837,6 +976,8 @@ mobile/views/pages/note.vue:
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"

View File

@@ -1,11 +0,0 @@
Misskeyの破壊的変更に対応するいくつかのスニペットがあります。
MongoDBシェルで実行する必要のあるものとnodeで直接実行する必要のあるものがあります。
ファイル名が `shell.` から始まるものは前者、 `node.` から始まるものは後者です。
MongoDBシェルで実行する場合、`use`でデータベースを選択しておく必要があります。
nodeで実行するいくつかのスニペットは、並列処理させる数を引数で設定できるものがあります。
処理中にエラーで落ちる場合は、メモリが足りていない可能性があるので、少ない数に設定してみてください。
※デフォルトは`5`です。
ファイルを作成する際は `../init-migration-file.sh -t _type_ -n _name_` を実行すると _type_._unixtime_._name_.js が生成されます

View File

@@ -1,37 +0,0 @@
#!/bin/bash
usage() {
echo "$0 [-t type] [-n name]"
echo " type: [node | shell]"
echo " name: if no present, set untitled"
exit 0
}
while getopts :t:n:h OPT
do
case $OPT in
t) type=$OPTARG
;;
n) name=$OPTARG
;;
h) usage
;;
\?) usage
;;
:) usage
;;
esac
done
if [ "$type" = "" ]
then
echo "no type present!!!"
usage
fi
if [ "$name" = "" ]
then
name="untitled"
fi
touch "$(realpath $(dirname $BASH_SOURCE))/migration/$type.$(date +%s).$name.js"

18198
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,20 +1,18 @@
{
"name": "misskey",
"author": "syuilo <i@syuilo.com>",
"version": "4.22.1",
"clientVersion": "1.0.7361",
"version": "5.10.0",
"clientVersion": "1.0.7828",
"codename": "nighthike",
"main": "./built/index.js",
"private": true,
"scripts": {
"start": "node ./built",
"debug": "DEBUG=misskey:* node ./built",
"swagger": "node ./swagger.js",
"build": "webpack && gulp build",
"webpack": "webpack",
"watch": "webpack --watch",
"gulp": "gulp build",
"rebuild": "gulp rebuild",
"clean": "gulp clean",
"cleanall": "gulp cleanall",
"lint": "gulp lint",
@@ -35,7 +33,6 @@
"@types/deep-equal": "1.0.1",
"@types/elasticsearch": "5.0.25",
"@types/file-type": "5.2.1",
"@types/gm": "1.18.0",
"@types/gulp": "3.8.36",
"@types/gulp-htmlmin": "1.3.32",
"@types/gulp-mocha": "0.0.32",
@@ -54,16 +51,16 @@
"@types/koa-logger": "3.1.0",
"@types/koa-mount": "3.0.1",
"@types/koa-multer": "1.0.0",
"@types/koa-router": "7.0.30",
"@types/koa-router": "7.0.31",
"@types/koa-send": "4.1.1",
"@types/koa-views": "2.0.3",
"@types/koa__cors": "2.2.2",
"@types/kue": "0.11.9",
"@types/koa__cors": "2.2.3",
"@types/minio": "6.0.2",
"@types/mkdirp": "0.5.2",
"@types/mocha": "5.2.3",
"@types/mongodb": "3.1.1",
"@types/mongodb": "3.1.2",
"@types/ms": "0.7.30",
"@types/node": "10.5.2",
"@types/node": "10.5.5",
"@types/parse5": "5.0.0",
"@types/portscanner": "2.1.0",
"@types/pug": "2.0.4",
@@ -74,12 +71,14 @@
"@types/request-promise-native": "1.0.15",
"@types/rimraf": "2.0.2",
"@types/seedrandom": "2.4.27",
"@types/sharp": "0.17.9",
"@types/showdown": "1.7.5",
"@types/single-line-log": "1.1.0",
"@types/speakeasy": "2.0.2",
"@types/systeminformation": "3.23.0",
"@types/tmp": "0.0.33",
"@types/uuid": "3.4.3",
"@types/webpack": "4.4.7",
"@types/webpack": "4.4.8",
"@types/webpack-stream": "3.2.10",
"@types/websocket": "0.0.39",
"@types/ws": "5.1.2",
@@ -87,9 +86,11 @@
"autosize": "4.0.2",
"autwh": "0.1.0",
"bcryptjs": "2.4.3",
"bee-queue": "1.2.2",
"bootstrap-vue": "2.0.0-rc.11",
"cafy": "11.3.0",
"chalk": "2.4.1",
"commander": "2.16.0",
"crc-32": "1.2.0",
"css-loader": "1.0.0",
"dateformat": "3.0.3",
@@ -99,40 +100,40 @@
"diskusage": "0.2.4",
"dompurify": "1.0.5",
"elasticsearch": "15.1.1",
"element-ui": "2.4.4",
"emojilib": "2.2.12",
"element-ui": "2.4.5",
"emojilib": "2.3.0",
"escape-regexp": "0.0.1",
"eslint": "5.0.1",
"eslint-plugin-vue": "4.7.0",
"eslint-plugin-vue": "4.7.1",
"eventemitter3": "3.1.0",
"exif-js": "2.3.0",
"file-loader": "1.1.11",
"file-type": "8.1.0",
"fuckadblock": "3.2.1",
"gm": "1.23.1",
"gulp": "3.9.1",
"gulp-cssnano": "2.1.3",
"gulp-htmlmin": "4.0.0",
"gulp-imagemin": "4.1.0",
"gulp-mocha": "6.0.0",
"gulp-pug": "4.0.1",
"gulp-rename": "1.3.0",
"gulp-rename": "1.4.0",
"gulp-replace": "1.0.0",
"gulp-sourcemaps": "2.6.4",
"gulp-stylus": "2.7.0",
"gulp-tslint": "8.1.3",
"gulp-typescript": "4.0.2",
"gulp-uglify": "3.0.0",
"gulp-uglify": "3.0.1",
"gulp-util": "3.0.8",
"hard-source-webpack-plugin": "0.11.1",
"hard-source-webpack-plugin": "0.12.0",
"highlight.js": "9.12.0",
"html-minifier": "3.5.19",
"http-signature": "1.2.0",
"insert-text-at-cursor": "0.1.1",
"is-root": "2.0.0",
"is-url": "1.2.4",
"jquery": "3.3.1",
"js-yaml": "3.12.0",
"jsdom": "11.11.0",
"jsdom": "11.12.0",
"koa": "2.5.1",
"koa-bodyparser": "4.2.1",
"koa-compress": "3.0.0",
@@ -145,9 +146,9 @@
"koa-send": "5.0.0",
"koa-slow": "2.1.0",
"koa-views": "6.1.4",
"kue": "0.11.6",
"loader-utils": "1.1.0",
"mecab-async": "0.1.2",
"minio": "6.0.0",
"mkdirp": "0.5.1",
"mocha": "5.2.0",
"moji": "0.5.1",
@@ -164,12 +165,11 @@
"parse5": "5.0.0",
"portscanner": "2.2.0",
"progress-bar-webpack-plugin": "1.11.0",
"prominence": "0.2.0",
"promise-sequential": "1.1.1",
"pug": "2.0.3",
"punycode": "2.1.1",
"qrcode": "1.2.0",
"ratelimiter": "3.1.0",
"qrcode": "1.2.2",
"ratelimiter": "3.2.0",
"recaptcha-promise": "0.1.3",
"reconnecting-websocket": "3.2.2",
"redis": "2.8.0",
@@ -178,8 +178,9 @@
"rimraf": "2.6.2",
"rndstr": "1.0.0",
"s-age": "1.1.2",
"sass-loader": "7.0.3",
"sass-loader": "7.1.0",
"seedrandom": "2.4.3",
"sharp": "0.20.5",
"showdown": "1.8.6",
"showdown-highlightjs-extension": "0.1.2",
"single-line-log": "1.1.2",
@@ -188,7 +189,7 @@
"stylus": "0.54.5",
"stylus-loader": "3.0.2",
"summaly": "2.0.6",
"swagger-jsdoc": "1.9.7",
"systeminformation": "3.42.4",
"syuilo-password-strength": "0.0.1",
"textarea-caret": "3.1.0",
"tmp": "0.0.33",
@@ -196,27 +197,28 @@
"ts-node": "7.0.0",
"tslint": "5.10.0",
"typescript": "2.9.2",
"typescript-eslint-parser": "16.0.1",
"typescript-eslint-parser": "17.0.1",
"uglify-es": "3.3.9",
"url-loader": "1.0.1",
"uuid": "3.3.2",
"v-animate-css": "0.0.2",
"vue": "2.5.16",
"vue": "2.5.17",
"vue-cropperjs": "2.2.1",
"vue-js-modal": "1.3.16",
"vue-json-tree-view": "2.1.4",
"vue-loader": "15.2.5",
"vue-loader": "15.2.6",
"vue-router": "3.0.1",
"vue-template-compiler": "2.5.16",
"vue-style-loader": "4.1.1",
"vue-template-compiler": "2.5.17",
"vuedraggable": "2.16.0",
"vuex": "3.0.1",
"vuex-persistedstate": "2.5.4",
"web-push": "3.3.2",
"webfinger.js": "2.6.6",
"webpack": "4.16.1",
"webpack-cli": "3.0.8",
"webpack": "4.16.3",
"webpack-cli": "3.1.0",
"websocket": "1.0.26",
"ws": "5.2.2",
"ws": "6.0.0",
"xev": "2.0.1"
},
"greenkeeper": {

View File

@@ -2,7 +2,7 @@
<div class="form">
<header>
<h1><i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか</h1>
<img :src="`${app.iconUrl}?thumbnail&size=64`"/>
<img :src="app.iconUrl"/>
</header>
<div class="app">
<section>

View File

@@ -17,21 +17,21 @@ export default function(type, data): Notification {
return {
title: 'ファイルがアップロードされました',
body: data.name,
icon: data.url + '?thumbnail&size=64'
icon: data.url
};
case 'unread_messaging_message':
return {
title: `${getUserName(data.user)}さんからメッセージ:`,
body: data.text, // TODO: getMessagingMessageSummary(data),
icon: data.user.avatarUrl + '?thumbnail&size=64'
icon: data.user.avatarUrl
};
case 'reversi_invited':
return {
title: '対局への招待があります',
body: `${getUserName(data.parent)}さんから`,
icon: data.parent.avatarUrl + '?thumbnail&size=64'
icon: data.parent.avatarUrl
};
case 'notification':
@@ -40,28 +40,28 @@ export default function(type, data): Notification {
return {
title: `${getUserName(data.user)}さんから:`,
body: getNoteSummary(data),
icon: data.user.avatarUrl + '?thumbnail&size=64'
icon: data.user.avatarUrl
};
case 'reply':
return {
title: `${getUserName(data.user)}さんから返信:`,
body: getNoteSummary(data),
icon: data.user.avatarUrl + '?thumbnail&size=64'
icon: data.user.avatarUrl
};
case 'quote':
return {
title: `${getUserName(data.user)}さんが引用:`,
body: getNoteSummary(data),
icon: data.user.avatarUrl + '?thumbnail&size=64'
icon: data.user.avatarUrl
};
case 'reaction':
return {
title: `${getUserName(data.user)}: ${getReactionEmoji(data.reaction)}:`,
body: getNoteSummary(data.note),
icon: data.user.avatarUrl + '?thumbnail&size=64'
icon: data.user.avatarUrl
};
default:

View File

@@ -39,6 +39,10 @@ export default Vue.extend({
dark: {
type: Boolean,
default: false
},
smooth: {
type: Boolean,
default: false
}
},
@@ -75,7 +79,7 @@ export default Vue.extend({
},
ms(): number {
return this.now.getMilliseconds();
return this.now.getMilliseconds() * this.smooth;
}
s(): number {
return this.now.getSeconds();

View File

@@ -2,11 +2,16 @@
<div class="mk-autocomplete" @contextmenu.prevent="() => {}">
<ol class="users" ref="suggests" v-if="users.length > 0">
<li v-for="user in users" @click="complete(type, user)" @keydown="onKeydown" tabindex="-1">
<img class="avatar" :src="`${user.avatarUrl}?thumbnail&size=32`" alt=""/>
<img class="avatar" :src="user.avatarUrl" alt=""/>
<span class="name">{{ user | userName }}</span>
<span class="username">@{{ user | acct }}</span>
</li>
</ol>
<ol class="hashtags" ref="suggests" v-if="hashtags.length > 0">
<li v-for="hashtag in hashtags" @click="complete(type, hashtag)" @keydown="onKeydown" tabindex="-1">
<span class="name">{{ hashtag }}</span>
</li>
</ol>
<ol class="emojis" ref="suggests" v-if="emojis.length > 0">
<li v-for="emoji in emojis" @click="complete(type, emoji.emoji)" @keydown="onKeydown" tabindex="-1">
<span class="emoji">{{ emoji.emoji }}</span>
@@ -48,33 +53,33 @@ emjdb.sort((a, b) => a.name.length - b.name.length);
export default Vue.extend({
props: ['type', 'q', 'textarea', 'complete', 'close', 'x', 'y'],
data() {
return {
fetching: true,
users: [],
hashtags: [],
emojis: [],
select: -1,
emojilib
}
},
computed: {
items(): HTMLCollection {
return (this.$refs.suggests as Element).children;
}
},
updated() {
//#region 位置調整
const margin = 32;
if (this.x + this.$el.offsetWidth > window.innerWidth - margin) {
this.$el.style.left = (this.x - this.$el.offsetWidth) + 'px';
this.$el.style.marginLeft = '-16px';
if (this.x + this.$el.offsetWidth > window.innerWidth) {
this.$el.style.left = (window.innerWidth - this.$el.offsetWidth) + 'px';
} else {
this.$el.style.left = this.x + 'px';
this.$el.style.marginLeft = '0';
}
if (this.y + this.$el.offsetHeight > window.innerHeight - margin) {
if (this.y + this.$el.offsetHeight > window.innerHeight) {
this.$el.style.top = (this.y - this.$el.offsetHeight) + 'px';
this.$el.style.marginTop = '0';
} else {
@@ -83,6 +88,7 @@ export default Vue.extend({
}
//#endregion
},
mounted() {
this.textarea.addEventListener('keydown', this.onKeydown);
@@ -100,6 +106,7 @@ export default Vue.extend({
});
});
},
beforeDestroy() {
this.textarea.removeEventListener('keydown', this.onKeydown);
@@ -107,6 +114,7 @@ export default Vue.extend({
el.removeEventListener('mousedown', this.onMousedown);
});
},
methods: {
exec() {
this.select = -1;
@@ -117,7 +125,8 @@ export default Vue.extend({
}
if (this.type == 'user') {
const cache = sessionStorage.getItem(this.q);
const cacheKey = 'autocomplete:user:' + this.q;
const cache = sessionStorage.getItem(cacheKey);
if (cache) {
const users = JSON.parse(cache);
this.users = users;
@@ -131,9 +140,33 @@ export default Vue.extend({
this.fetching = false;
// キャッシュ
sessionStorage.setItem(this.q, JSON.stringify(users));
sessionStorage.setItem(cacheKey, JSON.stringify(users));
});
}
} else if (this.type == 'hashtag') {
if (this.q == null || this.q == '') {
this.hashtags = JSON.parse(localStorage.getItem('hashtags') || '[]');
this.fetching = false;
} else {
const cacheKey = 'autocomplete:hashtag:' + this.q;
const cache = sessionStorage.getItem(cacheKey);
if (cache) {
const hashtags = JSON.parse(cache);
this.hashtags = hashtags;
this.fetching = false;
} else {
(this as any).api('hashtags/search', {
query: this.q,
limit: 30
}).then(hashtags => {
this.hashtags = hashtags;
this.fetching = false;
// キャッシュ
sessionStorage.setItem(cacheKey, JSON.stringify(hashtags));
});
}
}
} else if (this.type == 'emoji') {
const matched = [];
emjdb.some(x => {
@@ -231,6 +264,7 @@ export default Vue.extend({
root(isDark)
position fixed
z-index 65535
max-width 100%
margin-top calc(1em + 8px)
overflow hidden
background isDark ? #313543 : #fff
@@ -248,7 +282,8 @@ root(isDark)
list-style none
> li
display block
display flex
align-items center
padding 4px 12px
white-space nowrap
overflow hidden
@@ -259,7 +294,13 @@ root(isDark)
&, *
user-select none
*
overflow hidden
text-overflow ellipsis
&:hover
background isDark ? rgba(#fff, 0.1) : rgba(#000, 0.1)
&[data-selected='true']
background $theme-color
@@ -275,7 +316,6 @@ root(isDark)
> .users > li
.avatar
vertical-align middle
min-width 28px
min-height 28px
max-width 28px
@@ -284,14 +324,17 @@ root(isDark)
border-radius 100%
.name
vertical-align middle
margin 0 8px 0 0
color isDark ? rgba(#fff, 0.8) : rgba(#000, 0.8)
.username
vertical-align middle
color isDark ? rgba(#fff, 0.3) : rgba(#000, 0.3)
> .hashtags > li
.name
color isDark ? rgba(#fff, 0.8) : rgba(#000, 0.8)
> .emojis > li
.emoji
@@ -300,11 +343,11 @@ root(isDark)
width 24px
.name
color rgba(#000, 0.8)
color isDark ? rgba(#fff, 0.8) : rgba(#000, 0.8)
.alias
margin 0 0 0 8px
color rgba(#000, 0.3)
color isDark ? rgba(#fff, 0.3) : rgba(#000, 0.3)
.mk-autocomplete[data-darkmode]
root(true)

View File

@@ -31,7 +31,7 @@ export default Vue.extend({
: this.user.avatarColor && this.user.avatarColor.length == 3
? `rgb(${ this.user.avatarColor.join(',') })`
: null,
backgroundImage: this.lightmode ? null : `url(${ this.user.avatarUrl }?thumbnail)`,
backgroundImage: this.lightmode ? null : `url(${ this.user.avatarUrl })`,
borderRadius: this.$store.state.settings.circleIcons ? '100%' : null
};
}

View File

@@ -1,14 +1,14 @@
<template>
<div class="root">
<header><b>{{ blackUser.name }}</b>() vs <b>{{ whiteUser.name }}</b>()</header>
<header><b>{{ blackUser | userName }}</b>(%i18n:common.reversi.black%) vs <b>{{ whiteUser | userName }}</b>(%i18n:common.reversi.white%)</header>
<div style="overflow: hidden">
<p class="turn" v-if="!iAmPlayer && !game.isEnded">{{ '%i18n:common.reversi.turn-of%'.replace('{}', turnUser.name) }}<mk-ellipsis/></p>
<p class="turn" v-if="logPos != logs.length">{{ '%i18n:common.reversi.past-turn-of%'.replace('{}', turnUser.name) }}</p>
<p class="turn" v-if="!iAmPlayer && !game.isEnded">{{ '%i18n:common.reversi.turn-of%'.replace('{}', turnUser | userName) }}<mk-ellipsis/></p>
<p class="turn" v-if="logPos != logs.length">{{ '%i18n:common.reversi.past-turn-of%'.replace('{}', turnUser | userName) }}</p>
<p class="turn1" v-if="iAmPlayer && !game.isEnded && !isMyTurn">%i18n:common.reversi.opponent-turn%<mk-ellipsis/></p>
<p class="turn2" v-if="iAmPlayer && !game.isEnded && isMyTurn" v-animate-css="{ classes: 'tada', iteration: 'infinite' }">%i18n:common.reversi.my-turn%</p>
<p class="result" v-if="game.isEnded && logPos == logs.length">
<template v-if="game.winner"><b>{{ game.winner.name }}</b>の勝ち{{ game.settings.isLlotheo ? ' (ロセオ)' : '' }}</template>
<template v-if="game.winner">{{ '%i18n:common.reversi.won%'.replace('{}', game.winner | userName) }}{{ game.settings.isLlotheo ? ' (ロセオ)' : '' }}</template>
<template v-else>%i18n:common.reversi.drawn%</template>
</p>
</div>
@@ -26,8 +26,8 @@
:class="{ empty: stone == null, none: o.map[i] == 'null', isEnded: game.isEnded, myTurn: !game.isEnded && isMyTurn, can: turnUser ? o.canPut(turnUser.id == blackUser.id, i) : null, prev: o.prevPos == i }"
@click="set(i)"
:title="`${String.fromCharCode(65 + o.transformPosToXy(i)[0])}${o.transformPosToXy(i)[1] + 1}`">
<img v-if="stone === true" :src="`${blackUser.avatarUrl}?thumbnail&size=128`" alt="">
<img v-if="stone === false" :src="`${whiteUser.avatarUrl}?thumbnail&size=128`" alt="">
<img v-if="stone === true" :src="blackUser.avatarUrl" alt="">
<img v-if="stone === false" :src="whiteUser.avatarUrl" alt="">
</div>
</div>
<div class="labels-y" v-if="this.$store.state.settings.reversiBoardLabels">
@@ -39,7 +39,7 @@
</div>
</div>
<p class="status"><b>{{ logPos }}ターン目</b> :{{ o.blackCount }} :{{ o.whiteCount }} 合計:{{ o.blackCount + o.whiteCount }}</p>
<p class="status"><b>{{ '%i18n:common.reversi.this-turn%'.split('{}')[0] }}{{ logPos }}{{ '%i18n:common.reversi.this-turn%'.split('{}')[1] }}</b> %i18n:common.reversi.black%:{{ o.blackCount }} %i18n:common.reversi.white%:{{ o.whiteCount }} %i18n:common.reversi.total%:{{ o.blackCount + o.whiteCount }}</p>
<div class="player" v-if="game.isEnded">
<el-button-group>
@@ -105,13 +105,14 @@ export default Vue.extend({
}
},
isMyTurn(): boolean {
if (this.turnUser == null) return null;
if (!this.iAmPlayer) return false;
if (this.turnUser == null) return false;
return this.turnUser.id == this.$store.state.i.id;
},
cellsStyle(): any {
return {
'grid-template-rows': `repeat(${ this.game.settings.map.length }, 1fr)`,
'grid-template-columns': `repeat(${ this.game.settings.map[0].length }, 1fr)`
'grid-template-rows': `repeat(${this.game.settings.map.length}, 1fr)`,
'grid-template-columns': `repeat(${this.game.settings.map[0].length}, 1fr)`
};
}
},

View File

@@ -1,14 +1,14 @@
<template>
<div class="root">
<header><b>{{ game.user1.name }}</b> vs <b>{{ game.user2.name }}</b></header>
<header><b>{{ game.user1 | userName }}</b> vs <b>{{ game.user2 | userName }}</b></header>
<div>
<p>ゲームの設定</p>
<p>%i18n:@settings-of-the-game%</p>
<el-card class="map">
<div slot="header">
<el-select :class="$style.mapSelect" v-model="mapName" placeholder="マップを選択" @change="onMapChange">
<el-option label="ランダム" :value="null"/>
<el-select :class="$style.mapSelect" v-model="mapName" placeholder="%i18n:@choose-map%" @change="onMapChange">
<el-option label="%i18n:@random%" :value="null"/>
<el-option-group v-for="c in mapCategories" :key="c" :label="c">
<el-option v-for="m in maps" v-if="m.category == c" :key="m.name" :label="m.name" :value="m.name">
<span style="float: left">{{ m.name }}</span>
@@ -30,25 +30,25 @@
<el-card class="bw">
<div slot="header">
<span>先手/後手</span>
<span>%i18n:@black-or-white%</span>
</div>
<el-radio v-model="game.settings.bw" label="random" @change="updateSettings">ランダム</el-radio>
<el-radio v-model="game.settings.bw" :label="1" @change="updateSettings">{{ game.user1.name }}が黒</el-radio>
<el-radio v-model="game.settings.bw" :label="2" @change="updateSettings">{{ game.user2.name }}が黒</el-radio>
<el-radio v-model="game.settings.bw" label="random" @change="updateSettings">%i18n:@random%</el-radio>
<el-radio v-model="game.settings.bw" :label="1" @change="updateSettings">{{ '%i18n:@black-is%'.split('{}')[0] }}{{ game.user1.name }}{{ '%i18n:@black-is%'.split('{}')[1] }}</el-radio>
<el-radio v-model="game.settings.bw" :label="2" @change="updateSettings">{{ '%i18n:@black-is%'.split('{}')[0] }}{{ game.user2.name }}{{ '%i18n:@black-is%'.split('{}')[1] }}</el-radio>
</el-card>
<el-card class="rules">
<div slot="header">
<span>ルール</span>
<span>%i18n:@rules%</span>
</div>
<mk-switch v-model="game.settings.isLlotheo" @change="updateSettings" text="石の少ない方が勝ち(ロセオ)"/>
<mk-switch v-model="game.settings.loopedBoard" @change="updateSettings" text="ループマップ"/>
<mk-switch v-model="game.settings.canPutEverywhere" @change="updateSettings" text="どこでも置けるモード"/>
<mk-switch v-model="game.settings.isLlotheo" @change="updateSettings" text="%i18n:@is-llotheo%"/>
<mk-switch v-model="game.settings.loopedBoard" @change="updateSettings" text="%i18n:@looped-map%"/>
<mk-switch v-model="game.settings.canPutEverywhere" @change="updateSettings" text="%i18n:@can-put-everywhere%"/>
</el-card>
<el-card class="bot-form" v-if="form">
<div slot="header">
<span>Botの設定</span>
<span>%i18n:@settings-of-the-bot%</span>
</div>
<el-alert v-for="message in messages"
:title="message.text"
@@ -77,16 +77,16 @@
<footer>
<p class="status">
<template v-if="isAccepted && isOpAccepted">ゲームは数秒後に開始されます<mk-ellipsis/></template>
<template v-if="isAccepted && !isOpAccepted">相手の準備が完了するのを待っています<mk-ellipsis/></template>
<template v-if="!isAccepted && isOpAccepted">あなたの準備が完了するのを待っています</template>
<template v-if="!isAccepted && !isOpAccepted">準備中<mk-ellipsis/></template>
<template v-if="isAccepted && isOpAccepted">%i18n:@this-gane-is-started-soon%<mk-ellipsis/></template>
<template v-if="isAccepted && !isOpAccepted">%i18n:@waiting-for-other%<mk-ellipsis/></template>
<template v-if="!isAccepted && isOpAccepted">%i18n:@waiting-for-me%</template>
<template v-if="!isAccepted && !isOpAccepted">%i18n:@waiting-for-both%<mk-ellipsis/></template>
</p>
<div class="actions">
<el-button @click="exit">キャンセル</el-button>
<el-button type="primary" @click="accept" v-if="!isAccepted">準備完了</el-button>
<el-button type="primary" @click="cancel" v-if="isAccepted">準備続行</el-button>
<el-button @click="exit">%i18n:@cancel%</el-button>
<el-button type="primary" @click="accept" v-if="!isAccepted">%i18n:@ready%</el-button>
<el-button type="primary" @click="cancel" v-if="isAccepted">%i18n:@cancel-ready%</el-button>
</div>
</footer>
</div>
@@ -112,7 +112,7 @@ export default Vue.extend({
computed: {
mapCategories(): string[] {
const categories = Object.entries(maps).map(x => x[1].category);
const categories = Object.values(maps).map(x => x.category);
return categories.filter((item, pos) => categories.indexOf(item) == pos);
},
isAccepted(): boolean {
@@ -179,8 +179,8 @@ export default Vue.extend({
if (this.game.settings.map == null) {
this.mapName = null;
} else {
const foundMap = Object.entries(maps).find(x => x[1].data.join('') == this.game.settings.map.join(''));
this.mapName = foundMap ? foundMap[1].name : '-Custom-';
const found = Object.values(maps).find(x => x.data.join('') == this.game.settings.map.join(''));
this.mapName = found ? found.name : '-Custom-';
}
},
@@ -206,7 +206,7 @@ export default Vue.extend({
if (v == null) {
this.game.settings.map = null;
} else {
this.game.settings.map = Object.entries(maps).find(x => x[1].name == v)[1].data;
this.game.settings.map = Object.values(maps).find(x => x.name == v).data;
}
this.$forceUpdate();
this.updateSettings();
@@ -217,9 +217,9 @@ export default Vue.extend({
const y = Math.floor(pos / this.game.settings.map[0].length);
const newPixel =
pixel == ' ' ? '-' :
pixel == '-' ? 'b' :
pixel == 'b' ? 'w' :
' ';
pixel == '-' ? 'b' :
pixel == 'b' ? 'w' :
' ';
const line = this.game.settings.map[y].split('');
line[x] = newPixel;
this.$set(this.game.settings.map, y, line.join(''));

View File

@@ -4,55 +4,53 @@
<x-gameroom :game="game"/>
</div>
<div class="matching" v-else-if="matching">
<h1><b>{{ matching.name }}</b>を待っています<mk-ellipsis/></h1>
<h1>{{ '%i18n:@matching.waiting-for%'.split('{}')[0] }}<b>{{ matching | userName }}</b>{{ '%i18n:@matching.waiting-for%'.split('{}')[1] }}<mk-ellipsis/></h1>
<div class="cancel">
<el-button round @click="cancel">キャンセル</el-button>
<el-button round @click="cancel">%i18n:@matching.cancel%</el-button>
</div>
</div>
<div class="index" v-else>
<h1>Misskey Reversi</h1>
<p>他のMisskeyユーザーとリバーシで対戦しよう</p>
<h1>%i18n:@title%</h1>
<p>%i18n:@sub-title%</p>
<div class="play">
<el-button round>フリーマッチ(準備中)</el-button>
<el-button type="primary" round @click="match">指名</el-button>
<!--<el-button round>フリーマッチ(準備中)</el-button>-->
<el-button type="primary" round @click="match">%i18n:@invite%</el-button>
<details>
<summary>遊び方</summary>
<summary>%i18n:@rule%</summary>
<div>
<p>リバーシは相手と交互に石をボードに置いてゆき相手の石を挟んでひっくり返しながら最終的に残った石が多い方が勝ちというボードゲームです</p>
<p>%i18n:@rule-desc%</p>
<dl>
<dt><b>フリーマッチ</b></dt>
<dd>ランダムなユーザーと対戦するモードです</dd>
<dt><b>指名</b></dt>
<dd>指定したユーザーと対戦するモードです</dd>
<dt><b>%i18n:@mode-invite%</b></dt>
<dd>%i18n:@mode-invite-desc%</dd>
</dl>
</div>
</details>
</div>
<section v-if="invitations.length > 0">
<h2>対局の招待があります:</h2>
<h2>%i18n:@invitations%</h2>
<div class="invitation" v-for="i in invitations" tabindex="-1" @click="accept(i)">
<mk-avatar class="avatar" :user="i.parent"/>
<span class="name"><b>{{ i.parent.name }}</b></span>
<span class="name"><b>{{ i.parent | userName }}</b></span>
<span class="username">@{{ i.parent.username }}</span>
<mk-time :time="i.createdAt"/>
</div>
</section>
<section v-if="myGames.length > 0">
<h2>自分の対局</h2>
<h2>%i18n:@my-games%</h2>
<a class="game" v-for="g in myGames" tabindex="-1" @click.prevent="go(g)" :href="`/reversi/${g.id}`">
<mk-avatar class="avatar" :user="g.user1"/>
<mk-avatar class="avatar" :user="g.user2"/>
<span><b>{{ g.user1.name }}</b> vs <b>{{ g.user2.name }}</b></span>
<span class="state">{{ g.isEnded ? '終了' : '進行中' }}</span>
<span><b>{{ g.user1 | userName }}</b> vs <b>{{ g.user2 | userName }}</b></span>
<span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span>
</a>
</section>
<section v-if="games.length > 0">
<h2>みんなの対局</h2>
<h2>%i18n:@all-games%</h2>
<a class="game" v-for="g in games" tabindex="-1" @click.prevent="go(g)" :href="`/reversi/${g.id}`">
<mk-avatar class="avatar" :user="g.user1"/>
<mk-avatar class="avatar" :user="g.user2"/>
<span><b>{{ g.user1.name }}</b> vs <b>{{ g.user2.name }}</b></span>
<span class="state">{{ g.isEnded ? '終了' : '進行中' }}</span>
<span><b>{{ g.user1 | userName }}</b> vs <b>{{ g.user2 | userName }}</b></span>
<span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span>
</a>
</section>
</div>
@@ -67,7 +65,9 @@ export default Vue.extend({
components: {
XGameroom
},
props: ['initGame'],
data() {
return {
game: null,
@@ -82,54 +82,63 @@ export default Vue.extend({
pingClock: null
};
},
watch: {
game(g) {
this.$emit('gamed', g);
}
},
created() {
if (this.initGame) {
this.game = this.initGame;
}
},
mounted() {
this.connection = (this as any).os.streams.reversiStream.getConnection();
this.connectionId = (this as any).os.streams.reversiStream.use();
if (this.$store.getters.isSignedIn) {
this.connection = (this as any).os.streams.reversiStream.getConnection();
this.connectionId = (this as any).os.streams.reversiStream.use();
this.connection.on('matched', this.onMatched);
this.connection.on('invited', this.onInvited);
this.connection.on('matched', this.onMatched);
this.connection.on('invited', this.onInvited);
(this as any).api('games/reversi/games', {
my: true
}).then(games => {
this.myGames = games;
});
(this as any).api('games/reversi/games', {
my: true
}).then(games => {
this.myGames = games;
});
(this as any).api('games/reversi/invitations').then(invitations => {
this.invitations = this.invitations.concat(invitations);
});
this.pingClock = setInterval(() => {
if (this.matching) {
this.connection.send({
type: 'ping',
id: this.matching.id
});
}
}, 3000);
}
(this as any).api('games/reversi/games').then(games => {
this.games = games;
this.gamesFetching = false;
});
(this as any).api('games/reversi/invitations').then(invitations => {
this.invitations = this.invitations.concat(invitations);
});
this.pingClock = setInterval(() => {
if (this.matching) {
this.connection.send({
type: 'ping',
id: this.matching.id
});
}
}, 3000);
},
beforeDestroy() {
this.connection.off('matched', this.onMatched);
this.connection.off('invited', this.onInvited);
(this as any).os.streams.reversiStream.dispose(this.connectionId);
if (this.connection) {
this.connection.off('matched', this.onMatched);
this.connection.off('invited', this.onInvited);
(this as any).os.streams.reversiStream.dispose(this.connectionId);
clearInterval(this.pingClock);
clearInterval(this.pingClock);
}
},
methods: {
go(game) {
(this as any).api('games/reversi/games/show', {
@@ -139,9 +148,10 @@ export default Vue.extend({
this.game = game;
});
},
match() {
(this as any).apis.input({
title: 'ユーザー名を入力してください'
title: '%i18n:@enter-username%'
}).then(username => {
(this as any).api('users/show', {
username
@@ -158,10 +168,12 @@ export default Vue.extend({
});
});
},
cancel() {
this.matching = null;
(this as any).api('games/reversi/match/cancel');
},
accept(invitation) {
(this as any).api('games/reversi/match', {
userId: invitation.parent.id
@@ -172,10 +184,12 @@ export default Vue.extend({
}
});
},
onMatched(game) {
this.matching = null;
this.game = game;
},
onInvited(invite) {
this.invitations.unshift(invite);
}

View File

@@ -46,33 +46,45 @@ export default Vue.extend({
display grid
grid-gap 4px
> *
overflow hidden
border-radius 4px
&[data-count="1"]
grid-template-rows 1fr
&[data-count="2"]
grid-template-columns 1fr 1fr
grid-template-rows 1fr
&[data-count="3"]
grid-template-columns 1fr 0.5fr
grid-template-rows 1fr 1fr
:nth-child(1)
> *:nth-child(1)
grid-row 1 / 3
:nth-child(3)
> *:nth-child(3)
grid-column 2 / 3
grid-row 2 / 3
&[data-count="4"]
grid-template-columns 1fr 1fr
grid-template-rows 1fr 1fr
:nth-child(1)
> *:nth-child(1)
grid-column 1 / 2
grid-row 1 / 2
:nth-child(2)
> *:nth-child(2)
grid-column 2 / 3
grid-row 1 / 2
:nth-child(3)
> *:nth-child(3)
grid-column 1 / 2
grid-row 2 / 3
:nth-child(4)
> *:nth-child(4)
grid-column 2 / 3
grid-row 2 / 3

View File

@@ -119,7 +119,7 @@ export default Vue.extend({
},
onKeypress(e) {
if ((e.which == 10 || e.which == 13) && e.ctrlKey) {
if ((e.which == 10 || e.which == 13) && e.ctrlKey && this.canSend) {
this.send();
}
},

View File

@@ -3,10 +3,9 @@
<mk-avatar class="avatar" :user="message.user" target="_blank"/>
<div class="content">
<div class="balloon" :data-no-text="message.text == null">
<p class="read" v-if="isMe && message.isRead">%i18n:@is-read%</p>
<button class="delete-button" v-if="isMe" title="%i18n:common.delete%">
<!-- <button class="delete-button" v-if="isMe" title="%i18n:common.delete%">
<img src="/assets/desktop/messaging/delete.png" alt="Delete"/>
</button>
</button> -->
<div class="content" v-if="!message.isDeleted">
<misskey-flavored-markdown class="text" v-if="message.text" ref="text" :text="message.text" :i="$store.state.i"/>
<div class="file" v-if="message.file">
@@ -23,6 +22,7 @@
<div></div>
<mk-url-preview v-for="url in urls" :url="url" :key="url"/>
<footer>
<span class="read" v-if="isMe && message.isRead">%i18n:@is-read%</span>
<mk-time :time="message.createdAt"/>
<template v-if="message.is_edited">%fa:pencil-alt%</template>
</footer>
@@ -79,7 +79,8 @@ root(isDark)
> .content
> .balloon
display block
display flex
align-items center
padding 0
max-width calc(100% - 16px)
min-height 38px
@@ -120,17 +121,6 @@ root(isDark)
height 16px
cursor pointer
> .read
user-select none
display block
position absolute
z-index 1
bottom -4px
left -12px
margin 0
color isDark ? rgba(#fff, 0.5) : rgba(#000, 0.5)
font-size 11px
> .content
> .is-deleted
@@ -258,8 +248,14 @@ root(isDark)
> footer
text-align right
> .read
user-select none
margin 0 4px 0 0
color isDark ? rgba(#fff, 0.5) : rgba(#000, 0.5)
font-size 11px
&[data-is-deleted]
> .baloon
> .balloon
opacity 0.5
.message[data-darkmode]

View File

@@ -92,7 +92,7 @@ export default Vue.component('misskey-flavored-markdown', {
case 'hashtag':
return createElement('a', {
attrs: {
href: `${url}/tags/${token.hashtag}`,
href: `${url}/tags/${encodeURIComponent(token.hashtag)}`,
target: '_blank'
}
}, token.content);

View File

@@ -2,6 +2,7 @@
<header class="bvonvjxbwzaiskogyhbwgyxvcgserpmu">
<mk-avatar class="avatar" :user="note.user" v-if="$store.state.device.postStyle == 'smart'"/>
<router-link class="name" :to="note.user | userPage" v-user-preview="note.user.id">{{ note.user | userName }}</router-link>
<span class="is-verified" v-if="note.user.isVerified" title="%i18n:common.verified-user%">%fa:bookmark%</span>
<span class="is-admin" v-if="note.user.isAdmin">admin</span>
<span class="is-bot" v-if="note.user.isBot">bot</span>
<span class="is-cat" v-if="note.user.isCat">cat</span>
@@ -69,6 +70,10 @@ root(isDark)
&:hover
text-decoration underline
> .is-verified
margin-right 8px
color #4dabf7
> .is-admin
> .is-bot
> .is-cat

View File

@@ -29,11 +29,7 @@
<p slot="text" v-if="passwordRetypeState == 'not-match'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@password-not-matched%</p>
</div>
</ui-input>
<div class="g-recaptcha" :data-sitekey="recaptchaSitekey" style="margin: 16px 0;"></div>
<label class="agree-tou" style="display: block; margin: 16px 0;">
<input name="agree-tou" type="checkbox" required/>
<p><a :href="touUrl" target="_blank">利用規約</a>に同意する</p>
</label>
<div v-if="recaptchaSitekey != null" class="g-recaptcha" :data-sitekey="recaptchaSitekey" style="margin: 16px 0;"></div>
<ui-button type="submit">%i18n:@create%</ui-button>
</form>
</template>
@@ -41,7 +37,7 @@
<script lang="ts">
import Vue from 'vue';
const getPasswordStrength = require('syuilo-password-strength');
import { host, url, docsUrl, lang, recaptchaSitekey } from '../../../config';
import { host, url, recaptchaSitekey } from '../../../config';
export default Vue.extend({
data() {
@@ -51,7 +47,6 @@ export default Vue.extend({
password: '',
retypedPassword: '',
url,
touUrl: `${docsUrl}/${lang}/tou`,
recaptchaSitekey,
usernameState: null,
passwordStrength: '',
@@ -115,7 +110,7 @@ export default Vue.extend({
(this as any).api('signup', {
username: this.username,
password: this.password,
'g-recaptcha-response': (window as any).grecaptcha.getResponse()
'g-recaptcha-response': recaptchaSitekey != null ? (window as any).grecaptcha.getResponse() : null
}).then(() => {
(this as any).api('signin', {
username: this.username,
@@ -126,15 +121,19 @@ export default Vue.extend({
}).catch(() => {
alert('%i18n:@some-error%');
(window as any).grecaptcha.reset();
if (recaptchaSitekey != null) {
(window as any).grecaptcha.reset();
}
});
}
},
mounted() {
const head = document.getElementsByTagName('head')[0];
const script = document.createElement('script');
script.setAttribute('src', 'https://www.google.com/recaptcha/api.js');
head.appendChild(script);
if (recaptchaSitekey != null) {
const head = document.getElementsByTagName('head')[0];
const script = document.createElement('script');
script.setAttribute('src', 'https://www.google.com/recaptcha/api.js');
head.appendChild(script);
}
}
});
</script>
@@ -144,22 +143,4 @@ export default Vue.extend({
.mk-signup
min-width 302px
.agree-tou
padding 4px
border-radius 4px
&:hover
background #f4f4f4
&:active
background #eee
&, *
cursor pointer
p
display inline
color #555
</style>

View File

@@ -2,6 +2,11 @@
<iframe v-if="youtubeId" type="text/html" height="250"
:src="`https://www.youtube.com/embed/${youtubeId}?origin=${misskeyUrl}`"
frameborder="0"/>
<div v-else-if="tweetUrl && detail" class="twitter">
<blockquote ref="tweet" class="twitter-tweet" :data-theme="$store.state.device.darkmode ? 'dark' : null">
<a :href="url"></a>
</blockquote>
</div>
<div v-else class="mk-url-preview">
<a :href="url" target="_blank" :title="url" v-if="!fetching">
<div class="thumbnail" v-if="thumbnail" :style="`background-image: url(${thumbnail})`"></div>
@@ -24,7 +29,17 @@ import Vue from 'vue';
import { url as misskeyUrl } from '../../../config';
export default Vue.extend({
props: ['url'],
props: {
url: {
type: String,
require: true
},
detail: {
type: Boolean,
required: false,
default: false
}
},
data() {
return {
fetching: true,
@@ -34,6 +49,7 @@ export default Vue.extend({
icon: null,
sitename: null,
youtubeId: null,
tweetUrl: null,
misskeyUrl
};
},
@@ -44,6 +60,25 @@ export default Vue.extend({
this.youtubeId = url.searchParams.get('v');
} else if (url.hostname == 'youtu.be') {
this.youtubeId = url.pathname;
} else if (this.detail && url.hostname == 'twitter.com' && /^\/.+\/status(es)?\/\d+/.test(url.pathname)) {
this.tweetUrl = url;
const twttr = (window as any).twttr || {};
const loadTweet = () => twttr.widgets.load(this.$refs.tweet);
if (twttr.widgets) {
Vue.nextTick(loadTweet);
} else {
const wjsId = 'twitter-wjs';
if (!document.getElementById(wjsId)) {
const head = document.getElementsByTagName('head')[0];
const script = document.createElement('script');
script.setAttribute('id', wjsId);
script.setAttribute('src', 'https://platform.twitter.com/widgets.js');
head.appendChild(script);
}
twttr.ready = loadTweet;
(window as any).twttr = twttr;
}
} else {
fetch('/url?url=' + encodeURIComponent(this.url)).then(res => {
res.json().then(info => {

View File

@@ -1,5 +1,6 @@
import * as getCaretCoordinates from 'textarea-caret';
import MkAutocomplete from '../components/autocomplete.vue';
import renderAcct from '../../../../../misc/acct/render';
export default {
bind(el, binding, vn) {
@@ -67,15 +68,30 @@ class Autocomplete {
* テキスト入力時
*/
private onInput() {
const caret = this.textarea.selectionStart;
const text = this.text.substr(0, caret);
const caretPos = this.textarea.selectionStart;
const text = this.text.substr(0, caretPos).split('\n').pop();
const mentionIndex = text.lastIndexOf('@');
const hashtagIndex = text.lastIndexOf('#');
const emojiIndex = text.lastIndexOf(':');
const max = Math.max(
mentionIndex,
hashtagIndex,
emojiIndex);
if (max == -1) {
this.close();
return;
}
const isMention = mentionIndex != -1;
const isHashtag = hashtagIndex != -1;
const isEmoji = emojiIndex != -1;
let opened = false;
if (mentionIndex != -1 && mentionIndex > emojiIndex) {
if (isMention) {
const username = text.substr(mentionIndex + 1);
if (username != '' && username.match(/^[a-zA-Z0-9_]+$/)) {
this.open('user', username);
@@ -83,7 +99,15 @@ class Autocomplete {
}
}
if (emojiIndex != -1 && emojiIndex > mentionIndex) {
if (isHashtag && opened == false) {
const hashtag = text.substr(hashtagIndex + 1);
if (!hashtag.includes(' ')) {
this.open('hashtag', hashtag);
opened = true;
}
}
if (isEmoji && opened == false) {
const emoji = text.substr(emojiIndex + 1);
if (emoji != '' && emoji.match(/^[\+\-a-z0-9_]+$/)) {
this.open('emoji', emoji);
@@ -164,13 +188,31 @@ class Autocomplete {
const trimmedBefore = before.substring(0, before.lastIndexOf('@'));
const after = source.substr(caret);
const acct = renderAcct(value);
// 挿入
this.text = trimmedBefore + '@' + value.username + ' ' + after;
this.text = trimmedBefore + '@' + acct + ' ' + after;
// キャレットを戻す
this.vm.$nextTick(() => {
this.textarea.focus();
const pos = trimmedBefore.length + (value.username.length + 2);
const pos = trimmedBefore.length + (acct.length + 2);
this.textarea.setSelectionRange(pos, pos);
});
} else if (type == 'hashtag') {
const source = this.text;
const before = source.substr(0, caret);
const trimmedBefore = before.substring(0, before.lastIndexOf('#'));
const after = source.substr(caret);
// 挿入
this.text = trimmedBefore + '#' + value + ' ' + after;
// キャレットを戻す
this.vm.$nextTick(() => {
this.textarea.focus();
const pos = trimmedBefore.length + (value.length + 2);
this.textarea.setSelectionRange(pos, pos);
});
} else if (type == 'emoji') {

View File

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

View File

@@ -4,27 +4,27 @@
<div class="mkw-calendar--body">
<div class="calendar" :data-is-holiday="isHoliday">
<p class="month-and-year">
<span class="year">{{ year }}</span>
<span class="month">{{ month }}</span>
<span class="year">{{ '%i18n:@year%'.split('{}')[0] }}{{ year }}{{ '%i18n:@year%'.split('{}')[1] }}</span>
<span class="month">{{ '%i18n:@month%'.split('{}')[0] }}{{ month }}{{ '%i18n:@month%'.split('{}')[1] }}</span>
</p>
<p class="day">{{ day }}</p>
<p class="week-day">{{ weekDay }}曜日</p>
<p class="day">{{ '%i18n:@day%'.split('{}')[0] }}{{ day }}{{ '%i18n:@day%'.split('{}')[1] }}</p>
<p class="week-day">{{ weekDay }}</p>
</div>
<div class="info">
<div>
<p>今日:<b>{{ dayP.toFixed(1) }}%</b></p>
<p>%i18n:@today%<b>{{ dayP.toFixed(1) }}%</b></p>
<div class="meter">
<div class="val" :style="{ width: `${dayP}%` }"></div>
</div>
</div>
<div>
<p>今月:<b>{{ monthP.toFixed(1) }}%</b></p>
<p>%i18n:@this-month%<b>{{ monthP.toFixed(1) }}%</b></p>
<div class="meter">
<div class="val" :style="{ width: `${monthP}%` }"></div>
</div>
</div>
<div>
<p>今年:<b>{{ yearP.toFixed(1) }}%</b></p>
<p>%i18n:@this-year%<b>{{ yearP.toFixed(1) }}%</b></p>
<div class="meter">
<div class="val" :style="{ width: `${yearP}%` }"></div>
</div>
@@ -84,7 +84,15 @@ export default define({
this.year = ny;
this.month = nm + 1;
this.day = nd;
this.weekDay = ['日', '月', '火', '水', '木', '金', '土'][now.getDay()];
this.weekDay = [
'%i18n:common.weekday.sunday%',
'%i18n:common.weekday.monday%',
'%i18n:common.weekday.tuesday%',
'%i18n:common.weekday.wednesday%',
'%i18n:common.weekday.thursday%',
'%i18n:common.weekday.friday%',
'%i18n:common.weekday.saturday%'
][now.getDay()];
const dayNumer = now.getTime() - new Date(ny, nm, nd).getTime();
const dayDenom = 1000/*ms*/ * 60/*s*/ * 60/*m*/ * 24/*h*/;
@@ -175,6 +183,7 @@ root(isDark)
> .val
height 4px
background $theme-color
transition width .3s cubic-bezier(0.23, 1, 0.32, 1)
&:nth-child(1)
> .meter > .val

View File

@@ -11,7 +11,7 @@
<div>
<div v-for="stat in stats" :key="stat.tag">
<div class="tag">
<router-link :to="`/tags/${ stat.tag }`" :title="stat.tag">#{{ stat.tag }}</router-link>
<router-link :to="`/tags/${ encodeURIComponent(stat.tag) }`" :title="stat.tag">#{{ stat.tag }}</router-link>
<p>{{ '%i18n:@count%'.replace('{}', stat.usersCount) }}</p>
</div>
<x-chart class="chart" :src="stat.chart"/>

View File

@@ -5,7 +5,7 @@
<p :class="$style.fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
<div :class="$style.stream" v-if="!fetching && images.length > 0">
<div v-for="image in images" :class="$style.img" :style="`background-image: url(${image.url}?thumbnail&size=256)`"></div>
<div v-for="image in images" :class="$style.img" :style="`background-image: url(${image.url})`"></div>
</div>
<p :class="$style.empty" v-if="!fetching && images.length == 0">%i18n:@no-photos%</p>
</mk-widget-container>

View File

@@ -102,7 +102,6 @@ export default Vue.extend({
},
methods: {
onStats(stats) {
stats.mem.used = stats.mem.total - stats.mem.free;
this.stats.push(stats);
if (this.stats.length > 50) this.stats.shift();
@@ -111,8 +110,8 @@ export default Vue.extend({
this.cpuPolylinePoints = cpuPolylinePoints.map(xy => `${xy[0]},${xy[1]}`).join(' ');
this.memPolylinePoints = memPolylinePoints.map(xy => `${xy[0]},${xy[1]}`).join(' ');
this.cpuPolygonPoints = `${this.viewBoxX - (this.stats.length - 1)},${ this.viewBoxY } ${ this.cpuPolylinePoints } ${ this.viewBoxX },${ this.viewBoxY }`;
this.memPolygonPoints = `${this.viewBoxX - (this.stats.length - 1)},${ this.viewBoxY } ${ this.memPolylinePoints } ${ this.viewBoxX },${ this.viewBoxY }`;
this.cpuPolygonPoints = `${this.viewBoxX - (this.stats.length - 1)},${this.viewBoxY} ${this.cpuPolylinePoints} ${this.viewBoxX},${this.viewBoxY}`;
this.memPolygonPoints = `${this.viewBoxX - (this.stats.length - 1)},${this.viewBoxY} ${this.memPolylinePoints} ${this.viewBoxX},${this.viewBoxY}`;
this.cpuHeadX = cpuPolylinePoints[cpuPolylinePoints.length - 1][0];
this.cpuHeadY = cpuPolylinePoints[cpuPolylinePoints.length - 1][1];

View File

@@ -35,7 +35,7 @@ export default Vue.extend({
},
methods: {
onStats(stats) {
stats.mem.used = stats.mem.total - stats.mem.free;
stats.mem.free = stats.mem.total - stats.mem.used;
this.usage = stats.mem.used / stats.mem.total;
this.total = stats.mem.total;
this.used = stats.mem.used;

View File

@@ -2,10 +2,10 @@
<div class="mkw-slideshow" :data-mobile="platform == 'mobile'">
<div @click="choose">
<p v-if="props.folder === undefined">
<template v-if="isCustomizeMode">フォルダを指定するにはカスタマイズモードを終了してください</template>
<template v-else>クリックしてフォルダを指定してください</template>
<template v-if="isCustomizeMode">%i18n:@folder-customize-mode%</template>
<template v-else>%i18n:@folder%</template>
</p>
<p v-if="props.folder !== undefined && images.length == 0 && !fetching">このフォルダには画像がありません</p>
<p v-if="props.folder !== undefined && images.length == 0 && !fetching">%i18n:@no-image%</p>
<div ref="slideA" class="slide a"></div>
<div ref="slideB" class="slide b"></div>
</div>
@@ -72,7 +72,7 @@ export default define({
if (this.images.length == 0) return;
const index = Math.floor(Math.random() * this.images.length);
const img = `url(${ this.images[index].url }?thumbnail&size=1024)`;
const img = `url(${ this.images[index].url })`;
(this.$refs.slideB as any).style.backgroundImage = img;

View File

@@ -9,31 +9,26 @@ import * as anime from 'animejs';
import define from '../../../common/define-widget';
const tips = [
'<kbd>t</kbd>でタイムラインにフォーカスできます',
'<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます',
'投稿フォームにはファイルをドラッグ&ドロップできます',
'投稿フォームにクリップボードにある画像データをペーストできます',
'ドライブにファイルをドラッグ&ドロップしてアップロードできます',
'ドライブでファイルをドラッグしてフォルダ移動できます',
'ドライブでフォルダをドラッグしてフォルダ移動できます',
'ホームは設定からカスタマイズできます',
'MisskeyはAGPLv3です',
'タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます',
'投稿の ... をクリックして、投稿をユーザーページにピン留めできます',
'ドライブの容量は(デフォルトで)1GBです',
'投稿に添付したファイルは全てドライブに保存されます',
'ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます',
'タイムライン上部にもウィジェットを設置できます',
'投稿をダブルクリックすると詳細が見れます',
'「**」でテキストを囲むと**強調表示**されます',
'チャンネルウィジェットを利用すると、よく利用するチャンネルを素早く確認できます',
'いくつかのウィンドウはブラウザの外に切り離すことができます',
'カレンダーウィジェットのパーセンテージは、経過の割合を示しています',
'APIを利用してbotの開発なども行えます',
'MisskeyはLINEを通じてでも利用できます',
'まゆかわいいよまゆ',
'Misskeyは2014年にサービスを開始しました',
'対応ブラウザではMisskeyを開いていなくても通知を受け取れます'
'%i18n:@tips-line1%',
'%i18n:@tips-line2%',
'%i18n:@tips-line3%',
'%i18n:@tips-line4%',
'%i18n:@tips-line5%',
'%i18n:@tips-line6%',
'%i18n:@tips-line7%',
'%i18n:@tips-line8%',
'%i18n:@tips-line9%',
'%i18n:@tips-line10%',
'%i18n:@tips-line11%',
'%i18n:@tips-line13%',
'%i18n:@tips-line14%',
'%i18n:@tips-line17%',
'%i18n:@tips-line19%',
'%i18n:@tips-line20%',
'%i18n:@tips-line21%',
'%i18n:@tips-line23%',
'%i18n:@tips-line24%',
'%i18n:@tips-line25%'
]
export default define({

View File

@@ -35,10 +35,7 @@ import Vue from 'vue';
const eachMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
function isLeapYear(year) {
return (year % 400 == 0) ? true :
(year % 100 == 0) ? false :
(year % 4 == 0) ? true :
false;
return !(year & (year % 25 ? 3 : 15));
}
export default Vue.extend({

View File

@@ -28,7 +28,7 @@ export default Vue.extend({
default: false
},
title: {
default: '%fa:R file%%i18n:@choose-prompt%s'
default: '%fa:R file%%i18n:@choose-prompt%'
}
},
data() {

View File

@@ -1,5 +1,5 @@
<template>
<div class="root file"
<div class="gvfdktuvdgwhmztnuekzkswkjygptfcv"
:data-is-selected="isSelected"
:data-is-contextmenu-showing="isContextmenuShowing"
@click="onClick"
@@ -16,7 +16,7 @@
<p>%i18n:@banner%</p>
</div>
<div class="thumbnail" ref="thumbnail" :style="`background-color: ${ background }`">
<img :src="`${file.url}?thumbnail&size=128`" alt="" @load="onThumbnailLoaded"/>
<img :src="file.url" alt="" @load="onThumbnailLoaded"/>
</div>
<p class="name">
<span>{{ file.name.lastIndexOf('.') != -1 ? file.name.substr(0, file.name.lastIndexOf('.')) : file.name }}</span>
@@ -68,6 +68,11 @@ export default Vue.extend({
icon: '%fa:i-cursor%',
action: this.rename
}, {
type: 'item',
text: this.file.isSensitive ? '%i18n:@contextmenu.unmark-as-sensitive%' : '%i18n:@contextmenu.mark-as-sensitive%',
icon: this.file.isSensitive ? '%fa:R eye%' : '%fa:R eye-slash%',
action: this.toggleSensitive
}, null, {
type: 'item',
text: '%i18n:@contextmenu.copy-url%',
icon: '%fa:link%',
@@ -149,6 +154,13 @@ export default Vue.extend({
});
},
toggleSensitive() {
(this as any).api('drive/files/update', {
fileId: this.file.id,
isSensitive: !this.file.isSensitive
});
},
copyUrl() {
copyToClipboard(this.file.url);
(this as any).apis.dialog({
@@ -312,10 +324,10 @@ root(isDark)
> .ext
opacity 0.5
.root.file[data-darkmode]
.gvfdktuvdgwhmztnuekzkswkjygptfcv[data-darkmode]
root(true)
.root.file:not([data-darkmode])
.gvfdktuvdgwhmztnuekzkswkjygptfcv:not([data-darkmode])
root(false)
</style>

View File

@@ -1,5 +1,5 @@
<template>
<div class="root folder"
<div class="ynntpczxvnusfwdyxsfuhvcmuypqopdd"
:data-is-contextmenu-showing="isContextmenuShowing"
:data-draghover="draghover"
@click="onClick"
@@ -216,10 +216,10 @@ export default Vue.extend({
<style lang="stylus" scoped>
@import '~const.styl'
.root.folder
root(isDark)
padding 8px
height 64px
background lighten($theme-color, 95%)
background isDark ? rgba($theme-color, 0.2) : lighten($theme-color, 95%)
border-radius 4px
&, *
@@ -229,10 +229,10 @@ export default Vue.extend({
pointer-events none
&:hover
background lighten($theme-color, 90%)
background isDark ? rgba(lighten($theme-color, 10%), 0.2) : lighten($theme-color, 90%)
&:active
background lighten($theme-color, 85%)
background isDark ? rgba(darken($theme-color, 10%), 0.2) : lighten($theme-color, 85%)
&[data-is-contextmenu-showing]
&[data-draghover]
@@ -248,16 +248,22 @@ export default Vue.extend({
border-radius 4px
&[data-draghover]
background lighten($theme-color, 90%)
background isDark ? rgba(darken($theme-color, 10%), 0.2) : lighten($theme-color, 90%)
> .name
margin 0
font-size 0.9em
color darken($theme-color, 30%)
color isDark ? #fff : darken($theme-color, 30%)
> [data-fa]
margin-right 4px
margin-left 2px
text-align left
.ynntpczxvnusfwdyxsfuhvcmuypqopdd[data-darkmode]
root(true)
.ynntpczxvnusfwdyxsfuhvcmuypqopdd:not([data-darkmode])
root(false)
</style>

View File

@@ -10,7 +10,10 @@
<span class="separator" v-if="folder != null">%fa:angle-right%</span>
<span class="folder current" v-if="folder != null">{{ folder.name }}</span>
</div>
<input class="search" type="search" placeholder="&#xf002; %i18n:@search%"/>
<!--
TODO: #343
<input class="search" type="search" placeholder="&#xf002; %i18n:@search%"/>
-->
</nav>
<div class="main" :class="{ uploading: uploadings.length > 0, fetching }"
ref="main"

View File

@@ -1,7 +1,7 @@
<template>
<mk-window width="400px" height="550px" @closed="$destroy">
<span slot="header" :class="$style.header">
<img :src="`${user.avatarUrl}?thumbnail&size=64`" alt=""/>{{ '%i18n:@followers%'.replace('{}', name) }}
<img :src="user.avatarUrl" alt=""/>{{ '%i18n:@followers%'.replace('{}', name) }}
</span>
<mk-followers :user="user"/>
</mk-window>

View File

@@ -1,7 +1,7 @@
<template>
<mk-window width="400px" height="550px" @closed="$destroy">
<span slot="header" :class="$style.header">
<img :src="`${user.avatarUrl}?thumbnail&size=64`" alt=""/>{{ '%i18n:@following%'.replace('{}', name) }}
<img :src="user.avatarUrl" alt=""/>{{ '%i18n:@following%'.replace('{}', name) }}
</span>
<mk-following :user="user"/>
</mk-window>

View File

@@ -34,7 +34,7 @@
</div>
<div class="trash">
<x-draggable v-model="trash" :options="{ group: 'x' }" @add="onTrash"></x-draggable>
<p>ゴミ箱</p>
<p>%i18n:common.trash%</p>
</div>
</div>
</div>
@@ -53,7 +53,7 @@
</div>
</x-draggable>
<div class="main">
<a @click="hint">カスタマイズのヒント</a>
<a @click="hint">%i18n:common.customization-tips.title%</a>
<div>
<mk-post-form v-if="$store.state.settings.showPostFormOnTopOfTl"/>
<mk-timeline ref="tl" @loaded="onTlLoaded"/>
@@ -187,13 +187,13 @@ export default Vue.extend({
methods: {
hint() {
(this as any).apis.dialog({
title: '%fa:info-circle%カスタマイズのヒント',
text: '<p>ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。</p>' +
'<p>一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。</p>' +
'<p>ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。</p>' +
'<p>カスタマイズを終了するには、右上の「完了」をクリックします。</p>',
title: '%fa:info-circle%%i18n:common.customization-tips.title%',
text: '<p>%i18n:common.customization-tips.paragraph1%</p>' +
'<p>%i18n:common.customization-tips.paragraph2%</p>' +
'<p>%i18n:common.customization-tips.paragraph3%</p>' +
'<p>%i18n:common.customization-tips.paragraph4%</p>',
actions: [{
text: 'Got it!'
text: '%i18n:common.customization-tips.gotit%'
}]
});
},

View File

@@ -1,5 +1,11 @@
<template>
<a class="mk-media-image"
<div class="ldwbgwstjsdgcjruamauqdrffetqudry" v-if="image.isSensitive && hide" @click="hide = false">
<div>
<b>%fa:exclamation-triangle% %i18n:@sensitive%</b>
<span>%i18n:@click-to-show%</span>
</div>
</div>
<a class="lcjomzwbohoelkxsnuqjiaccdbdfiazy" v-else
:href="image.url"
@mousemove="onMousemove"
@mouseleave="onMouseleave"
@@ -21,13 +27,17 @@ export default Vue.extend({
},
raw: {
default: false
},
hide: {
type: Boolean,
default: true
}
},
computed: {
style(): any {
return {
'background-color': this.image.properties.avgColor && this.image.properties.avgColor.length == 3 ? `rgb(${this.image.properties.avgColor.join(',')})` : 'transparent',
'background-image': this.raw ? `url(${this.image.url})` : `url(${this.image.url}?thumbnail&size=512)`
'background-image': this.raw ? `url(${this.image.url})` : `url(${this.image.url})`
};
}
},
@@ -56,16 +66,30 @@ export default Vue.extend({
</script>
<style lang="stylus" scoped>
.mk-media-image
.lcjomzwbohoelkxsnuqjiaccdbdfiazy
display block
cursor zoom-in
overflow hidden
width 100%
height 100%
background-position center
border-radius 4px
&:not(:hover)
background-size cover
.ldwbgwstjsdgcjruamauqdrffetqudry
display flex
justify-content center
align-items center
background #111
color #fff
> div
display table-cell
text-align center
font-size 12px
> b
display block
</style>

View File

@@ -1,12 +1,19 @@
<template>
<video class="mk-media-video"
<div class="uofhebxjdgksfmltszlxurtjnjjsvioh" v-if="video.isSensitive && hide" @click="hide = false">
<div>
<b>%fa:exclamation-triangle% %i18n:@sensitive%</b>
<span>%i18n:@click-to-show%</span>
</div>
</div>
<div class="vwxdhznewyashiknzolsoihtlpicqepe" v-else>
<video class="video"
:src="video.url"
:title="video.name"
controls
@dblclick.prevent="onClick"
ref="video"
v-if="inlinePlayable" />
<a class="mk-media-video-thumbnail"
<a class="thumbnail"
:href="video.url"
:style="imageStyle"
@click.prevent="onClick"
@@ -14,6 +21,7 @@
v-else>
%fa:R play-circle%
</a>
</div>
</template>
<script lang="ts">
@@ -21,11 +29,23 @@ import Vue from 'vue';
import MkMediaVideoDialog from './media-video-dialog.vue';
export default Vue.extend({
props: ['video', 'inlinePlayable'],
props: {
video: {
type: Object,
required: true
},
inlinePlayable: {
default: false
},
hide: {
type: Boolean,
default: true
}
},
computed: {
imageStyle(): any {
return {
'background-image': `url(${this.video.url}?thumbnail&size=512)`
'background-image': `url(${this.video.url})`
};
}
},
@@ -47,22 +67,39 @@ export default Vue.extend({
</script>
<style lang="stylus" scoped>
.mk-media-video
display block
width 100%
height 100%
border-radius 4px
.vwxdhznewyashiknzolsoihtlpicqepe
.video
display block
width 100%
height 100%
border-radius 4px
.mk-media-video-thumbnail
.thumbnail
display flex
justify-content center
align-items center
font-size 3.5em
cursor zoom-in
overflow hidden
background-position center
background-size cover
width 100%
height 100%
.uofhebxjdgksfmltszlxurtjnjjsvioh
display flex
justify-content center
align-items center
font-size 3.5em
background #111
color #fff
> div
display table-cell
text-align center
font-size 12px
> b
display block
cursor zoom-in
overflow hidden
background-position center
background-size cover
width 100%
height 100%
</style>

View File

@@ -46,7 +46,7 @@
<mk-media-list :media-list="p.media" :raw="true"/>
</div>
<mk-poll v-if="p.poll" :note="p"/>
<mk-url-preview v-for="url in urls" :url="url" :key="url"/>
<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="true"/>
<a class="location" v-if="p.geo" :href="`http://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
<div class="map" v-if="p.geo" ref="map"></div>
<div class="renote" v-if="p.renote">

View File

@@ -56,10 +56,10 @@
<button @click="menu" ref="menuButton">
%fa:ellipsis-h%
</button>
<button title="%i18n:@detail">
<!-- <button title="%i18n:@detail">
<template v-if="!isDetailOpened">%fa:caret-down%</template>
<template v-if="isDetailOpened">%fa:caret-up%</template>
</button>
</button> -->
</footer>
</div>
</article>

View File

@@ -8,7 +8,11 @@
<div class="content">
<div v-if="visibility == 'specified'" class="visibleUsers">
<span v-for="u in visibleUsers">{{ u | userName }}<a @click="removeVisibleUser(u)">[x]</a></span>
<a @click="addVisibleUser">+ユーザーを追加</a>
<a @click="addVisibleUser">%i18n:@add-visible-user%</a>
</div>
<div class="hashtags" v-if="recentHashtags.length > 0">
<b>%i18n:@recent-tags%:</b>
<a v-for="tag in recentHashtags.slice(0, 5)" @click="addTag(tag)" title="%@click-to-tagging%">#{{ tag }}</a>
</div>
<input v-show="useCw" v-model="cw" placeholder="内容への注釈 (オプション)">
<textarea :class="{ with: (files.length != 0 || poll) }"
@@ -19,7 +23,7 @@
<div class="medias" :class="{ with: poll }" v-show="files.length != 0">
<x-draggable :list="files" :options="{ animation: 150 }">
<div v-for="file in files" :key="file.id">
<div class="img" :style="{ backgroundImage: `url(${file.url}?thumbnail&size=64)` }" :title="file.name"></div>
<div class="img" :style="{ backgroundImage: `url(${file.url})` }" :title="file.name"></div>
<img class="remove" @click="detachMedia(file.id)" src="/assets/desktop/remove.png" title="%i18n:@attach-cancel%" alt=""/>
</div>
</x-draggable>
@@ -32,9 +36,15 @@
<button class="drive" title="%i18n:@attach-media-from-drive%" @click="chooseFileFromDrive">%fa:cloud%</button>
<button class="kao" title="%i18n:@insert-a-kao%" @click="kao">%fa:R smile%</button>
<button class="poll" title="%i18n:@create-poll%" @click="poll = true">%fa:chart-pie%</button>
<button class="poll" title="内容を隠す" @click="useCw = !useCw">%fa:eye-slash%</button>
<button class="geo" title="位置情報を添付する" @click="geo ? removeGeo() : setGeo()">%fa:map-marker-alt%</button>
<button class="visibility" title="公開範囲" @click="setVisibility" ref="visibilityButton">%fa:lock%</button>
<button class="poll" title="%i18n:@hide-contents%" @click="useCw = !useCw">%fa:eye-slash%</button>
<button class="geo" title="%i18n:@attach-location-information%" @click="geo ? removeGeo() : setGeo()">%fa:map-marker-alt%</button>
<button class="visibility" title="%i18n:@visibility%" @click="setVisibility" ref="visibilityButton">
<span v-if="visibility === 'public'">%fa:globe%</span>
<span v-if="visibility === 'home'">%fa:home%</span>
<span v-if="visibility === 'followers'">%fa:unlock%</span>
<span v-if="visibility === 'specified'">%fa:envelope%</span>
<span v-if="visibility === 'private'">%fa:lock%</span>
</button>
<p class="text-count" :class="{ over: text.length > 1000 }">{{ 1000 - text.length }}</p>
<button :class="{ posting }" class="submit" :disabled="!canPost" @click="post">
{{ posting ? '%i18n:@posting%' : submitText }}<mk-ellipsis v-if="posting"/>
@@ -46,6 +56,7 @@
<script lang="ts">
import Vue from 'vue';
import insertTextAtCursor from 'insert-text-at-cursor';
import * as XDraggable from 'vuedraggable';
import getKao from '../../../common/scripts/get-kao';
import MkVisibilityChooser from '../../../common/views/components/visibility-chooser.vue';
@@ -91,7 +102,8 @@ export default Vue.extend({
visibility: 'public',
visibleUsers: [],
autocomplete: null,
draghover: false
draghover: false,
recentHashtags: JSON.parse(localStorage.getItem('hashtags') || '[]')
};
},
@@ -131,7 +143,9 @@ export default Vue.extend({
},
canPost(): boolean {
return !this.posting && (this.text.length != 0 || this.files.length != 0 || this.poll || this.renote);
return !this.posting &&
(1 <= this.text.length || 1 <= this.files.length || this.poll || this.renote) &&
(this.text.trim().length <= 1000);
}
},
@@ -183,6 +197,10 @@ export default Vue.extend({
},
methods: {
addTag(tag: string) {
insertTextAtCursor(this.$refs.text, ` #${tag} `);
},
watch() {
this.$watch('text', () => this.saveDraft());
this.$watch('poll', () => this.saveDraft());
@@ -235,7 +253,7 @@ export default Vue.extend({
},
onKeydown(e) {
if ((e.which == 10 || e.which == 13) && (e.ctrlKey || e.metaKey)) this.post();
if ((e.which == 10 || e.which == 13) && (e.ctrlKey || e.metaKey) && this.canPost) this.post();
},
onPaste(e) {
@@ -287,7 +305,7 @@ export default Vue.extend({
setGeo() {
if (navigator.geolocation == null) {
alert('お使いの端末は位置情報に対応していません');
alert('%i18n:@geolocation-alert%');
return;
}
@@ -295,10 +313,10 @@ export default Vue.extend({
this.geo = pos.coords;
this.$emit('geo-attached', this.geo);
}, err => {
alert('エラー: ' + err.message);
alert('%i18n:@error%: ' + err.message);
}, {
enableHighAccuracy: true
});
enableHighAccuracy: true
});
},
removeGeo() {
@@ -318,7 +336,7 @@ export default Vue.extend({
addVisibleUser() {
(this as any).apis.input({
title: 'ユーザー名を入力してください'
title: '%i18n:@enter-username%'
}).then(username => {
(this as any).api('users/show', {
username
@@ -370,6 +388,12 @@ export default Vue.extend({
}).then(() => {
this.posting = false;
});
if (this.text && this.text != '') {
const hashtags = parse(this.text).filter(x => x.type == 'hashtag').map(x => x.hashtag);
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], [])));
}
},
saveDraft() {
@@ -452,7 +476,7 @@ root(isDark)
margin 0
max-width 100%
min-width 100%
min-height 64px
min-height 84px
&:hover
& + *
@@ -478,6 +502,19 @@ root(isDark)
margin-right 16px
color isDark ? #fff : #666
> .hashtags
margin 0 0 8px 0
overflow hidden
white-space nowrap
font-size 14px
> b
color isDark ? #9baec8 : darken($theme-color, 20%)
> *
margin-right 8px
white-space nowrap
> .medias
margin 0
padding 0

View File

@@ -2,7 +2,7 @@
<div class="root">
<template v-if="!fetching">
<el-progress :text-inside="true" :stroke-width="18" :percentage="Math.floor((usage / capacity) * 100)"/>
<p><b>{{ capacity | bytes }}</b><b>{{ usage | bytes }}</b>使用中</p>
<p><b>{{ capacity | bytes }}</b>%i18n:max%<b>{{ usage | bytes }}</b>%i18n:in-use%</p>
</template>
</div>
</template>

View File

@@ -2,7 +2,7 @@
<div class="profile">
<label class="avatar ui from group">
<p>%i18n:@avatar%</p>
<img class="avatar" :src="`${$store.state.i.avatarUrl}?thumbnail&size=64`" alt="avatar"/>
<img class="avatar" :src="$store.state.i.avatarUrl" alt="avatar"/>
<button class="ui" @click="updateAvatar">%i18n:@choice-avatar%</button>
</label>
<label class="ui from group">
@@ -63,7 +63,7 @@ export default Vue.extend({
description: this.description || null,
birthday: this.birthday || null
}).then(() => {
(this as any).apis.notify('プロフィールを更新しました');
(this as any).apis.notify('%i18n:@profile-updated%');
});
},
onChangeIsLocked() {

View File

@@ -2,13 +2,13 @@
<div class="nav">
<ul>
<template v-if="$store.getters.isSignedIn">
<li class="home" :class="{ active: $route.name == 'index' }">
<li class="home" :class="{ active: $route.name == 'index' }" @click="goToTop">
<router-link to="/">
%fa:home%
<p>%i18n:@home%</p>
</router-link>
</li>
<li class="deck" :class="{ active: $route.name == 'deck' }">
<li class="deck" :class="{ active: $route.name == 'deck' }" @click="goToTop">
<router-link to="/deck">
%fa:columns%
<p>%i18n:@deck% <small>(beta)</small></p>
@@ -82,6 +82,13 @@ export default Vue.extend({
game() {
(this as any).os.new(MkGameWindow);
},
goToTop() {
window.scrollTo({
top: 0,
behavior: 'smooth'
});
}
}
});

View File

@@ -9,6 +9,9 @@
<div class="left">
<x-nav/>
</div>
<div class="center">
<div class="icon" @click="goToTop"></div>
</div>
<div class="right">
<x-search/>
<x-account v-if="$store.getters.isSignedIn"/>
@@ -42,6 +45,7 @@ export default Vue.extend({
XPost,
XClock,
},
mounted() {
this.$store.commit('setUiHeaderHeight', 48);
@@ -93,7 +97,16 @@ export default Vue.extend({
}, 2500);
}
}
}
},
methods: {
goToTop() {
window.scrollTo({
top: 0,
behavior: 'smooth'
});
}
},
});
</script>
@@ -142,26 +155,24 @@ root(isDark)
max-width 1300px
margin 0 auto
&:before
content ""
position absolute
top 0
left 0
display block
width 100%
height 48px
background-image isDark ? url('/assets/desktop/header-icon.dark.svg') : url('/assets/desktop/header-icon.light.svg')
background-size 24px
background-position center
background-repeat no-repeat
opacity 0.3
> .center
margin auto
> .icon
display block
width 48px
height 48px
background-image isDark ? url('/assets/desktop/header-icon.dark.svg') : url('/assets/desktop/header-icon.light.svg')
background-size 24px
background-position center
background-repeat no-repeat
opacity 0.3
cursor pointer
> .left
margin 0 auto 0 0
height 48px
> .right
margin 0 0 0 auto
height 48px
> *

View File

@@ -1,7 +1,7 @@
<template>
<div class="mk-user-preview">
<template v-if="u != null">
<div class="banner" :style="u.bannerUrl ? `background-image: url(${u.bannerUrl}?thumbnail&size=512)` : ''"></div>
<div class="banner" :style="u.bannerUrl ? `background-image: url(${u.bannerUrl})` : ''"></div>
<mk-avatar class="avatar" :user="u" :disable-preview="true"/>
<div class="title">
<router-link class="name" :to="u | userPage">{{ u | userName }}</router-link>
@@ -19,7 +19,7 @@
<p>%i18n:@followers%</p><a>{{ u.followersCount }}</a>
</div>
</div>
<mk-follow-button v-if="$store.getters.isSignedIn && user.id != $store.state.i.id" :user="u"/>
<mk-follow-button v-if="$store.getters.isSignedIn && u.id != $store.state.i.id" :user="u"/>
</template>
</div>
</template>

View File

@@ -48,7 +48,7 @@ export default Vue.extend({
this.moreFetching = true;
(this as any).api('i/favorites', {
limit: 11,
maxId: this.favorites[this.favorites.length - 1].id
untilId: this.favorites[this.favorites.length - 1].id
}).then(favorites => {
if (favorites.length == 11) {
this.existMore = true;

View File

@@ -6,7 +6,8 @@
<div :class="$style.loading" v-if="fetching">
<mk-ellipsis-icon/>
</div>
<p :class="$style.empty" v-if="!fetching && empty">%fa:search%{{ q }}に関する投稿は見つかりませんでした</p>
<p :class="$style.notAvailable" v-if="!fetching && notAvailable">%i18n:@not-available%</p>
<p :class="$style.empty" v-if="!fetching && empty">%fa:search% {{ '%i18n:not-found%'.split('{}')[0] }}{{ q }}{{ '%i18n:not-found%'.split('{}')[1] }}</p>
<mk-notes ref="timeline" :class="$style.notes" :more="existMore ? more : null"/>
</mk-ui>
</template>
@@ -24,7 +25,8 @@ export default Vue.extend({
moreFetching: false,
existMore: false,
offset: 0,
empty: false
empty: false,
notAvailable: false
};
},
watch: {
@@ -71,7 +73,11 @@ export default Vue.extend({
res(notes);
this.fetching = false;
Progress.done();
}, rej);
}, (e: string) => {
this.fetching = false;
Progress.done();
if (e === 'searching not available') this.notAvailable = true;
});
}));
},
more() {
@@ -130,4 +136,18 @@ export default Vue.extend({
font-size 3em
color #ccc
.notAvailable
display block
margin 0 auto
padding 32px
max-width 400px
text-align center
color #999
> [data-fa]
display block
margin-bottom 16px
font-size 3em
color #ccc
</style>

View File

@@ -1,12 +1,12 @@
<template>
<div class="pptjhabgjtt7kwskbfv4y3uml6fpuhmr">
<h1>Misskeyで共有</h1>
<h1>%i18n:@share-with%</h1>
<div>
<mk-signin v-if="!$store.getters.isSignedIn"/>
<mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/>
<p v-if="posted" class="posted">%fa:check%</p>
</div>
<button v-if="posted" class="ui button" @click="close">閉じる</button>
<button v-if="posted" class="ui button" @click="close">%i18n:@close%</button>
</div>
</template>

View File

@@ -6,7 +6,7 @@
<div :class="$style.loading" v-if="fetching">
<mk-ellipsis-icon/>
</div>
<p :class="$style.empty" v-if="!fetching && empty">%fa:search%{{ q }}に関する投稿は見つかりませんでした</p>
<p :class="$style.empty" v-if="!fetching && empty">%fa:search% {{ '%i18n:no-posts-found%'.split('{}')[0] }}{{ q }}{{ '%i18n:no-posts-found%'.split('{}')[1] }}</p>
<mk-notes ref="timeline" :class="$style.notes" :more="existMore ? more : null"/>
</mk-ui>
</template>

View File

@@ -49,7 +49,8 @@ export default Vue.extend({
add() {
(this as any).apis.input({
title: '%i18n:@username%',
}).then(async username => {
}).then(async (username: string) => {
if (username.startsWith('@')) username = username.slice(1);
const user = await (this as any).api('users/show', {
username
});

View File

@@ -4,7 +4,7 @@
<p class="initializing" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@loading%<mk-ellipsis/></p>
<div v-if="!fetching && users.length > 0">
<router-link v-for="user in users" :to="user | userPage" :key="user.id">
<img :src="`${user.avatarUrl}?thumbnail&size=64`" :alt="user | userName" v-user-preview="user.id"/>
<img :src="user.avatarUrl" :alt="user | userName" v-user-preview="user.id"/>
</router-link>
</div>
<p class="empty" v-if="!fetching && users.length == 0">%i18n:@no-users%</p>

View File

@@ -4,7 +4,7 @@
<p class="initializing" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@loading%<mk-ellipsis/></p>
<div class="stream" v-if="!fetching && images.length > 0">
<div v-for="image in images" class="img"
:style="`background-image: url(${image.url}?thumbnail&size=256)`"
:style="`background-image: url(${image.url})`"
></div>
</div>
<p class="empty" v-if="!fetching && images.length == 0">%i18n:@no-photos%</p>

View File

@@ -1,6 +1,6 @@
<template>
<div class="profile">
<div class="friend-form" v-if="$store.getters.isSignedIn && $store.state.i.id != user.id">
<div class="profile" v-if="$store.getters.isSignedIn">
<div class="friend-form" v-if="$store.state.i.id != user.id">
<mk-follow-button :user="user" size="big"/>
<p class="followed" v-if="user.isFollowed">%i18n:@follows-you%</p>
<p class="stalk" v-if="user.isFollowing">
@@ -9,7 +9,7 @@
</p>
</div>
<div class="action-form">
<button class="mute ui" @click="user.isMuted ? unmute() : mute()">
<button class="mute ui" @click="user.isMuted ? unmute() : mute()" v-if="$store.state.i.id != user.id">
<span v-if="user.isMuted">%fa:eye% %i18n:@unmute%</span>
<span v-if="!user.isMuted">%fa:eye-slash% %i18n:@mute%</span>
</button>

View File

@@ -8,7 +8,7 @@
<div class="body" :style="{ backgroundImage: `url('${ welcomeBgUrl }')` }">
<div class="container">
<div class="info">
<span>%i18n:common.misskey% <b>{{ host }}</b></span>
<span>%i18n:common.name% <b>{{ host }}</b></span>
<span class="stats" v-if="stats">
<span>%fa:user% {{ stats.originalUsersCount | number }}</span>
<span>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</span>
@@ -18,7 +18,7 @@
<div class="about">
<h1 v-if="name">{{ name }}</h1>
<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" alt="Misskey"></h1>
<p class="powerd-by" v-if="name">powerd by <b>Misskey</b></p>
<p class="powerd-by" v-if="name">%i18n:@powered-by-misskey%</p>
<p class="desc" v-html="description || '%i18n:common.about%'"></p>
<a ref="signup" @click="signup">📦 %i18n:@signup%</a>
</div>

View File

@@ -2,7 +2,7 @@
<div class="mkw-notifications">
<mk-widget-container :show-header="!props.compact">
<template slot="header">%fa:R bell%%i18n:@title%</template>
<button slot="func" title="%i18n:@settings%" @click="settings">%fa:cog%</button>
<!-- <button slot="func" title="%i18n:@settings%" @click="settings">%fa:cog%</button> -->
<mk-notifications :class="$style.notifications"/>
</mk-widget-container>

View File

@@ -45,7 +45,7 @@ export default define({
this.save();
},
onKeydown(e) {
if ((e.which == 10 || e.which == 13) && (e.ctrlKey || e.metaKey)) this.post();
if ((e.which == 10 || e.which == 13) && (e.ctrlKey || e.metaKey) && !this.posting && this.text) this.post();
},
post() {
this.posting = true;

View File

@@ -4,7 +4,7 @@
:data-melt="props.design == 2"
>
<div class="banner"
:style="$store.state.i.bannerUrl ? `background-image: url(${$store.state.i.bannerUrl}?thumbnail&size=256)` : ''"
:style="$store.state.i.bannerUrl ? `background-image: url(${$store.state.i.bannerUrl})` : ''"
title="%i18n:@update-banner%"
@click="os.apis.updateBanner"
></div>

View File

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

View File

@@ -1,5 +1,11 @@
<template>
<a class="mk-media-image" :href="image.url" target="_blank" :style="style" :title="image.name"></a>
<div class="qjewsnkgzzxlxtzncydssfbgjibiehcy" v-if="image.isSensitive && hide" @click="hide = false">
<div>
<b>%fa:exclamation-triangle% %i18n:@sensitive%</b>
<span>%i18n:@click-to-show%</span>
</div>
</div>
<a class="gqnyydlzavusgskkfvwvjiattxdzsqlf" v-else :href="image.url" target="_blank" :style="style" :title="image.name"></a>
</template>
<script lang="ts">
@@ -13,11 +19,15 @@ export default Vue.extend({
},
raw: {
default: false
},
hide: {
type: Boolean,
default: true
}
},
computed: {
style(): any {
let url = `url(${this.image.url}?thumbnail)`;
let url = `url(${this.image.url})`;
if (this.$store.state.device.loadRemoteMedia || this.$store.state.device.lightmode) {
url = null;
@@ -35,13 +45,27 @@ export default Vue.extend({
</script>
<style lang="stylus" scoped>
.mk-media-image
.gqnyydlzavusgskkfvwvjiattxdzsqlf
display block
overflow hidden
width 100%
height 100%
background-position center
background-size cover
border-radius 4px
.qjewsnkgzzxlxtzncydssfbgjibiehcy
display flex
justify-content center
align-items center
background #111
color #fff
> div
display table-cell
text-align center
font-size 12px
> b
display block
</style>

View File

@@ -1,28 +1,43 @@
<template>
<a class="mk-media-video"
:href="video.url"
target="_blank"
:style="imageStyle"
:title="video.name">
%fa:R play-circle%
</a>
<div class="icozogqfvdetwohsdglrbswgrejoxbdj" v-if="video.isSensitive && hide" @click="hide = false">
<div>
<b>%fa:exclamation-triangle% %i18n:@sensitive%</b>
<span>%i18n:@click-to-show%</span>
</div>
</div>
<a class="kkjnbbplepmiyuadieoenjgutgcmtsvu" v-else
:href="video.url"
target="_blank"
:style="imageStyle"
:title="video.name">
%fa:R play-circle%
</a>
</template>
<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
props: ['video'],
props: {
video: {
type: Object,
required: true
},
hide: {
type: Boolean,
default: true
}
},
computed: {
imageStyle(): any {
return {
'background-image': `url(${this.video.url}?thumbnail&size=512)`
'background-image': `url(${this.video.url})`
};
}
},})
</script>
<style lang="stylus" scoped>
.mk-media-video
.kkjnbbplepmiyuadieoenjgutgcmtsvu
display flex
justify-content center
align-items center
@@ -33,4 +48,20 @@ export default Vue.extend({
background-size cover
width 100%
height 100%
.icozogqfvdetwohsdglrbswgrejoxbdj
display flex
justify-content center
align-items center
background #111
color #fff
> div
display table-cell
text-align center
font-size 12px
> b
display block
</style>

View File

@@ -2,7 +2,7 @@
<div class="mk-note-card">
<a :href="note | notePage">
<header>
<img :src="`${note.user.avatarUrl}?thumbnail&size=64`" alt="avatar"/><h3>{{ note.user | userName }}</h3>
<img :src="note.user.avatarUrl" alt="avatar"/><h3>{{ note.user | userName }}</h3>
</header>
<div>
{{ text }}

View File

@@ -44,7 +44,7 @@
<mk-media-list :media-list="p.media" :raw="true"/>
</div>
<mk-poll v-if="p.poll" :note="p"/>
<mk-url-preview v-for="url in urls" :url="url" :key="url"/>
<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="true"/>
<a class="location" v-if="p.geo" :href="`http://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
<div class="map" v-if="p.geo" ref="map"></div>
<div class="renote" v-if="p.renote">

View File

@@ -1,47 +1,59 @@
<template>
<div class="mk-post-form">
<header>
<button class="cancel" @click="cancel">%fa:times%</button>
<div>
<span class="text-count" :class="{ over: text.length > 1000 }">{{ 1000 - text.length }}</span>
<span class="geo" v-if="geo">%fa:map-marker-alt%</span>
<button class="submit" :disabled="!canPost" @click="post">{{ submitText }}</button>
</div>
</header>
<div class="form">
<mk-note-preview v-if="reply" :note="reply"/>
<mk-note-preview v-if="renote" :note="renote"/>
<div v-if="visibility == 'specified'" class="visibleUsers">
<span v-for="u in visibleUsers">{{ u | userName }}<a @click="removeVisibleUser(u)">[x]</a></span>
<a @click="addVisibleUser">+%i18n:@add-visible-user%</a>
<header>
<button class="cancel" @click="cancel">%fa:times%</button>
<div>
<span class="text-count" :class="{ over: text.length > 1000 }">{{ 1000 - text.length }}</span>
<span class="geo" v-if="geo">%fa:map-marker-alt%</span>
<button class="submit" :disabled="!canPost" @click="post">{{ submitText }}</button>
</div>
</header>
<div class="form">
<mk-note-preview v-if="reply" :note="reply"/>
<mk-note-preview v-if="renote" :note="renote"/>
<div v-if="visibility == 'specified'" class="visibleUsers">
<span v-for="u in visibleUsers">{{ u | userName }}<a @click="removeVisibleUser(u)">[x]</a></span>
<a @click="addVisibleUser">+%i18n:@add-visible-user%</a>
</div>
<input v-show="useCw" v-model="cw" placeholder="%i18n:@cw-placeholder%">
<textarea v-model="text" ref="text" :disabled="posting" :placeholder="placeholder" v-autocomplete="'text'"></textarea>
<div class="attaches" v-show="files.length != 0">
<x-draggable class="files" :list="files" :options="{ animation: 150 }">
<div class="file" v-for="file in files" :key="file.id">
<div class="img" :style="`background-image: url(${file.url})`" @click="detachMedia(file)"></div>
</div>
</x-draggable>
</div>
<mk-poll-editor v-if="poll" ref="poll" @destroyed="poll = false"/>
<mk-uploader ref="uploader" @uploaded="attachMedia" @change="onChangeUploadings"/>
<footer>
<button class="upload" @click="chooseFile">%fa:upload%</button>
<button class="drive" @click="chooseFileFromDrive">%fa:cloud%</button>
<button class="kao" @click="kao">%fa:R smile%</button>
<button class="poll" @click="poll = true">%fa:chart-pie%</button>
<button class="poll" @click="useCw = !useCw">%fa:eye-slash%</button>
<button class="geo" @click="geo ? removeGeo() : setGeo()">%fa:map-marker-alt%</button>
<button class="visibility" @click="setVisibility" ref="visibilityButton">
<span v-if="visibility === 'public'">%fa:globe%</span>
<span v-if="visibility === 'home'">%fa:home%</span>
<span v-if="visibility === 'followers'">%fa:unlock%</span>
<span v-if="visibility === 'specified'">%fa:envelope%</span>
<span v-if="visibility === 'private'">%fa:lock%</span>
</button>
</footer>
<input ref="file" class="file" type="file" accept="image/*" multiple="multiple" @change="onChangeFile"/>
</div>
<input v-show="useCw" v-model="cw" placeholder="%i18n:@cw-placeholder%">
<textarea v-model="text" ref="text" :disabled="posting" :placeholder="placeholder"></textarea>
<div class="attaches" v-show="files.length != 0">
<x-draggable class="files" :list="files" :options="{ animation: 150 }">
<div class="file" v-for="file in files" :key="file.id">
<div class="img" :style="`background-image: url(${file.url}?thumbnail&size=128)`" @click="detachMedia(file)"></div>
</div>
</x-draggable>
</div>
<mk-poll-editor v-if="poll" ref="poll" @destroyed="poll = false"/>
<mk-uploader ref="uploader" @uploaded="attachMedia" @change="onChangeUploadings"/>
<footer>
<button class="upload" @click="chooseFile">%fa:upload%</button>
<button class="drive" @click="chooseFileFromDrive">%fa:cloud%</button>
<button class="kao" @click="kao">%fa:R smile%</button>
<button class="poll" @click="poll = true">%fa:chart-pie%</button>
<button class="poll" @click="useCw = !useCw">%fa:eye-slash%</button>
<button class="geo" @click="geo ? removeGeo() : setGeo()">%fa:map-marker-alt%</button>
<button class="visibility" @click="setVisibility" ref="visibilityButton">%fa:lock%</button>
</footer>
<input ref="file" class="file" type="file" accept="image/*" multiple="multiple" @change="onChangeFile"/>
</div>
<div class="hashtags" v-if="recentHashtags.length > 0">
<a v-for="tag in recentHashtags.slice(0, 5)" @click="addTag(tag)">#{{ tag }}</a>
</div>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import insertTextAtCursor from 'insert-text-at-cursor';
import * as XDraggable from 'vuedraggable';
import MkVisibilityChooser from '../../../common/views/components/visibility-chooser.vue';
import getKao from '../../../common/scripts/get-kao';
@@ -85,7 +97,8 @@ export default Vue.extend({
visibility: 'public',
visibleUsers: [],
useCw: false,
cw: null
cw: null,
recentHashtags: JSON.parse(localStorage.getItem('hashtags') || '[]')
};
},
@@ -125,7 +138,9 @@ export default Vue.extend({
},
canPost(): boolean {
return !this.posting && (this.text.length != 0 || this.files.length != 0 || this.poll || this.renote);
return !this.posting &&
(1 <= this.text.length || 1 <= this.files.length || this.poll || this.renote) &&
(this.text.trim().length <= 1000);
}
},
@@ -161,6 +176,10 @@ export default Vue.extend({
},
methods: {
addTag(tag: string) {
insertTextAtCursor(this.$refs.text, ` #${tag} `);
},
focus() {
(this.$refs.text as any).focus();
},
@@ -210,8 +229,8 @@ export default Vue.extend({
}, err => {
alert('%i18n:@error%: ' + err.message);
}, {
enableHighAccuracy: true
});
enableHighAccuracy: true
});
},
removeGeo() {
@@ -281,6 +300,12 @@ export default Vue.extend({
}).catch(err => {
this.posting = false;
});
if (this.text && this.text != '') {
const hashtags = parse(this.text).filter(x => x.type == 'hashtag').map(x => x.hashtag);
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], [])));
}
},
cancel() {
@@ -302,146 +327,156 @@ root(isDark)
max-width 500px
width calc(100% - 16px)
margin 8px auto
background isDark ? #282C37 : #fff
border-radius 8px
box-shadow 0 0 2px rgba(#000, 0.1)
@media (min-width 500px)
margin 16px auto
width calc(100% - 32px)
box-shadow 0 8px 32px rgba(#000, 0.1)
> .form
box-shadow 0 8px 32px rgba(#000, 0.1)
@media (min-width 600px)
margin 32px auto
> header
z-index 1000
height 50px
box-shadow 0 1px 0 0 isDark ? rgba(#000, 0.2) : rgba(#000, 0.1)
> .cancel
padding 0
width 50px
line-height 50px
font-size 24px
color isDark ? #9baec8 : #555
> div
position absolute
top 0
right 0
color #657786
> .text-count
line-height 50px
> .geo
margin 0 8px
line-height 50px
> .submit
margin 8px
padding 0 16px
line-height 34px
vertical-align bottom
color $theme-color-foreground
background $theme-color
border-radius 4px
&:disabled
opacity 0.7
> .form
max-width 500px
margin 0 auto
background isDark ? #282C37 : #fff
border-radius 8px
box-shadow 0 0 2px rgba(#000, 0.1)
> .mk-note-preview
padding 16px
> .visibleUsers
margin-bottom 8px
font-size 14px
> span
margin-right 16px
color isDark ? #fff : #666
> input
z-index 1
> input
> textarea
display block
padding 12px
margin 0
width 100%
font-size 16px
color isDark ? #fff : #333
background isDark ? #191d23 : #fff
border none
border-radius 0
> header
z-index 1000
height 50px
box-shadow 0 1px 0 0 isDark ? rgba(#000, 0.2) : rgba(#000, 0.1)
&:disabled
opacity 0.5
> textarea
max-width 100%
min-width 100%
min-height 80px
> .attaches
> .files
display block
margin 0
padding 4px
list-style none
&:after
content ""
display block
clear both
> .file
display block
float left
margin 0
padding 0
border solid 4px transparent
> .img
width 64px
height 64px
background-size cover
background-position center center
> .mk-uploader
margin 8px 0 0 0
padding 8px
> .file
display none
> footer
white-space nowrap
overflow auto
-webkit-overflow-scrolling touch
overflow-scrolling touch
> *
display inline-block
> .cancel
padding 0
margin 0
width 48px
height 48px
font-size 20px
width 50px
line-height 50px
font-size 24px
color isDark ? #9baec8 : #555
> div
position absolute
top 0
right 0
color #657786
background transparent
outline none
> .text-count
line-height 50px
> .geo
margin 0 8px
line-height 50px
> .submit
margin 8px
padding 0 16px
line-height 34px
vertical-align bottom
color $theme-color-foreground
background $theme-color
border-radius 4px
&:disabled
opacity 0.7
> .form
max-width 500px
margin 0 auto
> .mk-note-preview
padding 16px
> .visibleUsers
margin 5px
font-size 14px
> span
margin-right 16px
color isDark ? #fff : #666
> input
z-index 1
> input
> textarea
display block
padding 12px
margin 0
width 100%
font-size 16px
color isDark ? #fff : #333
background isDark ? #191d23 : #fff
border none
border-radius 0
box-shadow none
box-shadow 0 1px 0 0 isDark ? rgba(#000, 0.2) : rgba(#000, 0.1)
&:disabled
opacity 0.5
> textarea
max-width 100%
min-width 100%
min-height 80px
> .attaches
> .files
display block
margin 0
padding 4px
list-style none
&:after
content ""
display block
clear both
> .file
display block
float left
margin 0
padding 0
border solid 4px transparent
> .img
width 64px
height 64px
background-size cover
background-position center center
> .mk-uploader
margin 8px 0 0 0
padding 8px
> .file
display none
> footer
white-space nowrap
overflow auto
-webkit-overflow-scrolling touch
overflow-scrolling touch
> *
display inline-block
padding 0
margin 0
width 48px
height 48px
font-size 20px
color #657786
background transparent
outline none
border none
border-radius 0
box-shadow none
> .hashtags
margin 8px
> *
margin-right 8px
.mk-post-form[data-darkmode]
root(true)

View File

@@ -3,12 +3,12 @@
<mk-special-message/>
<div class="main" ref="main">
<div class="backdrop"></div>
<p ref="welcomeback" v-if="$store.getters.isSignedIn">おかえりなさい<b>{{ $store.state.i | userName }}</b>さん</p>
<p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>さん</p>
<div class="content" ref="mainContainer">
<button class="nav" @click="$parent.isDrawerOpening = true">%fa:bars%</button>
<template v-if="hasUnreadNotification || hasUnreadMessagingMessage || hasGameInvitation">%fa:circle%</template>
<h1>
<slot>Misskey</slot>
<slot>%i18n:common.name%</slot>
</h1>
<slot name="func"></slot>
</div>

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