Compare commits

...

919 Commits

Author SHA1 Message Date
ba38f64353 8.23.0 2018-09-03 23:25:35 +09:00
db3ae303cb Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-09-03 23:23:55 +09:00
66f3a155e6 なんかもうめっちゃやった 2018-09-03 23:23:50 +09:00
09843a409b Fix typo: Wroker -> Worker (#2597) 2018-09-03 18:58:26 +09:00
d94b3757be Merge branch 'master' into develop 2018-09-02 22:41:10 +09:00
13e822cba6 Trim text
Closes #2595
2018-09-02 22:40:27 +09:00
c57bf87f52 Make poll button togglable (#2592) 2018-09-02 21:39:47 +09:00
99fbd60265 Improve url visual (#2591)
* Use string interpolation

* improve url visual

* fix lint
2018-09-02 20:19:59 +09:00
ea9b48db3c Merge branch 'develop' 2018-09-02 19:27:33 +09:00
c145c994a9 8.22.0 2018-09-02 19:27:09 +09:00
d033998b56 Update README.md [AUTOGEN] (#2586) 2018-09-02 19:10:12 +09:00
3136c714bf Fix users/list/update API (#2590) 2018-09-02 19:03:00 +09:00
c0ee134f19 Add users/lists/delete API (#2589) 2018-09-02 18:59:42 +09:00
d15ebe5732 Improve usability 2018-09-02 18:27:43 +09:00
ef630195fa モバイルのドライブダイアログがおかしいのを修正 & ダークモード対応 2018-09-02 18:23:47 +09:00
e31921151e Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-09-02 17:56:39 +09:00
f94992abbe 🎨 2018-09-02 17:56:20 +09:00
b00060c09c Clean up 2018-09-02 17:44:49 +09:00
f6217d96d2 add an endpoint users/lists/update (#2585)
* add an endpoint users/lists/update

* add meta params

* fix packing
2018-09-02 11:25:32 +09:00
3a6947c7ed Update README.md [AUTOGEN] 2018-09-02 09:45:28 +09:00
0fb528ddf8 Merge branch 'develop' 2018-09-02 09:34:26 +09:00
14c03f226d 8.21.1 2018-09-02 09:33:55 +09:00
4f0d844b43 Remove needless properties 2018-09-02 09:31:11 +09:00
b93395fc4c Update README.md [AUTOGEN] 2018-09-02 09:05:34 +09:00
34eacb7e2d Update README.md [AUTOGEN] 2018-09-02 08:03:27 +09:00
0177023ead Use Tombstone for Delete 2018-09-02 08:02:43 +09:00
a4678e45de Not check dependencies 2018-09-02 08:02:10 +09:00
f24869625e fix 2018-09-02 01:10:55 +09:00
01beb705a2 8.21.0 2018-09-02 00:07:23 +09:00
ce28c70c35 Clean up 2018-09-01 23:57:05 +09:00
5e0f5c31e7 Merge branch 'string-interpolation' into develop 2018-09-01 23:30:16 +09:00
b28dd4be52 Use typeof 2018-09-01 23:29:22 +09:00
291beb45fc Use string interpolation 2018-09-01 23:12:51 +09:00
ffb345ccb5 fix #2315 (#2339)
* improve MFM to html

* improve html to MFM

* missing semicolon

* missing semicolon

* fix html to MFM

タグのリンクは解除するように

* fix bug

* misssing semicolon

* Update html-to-mfm.ts

* Update html-to-mfm.ts
2018-09-01 22:45:27 +09:00
d2abe2cd81 Merge pull request #2573 from syuilo/refactor-mfm
Refactor mfm component
2018-09-01 22:39:30 +09:00
acffc3e522 Refactor mfm component 2018-09-01 22:38:50 +09:00
0962e62b8c Merge pull request #2572 from syuilo/refactor-reversi-game
Refactor reversi game
2018-09-01 22:20:32 +09:00
91ebd310b7 Refactor reversi game 2018-09-01 22:18:07 +09:00
2974c74b4e Merge pull request #2571 from syuilo/refactor-reversi-engine
Refactor reversi engine
2018-09-01 22:11:33 +09:00
3d24112d2d Refactor reversi engine 2018-09-01 22:09:54 +09:00
4a977cd523 Update CHANGELOG.md 2018-09-01 21:42:07 +09:00
4b1886990f Merge pull request #2570 from mei23/mei-0901-update2b
Implement ActivityPub Update(Person)
2018-09-01 21:38:49 +09:00
f3499b787c 8.20.0 2018-09-01 20:49:06 +09:00
5209a584a2 Better post form 2018-09-01 20:47:49 +09:00
57a63d38aa Send Update activity 2018-09-01 20:23:01 +09:00
3efffbcf22 Receive Update activity 2018-09-01 20:23:01 +09:00
15eaebe522 updatePersonで再割り当てを考慮する 2018-09-01 20:23:01 +09:00
eee98358ac Add missing updatePerson properties 2018-09-01 20:23:01 +09:00
795fc5e7bc Set Person.updatedAt at first 2018-09-01 20:23:01 +09:00
70ac668474 Merge pull request #2568 from syuilo/fix-drop-index
Fix drop index
2018-09-01 19:13:49 +09:00
1004e0d6e8 Merge pull request #2567 from syuilo/update-setup-docs
Update setup docs
2018-09-01 19:13:22 +09:00
52aa64fcb6 Fix drop index 2018-09-01 19:12:07 +09:00
7860d97a10 Add type annotation 2018-09-01 18:47:02 +09:00
409b37b271 Update setup docs 2018-09-01 18:42:46 +09:00
ad9b9964fa Update contribution guide 2018-09-01 18:15:25 +09:00
d2b5276f43 Merge pull request #2565 from syuilo/contribution-guide
Update contribution guide
2018-09-01 18:06:19 +09:00
7204e2a84c Update contribution guide 2018-09-01 18:05:13 +09:00
1377fa3332 Merge pull request #2564 from syuilo/readme
Update README.md
2018-09-01 17:28:13 +09:00
bf087bfccf Update README.md 2018-09-01 17:27:33 +09:00
e846e3d571 Update .npmrc 2018-09-01 16:48:22 +09:00
d646e62888 Merge pull request #2559 from acid-chicken/patch-4
Update autogen.sh
2018-09-01 16:34:57 +09:00
c008154d18 8.19.1 2018-09-01 16:26:31 +09:00
29bd4de26a Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-09-01 16:23:40 +09:00
7559b8da6c ✌️ 2018-09-01 16:23:23 +09:00
35218e84fc Merge pull request #2561 from syuilo/refactor-lang-loader
Refactor languages loader
2018-09-01 16:13:50 +09:00
2c135fa2f6 Not fallback to native locale 2018-09-01 16:12:50 +09:00
21da6bd047 Refactor languages loader 2018-09-01 16:05:10 +09:00
f1d65a66b4 Fix bug 2018-09-01 15:38:03 +09:00
63e2dbbb0d Fix bug 2018-09-01 15:22:28 +09:00
a228c522f1 Update autogen.sh 2018-09-01 14:54:40 +09:00
8ee771ca77 8.19.0 2018-09-01 13:12:52 +09:00
488bbc9651 DeckでもURLプレビュー 2018-09-01 13:08:43 +09:00
29b2bdf613 Fix bug 2018-09-01 12:58:04 +09:00
7e35048829 8.18.0 2018-09-01 12:06:15 +09:00
4d6b9f62e5 モバイルのドライブをダークモード対応した 2018-09-01 12:05:25 +09:00
359da9a5a1 8.17.0 2018-09-01 09:44:15 +09:00
2a235151ed #2236 #2237 2018-09-01 09:42:25 +09:00
9e318d5ebc Fix bug 2018-09-01 09:29:59 +09:00
6819eb3b4d Improve usability 2018-09-01 09:16:25 +09:00
4c6fb60dd2 #2541 2018-09-01 08:13:18 +09:00
bffb9a5c45 #2447 #1958 2018-09-01 08:09:21 +09:00
dca4053a67 Merge branch 'master' into develop 2018-09-01 07:33:34 +09:00
fd07f00d14 #2551 2018-09-01 07:33:04 +09:00
bbeb6d534e Merge pull request #2557 from Hiramiya/darkmode
Fix darkmode on followers-you-may-know
2018-09-01 07:15:22 +09:00
63b8af4531 Fix darkmode on followers-you-may-know 2018-08-31 20:42:20 +01:00
e89e76076a Merge pull request #2555 from mei23/mei-0831-vali3
HTTP Signature ホスト検証エラーメッセージの調整
2018-08-31 18:07:08 +09:00
18b4f74cdb Improve validation error message 2018-08-31 16:46:24 +09:00
e53dde385c Merge pull request #2549 from syuilo/greenkeeper/@types/node-10.9.4
Update @types/node to the latest version 🚀
2018-08-31 07:00:46 +09:00
6a7a4c20e6 Merge pull request #2550 from Hiramiya/fix-invalidfiletype
Fix broken invalid-filetype behaviour
2018-08-31 07:00:31 +09:00
6434dac04d Add return for invalid filetypes, fixes wrong behaviour 2018-08-30 21:04:20 +01:00
5deb1bf40e Merge remote-tracking branch 'upstream/develop' into develop 2018-08-30 21:03:00 +01:00
9cd334576c fix(package): update @types/node to version 10.9.4 2018-08-30 16:41:33 +00:00
ae36bf301a Merge branch 'develop' 2018-08-30 22:16:04 +09:00
6a5a9de795 8.16.0 2018-08-30 22:15:41 +09:00
f0abc46429 開発モードで警告を表示するようにするなど 2018-08-30 22:10:29 +09:00
9fd4f5ee0a Merge pull request #2542 from syuilo/l10n_develop
New Crowdin translations
2018-08-30 21:44:00 +09:00
5e202c3def Merge pull request #2547 from mei23/mei-0830-httpsignature
HTTP Signature 周辺の修正
2018-08-30 21:11:43 +09:00
48223c1c76 Validate host in activity 2018-08-30 20:53:41 +09:00
dddf7834cc Add host/digest to HTTP signature 2018-08-30 20:52:35 +09:00
66ef30b2cc New translations ja-JP.yml (Japanese, Kansai) 2018-08-30 18:38:30 +09:00
f802fe57b9 Merge pull request #2539 from syuilo/greenkeeper/@types/websocket-0.0.40
Update @types/websocket to the latest version 🚀
2018-08-30 09:28:59 +09:00
ead884ce89 Merge pull request #2538 from syuilo/greenkeeper/@types/uuid-3.4.4
Update @types/uuid to the latest version 🚀
2018-08-30 09:28:50 +09:00
6a87e9f690 fix(package): update @types/websocket to version 0.0.40 2018-08-30 00:18:42 +00:00
5b943722fb fix(package): update @types/uuid to version 3.4.4 2018-08-30 00:16:12 +00:00
4d92b14308 Merge pull request #2527 from syuilo/l10n_develop
New Crowdin translations
2018-08-30 08:44:33 +09:00
167c96d14e New translations ja-JP.yml (English) 2018-08-30 04:01:04 +09:00
8a42373753 Merge pull request #2534 from syuilo/greenkeeper/summaly-2.2.0
Update summaly to the latest version 🚀
2018-08-30 03:57:44 +09:00
c1751a9b84 Merge pull request #2535 from syuilo/greenkeeper/vue-js-modal-1.3.24
Update vue-js-modal to the latest version 🚀
2018-08-30 03:57:37 +09:00
4e11da98d9 Merge branch 'develop' into l10n_develop 2018-08-30 03:56:51 +09:00
1b7d98c17e 🎨 2018-08-30 03:56:04 +09:00
3038434712 Fix bug 2018-08-30 03:53:26 +09:00
117ab633a1 Improve API 2018-08-30 03:49:52 +09:00
e50fa4762d Clean up 2018-08-30 03:37:23 +09:00
aed1e839ba Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-08-30 03:32:45 +09:00
00f2974a2a Refactoring 2018-08-30 03:32:42 +09:00
073c96af47 fix(package): update vue-js-modal to version 1.3.24 2018-08-29 14:02:49 +00:00
71da498364 New translations ja-JP.yml (French) 2018-08-29 22:04:54 +09:00
8e9c11f160 New translations ja-JP.yml (French) 2018-08-29 21:54:19 +09:00
98f6b23249 fix(package): update summaly to version 2.2.0 2018-08-29 12:27:33 +00:00
89288d8e0d Merge pull request #2530 from mei23/mei-0829-apvalidate
ActivityPub Personのホストの検証等の修正
2018-08-29 17:32:33 +09:00
724121eeaa New translations ja-JP.yml (Japanese, Kansai) 2018-08-29 17:32:12 +09:00
edee95a5ca New translations ja-JP.yml (Spanish) 2018-08-29 17:32:08 +09:00
0c2361bf72 New translations ja-JP.yml (Russian) 2018-08-29 17:32:05 +09:00
92f8dc48e3 New translations ja-JP.yml (Portuguese) 2018-08-29 17:32:02 +09:00
06a0fff4b0 New translations ja-JP.yml (Polish) 2018-08-29 17:31:58 +09:00
d55e4621ac New translations ja-JP.yml (Korean) 2018-08-29 17:31:55 +09:00
bc6bda3714 New translations ja-JP.yml (Italian) 2018-08-29 17:31:53 +09:00
d3aafd3f13 New translations ja-JP.yml (German) 2018-08-29 17:31:50 +09:00
1a508de1c4 New translations ja-JP.yml (French) 2018-08-29 17:31:46 +09:00
768cc0aff5 New translations ja-JP.yml (English) 2018-08-29 17:31:42 +09:00
67f4c1f429 New translations ja-JP.yml (Chinese Simplified) 2018-08-29 17:31:39 +09:00
2d4ceec0a5 New translations ja-JP.yml (Catalan) 2018-08-29 17:31:35 +09:00
3e2a0cd89a Add missing l10n 2018-08-29 17:20:51 +09:00
d1f4f2f663 New translations ja-JP.yml (French) 2018-08-29 17:11:12 +09:00
6e3bf26cad Validate host on Person 2018-08-29 16:10:03 +09:00
672377f116 Merge pull request #2524 from l2dy/https-maps
Use https:// for maps.google.com links
2018-08-29 14:46:09 +09:00
80ee5afba7 Merge pull request #2523 from syuilo/l10n_develop
New Crowdin translations
2018-08-29 13:35:37 +09:00
f55fcd3305 Use https:// for maps.google.com links 2018-08-29 04:34:53 +00:00
64fc14ade5 New translations ja-JP.yml (English) 2018-08-29 13:31:12 +09:00
807f245657 Merge pull request #2522 from syuilo/greenkeeper/@types/node-10.9.3
Update @types/node to the latest version 🚀
2018-08-29 12:50:11 +09:00
62f966dc27 fix(package): update @types/node to version 10.9.3 2018-08-29 02:19:40 +00:00
09f97bf7a7 Merge pull request #2521 from syuilo/greenkeeper/systeminformation-3.44.2
fix(package): update systeminformation to version 3.44.2
2018-08-29 10:35:14 +09:00
69460e494c Merge pull request #2520 from syuilo/greenkeeper/vue-js-modal-1.3.23
fix(package): update vue-js-modal to version 1.3.23
2018-08-29 10:34:53 +09:00
9bef723346 fix(package): update systeminformation to version 3.44.2
Closes #2519
2018-08-29 01:08:49 +00:00
b99eabb2cf fix(package): update vue-js-modal to version 1.3.23
Closes #2517
2018-08-29 00:57:08 +00:00
17be3f3d0f Merge pull request #2470 from syuilo/l10n_develop
New Crowdin translations
2018-08-29 08:41:27 +09:00
05fe2cb173 New translations ja-JP.yml (English) 2018-08-29 07:21:30 +09:00
428be14c27 New translations ja-JP.yml (Japanese, Kansai) 2018-08-29 07:11:58 +09:00
a04fa8441e New translations ja-JP.yml (Spanish) 2018-08-29 07:11:55 +09:00
7bcfa84e1a New translations ja-JP.yml (Russian) 2018-08-29 07:11:53 +09:00
1cc5986df3 New translations ja-JP.yml (Portuguese) 2018-08-29 07:11:50 +09:00
7aa5d03875 New translations ja-JP.yml (Polish) 2018-08-29 07:11:48 +09:00
a59fbfac19 New translations ja-JP.yml (Korean) 2018-08-29 07:11:46 +09:00
677f9ee8f6 New translations ja-JP.yml (Italian) 2018-08-29 07:11:43 +09:00
f4a16be2b4 New translations ja-JP.yml (German) 2018-08-29 07:11:41 +09:00
46b967ee4a New translations ja-JP.yml (French) 2018-08-29 07:11:39 +09:00
78568accd1 New translations ja-JP.yml (English) 2018-08-29 07:11:36 +09:00
e9f20a0fad New translations ja-JP.yml (Chinese Simplified) 2018-08-29 07:11:34 +09:00
bbd9894e6b New translations ja-JP.yml (Catalan) 2018-08-29 07:11:31 +09:00
f92745e381 デフォルトで時計を表示するように 2018-08-29 07:10:42 +09:00
2762b78bcc モバイルでもサウンドの設定を行えるように 2018-08-29 07:05:56 +09:00
2d4ed2c8c2 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-08-29 07:00:02 +09:00
2de8e8c358 Fix bug 2018-08-29 06:59:43 +09:00
eb7b638db3 Merge pull request #2516 from syuilo/greenkeeper/@types/elasticsearch-5.0.26
Update @types/elasticsearch to the latest version 🚀
2018-08-29 06:52:00 +09:00
321e851b26 Fix bug 2018-08-29 06:46:05 +09:00
f8340be3bf fix(package): update @types/elasticsearch to version 5.0.26 2018-08-28 20:36:04 +00:00
02341ceb6e Merge pull request #2512 from Hiramiya/avatarbannerfiletypes
Fix linting errors
2018-08-28 18:08:22 +09:00
3dcdd7a5d7 Fix linting errors 2018-08-28 09:44:49 +01:00
85188b5de2 Merge pull request #3 from syuilo/develop
match main repo
2018-08-28 09:08:15 +01:00
b721d049c6 Merge pull request #2484 from syuilo/greenkeeper/nan-2.11.0
Update nan to the latest version 🚀
2018-08-28 08:09:41 +09:00
e518fff944 Merge pull request #2483 from syuilo/greenkeeper/systeminformation-3.44.0
Update systeminformation to the latest version 🚀
2018-08-28 08:09:22 +09:00
048128c7e1 Merge pull request #2510 from syuilo/greenkeeper/style-loader-0.23.0
Update style-loader to the latest version 🚀
2018-08-28 08:09:09 +09:00
d3717449c2 Merge pull request #2508 from syuilo/greenkeeper/vue-js-modal-1.3.20
Update vue-js-modal to the latest version 🚀
2018-08-28 08:08:54 +09:00
04de6218d3 Merge pull request #2495 from syuilo/greenkeeper/vue-loader-15.4.1
Update vue-loader to the latest version 🚀
2018-08-28 08:08:46 +09:00
0082473d78 Merge pull request #2502 from acid-chicken/patch-autogen
[AUTOMATED] Update README.md
2018-08-28 08:07:54 +09:00
77baca8e6e Merge pull request #2511 from Hiramiya/avatarbannerfiletypes
Prevent setting non-image files as avatar/banner
2018-08-28 07:41:50 +09:00
6a7169630c Merge pull request #2509 from Hiramiya/updateavatarfix
Update update-avatar.ts to match update-banner.ts behaviour
2018-08-28 07:39:35 +09:00
6b2089e043 Merge pull request #2507 from Hiramiya/darkmode
Fix various darkmode elements on user pages
2018-08-28 07:38:49 +09:00
14ad3af30d Add "invalid-filetype" translation 2018-08-27 20:04:39 +01:00
e7e6d833b7 Restrict banner filetypes 2018-08-27 20:03:48 +01:00
d1a9561135 Restrict avatar filetypes 2018-08-27 20:03:28 +01:00
c7bda6f908 fix(package): update style-loader to version 0.23.0 2018-08-27 18:05:30 +00:00
ef43721e32 Update update-avatar.ts 2018-08-27 17:29:21 +01:00
ba6cd874aa fix(package): update vue-js-modal to version 1.3.20 2018-08-27 15:41:07 +00:00
f283d2423f Fix border-radius on friends 2018-08-27 16:06:31 +01:00
c07f668f14 Fix border-radius on photos 2018-08-27 16:06:04 +01:00
596524a63c Merge pull request #1 from Hiramiya/develop
Changes to darkmode on user page
2018-08-27 15:58:22 +01:00
975e4dd285 Remove temp border change 2018-08-27 15:51:31 +01:00
09b05c8552 DarkMode user page bottom nav 2018-08-27 15:46:27 +01:00
530ee6f80e DarkMode User Photos 2018-08-27 15:45:35 +01:00
6ad31dca76 DarkMode user friends 2018-08-27 15:43:19 +01:00
d423f8ae57 Merge branch 'develop' 2018-08-27 04:56:57 +09:00
8e5ce7f8e3 8.15.0 2018-08-27 04:56:38 +09:00
33dfc21e4b Fix bug 2018-08-27 04:50:52 +09:00
3266f3948a Update README.md [AUTOGEN] 2018-08-26 17:55:06 +09:00
7259887124 Merge pull request #2500 from syuilo/delete-script
Remove delete-invalid-users.js
2018-08-26 14:30:24 +09:00
800de03187 Remove delete-invalid-users.js 2018-08-26 14:29:12 +09:00
78ba305e5c Merge pull request #2498 from syuilo/ends-with
Use endsWith for readability
2018-08-26 14:03:06 +09:00
bfed1475bb Use endsWith for readability 2018-08-26 13:55:39 +09:00
3281d263c4 New translations ja-JP.yml (Portuguese) 2018-08-26 13:50:55 +09:00
a9a1798e3a New translations ja-JP.yml (Portuguese) 2018-08-26 13:40:51 +09:00
6806eafaed fix(package): update vue-loader to version 15.4.1 2018-08-26 02:26:22 +00:00
3e20ea5b2e Merge pull request #2494 from xps2/donation-from-config
donation、configのmaintainerを参照するよう変更
2018-08-26 10:32:41 +09:00
3f30a69b8b fix 2018-08-26 10:29:24 +09:00
2d2e16d9f6 donation、configのmaintainerを参照するよう変更 2018-08-26 10:14:43 +09:00
9c32118b77 Merge branch 'develop' 2018-08-26 02:33:29 +09:00
ecf2eb4738 8.14.0 2018-08-26 02:33:04 +09:00
3d754ea7eb New translations ja-JP.yml (Japanese, Kansai) 2018-08-26 02:21:08 +09:00
f755f24560 New translations ja-JP.yml (Japanese, Kansai) 2018-08-26 02:11:06 +09:00
699879d95d Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-08-26 02:05:46 +09:00
6677508ba7 Fix #2428 2018-08-26 02:05:42 +09:00
58da32358b Fix indent 2018-08-26 02:05:13 +09:00
491bc75095 New translations ja-JP.yml (Japanese, Kansai) 2018-08-26 02:01:04 +09:00
b9eafeee3f Merge pull request #2486 from syuilo/fix-fa-pen
Use pencil-alt instead of pen
2018-08-26 01:57:39 +09:00
c56ff5d88d Add sunnaly proxy option 2018-08-26 01:56:21 +09:00
f5dd83a44a New translations ja-JP.yml (Japanese, Kansai) 2018-08-26 01:51:08 +09:00
9a295a85b1 Merge pull request #2491 from xps2/fix-repository-feedback-url
リポジトリとフィードバックのURLが設定ファイルから反映されないのを修正
2018-08-26 01:23:41 +09:00
8e06d93c31 New translations ja-JP.yml (Japanese, Kansai) 2018-08-26 01:21:31 +09:00
1a42200137 New translations ja-JP.yml (Spanish) 2018-08-26 01:21:29 +09:00
bbf33d2475 New translations ja-JP.yml (Russian) 2018-08-26 01:21:27 +09:00
93203ebfd1 New translations ja-JP.yml (Portuguese) 2018-08-26 01:21:24 +09:00
67053eeaa0 New translations ja-JP.yml (Polish) 2018-08-26 01:21:22 +09:00
43baf4ad6a New translations ja-JP.yml (Korean) 2018-08-26 01:21:20 +09:00
5b2a36e47b New translations ja-JP.yml (Italian) 2018-08-26 01:21:18 +09:00
2a0862a24e New translations ja-JP.yml (German) 2018-08-26 01:21:16 +09:00
ce31027b2e New translations ja-JP.yml (French) 2018-08-26 01:21:13 +09:00
3f66c77821 New translations ja-JP.yml (English) 2018-08-26 01:21:11 +09:00
bc713656ec New translations ja-JP.yml (Chinese Simplified) 2018-08-26 01:21:09 +09:00
46d89faebc New translations ja-JP.yml (Catalan) 2018-08-26 01:21:07 +09:00
7135c0e308 Merge pull request #2487 from syuilo/clock-visibility-option
Make clock on header optional
2018-08-26 01:20:29 +09:00
1962bfb4a5 Merge pull request #2489 from mei23/mei-0825-apresolvekey
リモートユーザー解決時のURIがまちがっているのを修正
2018-08-26 01:19:07 +09:00
a1fca2550e Merge pull request #2488 from syuilo/refactor-string
Use startsWith and endsWith for readability
2018-08-26 01:18:34 +09:00
c17f99b7a5 New translations ja-JP.yml (Japanese, Kansai) 2018-08-26 01:11:06 +09:00
7cd76d60c2 New translations ja-JP.yml (Japanese, Kansai) 2018-08-26 01:01:41 +09:00
fa7c8cfe5b リポジトリとフィードバックのURLが設定ファイルから反映されないのを修正 2018-08-26 01:00:13 +09:00
05fb8d35af New translations ja-JP.yml (Japanese, Kansai) 2018-08-26 00:51:24 +09:00
eaa827e2d9 New translations ja-JP.yml (Japanese, Kansai) 2018-08-26 00:41:40 +09:00
f365ea4585 New translations ja-JP.yml (Japanese, Kansai) 2018-08-26 00:34:44 +09:00
5d2e43ffb9 New translations ja-JP.yml (Japanese, Kansai) 2018-08-26 00:21:08 +09:00
e9a97ed99a New translations ja-JP.yml (Japanese, Kansai) 2018-08-26 00:11:42 +09:00
fe98102600 New translations ja-JP.yml (Japanese, Kansai) 2018-08-26 00:01:48 +09:00
aae8845664 New translations ja-JP.yml (Japanese, Kansai) 2018-08-25 23:53:11 +09:00
81a4388ecc New translations ja-JP.yml (Japanese, Kansai) 2018-08-25 23:41:12 +09:00
be3ab026fd New translations ja-JP.yml (Japanese, Kansai) 2018-08-25 23:31:03 +09:00
f92f9d8cb0 New translations ja-JP.yml (Japanese, Kansai) 2018-08-25 23:11:12 +09:00
08a59591ae Use startsWith and endsWith for readability 2018-08-25 22:42:26 +09:00
a09a244242 Fix resolvePerson key 2018-08-25 22:25:40 +09:00
483a61d90d Make clock on header optional 2018-08-25 22:24:58 +09:00
385fb7586b Use pencil-alt instead of pen 2018-08-25 22:07:10 +09:00
c624da70ef fix(package): update nan to version 2.11.0 2018-08-25 12:45:23 +00:00
675668c395 New translations ja-JP.yml (French) 2018-08-25 20:41:14 +09:00
bc9c7efe85 fix(package): update systeminformation to version 3.44.0 2018-08-25 11:19:17 +00:00
2488d40421 Merge pull request #2482 from syuilo/develop
8.13.0
2018-08-25 19:46:50 +09:00
bf7875bfaa Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-08-25 19:46:20 +09:00
a84fa30774 8.13.0 2018-08-25 19:46:12 +09:00
c19a763b3d Merge pull request #2481 from syuilo/greenkeeper/systeminformation-3.43.0
fix(package): update systeminformation to version 3.43.0
2018-08-25 19:45:31 +09:00
0875460974 ユーザーのアイコンにサムネイルを使うように
Closes #2365
2018-08-25 19:44:47 +09:00
f0b08d3936 Add brackets 2018-08-25 19:39:06 +09:00
16520c7b4c Merge pull request #2476 from acid-chicken/patch-4
Fix #2392
2018-08-25 19:37:35 +09:00
65549d06d9 ✌️ 2018-08-25 19:34:54 +09:00
52da66d550 New translations ja-JP.yml (English) 2018-08-25 18:12:08 +09:00
251c3c3fe4 New translations ja-JP.yml (English) 2018-08-25 18:01:25 +09:00
ce2d2a10c1 fix(package): update systeminformation to version 3.43.0
Closes #2477
2018-08-25 08:56:01 +00:00
3b6d242ef6 New translations ja-JP.yml (English) 2018-08-25 17:51:28 +09:00
0ebe801af4 Update boot.js 2018-08-25 17:06:40 +09:00
05daa7ac7d Merge pull request #2475 from syuilo/develop
8.12.0
2018-08-25 16:35:29 +09:00
990a583e5e 8.12.0 2018-08-25 16:34:41 +09:00
d9b02a18bf Merge pull request #2474 from mei23/mei-0825-appleroma2
Pleromaとつながらないのを修正
2018-08-25 16:33:02 +09:00
30aae79e5c Merge pull request #2473 from syuilo/develop
8.11.1
2018-08-25 15:41:06 +09:00
a149c121fb 8.11.1 2018-08-25 15:40:47 +09:00
47f4b51207 Fix bug 2018-08-25 15:40:22 +09:00
79f4d886d0 Merge pull request #2472 from syuilo/develop
8.11.0
2018-08-25 15:34:33 +09:00
2b556aba03 8.11.0 2018-08-25 15:34:10 +09:00
4f62043b0c New translations ja-JP.yml (Japanese, Kansai) 2018-08-25 15:31:30 +09:00
b1ae304c51 New translations ja-JP.yml (Spanish) 2018-08-25 15:31:28 +09:00
425bc032d0 New translations ja-JP.yml (Russian) 2018-08-25 15:31:26 +09:00
0156b75bde New translations ja-JP.yml (Portuguese) 2018-08-25 15:31:23 +09:00
8bc8fc58de New translations ja-JP.yml (Polish) 2018-08-25 15:31:21 +09:00
9bf847b1fb New translations ja-JP.yml (Korean) 2018-08-25 15:31:18 +09:00
0b078d203b New translations ja-JP.yml (Italian) 2018-08-25 15:31:16 +09:00
df59018b47 New translations ja-JP.yml (German) 2018-08-25 15:31:14 +09:00
b2681dcb5d New translations ja-JP.yml (French) 2018-08-25 15:31:12 +09:00
46fa471636 New translations ja-JP.yml (English) 2018-08-25 15:31:10 +09:00
5f2c441996 New translations ja-JP.yml (Chinese Simplified) 2018-08-25 15:31:08 +09:00
a79cc42b26 New translations ja-JP.yml (Catalan) 2018-08-25 15:31:05 +09:00
739c993911 Fix #2466 2018-08-25 15:30:48 +09:00
cb180e00de Merge pull request #2471 from syuilo/greenkeeper/@types/node-10.9.2
Update @types/node to the latest version 🚀
2018-08-25 15:26:25 +09:00
4d46a61051 ✌️ 2018-08-25 15:26:13 +09:00
81969ea8b2 🎨 2018-08-25 15:25:16 +09:00
ac474f3884 Send actor in Delete 2018-08-25 14:52:35 +09:00
a39aaf6eb1 Send actor in Undo Follow 2018-08-25 14:46:47 +09:00
68a7661f08 Create Note activity にも toとcc 2018-08-25 14:23:51 +09:00
ffcb2f755c Send actor in CreateNote, Announce 2018-08-25 14:12:44 +09:00
366e0d6bde fix(package): update @types/node to version 10.9.2 2018-08-25 04:40:46 +00:00
b3a3238e43 HTTP Signature検証対象ヘッダにDateが含まれてなくても許容する 2018-08-25 13:40:12 +09:00
92828028db Add Activity id if missing 2018-08-25 13:11:54 +09:00
bd97e315ff New translations ja-JP.yml (Japanese, Kansai) 2018-08-25 12:51:37 +09:00
51083419f5 New translations ja-JP.yml (Spanish) 2018-08-25 12:51:35 +09:00
b23bfd4d86 New translations ja-JP.yml (Russian) 2018-08-25 12:51:32 +09:00
7de3e847bd New translations ja-JP.yml (Portuguese) 2018-08-25 12:51:30 +09:00
0d1a541dba New translations ja-JP.yml (Polish) 2018-08-25 12:51:27 +09:00
2717109fe2 New translations ja-JP.yml (Korean) 2018-08-25 12:51:25 +09:00
60ca0626ce New translations ja-JP.yml (Italian) 2018-08-25 12:51:23 +09:00
15dae0ae65 New translations ja-JP.yml (German) 2018-08-25 12:51:20 +09:00
1c680118a0 New translations ja-JP.yml (French) 2018-08-25 12:51:18 +09:00
ad5efbba59 New translations ja-JP.yml (English) 2018-08-25 12:51:16 +09:00
6dc7baa5e9 New translations ja-JP.yml (Chinese Simplified) 2018-08-25 12:51:14 +09:00
c2b886e750 New translations ja-JP.yml (Catalan) 2018-08-25 12:51:10 +09:00
edb61e52c5 Use resolvable ActivityPub keyId 2018-08-25 12:46:06 +09:00
ded297b04c Merge pull request #2469 from syuilo/develop
8.10.0
2018-08-25 12:44:37 +09:00
65e1d5978a Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-08-25 12:44:15 +09:00
86e76358b1 8.10.0 2018-08-25 12:44:06 +09:00
435e0257a4 Merge pull request #2468 from syuilo/l10n_develop
New Crowdin translations
2018-08-25 12:43:35 +09:00
1c45cc808b Improve stats page 2018-08-25 12:43:18 +09:00
ed27a2f963 New translations ja-JP.yml (English) 2018-08-25 12:41:07 +09:00
1f53d1a149 Send Content-Type in ActivityPub request 2018-08-25 12:32:31 +09:00
8295f6d7a3 New translations ja-JP.yml (Japanese, Kansai) 2018-08-25 12:31:41 +09:00
b02f6341c9 New translations ja-JP.yml (Spanish) 2018-08-25 12:31:39 +09:00
f6d577d411 New translations ja-JP.yml (Russian) 2018-08-25 12:31:37 +09:00
db3e73318e New translations ja-JP.yml (Portuguese) 2018-08-25 12:31:35 +09:00
29c2071711 New translations ja-JP.yml (Polish) 2018-08-25 12:31:33 +09:00
3acd524d09 New translations ja-JP.yml (Korean) 2018-08-25 12:31:30 +09:00
dae65cc123 New translations ja-JP.yml (Italian) 2018-08-25 12:31:28 +09:00
695f154d87 New translations ja-JP.yml (German) 2018-08-25 12:31:26 +09:00
59dca9a812 New translations ja-JP.yml (French) 2018-08-25 12:31:23 +09:00
b9f04f8f53 New translations ja-JP.yml (English) 2018-08-25 12:31:20 +09:00
0985f14f18 New translations ja-JP.yml (Chinese Simplified) 2018-08-25 12:31:18 +09:00
56684dd7c3 New translations ja-JP.yml (Catalan) 2018-08-25 12:31:16 +09:00
47a5f3bc67 チャートコンポーネントを分離するなど 2018-08-25 12:28:05 +09:00
1c1e3009e9 ✌️ 2018-08-25 12:14:36 +09:00
c7c3f6999b Merge pull request #2465 from syuilo/develop
8.9.2
2018-08-25 11:11:00 +09:00
fb4aa9bc1c 8.9.2 2018-08-25 11:10:38 +09:00
ef57f5907b Fix bug 2018-08-25 11:10:27 +09:00
eff44f9cd1 Merge pull request #2464 from syuilo/develop
8.9.1
2018-08-25 10:28:47 +09:00
d7fa92d58f 8.9.1 2018-08-25 10:28:28 +09:00
4e8033d5a4 Fix bug 2018-08-25 10:28:09 +09:00
8a207d8311 Merge pull request #2461 from syuilo/develop
8.9.0
2018-08-25 08:41:16 +09:00
94ba9c8437 8.9.0 2018-08-25 08:40:16 +09:00
88c71c2998 #2451 2018-08-25 08:39:12 +09:00
7b6e55047f #2460 2018-08-25 08:35:41 +09:00
9d85d0bb08 Merge pull request #2411 from syuilo/l10n_develop
New Crowdin translations
2018-08-25 07:22:34 +09:00
27ac0bbc00 Merge pull request #2429 from syuilo/greenkeeper/vue-js-modal-1.3.19
Update vue-js-modal to the latest version 🚀
2018-08-25 07:21:44 +09:00
affde9b4e2 Merge pull request #2459 from syuilo/greenkeeper/@types/node-10.9.1
fix(package): update @types/node to version 10.9.1
2018-08-25 07:21:35 +09:00
88324b6dd9 Merge pull request #2432 from syuilo/greenkeeper/@types/sharp-0.17.10
Update @types/sharp to the latest version 🚀
2018-08-25 07:21:16 +09:00
9b95ffe6c6 Merge pull request #2433 from syuilo/greenkeeper/@types/webpack-4.4.11
Update @types/webpack to the latest version 🚀
2018-08-25 07:21:08 +09:00
6b137f8d69 Merge pull request #2458 from syuilo/master
Master
2018-08-25 07:20:38 +09:00
e78b2b0ab8 Merge pull request #2457 from mei23/mei-0825-apresolveuri3
リモートからのActivityに添付されている投稿は使用しないように変更
2018-08-25 07:07:46 +09:00
8b51428347 ActivityPub resolve で 添付のNoteを使用しないように 2018-08-25 06:50:35 +09:00
b8d53a7b40 Merge pull request #2455 from mei23/mei-0824-apattchobj
ActivityPubで非公開投稿が添付されてしまう件の修正
2018-08-25 05:25:14 +09:00
b0d9e9caa2 New translations ja-JP.yml (Japanese, Kansai) 2018-08-25 01:31:08 +09:00
1fc4ec8dc1 New translations ja-JP.yml (Japanese, Kansai) 2018-08-25 01:21:15 +09:00
a1e1e25800 New translations ja-JP.yml (English) 2018-08-24 23:57:28 +09:00
3b020732ec New translations ja-JP.yml (English) 2018-08-24 23:41:35 +09:00
dcf92945fe New translations ja-JP.yml (English) 2018-08-24 23:31:52 +09:00
f9f33903d4 New translations ja-JP.yml (French) 2018-08-24 21:51:28 +09:00
d8bf06ab0f New translations ja-JP.yml (French) 2018-08-24 21:43:26 +09:00
806dabe58b Merge pull request #2450 from syuilo/develop
8.8.0
2018-08-24 15:02:21 +09:00
a17b8c56d7 New translations ja-JP.yml (Japanese, Kansai) 2018-08-24 15:01:39 +09:00
0eaaaba8f2 New translations ja-JP.yml (Spanish) 2018-08-24 15:01:36 +09:00
f359d79d36 New translations ja-JP.yml (Russian) 2018-08-24 15:01:34 +09:00
1d84000d94 New translations ja-JP.yml (Portuguese) 2018-08-24 15:01:32 +09:00
b70e22c150 8.8.0 2018-08-24 15:01:30 +09:00
0774ffe376 New translations ja-JP.yml (Polish) 2018-08-24 15:01:29 +09:00
0096d7d8ac New translations ja-JP.yml (Korean) 2018-08-24 15:01:27 +09:00
38db966b3d New translations ja-JP.yml (Italian) 2018-08-24 15:01:24 +09:00
cb7d313a66 New translations ja-JP.yml (German) 2018-08-24 15:01:21 +09:00
91b7905f3f New translations ja-JP.yml (French) 2018-08-24 15:01:18 +09:00
9a81fba992 New translations ja-JP.yml (English) 2018-08-24 15:01:16 +09:00
43553d5c09 New translations ja-JP.yml (Chinese Simplified) 2018-08-24 15:01:14 +09:00
e0ca8ce173 New translations ja-JP.yml (Catalan) 2018-08-24 15:01:11 +09:00
13624ea7c2 バグ修正など 2018-08-24 14:55:58 +09:00
9502586c8b ActivityPub Renote/Replyで 対象Noteを添付しないようにする 2018-08-24 14:53:40 +09:00
d6753f2cf2 fix(package): update @types/node to version 10.9.1
Closes #2431
2018-08-24 00:40:11 +00:00
5ba36efcd2 Merge pull request #2446 from syuilo/develop
8.7.0
2018-08-24 09:39:57 +09:00
fd497ef105 8.7.0 2018-08-24 09:39:37 +09:00
9c4a7bf94c Improve chart 2018-08-24 09:39:16 +09:00
91f8adc138 Merge pull request #2445 from syuilo/develop
8.6.0
2018-08-24 08:57:54 +09:00
69fa2373cb 8.6.0 2018-08-24 08:57:31 +09:00
8b37fc4772 Improve chart 2018-08-24 08:56:57 +09:00
81e4ed9591 Merge pull request #2444 from syuilo/develop
8.5.1
2018-08-24 08:36:01 +09:00
9cda89ec04 8.5.1 2018-08-24 08:35:38 +09:00
fc180f030f Fix bug 2018-08-24 08:35:01 +09:00
a827b6028d Merge pull request #2442 from syuilo/develop
8.5.0
2018-08-24 07:24:08 +09:00
4517bf7342 8.5.0 2018-08-24 07:23:42 +09:00
b21287262e チャート取得APIを誰でも利用できるようにするなど 2018-08-24 07:23:04 +09:00
a60ae130c1 New translations ja-JP.yml (Japanese, Kansai) 2018-08-24 07:21:28 +09:00
dd88acd411 New translations ja-JP.yml (Spanish) 2018-08-24 07:21:25 +09:00
b63fc1a9e5 New translations ja-JP.yml (Russian) 2018-08-24 07:21:23 +09:00
17f143cfb2 New translations ja-JP.yml (Portuguese) 2018-08-24 07:21:20 +09:00
cf57d847d1 New translations ja-JP.yml (Polish) 2018-08-24 07:21:18 +09:00
7c4c7bea14 New translations ja-JP.yml (Korean) 2018-08-24 07:21:16 +09:00
e5ec47fc75 New translations ja-JP.yml (Italian) 2018-08-24 07:21:14 +09:00
ad91dc2423 New translations ja-JP.yml (German) 2018-08-24 07:21:11 +09:00
7acbe53948 New translations ja-JP.yml (French) 2018-08-24 07:21:08 +09:00
fe1b8ba0cb New translations ja-JP.yml (English) 2018-08-24 07:21:05 +09:00
b0a8a51b69 New translations ja-JP.yml (Chinese Simplified) 2018-08-24 07:21:03 +09:00
c3ca21e610 New translations ja-JP.yml (Catalan) 2018-08-24 07:21:00 +09:00
c1b47a2119 Add missing changelog 2018-08-24 07:20:26 +09:00
caf625afee Merge pull request #2441 from syuilo/develop
8.4.0
2018-08-24 07:18:00 +09:00
2bad3865a3 8.4.0 2018-08-24 07:17:40 +09:00
3f7d248684 Improve chart 2018-08-24 07:17:17 +09:00
4e7382b793 New translations ja-JP.yml (Japanese, Kansai) 2018-08-24 07:12:36 +09:00
552ff4a044 New translations ja-JP.yml (Spanish) 2018-08-24 07:12:33 +09:00
afb52a0cd5 New translations ja-JP.yml (Russian) 2018-08-24 07:12:31 +09:00
1ac89b0f5b New translations ja-JP.yml (Portuguese) 2018-08-24 07:12:28 +09:00
5039ca7ee1 New translations ja-JP.yml (Polish) 2018-08-24 07:12:26 +09:00
a48fd9ce18 New translations ja-JP.yml (Korean) 2018-08-24 07:12:24 +09:00
58859c4811 New translations ja-JP.yml (Italian) 2018-08-24 07:12:22 +09:00
5988fb3111 New translations ja-JP.yml (German) 2018-08-24 07:12:19 +09:00
8dce821789 New translations ja-JP.yml (French) 2018-08-24 07:12:16 +09:00
16fde0b507 New translations ja-JP.yml (English) 2018-08-24 07:12:13 +09:00
9723662706 New translations ja-JP.yml (Chinese Simplified) 2018-08-24 07:12:11 +09:00
df4415b4fe New translations ja-JP.yml (Catalan) 2018-08-24 07:12:09 +09:00
6e179e7cde Fix 2018-08-24 07:06:25 +09:00
87f248b8ec Merge pull request #2440 from syuilo/develop
8.3.1
2018-08-24 07:03:49 +09:00
027140eccc 8.3.1 2018-08-24 07:03:25 +09:00
92cf205c66 Fix bug 2018-08-24 07:02:52 +09:00
fa3299840f Refactor 2018-08-24 07:02:27 +09:00
f54529d46f New translations ja-JP.yml (Japanese, Kansai) 2018-08-24 06:51:15 +09:00
b772add064 New translations ja-JP.yml (Spanish) 2018-08-24 06:51:13 +09:00
231f2e77a4 New translations ja-JP.yml (Russian) 2018-08-24 06:51:10 +09:00
a000a9e607 New translations ja-JP.yml (Portuguese) 2018-08-24 06:51:08 +09:00
e8da15ab1e New translations ja-JP.yml (Polish) 2018-08-24 06:51:05 +09:00
e070ccb313 New translations ja-JP.yml (Korean) 2018-08-24 06:51:02 +09:00
2b06579228 New translations ja-JP.yml (Italian) 2018-08-24 06:50:59 +09:00
853c847ba1 New translations ja-JP.yml (German) 2018-08-24 06:50:57 +09:00
e852680b0a New translations ja-JP.yml (French) 2018-08-24 06:50:55 +09:00
0b0ee915b3 New translations ja-JP.yml (English) 2018-08-24 06:50:52 +09:00
516d1d093f New translations ja-JP.yml (Chinese Simplified) 2018-08-24 06:50:49 +09:00
aee9c79c0f New translations ja-JP.yml (Catalan) 2018-08-24 06:50:47 +09:00
2d4b183c14 Merge pull request #2439 from syuilo/develop
8.3.0
2018-08-24 06:43:12 +09:00
03b20e11ca 8.3.0 2018-08-24 06:42:40 +09:00
e0e006e284 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-08-24 06:41:56 +09:00
a294a881ec Improve chart 2018-08-24 06:41:53 +09:00
53926082e7 Merge pull request #2438 from mei23/mei-0824-basehtmlcc
ベースHTMLは immutableキャッシュしないようにする
2018-08-24 05:47:53 +09:00
2d185becc3 New translations ja-JP.yml (Japanese, Kansai) 2018-08-24 05:41:31 +09:00
67fff324b0 New translations ja-JP.yml (Spanish) 2018-08-24 05:41:29 +09:00
f64b7fcabc New translations ja-JP.yml (Russian) 2018-08-24 05:41:27 +09:00
4cefa16db6 New translations ja-JP.yml (Portuguese) 2018-08-24 05:41:25 +09:00
22722379df New translations ja-JP.yml (Polish) 2018-08-24 05:41:22 +09:00
b2b83dc45d New translations ja-JP.yml (Korean) 2018-08-24 05:41:19 +09:00
ebf6f8bbfd New translations ja-JP.yml (Italian) 2018-08-24 05:41:17 +09:00
3e1631d180 New translations ja-JP.yml (German) 2018-08-24 05:41:14 +09:00
97cb3c8613 New translations ja-JP.yml (French) 2018-08-24 05:41:11 +09:00
6dda3a5d8a New translations ja-JP.yml (English) 2018-08-24 05:41:09 +09:00
e50b0540f5 New translations ja-JP.yml (Chinese Simplified) 2018-08-24 05:41:06 +09:00
63b4aee9bd New translations ja-JP.yml (Catalan) 2018-08-24 05:41:04 +09:00
5b5de6a89c ベースHTMLは immutableキャッシュしないようにする 2018-08-24 05:41:03 +09:00
a11c991f83 Merge pull request #2436 from mei23/mei-0824-api404
/api/ 下の存在しないにURL対しては404を返すようにする
2018-08-24 05:40:30 +09:00
a0adcf0d1a Merge pull request #2437 from syuilo/develop
8.2.0
2018-08-24 05:38:18 +09:00
93b2b82993 8.2.0 2018-08-24 05:37:42 +09:00
4dee7d91b1 Better charts 2018-08-24 05:37:19 +09:00
839be6477d Return 404 for unknown API 2018-08-24 05:26:26 +09:00
59e2ed8ab0 Merge pull request #2435 from syuilo/master
Master
2018-08-24 03:48:05 +09:00
83790004dd 8.1.0 (#2426) (#2434)
* Update url-preview.vue

* 一時間ごとのグラフも見れるように

* Merge pull request #2423 from syuilo/develop (#2425)

* 8.1.0
2018-08-24 03:47:36 +09:00
b70e9824ac fix(package): update @types/webpack to version 4.4.11 2018-08-23 18:26:42 +00:00
155d49e8ac fix(package): update @types/sharp to version 0.17.10 2018-08-23 18:16:46 +00:00
4ae10ab33d fix(package): update vue-js-modal to version 1.3.19 2018-08-23 14:46:37 +00:00
7124586eb1 New translations ja-JP.yml (French) 2018-08-23 18:12:02 +09:00
74f6ed1851 New translations ja-JP.yml (French) 2018-08-23 18:03:12 +09:00
efae7a7bce 8.1.0 (#2426)
* Update url-preview.vue

* 一時間ごとのグラフも見れるように

* Merge pull request #2423 from syuilo/develop (#2425)

* 8.1.0
2018-08-23 16:38:12 +09:00
e59f13e8ff Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-08-23 16:37:40 +09:00
31ed8949b9 8.1.0 2018-08-23 16:37:32 +09:00
f1174a15e0 Merge pull request #2423 from syuilo/develop (#2425) 2018-08-23 16:37:07 +09:00
912ffae600 Merge pull request #2424 from acid-chicken/patch-4
Fix #2421
2018-08-23 16:36:42 +09:00
71a5662195 一時間ごとのグラフも見れるように 2018-08-23 16:36:23 +09:00
774834a31f Update url-preview.vue 2018-08-23 16:25:36 +09:00
91f1c3a10a Merge pull request #2423 from syuilo/develop
8.0.0
2018-08-23 15:42:14 +09:00
8fc1e07136 1時間単位での集計を追加 2018-08-23 15:40:24 +09:00
a62e2b83ff Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-08-23 14:56:43 +09:00
e31a2f7e55 Fix bug: Check following request existance 2018-08-23 14:56:39 +09:00
1598e996b1 Merge pull request #2419 from rinsuki/patch-1
https://misskey.xyz/notes/5b7e20bd248403003019b860 の修正
2018-08-23 12:00:46 +09:00
4fb7ee760a https://misskey.xyz/notes/5b7e20bd248403003019b860 の修正 2018-08-23 11:58:44 +09:00
37865cb381 Merge pull request #2416 from syuilo/master
Master
2018-08-23 05:46:24 +09:00
ab8b882435 Merge pull request #2372 from syuilo/greenkeeper/vue-js-modal-1.3.18
Update vue-js-modal to the latest version 🚀
2018-08-23 05:46:04 +09:00
1b2996947e Merge pull request #2400 from syuilo/greenkeeper/webpack-4.17.1
Update webpack to the latest version 🚀
2018-08-23 05:45:30 +09:00
1d9c88e9a1 New translations ja-JP.yml (English) 2018-08-23 05:44:01 +09:00
ea56d368e3 Merge pull request #2414 from syuilo/develop
7.4.1
2018-08-23 03:45:25 +09:00
dbd3a750f5 7.4.1 2018-08-23 03:45:04 +09:00
f41818141f Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-08-23 03:44:42 +09:00
d2f576accd 互換性の修正 2018-08-23 03:44:32 +09:00
4e483856d4 Merge pull request #2413 from syuilo/master
Master
2018-08-23 03:24:43 +09:00
2997f26e3c Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-23 03:24:15 +09:00
cdab596240 7.4.0 2018-08-23 03:24:06 +09:00
fca7a9da94 Merge pull request #2412 from syuilo/develop
update
2018-08-23 03:23:31 +09:00
8ba178f795 コントロールパネルから招待制のオンオフを切り替えられるように 2018-08-23 03:19:57 +09:00
8eb8243153 New translations ja-JP.yml (Japanese, Kansai) 2018-08-23 03:01:33 +09:00
b4967b862c New translations ja-JP.yml (Spanish) 2018-08-23 03:01:31 +09:00
aee3517736 New translations ja-JP.yml (Russian) 2018-08-23 03:01:28 +09:00
52ff8e84fa New translations ja-JP.yml (Portuguese) 2018-08-23 03:01:26 +09:00
9bb6db649c New translations ja-JP.yml (Polish) 2018-08-23 03:01:24 +09:00
da99be9897 New translations ja-JP.yml (Korean) 2018-08-23 03:01:21 +09:00
2d7ec8a471 New translations ja-JP.yml (Italian) 2018-08-23 03:01:19 +09:00
4cbbfdad1a New translations ja-JP.yml (German) 2018-08-23 03:01:17 +09:00
2924858311 New translations ja-JP.yml (French) 2018-08-23 03:01:14 +09:00
85916bfea1 New translations ja-JP.yml (English) 2018-08-23 03:01:12 +09:00
38ccd9e794 New translations ja-JP.yml (Chinese Simplified) 2018-08-23 03:01:10 +09:00
c64b6be915 New translations ja-JP.yml (Catalan) 2018-08-23 03:01:07 +09:00
d98c67e13c Add control panel link in nav 2018-08-23 02:47:12 +09:00
d129151fdf Fix #2410
なぜか .ts という拡張子で来るのかは不明
2018-08-23 02:28:58 +09:00
1b9c69f793 Fix bug 2018-08-23 01:55:39 +09:00
42dd092334 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-08-23 01:37:20 +09:00
8dc9ec06f8 良い感じに 2018-08-23 01:37:05 +09:00
ae5da782e5 Merge pull request #2409 from syuilo/l10n_develop
New Crowdin translations
2018-08-23 01:36:40 +09:00
313b0cec65 New translations ja-JP.yml (Japanese, Kansai) 2018-08-23 01:36:10 +09:00
12a51972ed New translations ja-JP.yml (Spanish) 2018-08-23 01:36:07 +09:00
a2f3b2966f New translations ja-JP.yml (Russian) 2018-08-23 01:36:05 +09:00
0c2627f08b New translations ja-JP.yml (Portuguese) 2018-08-23 01:36:03 +09:00
9535df12dd New translations ja-JP.yml (Polish) 2018-08-23 01:36:00 +09:00
2400471a0d New translations ja-JP.yml (Korean) 2018-08-23 01:35:57 +09:00
784da8c37b New translations ja-JP.yml (Italian) 2018-08-23 01:35:55 +09:00
3778f9c521 New translations ja-JP.yml (German) 2018-08-23 01:35:52 +09:00
e1cec85f1e New translations ja-JP.yml (French) 2018-08-23 01:35:49 +09:00
ca9c087060 New translations ja-JP.yml (English) 2018-08-23 01:35:47 +09:00
5b2d91baad New translations ja-JP.yml (Chinese Simplified) 2018-08-23 01:35:44 +09:00
08e099b88d New translations ja-JP.yml (Catalan) 2018-08-23 01:35:41 +09:00
4153b0db38 Merge pull request #2408 from syuilo/l10n_develop
New Crowdin translations
2018-08-23 01:17:48 +09:00
88701a21bb New translations ja-JP.yml (Japanese, Kansai) 2018-08-23 01:16:01 +09:00
3ddc73ca94 New translations ja-JP.yml (Spanish) 2018-08-23 01:15:59 +09:00
693d793265 New translations ja-JP.yml (Russian) 2018-08-23 01:15:57 +09:00
5d685233dd New translations ja-JP.yml (Portuguese) 2018-08-23 01:15:54 +09:00
16575751d9 New translations ja-JP.yml (Polish) 2018-08-23 01:15:52 +09:00
1f6295f437 New translations ja-JP.yml (Korean) 2018-08-23 01:15:49 +09:00
6737fe2ead New translations ja-JP.yml (Italian) 2018-08-23 01:15:47 +09:00
4e77939fca New translations ja-JP.yml (German) 2018-08-23 01:15:44 +09:00
21f528c07d New translations ja-JP.yml (French) 2018-08-23 01:15:41 +09:00
23f835fac0 New translations ja-JP.yml (English) 2018-08-23 01:15:38 +09:00
f21343225c New translations ja-JP.yml (Chinese Simplified) 2018-08-23 01:15:36 +09:00
f13a59f7db New translations ja-JP.yml (Catalan) 2018-08-23 01:15:33 +09:00
0315b9274c Merge pull request #2407 from syuilo/master
Master
2018-08-23 00:49:52 +09:00
da88043962 Merge pull request #2396 from Tosuke/fix-2354
Mute on mobile(#2354)
2018-08-23 00:47:50 +09:00
0352bf0cc2 Merge pull request #2393 from acid-chicken/patch-autogen-shell
Add autogen.sh
2018-08-23 00:47:08 +09:00
baa71070a8 Merge pull request #2403 from syuilo/greenkeeper/summaly-2.1.4
Update summaly to the latest version 🚀
2018-08-23 00:45:44 +09:00
2713064f27 Merge pull request #2405 from acid-chicken/patch-4
Migrate summaly to 2.1.4
2018-08-23 00:45:25 +09:00
f6387ac115 Merge pull request #2406 from syuilo/master
Master
2018-08-23 00:44:13 +09:00
d704aca035 Update url-preview.vue 2018-08-23 00:40:32 +09:00
2b54b4ac06 Update url-preview.vue 2018-08-23 00:34:35 +09:00
7410f2f4c0 fix(package): update summaly to version 2.1.4 2018-08-22 14:55:38 +00:00
99c3c1258a Merge pull request #2402 from acid-chicken/patch-3
Update Crowdin configuration file
2018-08-22 23:54:03 +09:00
e51184931d Update crowdin.yml 2018-08-22 23:53:27 +09:00
3bc9a40b48 fix(package): update webpack to version 4.17.1 2018-08-22 09:56:30 +00:00
9f49ca8fdb feature mute on mobile(#2354) 2018-08-22 15:54:22 +09:00
550d1547b4 Add autogen.sh
refs: https://github.com/syuilo/misskey/pull/2391#issuecomment-414915763
2018-08-22 14:41:41 +09:00
ca0b56ee57 Merge pull request #2391 from acid-chicken/patch-autogen
[AUTOMATED] Update README.md
2018-08-22 14:26:05 +09:00
ef1d854f2c Update README.md [AUTOGEN] 2018-08-22 14:25:06 +09:00
a5023271ef 7.3.0 2018-08-22 09:40:54 +09:00
c3747db670 Fix doc 2018-08-22 09:36:42 +09:00
fe1e60a28c Fix #2334 2018-08-22 09:33:59 +09:00
f91d2e8c8d Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-22 09:31:51 +09:00
dccc2c60e3 Fix bugs
Closes #2367
2018-08-22 09:31:35 +09:00
933e25804c Merge pull request #2389 from Tosuke/fix-2384
Fix login bug(#2384)
2018-08-22 09:27:09 +09:00
0b503661af fix login bug(#2384) 2018-08-22 09:26:06 +09:00
58082431ff Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-22 09:16:55 +09:00
2536bfb5f5 #2378 2018-08-22 09:16:52 +09:00
6428066552 Merge pull request #2388 from mei23/mei-0822-dbcheck
起動時のDB接続チェックでエラーを検出できないのを修正
2018-08-22 09:12:59 +09:00
4bf3827b73 Revert "#2387"
This reverts commit 3cad494404.
2018-08-22 09:12:37 +09:00
3cad494404 #2387 2018-08-22 09:11:59 +09:00
ef0793311f リバーシのアイコンのコントラストのオプションを追加するなど 2018-08-22 09:10:39 +09:00
6f3e341e89 Fix DB connectivity check 2018-08-22 08:46:31 +09:00
2fea3be7c0 Merge pull request #2364 from acid-chicken/patch-2
Resolve #2363
2018-08-22 08:41:47 +09:00
82059d4fd9 7.2.0 2018-08-22 05:24:16 +09:00
07ddeae2f1 Clean up 2018-08-22 04:53:02 +09:00
f2279758b2 Merge pull request #2366 from acid-chicken/patch-autogen
[AUTOMATED] Update README.md
2018-08-22 03:30:12 +09:00
1ed189a518 Merge pull request #2386 from acid-chicken/patch-3
Update boot.js
2018-08-22 02:25:41 +09:00
137741d307 Update index.js 2018-08-22 01:52:13 +09:00
d702f6e090 Rename ja-ks.yml to ja-KS.yml 2018-08-22 01:51:42 +09:00
f33701233c Update boot.js 2018-08-22 01:50:13 +09:00
70003269e5 Update boot.js 2018-08-22 01:48:08 +09:00
61896d2386 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-22 01:46:13 +09:00
52d640c5a7 Fix 2018-08-22 01:46:10 +09:00
c65f5761e1 Merge pull request #2385 from mei23/mei-0821-aptype
ActivityPub で Content-Type を正しく扱う
2018-08-22 01:23:43 +09:00
3016ac4805 Fix bug 2018-08-22 01:02:56 +09:00
28a47cd331 Fix 2018-08-22 00:59:07 +09:00
6ecb88b0d1 #2338 2018-08-22 00:52:00 +09:00
8df1278c8e Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-22 00:44:26 +09:00
52bec430d4 use ja-JP 2018-08-22 00:44:07 +09:00
da4cec8767 Merge pull request #2362 from syuilo/greenkeeper/vue-loader-15.4.0
Update vue-loader to the latest version 🚀
2018-08-22 00:11:24 +09:00
ad0087d7dd Merge pull request #2382 from syuilo/greenkeeper/webpack-4.17.0
Update webpack to the latest version 🚀
2018-08-22 00:11:12 +09:00
9630860035 Merge pull request #2383 from syuilo/greenkeeper/sharp-0.20.7
fix(package): update sharp to version 0.20.7
2018-08-22 00:11:01 +09:00
75e4c8d74d Better reponse 2018-08-21 23:56:15 +09:00
1a5ee81e7e fix(package): update sharp to version 0.20.7
Closes #2368
2018-08-21 11:18:21 +00:00
3476be16ab Merge pull request #2381 from mei23/mei-0821-apnote
ActivityPub Note/Outbox の公開範囲の修正
2018-08-21 20:07:33 +09:00
c42f61a0f4 fix(package): update webpack to version 4.17.0 2018-08-21 08:48:10 +00:00
b42a9e1c4e Set ActivityPub Content-Type 2018-08-21 13:48:03 +09:00
4495525705 Respect visibility in ActivityPub Note/Outbox 2018-08-21 13:22:30 +09:00
a603602f32 Clean up 2018-08-21 05:42:31 +09:00
67b28f9b6e fix(package): update vue-js-modal to version 1.3.18 2018-08-20 19:58:32 +00:00
fd947407af Revert "Fix bug?"
This reverts commit 2c9bacfcea.
2018-08-21 01:23:39 +09:00
30444e5f1a #2359 など 2018-08-21 01:03:58 +09:00
f0d818de24 Fix bug 2018-08-21 00:12:45 +09:00
3fb98e808f 7.1.2 2018-08-20 23:49:27 +09:00
2c9bacfcea Fix bug? 2018-08-20 23:49:00 +09:00
ae0284b1b1 Update README.md [AUTOGEN] 2018-08-20 19:03:01 +09:00
166c4ebda0 Update reversi.game.vue 2018-08-20 18:12:03 +09:00
319eed029b Update reversi.game.vue 2018-08-20 18:10:51 +09:00
ec5aa10167 fix(package): update vue-loader to version 15.4.0 2018-08-20 00:44:56 +00:00
a542765cf8 Merge pull request #2352 from acid-chicken/patch-2
Update README.md
2018-08-20 07:45:35 +09:00
fd3f8d43db Merge pull request #2356 from acid-chicken/patch-3
Fix z-index
2018-08-20 07:44:57 +09:00
4f4496078a Update user.vue 2018-08-20 02:05:57 +09:00
8f4f5b4ce0 7.1.1 2018-08-20 01:42:56 +09:00
bdc6718ae5 Fix bug 2018-08-20 01:41:53 +09:00
09d1f1c20d Update README.md 2018-08-19 23:14:22 +09:00
0efb7af17b 7.1.0 2018-08-19 23:11:55 +09:00
a45a78b94f Merge pull request #2336 from syuilo/l10n_master
New Crowdin translations
2018-08-19 23:06:47 +09:00
6337c26cf0 Merge pull request #2347 from syuilo/greenkeeper/html-minifier-3.5.20
Update html-minifier to the latest version 🚀
2018-08-19 23:06:34 +09:00
208dec25d9 Merge pull request #2349 from syuilo/configress-build
設定ファイルなしでビルドできるように
2018-08-19 22:32:58 +09:00
7d65a0c3d5 wip 2018-08-19 22:32:25 +09:00
bb925e5de3 wip 2018-08-19 21:07:18 +09:00
c9de5b65d4 wip 2018-08-19 19:15:29 +09:00
9bc3fcf74f Merge pull request #2348 from mei23/mei-0819-nsfw3
リモートにNSFWが効かないのを修正
2018-08-19 18:46:47 +09:00
19d979c330 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-19 18:38:15 +09:00
bb7b335491 nameId廃止 & アプリ作成時にシークレットを返すように 2018-08-19 18:38:02 +09:00
be5a0b4794 Fix リモートにNSFWが効かない 2018-08-19 18:08:29 +09:00
48eea03386 fix(package): update html-minifier to version 3.5.20 2018-08-19 09:03:23 +00:00
566317dc83 Fix bug 2018-08-19 13:32:02 +09:00
d4334645c2 New translations ja.yml (Japanese (Kansai-ben)) 2018-08-19 12:41:16 +09:00
d60c3c4ee3 7.0.2 2018-08-19 05:26:53 +09:00
452514f7fe Fix bug 2018-08-19 05:26:34 +09:00
58abb0ce8f 7.0.1 2018-08-19 05:15:55 +09:00
000d9cc1ce Fix bug 2018-08-19 05:15:50 +09:00
8cc017354a New translations ja.yml (English) 2018-08-19 04:11:04 +09:00
60269d15e8 Update version 2018-08-19 04:03:55 +09:00
7caa083612 New translations ja.yml (Japanese (Kansai-ben)) 2018-08-19 04:01:58 +09:00
68e1b00eb1 New translations ja.yml (Catalan) 2018-08-19 04:01:55 +09:00
1d904c756a New translations ja.yml (Portuguese) 2018-08-19 04:01:53 +09:00
0a1db1f595 New translations ja.yml (Korean) 2018-08-19 04:01:50 +09:00
e30e8267dd New translations ja.yml (Polish) 2018-08-19 04:01:48 +09:00
288a881817 New translations ja.yml (Chinese Simplified) 2018-08-19 04:01:46 +09:00
f593790872 New translations ja.yml (Italian) 2018-08-19 04:01:43 +09:00
1044ad8589 New translations ja.yml (Russian) 2018-08-19 04:01:41 +09:00
6e24015e68 New translations ja.yml (English) 2018-08-19 04:01:39 +09:00
b9a2c449ff New translations ja.yml (Spanish) 2018-08-19 04:01:37 +09:00
7c390cbf7b New translations ja.yml (German) 2018-08-19 04:01:35 +09:00
a657d1c774 New translations ja.yml (French) 2018-08-19 04:01:33 +09:00
f3936a79aa Fix #2335 2018-08-19 04:01:10 +09:00
78b560d89a #2324 2018-08-19 03:56:44 +09:00
2fc6313380 Fix #2325 2018-08-19 03:36:51 +09:00
c2b882a5d7 Improve cpu and memory chart in control panel 2018-08-19 03:32:01 +09:00
667b18fe24 Refactoring 2018-08-19 03:06:23 +09:00
60c0dac5f2 Merge pull request #2311 from acid-chicken/patch-autogen
[AUTOMATED] Update README.md
2018-08-19 01:14:48 +09:00
79f3e60dac Merge pull request #2331 from syuilo/l10n_master
New Crowdin translations
2018-08-19 01:14:00 +09:00
c4e04d6bf2 New translations ja.yml (English) 2018-08-19 01:01:20 +09:00
49f8219e54 Merge pull request #2286 from syuilo/l10n_master
New Crowdin translations
2018-08-19 00:58:02 +09:00
abd873e0a8 Create README.md 2018-08-19 00:57:40 +09:00
0e45d0d47f Merge branch 'master' into l10n_master 2018-08-19 00:55:07 +09:00
043b66f5da Merge pull request #2330 from syuilo/patch
Clean up
2018-08-19 00:52:10 +09:00
5d6e1fc391 New translations ja.yml (Japanese (Kansai-ben)) 2018-08-19 00:51:23 +09:00
fe292e77de New translations ja.yml (Catalan) 2018-08-19 00:51:20 +09:00
c996b5d0c8 New translations ja.yml (Portuguese) 2018-08-19 00:51:18 +09:00
7beb592f0c New translations ja.yml (Korean) 2018-08-19 00:51:16 +09:00
b3b11acd96 New translations ja.yml (Polish) 2018-08-19 00:51:14 +09:00
3bcdfbbd00 New translations ja.yml (Chinese Simplified) 2018-08-19 00:51:11 +09:00
fdad5d149f New translations ja.yml (Italian) 2018-08-19 00:51:09 +09:00
2e712a9212 New translations ja.yml (Russian) 2018-08-19 00:51:07 +09:00
86c8e634bb New translations ja.yml (English) 2018-08-19 00:51:05 +09:00
197a9306c4 New translations ja.yml (Spanish) 2018-08-19 00:51:03 +09:00
2e502a6b61 New translations ja.yml (German) 2018-08-19 00:51:00 +09:00
aa8a40e950 New translations ja.yml (French) 2018-08-19 00:50:58 +09:00
2f45ac3712 Merge pull request #2329 from syuilo/improve-chart
Improve chart
2018-08-19 00:46:17 +09:00
8ecf3db608 Add drive chart 2018-08-19 00:45:54 +09:00
f59c68022f Fix bug 2018-08-19 00:42:09 +09:00
7aac2c4e29 Clean up 2018-08-19 00:31:25 +09:00
0481de6629 wip 2018-08-19 00:27:23 +09:00
f59d0a75e4 missing semicolon 2018-08-19 00:20:36 +09:00
22f4b3cc7b missing semicolon 2018-08-19 00:20:36 +09:00
a4283c415a improve html to MFM 2018-08-19 00:20:36 +09:00
c0fbcee38a improve MFM to html 2018-08-19 00:20:36 +09:00
335200c31e wip 2018-08-18 23:56:44 +09:00
df71c90f9f wip 2018-08-18 23:48:54 +09:00
4220bdc963 New translations ja.yml (Japanese (Kansai-ben)) 2018-08-18 23:41:44 +09:00
97f3b1e46f New translations ja.yml (Catalan) 2018-08-18 23:41:42 +09:00
3a9dc358f8 New translations ja.yml (Portuguese) 2018-08-18 23:41:40 +09:00
2a3ab46a3d New translations ja.yml (Korean) 2018-08-18 23:41:37 +09:00
200a01f65f New translations ja.yml (Polish) 2018-08-18 23:41:34 +09:00
e68936911d New translations ja.yml (Chinese Simplified) 2018-08-18 23:41:32 +09:00
634ffeec54 New translations ja.yml (Italian) 2018-08-18 23:41:30 +09:00
8486cb785d New translations ja.yml (Russian) 2018-08-18 23:41:28 +09:00
a9eda4e6e2 New translations ja.yml (English) 2018-08-18 23:41:25 +09:00
f918f9b307 New translations ja.yml (Spanish) 2018-08-18 23:41:23 +09:00
d404d02d2d New translations ja.yml (German) 2018-08-18 23:41:21 +09:00
61f7a3974f New translations ja.yml (French) 2018-08-18 23:41:19 +09:00
cad8e4dea2 Update ja.yml 2018-08-18 23:39:25 +09:00
ef79903811 wip 2018-08-18 23:23:55 +09:00
c3cd0451ad wip 2018-08-18 23:15:16 +09:00
773fe28fcb wip 2018-08-18 20:26:01 +09:00
69e2576387 wip 2018-08-18 20:22:56 +09:00
908a5a1bb4 New translations ja.yml (Japanese (Kansai-ben)) 2018-08-18 19:21:12 +09:00
ffbd9ffc75 New translations ja.yml (English) 2018-08-18 18:21:27 +09:00
96223dd5e3 New translations ja.yml (English) 2018-08-18 17:57:09 +09:00
3231f12b93 Merge pull request #2319 from acid-chicken/patch-1
Add 関西弁
2018-08-18 17:13:22 +09:00
1408f39d9a Update ja-ks.yml 2018-08-18 17:07:25 +09:00
4ba06541aa Update ja-ks.yml 2018-08-18 17:07:00 +09:00
5c78ed645a Update index.js 2018-08-18 17:04:00 +09:00
33e19447aa Create ja-ks.yml 2018-08-18 17:02:56 +09:00
b52d995719 Fix typo 2018-08-18 13:12:29 +09:00
db5b90c093 New translations ja.yml (Catalan) 2018-08-18 13:11:48 +09:00
39bc75a7f9 New translations ja.yml (Portuguese) 2018-08-18 13:11:46 +09:00
3492067ecf New translations ja.yml (Korean) 2018-08-18 13:11:43 +09:00
e342a8da05 New translations ja.yml (Polish) 2018-08-18 13:11:40 +09:00
671d71dd47 New translations ja.yml (Chinese Simplified) 2018-08-18 13:11:38 +09:00
2f18d2ed8f New translations ja.yml (Italian) 2018-08-18 13:11:35 +09:00
f6e8165db0 New translations ja.yml (Russian) 2018-08-18 13:11:33 +09:00
eab3b22772 New translations ja.yml (English) 2018-08-18 13:11:31 +09:00
7664aa5a8c New translations ja.yml (Spanish) 2018-08-18 13:11:29 +09:00
a366392cbe New translations ja.yml (German) 2018-08-18 13:11:27 +09:00
c8c1bc09f9 New translations ja.yml (French) 2018-08-18 13:11:24 +09:00
11bb1608cf Resolve #2293 2018-08-18 13:09:15 +09:00
b1d77775aa Update README.md [AUTOGEN] 2018-08-18 11:02:58 +09:00
bc3f5e0d78 Merge pull request #2310 from sei0o/fix-1776
fix #1776
2018-08-18 07:54:49 +09:00
53ea709697 fix #1776 2018-08-18 07:53:06 +09:00
b7adbbb9bf 6.4.1 2018-08-18 06:01:55 +09:00
31aaf559ac Fix bug 2018-08-18 05:46:57 +09:00
160185b108 Fix bug 2018-08-18 05:43:09 +09:00
848ff4440b New translations ja.yml (English) 2018-08-18 05:32:18 +09:00
74291b2cae New translations ja.yml (Catalan) 2018-08-18 05:23:00 +09:00
ae6c4e0c5f New translations ja.yml (Portuguese) 2018-08-18 05:22:57 +09:00
ecb1840e27 New translations ja.yml (Korean) 2018-08-18 05:22:54 +09:00
42eb82a859 New translations ja.yml (Polish) 2018-08-18 05:22:52 +09:00
89a22908ce New translations ja.yml (Chinese Simplified) 2018-08-18 05:22:49 +09:00
bc3a94aa57 New translations ja.yml (Italian) 2018-08-18 05:22:47 +09:00
77fe579d9b New translations ja.yml (Russian) 2018-08-18 05:22:45 +09:00
e8c7803a2f New translations ja.yml (English) 2018-08-18 05:22:43 +09:00
1abaef624c New translations ja.yml (Spanish) 2018-08-18 05:22:40 +09:00
72cf2344a9 New translations ja.yml (German) 2018-08-18 05:22:38 +09:00
0462512e62 New translations ja.yml (French) 2018-08-18 05:22:36 +09:00
1d6b2bd969 6.4.0 2018-08-18 05:21:45 +09:00
5df90fdc4a l10n 2018-08-18 05:15:39 +09:00
607a5326d9 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-18 05:05:48 +09:00
2cbd35acc4 🎨 2018-08-18 05:05:39 +09:00
9a0224ee21 🎨 2018-08-18 05:00:54 +09:00
2beedc5978 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-18 04:52:15 +09:00
6d53e64798 Improve control panel 2018-08-18 04:52:06 +09:00
3478cdea08 Merge pull request #2304 from acid-chicken/acid-chicken-patch-4
Update README.md
2018-08-18 04:39:36 +09:00
b360f2ed45 Update README.md 2018-08-18 04:34:44 +09:00
7b0c4c29b4 Merge pull request #2303 from syuilo/update-readme
Update README.md
2018-08-18 04:29:29 +09:00
03f5d7575c Update README.md 2018-08-18 04:27:58 +09:00
e922d8904c Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-18 04:22:00 +09:00
45b55a8c98 Update rate limit setting 2018-08-18 04:21:49 +09:00
8973b76bda Merge pull request #2302 from syuilo/kao-to-faces
Fix #2301
2018-08-18 04:20:57 +09:00
41cf856e26 Fix #2301 2018-08-18 04:13:25 +09:00
b7aeb10304 Merge pull request #2300 from syuilo/delete-autogen
Delete .autogen
2018-08-18 04:05:47 +09:00
b8d9c1aa45 Delete .autogen 2018-08-18 04:05:00 +09:00
d7dbe503b6 🎨 2018-08-18 03:59:56 +09:00
c625dd074a Merge pull request #2299 from syuilo/new-kao
Add new kao
2018-08-18 03:56:30 +09:00
f8a977f1c0 Add new kao 2018-08-18 03:55:45 +09:00
c35e760fd3 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-18 03:52:46 +09:00
bc34ac82cf Show some charts in control panel 2018-08-18 03:52:24 +09:00
98f25c9159 6.3.2 2018-08-18 03:37:56 +09:00
ae9c13df66 6.3.1 2018-08-18 03:37:10 +09:00
9f8d21b2bc Fix #2298 2018-08-18 03:36:13 +09:00
e05e97561a New translations ja.yml (French) 2018-08-18 01:42:31 +09:00
f9d21fd34a New translations ja.yml (French) 2018-08-18 01:21:26 +09:00
86aef5f3e0 New translations ja.yml (French) 2018-08-18 01:12:29 +09:00
e6bc7922ac New translations ja.yml (French) 2018-08-18 01:01:48 +09:00
b2f40b7d3e New translations ja.yml (French) 2018-08-18 00:51:35 +09:00
3878793405 New translations ja.yml (English) 2018-08-18 00:42:00 +09:00
33c7aef220 New translations ja.yml (French) 2018-08-18 00:41:58 +09:00
e927f7a4ec New translations ja.yml (English) 2018-08-18 00:32:15 +09:00
cd09fa5a28 Merge pull request #2297 from syuilo/update-readme
✌️☀️☁️❄️✌️
2018-08-17 23:20:58 +09:00
9ca9757418 ✌️☀️☁️❄️✌️ 2018-08-17 23:19:24 +09:00
1fae2ffc37 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-17 23:07:01 +09:00
71657ddb98 🎨 2018-08-17 23:06:58 +09:00
63845e0ba7 Merge pull request #2294 from acid-chicken/patch-1
Resolve #2291
2018-08-17 22:38:40 +09:00
6781b68d33 Delete README.foot.md 2018-08-17 22:37:11 +09:00
d058eff59a Update and rename README.head.md to README.md 2018-08-17 22:36:38 +09:00
f409faea2c New translations ja.yml (Catalan) 2018-08-17 21:52:08 +09:00
77da98cd39 New translations ja.yml (Portuguese) 2018-08-17 21:52:06 +09:00
471afcbd57 New translations ja.yml (Korean) 2018-08-17 21:52:04 +09:00
72809f9d78 New translations ja.yml (Polish) 2018-08-17 21:52:01 +09:00
743fb45c3c New translations ja.yml (Chinese Simplified) 2018-08-17 21:51:59 +09:00
93d6b71a31 New translations ja.yml (Italian) 2018-08-17 21:51:57 +09:00
9b10e93fba New translations ja.yml (Russian) 2018-08-17 21:51:55 +09:00
0740837b6a New translations ja.yml (English) 2018-08-17 21:51:52 +09:00
ff49eacee4 New translations ja.yml (Spanish) 2018-08-17 21:51:50 +09:00
fbc6b267ff New translations ja.yml (German) 2018-08-17 21:51:48 +09:00
10cae8894e New translations ja.yml (French) 2018-08-17 21:51:46 +09:00
42addfed85 Merge pull request #2292 from syuilo/patch-2271
Resolve #2271
2018-08-17 21:43:15 +09:00
0dd6494ab9 fix(package): update url-loader to version 1.1.1 2018-08-17 21:41:42 +09:00
9f4c6a3aef Resolve #2271 2018-08-17 21:40:08 +09:00
9438dc560d New translations ja.yml (Catalan) 2018-08-17 21:32:40 +09:00
003ef65b59 New translations ja.yml (Portuguese) 2018-08-17 21:32:37 +09:00
978fb7e63a New translations ja.yml (Korean) 2018-08-17 21:32:35 +09:00
6203577696 New translations ja.yml (Polish) 2018-08-17 21:32:33 +09:00
f2b61f6a7e New translations ja.yml (Chinese Simplified) 2018-08-17 21:32:29 +09:00
6f4aa69723 New translations ja.yml (Italian) 2018-08-17 21:32:27 +09:00
b308e1bb2b New translations ja.yml (Russian) 2018-08-17 21:32:25 +09:00
ab3dad2d84 New translations ja.yml (English) 2018-08-17 21:32:23 +09:00
0af103f399 New translations ja.yml (Spanish) 2018-08-17 21:32:20 +09:00
873608a7de New translations ja.yml (German) 2018-08-17 21:32:18 +09:00
b04ad167da New translations ja.yml (French) 2018-08-17 21:32:15 +09:00
ad0d06c0d8 #332 2018-08-17 21:29:06 +09:00
151476ae8a New translations ja.yml (English) 2018-08-17 19:41:43 +09:00
fbf43c1450 Fix bug 2018-08-17 19:38:39 +09:00
35a1fa5bf0 6.3.0 2018-08-17 19:37:06 +09:00
8d3f71d490 Fix bug 2018-08-17 19:35:05 +09:00
2239eddf88 New translations ja.yml (Catalan) 2018-08-17 19:32:18 +09:00
94ea21d482 New translations ja.yml (Portuguese) 2018-08-17 19:32:15 +09:00
6a39f92431 New translations ja.yml (Korean) 2018-08-17 19:32:12 +09:00
7b2efa35c7 New translations ja.yml (Polish) 2018-08-17 19:32:09 +09:00
c41ea84568 New translations ja.yml (Chinese Simplified) 2018-08-17 19:32:06 +09:00
0e8262e623 New translations ja.yml (Italian) 2018-08-17 19:32:03 +09:00
4d97946943 New translations ja.yml (Russian) 2018-08-17 19:32:00 +09:00
96d48b5519 New translations ja.yml (English) 2018-08-17 19:31:57 +09:00
4cc54d081e New translations ja.yml (Spanish) 2018-08-17 19:31:55 +09:00
aab5a2ffbd New translations ja.yml (German) 2018-08-17 19:31:52 +09:00
c8f165b4ad New translations ja.yml (French) 2018-08-17 19:31:49 +09:00
9776d8e06b Merge pull request #2283 from sei0o/patch-2266
fix #2266
2018-08-17 19:24:10 +09:00
10f845ae76 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-17 19:17:36 +09:00
2c8f962889 #2214 #2155 2018-08-17 19:17:23 +09:00
1721a82352 Merge pull request #2284 from acid-chicken/acid-chicken-patch-3
Auto-generate README
2018-08-17 18:50:17 +09:00
59bec546e4 Create README.foot.md 2018-08-17 18:34:35 +09:00
86503f2d69 Create README.head.md 2018-08-17 18:33:49 +09:00
e4b8c688bb fix #2266: デフォルト値を設定 2018-08-17 17:16:27 +09:00
4535ab4c43 fix #2266 2018-08-17 16:35:04 +09:00
dcdb57df9d Merge pull request #2270 from syuilo/l10n_master
New Crowdin translations
2018-08-17 14:57:51 +09:00
cfc2808c56 New translations ja.yml (English) 2018-08-17 14:51:21 +09:00
4a3d74c608 Merge branch 'master' into l10n_master 2018-08-17 14:48:38 +09:00
e18655d18f Merge pull request #2279 from syuilo/enhance-note-footer
Enhance note footer
2018-08-17 14:43:25 +09:00
12b4b78763 New translations ja.yml (Catalan) 2018-08-17 13:21:27 +09:00
550a528fc1 New translations ja.yml (Portuguese) 2018-08-17 13:21:25 +09:00
4e3429a5c7 New translations ja.yml (Korean) 2018-08-17 13:21:22 +09:00
ef98383075 New translations ja.yml (Polish) 2018-08-17 13:21:20 +09:00
d66d1f142f New translations ja.yml (Chinese Simplified) 2018-08-17 13:21:17 +09:00
c896055cb1 New translations ja.yml (Italian) 2018-08-17 13:21:15 +09:00
2e8b2e0cf9 New translations ja.yml (Russian) 2018-08-17 13:21:13 +09:00
59012b5693 New translations ja.yml (English) 2018-08-17 13:21:11 +09:00
dfb51e8d26 New translations ja.yml (Spanish) 2018-08-17 13:21:09 +09:00
5107824352 New translations ja.yml (German) 2018-08-17 13:21:07 +09:00
bf7ec18316 New translations ja.yml (French) 2018-08-17 13:21:04 +09:00
77d82d2d17 Merge pull request #2282 from sei0o/improve-login-failed-message
ログイン失敗時のメッセージを改善
2018-08-17 13:19:41 +09:00
2777460150 Merge pull request #2278 from mei23/mei-0817-announce3
Misskey => Misskey で renote 出来ない件修正
2018-08-17 13:18:11 +09:00
9476a240d9 ログイン失敗時のメッセージを改善 2018-08-17 12:34:07 +09:00
bddb878931 New translations ja.yml (English) 2018-08-17 10:01:12 +09:00
b0768d8a4a New translations ja.yml (English) 2018-08-17 09:51:19 +09:00
46bb7f9efb New translations ja.yml (English) 2018-08-17 09:41:18 +09:00
a507b7c0b0 Enhance note footer 2018-08-17 07:16:56 +09:00
939c0dc5f9 Fix indent 2018-08-17 06:46:32 +09:00
a89c206572 Fix Announce Activity 2018-08-17 06:40:50 +09:00
8b55263e72 New translations ja.yml (Catalan) 2018-08-17 06:11:53 +09:00
f2ad1e4639 New translations ja.yml (Portuguese) 2018-08-17 06:11:51 +09:00
0fbcec1c16 New translations ja.yml (Korean) 2018-08-17 06:11:48 +09:00
ec2b73d076 New translations ja.yml (Polish) 2018-08-17 06:11:46 +09:00
6630bb0b39 New translations ja.yml (Chinese Simplified) 2018-08-17 06:11:43 +09:00
bef0d4c8bd New translations ja.yml (Italian) 2018-08-17 06:11:41 +09:00
a57cb3bd31 New translations ja.yml (Russian) 2018-08-17 06:11:38 +09:00
1e4577a988 New translations ja.yml (English) 2018-08-17 06:11:36 +09:00
fe792b5bbb New translations ja.yml (Spanish) 2018-08-17 06:11:33 +09:00
d4005133d0 New translations ja.yml (German) 2018-08-17 06:11:31 +09:00
abe8e80268 New translations ja.yml (French) 2018-08-17 06:11:28 +09:00
e38e4940b4 Merge pull request #2277 from syuilo/patch-2276
Resolve #2276
2018-08-17 06:06:07 +09:00
48dc1678c3 Resolve #2276 2018-08-17 06:04:09 +09:00
431383ab54 Clean up 2018-08-17 05:33:20 +09:00
7a8d252f63 Merge pull request #2272 from mei23/mei-0817-debuglog
production以外のときに`npm run debug`が効かないのを修正
2018-08-17 04:04:18 +09:00
04525e2997 New translations ja.yml (Catalan) 2018-08-17 03:52:03 +09:00
a2f96f3f20 New translations ja.yml (Portuguese) 2018-08-17 03:52:01 +09:00
a81ecb0b28 New translations ja.yml (Korean) 2018-08-17 03:51:59 +09:00
1122368ee0 New translations ja.yml (Polish) 2018-08-17 03:51:56 +09:00
6c54328391 New translations ja.yml (Chinese Simplified) 2018-08-17 03:51:54 +09:00
1a26816f7a New translations ja.yml (Italian) 2018-08-17 03:51:52 +09:00
8538334d08 New translations ja.yml (Russian) 2018-08-17 03:51:50 +09:00
9387ebc569 New translations ja.yml (English) 2018-08-17 03:51:48 +09:00
c99dce68ed New translations ja.yml (Spanish) 2018-08-17 03:51:46 +09:00
6dea84c6d2 New translations ja.yml (German) 2018-08-17 03:51:44 +09:00
39060374c2 Fix npm run debug not working 2018-08-17 03:51:42 +09:00
d3ebb5d13f New translations ja.yml (French) 2018-08-17 03:51:41 +09:00
4e7c10d3d9 Merge pull request #2269 from syuilo/verified-user-ja
Update verified-user in ja.yml
2018-08-17 03:47:58 +09:00
e93ea66d2d Update verified-user in ja.yml 2018-08-17 03:47:08 +09:00
152dd70ea5 Merge pull request #2268 from syuilo/space-between-words
Add a space between the words
2018-08-17 03:18:52 +09:00
7b94cf9f84 Add a space between the words 2018-08-17 03:08:17 +09:00
d70e27a865 Provide id in announce activity 2018-08-17 02:37:20 +09:00
b780ea336c 6.2.0 2018-08-17 00:39:30 +09:00
bd9f589d32 Merge pull request #2255 from syuilo/l10n_master
New Crowdin translations
2018-08-17 00:38:30 +09:00
d9d18bd8f9 New translations ja.yml (English) 2018-08-17 00:33:59 +09:00
ffdaa6bc56 Use thumbnail 2018-08-17 00:27:36 +09:00
c7f60e337e New translations ja.yml (English) 2018-08-17 00:23:38 +09:00
7f265dbd52 New translations ja.yml (Catalan) 2018-08-17 00:22:15 +09:00
8929c5cabc New translations ja.yml (Portuguese) 2018-08-17 00:22:12 +09:00
4a610f3b0a New translations ja.yml (Korean) 2018-08-17 00:22:09 +09:00
55ec19edb5 New translations ja.yml (Polish) 2018-08-17 00:22:07 +09:00
c319c61832 New translations ja.yml (Chinese Simplified) 2018-08-17 00:22:05 +09:00
66db99b8cd New translations ja.yml (Italian) 2018-08-17 00:22:02 +09:00
ff2162974d New translations ja.yml (Russian) 2018-08-17 00:22:00 +09:00
78e86af086 New translations ja.yml (English) 2018-08-17 00:21:57 +09:00
2dcf89eecf New translations ja.yml (Spanish) 2018-08-17 00:21:55 +09:00
fdf94be998 New translations ja.yml (German) 2018-08-17 00:21:53 +09:00
0e913a5727 New translations ja.yml (French) 2018-08-17 00:21:50 +09:00
f3be077adc Fix bug 2018-08-17 00:19:27 +09:00
a6e0471f8c ✌️ 2018-08-17 00:13:52 +09:00
c5d734f9ad 6.1.0 2018-08-17 00:09:01 +09:00
ee12d887ae typo 2018-08-17 00:07:23 +09:00
b78d24be1e Fix bug 2018-08-17 00:05:57 +09:00
d5379e2b36 autoWatchをデフォルトでfalseに 2018-08-17 00:04:07 +09:00
cf36557084 New translations ja.yml (Catalan) 2018-08-17 00:00:54 +09:00
fd1ee129dc New translations ja.yml (Portuguese) 2018-08-17 00:00:51 +09:00
1471b7a6b5 New translations ja.yml (Korean) 2018-08-17 00:00:49 +09:00
1d39d7efcb New translations ja.yml (Polish) 2018-08-17 00:00:46 +09:00
69ee97f6e2 New translations ja.yml (Chinese Simplified) 2018-08-17 00:00:44 +09:00
12092e6083 New translations ja.yml (Italian) 2018-08-17 00:00:41 +09:00
6e29e40b8b New translations ja.yml (Russian) 2018-08-17 00:00:39 +09:00
842c9e735b New translations ja.yml (English) 2018-08-17 00:00:37 +09:00
2f63a25058 New translations ja.yml (Spanish) 2018-08-17 00:00:33 +09:00
d3b084003c New translations ja.yml (German) 2018-08-17 00:00:31 +09:00
0da9d3d8b0 New translations ja.yml (French) 2018-08-17 00:00:27 +09:00
58f3c6aab7 Merge branch 'master' of https://github.com/syuilo/misskey 2018-08-16 23:59:25 +09:00
22e79675ad #2263 2018-08-16 23:59:22 +09:00
e5c350d740 Fix bug 2018-08-16 23:33:11 +09:00
210124ac34 New translations ja.yml (English) 2018-08-16 21:24:31 +09:00
7f9a35d7ac Improve object storage key 2018-08-16 21:23:31 +09:00
71a30f9001 New translations ja.yml (Korean) 2018-08-16 21:02:39 +09:00
95a34d55fb New translations ja.yml (English) 2018-08-16 21:02:36 +09:00
34f052b672 New translations ja.yml (Korean) 2018-08-16 20:51:53 +09:00
0178c2e696 New translations ja.yml (English) 2018-08-16 20:51:51 +09:00
5cb0c07627 New translations ja.yml (English) 2018-08-16 20:24:07 +09:00
d8fdbfe164 New translations ja.yml (English) 2018-08-16 20:11:53 +09:00
74e0b2734d New translations ja.yml (English) 2018-08-16 20:06:07 +09:00
3f5785bd03 New translations ja.yml (English) 2018-08-16 17:43:46 +09:00
15e5c69c15 New translations ja.yml (English) 2018-08-16 17:32:01 +09:00
57019c0b40 New translations ja.yml (English) 2018-08-16 09:01:03 +09:00
9d6641be3a Fix bug 2018-08-16 08:18:41 +09:00
312 changed files with 7198 additions and 2849 deletions

87
.autogen/autogen.sh Executable file
View File

@ -0,0 +1,87 @@
#!/usr/bin/env bash
# __MISSKEY_BEARER_TOKEN=
# __MISSKEY_CAMPAIGN_ID=
# __MISSKEY_GITHUB_TOKEN=
# __MISSKEY_HEAD=acid-chicken:patch-autogen
# __MISSKEY_REPO=syuilo/misskey
# __MISSKEY_BRANCH=develop
test "$(curl -LSs -w '\n' -- "https://api.github.com/repos/$REPO/pulls?access_token=$__MISSKEY_GITHUB_TOKEN" | jq -r '.[].head.label' | grep $__MISSKEY_HEAD)" && exit 1
cd "$(dirname $0)/.." && \
touch null.cache && \
rm *.cache && \
git checkout $__MISSKEY_BRANCH && \
git pull origin $__MISSKEY_BRANCH && \
git pull upstream $__MISSKEY_BRANCH && \
git stash && \
git rebase -f upstream/$__MISSKEY_BRANCH && \
git branch patch-autogen && \
git checkout patch-autogen && \
git reset --hard HEAD || \
exit 1
touch patreon.md.cache && \
rm patreon.md.cache && \
echo '<!-- PATREON_START -->' > patreon.md.cache && \
url="https://www.patreon.com/api/oauth2/v2/campaigns/$__MISSKEY_CAMPAIGN_ID/members?include=currently_entitled_tiers,user&fields%5Btier%5D=title&fields%5Buser%5D=full_name,thumb_url,url,hide_pledges"
while :
do
touch patreon.raw.cache && \
rm patreon.raw.cache && \
curl -LSs -w '\n' -H "Authorization: Bearer $__MISSKEY_BEARER_TOKEN" -- $url > patreon.raw.cache && \
touch patreon.cache && \
rm patreon.cache && \
cat patreon.raw.cache | \
jq -r '(.data|map(select(.relationships.currently_entitled_tiers.data[]))|map(.relationships.user.data.id))as$data|.included|map(select(.attributes.hide_pledges==false))|map(select(.id as$id|$data|contains([$id])))|map(.attributes|[.full_name,.thumb_url,.url]|@tsv)|.[]|@text' >> patreon.cache && \
echo '<table><tr>' >> patreon.md.cache && \
cat patreon.cache | \
awk -F'\t' '{print $2,$1}' | \
sed -e 's/ /\\" alt=\\"/' | \
xargs -I% echo '<td><img src="%"></td>' >> patreon.md.cache && \
echo '</tr><tr>' >> patreon.md.cache && \
cat patreon.cache | \
awk -F'\t' '{print $3,$1}' | \
sed -e 's/ /\\">/' | \
xargs -I% echo '<td><a href="%</a></td>' >> patreon.md.cache && \
echo '</tr></table>' >> patreon.md.cache || \
exit 1
new_url="$(cat patreon.raw.cache | jq -r '.links.next')"
test "$new_url" = 'null' && \
break || \
URL="$url"
done
ignore= && \
echo -e "\n**Last updated:** $(date -uR | sed 's/\+0000/UTC/')\n<!-- PATREON_END -->" >> patreon.md.cache && \
touch README.md && \
touch .autogen/README.md && \
rm .autogen/README.md && \
mv README.md .autogen/README.md && \
cat .autogen/README.md | while IFS= read line;
do
if [[ -z "$ignore" ]]
then
if [[ "$line" = '<!-- PATREON_START -->' ]]
then
ignore='PATREON_INSIDE'
else
echo "$line" >> README.md
fi
else
if [[ "$LINE" = '<!-- PATREON_END -->' ]]
then
ignore=
cat patreon.md.cache >> README.md
fi
fi
done
cat patreon.md.cache
touch null.cache && \
rm *.cache && \
diff .autogen/README.md README.md > diff.cache
cat diff.cache && \
test 4 -lt $(cat diff.cache | wc -l) && \
git add README.md && \
git commit -m 'Update README.md [AUTOGEN]' && \
git push -f origin patch-autogen && \
curl -LSs -w '\n' -X POST -d '{"title":"[AUTOMATED] Update README.md","body":"*This pull request was created by a tool.*","head":"'$__MISSKEY_HEAD'","base":"'$__MISSKEY_BRANCH'"}' -- "https://api.github.com/repos/$__MISSKEY_REPO/pulls?access_token=$__MISSKEY_GITHUB_TOKEN"
git stash
git checkout $__MISSKEY_BRANCH
git branch -D patch-autogen

View File

@ -138,3 +138,6 @@ drive:
# Clustering
# clusterLimit: 1
# Summaly proxy
# summalyProxy: "http://example.com"

2
.npmrc
View File

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

View File

@ -5,6 +5,25 @@ ChangeLog
This document describes breaking changes only.
8.0.0
-----
### Migration
起動する前に、`node cli/migration/8.0.0`してください。
Please run `node cli/migration/8.0.0` before launch.
7.0.0
-----
### Migration
起動する前に、`node cli/migration/7.0.0`してください。
Please run `node cli/migration/7.0.0` before launch.
6.0.0
-----
@ -28,13 +47,13 @@ Please run `node cli/migration/5.0.0` before launch.
オセロがリバーシに変更されました。
Othello is now Reversi.
Othello is rename to Reversi.
### Migration
MongoDBの、`othelloGames``othelloMatchings`コレクションをそれぞれ`reversiGames``reversiMatchings`にリネームしてください。
You need to rename `othelloGames` and `othelloMatchings` MongoDB collections to `reversiGames` and `reversiMatchings`.
Please rename `othelloGames` and `othelloMatchings` MongoDB collections to `reversiGames` and `reversiMatchings` respectively.
3.0.0
-----

View File

@ -1,27 +1,27 @@
# Contribution guide
:v: Misskeyへの貢献ありがとうございます。 :v:
:v: Thanks for your contributions :v:
## Issueの報告
新機能の提案や不具合の報告は https://github.com/syuilo/misskey/issues で管理しています。
Issueを作成する前に、既に同じIssueが作成されていないかご確認ください。
もし既にIssueが作成されている場合は、既存のIssueにコメントをしたりリアクションをするようお願いします。
## Issues
Feature suggestions and bug reports are filed in https://github.com/syuilo/misskey/issues .
Before creating a new issue, please search existing issues to avoid duplication.
If you find the existing issue, please add your reaction or comment to the issue.
## Issueの解決
[pr-welcomeのラベルがついているIssue](https://github.com/syuilo/misskey/labels/pr-welcome)
の解決を目的としたPull Requestを作成してくださると非常にありがたいです。
## Internationalization (i18n)
Please see [Translation guide](./docs/translate.en.md).
## 翻訳の改善
ソースコード中の `%i18n:id%` という形の文字列は、言語ファイルの対応するテキストに置換されます。
言語ファイルは /locales ディレクトリに存在します。
## Localization (l10n)
Please use [Crowdin](https://crowdin.com/project/misskey) for localization.
## ドキュメントの編集
現在Misskeyはドキュメントが大きく不足しています。
ドキュメントは /docs ディレクトリに存在します。
![Crowdin](https://d322cqt584bo4o.cloudfront.net/misskey/localized.svg)
## テストの追加
現在Misskeyはテストが大きく不足しています。
テストコードは /test ディレクトリに存在します。
## Documentation
* Documents for contributors are located in `/docs`.
* Documents for instance admins are located in `/docs`.
* Documents for end users are located in `src/docs`.
## 自動テスト及び自動リリース
Travis CIで行っています。
設定ファイルは /.travis に存在します。
## Test
* Test codes are located in `/test`.
## Continuous integration
Misskey uses Travis for automated test.
Configuration files are located in `/.travis`.

View File

@ -7,10 +7,12 @@
[![][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/)
**Microblogging. Redefined.**
Sophisticated microblogging platform, evolving forever.
**[Misskey](https://misskey.xyz)** is a completely open source,
ultimately sophisticated professional microblogging software.
[Misskey](https://misskey.xyz) is a decentralized microblogging platform born on Earth.
Since it exists within the Fediverse (a universe where various social media platforms are organized),
it is mutually linked with other social media platforms.
Why don't you take a short break from the hustle and bustle of the city, and dive into a new Internet?
<a href="https://www.patreon.com/syuilo"><img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" alt="Become a Patron!" width="160" /></a>
@ -22,55 +24,58 @@ ultimately sophisticated professional microblogging software.
* Reactions
* User lists
* Customizable column view (called MisskeyDeck)
* and widgets!
* Customizable widgets
* Private messages
* ActivityPub support
and more! You can see it with your own eyes at [misskey.xyz](https://misskey.xyz).
:package: Create your instance
:package: Create your own instance
----------------------------------------------------------------
If you want to run your own instance of Misskey,
please see [Setup and installation guide](./docs/setup.en.md).
Please see [Setup and installation guide](./docs/setup.en.md).
:wrench: Contribute
:wrench: Contribution
----------------------------------------------------------------
**[PR](https://github.com/syuilo/misskey/pulls)s welcome!**
If you want to...
* i18n ... please see [Translation guide](./docs/translate.en.md).
* l10n ... please visit https://crowdin.com/project/misskey
Please see [Contribution guide](./CONTRIBUTING.md).
:heart: Backers & Sponsors
----------------------------------------------------------------
<table>
<tr>
<td><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"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12378075/0156f769e20f412594fa6b87d85fe228/1?token-time=2145916800&token-hash=IsIJRUXszzoD6-7pDnRY8I05T9nSznc4GTaxj7C9SwU%3D"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=S1zP0QyLU52Dqq6dtc9qNYyWfW86XrYHiR4NMbeOrnA%3D"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=tMosUojzUYJCH_3t--tvYA-SMCyrS__hzSndyaRSnbo%3D"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12959468/c249e15aebec4424b5c0f427173671b6/1?token-time=2145916800&token-hash=lubpCEdxAkxPlpR2O6bvZ7BIh8Q4nGf-U_mE1qpjVAQ%3D"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/1?token-time=2145916800&token-hash=f03BFb4S2FUx9YEt87TnEmifb4h33OywGBW2akQVtQY%3D"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/2?token-time=2145916800&token-hash=zElv7ZcPL3viGsXbNG_KWiKrbV0vvw1gk0panx8DJoo%3D"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12731202/0995c46cdcb54153ab5f073f5869b70a/1?token-time=2145916800&token-hash=Yd60FK_SWfQO56SeiJpy1tDHOnCV4xdEywQe8gn5_Wo%3D"></td>
<td><img src="https://c8.patreon.com/2/100/12718187"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12931605/ead494101f364dffa90efe49e36fb494/1?token-time=2145916800&token-hash=NzSFPjIlodXyv41rwK61aZWVZWfI4surJaNj8vWKvqM%3D"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1?token-time=2145916800&token-hash=GgJ_NmUB6_nnRNLVGUWjV-WX91On7BOu59LKncYV9fE%3D"></td>
</tr>
<tr>
<td><a href="https://www.patreon.com/mastodon">Gargron</a></td>
<td><a href="https://www.patreon.com/user/creators?u=12378075">39ff</a></td>
<td><a href="https://www.patreon.com/dansup">dansup</a></td>
<td><a href="https://www.patreon.com/user/creators?u=12531784">Takashi Shibuya</a></td>
<td><a href="https://www.patreon.com/fujishan">fujishan</a></td>
<td><a href="https://www.patreon.com/user?u=12913507">Melilot</a></td>
<td><a href="https://www.patreon.com/user?u=5881381">Naoki Kosaka</a></td>
<td><a href="https://www.patreon.com/user?u=12731202">negao</a></td>
<td><a href="https://www.patreon.com/user?u=12718187">Peter G.</a></td>
<td><a href="https://www.patreon.com/user?u=12931605">Reiju</a></td>
<td><a href="https://www.patreon.com/gutfuckllc">gutfuckllc</a></td>
</tr>
</table>
<!-- PATREON_START -->
<table><tr>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12731202/0995c46cdcb54153ab5f073f5869b70a/1?token-time=2145916800&token-hash=Yd60FK_SWfQO56SeiJpy1tDHOnCV4xdEywQe8gn5_Wo%3D" alt="negao"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13099460/43cecdbaa63a40d79bf50a96b9910b9d/1?token-time=2145916800&token-hash=d6P5MWHHsCMxUuBAEPAoVc5wLUR19mIhqAq7Ma9h9rI%3D" alt="ne_moni"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/1?token-time=2145916800&token-hash=f03BFb4S2FUx9YEt87TnEmifb4h33OywGBW2akQVtQY%3D" alt="Melilot"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12999811/5f349fafcce44dd1824a8b1ebbec4564/2?token-time=2145916800&token-hash=rwZ8qvbm_kpA4ib3kc07tVKupXeySpY5ATQFGxfL9v0%3D" alt="Axella"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/3384329/8b713330cb27404ea6e9fac50ff96efe/1?token-time=2145916800&token-hash=0eu4-m1gTWA9PhptVZt6rdKcusqcD7RB87rJT23VVFI%3D" alt="べすれい"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1?token-time=2145916800&token-hash=GgJ_NmUB6_nnRNLVGUWjV-WX91On7BOu59LKncYV9fE%3D" alt="gutfuckllc"></td>
<td><img src="https://c8.patreon.com/2/100/12718187" alt="Peter G."></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13039004/509d0c412eb14ae08d6a812a3054f7d6/1?token-time=2145916800&token-hash=zwSu01tOtn5xTUucDZHuPsCxF2HBEMVs9ROJKTlEV_o%3D" alt="nemu"></td>
</tr><tr>
<td><a href="https://www.patreon.com/user?u=12731202">negao</a></td>
<td><a href="https://www.patreon.com/user?u=13099460">ne_moni</a></td>
<td><a href="https://www.patreon.com/user?u=12913507">Melilot</a></td>
<td><a href="https://www.patreon.com/AxellaMC">Axella</a></td>
<td><a href="https://www.patreon.com/user?u=3384329">べすれい</a></td>
<td><a href="https://www.patreon.com/gutfuckllc">gutfuckllc</a></td>
<td><a href="https://www.patreon.com/user?u=12718187">Peter G.</a></td>
<td><a href="https://www.patreon.com/user?u=13039004">nemu</a></td>
</tr></table>
<table><tr>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/2?token-time=2145916800&token-hash=zElv7ZcPL3viGsXbNG_KWiKrbV0vvw1gk0panx8DJoo%3D" alt="Naoki Kosaka"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12931605/ead494101f364dffa90efe49e36fb494/1?token-time=2145916800&token-hash=NzSFPjIlodXyv41rwK61aZWVZWfI4surJaNj8vWKvqM%3D" alt="Reiju"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1?token-time=2145916800&token-hash=UERBN4OyP7Nh5XwwdDg0N0IE5cD6_qUQMO81Z5Wizso%3D" alt="Hiratake"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=S1zP0QyLU52Dqq6dtc9qNYyWfW86XrYHiR4NMbeOrnA%3D" alt="dansup"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=tMosUojzUYJCH_3t--tvYA-SMCyrS__hzSndyaRSnbo%3D" alt="Takashi Shibuya"></td>
</tr><tr>
<td><a href="https://www.patreon.com/user?u=5881381">Naoki Kosaka</a></td>
<td><a href="https://www.patreon.com/user?u=12931605">Reiju</a></td>
<td><a href="https://www.patreon.com/hiratake">Hiratake</a></td>
<td><a href="https://www.patreon.com/dansup">dansup</a></td>
<td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
</tr></table>
**Last updated:** Sun, 02 Sep 2018 05:30:06 UTC
<!-- PATREON_END -->
:four_leaf_clover: Copyright
----------------------------------------------------------------

View File

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

View File

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

View File

@ -1,40 +0,0 @@
const { default: User, deleteUser } = require('../built/models/user');
const { default: zip } = require('@prezzemolo/zip')
const migrate = async (user) => {
try {
await deleteUser(user._id);
return true;
} catch (e) {
return false;
}
}
async function main() {
const count = await User.count({
uri: /#/
});
const dop = 1
const idop = ((count - (count % dop)) / dop) + 1
return zip(
1,
async (time) => {
console.log(`${time} / ${idop}`)
const doc = await User.find({
uri: /#/
}, {
limit: dop, skip: time * dop
})
return Promise.all(doc.map(migrate))
},
idop
).then(a => {
const rv = []
a.forEach(e => rv.push(...e))
return rv
})
}
main().then(console.dir).catch(console.error)

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

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

144
cli/migration/8.0.0.js Normal file
View File

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

View File

@ -1,3 +1,3 @@
files:
- source: /locales/ja.yml
translation: /locales/%two_letters_code%.yml
- source: /locales/ja-JP.yml
translation: /locales/%locale%.yml

View File

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

View File

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

View File

@ -54,7 +54,7 @@ Please visit https://www.google.com/recaptcha/intro/ and generate keys.
*(optional)* Generating VAPID keys
----------------------------------------------------------------
If you want to enable ServiceWroker, you need to generate VAPID keys:
If you want to enable ServiceWorker, you need to generate VAPID keys:
Unless you have set your global node_modules location elsewhere, you need to run this in root.
``` shell
@ -131,6 +131,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`
5. Check [ChangeLog](../CHANGELOG.md) for migration information
----------------------------------------------------------------

View File

@ -120,6 +120,7 @@ WantedBy=multi-user.target
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
3. `npm install`
4. `npm run build`
5. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する
----------------------------------------------------------------

View File

@ -11,12 +11,12 @@ If you find an untranslated part on Misskey:
- In fact, `foo` should be a word that is appropriate for the situation and is easy to understand in English.
- For example, if the untranslated portion is the following "タイムライン" you must write: `%i18n:@timeline%`.
3. Open the `locales/ja.yml`, check whether the <strong>file name (path)</strong> found in step 1 exists, if not, create it.
3. Open the `locales/ja-JP.yml`, check whether the <strong>file name (path)</strong> found in step 1 exists, if not, create it.
- Do not put the beginning of the path `src/client/app/` in the locale file.
- For example, in this case we want to modify untranslated parts of `src/client/app/mobile/views/pages/home.vue`, so the key is `mobile/views/pages/home.vue`.
4. Add the text property using the `foo` keyword below the path that you found or created in step 2. Make sure to type your text in quotation marks. Text should always be inside of quotes.
- For example, in this case we add timeline: `timeline: "タイムライン"` to `locales/ja.yml`.
- For example, in this case we add timeline: `timeline: "タイムライン"` to `locales/ja-JP.yml`.
5. And done

View File

@ -16,7 +16,7 @@ Si vous trouvez un segment non-traduit sur Misskey :
- Par exemple, dans ce cas de figure, nous voulons modifier le segment non-traduit de : `src/client/app/mobile/views/pages/home.vue`donc il faut juste écrire : `mobile/views/pages/home.vue` dans les fichiers linguistiques.
4. Ajoutez la propriété du texte traduit grâce à la clef `foo`, en-dessous du chemin correspondant à votre modification que vous avez trouvé ou créé dans l'étape 2. À côté, veuillez indiquer entre "guillemets" la valeur de votre traduction.
- Par exemple, dans ce cas de figure, nous ajoutons la propriété et la traduction `timeline: "Timeline"` à `locales/fr.yml`, mais aussi la propriété et la version originale `timeline: "タイムライン"` à `locales/ja.yml`.
- Par exemple, dans ce cas de figure, nous ajoutons la propriété et la traduction `timeline: "Timeline"` à `locales/fr.yml`, mais aussi la propriété et la version originale `timeline: "タイムライン"` à `locales/ja-JP.yml`.
5. Vous avez réussi à traduire une portion de misskey

View File

@ -11,12 +11,12 @@ Misskey内の未翻訳箇所を見つけたら
- `foo`は実際にはその場に適したわかりやすい(英語の)名前にしてください。
- 例えば未翻訳箇所が「タイムライン」というテキストだった場合、`%i18n:@timeline%`のようにします。
3. `locales/ja.yml`を開き、1.で見つけた<strong>ファイル名(パス)</strong>のキーが存在するか確認し、無ければ作成してください。
3. `locales/ja-JP.yml`を開き、1.で見つけた<strong>ファイル名(パス)</strong>のキーが存在するか確認し、無ければ作成してください。
- パスの`src/client/app/`は省略してください。
- 例えば、今回の例では`src/client/app/mobile/views/pages/home.vue`の未翻訳箇所を修正したいので、キーは`mobile/views/pages/home.vue`になります。
4. そのキーの直下に2.で置換した`foo`の部分をキーとし、テキストを値とするプロパティを追加します。
- 例えば、今回の例で言うと`locales/ja.yml``timeline: "タイムライン"`を追加します。
- 例えば、今回の例で言うと`locales/ja-JP.yml``timeline: "タイムライン"`を追加します。
5. 完了です!

View File

@ -23,7 +23,6 @@ const uglifyes = require('uglify-es');
const locales = require('./locales');
import { fa } from './src/misc/fa';
import config from './src/config';
const uglify = uglifyComposer(uglifyes, console);
@ -60,7 +59,16 @@ gulp.task('build:copy:views', () =>
gulp.src('./src/server/web/views/**/*').pipe(gulp.dest('./built/server/web/views'))
);
gulp.task('build:copy', ['build:copy:views'], () =>
// 互換性のため
gulp.task('build:copy:lang', () =>
gulp.src(['./built/client/assets/*.*-*.js'])
.pipe(rename(path => {
path.basename = path.basename.replace(/\-(.*)$/, '');
}))
.pipe(gulp.dest('./built/client/assets/'))
);
gulp.task('build:copy', ['build:copy:views', 'build:copy:lang'], () =>
gulp.src([
'./build/Release/crypto_key.node',
'./src/const.json',
@ -118,7 +126,6 @@ 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)))
.pipe(replace('LANGS', JSON.stringify(Object.keys(locales))))
.pipe(isProduction ? uglify({

3
locales/README.md Normal file
View File

@ -0,0 +1,3 @@
# **DO NOT edit locale files** except `ja-JP.yml`.
Please see [Contribution guide](../CONTRIBUTING.md) for more information.

View File

@ -84,7 +84,8 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
reversi:
drawn: "引き分け"
@ -287,7 +288,10 @@ common/views/components/signin.vue:
signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "ユーザー名"
checking: "確認しています..."
available: "利用できます"
@ -407,6 +411,7 @@ desktop:
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
invalid-filetype: "この形式のファイルはサポートされていません"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@ -420,6 +425,24 @@ desktop/views/components/calendar.vue:
prev: "前の月"
next: "次の月"
go: "クリックして時間遡行"
desktop/views/components/charts.vue:
title: "チャート"
per-day: "1日ごと"
per-hour: "1時間ごと"
notes: "投稿"
users: "ユーザー"
drive: "ドライブ"
charts:
notes: "投稿の増減 (統合)"
local-notes: "投稿の増減 (ローカル)"
remote-notes: "投稿の増減 (リモート)"
notes-total: "投稿の累計"
users: "ユーザーの増減"
users-total: "ユーザーの累計"
drive: "ドライブ使用量の増減"
drive-total: "ドライブ使用量の累計"
drive-files: "ドライブのファイル数の増減"
drive-files-total: "ドライブのファイル数の累計"
desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "ファイル選択中"
upload: "PCからドライブにファイルをアップロード"
@ -440,6 +463,7 @@ desktop/views/components/drive-window.vue:
desktop/views/components/drive.file.vue:
avatar: "アイコン"
banner: "バナー"
nsfw: "閲覧注意"
contextmenu:
rename: "名前を変更"
mark-as-sensitive: "閲覧注意に設定"
@ -625,9 +649,12 @@ desktop/views/components/settings.vue:
circle-icons: "円形のアイコンを使用"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "サウンド"
@ -748,6 +775,7 @@ desktop/views/components/ui.header.account.vue:
lists: "リスト"
follow-requests: "フォロー申請"
customize: "ホームのカスタマイズ"
admin: "管理"
settings: "設定"
signout: "サインアウト"
dark: "闇に飲まれる"
@ -793,8 +821,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
@ -803,6 +832,14 @@ desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー"
@ -811,6 +848,11 @@ desktop/views/pages/deck/deck.note.vue:
reposted-by: "{}がRenote"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
@ -835,7 +877,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "{}で共有"
@ -928,12 +970,15 @@ mobile/views/components/drive-file-chooser.vue:
select-file: "ファイルを選択"
mobile/views/components/drive-folder-chooser.vue:
select-folder: "フォルダーを選択"
mobile/views/components/drive.file.vue:
nsfw: "閲覧注意"
mobile/views/components/drive.file-detail.vue:
download: "ダウンロード"
rename: "名前を変更"
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
nsfw: "閲覧注意"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
@ -1014,6 +1059,7 @@ mobile/views/components/ui.nav.vue:
game: "ゲーム"
darkmode: "ダークモード"
settings: "設定"
admin: "管理"
about: "Misskeyについて"
mobile/views/components/user-timeline.vue:
no-notes: "このユーザーは投稿していないようです。"
@ -1106,7 +1152,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル"
post-style-standard: "標準"
post-style-smart: "スマート"
@ -1130,6 +1177,8 @@ mobile/views/pages/settings.vue:
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
sound: "サウンド"
enableSounds: "サウンドを有効にする"
mobile/views/pages/user.vue:
follows-you: "フォローされています"
following: "フォロー"

View File

@ -58,7 +58,7 @@ common:
friday: "金曜日"
saturday: "土曜日"
reactions:
like: "Gefällt mir"
like: "いいね"
love: "Lieben"
laugh: "Lachen"
hmm: "Hmm...?"
@ -84,7 +84,8 @@ common:
my-token-regenerated: "Dein Token wurde generiert. Du wirst jetzt abgemeldet."
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
reversi:
drawn: "引き分け"
@ -287,7 +288,10 @@ common/views/components/signin.vue:
signin: "Anmelden"
or: "または"
signin-with-twitter: "Twitterでログイン"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "Benutzername"
checking: "Überprüfung..."
available: "Verfügbar"
@ -407,6 +411,7 @@ desktop:
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
invalid-filetype: "この形式のファイルはサポートされていません"
desktop/views/components/activity.chart.vue:
total: "Schwarz ... komplett"
notes: "Blau ... Hinweise"
@ -420,6 +425,24 @@ desktop/views/components/calendar.vue:
prev: "Vorheriger Monat"
next: "Nächster Monat"
go: "Klicke zur Navigation"
desktop/views/components/charts.vue:
title: "チャート"
per-day: "1日ごと"
per-hour: "1時間ごと"
notes: "投稿"
users: "ユーザー"
drive: "ドライブ"
charts:
notes: "投稿の増減 (統合)"
local-notes: "投稿の増減 (ローカル)"
remote-notes: "投稿の増減 (リモート)"
notes-total: "投稿の累計"
users: "ユーザーの増減"
users-total: "ユーザーの累計"
drive: "ドライブ使用量の増減"
drive-total: "ドライブ使用量の累計"
drive-files: "ドライブのファイル数の増減"
drive-files-total: "ドライブのファイル数の累計"
desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "Datei auswählen"
upload: "Dateien von deinem PC hochladen"
@ -440,6 +463,7 @@ desktop/views/components/drive-window.vue:
desktop/views/components/drive.file.vue:
avatar: "Avatar"
banner: "Banner"
nsfw: "閲覧注意"
contextmenu:
rename: "Umbenennen"
mark-as-sensitive: "閲覧注意に設定"
@ -625,9 +649,12 @@ desktop/views/components/settings.vue:
circle-icons: "Kreisförmige Icons"
gradient-window-header: "Übergang in Fensterköpfen"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "Zeige Antworten"
show-my-renotes: "Zeige meine Reposts auf der Zeitleiste"
show-renoted-my-notes: "Zeige meine Reposts, die geteilt wurden, auf der Zeitleiste"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "Karte anzeigen"
show-maps-desc: "Zeige den Standort zu diesem Beitrag automatisch an."
sound: "Ton"
@ -748,6 +775,7 @@ desktop/views/components/ui.header.account.vue:
lists: "Listen"
follow-requests: "フォロー申請"
customize: "ホームのカスタマイズ"
admin: "管理"
settings: "Einstellungen"
signout: "Ausloggen"
dark: "Verdunkeln"
@ -793,8 +821,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
@ -803,6 +832,14 @@ desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー"
@ -811,6 +848,11 @@ desktop/views/pages/deck/deck.note.vue:
reposted-by: "{}がRenote"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
@ -835,7 +877,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "Abbrechen"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "{}で共有"
@ -928,12 +970,15 @@ mobile/views/components/drive-file-chooser.vue:
select-file: "ファイルを選択"
mobile/views/components/drive-folder-chooser.vue:
select-folder: "フォルダーを選択"
mobile/views/components/drive.file.vue:
nsfw: "閲覧注意"
mobile/views/components/drive.file-detail.vue:
download: "ダウンロード"
rename: "名前を変更"
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
nsfw: "閲覧注意"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
@ -1014,6 +1059,7 @@ mobile/views/components/ui.nav.vue:
game: "ゲーム"
darkmode: "ダークモード"
settings: "設定"
admin: "管理"
about: "Misskeyについて"
mobile/views/components/user-timeline.vue:
no-notes: "このユーザーは投稿していないようです。"
@ -1106,7 +1152,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル"
post-style-standard: "標準"
post-style-smart: "スマート"
@ -1130,6 +1177,8 @@ mobile/views/pages/settings.vue:
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
sound: "サウンド"
enableSounds: "サウンドを有効にする"
mobile/views/pages/user.vue:
follows-you: "フォローされています"
following: "フォロー"

View File

@ -16,7 +16,7 @@ common:
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."
paragraph2: "You can change the display by <strong><strong>right</strong> clicking</strong> on some widgets."
paragraph3: "To delete a widget, drag and drop the widget onto <strong>the area labeled \"Trash\"</strong> in the header."
paragraph4: "To finish the customization, click \"Finish\" on the upper right."
gotit: "Got it!"
@ -72,9 +72,9 @@ common:
a: "What are you doing?"
b: "What's happening?"
c: "Whats on your mind?"
d: "What do you wish to say?"
d: "Would you post any words?"
e: "Write here"
f: "Waiting for your writing..."
f: "Waiting for your writing."
search: "Search"
delete: "Delete"
loading: "Loading"
@ -84,7 +84,8 @@ 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: "Authorized User"
use-contrast-reversi-stones: "Make the stone color clear"
verified-user: "Verified account"
disable-animated-mfm: "Disable animated texts in a post"
reversi:
drawn: "Draw"
@ -141,11 +142,11 @@ common:
auth/views/form.vue:
share-access: "Would you <b>allow</b> <i>{{ app.name }}</i> to access your account?"
permission-ask: "This application requires the following permissions:"
account-read: "Viewing account information:"
account-write: "Modify account informations:"
account-read: "View account information."
account-write: "Modify account information."
note-write: "Post."
like-write: "To react to posts."
following-write: "Follow or unfollow."
like-write: "React to posts."
following-write: "Follow and unfollow."
drive-read: "Read your drive."
drive-write: "Upload/delete files in your drive."
notification-read: "Read your notifications."
@ -154,10 +155,10 @@ auth/views/form.vue:
accept: "Allow access."
auth/views/index.vue:
loading: "Loading"
denied: "Application authorization denied."
denied: "Application authorization has been denied."
denied-paragraph: "This application will not access your account."
already-authorized: "This application has already been authorized."
allowed: "Application authorizations allowed.+"
allowed: "Application authorizations allowed."
callback-url: "Going back to the application."
please-go-back: "Please go back to the application."
error: "Session does not exist."
@ -169,7 +170,7 @@ common/views/components/games/reversi/reversi.vue:
common/views/components/games/reversi/reversi.game.vue:
surrender: "Surrender"
surrendered: "By surrender"
is-llotheo: "The lesser one wins"
is-llotheo: "The lesser one wins(Llotheo)"
looped-map: "Looped map"
can-put-everywhere: "Can put everywhere"
common/views/components/games/reversi/reversi.index.vue:
@ -200,7 +201,7 @@ common/views/components/games/reversi/reversi.room.vue:
settings-of-the-bot: "Bot settings"
this-game-is-started-soon: "The game will begin in seconds"
waiting-for-other: "Waiting for the opponent"
waiting-for-me: "Waiting for you"
waiting-for-me: "Waiting for the your preparation"
waiting-for-both: "Prepareing"
cancel: "Cancel"
ready: "Ready"
@ -226,7 +227,7 @@ common/views/components/connect-failed.troubleshooter.vue:
no-server: "Unable to connect to the Misskey server"
no-server-desc: "The network connection of your device is normal, but you could not connect to the Misskey server. There is a possibility that the server is either down, or under maintenance, please try again later."
success: "Successfully connected to the Misskey server"
success-desc: "It seems to be able to connect. Please reload the page."
success-desc: "Looks like we have a connection. Please reload the page."
flush: "Clean cache"
set-version: "Specify version"
common/views/components/messaging.vue:
@ -278,7 +279,7 @@ common/views/components/poll-editor.vue:
add: "+ Add a choice"
destroy: "Discard the poll"
common/views/components/reaction-picker.vue:
choose-reaction: "Express a reaction"
choose-reaction: "Send a reaction"
common/views/components/signin.vue:
username: "Username"
password: "Password"
@ -287,7 +288,10 @@ common/views/components/signin.vue:
signin: "Sign in"
or: "Or"
signin-with-twitter: "Log in with Twitter"
login-failed: "Log in failed. Make sure you have entered your correct username and password."
common/views/components/signup.vue:
invitation-code: "Invitation code"
invitation-info: "If you do not have an invitation code, please contact an <a href=\"{}\">administrator</a>."
username: "Username"
checking: "Confirming..."
available: "Available"
@ -347,7 +351,7 @@ common/views/widgets/calendar.vue:
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!"
text: "To keep Misskey up and running, there have to happen some expense for the domain name, the server and so on. Since our policy is not to display any advertisements, we count on your donations. If you're interested in helping, contact {}. Thank you for your contribution!"
common/views/widgets/photo-stream.vue:
title: "Photo stream"
no-photos: "No photos"
@ -388,8 +392,8 @@ common/views/widgets/tips.vue:
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."
tips-line24: "Misskey has been running since 2014."
tips-line25: "In a browser compatible with notification features, you can receive notifications in case Misskey is not open"
common/views/pages/follow.vue:
signed-in-as: "Signed in as {}"
following: "Following"
@ -407,6 +411,7 @@ desktop:
uploading-avatar: "Uploading a new avatar"
avatar-updated: "Successfully updated the avatar"
choose-avatar: "Select an image for the avatar"
invalid-filetype: "This filetype is not acceptable here"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@ -420,6 +425,24 @@ desktop/views/components/calendar.vue:
prev: "Previous month"
next: "Next month"
go: "Click to navigate"
desktop/views/components/charts.vue:
title: "Charts"
per-day: "per Day"
per-hour: "per Hour"
notes: "Posts"
users: "Users"
drive: "Drive"
charts:
notes: "The number of posts: increase/decrease (Combined)"
local-notes: "The number of posts: increase/decrease (Local)"
remote-notes: "The number of posts: increase/decrease (Remote)"
notes-total: "The number of posts: cumulative total"
users: "The number of users: increase/decrease"
users-total: "The number of users: cumulative total"
drive: "Capacity used as the storage: increase/decrease"
drive-total: "Capacity used as the storage: cumulative total"
drive-files: "The number of files on the storage: increase/decrease"
drive-files-total: "The number of files on the storage: cumulative total"
desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "Choose files"
upload: "Upload files from your device"
@ -440,6 +463,7 @@ desktop/views/components/drive-window.vue:
desktop/views/components/drive.file.vue:
avatar: "Avatar"
banner: "Banner"
nsfw: "NSFW"
contextmenu:
rename: "Rename"
mark-as-sensitive: "Mark as 'sensitive'"
@ -470,7 +494,7 @@ desktop/views/components/drive.nav-folder.vue:
desktop/views/components/drive.vue:
search: "Search"
load-more: "Load more"
empty-draghover: "Drop it here, don't I look cute?"
empty-draghover: "Drop it here! Yep, cuz you know I'm cute, right?"
empty-drive: "Your media storage is empty"
empty-drive-description: "Right-click to open the menu, or drag and drop a file onto here for uploading."
empty-folder: "This folder is empty"
@ -480,7 +504,7 @@ desktop/views/components/drive.vue:
url-upload: "Upload from a URL"
url-of-file: "URL of file you want to upload"
url-upload-requested: "Upload requested"
may-take-time: "It may take some time for the upload to complete."
may-take-time: "It may take some time until the upload is complete."
create-folder: "Create a folder"
folder-name: "Folder name"
contextmenu:
@ -505,7 +529,7 @@ desktop/views/components/followers.vue:
desktop/views/components/following-window.vue:
following: "Following {}"
desktop/views/components/following.vue:
empty: "You dont follow anyone."
empty: "It seems you don't have any following users…"
desktop/views/components/friends-maker.vue:
title: "Recommended users:"
empty: "Couldn't find any recommended users."
@ -554,7 +578,7 @@ 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 Post..."
reply-placeholder: "Reply to this post..."
quote-placeholder: "Quote this Post..."
submit: "Post"
reply: "Reply"
@ -575,7 +599,7 @@ desktop/views/components/post-form.vue:
recent-tags: "Recent"
click-to-tagging: "Click to tagging"
visibility: "Visibility"
geolocation-alert: "Your device can not measure location infomation"
geolocation-alert: "Your device does not provide location services."
error: "Error"
enter-username: "Please enter a username..."
annotations: "Annotations for the post (optional)"
@ -613,7 +637,7 @@ desktop/views/components/settings.vue:
fetch-on-scroll: "Endless loading on scroll"
fetch-on-scroll-desc: "When you scroll down the page, it automatically fetches additional content."
auto-popout: "Auto pop-out window"
auto-popout-desc: "Pops-out a newly opened window (onto a new tab), if possible. This setting is stored in the browser."
auto-popout-desc: "If it's possible, pop-out display will be used instead of opening a new window. This setting is stored in your browser."
advanced: "Advanced settings"
api-via-stream: "API request via stream"
api-via-stream-desc: "API request is performed via the WebSocket connection instead of native fetch API (for better performance). This setting is stored in the browser."
@ -625,11 +649,14 @@ desktop/views/components/settings.vue:
circle-icons: "Use circle icons"
gradient-window-header: "Use gradients on window headers"
post-form-on-timeline: "Display post form at the top of the timeline"
suggest-recent-hashtags: "Show recent popular hashtags on the post form"
show-clock-on-header: "Show clock on upper-right"
show-reply-target: "Display reply target"
show-my-renotes: "Show my reposts in the timeline"
show-renoted-my-notes: "Show my posts that have been shared in the timeline"
show-maps: "Show the map"
show-maps-desc: "Automatically show the location on the map attached to this post."
show-my-renotes: "Show my renotes in the timeline"
show-renoted-my-notes: "Show renoted my posts in timelines"
show-local-renotes: "Show renoted local posts in timelines"
show-maps: "Display a map to show the location"
show-maps-desc: "If there comes a post contains location information, show a map to display the location."
sound: "Sound"
enable-sounds: "Enable sound"
enable-sounds-desc: "Play a sound when you receive a post/message. This setting is stored in the browser."
@ -674,18 +701,18 @@ desktop/views/components/settings.vue:
third-parties: "Third-parties"
desktop/views/components/settings.2fa.vue:
intro: "If you set up 2-step verification, you will not only need a password at sign-in, but also a pre-registered physical device (such as your smartphone), which will improve security."
detail: "See details..."
detail: "Details"
url: "https://www.google.com/landing/2step/"
caution: "If you lose access to your device, you won't be able to connect to Misskey anymore!"
caution: "If you lose access to your registered device, you won't be able to connect to Misskey anymore!"
register: "Register a device"
already-registered: "A device is already registered"
unregister: "Disable"
already-registered: "This device is already registered"
unregister: "Unregister"
unregistered: "Two-factor authentication has been disabled."
enter-password: "Enter the password"
authenticator: "First, you need to install Google Authenticator on your device:"
howtoinstall: "How to install"
scan: "And then, scan the QR code:"
done: "Please enter the token displaying on your device:"
done: "Please enter the token displayed on your device:"
submit: "Submit"
success: "Settings saved!"
failed: "Failed to setup. Please ensure that the token is correct."
@ -693,15 +720,15 @@ desktop/views/components/settings.2fa.vue:
desktop/views/components/settings.api.vue:
intro: "To access the API, set this token as the key 'i' of request parameters."
caution: "Do not enter this token to any apps nor tell this token to others otherwise your account may get compromised."
regeneration-of-token: "In case this token (may) leaks out, you want to regenerate it so that youll be safe."
regeneration-of-token: "If your token gets leaked, you can regenerate it."
regenerate-token: "Regenerate the token"
token: "Token:"
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."
max: "Max"
in-use: "In use"
desktop/views/components/settings.mute.vue:
no-users: "No muted users"
desktop/views/components/settings.password.vue:
@ -724,7 +751,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 has successfully updated"
profile-updated: "Your profile has been updated"
desktop/views/components/sub-note-content.vue:
private: "This post is private"
deleted: "This post has been deleted"
@ -740,7 +767,7 @@ desktop/views/components/timeline.vue:
list: "Lists"
desktop/views/components/ui.header.vue:
welcome-back: "Welcome back,"
adjective: "Sir "
adjective: "-san"
desktop/views/components/ui.header.account.vue:
profile: "Your profile"
drive: "Media storage"
@ -748,6 +775,7 @@ desktop/views/components/ui.header.account.vue:
lists: "Lists"
follow-requests: "Follow requests"
customize: "Customize home layout"
admin: "Admin"
settings: "Settings"
signout: "Sign out"
dark: "Submerge in dark"
@ -768,7 +796,7 @@ desktop/views/components/received-follow-requests-window.vue:
reject: "Reject"
desktop/views/components/user-lists-window.vue:
title: "User lists"
create-list: "Create new list"
create-list: "Create list"
list-name: "List name"
desktop/views/components/user-preview.vue:
notes: "Posts"
@ -793,8 +821,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "Dashboard"
all-users: "All Users"
original-users: "Users on this instance"
all-notes: "All Posts"
all-notes: "All the posts"
original-notes: "Posts on this instance"
invite: "Invite"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "Suspend a user"
suspend: "Suspend"
@ -803,6 +832,14 @@ desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "Unsuspend users"
unsuspend: "Unsuspend"
unsuspended: "The user has successfully unsuspended."
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "User account verification settings"
verify: "Verify account"
verified: "The account is now being verified"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "User account unverification settings"
unverify: "Unverify account"
unverified: "The account is now being unverified"
desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "Only media posts"
is-media-view: "Media view"
@ -811,6 +848,11 @@ desktop/views/pages/deck/deck.note.vue:
reposted-by: "Reposted by {}"
private: "This post is private"
deleted: "This post has been deleted"
desktop/views/pages/stats/stats.vue:
all-users: "All Users"
original-users: "Users on this instance"
all-notes: "All the posts"
original-notes: "Posts on this instance"
desktop/views/pages/welcome.vue:
about: "More details..."
gotit: "Got it!"
@ -835,7 +877,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "Cancel"
upload: "Upload files from your device"
desktop/views/pages/search.vue:
not-available: "The search feature is not available."
not-available: "Search feature is turned off in the settings for this instance."
not-found: "No posts were found for '{}'"
desktop/views/pages/share.vue:
share-with: "Share with {}."
@ -855,7 +897,7 @@ desktop/views/pages/user/user.friends.vue:
no-users: "No frequent mentions"
desktop/views/pages/user/user.vue:
is-suspended: "This account has been suspended."
is-remote: "The user is a remote user. Information about them that you see here may not complete."
is-remote: "The user is a remote user. The profile that you see here may not complete."
view-remote: "See their complete profile"
desktop/views/pages/user/user.home.vue:
last-used-at: "Last active:"
@ -928,12 +970,15 @@ mobile/views/components/drive-file-chooser.vue:
select-file: "Choose files"
mobile/views/components/drive-folder-chooser.vue:
select-folder: "Choose a folder"
mobile/views/components/drive.file.vue:
nsfw: "NSFW"
mobile/views/components/drive.file-detail.vue:
download: "Download"
rename: "Rename"
move: "Move"
hash: "Hash (md5)"
exif: "EXIF"
nsfw: "NSFW"
mobile/views/components/media-image.vue:
sensitive: "NSFW"
click-to-show: "Click to show"
@ -1012,8 +1057,9 @@ mobile/views/components/ui.nav.vue:
user-lists: "Lists"
widgets: "Widgets"
game: "Games"
darkmode: "Dark mode"
darkmode: "Dark theme"
settings: "Settings"
admin: "Admin"
about: "About Misskey"
mobile/views/components/user-timeline.vue:
no-notes: "It seems this user hasn't posted anything yet."
@ -1027,7 +1073,7 @@ mobile/views/pages/favorites.vue:
title: "Favorites"
mobile/views/pages/user-lists.vue:
title: "Lists"
enter-list-name: "Enter list name"
enter-list-name: "Enter a name of the list to make"
mobile/views/pages/drive.vue:
drive: "Drive"
more: "Load more"
@ -1106,7 +1152,8 @@ mobile/views/pages/settings.vue:
timeline: "Timeline"
show-reply-target: "Show reply target"
show-my-renotes: "Show my reposts"
show-renoted-my-notes: "Show my reposted posts"
show-renoted-my-notes: "Show renoted my posts"
show-local-renotes: "Show renoted local posts"
post-style: "Post design"
post-style-standard: "Standard"
post-style-smart: "Smart"
@ -1130,6 +1177,8 @@ mobile/views/pages/settings.vue:
update-available-desc: "Updates will be applied after reloading the page"
settings: "Settings"
signout: "Sign out"
sound: "Sounds"
enableSounds: "Enable sounds"
mobile/views/pages/user.vue:
follows-you: "Follows you"
following: "Following"
@ -1139,8 +1188,8 @@ mobile/views/pages/user.vue:
timeline: "Timeline"
media: "Media"
is-suspended: "This account has been suspended."
is-remote: "This user is a remote user, so the information you see here is not complete."
view-remote: "See their complete profile"
is-remote: "The user is a remote user. The profile that you see here may not complete."
view-remote: "See his/her complete profile"
mobile/views/pages/user/home.vue:
recent-notes: "Recent notes"
images: "Images"
@ -1163,8 +1212,8 @@ mobile/views/pages/user/home.photos.vue:
loading: "Loading"
no-photos: "No photos"
docs:
edit-this-page-on-github: "Did you find an error or do you want to contribute to the documentation? "
edit-this-page-on-github-link: "Edit this page on Github!"
edit-this-page-on-github: "Found a mistake or want to contribute for the documentation?"
edit-this-page-on-github-link: "Edit this page at GitHub!"
api:
entities:
properties: "Properties"
@ -1175,11 +1224,11 @@ docs:
require-credential: "This endpoint requires the authentication information."
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 have passed since the previous request."
duration-limit: "If you have sent your requests more than {max} times in {duration} milliseconds, you will be unable to send more requests."
min-interval-limit: "If {interval} milliseconds haven't passed since the last request, you can't send a request."
show-src: "You can view the source code for this endpoint."
show-src-link: "See the code on GitHub"
generated: "This doc is generated by an API definition."
generated: "This document is generated by the API definition."
props:
name: "Name"
type: "Type"

View File

@ -58,7 +58,7 @@ common:
friday: "Viernes"
saturday: "Sábado"
reactions:
like: "me gusta"
like: "いいね"
love: "amor"
laugh: "risa"
hmm: "hmm"
@ -84,7 +84,8 @@ common:
my-token-regenerated: "Tu token se ha regenerado vas a ser desconectado."
i-like-sushi: "Prefiero sushi a pudín"
show-reversi-board-labels: "Mostrar etiquetas de filas y columnas en Reversi"
verified-user: "Usuario verificado"
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
verified-user: "公式アカウント"
disable-animated-mfm: "Desactivar texto animado en una publicación"
reversi:
drawn: "Empatado"
@ -287,7 +288,10 @@ common/views/components/signin.vue:
signin: "Entra"
or: "O"
signin-with-twitter: "Ingresar con Twitter"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "Usuario"
checking: "Comprobando..."
available: "Disponible"
@ -407,6 +411,7 @@ desktop:
uploading-avatar: "Cargando un nuevo avatar"
avatar-updated: "Avatar actualizado"
choose-avatar: "Escoge una imagen de avatar"
invalid-filetype: "この形式のファイルはサポートされていません"
desktop/views/components/activity.chart.vue:
total: "Negro ... Total"
notes: "Azul ... Notas"
@ -420,6 +425,24 @@ desktop/views/components/calendar.vue:
prev: "Mes anterior"
next: "Próximo mes"
go: "Click para navegar"
desktop/views/components/charts.vue:
title: "チャート"
per-day: "1日ごと"
per-hour: "1時間ごと"
notes: "投稿"
users: "ユーザー"
drive: "ドライブ"
charts:
notes: "投稿の増減 (統合)"
local-notes: "投稿の増減 (ローカル)"
remote-notes: "投稿の増減 (リモート)"
notes-total: "投稿の累計"
users: "ユーザーの増減"
users-total: "ユーザーの累計"
drive: "ドライブ使用量の増減"
drive-total: "ドライブ使用量の累計"
drive-files: "ドライブのファイル数の増減"
drive-files-total: "ドライブのファイル数の累計"
desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "Escoger archivos"
upload: "Cargar archivos de tu dispositivo"
@ -440,6 +463,7 @@ desktop/views/components/drive-window.vue:
desktop/views/components/drive.file.vue:
avatar: "Avatar"
banner: "Banner"
nsfw: "閲覧注意"
contextmenu:
rename: "Renombrar"
mark-as-sensitive: "Marcar como 'sensible'"
@ -625,9 +649,12 @@ desktop/views/components/settings.vue:
circle-icons: "Usar iconos circulares"
gradient-window-header: "Usar degradados en las cabeceras de las páginas"
post-form-on-timeline: "Mostrar el formulario de las entradas encima de la línea de tiempo"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "サウンド"
@ -748,6 +775,7 @@ desktop/views/components/ui.header.account.vue:
lists: "リスト"
follow-requests: "フォロー申請"
customize: "ホームのカスタマイズ"
admin: "管理"
settings: "設定"
signout: "サインアウト"
dark: "闇に飲まれる"
@ -793,8 +821,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
@ -803,6 +832,14 @@ desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー"
@ -811,6 +848,11 @@ desktop/views/pages/deck/deck.note.vue:
reposted-by: "{}がRenote"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
@ -835,7 +877,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "{}で共有"
@ -928,12 +970,15 @@ mobile/views/components/drive-file-chooser.vue:
select-file: "ファイルを選択"
mobile/views/components/drive-folder-chooser.vue:
select-folder: "フォルダーを選択"
mobile/views/components/drive.file.vue:
nsfw: "閲覧注意"
mobile/views/components/drive.file-detail.vue:
download: "ダウンロード"
rename: "名前を変更"
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
nsfw: "閲覧注意"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
@ -1014,6 +1059,7 @@ mobile/views/components/ui.nav.vue:
game: "ゲーム"
darkmode: "ダークモード"
settings: "設定"
admin: "管理"
about: "Misskeyについて"
mobile/views/components/user-timeline.vue:
no-notes: "このユーザーは投稿していないようです。"
@ -1106,7 +1152,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル"
post-style-standard: "標準"
post-style-smart: "スマート"
@ -1130,6 +1177,8 @@ mobile/views/pages/settings.vue:
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
sound: "サウンド"
enableSounds: "サウンドを有効にする"
mobile/views/pages/user.vue:
follows-you: "フォローされています"
following: "フォロー"

View File

@ -4,10 +4,10 @@ meta:
divider: ""
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 ?"
about-title: "Une ⭐ du fédivers."
about: "Merci d'avoir découvert Misskey. Misskey est une <b>plateforme de microblogage distribuée</b> née sur Terre. Parce qu'il fait partie du Fédivers (un univers composé de diverses plateformes de réseaux sociaux organisées), il est mutuellement connecté avec d'autres plateformes de réseaux sociaux. Désirez-vous prendre une pause, pendant un instant, loin de l'agitation de la ville et plonger dans un nouvel Internet ?"
adblock:
detected: "Veuillez désactiver le bloqueur de publicités"
detected: "Veuillez désactiver votre bloqueur de publicités"
warning: "<strong>Misskey n'utilise pas de publicités</strong>, mais quelques options peuvent être non disponibles ou fonctionneraient mal si un bloqueur de publicités est activé."
application-authorization: "Permissions de l'application"
close: "Fermer"
@ -17,7 +17,7 @@ common:
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."
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!"
notification:
@ -30,7 +30,7 @@ common:
quoted-by: "Cité·e par {} :"
time:
unknown: "inconnu"
future: "future"
future: "à l'instant"
just_now: "à l'instant"
seconds_ago: "Il y a {} seconde·s"
minutes_ago: "Il y a {} minute·s"
@ -58,10 +58,10 @@ common:
friday: "Vendredi"
saturday: "Samedi"
reactions:
like: "Aime"
like: "J'aime"
love: "Adore"
laugh: "Rire"
hmm: "Hmm ... ?"
hmm: "Hmm ?"
surprise: "Wow"
congrats: "Félicitations !"
angry: "En colère"
@ -69,10 +69,10 @@ common:
rip: "RIP"
pudding: "Pudding"
note-placeholders:
a: "Que faîtes vous maintenant ?"
a: "Que faites-vous maintenant ?"
b: "Quoi de neuf ?"
c: "Qu'avez-vous en tête ?"
d: "Voulez-vous exprimer quelque chose ?"
d: "Désirez-vous publier quelques mots ?"
e: "Écrivez ici"
f: "En attente de vos écrits"
search: "Recherche"
@ -82,9 +82,10 @@ common:
update-available-title: "Mise à jour disponible"
update-available: "Une nouvelle version de Misskey est disponible ({newer}, version actuelle: {current}). Veuillez recharger la page pour appliquer la mise à jour."
my-token-regenerated: "Votre token vient d'être généré, vous allez maintenant être déconnecté."
i-like-sushi: "Je préfère les sushis (au pudding)"
i-like-sushi: "Je préfère les sushis plutôt que le pudding"
show-reversi-board-labels: "Afficher les étiquettes des lignes et colonnes dans Reversi"
verified-user: "Utilisateur·trice vérifié·e"
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
verified-user: "Compte vérifié"
disable-animated-mfm: "Désactiver les textes animés dans les publications"
reversi:
drawn: "Partie nulle"
@ -101,18 +102,18 @@ common:
analog-clock: "Horloge analogique"
profile: "Profil"
calendar: "Calendrier"
timemachine: "Calendrier (Machine de temps)"
timemachine: "Calendrier (Machine temporelle)"
activity: "Activité"
rss: "Lecteur de flux RSS"
memo: "Pense-bête"
trends: "Tendances"
photo-stream: "Flux de photos"
posts-monitor: "Graph des publications"
posts-monitor: "Graphe des publications"
slideshow: "Diaporama"
version: "Version"
broadcast: "Diffusion"
notifications: "Notifications"
users: "Utilisateurs"
users: "Utilisateur·rice·s"
polls: "Sondages"
post-form: "Formulaire de publication"
messaging: "Messagerie"
@ -174,16 +175,16 @@ common/views/components/games/reversi/reversi.game.vue:
can-put-everywhere: "どこでも置けるモード"
common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi"
sub-title: "Jouer à Reversi avec vos amis·es !"
sub-title: "Jouer à Reversi avec vos ami·e·s !"
invite: "Inviter"
rule: "Comment Jouer ?"
rule: "Comment jouer ?"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "Inviter"
mode-invite-desc: "Inviter un joueur."
mode-invite-desc: "Inviter un·e joueur·se."
invitations: "Vous avez reçu une invitation !"
my-games: "Mes jeux"
all-games: "Tous les jeux"
enter-username: "Saisir un nom d'utilisateur"
enter-username: "Saisir un nom d'utilisateur·rice"
game-state:
ended: "Terminée"
playing: "En cours"
@ -204,7 +205,7 @@ common/views/components/games/reversi/reversi.room.vue:
waiting-for-both: "En attente que vous soyez prêt"
cancel: "Annuler"
ready: "Prêt"
cancel-ready: "Annuler \"Je suis prêt\""
cancel-ready: "Annuler « Prêt »"
common/views/components/connect-failed.vue:
title: "Échec de connexion au serveur"
description: "Il y a soit un problème avec votre connexion internet, soit le serveur est hors-ligne ou en maintenance. Veuillez {ressayer} plus tard."
@ -230,20 +231,20 @@ common/views/components/connect-failed.troubleshooter.vue:
flush: "Vider le cache"
set-version: "Choisissez une version"
common/views/components/messaging.vue:
search-user: "Trouver un utilisateur"
search-user: "Trouver un·e utilisateur·trice"
you: "Vous"
no-history: "Pas d'historique"
common/views/components/messaging-room.vue:
empty: "Pas de conversations"
more: "Voir Plus"
more: "Voir plus"
no-history: "Il n'y a pas plus d'historique"
resize-form: "Faites glisser pour redimensionner"
new-message: "Nouveau message"
only-one-file-attached: "Un seul fichier uniquement peut être joint au message"
only-one-file-attached: "Un seul fichier peut être joint au message"
common/views/components/messaging-room.form.vue:
input-message-here: "Tapez ici votre message"
send: "Envoyer"
attach-from-local: "Joindre un fichier depuis votre PC"
attach-from-local: "Joindre un fichier depuis votre ordinateur"
attach-from-drive: "Joindre un fichier depuis votre Drive"
only-one-file-attached: "Un seul fichier uniquement peut être joint au message"
common/views/components/messaging-room.message.vue:
@ -251,23 +252,23 @@ common/views/components/messaging-room.message.vue:
deleted: "Ce message a été supprimé"
common/views/components/nav.vue:
about: "À propos"
stats: "Stats"
status: "Status"
stats: "Statistiques"
status: "Statut"
wiki: "Wiki"
donors: "Donateurs"
repository: "Repo"
develop: "Développeurs"
donors: "Donateur·rice·s"
repository: "Dépôt"
develop: "Développeur·se·s"
feedback: "Remarques"
common/views/components/note-menu.vue:
favorite: "Favorite this note"
pin: "Épingler sur votre profile"
favorite: "Mettre cette note en favoris"
pin: "Épingler sur votre profil"
delete: "Supprimer"
delete-confirm: "Supprimer cette publication ?"
remote: "Afficher les note originale"
remote: "Afficher la note originale"
common/views/components/poll.vue:
vote-to: "Voter pour '{}'"
vote-count: "{} votes"
total-users: "{} utilisateurs ont voté"
total-users: "{} utilisateur·rice·s ont voté·e·s"
vote: "Vote"
show-result: "Montrer les résultats"
voted: "Voté"
@ -280,31 +281,34 @@ common/views/components/poll-editor.vue:
common/views/components/reaction-picker.vue:
choose-reaction: "Choisissez votre réaction"
common/views/components/signin.vue:
username: "Nom d'utilisateur"
username: "Nom d'utilisateur·rice"
password: "Mot de passe"
token: "Token"
signing-in: "Connexion...."
signing-in: "Connexion"
signin: "Se connecter"
or: "Ou"
signin-with-twitter: "Se connecter via Twitter"
login-failed: "Échec d'authentification. Veuillez vérifier que votre nom d'utilisateur et mot de passe sont corrects."
common/views/components/signup.vue:
username: "Nom d'utilisateur"
checking: "Vérification"
invitation-code: "Code dinvitation"
invitation-info: "Si vous navez pas de code dinvitation, contactez un·e <a href=\"{}\">administrateur·rice</a>."
username: "Nom d'utilisateur·rice"
checking: "Vérification…"
available: "Disponible"
unavailable: "Non disponible"
error: "Erreur de réseau"
invalid-format: "Utilisez seulement des lettres, nombres et/ou -."
error: "Erreur du réseau"
invalid-format: "Vous pouvez utiliser des lettres, des nombres et _."
too-short: "Veuillez saisir au moins un caractère !"
too-long: "Veuillez entrer au maximum 20 caractères."
password: "Mot de Passe"
password-placeholder: "Nous recommendons au moins 8 caractères."
password: "Mot de passe"
password-placeholder: "Nous recommandons au moins 8 caractères."
weak-password: "Faible"
normal-password: "Moyen"
strong-password: "Fort"
retype: "Retapez"
retype-placeholder: "Confirmez votre mot de passe"
password-matched: "OK"
password-not-matched: "Les mots de passes ne correspondent pas."
password-not-matched: "Les mots de passe ne correspondent pas."
recaptcha: "Vérifier"
create: "Créer un compte"
some-error: "La création du compte a échoué. Veuillez réessayer."
@ -316,14 +320,14 @@ common/views/components/stream-indicator.vue:
reconnecting: "Reconnexion en cours"
connected: "Connecté"
common/views/components/twitter-setting.vue:
description: "Si vous liez votre compte Twitter à votre compte Misskey, vous verrez ensuite votre compte Twitter s'afficher sur votre profile, vous aurez aussi la possibilité de vous connecter à Misskey en utilisant votre compte Twitter."
description: "Si vous liez votre compte Twitter à votre compte Misskey, vous verrez ensuite votre compte Twitter s'afficher sur votre profil, vous aurez aussi la possibilité de vous connecter à Misskey en utilisant votre compte Twitter."
connected-to: "Vous êtes connecté à ce compte Twitter"
detail: "Détails …"
reconnect: "Reconnecter"
detail: "Détails…"
reconnect: "Reconnexion"
connect: "Lier votre compte Twitter"
disconnect: "Déconnecter"
disconnect: "Déconnexion"
common/views/components/uploader.vue:
waiting: "En attente"
waiting: "Veuillez patienter"
common/views/components/visibility-chooser.vue:
public: "Public"
home: "Accueil"
@ -331,42 +335,42 @@ common/views/components/visibility-chooser.vue:
followers: "Abonné·e·s"
followers-desc: "Publier à vos abonné·e·s uniquement"
specified: "Direct"
specified-desc: "Publier aux utilisateurs·trices mentionné·es"
specified-desc: "Publier aux utilisateur·rice·s mentionné·e·s"
private: "Privé"
common/views/widgets/broadcast.vue:
fetching: "Récuperation"
fetching: "Récupération"
no-broadcasts: "Aucune annonce"
have-a-nice-day: "Passez une bonne journée !"
next: "Suivant"
common/views/widgets/calendar.vue:
year: "{} année"
month: "{} mois"
day: "{} jour"
year: "Année {}"
month: "Mois {}"
day: "Jour {}"
today: "Aujourd'hui :"
this-month: "Ce mois-ci :"
this-year: "Cette année :"
common/views/widgets/donation.vue:
title: "Dons"
title: "Faire un don"
text: "Les frais pour faire fonctionner Misskey sortent directement de notre poche. Nous ne recevons pas d'argent issu de la publicité, si vous pouvez nous faire des dons, on vous serait éternellement reconnaissants. Si vous êtes intéressé·es veuillez contacter {}. Merci pour votre contribution !"
common/views/widgets/photo-stream.vue:
title: "Flux de photo"
no-photos: "Pas de photos"
title: "Flux de photos"
no-photos: "Pas de photo"
common/views/widgets/posts-monitor.vue:
title: "Graph des publications"
title: "Graphe des publications"
toggle: "Basculer entre les vues"
common/views/widgets/hashtags.vue:
title: "Étiquettes"
count: "{} utilisateurs mentionnés"
count: "{} utilisateur·rice·s mentionné·e·s"
empty: "Aucune tendance"
common/views/widgets/server.vue:
title: "Info sur le serveur"
title: "Informations sur le serveur"
toggle: "Afficher les vues"
common/views/widgets/memo.vue:
title: "Pense-bête"
memo: "Écrivez ici !"
save: "Enregistrer"
common/views/widgets/slideshow.vue:
folder-customize-mode: "Veuillez quitter le mode personnalisé pour pouvour spécifier un dossier"
folder-customize-mode: "Pour pouvoir spécifier un dossier, veuillez quitter le mode de personnalisation"
folder: "Veuillez cliquer pour spécifier le dossier"
no-image: "Il n'y a aucune image dans ce dossier"
common/views/widgets/tips.vue:
@ -374,13 +378,13 @@ common/views/widgets/tips.vue:
tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
tips-line3: "Vous pouvez glisser et déposer des fichiers sur la fenêtre de la note"
tips-line4: "Vous pouvez coller des images à partir du presse-papier sur la fenêtre de la note"
tips-line5: "Vous pouvez téléverser des fichiers sur le Drive en faisant un glisser/déplacer"
tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
tips-line5: "Vous pouvez téléverser des fichiers sur le Drive en faisant un glisser-déposer"
tips-line6: "Vous pouvez déplacer un dossier en le glissant dans le Drive"
tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
tips-line8: "Vous pouvez personnaliser l'Accueil via les paramètres"
tips-line9: "Misskey est sous licence AGPLv3"
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line11: "Vous pouvez épingler des notes sur votre page en appuyant sur \"…\""
tips-line11: "Vous pouvez épingler des notes sur votre page en cliquant sur « … »"
tips-line13: "Tous les fichiers attachés à cette publication sont sauvegardés dans le Drive"
tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
tips-line17: "Vous pouvez mettre un texte en surbrillance en le mettant entre ** **"
@ -391,38 +395,57 @@ common/views/widgets/tips.vue:
tips-line24: "Misskey a vu le jour en 2014"
tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
common/views/pages/follow.vue:
signed-in-as: "Connecté·é en tant que {}"
signed-in-as: "Connecté·e en tant que {}"
following: "Suit"
follow: "Suivre"
request-pending: "Demande d'abonnement en attente"
follow-request: "Demande d'abonnement"
desktop:
banner-crop-title: "Découpez la partie qui apparaîtra comme une bannière"
banner-crop-title: "Découpez la partie qui apparaitra comme bannière"
banner: "Bannière"
uploading-banner: "Téléversement d'une nouvelle bannière"
banner-updated: "La bannière est mise à jour"
choose-banner: "Choisir une bannière"
avatar-crop-title: "Découpez la partie qui apparaîtra dans l'avatar"
avatar-crop-title: "Découpez la partie qui apparaitra comme avatar"
avatar: "Avatar"
uploading-avatar: "Téléversement du nouvel avatar"
avatar-updated: "L'avatar est mis à jour"
choose-avatar: "Choisir un avatar"
invalid-filetype: "この形式のファイルはサポートされていません"
desktop/views/components/activity.chart.vue:
total: "Noirs ... Total"
notes: "Bleu ... Notes"
replies: "Rouge ... Réponses"
renotes: "Vert ... Partages"
desktop/views/components/activity.vue:
title: "Activitié"
title: "Activité"
toggle: "Afficher les vues"
desktop/views/components/calendar.vue:
title: "{1} / {2}"
prev: "Mois dernier"
next: "Mois prochain"
go: "Cliquer pour naviguer"
go: "Cliquez pour naviguer"
desktop/views/components/charts.vue:
title: "Graphiques"
per-day: "par jour"
per-hour: "par heure"
notes: "Publications"
users: "Utilisateurs"
drive: "Drive"
charts:
notes: "投稿の増減 (統合)"
local-notes: "投稿の増減 (ローカル)"
remote-notes: "投稿の増減 (リモート)"
notes-total: "投稿の累計"
users: "ユーザーの増減"
users-total: "ユーザーの累計"
drive: "ドライブ使用量の増減"
drive-total: "ドライブ使用量の累計"
drive-files: "ドライブのファイル数の増減"
drive-files-total: "ドライブのファイル数の累計"
desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "Sélection de fichiers"
upload: "Téléverser des fichiers à partir de votre PC"
upload: "Téléverser des fichiers à partir de votre ordinateur"
cancel: "Annuler"
ok: "OK"
choose-prompt: "Choisir un fichier"
@ -440,6 +463,7 @@ desktop/views/components/drive-window.vue:
desktop/views/components/drive.file.vue:
avatar: "Avatar"
banner: "Bannière"
nsfw: "CW"
contextmenu:
rename: "Renommer"
mark-as-sensitive: "Marquer comme sensible"
@ -453,14 +477,14 @@ desktop/views/components/drive.file.vue:
add-app: "Ajouter une application"
rename-file: "Renommer le ficher"
input-new-file-name: "Entrer un nouveau nom"
copied: "Copied"
copied-url-to-clipboard: "L'URL a été copié dans le presse-papier"
copied: "Copié"
copied-url-to-clipboard: "L'URL a été copiée dans le presse-papier"
desktop/views/components/drive.folder.vue:
unable-to-process: "L'opération n'a pas pu être complétée"
circular-reference-detected: "Le dossier de destination est un sous-dossier du dossier que vous souhaitez déplacer."
unhandled-error: "Erreur inconnue"
contextmenu:
move-to-this-folder: "Bouger dans ce dossier"
move-to-this-folder: "Déplacer dans ce dossier"
show-in-new-window: "Ouvrir dans une nouvelle fenêtre"
rename: "Renommer"
rename-folder: "Renommer le dossier"
@ -508,7 +532,7 @@ desktop/views/components/following.vue:
empty: "Vous ne suivez aucun compte."
desktop/views/components/friends-maker.vue:
title: "Utilisateurs recommandés :"
empty: "Impossible de trouver des utilisateurs à recommander."
empty: "Impossible de trouver des utilisateurs·trices à recommander."
fetching: "Chargement"
refresh: "Plus"
close: "Fermer"
@ -625,14 +649,17 @@ desktop/views/components/settings.vue:
circle-icons: "Utiliser des icônes circulaires"
gradient-window-header: "Utiliser les dégradés sur la barre de titre de la fenêtre"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "Afficher les hashtags populaires dans le champs de saisie"
show-clock-on-header: "Afficher l'horloge à droite sur le coté supérieur"
show-reply-target: "Afficher les réponses"
show-my-renotes: "Afficher mes republications dans le fil"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "Afficher la carte"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "Son"
enable-sounds: "Activer le son"
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
enable-sounds-desc: "Jouer un son lorsque vous recevez un message. Ce paramètre est sauvegardé dans le navigateur."
volume: "Volume"
test: "Test"
mobile: "Mobile"
@ -693,7 +720,7 @@ desktop/views/components/settings.2fa.vue:
desktop/views/components/settings.api.vue:
intro: "APIを利用するには、上記のトークンを「i」というキーでパラメータに付加してリクエストします。"
caution: "アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。"
regeneration-of-token: "万が一このトークンが漏れたりその可能性がある場合はトークンを再生成できます。"
regeneration-of-token: "Si votre jeton est compromis, vous pouvez le régénérer."
regenerate-token: "Regenerer le token"
token: "Jeton :"
enter-password: "Veuillez entrer le mot de passe"
@ -748,6 +775,7 @@ desktop/views/components/ui.header.account.vue:
lists: "Listes"
follow-requests: "Demandes de suivi"
customize: "Personnaliser l'Accueil"
admin: "Admin"
settings: "Réglages"
signout: "Déconnexion"
dark: "Fall in dark"
@ -785,24 +813,33 @@ desktop/views/components/window.vue:
popout: "ポップアウト"
close: "Fermer"
desktop/views/pages/admin/admin.vue:
dashboard: "ダッシュボード"
drive: "ドライブ"
users: "ユーザー"
update: "更新"
dashboard: "Tableau de bord"
drive: "Drive"
users: "Utilisateur·rice·s"
update: "Mises à jour"
desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
dashboard: "Tableau de bord"
all-users: "Toutes les utilisateurrices"
original-users: "Utilisateurrices sur cette instance"
all-notes: "Toutes les publications"
original-notes: "Publication sur cette instance"
invite: "Invitation"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
suspended: "凍結しました"
suspend-user: "Suspendre un·e utilisateur·rice"
suspend: "Suspendre"
suspended: "Suspendu avec succès"
desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
unsuspend-user: "Lever la suspension dutilisateur·rice·s"
unsuspend: "Suspension levée"
unsuspended: "La suspension de lutilisateur·rice a été levée avec succès"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "Paramètres de vérification du compte utilisateur"
verify: "Vérification du compte"
verified: "Le compte a été vérifié"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "Ôter la vérification du compte"
unverified: "Ce compte n'est pas vérifié"
desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "Les publications médias uniquement"
is-media-view: "Vue média"
@ -811,6 +848,11 @@ desktop/views/pages/deck/deck.note.vue:
reposted-by: "Reposté par {}"
private: "cette publication est privée"
deleted: "cette publication a été supprimée"
desktop/views/pages/stats/stats.vue:
all-users: "Toutes les utilisateurrices"
original-users: "Utilisateurrices sur cette instance"
all-notes: "Toutes les publications"
original-notes: "Publication sur cette instance"
desktop/views/pages/welcome.vue:
about: "à propos"
gotit: "J'ai compris !"
@ -835,7 +877,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "Annuler"
upload: "Uploader un ou plusieurs fichier(s) depuis votre PC"
desktop/views/pages/search.vue:
not-available: "Vous ne pouvez pas utiliser la fonctionnalité de recherche."
not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "Aucun message trouvé pour '{}'"
desktop/views/pages/share.vue:
share-with: "Partager avec {}"
@ -928,12 +970,15 @@ mobile/views/components/drive-file-chooser.vue:
select-file: "Choisissez un fichier"
mobile/views/components/drive-folder-chooser.vue:
select-folder: "Choisissez un dossier"
mobile/views/components/drive.file.vue:
nsfw: "閲覧注意"
mobile/views/components/drive.file-detail.vue:
download: "Télécharger"
rename: "Renommer"
move: "Déplacer"
hash: "Hash (md5)"
exif: "EXIF"
nsfw: "閲覧注意"
mobile/views/components/media-image.vue:
sensitive: "Le contenu est NSFW"
click-to-show: "Cliquer pour afficher"
@ -947,7 +992,7 @@ mobile/views/components/follow-button.vue:
follow-request: "Demande d'abonnement"
mobile/views/components/friends-maker.vue:
title: "Abonnez-vous aux utilisateurs"
empty: "Impossible de trouver des utilisateurs à recommander."
empty: "Impossible de trouver des utilisateurs·trices à recommander."
fetching: "Chargement"
refresh: "Voir plus"
close: "Fermer"
@ -1014,6 +1059,7 @@ mobile/views/components/ui.nav.vue:
game: "Jeux"
darkmode: "Mode nuit"
settings: "Réglages"
admin: "Admin"
about: "À propose de Misskey"
mobile/views/components/user-timeline.vue:
no-notes: "Cette utilisateur semble n'avoir rien poster pour le moment"
@ -1106,7 +1152,8 @@ mobile/views/pages/settings.vue:
timeline: "Fil d'actualité"
show-reply-target: "Afficher les réponses"
show-my-renotes: "Afficher mes republications"
show-renoted-my-notes: "Afficher les notes que j'ai repartagé"
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "Style de la publication"
post-style-standard: "Standard"
post-style-smart: "Intelligent"
@ -1130,6 +1177,8 @@ mobile/views/pages/settings.vue:
update-available-desc: "Les mises à jour seront appliquées une fois la page est rechargée."
settings: "Réglages"
signout: "Déconnexion"
sound: "Sons"
enableSounds: "Activer le son"
mobile/views/pages/user.vue:
follows-you: "vous suit"
following: "Abonnements"
@ -1172,14 +1221,14 @@ docs:
params: "Paramètres"
no-params: "Aucun paramètre"
res: "Réponse"
require-credential: "このエンドポイントは認証情報が必須です。"
require-permission: "このエンドポイントは{permission}の権限を必要とします。"
require-credential: "Ce point de communication nécessite une authentification."
require-permission: "Ce point de communication nécessite la permission {permission}."
has-limit: "レートリミットがあります。"
duration-limit: "直近{duration}ミリ秒の間のこのエンドポイントへのリクエスト数の合計が{max}を超える場合はリクエストできません。"
min-interval-limit: "前回のリクエストから{interval}ミリ秒経っていない場合はリクエストできません。"
show-src: "このエンドポイントのソースコードも閲覧できます。"
show-src: "Vous pouvez voir le code source ce point de communication."
show-src-link: "Consulter le code sur GitHub"
generated: "このドキュメントはAPI定義に基づき自動生成されています。"
generated: "Ce document est généré à partir de la définition de lAPI."
props:
name: "Nom"
type: "Type"

View File

@ -5,23 +5,9 @@
const fs = require('fs');
const yaml = require('js-yaml');
const loadLang = lang => yaml.safeLoad(
fs.readFileSync(`${__dirname}/${lang}.yml`, 'utf-8'));
const langs = ['de-DE', 'en-US', 'fr-FR', 'ja-JP', 'ja-KS', 'pl-PL', 'es-ES'];
const native = loadLang('ja');
const loadLocale = lang => yaml.safeLoad(fs.readFileSync(`${__dirname}/${lang}.yml`, 'utf-8'));
const locales = langs.map(lang => ({ [lang]: loadLocale(lang) }));
const langs = {
'de': loadLang('de'),
'en': loadLang('en'),
'fr': loadLang('fr'),
'ja': native,
'pl': loadLang('pl'),
'es': loadLang('es')
};
Object.values(langs).forEach(locale => {
// Extend native language (Japanese)
locale = Object.assign({}, native, locale);
});
module.exports = langs;
module.exports = locales.reduce((a, b) => ({ ...a, ...b }));

View File

@ -84,7 +84,8 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
reversi:
drawn: "引き分け"
@ -287,7 +288,10 @@ common/views/components/signin.vue:
signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "ユーザー名"
checking: "確認しています..."
available: "利用できます"
@ -407,6 +411,7 @@ desktop:
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
invalid-filetype: "この形式のファイルはサポートされていません"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@ -420,6 +425,24 @@ desktop/views/components/calendar.vue:
prev: "前の月"
next: "次の月"
go: "クリックして時間遡行"
desktop/views/components/charts.vue:
title: "チャート"
per-day: "1日ごと"
per-hour: "1時間ごと"
notes: "投稿"
users: "ユーザー"
drive: "ドライブ"
charts:
notes: "投稿の増減 (統合)"
local-notes: "投稿の増減 (ローカル)"
remote-notes: "投稿の増減 (リモート)"
notes-total: "投稿の累計"
users: "ユーザーの増減"
users-total: "ユーザーの累計"
drive: "ドライブ使用量の増減"
drive-total: "ドライブ使用量の累計"
drive-files: "ドライブのファイル数の増減"
drive-files-total: "ドライブのファイル数の累計"
desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "ファイル選択中"
upload: "PCからドライブにファイルをアップロード"
@ -440,6 +463,7 @@ desktop/views/components/drive-window.vue:
desktop/views/components/drive.file.vue:
avatar: "アイコン"
banner: "バナー"
nsfw: "閲覧注意"
contextmenu:
rename: "名前を変更"
mark-as-sensitive: "閲覧注意に設定"
@ -625,9 +649,12 @@ desktop/views/components/settings.vue:
circle-icons: "円形のアイコンを使用"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "サウンド"
@ -748,6 +775,7 @@ desktop/views/components/ui.header.account.vue:
lists: "リスト"
follow-requests: "フォロー申請"
customize: "ホームのカスタマイズ"
admin: "管理"
settings: "設定"
signout: "サインアウト"
dark: "闇に飲まれる"
@ -793,8 +821,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
@ -803,6 +832,14 @@ desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー"
@ -811,6 +848,11 @@ desktop/views/pages/deck/deck.note.vue:
reposted-by: "{}がRenote"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
@ -835,7 +877,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "{}で共有"
@ -928,12 +970,15 @@ mobile/views/components/drive-file-chooser.vue:
select-file: "ファイルを選択"
mobile/views/components/drive-folder-chooser.vue:
select-folder: "フォルダーを選択"
mobile/views/components/drive.file.vue:
nsfw: "閲覧注意"
mobile/views/components/drive.file-detail.vue:
download: "ダウンロード"
rename: "名前を変更"
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
nsfw: "閲覧注意"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
@ -1014,6 +1059,7 @@ mobile/views/components/ui.nav.vue:
game: "ゲーム"
darkmode: "ダークモード"
settings: "設定"
admin: "管理"
about: "Misskeyについて"
mobile/views/components/user-timeline.vue:
no-notes: "このユーザーは投稿していないようです。"
@ -1106,7 +1152,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル"
post-style-standard: "標準"
post-style-smart: "スマート"
@ -1130,6 +1177,8 @@ mobile/views/pages/settings.vue:
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
sound: "サウンド"
enableSounds: "サウンドを有効にする"
mobile/views/pages/user.vue:
follows-you: "フォローされています"
following: "フォロー"

View File

@ -90,9 +90,12 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
reversi:
drawn: "引き分け"
my-turn: "あなたのターンです"
@ -282,6 +285,8 @@ common/views/components/nav.vue:
feedback: "フィードバック"
common/views/components/note-menu.vue:
detail: "詳細"
copy-link: "リンクをコピー"
favorite: "お気に入り"
pin: "ピン留め"
delete: "削除"
@ -314,8 +319,11 @@ common/views/components/signin.vue:
signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "ユーザー名"
checking: "確認しています..."
available: "利用できます"
@ -452,6 +460,7 @@ desktop:
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
invalid-filetype: "この形式のファイルはサポートされていません"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
@ -469,6 +478,25 @@ desktop/views/components/calendar.vue:
next: "次の月"
go: "クリックして時間遡行"
desktop/views/components/charts.vue:
title: "チャート"
per-day: "1日ごと"
per-hour: "1時間ごと"
notes: "投稿"
users: "ユーザー"
drive: "ドライブ"
charts:
notes: "投稿の増減 (統合)"
local-notes: "投稿の増減 (ローカル)"
remote-notes: "投稿の増減 (リモート)"
notes-total: "投稿の累計"
users: "ユーザーの増減"
users-total: "ユーザーの累計"
drive: "ドライブ使用量の増減"
drive-total: "ドライブ使用量の累計"
drive-files: "ドライブのファイル数の増減"
drive-files-total: "ドライブのファイル数の累計"
desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "ファイル選択中"
upload: "PCからドライブにファイルをアップロード"
@ -493,6 +521,7 @@ desktop/views/components/drive-window.vue:
desktop/views/components/drive.file.vue:
avatar: "アイコン"
banner: "バナー"
nsfw: "閲覧注意"
contextmenu:
rename: "名前を変更"
mark-as-sensitive: "閲覧注意に設定"
@ -707,9 +736,12 @@ desktop/views/components/settings.vue:
circle-icons: "円形のアイコンを使用"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
@ -850,6 +882,7 @@ desktop/views/components/ui.header.account.vue:
lists: "リスト"
follow-requests: "フォロー申請"
customize: "ホームのカスタマイズ"
admin: "管理"
settings: "設定"
signout: "サインアウト"
dark: "闇に飲まれる"
@ -907,8 +940,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
@ -920,6 +954,16 @@ desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー"
@ -930,6 +974,12 @@ desktop/views/pages/deck/deck.note.vue:
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
@ -960,7 +1010,7 @@ desktop/views/pages/selectdrive.vue:
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
@ -1076,12 +1126,16 @@ mobile/views/components/drive-file-chooser.vue:
mobile/views/components/drive-folder-chooser.vue:
select-folder: "フォルダーを選択"
mobile/views/components/drive.file.vue:
nsfw: "閲覧注意"
mobile/views/components/drive.file-detail.vue:
download: "ダウンロード"
rename: "名前を変更"
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
nsfw: "閲覧注意"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
@ -1177,6 +1231,7 @@ mobile/views/components/ui.nav.vue:
game: "ゲーム"
darkmode: "ダークモード"
settings: "設定"
admin: "管理"
about: "Misskeyについて"
mobile/views/components/user-timeline.vue:
@ -1293,7 +1348,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル"
post-style-standard: "標準"
post-style-smart: "スマート"
@ -1317,6 +1373,8 @@ mobile/views/pages/settings.vue:
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
sound: "サウンド"
enableSounds: "サウンドを有効にする"
mobile/views/pages/user.vue:
follows-you: "フォローされています"
@ -1380,6 +1438,5 @@ docs:
type: "型"
description: "説明"
dev/views/index.vue:
manage-apps: "アプリの管理"

1237
locales/ja-KS.yml Normal file

File diff suppressed because it is too large Load Diff

View File

@ -12,7 +12,7 @@ common:
application-authorization: "앱의 연계"
close: "닫기"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
got-it: "わかった"
got-it: "알았습니다"
customization-tips:
title: "사용자 정의 팁"
paragraph1: "홈 정의는 위젯을 추가 / 삭제하거나 드래그 앤 드롭하여 정렬 할 수 있습니다."
@ -39,7 +39,7 @@ common:
weeks_ago: "{}주전"
months_ago: "{}개월전"
years_ago: "{}년전"
month-and-day: "{month} {day}"
month-and-day: "{month} {day}"
trash: "휴지통"
weekday-short:
sunday: "일"
@ -58,7 +58,7 @@ common:
friday: "금요일"
saturday: "토요일"
reactions:
like: "좋네"
like: "いいね"
love: "좋아"
laugh: "크크"
hmm: "음..."
@ -84,7 +84,8 @@ common:
my-token-regenerated: "당신의 토큰이 업데이트되어 있기 때문에 로그 아웃합니다."
i-like-sushi: "나는(푸딩보다 오히려)스시가 좋아"
show-reversi-board-labels: "리버시 보드의 행과 열 레이블을 표시"
verified-user: "인증 된 사용자"
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
verified-user: "公式アカウント"
disable-animated-mfm: "게시물의 문자 애니메이션을 비활성화 할"
reversi:
drawn: "무승부"
@ -122,13 +123,13 @@ common:
tips: "팁"
hashtags: "해시 태그"
deck:
widgets: "ウィジェット"
home: "ホーム"
local: "ローカル"
hybrid: "ソーシャル"
global: "グローバル"
notifications: "通知"
list: "リスト"
widgets: "위젯"
home: ""
local: "로컬"
hybrid: "소셜"
global: "글로벌"
notifications: "통지"
list: "목록"
swap-left: "左に移動"
swap-right: "右に移動"
swap-up: "上に移動"
@ -150,10 +151,10 @@ auth/views/form.vue:
drive-write: "ドライブを操作する。"
notification-read: "通知を見る。"
notification-write: "通知を操作する。"
cancel: "キャンセル"
cancel: "취소"
accept: "アクセスを許可"
auth/views/index.vue:
loading: "読み込み中"
loading: "로드 중"
denied: "アプリケーションの連携をキャンセルしました。"
denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。"
already-authorized: "このアプリは既に連携済みです"
@ -165,18 +166,18 @@ auth/views/index.vue:
common/views/components/games/reversi/reversi.vue:
matching:
waiting-for: "{}を待っています"
cancel: "キャンセル"
cancel: "취소"
common/views/components/games/reversi/reversi.game.vue:
surrender: "投了"
surrender: "기권"
surrendered: "投了により"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
looped-map: "루프 지도"
can-put-everywhere: "どこでも置けるモード"
common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
rule: "遊び方"
invite: "초대"
rule: "게임 방법"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "招待"
mode-invite-desc: "指定したユーザーと対戦するモードです。"
@ -185,26 +186,26 @@ common/views/components/games/reversi/reversi.index.vue:
all-games: "みんなの対局"
enter-username: "ユーザー名を入力してください"
game-state:
ended: "終了"
playing: "進行中"
ended: "종료"
playing: "진행중"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
choose-map: "マップを選択"
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
rules: "규칙"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
looped-map: "루프 지도"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-game-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
cancel: "キャンセル"
ready: "準備完了"
cancel-ready: "準備続行"
waiting-for-both: "준비중"
cancel: "취소"
ready: "준비 완료"
cancel-ready: "준비 계속"
common/views/components/connect-failed.vue:
title: "サーバーに接続できません"
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
@ -231,7 +232,7 @@ common/views/components/connect-failed.troubleshooter.vue:
set-version: "バージョン指定"
common/views/components/messaging.vue:
search-user: "ユーザーを探す"
you: "あなた"
you: "당신"
no-history: "履歴はありません"
common/views/components/messaging-room.vue:
empty: "このユーザーと話したことはありません"
@ -242,12 +243,12 @@ common/views/components/messaging-room.vue:
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.form.vue:
input-message-here: "ここにメッセージを入力"
send: "送信"
send: "전송"
attach-from-local: "PCからファイルを添付する"
attach-from-drive: "ドライブからファイルを添付する"
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
common/views/components/messaging-room.message.vue:
is-read: "既読"
is-read: "읽음"
deleted: "このメッセージは削除されました"
common/views/components/nav.vue:
about: "Misskeyについて"
@ -287,7 +288,10 @@ common/views/components/signin.vue:
signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "ユーザー名"
checking: "確認しています..."
available: "利用できます"
@ -407,6 +411,7 @@ desktop:
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
invalid-filetype: "この形式のファイルはサポートされていません"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@ -420,6 +425,24 @@ desktop/views/components/calendar.vue:
prev: "前の月"
next: "次の月"
go: "クリックして時間遡行"
desktop/views/components/charts.vue:
title: "チャート"
per-day: "1日ごと"
per-hour: "1時間ごと"
notes: "投稿"
users: "ユーザー"
drive: "ドライブ"
charts:
notes: "投稿の増減 (統合)"
local-notes: "投稿の増減 (ローカル)"
remote-notes: "投稿の増減 (リモート)"
notes-total: "投稿の累計"
users: "ユーザーの増減"
users-total: "ユーザーの累計"
drive: "ドライブ使用量の増減"
drive-total: "ドライブ使用量の累計"
drive-files: "ドライブのファイル数の増減"
drive-files-total: "ドライブのファイル数の累計"
desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "ファイル選択中"
upload: "PCからドライブにファイルをアップロード"
@ -440,6 +463,7 @@ desktop/views/components/drive-window.vue:
desktop/views/components/drive.file.vue:
avatar: "アイコン"
banner: "バナー"
nsfw: "閲覧注意"
contextmenu:
rename: "名前を変更"
mark-as-sensitive: "閲覧注意に設定"
@ -625,9 +649,12 @@ desktop/views/components/settings.vue:
circle-icons: "円形のアイコンを使用"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "サウンド"
@ -748,6 +775,7 @@ desktop/views/components/ui.header.account.vue:
lists: "リスト"
follow-requests: "フォロー申請"
customize: "ホームのカスタマイズ"
admin: "管理"
settings: "設定"
signout: "サインアウト"
dark: "闇に飲まれる"
@ -793,8 +821,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
@ -803,6 +832,14 @@ desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー"
@ -811,6 +848,11 @@ desktop/views/pages/deck/deck.note.vue:
reposted-by: "{}がRenote"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
@ -835,7 +877,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "{}で共有"
@ -928,12 +970,15 @@ mobile/views/components/drive-file-chooser.vue:
select-file: "ファイルを選択"
mobile/views/components/drive-folder-chooser.vue:
select-folder: "フォルダーを選択"
mobile/views/components/drive.file.vue:
nsfw: "閲覧注意"
mobile/views/components/drive.file-detail.vue:
download: "ダウンロード"
rename: "名前を変更"
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
nsfw: "閲覧注意"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
@ -1014,6 +1059,7 @@ mobile/views/components/ui.nav.vue:
game: "ゲーム"
darkmode: "ダークモード"
settings: "設定"
admin: "管理"
about: "Misskeyについて"
mobile/views/components/user-timeline.vue:
no-notes: "このユーザーは投稿していないようです。"
@ -1106,7 +1152,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル"
post-style-standard: "標準"
post-style-smart: "スマート"
@ -1130,6 +1177,8 @@ mobile/views/pages/settings.vue:
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
sound: "サウンド"
enableSounds: "サウンドを有効にする"
mobile/views/pages/user.vue:
follows-you: "フォローされています"
following: "フォロー"

View File

@ -58,7 +58,7 @@ common:
friday: "Piątek"
saturday: "Sobota"
reactions:
like: "Lubię"
like: "いいね"
love: "Kocham"
laugh: "Śmieszne"
hmm: "Hmm…?"
@ -84,7 +84,8 @@ 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"
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
verified-user: "公式アカウント"
disable-animated-mfm: "Wyłącz animowany tekst we wpisach"
reversi:
drawn: "Remis"
@ -287,7 +288,10 @@ common/views/components/signin.vue:
signin: "Zaloguj"
or: "または"
signin-with-twitter: "Zaloguj się za pomocą Twittera"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "Nazwa użytkownika"
checking: "Sprawdzanie…"
available: "Dostępna"
@ -407,6 +411,7 @@ desktop:
uploading-avatar: "Wysyłanie awatara"
avatar-updated: "Wysłano awatar"
choose-avatar: "Wybierz awatar"
invalid-filetype: "この形式のファイルはサポートされていません"
desktop/views/components/activity.chart.vue:
total: "Czarny … Łącznie"
notes: "Niebieski … Wpisy"
@ -420,6 +425,24 @@ desktop/views/components/calendar.vue:
prev: "Poprzedni miesiąc"
next: "Następny miesiąc"
go: "Naciśnij, aby przejść"
desktop/views/components/charts.vue:
title: "チャート"
per-day: "1日ごと"
per-hour: "1時間ごと"
notes: "投稿"
users: "ユーザー"
drive: "ドライブ"
charts:
notes: "投稿の増減 (統合)"
local-notes: "投稿の増減 (ローカル)"
remote-notes: "投稿の増減 (リモート)"
notes-total: "投稿の累計"
users: "ユーザーの増減"
users-total: "ユーザーの累計"
drive: "ドライブ使用量の増減"
drive-total: "ドライブ使用量の累計"
drive-files: "ドライブのファイル数の増減"
drive-files-total: "ドライブのファイル数の累計"
desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "Wybierz plik"
upload: "Wyślij pliki z Twojego komputera"
@ -440,6 +463,7 @@ desktop/views/components/drive-window.vue:
desktop/views/components/drive.file.vue:
avatar: "Awatar"
banner: "Baner"
nsfw: "閲覧注意"
contextmenu:
rename: "Zmień nazwę"
mark-as-sensitive: "Oznacz jako zawartość wrażliwą"
@ -625,9 +649,12 @@ desktop/views/components/settings.vue:
circle-icons: "Używaj okrągłych ikon"
gradient-window-header: "Używaj gradientów na pasku tytułu okna"
post-form-on-timeline: "Wyświetlaj formularz tworzenia wpisu w górnej części osi czasu"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "Pokazuj cel odpowiedzi"
show-my-renotes: "Pokazuj moje udostępnienia na osi czasu"
show-renoted-my-notes: "Pokazuj udostępnienia moich wpisów na osi czasu"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "Automatycznie pokazuj mapę"
show-maps-desc: "Mapa będzie automatycznie rozwijana dla wpisów zawierających informacje o lokalizacji."
sound: "Dźwięk"
@ -748,6 +775,7 @@ desktop/views/components/ui.header.account.vue:
lists: "Listy"
follow-requests: "Prośby o śledzenie"
customize: "Dostosuj stronę główną"
admin: "管理"
settings: "Ustawienia"
signout: "Wyloguj się"
dark: "Sprowadź ciemność"
@ -793,8 +821,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
@ -803,6 +832,14 @@ desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "Tylko wpisy z zawartością multimedialną"
is-media-view: "Widok multimediów"
@ -811,6 +848,11 @@ desktop/views/pages/deck/deck.note.vue:
reposted-by: "Udostępniono przez {}"
private: "ten wpis jest prywatny"
deleted: "ten wpis został usunięty"
desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
desktop/views/pages/welcome.vue:
about: "O Misskey"
gotit: "Rozumiem!"
@ -835,7 +877,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "Anuluj"
upload: "Wyślij pliki z Twojego komputera"
desktop/views/pages/search.vue:
not-available: "Funkcja wyszukiwania nie może zostać wykorzystywana."
not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "Nie znaleziono wpisów zawierających „{}”"
desktop/views/pages/share.vue:
share-with: "Udostępnij z {}."
@ -928,12 +970,15 @@ mobile/views/components/drive-file-chooser.vue:
select-file: "Wybierz plik"
mobile/views/components/drive-folder-chooser.vue:
select-folder: "Wybierz katalog"
mobile/views/components/drive.file.vue:
nsfw: "閲覧注意"
mobile/views/components/drive.file-detail.vue:
download: "Pobierz"
rename: "Zmień nazwę"
move: "Przenieś"
hash: "Hash (md5)"
exif: "EXIF"
nsfw: "閲覧注意"
mobile/views/components/media-image.vue:
sensitive: "To jest zawartość NSFW"
click-to-show: "Naciśnij aby wyświetlić"
@ -1014,6 +1059,7 @@ mobile/views/components/ui.nav.vue:
game: "Gry"
darkmode: "Tryb ciemny"
settings: "Ustawienia"
admin: "管理"
about: "O Misskey"
mobile/views/components/user-timeline.vue:
no-notes: "Wygląda na to, że ten użytkownik nie opublikował jeszcze niczego"
@ -1106,7 +1152,8 @@ mobile/views/pages/settings.vue:
timeline: "Oś czasu"
show-reply-target: "Pokazuj cel odpowiedzi"
show-my-renotes: "Pokazuj moje udostępnienia"
show-renoted-my-notes: "Pokazuj udostępnienia moich wpisów"
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "Styl wpisów"
post-style-standard: "Standardowy"
post-style-smart: "Inteligentny"
@ -1130,6 +1177,8 @@ mobile/views/pages/settings.vue:
update-available-desc: "Odśwież stronę, aby zastosować aktualizację."
settings: "Ustawienia"
signout: "Wyloguj"
sound: "サウンド"
enableSounds: "サウンドを有効にする"
mobile/views/pages/user.vue:
follows-you: "Śledzi Cię"
following: "Śledzeni"

View File

@ -3,165 +3,166 @@ meta:
lang: "Português"
divider: ""
common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
misskey: "Umado fediverso"
about-title: "Umado fediverso."
about: "Obrigado por encontrar Misskey. Uma <b>plataforma descentralizada de microblog</b> nascida na Terra. Já que ela existe no Fediverso (um universo onde várias plataformas de mídia social são organizadas), ela é ligada com outras plataformas.Por que você não tira uma folga do agito e confusão da cidade, e mergulha em uma nova internet?"
adblock:
detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携"
close: "閉じる"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
got-it: "わかった"
detected: "Por favor, desative o bloqueador de anúncios."
warning: "Alguns recursos podem não estar disponíveis ou apresentar mal funcionamento se o bloqueio de anúncios estiver ativado. <strong>Misskey não está usando anúncios</strong>"
application-authorization: "Aplicativos autorizados"
close: "Fechar"
do-not-copy-paste: "Por favor, não digite ou copie o código aqui. A conta pode ser comprometida."
got-it: "Entendi!"
customization-tips:
title: "カスタマイズのヒント"
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
gotit: "Got it!"
title: "Dicas de personalização"
paragraph1: "Personalização da página inicial permite adicionar/remover, arrastar e soltar e reorganizar widgets."
paragraph2: "Você pode mudar a visualização de alguns widgets <strong>clicando com o botão <strong>direito.</strong></strong>"
paragraph3: "Para apagar um widget, o arraste e solte <strong>na área chamada \"Lixo\"</strong> no cabeçalho."
paragraph4: "Para terminar a personalização clique em \"Terminar\" acima e à direita."
gotit: "Entendi!"
notification:
file-uploaded: "ファイルがアップロードされました"
message-from: "{}さんからメッセージ:"
reversi-invited: "対局への招待があります"
reversi-invited-by: "{}さんから"
notified-by: "{}さんから"
reply-from: "{}さんから返信:"
quoted-by: "{}さんが引用:"
file-uploaded: "Arquivo enviado!"
message-from: "Mensagem de {}:"
reversi-invited: "Convidado a jogar"
reversi-invited-by: "Convidado por {}:"
notified-by: "Notificado por {}:"
reply-from: "Resposta de {}:"
quoted-by: "Citado por {}:"
time:
unknown: "なぞのじかん"
future: "未来"
just_now: "たった今"
seconds_ago: "{}秒前"
minutes_ago: "{}分前"
hours_ago: "{}時間前"
days_ago: "{}日前"
weeks_ago: "{}週間前"
months_ago: "{}ヶ月前"
years_ago: "{}年前"
month-and-day: "{month}月 {day}日"
trash: "ゴミ箱"
unknown: "Desconhecido"
future: "futuro"
just_now: "agora"
seconds_ago: "{} sec atrás"
minutes_ago: "{} min atrás"
hours_ago: "{} h atrás"
days_ago: "{} d atrás"
weeks_ago: "{} sem atrás"
months_ago: "{} m atrás"
years_ago: "{} ano(s) atrás"
month-and-day: "{day}/{month}"
trash: "Lixo"
weekday-short:
sunday: ""
monday: ""
tuesday: ""
wednesday: ""
thursday: ""
friday: ""
saturday: ""
sunday: "Dom"
monday: "Seg"
tuesday: "Ter"
wednesday: "Qua"
thursday: "Qui"
friday: "Sex"
saturday: "Seb"
weekday:
sunday: "日曜日"
monday: "月曜日"
tuesday: "火曜日"
wednesday: "水曜日"
thursday: "木曜日"
friday: "金曜日"
saturday: "土曜日"
sunday: "domingo"
monday: "segunda"
tuesday: "terça"
wednesday: "quarta"
thursday: "quinta"
friday: "sexta"
saturday: "sábado"
reactions:
like: "いいね"
love: "しゅき"
laugh: ""
hmm: "ふぅ~む"
surprise: "わお"
congrats: "おめでとう"
angry: "おこ"
confused: "こまこまのこまり"
like: "Curtir"
love: "Amei"
laugh: "Riso"
hmm: "Hmm...?"
surprise: "Uau"
congrats: "Parabéns!"
angry: "Raiva"
confused: "Confuso"
rip: "RIP"
pudding: "Pudding"
pudding: "Pudim"
note-placeholders:
a: "今どうしてる?"
b: "何かありましたか?"
c: "何をお考えですか?"
d: "言いたいことは?"
e: "ここに書いてください"
f: "あなたが書くのを待っています..."
search: "検索"
delete: "削除"
loading: "読み込み中"
ok: "わかった"
update-available-title: "更新があります"
update-available: "Misskeyの新しいバージョンがあります({newer}。現在{current}を利用中)。ページを再度読み込みすると更新が適用されます。"
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
a: "O que está fazendo?"
b: "O que está acontecendo?"
c: "No que está pensando?"
d: "Quer postar algo?"
e: "Escreva aqui"
f: "Esperando você escrever."
search: "Buscar"
delete: "Apagar"
loading: "Carregando"
ok: "OK"
update-available-title: "Atualização disponível"
update-available: "Uma nova versão de Misskey está disponível ({newer}). A versão atual é {current}. Recarregue a página para atualizar."
my-token-regenerated: "Seu token foi recriado, portanto você foi deslogado."
i-like-sushi: "Eu prefiro sushi a pudim"
show-reversi-board-labels: "Mostrar etiquetas de colunas e linhas no Reversi"
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
verified-user: "Conta verificada"
disable-animated-mfm: "Desativar texto animado nas publicações"
reversi:
drawn: "引き分け"
my-turn: "あなたのターンです"
opponent-turn: "相手のターンです"
turn-of: "{}のターンです"
past-turn-of: "{}のターン"
won: "{}の勝ち"
black: ""
white: ""
total: "合計"
this-turn: "{}ターン目"
drawn: "Empatado"
my-turn: "Seu turno"
opponent-turn: "Turno do oponente"
turn-of: "turno de {}"
past-turn-of: "turno de {}"
won: "{} venceu"
black: "Pretas"
white: "Brancas"
total: "Total"
this-turn: "Turno de {}"
widgets:
analog-clock: "アナログ時計"
profile: "プロフィール"
calendar: "カレンダー"
timemachine: "カレンダー(タイムマシン)"
activity: "アクティビティ"
rss: "RSSリーダー"
memo: "付箋"
trends: "トレンド"
analog-clock: "Relógio analógico"
profile: "Perfil"
calendar: "Calendário"
timemachine: "Calendário (máquina do tempo)"
activity: "Atividade"
rss: "Leitor de RSS"
memo: "Nota adesiva"
trends: "Tendências"
photo-stream: "フォトストリーム"
posts-monitor: "投稿チャート"
posts-monitor: "Gráfico de publicações"
slideshow: "スライドショー"
version: "バージョン"
version: "Versão"
broadcast: "ブロードキャスト"
notifications: "通知"
users: "おすすめユーザー"
polls: "アンケート"
post-form: "投稿フォーム"
messaging: "メッセージ"
server: "サーバー情報"
donation: "寄付のお願い"
nav: "ナビゲーション"
tips: "ヒント"
hashtags: "ハッシュタグ"
notifications: "Notificações"
users: "Usuário sugeridos"
polls: "Enquetes"
post-form: "Formulário de publicação"
messaging: "Mensagens"
server: "Informações do servidor"
donation: "Doações"
nav: "Navegação"
tips: "Dicas"
hashtags: "Hashtags"
deck:
widgets: "ウィジェット"
home: "ホーム"
local: "ローカル"
hybrid: "ソーシャル"
global: "グローバル"
notifications: "通知"
list: "リスト"
swap-left: "左に移動"
swap-right: "右に移動"
swap-up: "上に移動"
swap-down: "下に移動"
remove: "カラムを削除"
add-column: "カラムを追加"
rename: "名前を変更"
widgets: "Widgets"
home: "Início"
local: "Local"
hybrid: "Social"
global: "Global"
notifications: "Notificações"
list: "Listas"
swap-left: "Mover para a esquerda"
swap-right: "Mover para a direita"
swap-up: "Mover para cima"
swap-down: "Mover para baixo"
remove: "Remover"
add-column: "Adicionar coluna"
rename: "Renomear"
stack-left: "左に重ねる"
pop-right: "右に出す"
pop-right: "Acoplar à direita"
auth/views/form.vue:
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
permission-ask: "このアプリは次の権限を要求しています:"
account-read: "アカウントの情報を見る。"
account-write: "アカウントの情報を操作する。"
note-write: "投稿する。"
share-access: "Você <b>permite</b> que <i>{{ app.name }}</i> acesse sua conta?"
permission-ask: "Este aplicativo precisa das seguintes permissões:"
account-read: "Ver informações da conta."
account-write: "Modificar informações da conta."
note-write: "Publicar"
like-write: "いいねしたりいいね解除する。"
following-write: "フォローしたりフォロー解除する。"
drive-read: "ドライブを見る。"
drive-write: "ドライブを操作する。"
notification-read: "通知を見る。"
notification-write: "通知を操作する。"
cancel: "キャンセル"
accept: "アクセスを許可"
cancel: "Cancelar"
accept: "Permitir acesso"
auth/views/index.vue:
loading: "読み込み中"
loading: "Carregando"
denied: "アプリケーションの連携をキャンセルしました。"
denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。"
already-authorized: "このアプリは既に連携済みです"
allowed: "アプリケーションの連携を許可しました"
callback-url: "アプリケーションに戻っています"
please-go-back: "アプリケーションに戻って、やっていってください。"
error: "セッションが存在しません。"
sign-in: "サインインしてください"
already-authorized: "Este aplicativo já foi autorizado"
allowed: "Aplicativos com acesso autorizado"
callback-url: "Voltando ao aplicativo"
please-go-back: "Por favor, volte ao aplicativo."
error: "A sessão não existe."
sign-in: "Por favor, entre."
common/views/components/games/reversi/reversi.vue:
matching:
waiting-for: "{}を待っています"
@ -175,17 +176,17 @@ common/views/components/games/reversi/reversi.game.vue:
common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi"
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
invite: "招待"
rule: "遊び方"
invite: "Convidar"
rule: "Como jogar"
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
mode-invite: "招待"
mode-invite-desc: "指定したユーザーと対戦するモードです。"
invitations: "対局の招待があります!"
my-games: "自分の対局"
all-games: "みんなの対局"
enter-username: "ユーザー名を入力してください"
mode-invite: "Convidar"
mode-invite-desc: "Convidar um usuário para jogar"
invitations: "Você foi convidado!"
my-games: "Meu jogo"
all-games: "Todos os jogos"
enter-username: "Digite o nome de usuário."
game-state:
ended: "終了"
ended: "Terminado"
playing: "進行中"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
@ -193,7 +194,7 @@ common/views/components/games/reversi/reversi.room.vue:
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
rules: "Regras"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
@ -202,7 +203,7 @@ common/views/components/games/reversi/reversi.room.vue:
waiting-for-other: "相手の準備が完了するのを待っています"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
cancel: "キャンセル"
cancel: "Cancelar"
ready: "準備完了"
cancel-ready: "準備続行"
common/views/components/connect-failed.vue:
@ -227,11 +228,11 @@ common/views/components/connect-failed.troubleshooter.vue:
no-server-desc: "お使いのPCのインターネット接続は正常ですが、Misskeyのサーバーには接続できませんでした。サーバーがダウンまたはメンテナンスしている可能性があるので、しばらくしてから再度御アクセスください。"
success: "Misskeyのサーバーに接続できました"
success-desc: "正常に接続できるようです。ページを再度読み込みしてください。"
flush: "キャッシュの削除"
flush: "Limpar o cache"
set-version: "バージョン指定"
common/views/components/messaging.vue:
search-user: "ユーザーを探す"
you: "あなた"
you: "Você"
no-history: "履歴はありません"
common/views/components/messaging-room.vue:
empty: "このユーザーと話したことはありません"
@ -287,7 +288,10 @@ common/views/components/signin.vue:
signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "ユーザー名"
checking: "確認しています..."
available: "利用できます"
@ -407,6 +411,7 @@ desktop:
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
invalid-filetype: "この形式のファイルはサポートされていません"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@ -420,6 +425,24 @@ desktop/views/components/calendar.vue:
prev: "前の月"
next: "次の月"
go: "クリックして時間遡行"
desktop/views/components/charts.vue:
title: "チャート"
per-day: "1日ごと"
per-hour: "1時間ごと"
notes: "投稿"
users: "ユーザー"
drive: "ドライブ"
charts:
notes: "投稿の増減 (統合)"
local-notes: "投稿の増減 (ローカル)"
remote-notes: "投稿の増減 (リモート)"
notes-total: "投稿の累計"
users: "ユーザーの増減"
users-total: "ユーザーの累計"
drive: "ドライブ使用量の増減"
drive-total: "ドライブ使用量の累計"
drive-files: "ドライブのファイル数の増減"
drive-files-total: "ドライブのファイル数の累計"
desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "ファイル選択中"
upload: "PCからドライブにファイルをアップロード"
@ -440,6 +463,7 @@ desktop/views/components/drive-window.vue:
desktop/views/components/drive.file.vue:
avatar: "アイコン"
banner: "バナー"
nsfw: "閲覧注意"
contextmenu:
rename: "名前を変更"
mark-as-sensitive: "閲覧注意に設定"
@ -625,9 +649,12 @@ desktop/views/components/settings.vue:
circle-icons: "円形のアイコンを使用"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "サウンド"
@ -748,6 +775,7 @@ desktop/views/components/ui.header.account.vue:
lists: "リスト"
follow-requests: "フォロー申請"
customize: "ホームのカスタマイズ"
admin: "管理"
settings: "設定"
signout: "サインアウト"
dark: "闇に飲まれる"
@ -773,7 +801,7 @@ desktop/views/components/user-lists-window.vue:
desktop/views/components/user-preview.vue:
notes: "投稿"
following: "フォロー"
followers: "フォロワー"
followers: "Seguidores"
desktop/views/components/users-list.vue:
all: "すべて"
iknow: "知り合い"
@ -787,14 +815,15 @@ desktop/views/components/window.vue:
desktop/views/pages/admin/admin.vue:
dashboard: "ダッシュボード"
drive: "ドライブ"
users: "ユーザー"
update: "更新"
users: "Usuários"
update: "Actualizações"
desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
all-users: "Todos os usuários"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
@ -803,6 +832,14 @@ desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー"
@ -811,6 +848,11 @@ desktop/views/pages/deck/deck.note.vue:
reposted-by: "{}がRenote"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
@ -818,24 +860,24 @@ desktop/views/pages/welcome.vue:
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
powered-by-misskey: "Powered by <b>Misskey</b>."
timeline: "Timeline"
powered-by-misskey: "Desenvolvido por <b>Misskey</b>."
desktop/views/pages/drive.vue:
title: "Misskey Drive"
title: "Drive Misskey"
desktop/views/pages/favorites.vue:
more: "さらに読み込む"
more: "Carregar mais"
desktop/views/pages/home-customize.vue:
title: "ホームのカスタマイズ"
title: "Personalizar a página inicial"
desktop/views/pages/note.vue:
prev: "前の投稿"
next: "次の投稿"
prev: "Nota anterior"
next: "Próxima nota"
desktop/views/pages/selectdrive.vue:
title: "ファイルを選択してください"
ok: "決定"
cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード"
title: "Selecione um arquivo"
ok: "OK"
cancel: "Cancelar"
upload: "Envie arquivos do seu dispositivo"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-available: "A pesquisa está desligada nas configurações desta instância."
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "{}で共有"
@ -928,12 +970,15 @@ mobile/views/components/drive-file-chooser.vue:
select-file: "ファイルを選択"
mobile/views/components/drive-folder-chooser.vue:
select-folder: "フォルダーを選択"
mobile/views/components/drive.file.vue:
nsfw: "閲覧注意"
mobile/views/components/drive.file-detail.vue:
download: "ダウンロード"
rename: "名前を変更"
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
nsfw: "閲覧注意"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
@ -1014,6 +1059,7 @@ mobile/views/components/ui.nav.vue:
game: "ゲーム"
darkmode: "ダークモード"
settings: "設定"
admin: "管理"
about: "Misskeyについて"
mobile/views/components/user-timeline.vue:
no-notes: "このユーザーは投稿していないようです。"
@ -1106,7 +1152,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル"
post-style-standard: "標準"
post-style-smart: "スマート"
@ -1130,6 +1177,8 @@ mobile/views/pages/settings.vue:
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
sound: "サウンド"
enableSounds: "サウンドを有効にする"
mobile/views/pages/user.vue:
follows-you: "フォローされています"
following: "フォロー"
@ -1139,29 +1188,29 @@ mobile/views/pages/user.vue:
timeline: "タイムライン"
media: "メディア"
is-suspended: "このユーザーは凍結されています。"
is-remote: "このユーザーはリモートユーザーです。"
view-remote: "正確な情報を見る"
is-remote: "Este é uma usuário remoto. O perfil que vê aqui pode não estar completo."
view-remote: "Ver o perfil completo."
mobile/views/pages/user/home.vue:
recent-notes: "最近の投稿"
images: "画像"
activity: "アクティビティ"
recent-notes: "Notas recentes"
images: "Imagens"
activity: "Atividade"
keywords: "キーワード"
domains: "頻出ドメイン"
frequently-replied-users: "よく会話するユーザー"
followers-you-know: "知り合いのフォロワー"
last-used-at: "最終ログイン"
followers-you-know: "Seguidores que você conhece"
last-used-at: "Ativo pela última vez:"
mobile/views/pages/user/home.followers-you-know.vue:
loading: "読み込み中"
loading: "Carregando"
no-users: "知り合いのユーザーはいません"
mobile/views/pages/user/home.friends.vue:
loading: "読み込み中"
no-users: "よく会話するユーザーはいません"
mobile/views/pages/user/home.notes.vue:
loading: "読み込み中"
no-notes: "投稿はありません"
loading: "Carregando"
no-notes: "Nenhuma mensagem"
mobile/views/pages/user/home.photos.vue:
loading: "読み込み中"
no-photos: "写真はありません"
loading: "Carregando"
no-photos: "Sem fotos"
docs:
edit-this-page-on-github: "間違いや改善点を見つけましたか?"
edit-this-page-on-github-link: "このページをGitHubで編集"
@ -1178,11 +1227,11 @@ docs:
duration-limit: "直近{duration}ミリ秒の間のこのエンドポイントへのリクエスト数の合計が{max}を超える場合はリクエストできません。"
min-interval-limit: "前回のリクエストから{interval}ミリ秒経っていない場合はリクエストできません。"
show-src: "このエンドポイントのソースコードも閲覧できます。"
show-src-link: "コードをGitHubで見る"
generated: "このドキュメントはAPI定義に基づき自動生成されています。"
show-src-link: "Veja o código no GitHub"
generated: "Este documento foi gerado pelas definições da API."
props:
name: "名前"
type: ""
description: "説明"
name: "Nome"
type: "Tipo"
description: "Descrição"
dev/views/index.vue:
manage-apps: "アプリの管理"
manage-apps: "Gerenciar aplicativos"

View File

@ -84,7 +84,8 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
reversi:
drawn: "引き分け"
@ -287,7 +288,10 @@ common/views/components/signin.vue:
signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "ユーザー名"
checking: "確認しています..."
available: "利用できます"
@ -407,6 +411,7 @@ desktop:
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
invalid-filetype: "この形式のファイルはサポートされていません"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@ -420,6 +425,24 @@ desktop/views/components/calendar.vue:
prev: "前の月"
next: "次の月"
go: "クリックして時間遡行"
desktop/views/components/charts.vue:
title: "チャート"
per-day: "1日ごと"
per-hour: "1時間ごと"
notes: "投稿"
users: "ユーザー"
drive: "ドライブ"
charts:
notes: "投稿の増減 (統合)"
local-notes: "投稿の増減 (ローカル)"
remote-notes: "投稿の増減 (リモート)"
notes-total: "投稿の累計"
users: "ユーザーの増減"
users-total: "ユーザーの累計"
drive: "ドライブ使用量の増減"
drive-total: "ドライブ使用量の累計"
drive-files: "ドライブのファイル数の増減"
drive-files-total: "ドライブのファイル数の累計"
desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "ファイル選択中"
upload: "PCからドライブにファイルをアップロード"
@ -440,6 +463,7 @@ desktop/views/components/drive-window.vue:
desktop/views/components/drive.file.vue:
avatar: "アイコン"
banner: "バナー"
nsfw: "閲覧注意"
contextmenu:
rename: "名前を変更"
mark-as-sensitive: "閲覧注意に設定"
@ -625,9 +649,12 @@ desktop/views/components/settings.vue:
circle-icons: "円形のアイコンを使用"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "サウンド"
@ -748,6 +775,7 @@ desktop/views/components/ui.header.account.vue:
lists: "リスト"
follow-requests: "フォロー申請"
customize: "ホームのカスタマイズ"
admin: "管理"
settings: "設定"
signout: "サインアウト"
dark: "闇に飲まれる"
@ -793,8 +821,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
@ -803,6 +832,14 @@ desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー"
@ -811,6 +848,11 @@ desktop/views/pages/deck/deck.note.vue:
reposted-by: "{}がRenote"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
@ -835,7 +877,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "{}で共有"
@ -928,12 +970,15 @@ mobile/views/components/drive-file-chooser.vue:
select-file: "ファイルを選択"
mobile/views/components/drive-folder-chooser.vue:
select-folder: "フォルダーを選択"
mobile/views/components/drive.file.vue:
nsfw: "閲覧注意"
mobile/views/components/drive.file-detail.vue:
download: "ダウンロード"
rename: "名前を変更"
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
nsfw: "閲覧注意"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
@ -1014,6 +1059,7 @@ mobile/views/components/ui.nav.vue:
game: "ゲーム"
darkmode: "ダークモード"
settings: "設定"
admin: "管理"
about: "Misskeyについて"
mobile/views/components/user-timeline.vue:
no-notes: "このユーザーは投稿していないようです。"
@ -1106,7 +1152,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル"
post-style-standard: "標準"
post-style-smart: "スマート"
@ -1130,6 +1177,8 @@ mobile/views/pages/settings.vue:
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
sound: "サウンド"
enableSounds: "サウンドを有効にする"
mobile/views/pages/user.vue:
follows-you: "フォローされています"
following: "フォロー"

View File

@ -84,7 +84,8 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
verified-user: "認証済みのユーザー"
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
reversi:
drawn: "引き分け"
@ -287,7 +288,10 @@ common/views/components/signin.vue:
signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue:
invitation-code: "招待コード"
invitation-info: "招待コードをお持ちでない方は、<a href=\"{}\">管理者</a>までご連絡ください。"
username: "ユーザー名"
checking: "確認しています..."
available: "利用できます"
@ -407,6 +411,7 @@ desktop:
uploading-avatar: "新しいアバターをアップロードしています"
avatar-updated: "アバターを更新しました"
choose-avatar: "アバターにする画像を選択"
invalid-filetype: "この形式のファイルはサポートされていません"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@ -420,6 +425,24 @@ desktop/views/components/calendar.vue:
prev: "前の月"
next: "次の月"
go: "クリックして時間遡行"
desktop/views/components/charts.vue:
title: "チャート"
per-day: "1日ごと"
per-hour: "1時間ごと"
notes: "投稿"
users: "ユーザー"
drive: "ドライブ"
charts:
notes: "投稿の増減 (統合)"
local-notes: "投稿の増減 (ローカル)"
remote-notes: "投稿の増減 (リモート)"
notes-total: "投稿の累計"
users: "ユーザーの増減"
users-total: "ユーザーの累計"
drive: "ドライブ使用量の増減"
drive-total: "ドライブ使用量の累計"
drive-files: "ドライブのファイル数の増減"
drive-files-total: "ドライブのファイル数の累計"
desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "ファイル選択中"
upload: "PCからドライブにファイルをアップロード"
@ -440,6 +463,7 @@ desktop/views/components/drive-window.vue:
desktop/views/components/drive.file.vue:
avatar: "アイコン"
banner: "バナー"
nsfw: "閲覧注意"
contextmenu:
rename: "名前を変更"
mark-as-sensitive: "閲覧注意に設定"
@ -625,9 +649,12 @@ desktop/views/components/settings.vue:
circle-icons: "円形のアイコンを使用"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "サウンド"
@ -748,6 +775,7 @@ desktop/views/components/ui.header.account.vue:
lists: "リスト"
follow-requests: "フォロー申請"
customize: "ホームのカスタマイズ"
admin: "管理"
settings: "設定"
signout: "サインアウト"
dark: "闇に飲まれる"
@ -793,8 +821,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
dashboard: "ダッシュボード"
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全てのノート"
original-notes: "このインスタンスのノート"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
invite: "招待"
desktop/views/pages/admin/admin.suspend-user.vue:
suspend-user: "ユーザーの凍結"
suspend: "凍結"
@ -803,6 +832,14 @@ desktop/views/pages/admin/admin.unsuspend-user.vue:
unsuspend-user: "ユーザーの凍結の解除"
unsuspend: "凍結の解除"
unsuspended: "凍結を解除しました"
desktop/views/pages/admin/admin.verify-user.vue:
verify-user: "ユーザーの公式アカウント設定"
verify: "公式アカウントにする"
verified: "公式アカウントにしました"
desktop/views/pages/admin/admin.unverify-user.vue:
unverify-user: "ユーザーの公式アカウント解除"
unverify: "公式アカウントを解除する"
unverified: "公式アカウントを解除しました"
desktop/views/pages/deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー"
@ -811,6 +848,11 @@ desktop/views/pages/deck/deck.note.vue:
reposted-by: "{}がRenote"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
desktop/views/pages/stats/stats.vue:
all-users: "全てのユーザー"
original-users: "このインスタンスのユーザー"
all-notes: "全ての投稿"
original-notes: "このインスタンスの投稿"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
@ -835,7 +877,7 @@ desktop/views/pages/selectdrive.vue:
cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。"
not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "{}で共有"
@ -928,12 +970,15 @@ mobile/views/components/drive-file-chooser.vue:
select-file: "ファイルを選択"
mobile/views/components/drive-folder-chooser.vue:
select-folder: "フォルダーを選択"
mobile/views/components/drive.file.vue:
nsfw: "閲覧注意"
mobile/views/components/drive.file-detail.vue:
download: "ダウンロード"
rename: "名前を変更"
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
nsfw: "閲覧注意"
mobile/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
@ -1014,6 +1059,7 @@ mobile/views/components/ui.nav.vue:
game: "ゲーム"
darkmode: "ダークモード"
settings: "設定"
admin: "管理"
about: "Misskeyについて"
mobile/views/components/user-timeline.vue:
no-notes: "このユーザーは投稿していないようです。"
@ -1106,7 +1152,8 @@ mobile/views/pages/settings.vue:
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル"
post-style-standard: "標準"
post-style-smart: "スマート"
@ -1130,6 +1177,8 @@ mobile/views/pages/settings.vue:
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
sound: "サウンド"
enableSounds: "サウンドを有効にする"
mobile/views/pages/user.vue:
follows-you: "フォローされています"
following: "フォロー"

View File

@ -1,8 +1,8 @@
{
"name": "misskey",
"author": "syuilo <i@syuilo.com>",
"version": "6.0.1",
"clientVersion": "1.0.8367",
"version": "8.23.0",
"clientVersion": "1.0.9287",
"codename": "nighthike",
"main": "./built/index.js",
"private": true,
@ -32,7 +32,7 @@
"@types/debug": "0.0.30",
"@types/deep-equal": "1.0.1",
"@types/double-ended-queue": "2.1.0",
"@types/elasticsearch": "5.0.25",
"@types/elasticsearch": "5.0.26",
"@types/file-type": "5.2.1",
"@types/gulp": "3.8.36",
"@types/gulp-htmlmin": "1.3.32",
@ -60,7 +60,7 @@
"@types/mocha": "5.2.3",
"@types/mongodb": "3.1.4",
"@types/ms": "0.7.30",
"@types/node": "10.7.1",
"@types/node": "10.9.4",
"@types/portscanner": "2.1.0",
"@types/pug": "2.0.4",
"@types/qrcode": "1.2.0",
@ -70,16 +70,16 @@
"@types/request-promise-native": "1.0.15",
"@types/rimraf": "2.0.2",
"@types/seedrandom": "2.4.27",
"@types/sharp": "0.17.9",
"@types/sharp": "0.17.10",
"@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.10",
"@types/uuid": "3.4.4",
"@types/webpack": "4.4.11",
"@types/webpack-stream": "3.2.10",
"@types/websocket": "0.0.39",
"@types/websocket": "0.0.40",
"@types/ws": "6.0.0",
"animejs": "2.2.0",
"autosize": "4.0.2",
@ -89,6 +89,7 @@
"bootstrap-vue": "2.0.0-rc.11",
"cafy": "11.3.0",
"chalk": "2.4.1",
"chart.js": "2.7.2",
"commander": "2.17.1",
"crc-32": "1.2.0",
"css-loader": "1.0.0",
@ -126,7 +127,7 @@
"gulp-util": "3.0.8",
"hard-source-webpack-plugin": "0.12.0",
"highlight.js": "9.12.0",
"html-minifier": "3.5.19",
"html-minifier": "3.5.20",
"http-signature": "1.2.0",
"insert-text-at-cursor": "0.1.1",
"is-root": "2.0.0",
@ -149,6 +150,7 @@
"loader-utils": "1.1.0",
"lodash.assign": "4.2.0",
"mecab-async": "0.1.2",
"merge-options": "1.0.1",
"minio": "7.0.0",
"mkdirp": "0.5.1",
"mocha": "5.2.0",
@ -156,7 +158,8 @@
"mongodb": "3.1.1",
"monk": "6.0.6",
"ms": "2.1.1",
"nan": "2.10.0",
"nan": "2.11.0",
"nested-property": "0.0.7",
"node-sass": "4.9.3",
"node-sass-json-importer": "3.3.1",
"nprogress": "0.2.0",
@ -181,17 +184,17 @@
"s-age": "1.1.2",
"sass-loader": "7.1.0",
"seedrandom": "2.4.4",
"sharp": "0.20.5",
"sharp": "0.20.7",
"showdown": "1.8.6",
"showdown-highlightjs-extension": "0.1.2",
"single-line-log": "1.1.2",
"speakeasy": "2.0.0",
"stringz": "1.0.0",
"style-loader": "0.22.1",
"style-loader": "0.23.0",
"stylus": "0.54.5",
"stylus-loader": "3.0.2",
"summaly": "2.1.3",
"systeminformation": "3.42.9",
"summaly": "2.2.0",
"systeminformation": "3.44.2",
"syuilo-password-strength": "0.0.1",
"textarea-caret": "3.1.0",
"tmp": "0.0.33",
@ -201,14 +204,15 @@
"typescript": "2.9.2",
"typescript-eslint-parser": "18.0.0",
"uglify-es": "3.3.9",
"url-loader": "1.1.0",
"url-loader": "1.1.1",
"uuid": "3.3.2",
"v-animate-css": "0.0.2",
"vue": "2.5.17",
"vue-chartjs": "3.4.0",
"vue-cropperjs": "2.2.1",
"vue-js-modal": "1.3.17",
"vue-js-modal": "1.3.25",
"vue-json-tree-view": "2.1.4",
"vue-loader": "15.3.0",
"vue-loader": "15.4.1",
"vue-router": "3.0.1",
"vue-style-loader": "4.1.2",
"vue-template-compiler": "2.5.17",
@ -217,7 +221,7 @@
"vuex-persistedstate": "2.5.4",
"web-push": "3.3.2",
"webfinger.js": "2.6.6",
"webpack": "4.16.5",
"webpack": "4.17.1",
"webpack-cli": "3.1.0",
"websocket": "1.0.26",
"ws": "6.0.0",

View File

@ -6,6 +6,10 @@ html
&, *
cursor progress !important
html
// iOS
overflow auto
body
overflow-wrap break-word

View File

@ -7,7 +7,7 @@
<div class="app">
<section>
<h2>{{ app.name }}</h2>
<p class="nid">{{ app.nameId }}</p>
<p class="id">{{ app.id }}</p>
<p class="description">{{ app.description }}</p>
</section>
<section>

View File

@ -80,7 +80,7 @@ export default Vue.extend({
accepted() {
this.state = 'accepted';
if (this.session.app.callbackUrl) {
location.href = this.session.app.callbackUrl + '?token=' + this.session.token;
location.href = `${this.session.app.callbackUrl}?token=${this.session.token}`;
}
}
}

View File

@ -32,19 +32,28 @@
//#region Detect app name
let app = null;
if (url.pathname == '/docs' || url.pathname.startsWith('/docs/')) app = 'docs';
if (url.pathname == '/dev' || url.pathname.startsWith('/dev/')) app = 'dev';
if (url.pathname == '/auth' || url.pathname.startsWith('/auth/')) app = 'auth';
if (`${url.pathname}/`.startsWith('/docs/')) app = 'docs';
if (`${url.pathname}/`.startsWith('/dev/')) app = 'dev';
if (`${url.pathname}/`.startsWith('/auth/')) app = 'auth';
//#endregion
//#region Detect the user language
let lang = navigator.language.split('-')[0];
let lang = null;
// The default language is English
if (!LANGS.includes(lang)) lang = 'en';
if (LANGS.includes(navigator.language)) {
lang = navigator.language;
} else {
lang = LANGS.find(x => x.split('-')[0] == navigator.language);
if (settings) {
if (settings.device.lang) lang = settings.device.lang;
if (lang == null) {
// Fallback
lang = 'en-US';
}
}
if (settings && settings.device.lang &&
LANGS.includes(settings.device.lang)) {
lang = settings.device.lang;
}
//#endregion
@ -85,7 +94,7 @@
// Get salt query
const salt = localStorage.getItem('salt')
? '?salt=' + localStorage.getItem('salt')
? `?salt=${localStorage.getItem('salt')}`
: '';
// Load an app script
@ -104,7 +113,7 @@
// グローバルにタイマーIDを代入しておく
window.mkBootTimer = window.setTimeout(async () => {
// Fetch meta
const res = await fetch(API + '/meta', {
const res = await fetch('/api/meta', {
method: 'POST',
cache: 'no-cache'
});

View File

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

View File

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

View File

@ -44,11 +44,11 @@ export default class Connection extends EventEmitter {
const query = params
? Object.keys(params)
.map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))
.map(k => `${encodeURIComponent(k)}=${encodeURIComponent(params[k])}`)
.join('&')
: null;
this.socket = new ReconnectingWebsocket(`${wsUrl}/${endpoint}${query ? '?' + query : ''}`);
this.socket = new ReconnectingWebsocket(`${wsUrl}/${endpoint}${query ? `?${query}` : ''}`);
this.socket.addEventListener('open', this.onOpen);
this.socket.addEventListener('close', this.onClose);
this.socket.addEventListener('message', this.onMessage);

View File

@ -125,7 +125,7 @@ export default Vue.extend({
}
if (this.type == 'user') {
const cacheKey = 'autocomplete:user:' + this.q;
const cacheKey = `autocomplete:user:${this.q}`;
const cache = sessionStorage.getItem(cacheKey);
if (cache) {
const users = JSON.parse(cache);
@ -148,7 +148,7 @@ export default Vue.extend({
this.hashtags = JSON.parse(localStorage.getItem('hashtags') || '[]');
this.fetching = false;
} else {
const cacheKey = 'autocomplete:hashtag:' + this.q;
const cacheKey = `autocomplete:hashtag:${this.q}`;
const cache = sessionStorage.getItem(cacheKey);
if (cache) {
const hashtags = JSON.parse(cache);

View File

@ -57,7 +57,7 @@ export default Vue.extend({
}
// Check internet connection
fetch('https://google.com?rand=' + Math.random(), {
fetch(`https://google.com?rand=${Math.random()}`, {
mode: 'no-cors'
}).then(() => {
this.internet = true;

View File

@ -18,11 +18,11 @@
</div>
<div class="board">
<div class="labels-x" v-if="this.$store.state.settings.reversiBoardLabels">
<div class="labels-x" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
<span v-for="i in game.settings.map[0].length">{{ String.fromCharCode(64 + i) }}</span>
</div>
<div class="flex">
<div class="labels-y" v-if="this.$store.state.settings.reversiBoardLabels">
<div class="labels-y" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
<div v-for="i in game.settings.map.length">{{ i }}</div>
</div>
<div class="cells" :style="cellsStyle">
@ -30,15 +30,15 @@
: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" alt="">
<img v-if="stone === false" :src="whiteUser.avatarUrl" alt="">
<img v-if="stone === true" :src="blackUser.avatarUrl" alt="black" :class="{ contrast: $store.state.settings.games.reversi.useContrastStones }">
<img v-if="stone === false" :src="whiteUser.avatarUrl" alt="white" :class="{ contrast: $store.state.settings.games.reversi.useContrastStones }">
</div>
</div>
<div class="labels-y" v-if="this.$store.state.settings.reversiBoardLabels">
<div class="labels-y" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
<div v-for="i in game.settings.map.length">{{ i }}</div>
</div>
</div>
<div class="labels-x" v-if="this.$store.state.settings.reversiBoardLabels">
<div class="labels-x" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
<span v-for="i in game.settings.map[0].length">{{ String.fromCharCode(64 + i) }}</span>
</div>
</div>
@ -159,11 +159,9 @@ export default Vue.extend({
canPutEverywhere: this.game.settings.canPutEverywhere,
loopedBoard: this.game.settings.loopedBoard
});
this.logs.forEach((log, i) => {
if (i < v) {
this.o.put(log.color, log.pos);
}
});
for (const log of this.logs.slice(0, v)) {
this.o.put(log.color, log.pos);
}
this.$forceUpdate();
}
},
@ -421,6 +419,13 @@ root(isDark)
width 100%
height 100%
&.contrast
&[alt="black"]
filter brightness(.5)
&[alt="white"]
filter brightness(2)
> .graph
display grid
grid-template-columns repeat(61, 1fr)

View File

@ -32,6 +32,7 @@
<mk-avatar class="avatar" :user="g.user2"/>
<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>
<mk-time :time="g.createdAt" />
</a>
</section>
<section v-if="games.length > 0">
@ -41,6 +42,7 @@
<mk-avatar class="avatar" :user="g.user2"/>
<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>
<mk-time :time="g.createdAt" />
</a>
</section>
</div>

View File

@ -1,5 +1,5 @@
<template>
<div class="mk-menu">
<div class="onchrpzrvnoruiaenfcqvccjfuupzzwv">
<div class="backdrop" ref="backdrop" @click="close"></div>
<div class="popover" :class="{ hukidasi }" ref="popover">
<template v-for="item in items">
@ -119,9 +119,10 @@ export default Vue.extend({
<style lang="stylus" scoped>
@import '~const.styl'
$border-color = rgba(27, 31, 35, 0.15)
root(isDark)
$bg-color = isDark ? #2c303c : #fff
$border-color = rgba(27, 31, 35, 0.15)
.mk-menu
position initial
> .backdrop
@ -131,14 +132,14 @@ $border-color = rgba(27, 31, 35, 0.15)
z-index 10000
width 100%
height 100%
background rgba(#000, 0.1)
background rgba(#000, isDark ? 0.5 : 0.1)
opacity 0
> .popover
position absolute
z-index 10001
padding 8px 0
background #fff
background $bg-color
border 1px solid $border-color
border-radius 4px
box-shadow 0 3px 12px rgba(27, 31, 35, 0.15)
@ -172,12 +173,13 @@ $border-color = rgba(27, 31, 35, 0.15)
border-top solid $balloon-size transparent
border-left solid $balloon-size transparent
border-right solid $balloon-size transparent
border-bottom solid $balloon-size #fff
border-bottom solid $balloon-size $bg-color
> button
display block
padding 8px 16px
width 100%
color isDark ? #d6dce2 : #111
&:hover
color $theme-color-foreground
@ -191,6 +193,12 @@ $border-color = rgba(27, 31, 35, 0.15)
> div
margin 8px 0
height 1px
background #eee
background isDark ? #1c2023 : #eee
.onchrpzrvnoruiaenfcqvccjfuupzzwv[data-darkmode]
root(true)
.onchrpzrvnoruiaenfcqvccjfuupzzwv:not([data-darkmode])
root(false)
</style>

View File

@ -3,7 +3,7 @@
@dragover.prevent.stop="onDragover"
@drop.prevent.stop="onDrop"
>
<div class="stream">
<div class="body">
<p class="init" v-if="init">%fa:spinner .spin%%i18n:common.loading%</p>
<p class="empty" v-if="!init && messages.length == 0">%fa:info-circle%%i18n:@empty%</p>
<p class="no-history" v-if="!init && messages.length > 0 && !existMoreMessages">%fa:flag%%i18n:@no-history%</p>
@ -77,6 +77,12 @@ export default Vue.extend({
this.connection.on('message', this.onMessage);
this.connection.on('read', this.onRead);
if (this.isNaked) {
window.addEventListener('scroll', this.onScroll, { passive: true });
} else {
this.$el.addEventListener('scroll', this.onScroll, { passive: true });
}
document.addEventListener('visibilitychange', this.onVisibilitychange);
this.fetchMessages().then(() => {
@ -90,6 +96,12 @@ export default Vue.extend({
this.connection.off('read', this.onRead);
this.connection.close();
if (this.isNaked) {
window.removeEventListener('scroll', this.onScroll);
} else {
this.$el.removeEventListener('scroll', this.onScroll);
}
document.removeEventListener('visibilitychange', this.onVisibilitychange);
},
@ -226,6 +238,14 @@ export default Vue.extend({
}, 4000);
},
onScroll() {
const el = this.isNaked ? window.document.documentElement : this.$el;
const current = el.scrollTop + el.clientHeight;
if (current > el.scrollHeight - 1) {
this.showIndicator = false;
}
},
onVisibilitychange() {
if (document.hidden) return;
this.messages.forEach(message => {
@ -251,7 +271,7 @@ root(isDark)
height 100%
background isDark ? #191b22 : #fff
> .stream
> .body
width 100%
max-width 600px
margin 0 auto

View File

@ -205,17 +205,8 @@ export default Vue.component('misskey-flavored-markdown', {
}
}));
const _els = [];
els.forEach((el, i) => {
if (el.tag == 'br') {
if (!['div', 'pre'].includes(els[i - 1].tag)) {
_els.push(el);
}
} else {
_els.push(el);
}
});
// el.tag === 'br' のとき i !== 0 が保証されるため、短絡評価により els[i - 1] は配列外参照しない
const _els = els.filter((el, i) => !(el.tag === 'br' && ['div', 'pre'].includes(els[i - 1].tag)));
return createElement('span', _els);
}
});

View File

@ -6,7 +6,7 @@
<i></i>
<a :href="feedbackUrl" target="_blank">%i18n:@feedback%</a>
<i></i>
<a :href="devUrl">%i18n:@develop%</a>
<a href="/dev">%i18n:@develop%</a>
<i></i>
<a href="https://twitter.com/misskey_xyz" target="_blank">Follow us on %fa:B twitter%</a>
</span>
@ -14,18 +14,21 @@
<script lang="ts">
import Vue from 'vue';
import { docsUrl, statsUrl, statusUrl, devUrl, repositoryUrl, feedbackUrl, lang } from '../../../config';
import { lang } from '../../../config';
export default Vue.extend({
data() {
return {
aboutUrl: `${docsUrl}/${lang}/about`,
statsUrl,
statusUrl,
devUrl,
repositoryUrl: repositoryUrl || `https://github.com/syuilo/misskey`,
feedbackUrl: feedbackUrl || `https://github.com/syuilo/misskey/issues/new`
aboutUrl: `/docs/${lang}/about`,
repositoryUrl: 'https://github.com/syuilo/misskey',
feedbackUrl: 'https://github.com/syuilo/misskey/issues/new'
}
},
created() {
(this as any).os.getMeta().then(meta => {
if (meta.maintainer.repository_url) this.repositoryUrl = meta.maintainer.repository_url;
if (meta.maintainer.feedback_url) this.feedbackUrl = meta.maintainer.feedback_url;
});
}
});
</script>

View File

@ -6,17 +6,27 @@
<script lang="ts">
import Vue from 'vue';
import { url } from '../../../config';
import copyToClipboard from '../../../common/scripts/copy-to-clipboard';
export default Vue.extend({
props: ['note', 'source', 'compact'],
computed: {
items() {
const items = [];
items.push({
const items = [{
icon: '%fa:info-circle%',
text: '%i18n:@detail%',
action: this.detail
}, {
icon: '%fa:link%',
text: '%i18n:@copy-link%',
action: this.copyLink
}, null, {
icon: '%fa:star%',
text: '%i18n:@favorite%',
action: this.favorite
});
}];
if (this.note.userId == this.$store.state.i.id) {
items.push({
icon: '%fa:thumbtack%',
@ -42,6 +52,14 @@ export default Vue.extend({
}
},
methods: {
detail() {
this.$router.push(`/notes/${ this.note.id }`);
},
copyLink() {
copyToClipboard(`${url}/notes/${ this.note.id }`);
},
pin() {
(this as any).api('i/pin', {
noteId: this.note.id

View File

@ -12,13 +12,13 @@
</ui-input>
<ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required/>
<ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button>
<p style="margin: 8px 0;" v-if="twitterIntegration">%i18n:@or%<a :href="`${apiUrl}/signin/twitter`">%i18n:@signin-with-twitter%</a></p>
<p style="margin: 8px 0;">%i18n:@or% <a :href="`${apiUrl}/signin/twitter`">%i18n:@signin-with-twitter%</a></p>
</form>
</template>
<script lang="ts">
import Vue from 'vue';
import { apiUrl, host, twitterIntegration } from '../../../config';
import { apiUrl, host } from '../../../config';
export default Vue.extend({
props: {
@ -36,8 +36,7 @@ export default Vue.extend({
password: '',
token: '',
apiUrl,
host,
twitterIntegration
host
};
},
methods: {
@ -60,7 +59,7 @@ export default Vue.extend({
}).then(() => {
location.reload();
}).catch(() => {
alert('something happened');
alert('%i18n:@login-failed%');
this.signing = false;
});
}
@ -79,7 +78,7 @@ export default Vue.extend({
cursor wait !important
> .avatar
margin 16px auto 0 auto
margin 0 auto 0 auto
width 64px
height 64px
background #ddd

View File

@ -1,43 +1,50 @@
<template>
<form class="mk-signup" @submit.prevent="onSubmit" :autocomplete="Math.random()">
<ui-input v-model="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :autocomplete="Math.random()" spellcheck="false" required @input="onChangeUsername">
<span>%i18n:@username%</span>
<span slot="prefix">@</span>
<span slot="suffix">@{{ host }}</span>
<p slot="text" v-if="usernameState == 'wait'" style="color:#999">%fa:spinner .pulse .fw% %i18n:@checking%</p>
<p slot="text" v-if="usernameState == 'ok'" style="color:#3CB7B5">%fa:check .fw% %i18n:@available%</p>
<p slot="text" v-if="usernameState == 'unavailable'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@unavailable%</p>
<p slot="text" v-if="usernameState == 'error'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@error%</p>
<p slot="text" v-if="usernameState == 'invalid-format'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@invalid-format%</p>
<p slot="text" v-if="usernameState == 'min-range'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@too-short%</p>
<p slot="text" v-if="usernameState == 'max-range'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@too-long%</p>
</ui-input>
<ui-input v-model="password" type="password" :autocomplete="Math.random()" required @input="onChangePassword" :with-password-meter="true">
<span>%i18n:@password%</span>
<span slot="prefix">%fa:lock%</span>
<div slot="text">
<p slot="text" v-if="passwordStrength == 'low'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@weak-password%</p>
<p slot="text" v-if="passwordStrength == 'medium'" style="color:#3CB7B5">%fa:check .fw% %i18n:@normal-password%</p>
<p slot="text" v-if="passwordStrength == 'high'" style="color:#3CB7B5">%fa:check .fw% %i18n:@strong-password%</p>
</div>
</ui-input>
<ui-input v-model="retypedPassword" type="password" :autocomplete="Math.random()" required @input="onChangePasswordRetype">
<span>%i18n:@password% (%i18n:@retype%)</span>
<span slot="prefix">%fa:lock%</span>
<div slot="text">
<p slot="text" v-if="passwordRetypeState == 'match'" style="color:#3CB7B5">%fa:check .fw% %i18n:@password-matched%</p>
<p slot="text" v-if="passwordRetypeState == 'not-match'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@password-not-matched%</p>
</div>
</ui-input>
<div v-if="recaptchaSitekey != null" class="g-recaptcha" :data-sitekey="recaptchaSitekey" style="margin: 16px 0;"></div>
<ui-button type="submit">%i18n:@create%</ui-button>
<template v-if="meta">
<ui-input v-if="meta.disableRegistration" v-model="invitationCode" type="text" :autocomplete="Math.random()" spellcheck="false" required>
<span>%i18n:@invitation-code%</span>
<span slot="prefix">%fa:id-card-alt%</span>
<p slot="text" v-html="'%i18n:@invitation-info%'.replace('{}', meta.maintainer.url)"></p>
</ui-input>
<ui-input v-model="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :autocomplete="Math.random()" spellcheck="false" required @input="onChangeUsername">
<span>%i18n:@username%</span>
<span slot="prefix">@</span>
<span slot="suffix">@{{ host }}</span>
<p slot="text" v-if="usernameState == 'wait'" style="color:#999">%fa:spinner .pulse .fw% %i18n:@checking%</p>
<p slot="text" v-if="usernameState == 'ok'" style="color:#3CB7B5">%fa:check .fw% %i18n:@available%</p>
<p slot="text" v-if="usernameState == 'unavailable'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@unavailable%</p>
<p slot="text" v-if="usernameState == 'error'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@error%</p>
<p slot="text" v-if="usernameState == 'invalid-format'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@invalid-format%</p>
<p slot="text" v-if="usernameState == 'min-range'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@too-short%</p>
<p slot="text" v-if="usernameState == 'max-range'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@too-long%</p>
</ui-input>
<ui-input v-model="password" type="password" :autocomplete="Math.random()" required @input="onChangePassword" :with-password-meter="true">
<span>%i18n:@password%</span>
<span slot="prefix">%fa:lock%</span>
<div slot="text">
<p slot="text" v-if="passwordStrength == 'low'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@weak-password%</p>
<p slot="text" v-if="passwordStrength == 'medium'" style="color:#3CB7B5">%fa:check .fw% %i18n:@normal-password%</p>
<p slot="text" v-if="passwordStrength == 'high'" style="color:#3CB7B5">%fa:check .fw% %i18n:@strong-password%</p>
</div>
</ui-input>
<ui-input v-model="retypedPassword" type="password" :autocomplete="Math.random()" required @input="onChangePasswordRetype">
<span>%i18n:@password% (%i18n:@retype%)</span>
<span slot="prefix">%fa:lock%</span>
<div slot="text">
<p slot="text" v-if="passwordRetypeState == 'match'" style="color:#3CB7B5">%fa:check .fw% %i18n:@password-matched%</p>
<p slot="text" v-if="passwordRetypeState == 'not-match'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@password-not-matched%</p>
</div>
</ui-input>
<div v-if="meta.recaptchaSitekey != null" class="g-recaptcha" :data-sitekey="meta.recaptchaSitekey" style="margin: 16px 0;"></div>
<ui-button type="submit">%i18n:@create%</ui-button>
</template>
</form>
</template>
<script lang="ts">
import Vue from 'vue';
const getPasswordStrength = require('syuilo-password-strength');
import { host, url, recaptchaSitekey } from '../../../config';
import { host, url } from '../../../config';
export default Vue.extend({
data() {
@ -46,11 +53,12 @@ export default Vue.extend({
username: '',
password: '',
retypedPassword: '',
invitationCode: '',
url,
recaptchaSitekey,
usernameState: null,
passwordStrength: '',
passwordRetypeState: null
passwordRetypeState: null,
meta: null
}
},
computed: {
@ -61,6 +69,17 @@ export default Vue.extend({
this.usernameState != 'max-range');
}
},
created() {
(this as any).os.getMeta().then(meta => {
this.meta = meta;
});
},
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);
},
methods: {
onChangeUsername() {
if (this.username == '') {
@ -110,7 +129,8 @@ export default Vue.extend({
(this as any).api('signup', {
username: this.username,
password: this.password,
'g-recaptcha-response': recaptchaSitekey != null ? (window as any).grecaptcha.getResponse() : null
invitationCode: this.invitationCode,
'g-recaptcha-response': this.meta.recaptchaSitekey != null ? (window as any).grecaptcha.getResponse() : null
}).then(() => {
(this as any).api('signin', {
username: this.username,
@ -121,19 +141,11 @@ export default Vue.extend({
}).catch(() => {
alert('%i18n:@some-error%');
if (recaptchaSitekey != null) {
if (this.meta.recaptchaSitekey != null) {
(window as any).grecaptcha.reset();
}
});
}
},
mounted() {
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>

View File

@ -1,12 +1,14 @@
<template>
<iframe v-if="player" :src="player" heigth="250" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen />
<div v-if="player.url" class="player" :style="`padding: ${(player.height || 0) / (player.width || 1) * 100}% 0 0`">
<iframe :src="player.url" :width="player.width || '100%'" :heigth="player.height || 250" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen />
</div>
<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">
<a :class="{ mini }" :href="url" target="_blank" :title="url" v-if="!fetching">
<div class="thumbnail" v-if="thumbnail" :style="`background-image: url(${thumbnail})`"></div>
<article>
<header>
@ -26,18 +28,105 @@
import Vue from 'vue';
import { url as misskeyUrl } from '../../../config';
// THIS IS THE WHITELIST FOR THE EMBED PLAYER
const whiteList = [
'afreecatv.com',
'aparat.com',
'applemusic.com',
'amazon.com',
'awa.fm',
'bandcamp.com',
'bbc.co.uk',
'beatport.com',
'bilibili.com',
'boomstream.com',
'breakers.tv',
'cam4.com',
'cavelis.net',
'chaturbate.com',
'cnn.com',
'cybergame.tv',
'dailymotion.com',
'deezer.com',
'djlive.pl',
'e-onkyo.com',
'eventials.com',
'facebook.com',
'fc2.com',
'gameplank.tv',
'goodgame.ru',
'google.com',
'hardtunes.com',
'instagram.com',
'johnnylooch.com',
'kexp.org',
'lahzenegar.com',
'liveedu.tv',
'livetube.cc',
'livestream.com',
'meridix.com',
'mixcloud.com',
'mixer.com',
'mobcrush.com',
'mylive.in.th',
'myspace.com',
'netflix.com',
'newretrowave.com',
'nhk.or.jp',
'nicovideo.jp',
'nico.ms',
'noisetrade.com',
'nood.tv',
'npr.org',
'openrec.tv',
'pandora.com',
'pandora.tv',
'picarto.tv',
'pscp.tv',
'restream.io',
'reverbnation.com',
'sermonaudio.com',
'smashcast.tv',
'songkick.com',
'soundcloud.com',
'spinninrecords.com',
'spotify.com',
'stitcher.com',
'stream.me',
'switchboard.live',
'tunein.com',
'twitcasting.tv',
'twitch.tv',
'twitter.com',
'vaughnlive.tv',
'veoh.com',
'vimeo.com',
'watchpeoplecode.com',
'web.tv',
'youtube.com',
'youtu.be'
];
export default Vue.extend({
props: {
url: {
type: String,
require: true
},
detail: {
type: Boolean,
required: false,
default: false
},
mini: {
type: Boolean,
required: false,
default: false
}
},
data() {
return {
fetching: true,
@ -46,11 +135,16 @@ export default Vue.extend({
thumbnail: null,
icon: null,
sitename: null,
player: null,
player: {
url: null,
width: null,
height: null
},
tweetUrl: null,
misskeyUrl
};
},
created() {
const url = new URL(this.url);
@ -75,104 +169,37 @@ export default Vue.extend({
}
return;
}
fetch('/url?url=' + encodeURIComponent(this.url)).then(res => {
fetch(`/url?url=${encodeURIComponent(this.url)}`).then(res => {
res.json().then(info => {
if (info.url != null) {
this.title = info.title;
this.description = info.description;
this.thumbnail = info.thumbnail;
this.icon = info.icon;
this.sitename = info.sitename;
this.fetching = false;
if ([ // THIS IS THE WHITELIST FOR THE EMBED PLAYER
'afreecatv.com',
'aparat.com',
'applemusic.com',
'amazon.com',
'awa.fm',
'bandcamp.com',
'bbc.co.uk',
'beatport.com',
'bilibili.com',
'boomstream.com',
'breakers.tv',
'cam4.com',
'cavelis.net',
'chaturbate.com',
'cnn.com',
'cybergame.tv',
'dailymotion.com',
'deezer.com',
'djlive.pl',
'e-onkyo.com',
'eventials.com',
'facebook.com',
'fc2.com',
'gameplank.tv',
'goodgame.ru',
'google.com',
'hardtunes.com',
'instagram.com',
'johnnylooch.com',
'kexp.org',
'lahzenegar.com',
'liveedu.tv',
'livetube.cc',
'livestream.com',
'meridix.com',
'mixcloud.com',
'mixer.com',
'mobcrush.com',
'mylive.in.th',
'myspace.com',
'netflix.com',
'newretrowave.com',
'nhk.or.jp',
'nicovideo.jp',
'nico.ms',
'noisetrade.com',
'nood.tv',
'npr.org',
'openrec.tv',
'pandora.com',
'pandora.tv',
'picarto.tv',
'pscp.tv',
'restream.io',
'reverbnation.com',
'sermonaudio.com',
'smashcast.tv',
'songkick.com',
'soundcloud.com',
'spinninrecords.com',
'spotify.com',
'stitcher.com',
'stream.me',
'switchboard.live',
'tunein.com',
'twitcasting.tv',
'twitch.tv',
'twitter.com',
'vaughnlive.tv',
'veoh.com',
'vimeo.com',
'watchpeoplecode.com',
'web.tv',
'youtube.com',
'youtu.be'
].some(x => x == url.hostname || url.hostname.endsWith(`.${x}`)))
this.player = info.player;
} // info.url
}) // json
}); // fetch
} // created
if (info.url == null) return;
this.title = info.title;
this.description = info.description;
this.thumbnail = info.thumbnail;
this.icon = info.icon;
this.sitename = info.sitename;
this.fetching = false;
if (whiteList.some(x => x == url.hostname || url.hostname.endsWith(`.${x}`))) {
this.player = info.player;
}
})
});
}
});
</script>
<style lang="stylus" scoped>
iframe
.player
position relative
width 100%
> iframe
height 100%
left 0
position absolute
top 0
width 100%
root(isDark)
> a
display block
@ -272,6 +299,29 @@ root(isDark)
width 12px
height 12px
&.mini
font-size 10px
> .thumbnail
position relative
width 100%
height 60px
> article
left 0
width 100%
padding 8px
> header
margin-bottom 4px
> footer
margin-top 4px
> img
width 12px
height 12px
.mk-url-preview[data-darkmode]
root(true)

View File

@ -12,6 +12,7 @@
<script lang="ts">
import Vue from 'vue';
import { toUnicode as decodePunycode } from 'punycode';
export default Vue.extend({
props: ['url', 'target'],
data() {
@ -27,11 +28,11 @@ export default Vue.extend({
created() {
const url = new URL(this.url);
this.schema = url.protocol;
this.hostname = url.hostname;
this.hostname = decodePunycode(url.hostname);
this.port = url.port;
this.pathname = url.pathname;
this.query = url.search;
this.hash = url.hash;
this.pathname = decodeURIComponent(url.pathname);
this.query = decodeURIComponent(url.search);
this.hash = decodeURIComponent(url.hash);
}
});
</script>

View File

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

View File

@ -191,7 +191,7 @@ class Autocomplete {
const acct = renderAcct(value);
// 挿入
this.text = trimmedBefore + '@' + acct + ' ' + after;
this.text = `${trimmedBefore}@${acct} ${after}`;
// キャレットを戻す
this.vm.$nextTick(() => {
@ -207,7 +207,7 @@ class Autocomplete {
const after = source.substr(caret);
// 挿入
this.text = trimmedBefore + '#' + value + ' ' + after;
this.text = `${trimmedBefore}#${value} ${after}`;
// キャレットを戻す
this.vm.$nextTick(() => {

View File

@ -1,8 +1,10 @@
import Vue from 'vue';
Vue.filter('bytes', (v, digits = 0) => {
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
if (v == 0) return '0Byte';
const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
if (v == 0) return '0';
const isMinus = v < 0;
if (isMinus) v = -v;
const i = Math.floor(Math.log(v) / Math.log(1024));
return (v / Math.pow(1024, i)).toFixed(digits).replace(/\.0+$/, '') + sizes[i];
return (isMinus ? '-' : '') + (v / Math.pow(1024, i)).toFixed(digits).replace(/\.0+$/, '') + sizes[i];
});

View File

@ -1,5 +1,5 @@
import Vue from 'vue';
Vue.filter('notePage', note => {
return '/notes/' + note.id;
return `/notes/${note.id}`;
});

View File

@ -11,5 +11,5 @@ Vue.filter('userName', user => {
});
Vue.filter('userPage', (user, path?) => {
return '/@' + Vue.filter('acct')(user) + (path ? '/' + path : '');
return `/@${Vue.filter('acct')(user)}${(path ? `/${path}` : '')}`;
});

View File

@ -1,6 +1,6 @@
<template>
<div class="syxhndwprovvuqhmyvveewmbqayniwkv" v-if="!fetching" :data-darkmode="$store.state.device.darkmode">
<div class="signed-in-as" v-html="'%i18n:@signed-in-as%'.replace('{}', '<b>' + myName + '</b>')"></div>
<div class="signed-in-as" v-html="'%i18n:@signed-in-as%'.replace('{}', `<b>${myName}`)"></div>
<main>
<div class="banner" :style="bannerStyle"></div>

View File

@ -42,15 +42,7 @@ export default define({
},
mounted() {
(this as any).os.getMeta().then(meta => {
let broadcasts = [];
if (meta.broadcasts) {
meta.broadcasts.forEach(broadcast => {
if (broadcast[lang]) {
broadcasts.push(broadcast[lang]);
}
});
}
this.broadcasts = broadcasts;
this.broadcasts = meta.broadcasts;
this.fetching = false;
});
},

View File

@ -2,9 +2,9 @@
<div class="mkw-donation" :data-mobile="platform == 'mobile'">
<article>
<h1>%fa:heart%%i18n:@title%</h1>
<p>
<p v-if="meta">
{{ '%i18n:@text%'.substr(0, '%i18n:@text%'.indexOf('{')) }}
<a href="https://syuilo.com">@syuilo</a>
<a :href="meta.maintainer.url">{{ meta.maintainer.name }}</a>
{{ '%i18n:@text%'.substr('%i18n:@text%'.indexOf('}') + 1) }}
</p>
</article>
@ -15,6 +15,17 @@
import define from '../../../common/define-widget';
export default define({
name: 'donation'
}).extend({
data() {
return {
meta: null
};
},
created() {
(this as any).os.getMeta().then(meta => {
this.meta = meta;
});
}
});
</script>

View File

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

View File

@ -1,51 +1,22 @@
declare const _HOST_: string;
declare const _HOSTNAME_: string;
declare const _URL_: string;
declare const _NAME_: string;
declare const _DESCRIPTION_: string;
declare const _API_URL_: string;
declare const _WS_URL_: string;
declare const _DOCS_URL_: string;
declare const _STATS_URL_: string;
declare const _STATUS_URL_: string;
declare const _DEV_URL_: string;
declare const _REPOSITORY_URL_: string;
declare const _FEEDBACK_URL_: string;
declare const _LANG_: string;
declare const _LANGS_: string;
declare const _RECAPTCHA_SITEKEY_: string;
declare const _SW_PUBLICKEY_: string;
declare const _THEME_COLOR_: string;
declare const _COPYRIGHT_: string;
declare const _VERSION_: string;
declare const _CODENAME_: string;
declare const _LICENSE_: string;
declare const _GOOGLE_MAPS_API_KEY_: string;
declare const _WELCOME_BG_URL_: string;
declare const _TWITTER_INTEGRATION_: boolean;
declare const _ENV_: string;
export const host = _HOST_;
export const hostname = _HOSTNAME_;
export const url = _URL_;
export const name = _NAME_;
export const description = _DESCRIPTION_;
export const apiUrl = _API_URL_;
export const wsUrl = _WS_URL_;
export const docsUrl = _DOCS_URL_;
export const statsUrl = _STATS_URL_;
export const statusUrl = _STATUS_URL_;
export const devUrl = _DEV_URL_;
export const repositoryUrl = _REPOSITORY_URL_;
export const feedbackUrl = _FEEDBACK_URL_;
const address = new URL(location.href);
export const host = address.host;
export const hostname = address.hostname;
export const url = address.origin;
export const apiUrl = url + '/api';
export const wsUrl = url.replace('http://', 'ws://').replace('https://', 'wss://');
export const lang = _LANG_;
export const langs = _LANGS_;
export const recaptchaSitekey = _RECAPTCHA_SITEKEY_;
export const swPublickey = _SW_PUBLICKEY_;
export const themeColor = _THEME_COLOR_;
export const copyright = _COPYRIGHT_;
export const version = _VERSION_;
export const codename = _CODENAME_;
export const license = _LICENSE_;
export const googleMapsApiKey = _GOOGLE_MAPS_API_KEY_;
export const welcomeBgUrl = _WELCOME_BG_URL_;
export const twitterIntegration = _TWITTER_INTEGRATION_;
export const env = _ENV_;

View File

@ -3,8 +3,21 @@ import { apiUrl } from '../../config';
import CropWindow from '../views/components/crop-window.vue';
import ProgressDialog from '../views/components/progress-dialog.vue';
export default (os: OS) => (cb, file = null) => {
const fileSelected = file => {
export default (os: OS) => {
const cropImage = file => new Promise((resolve, reject) => {
const regex = RegExp('\.(jpg|jpeg|png|gif|webp|bmp|tiff)$');
if (!regex.test(file.name) ) {
os.apis.dialog({
title: '%fa:info-circle% %i18n:desktop.invalid-filetype%',
text: null,
actions: [{
text: '%i18n:common.got-it%'
}]
});
return reject('invalid-filetype');
}
const w = os.new(CropWindow, {
image: file,
@ -19,27 +32,29 @@ export default (os: OS) => (cb, file = null) => {
os.api('drive/folders/find', {
name: '%i18n:desktop.avatar%'
}).then(iconFolder => {
if (iconFolder.length === 0) {
}).then(avatarFolder => {
if (avatarFolder.length === 0) {
os.api('drive/folders/create', {
name: '%i18n:desktop.avatar%'
}).then(iconFolder => {
upload(data, iconFolder);
resolve(upload(data, iconFolder));
});
} else {
upload(data, iconFolder[0]);
resolve(upload(data, avatarFolder[0]));
}
});
});
w.$once('skipped', () => {
set(file);
resolve(file);
});
document.body.appendChild(w.$el);
};
w.$once('cancelled', reject);
const upload = (data, folder) => {
document.body.appendChild(w.$el);
});
const upload = (data, folder) => new Promise((resolve, reject) => {
const dialog = os.new(ProgressDialog, {
title: '%i18n:desktop.uploading-avatar%'
});
@ -52,18 +67,19 @@ export default (os: OS) => (cb, file = null) => {
xhr.onload = e => {
const file = JSON.parse((e.target as any).response);
(dialog as any).close();
set(file);
resolve(file);
};
xhr.onerror = reject;
xhr.upload.onprogress = e => {
if (e.lengthComputable) (dialog as any).update(e.loaded, e.total);
};
xhr.send(data);
};
});
const set = file => {
os.api('i/update', {
const setAvatar = file => {
return os.api('i/update', {
avatarId: file.id
}).then(i => {
os.store.commit('updateIKeyValue', {
@ -83,18 +99,21 @@ export default (os: OS) => (cb, file = null) => {
}]
});
if (cb) cb(i);
return i;
});
};
if (file) {
fileSelected(file);
} else {
os.apis.chooseDriveFile({
multiple: false,
title: '%fa:image% %i18n:desktop.choose-avatar%'
}).then(file => {
fileSelected(file);
});
}
return (file = null) => {
const selectedFile = file
? Promise.resolve(file)
: os.apis.chooseDriveFile({
multiple: false,
title: '%fa:image% %i18n:desktop.choose-avatar%'
});
return selectedFile
.then(cropImage)
.then(setAvatar)
.catch(err => err && console.warn(err));
};
};

View File

@ -6,6 +6,19 @@ import ProgressDialog from '../views/components/progress-dialog.vue';
export default (os: OS) => {
const cropImage = file => new Promise((resolve, reject) => {
const regex = RegExp('\.(jpg|jpeg|png|gif|webp|bmp|tiff)$');
if (!regex.test(file.name) ) {
os.apis.dialog({
title: '%fa:info-circle% %i18n:desktop.invalid-filetype%',
text: null,
actions: [{
text: '%i18n:common.got-it%'
}]
});
return reject('invalid-filetype');
}
const w = os.new(CropWindow, {
image: file,
title: '%i18n:desktop.banner-crop-title%',

View File

@ -25,6 +25,7 @@ import updateBanner from './api/update-banner';
import MkIndex from './views/pages/index.vue';
import MkDeck from './views/pages/deck/deck.vue';
import MkAdmin from './views/pages/admin/admin.vue';
import MkStats from './views/pages/stats/stats.vue';
import MkUser from './views/pages/user/user.vue';
import MkFavorites from './views/pages/favorites.vue';
import MkSelectDrive from './views/pages/selectdrive.vue';
@ -57,6 +58,7 @@ init(async (launch) => {
{ path: '/', name: 'index', component: MkIndex },
{ path: '/deck', name: 'deck', component: MkDeck },
{ path: '/admin', name: 'admin', component: MkAdmin },
{ path: '/stats', name: 'stats', component: MkStats },
{ path: '/i/customize-home', component: MkHomeCustomize },
{ path: '/i/favorites', component: MkFavorites },
{ path: '/i/messaging/:user', component: MkMessagingRoom },
@ -94,7 +96,7 @@ init(async (launch) => {
/**
* Init Notification
*/
if ('Notification' in window) {
if ('Notification' in window && os.store.getters.isSignedIn) {
// 許可を得ていなかったらリクエスト
if ((Notification as any).permission == 'default') {
await Notification.requestPermission();

View File

@ -0,0 +1,42 @@
import Vue from 'vue';
import { Line } from 'vue-chartjs';
import * as mergeOptions from 'merge-options';
export default Vue.extend({
extends: Line,
props: {
data: {
required: true
},
opts: {
required: false
}
},
watch: {
data() {
this.render();
}
},
mounted() {
this.render();
},
methods: {
render() {
this.renderChart(this.data, mergeOptions({
responsive: true,
maintainAspectRatio: false,
scales: {
xAxes: [{
type: 'time',
distribution: 'series'
}]
},
tooltips: {
intersect: false,
mode: 'x',
position: 'nearest'
}
}, this.opts || {}));
}
}
});

View File

@ -0,0 +1,587 @@
<template>
<div class="gkgckalzgidaygcxnugepioremxvxvpt">
<header>
<b>%i18n:@title%:</b>
<select v-model="chartType">
<optgroup label="%i18n:@users%">
<option value="users">%i18n:@charts.users%</option>
<option value="users-total">%i18n:@charts.users-total%</option>
</optgroup>
<optgroup label="%i18n:@notes%">
<option value="notes">%i18n:@charts.notes%</option>
<option value="local-notes">%i18n:@charts.local-notes%</option>
<option value="remote-notes">%i18n:@charts.remote-notes%</option>
<option value="notes-total">%i18n:@charts.notes-total%</option>
</optgroup>
<optgroup label="%i18n:@drive%">
<option value="drive-files">%i18n:@charts.drive-files%</option>
<option value="drive-files-total">%i18n:@charts.drive-files-total%</option>
<option value="drive">%i18n:@charts.drive%</option>
<option value="drive-total">%i18n:@charts.drive-total%</option>
</optgroup>
</select>
<div>
<span @click="span = 'day'" :class="{ active: span == 'day' }">%i18n:@per-day%</span> | <span @click="span = 'hour'" :class="{ active: span == 'hour' }">%i18n:@per-hour%</span>
</div>
</header>
<div>
<x-chart v-if="chart" :data="data[0]" :opts="data[1]"/>
</div>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import XChart from './charts.chart.ts';
const colors = {
local: 'rgb(246, 88, 79)',
remote: 'rgb(65, 221, 222)',
localPlus: 'rgb(52, 178, 118)',
remotePlus: 'rgb(158, 255, 209)',
localMinus: 'rgb(255, 97, 74)',
remoteMinus: 'rgb(255, 149, 134)'
};
const rgba = (color: string): string => {
return color.replace('rgb', 'rgba').replace(')', ', 0.1)');
};
export default Vue.extend({
components: {
XChart
},
data() {
return {
chart: null,
chartType: 'notes',
span: 'hour'
};
},
computed: {
data(): any {
if (this.chart == null) return null;
switch (this.chartType) {
case 'users': return this.usersChart(false);
case 'users-total': return this.usersChart(true);
case 'notes': return this.notesChart('combined');
case 'local-notes': return this.notesChart('local');
case 'remote-notes': return this.notesChart('remote');
case 'notes-total': return this.notesTotalChart();
case 'drive': return this.driveChart();
case 'drive-total': return this.driveTotalChart();
case 'drive-files': return this.driveFilesChart();
case 'drive-files-total': return this.driveFilesTotalChart();
}
},
stats(): any[] {
return (
this.span == 'day' ? this.chart.perDay :
this.span == 'hour' ? this.chart.perHour :
null
);
}
},
created() {
(this as any).api('chart', {
limit: 32
}).then(chart => {
this.chart = chart;
});
},
methods: {
notesChart(type: string): any {
const data = this.stats.slice().reverse().map(x => ({
date: new Date(x.date),
normal: type == 'local' ? x.notes.local.diffs.normal : type == 'remote' ? x.notes.remote.diffs.normal : x.notes.local.diffs.normal + x.notes.remote.diffs.normal,
reply: type == 'local' ? x.notes.local.diffs.reply : type == 'remote' ? x.notes.remote.diffs.reply : x.notes.local.diffs.reply + x.notes.remote.diffs.reply,
renote: type == 'local' ? x.notes.local.diffs.renote : type == 'remote' ? x.notes.remote.diffs.renote : x.notes.local.diffs.renote + x.notes.remote.diffs.renote,
all: type == 'local' ? (x.notes.local.inc + -x.notes.local.dec) : type == 'remote' ? (x.notes.remote.inc + -x.notes.remote.dec) : (x.notes.local.inc + -x.notes.local.dec) + (x.notes.remote.inc + -x.notes.remote.dec)
}));
return [{
datasets: [{
label: 'All',
fill: false,
borderColor: '#555',
borderWidth: 2,
borderDash: [4, 4],
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.all }))
}, {
label: 'Renotes',
fill: true,
backgroundColor: 'rgba(161, 222, 65, 0.1)',
borderColor: '#a1de41',
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.renote }))
}, {
label: 'Replies',
fill: true,
backgroundColor: 'rgba(247, 121, 108, 0.1)',
borderColor: '#f7796c',
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.reply }))
}, {
label: 'Normal',
fill: true,
backgroundColor: 'rgba(65, 221, 222, 0.1)',
borderColor: '#41ddde',
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.normal }))
}]
}, {
scales: {
yAxes: [{
ticks: {
callback: value => {
return Vue.filter('number')(value);
}
}
}]
},
tooltips: {
callbacks: {
label: (tooltipItem, data) => {
const label = data.datasets[tooltipItem.datasetIndex].label || '';
return `${label}: ${Vue.filter('number')(tooltipItem.yLabel)}`;
}
}
}
}];
},
notesTotalChart(): any {
const data = this.stats.slice().reverse().map(x => ({
date: new Date(x.date),
localCount: x.notes.local.total,
remoteCount: x.notes.remote.total
}));
return [{
datasets: [{
label: 'Combined',
fill: false,
borderColor: '#555',
borderWidth: 2,
borderDash: [4, 4],
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.remoteCount + x.localCount }))
}, {
label: 'Local',
fill: true,
backgroundColor: rgba(colors.local),
borderColor: colors.local,
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.localCount }))
}, {
label: 'Remote',
fill: true,
backgroundColor: rgba(colors.remote),
borderColor: colors.remote,
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.remoteCount }))
}]
}, {
scales: {
yAxes: [{
ticks: {
callback: value => {
return Vue.filter('number')(value);
}
}
}]
},
tooltips: {
callbacks: {
label: (tooltipItem, data) => {
const label = data.datasets[tooltipItem.datasetIndex].label || '';
return `${label}: ${Vue.filter('number')(tooltipItem.yLabel)}`;
}
}
}
}];
},
usersChart(total: boolean): any {
const data = this.stats.slice().reverse().map(x => ({
date: new Date(x.date),
localCount: total ? x.users.local.total : (x.users.local.inc + -x.users.local.dec),
remoteCount: total ? x.users.remote.total : (x.users.remote.inc + -x.users.remote.dec)
}));
return [{
datasets: [{
label: 'Combined',
fill: false,
borderColor: '#555',
borderWidth: 2,
borderDash: [4, 4],
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.remoteCount + x.localCount }))
}, {
label: 'Local',
fill: true,
backgroundColor: rgba(colors.local),
borderColor: colors.local,
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.localCount }))
}, {
label: 'Remote',
fill: true,
backgroundColor: rgba(colors.remote),
borderColor: colors.remote,
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.remoteCount }))
}]
}, {
scales: {
yAxes: [{
ticks: {
callback: value => {
return Vue.filter('number')(value);
}
}
}]
},
tooltips: {
callbacks: {
label: (tooltipItem, data) => {
const label = data.datasets[tooltipItem.datasetIndex].label || '';
return `${label}: ${Vue.filter('number')(tooltipItem.yLabel)}`;
}
}
}
}];
},
driveChart(): any {
const data = this.stats.slice().reverse().map(x => ({
date: new Date(x.date),
localInc: x.drive.local.incSize,
localDec: -x.drive.local.decSize,
remoteInc: x.drive.remote.incSize,
remoteDec: -x.drive.remote.decSize,
}));
return [{
datasets: [{
label: 'All',
fill: false,
borderColor: '#555',
borderWidth: 2,
borderDash: [4, 4],
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.localInc + x.localDec + x.remoteInc + x.remoteDec }))
}, {
label: 'Local +',
fill: true,
backgroundColor: rgba(colors.localPlus),
borderColor: colors.localPlus,
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.localInc }))
}, {
label: 'Local -',
fill: true,
backgroundColor: rgba(colors.localMinus),
borderColor: colors.localMinus,
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.localDec }))
}, {
label: 'Remote +',
fill: true,
backgroundColor: rgba(colors.remotePlus),
borderColor: colors.remotePlus,
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.remoteInc }))
}, {
label: 'Remote -',
fill: true,
backgroundColor: rgba(colors.remoteMinus),
borderColor: colors.remoteMinus,
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.remoteDec }))
}]
}, {
scales: {
yAxes: [{
ticks: {
callback: value => {
return Vue.filter('bytes')(value, 1);
}
}
}]
},
tooltips: {
callbacks: {
label: (tooltipItem, data) => {
const label = data.datasets[tooltipItem.datasetIndex].label || '';
return `${label}: ${Vue.filter('bytes')(tooltipItem.yLabel, 1)}`;
}
}
}
}];
},
driveTotalChart(): any {
const data = this.stats.slice().reverse().map(x => ({
date: new Date(x.date),
localSize: x.drive.local.totalSize,
remoteSize: x.drive.remote.totalSize
}));
return [{
datasets: [{
label: 'Combined',
fill: false,
borderColor: '#555',
borderWidth: 2,
borderDash: [4, 4],
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.remoteSize + x.localSize }))
}, {
label: 'Local',
fill: true,
backgroundColor: rgba(colors.local),
borderColor: colors.local,
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.localSize }))
}, {
label: 'Remote',
fill: true,
backgroundColor: rgba(colors.remote),
borderColor: colors.remote,
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.remoteSize }))
}]
}, {
scales: {
yAxes: [{
ticks: {
callback: value => {
return Vue.filter('bytes')(value, 1);
}
}
}]
},
tooltips: {
callbacks: {
label: (tooltipItem, data) => {
const label = data.datasets[tooltipItem.datasetIndex].label || '';
return `${label}: ${Vue.filter('bytes')(tooltipItem.yLabel, 1)}`;
}
}
}
}];
},
driveFilesChart(): any {
const data = this.stats.slice().reverse().map(x => ({
date: new Date(x.date),
localInc: x.drive.local.incCount,
localDec: -x.drive.local.decCount,
remoteInc: x.drive.remote.incCount,
remoteDec: -x.drive.remote.decCount
}));
return [{
datasets: [{
label: 'All',
fill: false,
borderColor: '#555',
borderWidth: 2,
borderDash: [4, 4],
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.localInc + x.localDec + x.remoteInc + x.remoteDec }))
}, {
label: 'Local +',
fill: true,
backgroundColor: rgba(colors.localPlus),
borderColor: colors.localPlus,
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.localInc }))
}, {
label: 'Local -',
fill: true,
backgroundColor: rgba(colors.localMinus),
borderColor: colors.localMinus,
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.localDec }))
}, {
label: 'Remote +',
fill: true,
backgroundColor: rgba(colors.remotePlus),
borderColor: colors.remotePlus,
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.remoteInc }))
}, {
label: 'Remote -',
fill: true,
backgroundColor: rgba(colors.remoteMinus),
borderColor: colors.remoteMinus,
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.remoteDec }))
}]
}, {
scales: {
yAxes: [{
ticks: {
callback: value => {
return Vue.filter('number')(value);
}
}
}]
},
tooltips: {
callbacks: {
label: (tooltipItem, data) => {
const label = data.datasets[tooltipItem.datasetIndex].label || '';
return `${label}: ${Vue.filter('number')(tooltipItem.yLabel)}`;
}
}
}
}];
},
driveFilesTotalChart(): any {
const data = this.stats.slice().reverse().map(x => ({
date: new Date(x.date),
localCount: x.drive.local.totalCount,
remoteCount: x.drive.remote.totalCount,
}));
return [{
datasets: [{
label: 'Combined',
fill: false,
borderColor: '#555',
borderWidth: 2,
borderDash: [4, 4],
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.localCount + x.remoteCount }))
}, {
label: 'Local',
fill: true,
backgroundColor: rgba(colors.local),
borderColor: colors.local,
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.localCount }))
}, {
label: 'Remote',
fill: true,
backgroundColor: rgba(colors.remote),
borderColor: colors.remote,
borderWidth: 2,
pointBackgroundColor: '#fff',
lineTension: 0,
data: data.map(x => ({ t: x.date, y: x.remoteCount }))
}]
}, {
scales: {
yAxes: [{
ticks: {
callback: value => {
return Vue.filter('number')(value);
}
}
}]
},
tooltips: {
callbacks: {
label: (tooltipItem, data) => {
const label = data.datasets[tooltipItem.datasetIndex].label || '';
return `${label}: ${Vue.filter('number')(tooltipItem.yLabel)}`;
}
}
}
}];
}
}
});
</script>
<style lang="stylus" scoped>
@import '~const.styl'
.gkgckalzgidaygcxnugepioremxvxvpt
padding 32px
background #fff
box-shadow 0 2px 8px rgba(#000, 0.1)
*
user-select none
> header
display flex
margin 0 0 1em 0
padding 0 0 8px 0
font-size 1em
color #555
border-bottom solid 1px #eee
> b
margin-right 8px
> *:last-child
margin-left auto
*
&:not(.active)
color $theme-color
cursor pointer
> div
> *
display block
height 320px
</style>

View File

@ -9,12 +9,18 @@
@contextmenu.prevent.stop="onContextmenu"
:title="title"
>
<div class="label" v-if="$store.state.i.avatarId == file.id"><img src="/assets/label.svg"/>
<div class="label" v-if="$store.state.i.avatarId == file.id">
<img src="/assets/label.svg"/>
<p>%i18n:@avatar%</p>
</div>
<div class="label" v-if="$store.state.i.bannerId == file.id"><img src="/assets/label.svg"/>
<div class="label" v-if="$store.state.i.bannerId == file.id">
<img src="/assets/label.svg"/>
<p>%i18n:@banner%</p>
</div>
<div class="label red" v-if="file.isSensitive">
<img src="/assets/label-red.svg"/>
<p>%i18n:@nsfw%</p>
</div>
<div class="thumbnail" ref="thumbnail" :style="`background-color: ${ background }`">
<img :src="file.thumbnailUrl" alt="" @load="onThumbnailLoaded"/>
</div>
@ -212,6 +218,11 @@ root(isDark)
&:after
background #0b65a5
&.red
&:before
&:after
background #c12113
&:active
background rgba(#000, 0.1)
@ -220,6 +231,11 @@ root(isDark)
&:after
background #0b588c
&.red
&:before
&:after
background #ce2212
&[data-is-selected]
background $theme-color
@ -256,26 +272,29 @@ root(isDark)
pointer-events none
&:before
content ""
display block
position absolute
z-index 1
top 0
left 57px
width 28px
height 8px
background #0c7ac9
&:after
content ""
display block
position absolute
z-index 1
background #0c7ac9
&:before
top 0
left 57px
width 28px
height 8px
&:after
top 57px
left 0
width 8px
height 28px
background #0c7ac9
&.red
&:before
&:after
background #c12113
> img
position absolute

View File

@ -163,7 +163,7 @@ export default Vue.extend({
});
break;
default:
alert('%i18n:@unhandled-error% ' + err);
alert(`%i18n:@unhandled-error% ${err}`);
}
});
}

View File

@ -323,7 +323,7 @@ export default Vue.extend({
});
break;
default:
alert('%i18n:@unhandled-error% ' + err);
alert(`%i18n:@unhandled-error% ${err}`);
}
});
}
@ -404,7 +404,7 @@ export default Vue.extend({
folder: folder
});
} else {
window.open(url + '/i/drive/folder/' + folder.id,
window.open(`${url}/i/drive/folder/${folder.id}`,
'drive_window',
'height=500, width=800');
}

View File

@ -48,7 +48,7 @@ export default Vue.extend({
const mouseY = e.clientY - rect.top;
const xp = mouseX / this.$el.offsetWidth * 100;
const yp = mouseY / this.$el.offsetHeight * 100;
this.$el.style.backgroundPosition = xp + '% ' + yp + '%';
this.$el.style.backgroundPosition = `${xp}% ${yp}%`;
this.$el.style.backgroundImage = `url("${this.image.url}")`;
},

View File

@ -47,7 +47,7 @@
</div>
<mk-poll v-if="p.poll" :note="p"/>
<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="true"/>
<a class="location" v-if="p.geo" :href="`http://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
<div class="map" v-if="p.geo" ref="map"></div>
<div class="renote" v-if="p.renote">
<mk-note-preview :note="p.renote"/>
@ -55,15 +55,15 @@
</div>
<footer>
<mk-reactions-viewer :note="p"/>
<button @click="reply" title="">
<button class="replyButton" @click="reply" title="">
<template v-if="p.reply">%fa:reply-all%</template>
<template v-else>%fa:reply%</template>
<p class="count" v-if="p.repliesCount > 0">{{ p.repliesCount }}</p>
</button>
<button @click="renote" title="%i18n:@renote%">
<button class="renoteButton" @click="renote" title="%i18n:@renote%">
%fa:retweet%<p class="count" v-if="p.renoteCount > 0">{{ p.renoteCount }}</p>
</button>
<button :class="{ reacted: p.myReaction != null }" @click="react" ref="reactButton" title="%i18n:@add-reaction%">
<button class="reactionButton" :class="{ reacted: p.myReaction != null }" @click="react" ref="reactButton" title="%i18n:@add-reaction%">
%fa:plus%<p class="count" v-if="p.reactions_count > 0">{{ p.reactions_count }}</p>
</button>
<button @click="menu" ref="menuButton">
@ -372,15 +372,24 @@ root(isDark)
cursor pointer
&:hover
color isDark ? #9198af : #666
color isDark ? #a1a8bf : #444
&.replyButton:hover
color #0af
&.renoteButton:hover
color #8d0
&.reactionButton:hover
color #fa0
> .count
display inline
margin 0 0 0 8px
color #999
&.reacted
color $theme-color
&.reacted, &.reacted:hover
color #fa0
> .replies
> *

View File

@ -32,7 +32,7 @@
<mk-media-list :media-list="p.media"/>
</div>
<mk-poll v-if="p.poll" :note="p" ref="pollViewer"/>
<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% 位置情報</a>
<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% 位置情報</a>
<div class="map" v-if="p.geo" ref="map"></div>
<div class="renote" v-if="p.renote">
<mk-note-preview :note="p.renote"/>
@ -42,15 +42,15 @@
</div>
<footer>
<mk-reactions-viewer :note="p" ref="reactionsViewer"/>
<button @click="reply" title="%i18n:@reply%">
<button class="replyButton" @click="reply" title="%i18n:@reply%">
<template v-if="p.reply">%fa:reply-all%</template>
<template v-else>%fa:reply%</template>
<p class="count" v-if="p.repliesCount > 0">{{ p.repliesCount }}</p>
</button>
<button @click="renote" title="%i18n:@renote%">
<button class="renoteButton" @click="renote" title="%i18n:@renote%">
%fa:retweet%<p class="count" v-if="p.renoteCount > 0">{{ p.renoteCount }}</p>
</button>
<button :class="{ reacted: p.myReaction != null }" @click="react" ref="reactButton" title="%i18n:@add-reaction%">
<button class="reactionButton" :class="{ reacted: p.myReaction != null }" @click="react" ref="reactButton" title="%i18n:@add-reaction%">
%fa:plus%<p class="count" v-if="p.reactions_count > 0">{{ p.reactions_count }}</p>
</button>
<button @click="menu" ref="menuButton">
@ -487,20 +487,24 @@ root(isDark)
cursor pointer
&:hover
color isDark ? #9198af : #666
color isDark ? #a1a8bf : #444
&.replyButton:hover
color #0af
&.renoteButton:hover
color #8d0
&.reactionButton:hover
color #fa0
> .count
display inline
margin 0 0 0 8px
color #999
&.reacted
color $theme-color
&:last-child
position absolute
right 0
margin 0
&.reacted, &.reacted:hover
color #fa0
> .detail
padding-top 4px

View File

@ -135,6 +135,12 @@ export default Vue.extend({
return;
}
}
if (this.$store.state.settings.showLocalRenotes === false) {
if (isPureRenote && (note.renote.user.host == null)) {
return;
}
}
//#endregion
// 投稿が自分のものではないかつ、タブが非表示またはスクロール位置が最上部ではないならタイトルで通知
@ -187,7 +193,7 @@ export default Vue.extend({
clearNotification() {
this.unreadCount = 0;
document.title = config.name;
document.title = (this as any).os.instanceName;
},
onVisibilitychange() {

View File

@ -10,7 +10,7 @@
<span v-for="u in visibleUsers">{{ u | userName }}<a @click="removeVisibleUser(u)">[x]</a></span>
<a @click="addVisibleUser">%i18n:@add-visible-user%</a>
</div>
<div class="hashtags" v-if="recentHashtags.length > 0">
<div class="hashtags" v-if="recentHashtags.length > 0 && $store.state.settings.suggestRecentHashtags">
<b>%i18n:@recent-tags%:</b>
<a v-for="tag in recentHashtags.slice(0, 5)" @click="addTag(tag)" title="%@click-to-tagging%">#{{ tag }}</a>
</div>
@ -23,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})` }" :title="file.name"></div>
<div class="img" :style="{ backgroundImage: `url(${file.thumbnailUrl})` }" :title="file.name"></div>
<img class="remove" @click="detachMedia(file.id)" src="/assets/desktop/remove.png" title="%i18n:@attach-cancel%" alt=""/>
</div>
</x-draggable>
@ -35,7 +35,7 @@
<button class="upload" title="%i18n:@attach-media-from-local%" @click="chooseFile">%fa:upload%</button>
<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="%i18n:@create-poll%" @click="poll = !poll">%fa:chart-pie%</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">
@ -58,7 +58,7 @@
import Vue from 'vue';
import insertTextAtCursor from 'insert-text-at-cursor';
import * as XDraggable from 'vuedraggable';
import getKao from '../../../common/scripts/get-kao';
import getFace from '../../../common/scripts/get-face';
import MkVisibilityChooser from '../../../common/views/components/visibility-chooser.vue';
import parse from '../../../../../mfm/parse';
import { host } from '../../../config';
@ -99,7 +99,7 @@ export default Vue.extend({
useCw: false,
cw: null,
geo: null,
visibility: 'public',
visibility: this.$store.state.device.visibility || 'public',
visibleUsers: [],
autocomplete: null,
draghover: false,
@ -110,9 +110,9 @@ export default Vue.extend({
computed: {
draftId(): string {
return this.renote
? 'renote:' + this.renote.id
? `renote:${this.renote.id}`
: this.reply
? 'reply:' + this.reply.id
? `reply:${this.reply.id}`
: 'note';
},
@ -313,7 +313,7 @@ export default Vue.extend({
this.geo = pos.coords;
this.$emit('geo-attached', this.geo);
}, err => {
alert('%i18n:@error%: ' + err.message);
alert(`%i18n:@error%: ${err.message}`);
}, {
enableHighAccuracy: true
});
@ -326,8 +326,7 @@ export default Vue.extend({
setVisibility() {
const w = (this as any).os.new(MkVisibilityChooser, {
source: this.$refs.visibilityButton,
v: this.visibility
source: this.$refs.visibilityButton
});
w.$once('chosen', v => {
this.visibility = v;
@ -422,7 +421,7 @@ export default Vue.extend({
},
kao() {
this.text += getKao();
this.text += getFace();
}
}
});

View File

@ -48,14 +48,18 @@
<mk-switch v-model="$store.state.settings.iLikeSushi" @change="onChangeILikeSushi" text="%i18n:common.i-like-sushi%"/>
</div>
<mk-switch v-model="$store.state.settings.showPostFormOnTopOfTl" @change="onChangeShowPostFormOnTopOfTl" text="%i18n:@post-form-on-timeline%"/>
<mk-switch v-model="$store.state.settings.suggestRecentHashtags" @change="onChangeSuggestRecentHashtags" text="%i18n:@suggest-recent-hashtags%"/>
<mk-switch v-model="$store.state.settings.showClockOnHeader" @change="onChangeShowClockOnHeader" text="%i18n:@show-clock-on-header%"/>
<mk-switch v-model="$store.state.settings.showReplyTarget" @change="onChangeShowReplyTarget" text="%i18n:@show-reply-target%"/>
<mk-switch v-model="$store.state.settings.showMyRenotes" @change="onChangeShowMyRenotes" text="%i18n:@show-my-renotes%"/>
<mk-switch v-model="$store.state.settings.showRenotedMyNotes" @change="onChangeShowRenotedMyNotes" text="%i18n:@show-renoted-my-notes%"/>
<mk-switch v-model="$store.state.settings.showLocalRenotes" @change="onChangeShowLocalRenotes" text="%i18n:@show-local-renotes%"/>
<mk-switch v-model="$store.state.settings.showMaps" @change="onChangeShowMaps" text="%i18n:@show-maps%">
<span>%i18n:@show-maps-desc%</span>
</mk-switch>
<mk-switch v-model="$store.state.settings.reversiBoardLabels" @change="onChangeReversiBoardLabels" text="%i18n:common.show-reversi-board-labels%"/>
<mk-switch v-model="$store.state.settings.disableAnimatedMfm" @change="onChangeDisableAnimatedMfm" text="%i18n:common.disable-animated-mfm%"/>
<mk-switch v-model="$store.state.settings.games.reversi.showBoardLabels" @change="onChangeReversiBoardLabels" text="%i18n:common.show-reversi-board-labels%"/>
<mk-switch v-model="$store.state.settings.games.reversi.useContrastStones" @change="onChangeUseContrastReversiStones" text="%i18n:common.use-contrast-reversi-stones%"/>
</section>
<section class="web" v-show="page == 'web'">
@ -189,12 +193,6 @@
<button class="ui button block" @click="taskmngr">%i18n:@task-manager%</button>
</details>
</section>
<section class="other" v-show="page == 'other'">
<h1>%i18n:@license%</h1>
<div v-html="license"></div>
<a :href="licenseUrl" target="_blank">%i18n:@third-parties%</a>
</section>
</div>
</div>
</template>
@ -209,7 +207,7 @@ import XApi from './settings.api.vue';
import XApps from './settings.apps.vue';
import XSignins from './settings.signins.vue';
import XDrive from './settings.drive.vue';
import { url, docsUrl, license, lang, langs, version } from '../../../config';
import { url, langs, version } from '../../../config';
import checkForUpdate from '../../../common/scripts/check-for-update';
import MkTaskManager from './taskmanager.vue';
@ -228,7 +226,6 @@ export default Vue.extend({
return {
page: 'profile',
meta: null,
license,
version,
langs,
latestVersion: undefined,
@ -236,10 +233,6 @@ export default Vue.extend({
};
},
computed: {
licenseUrl(): string {
return `${docsUrl}/${lang}/license`;
},
apiViaStream: {
get() { return this.$store.state.device.apiViaStream; },
set(value) { this.$store.commit('device/set', { key: 'apiViaStream', value }); }
@ -335,6 +328,18 @@ export default Vue.extend({
value: v
});
},
onChangeSuggestRecentHashtags(v) {
this.$store.dispatch('settings/set', {
key: 'suggestRecentHashtags',
value: v
});
},
onChangeShowClockOnHeader(v) {
this.$store.dispatch('settings/set', {
key: 'showClockOnHeader',
value: v
});
},
onChangeShowReplyTarget(v) {
this.$store.dispatch('settings/set', {
key: 'showReplyTarget',
@ -353,6 +358,12 @@ export default Vue.extend({
value: v
});
},
onChangeShowLocalRenotes(v) {
this.$store.dispatch('settings/set', {
key: 'showLocalRenotes',
value: v
});
},
onChangeShowMaps(v) {
this.$store.dispatch('settings/set', {
key: 'showMaps',
@ -373,7 +384,13 @@ export default Vue.extend({
},
onChangeReversiBoardLabels(v) {
this.$store.dispatch('settings/set', {
key: 'reversiBoardLabels',
key: 'games.reversi.showBoardLabels',
value: v
});
},
onChangeUseContrastReversiStones(v) {
this.$store.dispatch('settings/set', {
key: 'games.reversi.useContrastStones',
value: v
});
},

View File

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

View File

@ -30,10 +30,8 @@
<li @click="settings">
<p>%fa:cog%<span>%i18n:@settings%</span>%fa:angle-right%</p>
</li>
</ul>
<ul>
<li @click="signout">
<p class="signout">%fa:power-off%<span>%i18n:@signout%</span></p>
<li v-if="$store.state.i.isAdmin">
<router-link to="/admin">%fa:terminal%<span>%i18n:@admin%</span>%fa:angle-right%</router-link>
</li>
</ul>
<ul>
@ -41,6 +39,11 @@
<p><span>%i18n:@dark%</span><template v-if="$store.state.device.darkmode">%fa:moon%</template><template v-else>%fa:R moon%</template></p>
</li>
</ul>
<ul>
<li @click="signout">
<p class="signout">%fa:power-off%<span>%i18n:@signout%</span></p>
</li>
</ul>
</div>
</transition>
</div>

View File

@ -11,7 +11,7 @@
<li class="deck" :class="{ active: $route.name == 'deck' }" @click="goToTop">
<router-link to="/deck">
%fa:columns%
<p>%i18n:@deck% <small>(beta)</small></p>
<p>%i18n:@deck%</p>
</router-link>
</li>
<li class="messaging">

View File

@ -1,5 +1,6 @@
<template>
<div class="header">
<p class="warn" v-if="env != 'production'">%i18n:common.do-not-use-in-production%</p>
<mk-special-message/>
<div class="main" ref="main">
<div class="backdrop"></div>
@ -17,7 +18,7 @@
<x-account v-if="$store.getters.isSignedIn"/>
<x-notifications v-if="$store.getters.isSignedIn"/>
<x-post v-if="$store.getters.isSignedIn"/>
<x-clock/>
<x-clock v-if="$store.state.settings.showClockOnHeader"/>
</div>
</div>
</div>
@ -28,6 +29,7 @@
<script lang="ts">
import Vue from 'vue';
import * as anime from 'animejs';
import { env } from '../../../config';
import XNav from './ui.header.nav.vue';
import XSearch from './ui.header.search.vue';
@ -43,7 +45,13 @@ export default Vue.extend({
XAccount,
XNotifications,
XPost,
XClock,
XClock
},
data() {
return {
env: env
};
},
mounted() {
@ -119,6 +127,15 @@ root(isDark)
width 100%
box-shadow 0 1px 1px rgba(#000, 0.075)
> .warn
display block
margin 0
padding 4px
text-align center
font-size 12px
background #f00
color #fff
> .main
height 48px

View File

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

View File

@ -48,7 +48,7 @@ export default Vue.extend({
this.open();
});
} else {
const query = this.user[0] == '@' ?
const query = this.user.startsWith('@') ?
parseAcct(this.user.substr(1)) :
{ userId: this.user };

View File

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

View File

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

View File

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

View File

@ -1,5 +1,5 @@
<template>
<div>
<div class="mk-admin-card">
<header>%i18n:@suspend-user%</header>
<input v-model="username" type="text" class="ui"/>
<button class="ui" @click="suspendUser" :disabled="suspending">%i18n:@suspend%</button>

View File

@ -1,5 +1,5 @@
<template>
<div>
<div class="mk-admin-card">
<header>%i18n:@unsuspend-user%</header>
<input v-model="username" type="text" class="ui"/>
<button class="ui" @click="unsuspendUser" :disabled="unsuspending">%i18n:@unsuspend%</button>

View File

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

View File

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

View File

@ -4,17 +4,24 @@
<ul>
<li @click="nav('dashboard')" :class="{ active: page == 'dashboard' }">%fa:chalkboard .fw%%i18n:@dashboard%</li>
<li @click="nav('users')" :class="{ active: page == 'users' }">%fa:users .fw%%i18n:@users%</li>
<li @click="nav('announcements')" :class="{ active: page == 'announcements' }">%fa:broadcast-tower .fw%%i18n:@announcements%</li>
<!-- <li @click="nav('drive')" :class="{ active: page == 'drive' }">%fa:cloud .fw%%i18n:@drive%</li> -->
<!-- <li @click="nav('update')" :class="{ active: page == 'update' }">%i18n:@update%</li> -->
</ul>
</nav>
<main>
<div v-if="page == 'dashboard'">
<div v-show="page == 'dashboard'">
<x-dashboard/>
<x-charts/>
</div>
<div v-show="page == 'announcements'">
<x-announcements/>
</div>
<div v-if="page == 'users'">
<x-suspend-user/>
<x-unsuspend-user/>
<x-verify-user/>
<x-unverify-user/>
</div>
<div v-if="page == 'drive'"></div>
<div v-if="page == 'update'"></div>
@ -25,14 +32,22 @@
<script lang="ts">
import Vue from "vue";
import XDashboard from "./admin.dashboard.vue";
import XAnnouncements from "./admin.announcements.vue";
import XSuspendUser from "./admin.suspend-user.vue";
import XUnsuspendUser from "./admin.unsuspend-user.vue";
import XVerifyUser from "./admin.verify-user.vue";
import XUnverifyUser from "./admin.unverify-user.vue";
import XCharts from "../../components/charts.vue";
export default Vue.extend({
components: {
XDashboard,
XAnnouncements,
XSuspendUser,
XUnsuspendUser
XUnsuspendUser,
XVerifyUser,
XUnverifyUser,
XCharts
},
data() {
return {
@ -47,7 +62,7 @@ export default Vue.extend({
});
</script>
<style lang="stylus" scoped>
<style lang="stylus">
@import '~const.styl'
.mk-admin
@ -90,13 +105,23 @@ export default Vue.extend({
width 100%
padding 16px 32px
header
margin 10px 0
> div
> div
max-width 800px
.mk-admin-card
padding 32px
background #fff
box-shadow 0 2px 8px rgba(#000, 0.1)
button
margin 16px 0
position absolute
right 0
&:not(:last-child)
margin-bottom 16px
> header
margin 0 0 1em 0
padding 0 0 8px 0
font-size 1em
color #555
border-bottom solid 1px #eee
</style>

View File

@ -3,18 +3,20 @@
@dragover.prevent.stop="onDragover"
@dragenter.prevent="onDragenter"
@dragleave="onDragleave"
@drop.prevent.stop="onDrop"
>
@drop.prevent.stop="onDrop">
<header :class="{ indicate: count > 0 }"
draggable="true"
@click="toggleActive"
@click="goTop"
@dragstart="onDragstart"
@dragend="onDragend"
@contextmenu.prevent.stop="onContextmenu"
>
@contextmenu.prevent.stop="onContextmenu">
<button class="toggleActive" @click="toggleActive" v-if="isStacked">
<template v-if="active">%fa:angle-up%</template>
<template v-else>%fa:angle-down%</template>
</button>
<slot name="header"></slot>
<span class="count" v-if="count > 0">({{ count }})</span>
<button ref="menu" @click.stop="showMenu">%fa:caret-down%</button>
<button class="menu" ref="menu" @click.stop="showMenu">%fa:caret-down%</button>
</header>
<div ref="body" v-show="active">
<slot></slot>
@ -211,6 +213,13 @@ export default Vue.extend({
});
},
goTop() {
this.$refs.body.scrollTo({
top: 0,
behavior: 'smooth'
});
},
onDragstart(e) {
e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('mk-deck-column', this.column.id);
@ -302,6 +311,7 @@ root(isDark)
color #bbb
> header
display flex
z-index 1
line-height $header-height
padding 0 16px
@ -328,10 +338,8 @@ root(isDark)
margin-left 4px
opacity 0.5
> button
position absolute
top 0
right 0
> .toggleActive
> .menu
width $header-height
line-height $header-height
font-size 16px
@ -343,6 +351,13 @@ root(isDark)
&:active
color isDark ? #b2c1d5 : #999
> .toggleActive
margin-left -16px
> .menu
margin-left auto
margin-right -16px
> div
height "calc(100% - %s)" % $header-height
overflow auto

View File

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

View File

@ -32,10 +32,11 @@
<mk-media-list :media-list="p.media"/>
</div>
<mk-poll v-if="p.poll" :note="p" ref="pollViewer"/>
<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>
<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
<div class="renote" v-if="p.renote">
<mk-note-preview :note="p.renote" :mini="true"/>
</div>
<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="false" :mini="true"/>
</div>
<span class="app" v-if="p.app">via <b>{{ p.app.name }}</b></span>
</div>

View File

@ -140,6 +140,12 @@ export default Vue.extend({
return;
}
}
if (this.$store.state.settings.showLocalRenotes === false) {
if (isPureRenote && (note.renote.user.host == null)) {
return;
}
}
//#endregion
if (this.isScrollTop()) {

View File

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

View File

@ -31,7 +31,7 @@ export default Vue.extend({
const title = folder.name + ' | %i18n:@title%';
// Rewrite URL
history.pushState(null, title, '/i/drive/folder/' + folder.id);
history.pushState(null, title, `/i/drive/folder/${folder.id}`);
document.title = title;
}

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