Compare commits

...

455 Commits

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

@ -2,7 +2,7 @@
<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>
@ -144,23 +144,28 @@ export default Vue.extend({
});
}
} else if (this.type == 'hashtag') {
const cacheKey = 'autocomplete:hashtag:' + this.q;
const cache = sessionStorage.getItem(cacheKey);
if (cache) {
const hashtags = JSON.parse(cache);
this.hashtags = hashtags;
if (this.q == null || this.q == '') {
this.hashtags = JSON.parse(localStorage.getItem('hashtags') || '[]');
this.fetching = false;
} else {
(this as any).api('hashtags/search', {
query: this.q,
limit: 30
}).then(hashtags => {
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));
});
// キャッシュ
sessionStorage.setItem(cacheKey, JSON.stringify(hashtags));
});
}
}
} else if (this.type == 'emoji') {
const matched = [];
@ -259,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
@ -276,7 +282,8 @@ root(isDark)
list-style none
> li
display block
display flex
align-items center
padding 4px 12px
white-space nowrap
overflow hidden
@ -287,6 +294,10 @@ root(isDark)
&, *
user-select none
*
overflow hidden
text-overflow ellipsis
&:hover
background isDark ? rgba(#fff, 0.1) : rgba(#000, 0.1)
@ -305,7 +316,6 @@ root(isDark)
> .users > li
.avatar
vertical-align middle
min-width 28px
min-height 28px
max-width 28px
@ -314,20 +324,15 @@ 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
vertical-align middle
margin 0 8px 0 0
color isDark ? rgba(#fff, 0.8) : rgba(#000, 0.8)
> .emojis > li

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) {
@ -68,22 +69,25 @@ class Autocomplete {
*/
private onInput() {
const caretPos = this.textarea.selectionStart;
const text = this.text.substr(0, caretPos);
const text = this.text.substr(0, caretPos).split('\n').pop();
const mentionIndex = text.lastIndexOf('@');
const hashtagIndex = text.lastIndexOf('#');
const emojiIndex = text.lastIndexOf(':');
const start = Math.min(
mentionIndex == -1 ? Infinity : mentionIndex,
hashtagIndex == -1 ? Infinity : hashtagIndex,
emojiIndex == -1 ? Infinity : emojiIndex);
const max = Math.max(
mentionIndex,
hashtagIndex,
emojiIndex);
if (start == Infinity) return;
if (max == -1) {
this.close();
return;
}
const isMention = mentionIndex == start;
const isHashtag = hashtagIndex == start;
const isEmoji = emojiIndex == start;
const isMention = mentionIndex != -1;
const isHashtag = hashtagIndex != -1;
const isEmoji = emojiIndex != -1;
let opened = false;
@ -95,15 +99,15 @@ class Autocomplete {
}
}
if (isHashtag || opened == false) {
if (isHashtag && opened == false) {
const hashtag = text.substr(hashtagIndex + 1);
if (hashtag != '' && !hashtag.includes(' ') && !hashtag.includes('\n')) {
if (!hashtag.includes(' ')) {
this.open('hashtag', hashtag);
opened = true;
}
}
if (isEmoji || opened == false) {
if (isEmoji && opened == false) {
const emoji = text.substr(emojiIndex + 1);
if (emoji != '' && emoji.match(/^[\+\-a-z0-9_]+$/)) {
this.open('emoji', emoji);
@ -184,13 +188,15 @@ 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') {

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,7 +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 % (year % 25 ? 4 : 16));
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" 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}?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>

View File

@ -10,7 +10,7 @@
<transition name="nav">
<div class="body" v-if="isOpen">
<router-link class="me" v-if="$store.getters.isSignedIn" :to="`/@${$store.state.i.username}`">
<img class="avatar" :src="`${$store.state.i.avatarUrl}?thumbnail&size=128`" alt="avatar"/>
<img class="avatar" :src="$store.state.i.avatarUrl" alt="avatar"/>
<p class="name">{{ $store.state.i | userName }}</p>
</router-link>
<div class="links">

View File

@ -1,6 +1,6 @@
<template>
<div class="mk-user-card">
<header :style="user.bannerUrl ? `background-image: url(${user.bannerUrl}?thumbnail&size=1024)` : ''">
<header :style="user.bannerUrl ? `background-image: url(${user.bannerUrl})` : ''">
<mk-avatar class="avatar" :user="user"/>
</header>
<a class="name" :href="user | userPage" target="_blank">{{ user | userName }}</a>

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