Compare commits

...

518 Commits

Author SHA1 Message Date
60e0b19372 10.93.0 2019-03-12 17:24:42 +09:00
922eb937ff 🎨 2019-03-12 17:20:40 +09:00
87573284f1 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-12 17:11:33 +09:00
a91c585f55 Add queue chart 2019-03-12 17:11:06 +09:00
953ea21d5e New Crowdin translations (#4479)
* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Czech)
2019-03-12 16:43:13 +09:00
ecb00968bc Fix bug 2019-03-12 16:42:56 +09:00
50ad8adb2d Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-12 13:26:33 +09:00
16878caf09 Update doc 2019-03-12 13:26:26 +09:00
5bc30c5493 Add log 2019-03-12 13:12:49 +09:00
85d89cf4c4 embedプレイヤーを閉じれるように (#4402) 2019-03-12 13:12:34 +09:00
db693f598b シェアページを統合 2019-03-12 13:02:16 +09:00
0494c770a1 Better share template 2019-03-12 12:59:26 +09:00
c473b62aed Follow latest Web Share Target specification 2019-03-12 12:55:43 +09:00
f19ac5320e Remove unnecessary checking 2019-03-12 12:46:01 +09:00
612e3aafbc activeなジョブ数のカウント方法を分けた
https://github.com/syuilo/misskey/issues/4470#issuecomment-471827030
2019-03-12 12:31:01 +09:00
0e97fec451 Fix typo 2019-03-12 10:46:25 +09:00
e8c8626ee4 New Crowdin translations (#4469)
* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Czech)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Korean)
2019-03-12 10:41:05 +09:00
d89e0f07f8 Update issue templates 2019-03-12 10:38:30 +09:00
e7f81a42ce Resolve #4470 2019-03-12 10:35:17 +09:00
ac614148b8 Update README.md [AUTOGEN] (#4477) 2019-03-12 09:50:42 +09:00
5eb02b4901 Resolve #4458 (#4476) 2019-03-12 09:50:20 +09:00
65631525f6 Update README.md [AUTOGEN] (#4474) 2019-03-12 09:49:58 +09:00
969435cfe9 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-12 00:34:30 +09:00
c932f7a25b Resolve #1736 2019-03-12 00:34:19 +09:00
42d164dc57 log failed job (#4472) 2019-03-11 22:45:07 +09:00
a7e60f80bd Refactor: Extract downloadTextFile function 2019-03-11 20:23:29 +09:00
3dd5f313b7 Add icons 🎨 2019-03-11 20:12:44 +09:00
883962c393 Add icon 🎨 2019-03-11 20:07:27 +09:00
8a30ff1c76 🌎 A federated blogging platform 🚀 2019-03-11 20:03:02 +09:00
e47c354916 Refactor 2019-03-11 19:57:50 +09:00
496f42805d リストをインポートしたときにプロキシアカウントがフォローするように修正 2019-03-11 19:51:58 +09:00
c3d34bda37 Resolve #4259 2019-03-11 19:43:58 +09:00
bb6ede2b8f 10.92.4 2019-03-11 13:59:27 +09:00
822400a1ba New Crowdin translations (#4461)
* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Czech)
2019-03-11 13:57:21 +09:00
e3e08843f1 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-11 09:59:14 +09:00
ce0d4f77fa リストのエクスポートをできるように
#4259
2019-03-11 09:59:07 +09:00
94fdb4e974 Update README.md [AUTOGEN] (#4467) 2019-03-11 08:13:02 +09:00
4d425fc8a4 Use proxy instead of weserv for url-preview images (#4466) 2019-03-11 01:03:09 +09:00
c6cdfa2f5a Ignore 4xx references in AP (#4463)
* Ignore 4xx references

* remove unnecessary comment
2019-03-10 22:27:25 +09:00
0fff2e4f16 Remove debug code 2019-03-10 19:20:25 +09:00
80a2172715 Resolve #4462 2019-03-10 19:16:33 +09:00
5a0a297634 Improve redis config 2019-03-09 23:44:54 +09:00
948a133b7b Fix log 2019-03-09 18:15:44 +09:00
2ee826c958 10.92.3 2019-03-09 10:21:45 +09:00
539409faf8 Better logs 2019-03-09 10:18:59 +09:00
606e46e4d7 Make info 2019-03-09 10:10:24 +09:00
a179cfd69a Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-09 10:09:12 +09:00
d8379253d4 Rename 2019-03-09 10:09:04 +09:00
c3344fbd68 To retry AP deliver queue (#4457) 2019-03-09 08:57:55 +09:00
4cebd6e84a Increase job attempts limit a little 2019-03-08 21:43:17 +09:00
90fbf9dbb0 Add missing semicolon 2019-03-08 21:38:23 +09:00
d365b9f634 Fix bug 2019-03-08 21:30:12 +09:00
a2f06acaa4 10.92.2 2019-03-08 21:00:35 +09:00
8c90cbcbfb Disable lifo 2019-03-08 20:58:01 +09:00
a4a47772dc New Crowdin translations (#4447)
* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

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

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

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

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Polish)
2019-03-08 20:55:36 +09:00
5dde1f4602 Update README.md 2019-03-08 20:52:09 +09:00
9dc0909eeb Add index 2019-03-08 20:36:42 +09:00
0ed2592e41 Resolve #4453 2019-03-08 20:07:29 +09:00
76cff98220 Fix bug 2019-03-08 19:45:01 +09:00
60604b6f51 🎨 2019-03-08 15:34:34 +09:00
f410b7aecb 🎨 2019-03-08 15:27:06 +09:00
1a61f2cee9 自動更新 2019-03-08 13:10:38 +09:00
78a8293520 ジョブの数を一覧できるように 2019-03-08 13:03:38 +09:00
03cfb4fc8d 🎨 2019-03-08 13:03:17 +09:00
144345a359 Enable lifo job 2019-03-08 05:39:59 +09:00
fd2c01515e Increase job concurrency 2019-03-08 05:23:13 +09:00
219570e08b Update job handlers 2019-03-08 05:22:14 +09:00
69df556ff5 Resolve #4448 2019-03-08 04:55:55 +09:00
5f4a52574f Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-07 23:43:56 +09:00
5a1f6c5839 10.92.1 2019-03-07 23:43:42 +09:00
91d0342fe8 New Crowdin translations (#4445)
* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)
2019-03-07 23:41:13 +09:00
8cc236daf8 Clean jobs 2019-03-07 23:36:08 +09:00
d283ec69f7 Refactor 2019-03-07 23:27:38 +09:00
d1aea7596c Fix import 2019-03-07 23:14:01 +09:00
c934987b14 Resolve #4444 2019-03-07 23:07:21 +09:00
00c9f4a2e5 Update issue templates 2019-03-07 21:41:39 +09:00
6605c1d07f New Crowdin translations (#4431)
* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)
2019-03-07 21:19:53 +09:00
7325d66c52 Implement Update Question (#4435)
* Update remote votes count

* save updatedAt

* deliver Update

* use renderNote

* use id

* fix typeof
2019-03-07 21:19:32 +09:00
a485061e22 Update README.md [AUTOGEN] (#4441) 2019-03-07 20:30:41 +09:00
1f63f50343 Create robots.txt (#4439)
* Create robots.txt

* Update index.ts
2019-03-07 20:11:04 +09:00
cd3170dabd Update PULL_REQUEST_TEMPLATE.md 2019-03-07 20:06:36 +09:00
841cedc5f8 Update issue templates 2019-03-07 19:56:02 +09:00
7f4882734d Update @types/speakeasy requirement from 2.0.3 to 2.0.4 (#4369)
Updates the requirements on [@types/speakeasy](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/speakeasy) to permit the latest version.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/speakeasy)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-07 19:41:08 +09:00
e7d647d412 Update eslint requirement from 5.12.0 to 5.15.0 (#4394)
Updates the requirements on [eslint](https://github.com/eslint/eslint) to permit the latest version.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v5.12.0...v5.15.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-07 19:40:55 +09:00
913d14a58a Update @types/node requirement from 10.12.24 to 11.10.4 (#4396)
Updates the requirements on [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) to permit the latest version.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-07 19:40:41 +09:00
909272ec3d Update @types/koa-router requirement from 7.0.39 to 7.0.40 (#4418)
Updates the requirements on [@types/koa-router](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/koa-router) to permit the latest version.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/koa-router)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-07 19:40:22 +09:00
7af40ffbbe Update webpack-cli requirement from 3.2.1 to 3.2.3 (#4422)
Updates the requirements on [webpack-cli](https://github.com/webpack/webpack-cli) to permit the latest version.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/compare/v.3.2.1...V.3.2.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-07 19:40:09 +09:00
9df79a3ec9 Update file-type requirement from 10.7.1 to 10.9.0 (#4423)
Updates the requirements on [file-type](https://github.com/sindresorhus/file-type) to permit the latest version.
- [Release notes](https://github.com/sindresorhus/file-type/releases)
- [Commits](https://github.com/sindresorhus/file-type/compare/v10.7.1...v10.9.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-07 19:39:52 +09:00
4f2eee06aa Update bootstrap-vue requirement from 2.0.0-rc.11 to 2.0.0-rc.13 (#4353)
Updates the requirements on [bootstrap-vue](https://github.com/bootstrap-vue/bootstrap-vue) to permit the latest version.
- [Release notes](https://github.com/bootstrap-vue/bootstrap-vue/releases)
- [Changelog](https://github.com/bootstrap-vue/bootstrap-vue/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/bootstrap-vue/bootstrap-vue/compare/v2.0.0-rc.11...v2.0.0-rc.13)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-07 19:39:39 +09:00
1b9cf76008 Update issue templates 2019-03-07 18:16:49 +09:00
d035a43ed6 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-07 16:50:41 +09:00
95ee9a6e09 Update issue templates 2019-03-07 16:50:05 +09:00
02a63cdcb3 Update index.js 2019-03-07 16:43:16 +09:00
f02125dd47 Resolve #4437 2019-03-07 13:03:46 +09:00
c11e813146 Fix 2019-03-07 09:35:23 +09:00
a365849048 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-07 09:31:07 +09:00
a493c9f769 🎨 2019-03-07 09:30:44 +09:00
a13f522b2a Update README.md [AUTOGEN] (#4436) 2019-03-07 09:18:57 +09:00
1ed70b2e2c 10.92.0 2019-03-06 23:37:53 +09:00
86d5a599b7 New Crowdin translations (#4414)
* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Czech)
2019-03-06 23:30:39 +09:00
c226fc8d63 Make building locales better (#4427) 2019-03-06 23:28:50 +09:00
bbf4e1c413 Add fallback for broken db 2019-03-06 23:23:50 +09:00
a24a20a83d Clean up 2019-03-06 23:19:15 +09:00
725600da8f Enhance poll (#4409)
* Start working

* WIP: Enhance poll

* Fix bug

* Use `name` in voting note
refs: https://github.com/syuilo/misskey/issues/4407#issuecomment-469057296

* Fix style

* Refactor
Co-authored-by: MeiMei <30769358+mei23@users.noreply.github.com>

* WIP: Update poll editor

* Fix bug

* Fix bug
refs: https://github.com/syuilo/misskey/pull/4409#discussion_r

* Fix typo

* Better design

* Beautify poll editor

* Fix UI

* Fix bug
refs: https://github.com/syuilo/misskey/pull/4409#discussion_r262217524

* Add debug logging

* Fix bug

* Log deliver

* fix vote

* Update ap/show
refs: https://github.com/syuilo/misskey/pull/4409#issuecomment-469652386

* Update poll view

* Maybe done

* Add tests

* Fix path

* Fix test

* Fix test

* Fix test

* Fix expired check on AP

* Update note.ts

* Squashed commit of the following:

commit d9a4beabf851893b8992a0f4568265eb9d4f0b8e
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 05:16:14 2019 +0900

    tune

commit 83ff421a6e978243f80ba9ec820189bc897e6e3b
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 05:01:14 2019 +0900

    fallback

commit 0b566af973b115ade9e75ea4b8094ee2b329dabc
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 04:40:12 2019 +0900

    Note

commit cc0296dd6127580ac584c40398db3f762a311f8b
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 04:33:58 2019 +0900

    createで送る

* Squashed commit of the following:

commit ae696b1ed12568b27c27367ac5a77035c97c9a1f
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 06:11:17 2019 +0900

    fix

commit b735e354e7a9e64534c4f17d04ecbc65fb735c21
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 06:08:33 2019 +0900

    messge

commit d9a4beabf851893b8992a0f4568265eb9d4f0b8e
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 05:16:14 2019 +0900

    tune

commit 83ff421a6e978243f80ba9ec820189bc897e6e3b
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 05:01:14 2019 +0900

    fallback

commit 0b566af973b115ade9e75ea4b8094ee2b329dabc
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 04:40:12 2019 +0900

    Note

commit cc0296dd6127580ac584c40398db3f762a311f8b
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 04:33:58 2019 +0900

    createで送る

* Fix typo

* Update vote.ts

* Update vote.ts

* Update poll-editor.vue

* Update tslint.json

* Fix layout

* Add note

* Fix bug

* Rename text key

* 投票するときに投稿として扱わないように (#4425)

* wip

* 形式をMastodonと合わせた

* Bye something

* Use - instead of ~

* Redundancy

* Yes!

* Refactor

* Use moment instead of Date

* Fix indent

* Refactor

if (votes.length)
は必要なさそう

* Clean up

* Bye Date

* Clean

* Fix timer is not displayed

* Fix リモートから無期限pollにvoteできない

* Fix vote actor
2019-03-06 22:55:47 +09:00
f74a32ed9b [Client] Fix bug 2019-03-06 20:17:59 +09:00
e08e72dd10 Use meta url instead of constant url 2019-03-06 12:31:58 +09:00
ce02e1e528 Bye on-build-webpack (#4404)
* Update webpack.config.ts

* Update package.json
2019-03-06 09:26:22 +09:00
0b27d8a717 Fix #4421 2019-03-06 09:24:16 +09:00
2782e7d26f [MFM] Improve hashtag parsing 2019-03-05 22:18:29 +09:00
2c83a05e80 [Client] Better transition 2019-03-05 20:45:19 +09:00
467f68502a Refactor 2019-03-05 20:32:39 +09:00
d95b0dee6b Fix #4416 2019-03-05 08:27:50 +09:00
a1f3323fa5 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-05 08:24:26 +09:00
494796a7f0 Fix #4415 2019-03-05 08:24:19 +09:00
94f2c20d35 Fix #4413 (#4417) 2019-03-05 07:56:23 +09:00
c1deb9438d Update README.md [AUTOGEN] (#4411) 2019-03-04 19:27:53 +09:00
ea86527c66 Add indexes 2019-03-04 19:26:05 +09:00
d1a18fe266 Resolve #3220 2019-03-04 14:32:36 +09:00
737064da82 Better log 2019-03-04 14:02:42 +09:00
606cc85ff5 10.91.2 2019-03-04 09:25:28 +09:00
dcfc8f1b30 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-04 09:23:49 +09:00
ebe4b84f14 Fix bug 2019-03-04 09:23:45 +09:00
699d4897db New Crowdin translations (#4403)
* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)
2019-03-04 09:17:46 +09:00
fcdfd8d323 Use vue-json-pretty 2019-03-04 09:16:24 +09:00
db8625c31a Revert "Improve log view" (#4406)
This reverts commit e8ef8f0004.
2019-03-04 08:55:35 +09:00
b65f265c55 Update logs 2019-03-03 10:57:17 +09:00
c55237d09c 10.91.1 2019-03-03 08:49:53 +09:00
ed698b7b82 New Crowdin translations (#4398)
* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)
2019-03-03 08:48:17 +09:00
d4ff19f013 Fix SVG detection (#4401)
* Fix SVG detection

* remove unnecessary import
2019-03-03 08:48:02 +09:00
972fb8eb40 Hide some components 2019-03-03 08:46:42 +09:00
4de75448b6 テーマの切り替えをなめらかに 2019-03-03 08:43:51 +09:00
e8ef8f0004 Improve log view 2019-03-03 08:35:30 +09:00
a319b30382 Increase log limit 2019-03-03 08:28:35 +09:00
8278616eeb Fix log order 2019-03-03 08:28:12 +09:00
771f011506 Better log 2019-03-03 08:27:30 +09:00
826865869a Improve usability 2019-03-03 08:23:06 +09:00
3c77ae7b62 Improve log api 2019-03-03 08:13:49 +09:00
60c30ece10 Better logs 2019-03-03 08:00:39 +09:00
76a0d0fee9 Use dot 2019-03-03 07:48:25 +09:00
d50624f0a0 Better logs 2019-03-03 07:47:58 +09:00
4f9b015d1c 10.91.0 2019-03-02 18:56:38 +09:00
4f10bd038d Update ja-JP.yml 2019-03-02 18:53:12 +09:00
977af0a24d ログをデータベースに保存して管理画面で見れるように 2019-03-02 18:51:59 +09:00
f3ceb32a7c Change queue db name 2019-03-02 14:32:32 +09:00
15da2de256 Add animaition 2019-03-02 14:27:30 +09:00
41ae0ccd6f Update dependencies 🚀 2019-03-02 14:25:44 +09:00
344532662e Update README.md [AUTOGEN] (#4393) 2019-03-02 08:59:53 +09:00
99b365030e Update README.md [AUTOGEN] (#4391) 2019-03-02 08:58:35 +09:00
5cc940c08a Fix bug
Fix #4390
2019-03-02 08:13:09 +09:00
1d02d9e0fe モバイルのデッキで返信が表示されない問題を修正 2019-03-02 08:06:03 +09:00
139523b763 Refactor 2019-03-02 07:57:18 +09:00
e7c83db9c7 New Crowdin translations (#4381)
* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

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

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

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)

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

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

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

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

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)
2019-03-01 18:10:00 +09:00
da47782b77 Update README.md [AUTOGEN] (#4389) 2019-03-01 14:46:48 +09:00
4685de88a7 Better log 2019-03-01 14:40:29 +09:00
0c28ac4907 Add animation 2019-03-01 14:24:12 +09:00
ae2d707c68 Update README.md [AUTOGEN] (#4387) 2019-03-01 11:13:07 +09:00
00a28193a0 ダークモードの設定をテーマに移動 2019-03-01 11:03:45 +09:00
ea1818284b クライアントの設定コンポーネントを整理
* デスクトップとモバイルで統一
* いくつかの設定を廃止
2019-03-01 10:42:28 +09:00
d83efecc94 文字サイズを設定できるように 2019-03-01 08:08:08 +09:00
9a9fb37a78 Update compose-notification.ts 2019-02-28 20:57:38 +09:00
b6dc6c6984 10.90.4 2019-02-28 15:57:02 +09:00
517084b1fc Fix error 2019-02-28 14:17:39 +09:00
27763e6898 🎨 2019-02-28 14:14:05 +09:00
57dde1da38 Fix error 2019-02-28 14:13:18 +09:00
0bb961767c Fix i18n 2019-02-28 14:10:56 +09:00
88515ce677 Use internal dialog 2019-02-28 14:07:03 +09:00
00562e840c Improve usability 2019-02-28 12:53:31 +09:00
b7927ba386 Refactor 2019-02-28 12:49:13 +09:00
9c363ff045 Improve usability 2019-02-28 12:29:04 +09:00
1dbce5e3e2 Improve performance 2019-02-28 12:14:24 +09:00
361a9ca1be url-previewでembedプレイヤー展開をオプトインにする (#4382)
* url-previewでembedプレイヤー展開をオプトインにする

* remove tabs
2019-02-28 12:05:47 +09:00
cde6514839 Add log 2019-02-28 12:00:57 +09:00
507e2f727e 読み込む通知数を増やした 2019-02-28 11:44:16 +09:00
8028499d2b 🎨 2019-02-28 11:42:41 +09:00
c2c79c4a87 [Client] Use class selector to improve performance 2019-02-28 11:39:34 +09:00
d56f7f3390 remove tabs 2019-02-28 03:57:35 +09:00
ef70d17194 url-previewでembedプレイヤー展開をオプトインにする 2019-02-28 03:46:37 +09:00
9789b9a083 🎨 2019-02-27 16:47:13 +09:00
e6311fdb13 🎨 2019-02-27 09:27:19 +09:00
2231c54dee 10.90.3 2019-02-27 05:33:05 +09:00
20de9a5e35 Resolve #4374 2019-02-27 05:31:16 +09:00
ec3a6d7097 🎨 2019-02-27 05:20:29 +09:00
9d99bf5af8 🎨 2019-02-27 05:16:32 +09:00
52911cc9fd 🎨 2019-02-27 05:13:11 +09:00
6f71ba376d Improve doc 2019-02-27 05:08:42 +09:00
9f439aabba Fix schema 2019-02-27 05:02:46 +09:00
33ad60b1f3 Improve doc 2019-02-27 05:02:36 +09:00
010d3f8281 Update translations of CONTRIBUTING.md (#4371)
* Update translationa about Nyaize

* Update translation about description of source code

* Fix translation
2019-02-26 18:00:47 +09:00
e27c4bf1b9 10.90.2 2019-02-26 15:27:34 +09:00
11cfc58ffc New Crowdin translations (#4370)
* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)
2019-02-26 15:25:34 +09:00
91f38a8ddd 🎨 2019-02-26 14:44:26 +09:00
b56fed8ed5 Update notes/featured 2019-02-26 14:42:24 +09:00
4a93dadc1c 🎨 2019-02-26 14:37:17 +09:00
3a5f55c471 Chage default settings 2019-02-26 14:28:38 +09:00
2919e37586 Fix 2019-02-26 14:25:09 +09:00
077bdbfdef Improve doc 2019-02-26 14:21:28 +09:00
61ac024127 i18n整理 2019-02-26 14:13:02 +09:00
8db8d3f39e 🎨 2019-02-26 14:02:23 +09:00
e7032363d7 🎨 2019-02-26 12:14:24 +09:00
8a9dc26419 アカウントが削除できない問題を修正 2019-02-26 11:42:21 +09:00
022f5a18c8 10.90.1 2019-02-26 07:01:04 +09:00
eae4b2f2e9 Improve usability 2019-02-26 06:56:15 +09:00
d285452dec Fix bug 2019-02-26 06:54:49 +09:00
aced183a66 10.90.0 2019-02-26 05:34:58 +09:00
77b150c53b Update apexcharts requirement from 3.4.1 to 3.5.0 (#4368)
Updates the requirements on [apexcharts](https://github.com/apexcharts/apexcharts.js) to permit the latest version.
- [Release notes](https://github.com/apexcharts/apexcharts.js/releases)
- [Changelog](https://github.com/apexcharts/apexcharts.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/apexcharts/apexcharts.js/compare/v3.4.1...v3.5.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-02-26 05:23:43 +09:00
9b2ddfea5f New Crowdin translations (#4367)
* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Chinese Simplified)
2019-02-26 05:23:06 +09:00
bf2bdaa6ff 🎨 2019-02-26 05:22:21 +09:00
42525bb12a Improve usability 2019-02-25 20:18:15 +09:00
bc243c1ea3 i18n 2019-02-25 20:17:33 +09:00
a2517d1a1d 🎨 2019-02-25 20:08:56 +09:00
c0a60260c2 モバイル版でもデッキを使えるように (#4366)
* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Fix bug

* wip

* Update notifications.vue

* Update user-menu.vue

* deck settings

* indicate
2019-02-25 19:45:00 +09:00
3654f247c4 Fix error 2019-02-25 15:22:56 +09:00
c4ddfef2ed Improve doc 2019-02-25 09:37:22 +09:00
28086111e1 Resolve #4325 2019-02-25 04:20:42 +09:00
60c9a6528f Improve doc 2019-02-25 04:18:09 +09:00
47d4dcfdf5 Improve doc 2019-02-25 04:02:18 +09:00
eb8d1211ba Improve doc 2019-02-25 03:43:19 +09:00
495aad6a2d Improve doc 2019-02-25 03:35:45 +09:00
77676d18c8 Improve doc 2019-02-25 03:30:22 +09:00
68d90caab7 Fix doc 2019-02-25 03:23:19 +09:00
31fc43ed16 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-02-25 03:22:01 +09:00
31802c9749 Improve doc 2019-02-25 03:21:54 +09:00
192aa89f95 New Crowdin translations (#4364)
* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (Chinese Simplified)
2019-02-25 02:45:07 +09:00
b0a0faff7e Update README.md [AUTOGEN] (#4365) 2019-02-25 02:44:55 +09:00
b67f3438e9 Improve doc 2019-02-24 19:42:26 +09:00
02e4929a97 Improve doc 2019-02-24 19:27:32 +09:00
fcc6a65e08 Improve doc 2019-02-24 18:13:11 +09:00
f4ae939124 ハイフンに統一 2019-02-24 17:57:49 +09:00
664acb2d0e Refactor 2019-02-24 17:48:54 +09:00
e6e7cecdb6 Refactor 2019-02-24 17:35:19 +09:00
563d604812 Refactor 2019-02-24 17:28:51 +09:00
012d744f4c Fix doc 2019-02-24 17:28:15 +09:00
d4c7ca76ac 10.89.1 2019-02-24 13:30:05 +09:00
1a6aae944f 🎨 2019-02-24 13:29:08 +09:00
71e0241c94 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-02-24 12:58:55 +09:00
d838ef5b76 Resolve #4362 2019-02-24 12:58:45 +09:00
d90a5c9154 New Crowdin translations (#4350)
* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)
2019-02-24 12:54:57 +09:00
9b79a411e0 Use camelCase 2019-02-24 12:53:22 +09:00
b8e0ec9edc Improve doc 2019-02-24 12:40:17 +09:00
57009057ae Update typescript to 3.3.3333 🚀 2019-02-24 12:25:12 +09:00
5db7b2e193 Improve doc 2019-02-24 12:23:31 +09:00
d994c84901 Resolve audioTag undefined error (#4363) 2019-02-24 10:50:45 +09:00
febfb97bb4 Remember container state on user page (#4361)
* Remember container state on user page

* remove unnecessary code
2019-02-24 10:38:53 +09:00
a6c5e62923 assetsのjs要求時にsaltを付けないように (#4358)
* No assets salt

* remove related code
2019-02-24 10:38:00 +09:00
ac0390fec3 Improve doc 2019-02-24 10:08:09 +09:00
97b99867f2 Improve doc 2019-02-24 10:04:27 +09:00
a55d5516a6 Improve doc 2019-02-24 10:00:24 +09:00
b679163d01 Improve type definitions 2019-02-24 09:45:27 +09:00
76edcdbe45 Update schemas.ts 2019-02-24 04:27:09 +09:00
d8d51519c4 Update description.ts 2019-02-24 04:11:54 +09:00
3446969121 Refator: separate files 2019-02-24 04:08:08 +09:00
0e0c35a701 Fix bug 2019-02-24 03:56:15 +09:00
c9a6c9e20a テキストをまとめた 2019-02-24 03:54:04 +09:00
3d2b982a94 Use internal alert function 2019-02-24 03:52:12 +09:00
6157d8331b Update drive.vue 2019-02-24 03:50:24 +09:00
3d0fc09fae Implement mobile version folder deletion (#4355) 2019-02-24 03:49:07 +09:00
b975751710 Use global translation 2019-02-24 03:39:45 +09:00
4530d40537 Add missing translation - ホームのカスタマイズ (#4360) 2019-02-24 03:34:40 +09:00
94e3ac9b72 デッキからホームに行くメニューをホームと表記する (#4359) 2019-02-24 03:34:09 +09:00
e13fe97ebb Update update.ts (#4357)
* Update update.ts

* Update update.ts

* Update update.ts

* Update update.ts
2019-02-24 03:32:30 +09:00
4ad7632113 Fix bool-param-default 2019-02-23 17:21:59 +09:00
0709cac97f Fix indent 2019-02-23 16:23:15 +09:00
7dd4180fba Better error handling 2019-02-23 15:45:03 +09:00
558213490a Remove space 2019-02-23 15:42:52 +09:00
78a69e3da8 Update doc 2019-02-23 15:35:26 +09:00
140c78e5a7 Add operationId to more convinience 2019-02-23 14:59:37 +09:00
a8e18e0e22 Add source code link 2019-02-23 14:57:05 +09:00
2a8bb23625 Fix type 2019-02-23 14:56:48 +09:00
936a4d1bc4 Add reaction count (#4283) 2019-02-23 13:44:37 +09:00
69c34e8d00 [ImgBot] Optimize images (#4352)
/assets/api-doc.png -- 5.85kb -> 5.41kb (7.54%)
2019-02-23 13:34:35 +09:00
1a2a190828 10.89.0 2019-02-23 11:29:29 +09:00
251cf1d76f Update dependencies 🚀 2019-02-23 11:29:17 +09:00
52774bbe64 Introduce OpenAPI specs (#4351)
* wip

* wip

* wip

* Update index.ts

* Update gen-openapi-spec.ts

* Update api.ja-JP.md

* Fix

* Improve doc

* Update gen-openapi-spec.ts

* Update redoc.html

* Improve doc

* Update gen-openapi-spec.ts

* Improve doc

* Update CHANGELOG.md
2019-02-23 11:20:58 +09:00
68a6758302 投稿を削除したときにお気に入りからも削除するように 2019-02-22 14:54:52 +09:00
13e43a4f74 Refactor 2019-02-22 14:53:03 +09:00
b7d62d09ec Refactor 2019-02-22 14:46:49 +09:00
321ec18173 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-02-22 14:22:54 +09:00
a44ac3306e Fix error response format 2019-02-22 14:22:40 +09:00
951288ecf0 docs to run in production mode (#4347)
* run in production mode from systemd

* NODE_ENV=production npm run build

* npm start
2019-02-22 14:18:05 +09:00
cc8a7dd588 Fix bug 2019-02-22 14:09:24 +09:00
813c52f51e Remove unused imports 2019-02-22 14:06:17 +09:00
be3298639d Refactor 2019-02-22 14:02:56 +09:00
e8d2959717 New Crowdin translations (#4337)
* New translations ja-JP.yml (Chinese Simplified)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)
2019-02-22 13:46:51 +09:00
e7680e08eb Update README.md [AUTOGEN] (#4344) 2019-02-22 13:46:26 +09:00
bd792d7661 Fix type annotation 2019-02-22 13:39:06 +09:00
4920983f23 Refactoring 2019-02-22 13:38:12 +09:00
2756f553c6 Improve error handling of API (#4345)
* wip

* wip

* wip

* Update attached_notes.ts

* wip

* Refactor

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Update call.ts

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* ✌️

* Fix
2019-02-22 11:46:58 +09:00
fc52e95ad0 Update CHANGELOG.md 2019-02-22 02:10:32 +09:00
5d1d6bc028 Fix i18n 2019-02-22 02:08:45 +09:00
b106acac91 Fix #4340 2019-02-22 01:56:07 +09:00
a5071db864 Update note-detail.vue (#4342) 2019-02-21 23:20:55 +09:00
bae874eb45 /api/v1/instance/peers 復活 (#4339)
* /api/v1/instance/peers 復活

* use Instance
2019-02-21 23:20:25 +09:00
60da17940d 10.88.0 2019-02-21 06:06:12 +09:00
385eeed732 New Crowdin translations (#4332)
* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

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

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)
2019-02-21 06:05:35 +09:00
2e908758d8 🎨 2019-02-21 06:04:42 +09:00
a164f8ad95 Fix bug 2019-02-21 05:53:10 +09:00
372138dfea アカウント削除時にサインイン履歴も削除するように 2019-02-21 01:49:00 +09:00
922a657c7e アカウント削除時にメッセージも削除するように 2019-02-21 01:47:10 +09:00
3409a51cca Resolve #2017 2019-02-21 01:30:21 +09:00
7174a55846 🎨 2019-02-21 00:37:58 +09:00
6656a59402 Fix error 2019-02-21 00:32:49 +09:00
7612ead551 Fix #4331 2019-02-21 00:30:53 +09:00
fa78fe665d メディアビュー機能を削除 2019-02-21 00:13:46 +09:00
c89aa7eb95 デッキでメディア投稿のみ表示するオプションが機能していない問題を修正 2019-02-21 00:12:09 +09:00
43f4c5b7cd Fix #1537 2019-02-21 00:04:23 +09:00
2b6c566386 Fix template styling 2019-02-21 00:02:23 +09:00
91ef328b6b 「みつける」でミュートしているユーザーが含まれる問題を修正 2019-02-20 22:34:52 +09:00
5a9d9dc41d Fix indent 2019-02-20 22:33:22 +09:00
a48e503caa Fix indent 2019-02-20 22:33:13 +09:00
fe00cb9ad5 ハイライトでミュートしているユーザーの投稿が含まれる問題を修正 2019-02-20 22:31:21 +09:00
ed0fdaddbd Fix #4333 2019-02-20 22:21:12 +09:00
893795a31d Update some logs 2019-02-20 22:05:34 +09:00
f1047f1ce5 10.87.5 2019-02-20 16:35:36 +09:00
9beddc941a 返信が遷移後も残り続ける問題を修正 2019-02-20 16:35:00 +09:00
3a6a01d2d6 New Crowdin translations (#4328)
* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Chinese Simplified)
2019-02-20 16:27:04 +09:00
e0e4bdbdbc Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-02-20 16:14:39 +09:00
b3daf79b6a Update CHANGELOG.md 2019-02-20 16:14:31 +09:00
81aa21915b Fix #4329 (#4330)
* Create xml.ts

* Update well-known.ts

* Update well-known.ts

* Fix typo

* Update well-known.ts

* Update well-known.ts
2019-02-20 16:13:43 +09:00
5aadd80243 Update CHANGELOG.md 2019-02-20 13:41:55 +09:00
23350b1cbc 🎨 2019-02-20 13:41:31 +09:00
daff0977cb Resolve #747 2019-02-20 13:38:48 +09:00
c1e7d56ff8 Fix bug 2019-02-20 10:15:06 +09:00
61aef56f83 🎨 2019-02-20 10:14:11 +09:00
249f591403 10.87.4 2019-02-20 07:21:58 +09:00
36599c82d1 New translations ja-JP.yml (Chinese Simplified) (#4323) 2019-02-20 07:21:12 +09:00
7615b1ea0a Improve usability 2019-02-20 07:19:05 +09:00
d8de9f8eba 🎨 2019-02-20 07:15:08 +09:00
8c0e65ce6f Fix error 2019-02-20 07:09:57 +09:00
9aa24c0552 🎨 2019-02-20 07:08:54 +09:00
47bf06f432 人気のタグは常に上 (#4314) 2019-02-20 06:46:35 +09:00
99d291c71b Update CHANGELOG.md 2019-02-20 06:45:16 +09:00
d51cafca74 Fix #4326 2019-02-20 06:44:40 +09:00
7921f8cd43 🎨 2019-02-20 01:00:59 +09:00
1b8467d5e5 [ImgBot] Optimize images (#4322)
*Total -- 482.97kb -> 427.88kb (11.41%)

/src/client/assets/misskey-php-like-logo.png -- 48.77kb -> 41.66kb (14.59%)
/assets/ss/explore.jpg -- 272.68kb -> 238.07kb (12.69%)
/assets/ss/user.jpg -- 161.52kb -> 148.15kb (8.27%)
2019-02-19 20:47:11 +09:00
e13b2689b5 New Crowdin translations (#4318)
* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)
2019-02-19 20:12:52 +09:00
9c167acbd9 Supports scrollbar width in Firefox (#4319)
* Supports scrollbar width in Firefox

* fix style
2019-02-19 20:12:19 +09:00
1bc531edbd Update README.md 2019-02-19 20:09:33 +09:00
b4d0db9202 Create user.jpg 2019-02-19 20:07:52 +09:00
bd2b681367 Create explore.jpg 2019-02-19 20:01:38 +09:00
f0edf81cc4 Remove unused import 2019-02-19 08:48:25 +09:00
e81ac05ba6 Fix bug 2019-02-19 05:17:36 +09:00
6279ce8f22 Add fallback for locales (#4109)
* Update index.js

* Update index.js
2019-02-19 04:04:05 +09:00
0fd20cf588 New Crowdin translations (#4254)
* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

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

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

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

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

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

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

* New translations ja-JP.yml (English)

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

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

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)
2019-02-19 04:01:22 +09:00
f2d55e7f60 Fix #4308 (#4310) 2019-02-19 03:48:21 +09:00
963b0db3d3 コンポーネント整理 2019-02-19 03:38:34 +09:00
aeca115a37 developにキャッシュFlushリンクを追加 (#4313) 2019-02-18 20:55:52 +09:00
6f97142b59 10.87.3 2019-02-18 20:54:14 +09:00
b31d1ce61d フォローリクエスト数がおかしい場合の応急処置APIを追加 2019-02-18 20:52:41 +09:00
b07cd37a16 🎨 2019-02-18 20:48:39 +09:00
69b74a46b9 Split cropperjs to reduce bundle size 2019-02-18 19:26:53 +09:00
882d829558 Fix #4063 2019-02-18 19:22:10 +09:00
532821d503 Fix #4309
Close #4311
2019-02-18 18:50:45 +09:00
522ce67498 10.87.2 2019-02-18 11:49:32 +09:00
0e046faf4a みつけるの人気のタグを第2ソートで連合含めたユーザー数にしたりユーザーのタグ以外は除外するように 2019-02-18 11:47:25 +09:00
d9092dc81f ユーザーが存在しない場合の表示を追加 2019-02-18 11:27:15 +09:00
92a4e90026 Remove duplicated route name 2019-02-18 11:21:50 +09:00
07dccad5b1 Avoid dupulicated route name 2019-02-18 11:20:20 +09:00
146b0d2889 Improve usability 2019-02-18 11:16:52 +09:00
388565fb10 Use # instead of v-slot: 2019-02-18 11:13:56 +09:00
da4ba51a74 Fix bug 2019-02-18 10:05:58 +09:00
1edcd136a4 Revert "🎨"
This reverts commit 9883c751da.
2019-02-18 10:02:32 +09:00
9883c751da 🎨 2019-02-18 09:57:19 +09:00
f78b28b995 🎨 2019-02-18 09:51:22 +09:00
54d40420ad Use v-slot instead of slot 2019-02-18 09:48:00 +09:00
ba1492f977 Refactor client (#4307)
* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Fix bug

* 🎨

* 🎨

* 🎨
2019-02-18 09:17:55 +09:00
efd0368e56 Resolve #4305 2019-02-18 04:52:40 +09:00
a766a57af9 誰もフォローしていない状態でホームTLを表示したときにexploreページへ誘導するように 2019-02-18 04:45:16 +09:00
3bdd8a2d90 Update CircleCI configuration (#4297)
* Update config.yml

* Fix typo

* Add name
2019-02-18 02:44:46 +09:00
7ef1205f8b 10.87.1 2019-02-18 01:11:28 +09:00
e8db63e788 Fix bug 2019-02-18 01:11:14 +09:00
0bcef2453c 10.87.0 2019-02-18 00:51:39 +09:00
b9f549135c Fix bug 2019-02-18 00:49:34 +09:00
87b0017386 Fix bug 2019-02-18 00:47:45 +09:00
cc8ff556d4 Fix bug 2019-02-18 00:45:43 +09:00
021f74da54 🎨 2019-02-18 00:41:05 +09:00
f9389802d7 Update CHANGELOG.md 2019-02-18 00:39:31 +09:00
18dd172c97 Chore: Fix type definition 2019-02-18 00:20:14 +09:00
1d5a54ff6f ハッシュタグでユーザー検索できるように (#4298)
* ハッシュタグでユーザー検索できるように

* 🎨

* Increase limit

* リモートユーザーも表示

* Fix bug

* Fix bug

* Improve performance
2019-02-17 23:41:47 +09:00
03e2c7eec6 Fix #4300 (#4304)
* Fix #4300

* sidebar
2019-02-17 23:40:00 +09:00
0902727d1c Update @types/node requirement from 10.12.21 to 10.12.24 (#4231)
Updates the requirements on [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped) to permit the latest version.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-02-17 21:42:40 +09:00
496895634d Update @types/sharp requirement from 0.21.1 to 0.21.2 (#4263)
Updates the requirements on [@types/sharp](https://github.com/DefinitelyTyped/DefinitelyTyped) to permit the latest version.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-02-17 21:42:03 +09:00
9414e9e258 Update cssnano requirement from 4.1.8 to 4.1.10 (#4265)
Updates the requirements on [cssnano](https://github.com/cssnano/cssnano) to permit the latest version.
- [Release notes](https://github.com/cssnano/cssnano/releases)
- [Commits](https://github.com/cssnano/cssnano/commits/v4.1.10)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-02-17 21:41:36 +09:00
357528d139 Use object instead of if chain (#4212) 2019-02-17 21:40:53 +09:00
c4efbdf4c7 Fix #4292 (#4294)
* Fix #4292

* use commit
2019-02-17 21:28:20 +09:00
fb4a921cd9 Docker: Add support for service worker (#4296)
Service worker requires web-push package.
2019-02-17 21:26:00 +09:00
683b242215 Use Record<string, number> instead of any (#4293) 2019-02-17 19:38:46 +09:00
a5660d6c82 Exploreページに新規ユーザー一覧を追加 (#4295) 2019-02-17 17:53:51 +09:00
f632ec50c1 10.86.2 2019-02-17 03:29:17 +09:00
a55d15214b Update ja-JP.yml 2019-02-17 03:28:36 +09:00
f1709a2cc2 Update CHANGELOG.md 2019-02-17 03:23:43 +09:00
effa542958 Improve user page 2019-02-17 03:23:34 +09:00
e8bf742c87 別タブでルートより下を開いたときにはデッキにしないように (#4291) 2019-02-17 02:26:17 +09:00
2e6652edce Resolve #4272 2019-02-17 01:50:17 +09:00
230c204b48 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-02-17 01:12:08 +09:00
3755c600b1 Update CHANGELOG.md 2019-02-17 01:11:59 +09:00
24513fc0a3 Update media-banner.vue (#4287) 2019-02-17 01:09:49 +09:00
0a79a6564a Add support for disabled timeline to deck
Close #4286
Resolve #4275
2019-02-17 01:04:21 +09:00
562bb5842b [Client] Improve featured notes page 2019-02-17 00:28:41 +09:00
ec3ca3032e ミュートワードで正規表現を使えるように 2019-02-16 19:37:05 +09:00
890770c275 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-02-16 17:42:01 +09:00
9ed58a1b4e 🎨 2019-02-16 17:41:54 +09:00
08984be2fe Update config.yml 2019-02-16 17:05:56 +09:00
e3ade148ca 10.86.1 2019-02-16 16:59:56 +09:00
34c0eff89f 🎨 2019-02-16 16:46:06 +09:00
40aba47a47 Fix bug 2019-02-16 16:43:17 +09:00
6736f51134 Use home icon 2019-02-16 16:40:17 +09:00
9d826d6e52 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-02-16 16:39:42 +09:00
902d9bc7a5 Fix bug 2019-02-16 16:39:34 +09:00
b6c86e2845 Change home button to timeline (#4282)
* Home to Timeline

* remove home from locales
2019-02-16 16:27:24 +09:00
34dffdfc8f Update config.yml 2019-02-16 11:10:06 +09:00
a56f3f1d89 10.86.0 2019-02-16 11:06:45 +09:00
88dc4c83cb Improve UI 2019-02-16 10:58:44 +09:00
5a28dc0198 Improve user-list component 2019-02-16 09:27:53 +09:00
40d2650d49 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-02-16 08:51:38 +09:00
545e83efb1 🎨 2019-02-16 08:51:35 +09:00
d4b00a5482 Update README.md [AUTOGEN] (#4280) 2019-02-16 06:58:51 +09:00
c2b1bbeec5 Exploreページを実装 2019-02-16 06:50:58 +09:00
8c8f165a6e Add missing comma 2019-02-16 04:51:57 +09:00
04553de230 Fix #4276 (#4278) 2019-02-15 23:43:49 +09:00
2776934728 Update is-objectid.ts (#4277)
* Update is-objectid.ts

* Update is-objectid.ts
2019-02-15 23:42:44 +09:00
0064dbb010 🎨 2019-02-15 19:40:11 +09:00
d52e671adf Update README.md [AUTOGEN] (#4274) 2019-02-15 17:20:17 +09:00
6017dc2dff 10.85.2 2019-02-15 15:38:10 +09:00
937f7cbd60 🎨 2019-02-15 15:35:52 +09:00
f8b3f66904 Refactor 2019-02-15 15:12:23 +09:00
9d5701f35a Update deck.vue 2019-02-15 15:06:15 +09:00
dff65810c6 Increase featured limit 2019-02-15 15:01:05 +09:00
6752cf1d64 🎨 2019-02-15 15:00:20 +09:00
8336910a59 🎨 2019-02-15 14:58:15 +09:00
957a1149e0 検索結果を内部コンポーネントに 2019-02-15 14:52:21 +09:00
e8719ff6e6 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-02-15 14:29:59 +09:00
28b63298e5 Increase featured limit 2019-02-15 14:29:42 +09:00
dd4dee8095 デッキから フォロー/フォロワー ページに行けるように (#4271) 2019-02-15 14:27:16 +09:00
c47818fed4 🎨 2019-02-15 08:52:09 +09:00
e53c383908 10.85.1 2019-02-15 08:42:48 +09:00
55c9c0436b 🎨 2019-02-15 08:42:41 +09:00
66b79e5e24 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-02-15 08:40:25 +09:00
514b830910 Fix bug 2019-02-15 08:40:16 +09:00
e4f799bf1d Hide localOnly from welcome TL (#4257) 2019-02-15 08:38:59 +09:00
b383427d3d 🎨 2019-02-15 08:37:46 +09:00
e969518139 Fix bug 2019-02-15 08:34:54 +09:00
113fe294bd Fix #4267
Close #4269
2019-02-15 08:32:18 +09:00
a4d92f781f 10.85.0 2019-02-15 06:34:45 +09:00
414cac49c3 Improve featured api 2019-02-15 06:31:22 +09:00
95b157ac3e Add featured page 2019-02-15 06:31:03 +09:00
8e3d884081 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-02-15 06:06:24 +09:00
9def6fcadd 🎨 2019-02-15 06:06:13 +09:00
7837bd44fc Add i18n when timelines are empty (#4261) 2019-02-15 05:59:07 +09:00
a6c3663155 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-02-15 05:58:18 +09:00
0b5afadbb8 Update setup.ja.md 2019-02-15 05:58:09 +09:00
43864f0da4 既にフォローされている場合はフォローリクエストを生成しないように (#4266) 2019-02-15 05:56:28 +09:00
6a0d9d70ed 非ログイン時にお知らせを表示 2019-02-15 05:55:59 +09:00
63c6dce68e 🎨 2019-02-15 05:51:22 +09:00
53422ffcb2 Improve desktop UX (#4262)
* wip

* wip

* wip

* wip

* wip

* wip

* Merge

* wip

* wip

* wip

* wip

* wip

* wip
2019-02-15 05:08:59 +09:00
38ca514f53 Update README.md [AUTOGEN] (#4253) 2019-02-15 00:58:57 +09:00
caea0f0376 Change minimum allowed maxNoteTextLength to 0 (#4256) 2019-02-14 16:30:20 +09:00
25a8b26977 Emojify user.friends of desktop view (#4249) 2019-02-14 13:42:14 +09:00
bcaefe8d62 Fix huge close icon of friends-maker (#4245) 2019-02-14 13:41:48 +09:00
46f1e8c599 Restore web max-age to 5 minutes (#4246) 2019-02-14 13:41:28 +09:00
16230f320e Unify translations of frequently replied users (#4248) 2019-02-14 13:40:48 +09:00
ace6419aef 無効化されているタイムラインのフォールバック (#4242)
* Update timeline.vue

* Update home.vue
2019-02-14 13:39:42 +09:00
77fb9eb2be Fix title of robot icon in user.header of desktop view (#4243) 2019-02-14 03:01:42 +09:00
aa7fc7c893 10.84.2 2019-02-14 01:27:22 +09:00
8fc170109f Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-02-14 01:13:28 +09:00
ad12d00d7e ハッシュタグの集計期間を短くした
Resolve #4238 ?
2019-02-14 01:13:19 +09:00
fa5ea45726 Docker: Remove unnecessary workaround for BusyBox's "free" (#4199) (#4213)
systeminformation gets incorrect memory information due to BusyBox's
"free" issue.(#3409)
A workaround for avoiding it was made.

But it never works because the runner container has no effect.
It should be deleted.
2019-02-13 23:45:58 +09:00
4b6c113251 Add prelude function for URL Query (#4135)
* Update string.ts

* Refactor

* Update string.ts

* Update wrap-url.ts

* Update string.ts

* Update get-static-image-url.ts

* Use querystring.stringify

* Update outbox.ts

* Back to the urlQuery

* Update followers.ts

* Update following.ts

* Update outbox.ts

* Update string.ts

* Update get-static-image-url.ts

* Update string.ts

* Update string.ts

* Separate prelude files
2019-02-13 23:45:35 +09:00
3548290ff2 Fix tslint.json styles (#4219) 2019-02-13 23:43:55 +09:00
b165b90c40 Update dependencies 2019-02-13 21:57:00 +09:00
4ffe9c908b Make ignore pointer events 2019-02-13 21:48:20 +09:00
a135f75e71 🎨 2019-02-13 21:47:53 +09:00
cbc61ba03d Add GIF badge (#4241) 2019-02-13 21:43:58 +09:00
5aa58da918 Migrate cafy to 14.0 (#4240) 2019-02-13 16:33:07 +09:00
b083430011 Sort ISSUE_TEMPLATE (#4236) 2019-02-13 15:59:51 +09:00
a8946b0404 Update nodeinfo.ts (#4239)
* Update nodeinfo.ts

* Update nodeinfo.ts

* Update nodeinfo.ts

* Update nodeinfo.ts

* Update nodeinfo.ts
2019-02-13 15:56:45 +09:00
0303bccc61 Update vue-i18n requirement from 8.8.0 to 8.8.1 (#4235)
Updates the requirements on [vue-i18n](https://github.com/kazupon/vue-i18n) to permit the latest version.
- [Release notes](https://github.com/kazupon/vue-i18n/releases)
- [Changelog](https://github.com/kazupon/vue-i18n/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/kazupon/vue-i18n/commits/v8.8.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-02-13 14:46:41 +09:00
f3ce8564ea よく話すユーザーからサスペンドされたユーザーを隠すなど (#4228)
* Resolve #4226

* fix

* Fix: anonymousでアクセスするとサスペンドユーザーが隠れない

* fix
2019-02-12 17:19:15 +09:00
52c3f9e98c 10.84.1 2019-02-11 23:42:39 +09:00
6c8b4184fe Update CHANGELOG.md 2019-02-11 23:41:00 +09:00
a0979f8435 Update dependencies 🚀 2019-02-11 23:40:10 +09:00
faba21d003 Remove unused import 2019-02-11 23:39:05 +09:00
d82c5dff71 Fix bug 2019-02-11 23:37:15 +09:00
59fbc5b054 New translations ja-JP.yml (English) (#4221) 2019-02-11 22:37:28 +09:00
2c1a7f4392 Fix #4152 (#4224)
* Fix #4152

* fix

* remove unused code
2019-02-11 22:37:20 +09:00
769e6182d8 New Crowdin translations (#4220)
* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)
2019-02-11 01:39:46 +09:00
88176a17a3 New Crowdin translations (#4218)
* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (English)
2019-02-10 23:17:49 +09:00
fc660e869f [Client] Make default sort lastCommunicatedAt in instances list of admin panel 2019-02-10 19:46:47 +09:00
dc04869650 [Client] Make default origin local in user list of admin panel 2019-02-10 19:44:57 +09:00
93c3f34813 管理画面でサイレンスされているユーザーを一覧できるように 2019-02-10 19:43:46 +09:00
1282eed192 Update CHANGELOG.md 2019-02-10 19:39:42 +09:00
962b3ca78e [Client] Fix bug 2019-02-10 19:38:17 +09:00
62d17c9266 Optimize url-preview image (#4216) 2019-02-10 19:19:26 +09:00
f5b928a537 New translations ja-JP.yml (English) (#4210) 2019-02-10 19:19:10 +09:00
c8811894b5 Update package.json 2019-02-10 17:58:03 +09:00
e579b49228 Update package.json 2019-02-10 17:55:42 +09:00
9561908ad3 Update user.followers-you-know.vue (#4215) 2019-02-10 17:15:41 +09:00
fac7ebf4f6 Fix Dockerfile (#4214)
* Update Dockerfile

* Update Dockerfile
2019-02-10 16:14:48 +09:00
a0769d65e3 Update package.json 2019-02-10 15:08:13 +09:00
d17aa4b24e New translations ja-JP.yml (Korean) (#4209) 2019-02-10 11:45:00 +09:00
310371658b 重いのでジョブキュー無効化 2019-02-10 11:44:08 +09:00
7ca073aafd Hide unusable follow buttons (#4208) 2019-02-10 05:56:11 +09:00
7216d0fb1f New Crowdin translations (#4201)
* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)
2019-02-10 05:34:23 +09:00
22a9e950c7 deckにフォローされていますマークを追加 (#4207)
* deckにフォローされていますを追加

* opacity
2019-02-10 05:26:49 +09:00
6683d50bae Update CircleCI configuration (#4204)
* Update config.yml

* Update config.yml

* Update config.yml

* Update config.yml

* Update config.yml
2019-02-10 02:17:43 +09:00
8f26176273 Update README.md (#4198) 2019-02-09 13:35:04 +09:00
9ea7d446e8 10.84.0 2019-02-09 13:04:58 +09:00
757312ba52 Limit the parallelism of AP object processing (#4193) 2019-02-09 13:01:21 +09:00
1675c473d4 🎨 2019-02-09 12:43:26 +09:00
3a3a5d4bfb Update vue 2019-02-09 12:35:52 +09:00
4a41499c95 🎨 2019-02-09 12:34:42 +09:00
a1d1cb58e0 New Crowdin translations (#4184)
* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

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

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

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

* New translations ja-JP.yml (Catalan)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

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

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

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)
2019-02-09 12:29:44 +09:00
acb82fe7b6 フォロー処理のリファクタリング (#4196)
* Fix #4185

* Fix bug
2019-02-09 12:04:03 +09:00
b25df24cea Merge pull request #4197 from syuilo/dependabot/npm_and_yarn/@fortawesome/free-solid-svg-icons-5.7.1 2019-02-08 20:37:00 +00:00
39284eb9b2 Update @fortawesome/free-solid-svg-icons requirement from 5.6.3 to 5.7.1
Updates the requirements on [@fortawesome/free-solid-svg-icons](https://github.com/FortAwesome/Font-Awesome) to permit the latest version.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/commits/5.7.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-02-08 20:27:31 +00:00
31b0e552a2 Improve usability 2019-02-09 01:53:46 +09:00
c4a2a31cf3 Update ja-JP.yml (#4195)
Fix incorrect strings
2019-02-08 23:10:42 +09:00
4497ddb3f3 Doc: Add bug details to CHANGELOG (#4191)
Bug in Misskey 10.82.3 (#4179) is critical to server administrators,
and they need more detail about it.
2019-02-08 21:04:04 +09:00
5e0eda9526 Improve instances manegement
Resolve #4187
2019-02-08 20:56:16 +09:00
606 changed files with 17905 additions and 24353 deletions

View File

@ -2,6 +2,11 @@ version: 2.1
executors:
default:
working_directory: /tmp/workspace
docker:
- image: misskey/ci:latest
- image: circleci/mongo:latest
with-redis:
working_directory: /tmp/workspace
docker:
- image: misskey/ci:latest
@ -11,20 +16,8 @@ executors:
working_directory: /tmp/workspace
docker:
- image: docker:latest
alpine:
working_directory: /tmp/workspace
docker:
- image: alpine:latest
jobs:
ok:
executor: alpine
steps:
- run:
name: OK
command: |
echo -e '\033[0;32mOK\033[0;39m'
build:
executor: default
steps:
@ -60,18 +53,19 @@ jobs:
key: yarn-v1-arch-{{ arch }}-env-{{ .Environment.variableName }}-package-{{ checksum "package.json" }}-lock-{{ checksum "yarn.lock" }}
paths:
- node_modules
# - store_artifacts:
# path: built
- persist_to_workspace:
root: .
paths:
- .
test:
parameters:
without_redis:
executor:
type: string
default: ""
executor: default
default: "default"
without_redis:
type: boolean
default: false
executor: <<parameters.executor>>
steps:
- attach_workspace:
at: /tmp/workspace
@ -94,12 +88,11 @@ jobs:
key: yarn-v1-arch-{{ arch }}-env-{{ .Environment.variableName }}-package-{{ checksum "package.json" }}-lock-{{ checksum "yarn.lock" }}
paths:
- node_modules
docker:
parameters:
with_deploy:
type: string
default: ""
type: boolean
default: false
executor: docker
steps:
- checkout
@ -126,51 +119,76 @@ jobs:
workflows:
version: 2
build-and-test:
nodejs:
jobs:
- ok:
- hold:
name: manual-build-trigger
type: approval
filters:
branches:
only:
- l10n_develop
- imgbot
- patch-autogen
ignore: master
- build:
filters:
branches:
ignore:
- l10n_develop
- imgbot
- patch-autogen
- test:
name: manual-build
requires:
- build
- manual-build-trigger
filters:
branches:
ignore:
# - master
- l10n_develop
- imgbot
- patch-autogen
- test:
without_redis: "true"
requires:
- build
filters:
# branches:
# only: master
branches:
ignore:
# - master
- l10n_develop
- imgbot
- patch-autogen
# - docker:
# filters:
# branches:
# ignore: master
- docker:
with_deploy: "true"
ignore: master
- build:
name: auto-build
filters:
branches:
only: master
- test:
name: manual-test-with-redis
executor: with-redis
requires:
- manual-build
filters:
branches:
ignore: master
- test:
name: auto-test-without-redis
executor: with-redis
requires:
- auto-build
filters:
branches:
only: master
- test:
name: manual-test-with-redis
without_redis: true
requires:
- manual-build
filters:
branches:
ignore: master
- test:
name: auto-test-without-redis
without_redis: true
requires:
- auto-build
filters:
branches:
only: master
docker:
jobs:
- hold:
name: manual-build-trigger
type: approval
filters:
branches:
ignore: master
- docker:
name: manual-build
requires:
- manual-build-trigger
filters:
branches:
ignore: master
- docker:
name: auto-build
with_deploy: true
filters:
branches:
only: master

View File

@ -1,30 +1,30 @@
---
name: Bug Report
name: 🐛 Bug Report
about: Create a report to help us improve
title: ''
labels: bug
labels: ⚠️bug?
assignees: ''
---
# Summary
## Summary
<!-- Tell us what the bug is -->
# Expected Behavior
## Expected Behavior
<!--- Tell us what should happen -->
# Actual Behavior
## Actual Behavior
<!--- Tell us what happens instead of the expected behavior -->
# Steps to Reproduce
## Steps to Reproduce
1.
2.
3.
# Environment
## Environment
<!-- Tell us where on the platform it happens -->

View File

@ -1,12 +1,12 @@
---
name: Feature Request
name: Feature Request
about: Suggest an idea for this project
title: ''
labels: feature
labels: ✨Feature
assignees: ''
---
# Summary
## Summary
<!-- Tell us what the suggestion is -->

View File

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

View File

@ -1,12 +0,0 @@
---
name: Client-side Feature Request
about: Suggest an idea for this project
title: ''
labels: client-side, feature
assignees: ''
---
# Summary
<!-- Tell us what the suggestion is -->

View File

@ -1,31 +0,0 @@
---
name: Server-side Bug Report
about: Create a report to help us improve
title: ''
labels: bug, server-side
assignees: ''
---
# Summary
<!-- Tell us what the bug is -->
# Expected Behavior
<!--- Tell us what should happen -->
# Actual Behavior
<!--- Tell us what happens instead of the expected behavior -->
# Steps to Reproduce
1.
2.
3.
# Environment
<!-- Tell us where on the platform it happens -->
<!-- e.g. your Node.js version, your OS -->

View File

@ -1,12 +0,0 @@
---
name: Server-side Feature Request
about: Suggest an idea for this project
title: ''
labels: feature, server-side
assignees: ''
---
# Summary
<!-- Tell us what the suggestion is -->

View File

@ -1,4 +1,4 @@
# Summary
## Summary
<!--
-

View File

@ -1,6 +1,234 @@
ChangeLog
=========
If you encounter any problems with updating, please try the following:
1. `npm run clean` or `npm run cleanall`
2. Retry update (Don't forget `npm i`)
10.93.0
----------
* フォローリストをインポートできるように
* embedプレイヤーを閉じれるように
* リストをインポートしたときにプロキシアカウントがフォローするように修正
* Web Share Targetの動作を修正
* おすすめアンケートのチョイスを修正
* デザインの調整
10.92.4
----------
* リストのエクスポートをできるように
* ジョブキューウィジェットを追加
* URLプレビューのサムネイルが表示されないことがある問題を修正
10.92.3
----------
* 管理画面の各種ジョブ数がおかしい問題を修正
* ジョブキューの動作を調整
10.92.2
----------
* 管理画面で各種ジョブ数を一覧できるように
* ジョブキューの動作を修正
* notes/children が遅い問題を修正
10.92.1
----------
* アンケートの結果をリモートと同期するように
* ジョブキューを有効に
* 投稿の返信一覧に引用Renoteも含めるように
* robots.txt追加
* デザインの調整
10.92.0
----------
* Mastodonのアンケートに対応
* 複数回答できるアンケートを作成できるように
* アンケートに期限を設定できるように
* 絵文字ピッカーを改良
* ハッシュタグの判定を改善
* デッキのタグTLで別のタグをクリックしてもTLが変わらない問題を修正
* ユーザーサジェストで表示名が変わらない問題を修正
* UIのバグ修正
* デザインの調整
* など
10.91.2
----------
* 10.91.1 で追加した依存関係にXSS脆弱性があったので他のパッケージに差し替え
* 初期アクセスでテーマが正しく設定されない問題を修正
10.91.1
----------
* ログビューを強化
* テーマの切り替えをなめらかに
* SVGの判定を修正
10.91.0
----------
* ログを管理画面で見れるように
* 文字サイズを設定できるように
* 返信が表示されない問題を修正
* ユーザーページでユーザーを切り替えても前の人の情報が残る問題を修正
* デザインの調整
10.90.4
----------
* url-previewでembedプレイヤー展開をオプトインにするように
* デザインの調整
* ユーザビリティの強化
10.90.3
----------
* モバイルのデッキで投稿フォームウィジェットが設置できなかった問題を修正
* ドキュメントの強化
* デザインの調整
* ユーザビリティの強化
10.90.2
----------
* アカウントが削除できない問題を修正
* ドキュメントの強化
* デザインの調整
10.90.1
----------
* アカウントを作成したときに自動でホームに遷移しない問題を修正
* ユーザビリティの強化
10.90.0
----------
* モバイル版でもデッキを使えるように
* 公開範囲がホームの投稿はハイライトに載せないように
* ドキュメントの強化
* ユーザーをリストに追加できない問題を修正
* UIの修正
10.89.1
----------
* リアクション数を表示するように
* モバイル版でドライブのフォルダを削除できるように
* ドキュメントの強化
* プロフィールが更新できない場合がある問題を修正
* UIの修正
10.89.0
----------
* APIのエラーの形式を統一
* APIドキュメント刷新
* /api/v1/instance/peers 復活
* 「返信が遷移後も残り続ける問題を修正」([9beddc9](https://github.com/syuilo/misskey/commit/9beddc941a716f1322ae0b7d71d159edd642a399)) によって遷移前に返信が表示されなくなった問題を修正
* デッキモードにてユーザーのプロフィールを連続で見たとき、アクティビティや画像が前のユーザーのもののまま表示される問題を修正
10.88.0
----------
* アカウントの削除を試験的に実装
* デッキでメディア投稿のみ表示するオプションが機能していない問題を修正
* デッキでユーザーを表示したときにタイムラインが残存する問題を修正
* モバイルのユーザーページで、ユーザーAのタイムラインから他のユーザーBを選択してユーザーBのタイムラインに移動したとき、ユーザーAのタイムラインが残る問題を修正
* ハイライトでミュートしているユーザーの投稿が含まれる問題を修正
* 「みつける」でミュートしているユーザーが含まれる問題を修正
* デザインの調整
10.87.5
----------
* モバイル版でも連携サービスを表示するように
* webfingerのacceptが反映されない問題を修正
* 返信が遷移後も残り続ける問題を修正
* デザインの調整
10.87.4
----------
* フォローリクエストを許可するときにエラーになる問題を修正
* デザインの調整
10.87.3
----------
* 開発モードでビルドしてもスクリプトが404になる問題を修正
* 拡張子判別だとアイコンやバナー設定で対応していないと表示される問題を修正
* フォローリクエスト数がおかしい場合の応急処置APIを追加
* デザインの調整
10.87.2
----------
* みつけるの人気のタグを第2ソートで連合含めたユーザー数にしたりユーザーのタグ以外は除外するように
* デザインの調整
10.87.1
----------
* ハッシュタグ検索で大文字小文字が区別されてしまう問題を修正
10.87.0
----------
* ハッシュタグでユーザー検索できるように
* Exploreページに新規ユーザー一覧を追加
* デッキ使用中にホーム扱いで開かれた時にタイムラインボタン等がない問題を修正
* デッキ使用中に / 以外でリロードした際にホームモードになる問題を修正
10.86.2
----------
* 別タブでルートより下を開いたときにはデッキにしないように
* 横のナビゲーションバーの改善
* MIDIファイルがオーディオ扱いになる問題を修正
* ミュートワードで正規表現を使えるように
* デッキで無効になったタイムラインに警告を表示するように
* デザインの調整
* その他細かな修正
10.86.1
----------
* ナビゲーションバーの「ホーム」を「タイムライン」に改称
* モバイル版でユーザーページが二重に描画される問題を修正
* ユーザー一覧の「もっと読み込む」の動作がおかしい問題を修正
* デザインの調整
10.86.0
----------
* Exploreページを実装
* UIを改良
* その他細かな修正
10.85.2
----------
* デッキから フォロー/フォロワー ページに行けるように
* ナビゲーションが発生したときに最上部までスクロールように
* 検索結果でページ遷移が発生する問題を修正
* デザインの調整
10.85.1
----------
* ローカルのみ投稿をログイン画面のタイムラインに表示しないように
* ナビゲーションバーを横にしてるとデッキに行けない問題を修正
10.85.0
----------
* デスクトップ版のUIを改良
* 投稿ハイライトページを実装
* 無効化されているタイムラインのフォールバック
* 既にフォローされている場合はフォローリクエストを生成しないように
* その他細かな修正
10.84.2
----------
* GIF画像にGIFバッジを表示
* よく話すユーザーからサスペンドされたユーザーを隠すなど
* nodeinfoが重い問題を修正
* ハッシュタグクラウド取得が重い問題を軽減
10.84.1
----------
* deckにフォローされていますマークを追加
* URLプレビューのサムネイルの調整
* 管理画面でサイレンスされているユーザーを一覧できるように
* ドキュメントにアクセスできない問題を修正
* ジョブキューを無効化
* 軽微なバグ修正
10.84.0
----------
* インスタンス管理の強化
* パフォーマンスの問題の修正
* バグ修正
10.83.0
----------
* 特定のインスタンスをブロックをできるように
@ -9,7 +237,7 @@ ChangeLog
10.82.4
----------
* 起動できなくなることがある問題を修正
* 10.82.3でオブジェクトストレージの設定をしていると起動しなくなるバグを修正
10.82.3
----------

View File

@ -40,10 +40,10 @@ Stands for _**M**iss**k**ey_.
Stands for _**S**ervice**W**orker_.
### Nyaize
な を にゃ にすること
Convert な(na) to にゃ(nya)
#### Denyaize
Nyaizeを解除すること
Revert Nyaize
## Code style
### Don't use `export default`
@ -59,16 +59,16 @@ export function something(foo: string): string {
## Directory structure
```
src ... ソースコード
@types ... 外部ライブラリなどの型定義
prelude ... Misskeyに関係ないかつ副作用なし
misc ... 副作用なしのユーティリティ処理
service ... 副作用ありの共通処理
queue ... ジョブキューとジョブ
server ... Webサーバー
client ... クライアント
src ... Source code
@types ... Type definitions
prelude ... Independence utils for coding JavaScript without side effects
misc ... Independence utils for Misskey without side effects
service ... Common functions with side effects
queue ... Job queues and Jobs
server ... Web Server
client ... Client
mfm ... MFM
test ... テスト
test ... Test code
```

View File

@ -8,7 +8,6 @@ WORKDIR /misskey
FROM base AS builder
RUN unlink /usr/bin/free
RUN apk add --no-cache \
autoconf \
automake \
@ -20,24 +19,20 @@ RUN apk add --no-cache \
make \
nasm \
pkgconfig \
procps \
python \
zlib-dev
RUN npm i -g node-gyp
COPY ./package.json ./
RUN npm i
RUN npm i -g yarn
COPY . ./
RUN node-gyp configure \
&& node-gyp build \
&& npm run build
RUN yarn install
RUN yarn build
FROM base AS runner
RUN apk add --no-cache \
ffmpeg \
tini
RUN npm i -g web-push
ENTRYPOINT ["/sbin/tini", "--"]
COPY --from=builder /misskey/node_modules ./node_modules

View File

@ -1,11 +1,11 @@
<img src="https://github.com/syuilo/misskey/blob/develop/assets/ai-orig.png?raw=true" align="right" height="320px"/>
<a href="https://ai.misskey.xyz/"><img src="https://github.com/syuilo/misskey/blob/develop/assets/ai-orig.png?raw=true" align="right" height="320px"/></a>
[![Misskey](/assets/title.png)](https://misskey.xyz/)
================================================================
[![CircleCI](https://img.shields.io/circleci/project/github/syuilo/misskey.svg?style=for-the-badge)](https://circleci.com/gh/syuilo/misskey)
[![Dependencies](https://img.shields.io/david/syuilo/misskey.svg?style=for-the-badge)](https://david-dm.org/syuilo/misskey)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge)](http://makeapullrequest.com)
[![CircleCI](https://img.shields.io/circleci/project/github/syuilo/misskey.svg?style=for-the-badge&logo=circleci)](https://circleci.com/gh/syuilo/misskey)
[![Dependencies](https://img.shields.io/david/syuilo/misskey.svg?style=for-the-badge&logo=npm)](https://david-dm.org/syuilo/misskey)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge&logo=github)](http://makeapullrequest.com)
**A forever evolving, sophisticated microblogging platform.**
@ -61,6 +61,14 @@ Organize and store your files! Want to post a picture you have already uploaded?
...and more! Experience Misskey with your own eyes at [misskey.xyz](https://misskey.xyz) or join one of the [other instances](https://joinmisskey.github.io/) that are available.
Screen shots
----------------------------------------------------------------
### Profile page
<img src="/assets/ss/user.jpg" width="500px"/>
### Explore users
<img src="/assets/ss/explore.jpg" width="500px"/>
:new: What's new
----------------------------------------------------------------
Please see the [Release notes](./CHANGELOG.md).
@ -94,55 +102,59 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
<!-- PATREON_START -->
<table><tr>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12190916/fb7fa7983c14425f890369535b1506a4/1?token-time=2145916800&token-hash=WeuDzzz24cRXJogyIkU-mxARqkdyms-rcZKbO-GpGjw%3D" alt="weep" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12731202/0995c46cdcb54153ab5f073f5869b70a/1?token-time=2145916800&token-hash=prtYqPOiSHBulhM7NU0VzMaWx39-9ntdq25b6kafDNA%3D" alt="negao" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/3?token-time=2145916800&token-hash=c8HeVqLtmdgH-gSBJg8i10gmOcwllM87MDHeznl3el0%3D" alt="Melilot" width="100"></td>
<td><img src="https://c8.patreon.com/2/200/12059069" alt="naga_rus" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/4?token-time=2145916800&token-hash=vZdDTTF-ahiKBjjgppS2ev4rkD8H7TTKkXXoxsucs6Y%3D" alt="Melilot" width="100"></td>
<td><img src="https://c8.patreon.com/2/200/16869916" alt="見当かなみ" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12999811/5f349fafcce44dd1824a8b1ebbec4564/3?token-time=2145916800&token-hash=LtV2lRi3L2jOWMLwccr9qWYfPrFlzIo2jYZHKzHEb6k%3D" alt="Xeltica" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/3384329/8b713330cb27404ea6e9fac50ff96efe/1?token-time=2145916800&token-hash=Ch3iF81ZGP0LMo894Y9ajpLisgtE91SnxtZE7fxsgrM%3D" alt="べすれい" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1?token-time=2145916800&token-hash=1FlxS9MEgmNGH_RHUVHbO5hIXB5I1z0lvA33CTvYvjA%3D" alt="gutfuckllc" width="100"></td>
</tr><tr>
<td><a href="https://www.patreon.com/weepjp">weep</a></td>
<td><a href="https://www.patreon.com/negao">negao</a></td>
<td><a href="https://www.patreon.com/user?u=12059069">naga_rus</a></td>
<td><a href="https://www.patreon.com/user?u=12913507">Melilot</a></td>
<td><a href="https://www.patreon.com/user?u=16869916">見当かなみ</a></td>
<td><a href="https://www.patreon.com/Xeltica">Xeltica</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>
</tr></table>
<table><tr>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/11357794/923ce94cd8c44ba788ee931907881839/1?token-time=2145916800&token-hash=0xgcpqvFDqRcV_YIEhcPNVH7gs9sLg_BBnTJXCkN4ao%3D" alt="mydarkstar" width="100"></td>
<td><img src="https://c8.patreon.com/2/200/12718187" alt="Peter G." width="100"></td>
<td><img src="https://c8.patreon.com/2/200/16542964" alt="Takumi Sugita" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13039004/509d0c412eb14ae08d6a812a3054f7d6/1?token-time=2145916800&token-hash=2PsbFNw0tnubZzgSXD01R6hIgncfiElG7H7HX2Y3dyo%3D" alt="nemu" width="100"></td>
<td><img src="https://c8.patreon.com/2/200/17866454" alt="sikyosyounin" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/3?token-time=2145916800&token-hash=9JtETp0X8gI280Ne1E8bxn6j4Lw5o2k4mJkICx97V_k%3D" alt="YUKIMOCHI" width="100"></td>
<td><img src="https://c8.patreon.com/2/200/17463605" alt="Sampot" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17880724/311738c8a48f4a6b9443c2445a75adde/1?token-time=2145916800&token-hash=95p8VdGX45E8BitZR_eOcDlqCjumjzNLBPQJrJdeCpI%3D" alt="takimura" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17195955/be45e5e14c3e48b2bee0456c84e19df4/4?token-time=2145916800&token-hash=SbdZeN5SmsuT9stD6v0jN1z0hftg0FmRiCTxysU0Ihw%3D" alt="Damillora" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/8241184/39e18850e87a449e9c9a71acb3310ebd/3?token-time=2145916800&token-hash=gMq30aylxu5v3G8pRhWR5jeRBbYWEoRKjGbNeiCQz5g%3D" alt="Acid Chicken" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4389829/9f709180ac714651a70f74a82f3ffdb9/2?token-time=2145916800&token-hash=zcwFxb2zopzWwksKVU1YpfAEjsl4yKT02aQ6yiAFRiQ%3D" alt="natalie" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1?token-time=2145916800&token-hash=5T8XcaAf9Zyzfg3QubR06s_kJZkArVEM2dwObrBVAU4%3D" alt="Hiratake" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/16900731/935a10339daa4ede8e555903a0707060/1?token-time=2145916800&token-hash=3CrpqH-XtKs_NoIlSsTyVs8wCzP1WFCsG2xwps1IJq0%3D" alt="Atsuko Tominaga" width="100"></td>
</tr><tr>
<td><a href="https://www.patreon.com/mydarkstar">mydarkstar</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=16542964">Takumi Sugita</a></td>
<td><a href="https://www.patreon.com/user?u=13039004">nemu</a></td>
<td><a href="https://www.patreon.com/user?u=17866454">sikyosyounin</a></td>
<td><a href="https://www.patreon.com/yukimochi">YUKIMOCHI</a></td>
<td><a href="https://www.patreon.com/user?u=17463605">Sampot</a></td>
<td><a href="https://www.patreon.com/takimura">takimura</a></td>
<td><a href="https://www.patreon.com/damillora">Damillora</a></td>
<td><a href="https://www.patreon.com/acid_chicken">Acid Chicken</a></td>
<td><a href="https://www.patreon.com/user?u=4389829">natalie</a></td>
<td><a href="https://www.patreon.com/hiratake">Hiratake</a></td>
<td><a href="https://www.patreon.com/user?u=16900731">Atsuko Tominaga</a></td>
</tr></table>
<table><tr>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4389829/9f709180ac714651a70f74a82f3ffdb9/3?token-time=2145916800&token-hash=-iJszBqgYBhsM5qMdA1knf9wvprhEfESzKfR2oh7mIA%3D" alt="natalie" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1?token-time=2145916800&token-hash=5T8XcaAf9Zyzfg3QubR06s_kJZkArVEM2dwObrBVAU4%3D" alt="Hiratake" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/18072312/98e894d960314fa7bc236a72a39488fe/1?token-time=2145916800&token-hash=D6QK3fPyqiYKJfOzc-QqaSSairUrWdjld-ewp2waj6s%3D" alt="Hekovic" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=Ksk_2l3gjPDbnzMUOCSW1E-hdPJsNs2tSR4_RAakRK8%3D" alt="dansup" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/619786/32cf01444db24e578cd1982c197f6fc6/1?token-time=2145916800&token-hash=CXe9AqlZy9AsYfiWd3OBYVOzvODoN47Litz0Tu4BFpU%3D" alt="Gargron" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5731881/4b6038e6cda34c04b83a5fcce3806a93/1?token-time=2145916800&token-hash=xhR1n6NAAyEb-IUXLD6_dshkFa3mefU5ZZuk1L8qKTs%3D" alt="Nokotaro Takeda" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=uR-48MQ0A4j0irQSrCAQZJ-sJUSs_Fkihlg3-l59b7c%3D" alt="Takashi Shibuya" width="100"></td>
</tr><tr>
<td><a href="https://www.patreon.com/user?u=4389829">natalie</a></td>
<td><a href="https://www.patreon.com/hiratake">Hiratake</a></td>
<td><a href="https://www.patreon.com/hekovic">Hekovic</a></td>
<td><a href="https://www.patreon.com/dansup">dansup</a></td>
<td><a href="https://www.patreon.com/mastodon">Gargron</a></td>
<td><a href="https://www.patreon.com/takenoko">Nokotaro Takeda</a></td>
<td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
</tr></table>
**Last updated:** Wed, 06 Feb 2019 18:18:05 UTC
**Last updated:** Tue, 12 Mar 2019 00:50:06 UTC
<!-- PATREON_END -->
:four_leaf_clover: Copyright

BIN
assets/api-doc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

4
assets/robots.txt Normal file
View File

@ -0,0 +1,4 @@
user-agent: *
allow: /
# todo: sitemap

BIN
assets/ss/explore.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

BIN
assets/ss/user.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

View File

@ -55,14 +55,9 @@ As root:
*6.* Build Misskey
----------------------------------------------------------------
Before build, you need to set `NODE_ENV` to `production`. like this:
* Linux: `export NODE_ENV=production`
* Windows (PowerShell): `$env:NODE_ENV="production"`
* Windows (CMD): `set NODE_ENV=production`
Build misskey with the following:
`npm run build`
`NODE_ENV=production npm run build`
If you're on Debian, you will need to install the `build-essential`, `python` package.
@ -71,14 +66,14 @@ If you're still encountering errors about some modules, use node-gyp:
1. `npm install -g node-gyp`
2. `node-gyp configure`
3. `node-gyp build`
4. `npm run build`
4. `NODE_ENV=production npm run build`
*7.* That is it.
----------------------------------------------------------------
Well done! Now, you have an environment that run to Misskey.
### Launch normally
Just `npm start`. GLHF!
Just `NODE_ENV=production npm start`. GLHF!
### Launch with systemd
@ -94,6 +89,7 @@ Type=simple
User=misskey
ExecStart=/usr/bin/npm start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=syslog
StandardError=syslog
@ -113,7 +109,7 @@ You can check if the service is running with `systemctl status misskey`.
1. `git fetch`
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
3. `npm install`
4. `npm run build`
4. `NODE_ENV=production npm run build`
5. Check [ChangeLog](../CHANGELOG.md) for migration information
6. Restart your Misskey process to apply changes
7. Enjoy

View File

@ -57,7 +57,7 @@ En root :
Construisez Misskey comme ceci :
`npm run build`
`NODE_ENV=production npm run build`
Si vous êtes sous Debian, vous serez amené à installer les paquets `build-essential` et `python`.
@ -66,14 +66,14 @@ Si vous rencontrez des erreurs concernant certains modules, utilisez node-gyp:
1. `npm install -g node-gyp`
2. `node-gyp configure`
3. `node-gyp build`
4. `npm run build`
4. `NODE_ENV=production npm run build`
*7.* C'est tout.
----------------------------------------------------------------
Excellent ! Maintenant, vous avez un environnement prêt pour lancer Misskey
### Lancement conventionnel
Lancez tout simplement `npm start`. Bonne chance et amusez-vous bien !
Lancez tout simplement `NODE_ENV=production npm start`. Bonne chance et amusez-vous bien !
### Démarrage avec systemd
@ -89,6 +89,7 @@ Type=simple
User=misskey
ExecStart=/usr/bin/npm start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=syslog
StandardError=syslog
@ -108,7 +109,7 @@ Vous pouvez vérifier si le service a démarré en utilisant la commande `system
1. `git fetch`
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
3. `npm install`
4. `npm run build`
4. `NODE_ENV=production npm run build`
5. Consultez [ChangeLog](../CHANGELOG.md) pour les information de migration.
----------------------------------------------------------------

View File

@ -62,14 +62,9 @@ adduser --disabled-password --disabled-login misskey
*6.* Misskeyのビルド
----------------------------------------------------------------
ビルドする前に、`NODE_ENV``production`にする必要があります。例:
* Linux: `export NODE_ENV=production`
* Windows (PowerShell): `$env:NODE_ENV="production"`
* Windows (CMD): `set NODE_ENV=production`
次のコマンドでMisskeyをビルドしてください:
`npm run build`
`NODE_ENV=production npm run build`
Debianをお使いであれば、`build-essential`パッケージをインストールする必要があります。
@ -77,14 +72,14 @@ Debianをお使いであれば、`build-essential`パッケージをインスト
1. `npm install -g node-gyp`
2. `node-gyp configure`
3. `node-gyp build`
4. `npm run build`
4. `NODE_ENV=production npm run build`
*7.* 以上です!
----------------------------------------------------------------
お疲れ様でした。これでMisskeyを動かす準備は整いました。
### 通常起動
`npm start`するだけです。GLHF!
`NODE_ENV=production npm start`するだけです。GLHF!
### systemdを用いた起動
1. systemdサービスのファイルを作成: `/etc/systemd/system/misskey.service`
@ -99,6 +94,7 @@ Type=simple
User=misskey
ExecStart=/usr/bin/npm start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=syslog
StandardError=syslog
@ -119,9 +115,11 @@ CentOSで1024以下のポートを使用してMisskeyを使用する場合は`Ex
1. `git fetch`
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
3. `npm install`
4. `npm run build`
4. `NODE_ENV=production npm run build`
5. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する
なにか問題が発生した場合は、`npm run clean`または`npm run cleanall`すると直る場合があります。
----------------------------------------------------------------
なにかお困りのことがありましたらお気軽にご連絡ください。

View File

@ -5,7 +5,6 @@
import * as gulp from 'gulp';
import * as gutil from 'gulp-util';
import * as ts from 'gulp-typescript';
const yaml = require('gulp-yaml');
const sourcemaps = require('gulp-sourcemaps');
import tslint from 'gulp-tslint';
const cssnano = require('gulp-cssnano');
@ -126,12 +125,6 @@ gulp.task('copy:client', () =>
.pipe(gulp.dest('./built/client/assets/'))
);
gulp.task('locales', () =>
gulp.src('./locales/*.yml')
.pipe(yaml({ schema: 'DEFAULT_SAFE_SCHEMA' }))
.pipe(gulp.dest('./built/client/assets/locales/'))
);
gulp.task('doc', () =>
gulp.src('./src/docs/**/*.styl')
.pipe(stylus())
@ -149,7 +142,6 @@ gulp.task('build', gulp.parallel(
'build:ts',
'build:copy',
'build:client',
'locales',
'doc'
));

File diff suppressed because it is too large Load Diff

1193
locales/cs-CZ.yml Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,21 +1,20 @@
---
meta:
lang: "English"
divider: ""
common:
misskey: "A ⭐ of the fediverse"
about-title: "A ⭐ of the fediverse."
about: "Thank you for finding Misskey. Misskey is a <b>decentralized microblogging platform</b> born on Earth. Since it exists within the Fediverse (a universe where various social media platforms are organized), it is mutually linked with other social media platforms. Why don't you take a short break from the hustle and bustle of the city, and dive into a new Internet?"
intro:
title: "What is Misskey?"
about: "Misskey is an open-source, <b>decentralized microblogging service</b>. Sophisticated, fully customizable UI, varieties of reactions for posts, free file storage providing an integrated management system and other advanced features are available. In addition, Misskey connects to a network system called the “Fediverse”, that enables us to communicate with users on other SNSs. For example, when you post something, it will be sent not only to Misskey, but also to Mastodon, Osada and Pleroma. Just imagine that the planet is sending a radio transmission to another planet to communicate."
about: "Misskey is an open-source, <b>decentralized microblogging software</b>. It has a sophisticated, fully customizable user interface, a variety of ways for expressing a reaction to posts, free file storage providing an integrated management system, and other advanced features are available. In addition, Misskey connects to a network system called the “Fediverse”, which enables us to communicate with users on other SNSs. For example, when you post something, it will be sent not only to Misskey users, but also those on Mastodon and Pleroma. Just imagine that the planet is sending a radio transmission to another planet, in order to communicate."
features: "Features"
rich-contents: "Post"
rich-contents-desc: "Just post your idea, hot topics, and anything you want to share. You may want to decorate your words, attach your favorite pictures, send files, including videos, or create a poll - those are some of the things you can do with Misskey!"
reaction: "Reactions"
reaction-desc: "Easiest way to tell your emotions. Misskey allows you to add various type of reactions to others post. The emotional experience on Misskey will never be on other SNSs which only able to push “likes”."
reaction-desc: "The easiest way to express your emotions. Misskey allows you to add various kinds of reactions to other's posts. The emotional experience on Misskey will never be on other SNSs, which are only able to push “likes”."
ui: "Interface"
ui-desc: "No UI fits for everyone. Therefore, Misskey has a highly customizable UI for your taste. Make your original home by editing, adjusting layouts of timeline and placing selectable widgets you can easily customize."
ui-desc: "No single UI can suit everyone. Therefore, Misskey has a highly customizable UI for your tastes. You can make your home original by editing the layout of your timeline, and moving around selectable widgets that you can easily adjust to make this place your own."
drive: "Drive"
drive-desc: "Wanna post a picture you have already uploaded? Wish to organize, name and create a folder for your uploaded files? Misskey Drive is the best solution for you. Very easy to share your files online."
outro: "Check Misskey-unique features by seeing them with your own eyes! If you feel like this instance is not for you, try other instances, as Misskey is a decentralized SNS, so that you can easily find your mates. Then, GLHF!"
@ -25,9 +24,16 @@ common:
application-authorization: "Application authorizations"
close: "Close"
do-not-copy-paste: "Please do not enter or paste the code here. Account may be compromised."
load-more: "Load more"
enter-password: "Please enter the Password"
load-more: "Read more"
enter-password: "Enter your password"
2fa: "Two-factor authentication"
customize-home: "Customize home layout"
featured-notes: "Featured notes"
dark-mode: "Dark Mode"
signin: "Log In"
signup: "Sign up"
signout: "Logout"
reload-to-apply-the-setting: "You'll need to reload the page to reflect this setting. Do you want to reload it now?"
got-it: "Got it!"
customization-tips:
title: "Customization tips"
@ -56,6 +62,16 @@ common:
trash: "Trash"
drive: "Drive"
messaging: "Talk"
home: "Home"
deck: "Deck"
timeline: "Timeline"
explore: "Explore"
following: "Following"
followers: "Followers"
favorites: "Favorites"
empty-timeline-info:
follow-users-to-make-your-timeline: "Following users will show their posts in your timeline."
explore: "Find users"
weekday-short:
sunday: "S"
monday: "M"
@ -98,34 +114,121 @@ common:
a: "What are you doing?"
b: "What's happening?"
c: "Whats on your mind?"
d: "Would you post any words?"
d: "What do you want to say?"
e: "Write here"
f: "Waiting for your writing."
settings: "Settings"
_settings:
profile: "Profile"
notification: "Notification"
apps: "Apps"
tags: "Hashtag"
mute-and-block: "Mute / Block"
blocking: "Block"
security: "Security"
signin: "Login History"
password: "Password"
other: "Other"
appearance: "Appearance"
behavior: "Behavior"
fetch-on-scroll: "Endless loading on scroll"
fetch-on-scroll-desc: "When you scroll down the page, it automatically fetches additional content."
note-visibility: "Post visibility"
default-note-visibility: "Default visibility"
remember-note-visibility: "Remember post visibility"
web-search-engine: "Web search engine"
web-search-engine-desc: "Example: https://www.google.com/?#q={{query}}"
keep-cw: "Preserve content warning"
keep-cw-desc: "When replying to a post, the same content warning is set by default to the reply, as has been set by the original post."
i-like-sushi: "I prefer sushi rather than pudding"
show-reversi-board-labels: "Show row and column labels in Reversi"
use-avatar-reversi-stones: "Use avatar as a stone in reversi"
disable-animated-mfm: "Disable animated texts in a post"
disable-showing-animated-images: "Do not play animated images"
suggest-recent-hashtags: "Show recent popular hashtags on the post form"
always-show-nsfw: "Always show NSFW contents"
always-mark-nsfw: "Always mark posts with media attachments as NSFW"
show-full-acct: "Do not omit the hostname from the username"
show-via: "Show via"
reduce-motion: "Reduce motion in UI"
this-setting-is-this-device-only: "Only for this device"
use-os-default-emojis: "Use the OS default Emojis"
line-width: "Line thickness"
line-width-thin: "Thin"
line-width-normal: "Regular"
line-width-thick: "Thick"
font-size: "Text size"
font-size-x-small: "Very small"
font-size-small: "Small"
font-size-medium: "Medium"
font-size-large: "Big"
font-size-x-large: "Very big"
deck-column-align: "Deck column alignment"
deck-column-align-center: "Center"
deck-column-align-left: "Left"
deck-column-align-flexible: "Flexible"
deck-column-width: "Deck column width"
deck-column-width-narrow: "Narrow"
deck-column-width-narrower: "Somewhat narrow"
deck-column-width-normal: "Regular"
deck-column-width-wider: "Somewhat wide"
deck-column-width-wide: "Wide"
use-shadow: "Use shadows in the UI"
rounded-corners: "Round the corners of the UI"
circle-icons: "Use circular icons"
contrasted-acct: "Add contrast to user account"
wallpaper: "Background image"
choose-wallpaper: "Choose a background"
delete-wallpaper: "Remove background"
post-form-on-timeline: "Display the posting form at the top of the timeline"
show-clock-on-header: "Show clock on the upper-right"
show-reply-target: "Show reply target"
timeline: "Timeline"
show-my-renotes: "Show my renotes in the timeline"
show-renoted-my-notes: "Show renotes of your own posts in the timeline"
show-local-renotes: "Show renotes of local posts on the timeline"
remain-deleted-note: "Continue to show deleted notes"
sound: "Sound"
enable-sounds: "Enable sounds"
enable-sounds-desc: "Play a sound when you receive a post/message. This setting is stored in the browser."
volume: "Volume"
test: "Test"
update: "Misskey Update"
version: "Current version:"
latest-version: "Latest version:"
update-checking: "Checking for updates"
do-update: "Check for updates"
update-settings: "Advanced settings"
no-updates: "No updates are available"
no-updates-desc: "Your Misskey is up to date."
update-available: "A new version is available"
update-available-desc: "Updates will be applied after reloading the page."
advanced-settings: "Advanced Settings"
debug-mode: "Enable debug mode"
debug-mode-desc: "This setting is stored in the browser."
navbar-position: "Navbar position"
navbar-position-top: "Top"
navbar-position-left: "Left"
navbar-position-right: "Right"
i-am-under-limited-internet: "I have limited bandwidth"
post-style: "Note display style"
post-style-standard: "Standard"
post-style-smart: "Smart"
notification-position: "Show notifications"
notification-position-bottom: "Bottom"
notification-position-top: "Top"
disable-via-mobile: "Don't mark the post as 'from mobile'"
load-raw-images: "Show attached images in original quality"
load-remote-media: "Show media from a remote server"
search: "Search"
delete: "Delete"
loading: "Loading"
ok: "OK"
ok: "Confirm"
cancel: "Exit"
update-available-title: "Update available"
update-available: "A new version of Misskey is now available({newer}, the current version is {current}). Reload the page to apply updates."
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"
use-avatar-reversi-stones: "Use avatar as a stone in reversi"
verified-user: "Verified account"
disable-animated-mfm: "Disable animated texts in a post"
disable-showing-animated-images: "Do not play animated images"
suggest-recent-hashtags: "Suggest recently used hashtags within the post composition area"
always-show-nsfw: "Always show NSFW contents"
always-mark-nsfw: "Always mark posts with media attachments as NSFW"
show-full-acct: "Do not omit the hostname from the username"
show-via: "Show via"
reduce-motion: "Reduce motion in UI"
this-setting-is-this-device-only: "Only for this device"
use-os-default-emojis: "Use the OS default Emojis"
line-width: "Line thickness"
line-width-thin: "Thin"
line-width-normal: "Regular"
line-width-thick: "Thick"
hide-password: "Hide Password"
show-password: "Show Password"
do-not-use-in-production: "This is a development build. Do not use in production."
@ -134,6 +237,9 @@ common:
is-remote-post: "These post contents are mirrored."
view-on-remote: "For completion, view it remotely."
renoted-by: "Renoted by {user}"
no-notes: "Without any notes"
turn-on-darkmode: "Switch to Dark mode"
turn-off-darkmode: "Light mode"
error:
title: "Something happened :("
retry: "Retry"
@ -179,7 +285,7 @@ auth/views/form.vue:
account-read: "View account information."
account-write: "Modify account information."
note-write: "Post."
like-write: "React to posts."
like-write: "Express yourself about this post."
following-write: "Follow and unfollow."
drive-read: "Read your drive."
drive-write: "Upload/delete files in your drive."
@ -197,6 +303,20 @@ auth/views/index.vue:
please-go-back: "Please go back to the application."
error: "Session does not exist."
sign-in: "Please sign in."
common/views/pages/explore.vue:
verified-users: "Official accounts"
popular-users: "Popular users"
recently-updated-users: "Recently active users"
recently-registered-users: "Users who joined recently"
popular-tags: "Popular Tags"
federated: "From the fediverse"
explore: "Explore {host}"
users-info: "Currently, {users} users are registered here"
common/views/components/url-preview.vue:
enable-player: "Enable playback"
disable-player: "Close the player"
common/views/components/user-list.vue:
no-users: "There are no users."
common/views/components/games/reversi/reversi.vue:
matching:
waiting-for: "Waiting for {}"
@ -269,7 +389,7 @@ common/views/components/media-banner.vue:
click-to-show: "Click to show"
common/views/components/theme.vue:
theme: "Theme"
light-theme: "Theme"
light-theme: "Theme to use in Light mode"
dark-theme: "Theme during dark mode"
light-themes: "Light theme"
dark-themes: "Dark theme"
@ -370,16 +490,35 @@ common/views/components/user-menu.vue:
common/views/components/poll.vue:
vote-to: "Vote for '{}'"
vote-count: "{} votes"
total-users: "{} users voted"
total-votes: "{} votes in total"
vote: "Vote"
show-result: "Show results"
voted: "Voted"
closed: "Ended"
remaining-days: "{d} days, {h} hours remain"
remaining-hours: "{h} hours, and {m} minutes remain"
remaining-minutes: "{m} minutes, and {s} seconds remaining"
remaining-seconds: "{s} seconds remaining"
common/views/components/poll-editor.vue:
no-only-one-choice: "At least two choices are required"
choice-n: "Choice {}"
remove: "Delete the choice"
add: "+ Add a choice"
destroy: "Discard the poll"
multiple: "More than one answer is allowed"
expiration: "Valid until"
infinite: "Indefinitely"
at: "Date and time pick"
after: "Progression specifics"
no-more: "You cannot add any more"
deadline-date: "Finish date"
deadline-time: "Time duration"
interval: "Duration"
unit: "Unit"
second: "Seconds"
minute: "Minutes"
hour: "Hours"
day: "S"
common/views/components/reaction-picker.vue:
choose-reaction: "Send a reaction"
common/views/components/emoji-picker.vue:
@ -397,12 +536,11 @@ common/views/components/signin.vue:
password: "Password"
token: "Token"
signing-in: "Signing in..."
signin: "Sign in"
or: "Or"
signin-with-twitter: "Log in with Twitter"
signin-with-github: "Sign in with GitHub"
signin-with-discord: "Sign in with Discord"
login-failed: "Log in failed. Make sure you have entered your correct username and password."
login-failed: "Logging in has failed. Make sure you have entered the 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>."
@ -510,12 +648,20 @@ common/views/components/profile-editor.vue:
email-verified: "Your email has been verified."
email-not-verified: "Email address is not confirmed. Please check your inbox."
export: "Export"
import: "Import"
export-and-import: "Export and Import"
export-targets:
all-notes: "All posted Notes"
following-list: "List of followers"
mute-list: "List of muted accounts"
blocking-list: "List of blocked accounts"
user-lists: "Lists"
export-requested: "You have requested an export. This may take a while. After the export is complete, the resulting file will be added to the drive."
import-requested: "You have initiated an import. This may take quite some time."
enter-password: "Please enter your password"
danger-zone: "Cautious options"
delete-account: "Remove the account"
account-deleted: "The account has been deleted. It may take some time until all of the data disappears."
common/views/components/user-list-editor.vue:
users: "User"
rename: "Rename list"
@ -551,7 +697,7 @@ common/views/widgets/memo.vue:
memo: "Write here!"
save: "Save"
common/views/widgets/slideshow.vue:
folder-customize-mode: "To specify a folder, please exit customize mode"
folder-customize-mode: "To specify a folder, please exit customization mode"
folder: "Please click and specify a folder"
no-image: "There is no image in this folder"
common/views/widgets/tips.vue:
@ -562,7 +708,7 @@ common/views/widgets/tips.vue:
tips-line5: "You can upload files by dragging and dropping them to Drive."
tips-line6: "You can move a folder by dragging it within the Drive."
tips-line7: "You can move folders by dragging them within the Drive."
tips-line8: "Home can be customized from the settings."
tips-line8: "The Home layout can be customized from the settings."
tips-line9: "Misskey is licensed under AGPLv3."
tips-line10: "Using the Time Machine widget makes it easy to trace back to the past timeline."
tips-line11: "You can pin posts to user page by clicking on \"...\""
@ -684,12 +830,6 @@ desktop/views/components/following-window.vue:
following: "Following {}"
desktop/views/components/following.vue:
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."
fetching: "Loading"
refresh: "More"
close: "Close"
desktop/views/components/game-window.vue:
game: "Reversi"
desktop/views/components/home.vue:
@ -737,7 +877,7 @@ desktop/views/components/post-form.vue:
reposted: "Reposted!"
note-failed: "Failed to post"
reply-failed: "Failed to reply"
renote-failed: "Failed to repost"
renote-failed: "Failed to Renote"
posting: "Posting"
attach-media-from-local: "Attach media from your device"
attach-media-from-drive: "Attach media from your Drive"
@ -765,109 +905,14 @@ desktop/views/components/renote-form.vue:
cancel: "Cancel"
renote: "Repost"
renote-home: "Renote (Home)"
reposting: "Reposting..."
reposting: "Renoting..."
success: "Reposted!"
failure: "Failed to Repost"
desktop/views/components/renote-form-window.vue:
title: "Do you want to Repost it?"
title: "Do you want to Renote it?"
desktop/views/pages/user-following-or-followers.vue:
following: "{user}'s following"
followers: "{user}'s follower"
desktop/views/components/settings-window.vue:
settings: "Settings"
desktop/views/components/settings.vue:
profile: "Profile"
notification: "Notification"
apps: "Apps"
tags: "Hashtags"
mute-and-block: "Mute / Block"
blocking: "Blocking"
security: "Security"
signin: "Sign in history"
password: "Password"
other: "Other"
license: "License"
theme: "Theme"
behaviour: "Behavior"
fetch-on-scroll: "Endless loading on scroll"
fetch-on-scroll-desc: "When you scroll down the page, it automatically fetches additional content."
note-visibility: "Post visibility"
default-note-visibility: "Default visibility"
remember-note-visibility: "Remember post visibility"
web-search-engine: "Web search engine"
web-search-engine-desc: "Example: https://www.google.com/?#q={{query}}"
auto-popout: "Auto pop-out window"
auto-popout-desc: "If it's possible, pop-out display will be used instead of opening a new window. This setting is stored in your browser."
deck-nav: "Transitionless deck navigation"
deck-nav-desc: "You get a temporary column without page transitions during navigation when using the deck."
keep-cw: "Preserve content warning"
keep-cw-desc: "When replying to a post, the same content warning is set by default to the reply, as has been set by the original post."
deck-default: "Use Deck view as the default UI"
display: "Design and display"
customize: "Customize home layout"
wallpaper: "Wallpaper"
choose-wallpaper: "Choose a background"
delete-wallpaper: "Remove background"
dark-mode: "Dark Mode"
use-shadow: "Use shadows in the UI"
rounded-corners: "Round corners of UI"
circle-icons: "Use circle icons"
contrasted-acct: "Add contrast to username"
post-form-on-timeline: "Display post form at the top of the timeline"
show-clock-on-header: "Show clock on upper-right"
show-reply-target: "Display reply target"
timeline: "Timeline"
show-my-renotes: "Show my renotes in the timeline"
show-renoted-my-notes: "Show renoted posts of mine in timelines"
show-local-renotes: "Show renoted local posts in the timelines"
show-maps: "Display a map to show location"
remain-deleted-note: "Continue to show deleted posts"
deck-column-align: "Deck column alignment"
deck-column-align-center: "Center"
deck-column-align-left: "Left"
deck-column-align-flexible: "Flexible"
deck-column-width: "Column width of the deck"
deck-column-width-narrow: "narrow"
deck-column-width-narrower: "somewhat narrow"
deck-column-width-normal: "Normal"
deck-column-width-wider: "somewhat wide"
deck-column-width-wide: "wide"
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."
volume: "Volume"
test: "Test"
cache: "Cache"
clean-cache: "Clear cache"
cache-warn: "The cache of account info/posts/replies/messages/settings stored in the browser will be deleted. You need to reload the page after cleaning up."
cache-cleared: "Cache cleared"
cache-cleared-desc: "Please reload the page."
about: "About Misskey"
operator: "The admin of this instance"
update: "Misskey Update"
version: "Version:"
latest-version: "Latest version:"
update-checking: "Checking for updates"
do-update: "Check for updates"
update-settings: "Advanced settings"
prevent-update: "Postpone updates (not recommended)"
prevent-update-desc: "Even if you turn this setting on, updates may apply. This setting is enabled only for this device."
no-updates: "No updates available"
no-updates-desc: "Your Misskey is up to date."
update-available: "A new version is available"
update-available-desc: "The updates will apply if you reload the page again."
advanced-settings: "Advanced"
debug-mode: "Enable the debug mode"
debug-mode-desc: "This setting is stored in the browser."
experimental: "Enable experimental features"
experimental-desc: "Activating this might make the Misskey client unstable. This setting is stored in the browser."
tools: "Tools"
task-manager: "Task Manager"
third-parties: "Third-parties"
navbar-position: "Navigation bar position"
navbar-position-top: "Top"
navbar-position-left: "Left"
navbar-position-right: "Right"
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: "Details…"
@ -950,7 +995,7 @@ desktop/views/components/timeline.vue:
messages: "Messages"
list: "Lists"
hashtag: "Hashtag"
add-tag-timeline: "Add hashtag tl"
add-tag-timeline: "Add hashtag cloud"
add-list: "Add list"
list-name: "List name"
desktop/views/components/ui.header.vue:
@ -958,17 +1003,10 @@ desktop/views/components/ui.header.vue:
adjective: "-san"
desktop/views/components/ui.header.account.vue:
profile: "Your profile"
favorites: "Favorites"
lists: "Lists"
follow-requests: "Follow requests"
customize: "Customize home layout"
admin: "Admin"
settings: "Settings"
signout: "Sign out"
dark: "Toggle dark mode"
desktop/views/components/ui.header.nav.vue:
home: "Home"
deck: "Deck"
game: "Games"
desktop/views/components/ui.header.notifications.vue:
title: "Notifications"
@ -982,7 +1020,7 @@ desktop/views/components/received-follow-requests-window.vue:
reject: "Reject"
desktop/views/components/user-lists-window.vue:
title: "User lists"
create-list: "Create list"
create-list: "Create a list"
list-name: "List name"
desktop/views/components/user-preview.vue:
notes: "Posts"
@ -1008,6 +1046,7 @@ admin/views/index.vue:
hashtags: "Hashtags"
abuse: "Abuse"
queue: "Job Queue"
logs: "Logs"
back-to-misskey: "Back to Misskey"
admin/views/dashboard.vue:
dashboard: "Dashboard"
@ -1091,6 +1130,7 @@ admin/views/instance.vue:
smtp-secure-info: "Turn off STARTTLS when used that."
smtp-host: "SMTP Host"
smtp-port: "SMTP Port"
smtp-auth: "Perform SMTP authentication"
smtp-user: "SMTP User"
smtp-pass: "SMTP Password"
serviceworker-config: "ServiceWorker"
@ -1118,7 +1158,7 @@ admin/views/charts.vue:
users: "The number of users: increase/decrease"
users-total: "Total users"
active-users: "Active users"
drive: "Capacity used as the storage: increase/decrease"
drive: "Increase and decrease in storage capacity use"
drive-total: "Total usage of Drive"
drive-files: "The number of files on the storage: increase/decrease"
drive-files-total: "Total number of files on Drive"
@ -1180,12 +1220,13 @@ admin/views/users.vue:
updatedAtAsc: "Last Updated (Ascending)"
updatedAtDesc: "Last Updated (Descending)"
state:
title: "Status"
title: "Sort"
all: "All"
admin: "Administrator"
moderator: "Moderator"
adminOrModerator: "Admin/Moderator"
verified: "Verified account"
silenced: "Already silenced"
suspended: "Suspended"
origin:
title: "Origin"
@ -1240,12 +1281,13 @@ admin/views/federation.vue:
users: "Users"
following: "Following"
followers: "Followers"
status: "Status"
status: "Statuses"
latest-request-sent-at: "Time of last request sent"
latest-request-received-at: "Last request received at"
remove-all-following: "フォローを全解除"
remove-all-following-info: "{host}からのフォローをすべて解除します。そのインスタンスがもう存在しなくなった場合などに実行してください。"
remove-all-following: "Withold all followers"
remove-all-following-info: "Unfollow all accounts from {host}. Please run this if the instance no longer exists."
block: "Block"
marked-as-closed: "Marked as closed"
lookup: "Look up"
instances: "Instances"
instance-not-registered: "The instance has not been discovered"
@ -1253,26 +1295,45 @@ admin/views/federation.vue:
sorts:
caughtAtAsc: "Date of discovery (Ascending)"
caughtAtDesc: "Date of discovery (Descending)"
notesAsc: "Order by least Notes posted"
notesDesc: "Order by most Notes posted"
lastCommunicatedAtAsc: "The date and time of the older interactions"
lastCommunicatedAtDesc: "The date and time of the newer interactions"
notesAsc: "Least Notes posted"
notesDesc: "Most Notes posted"
usersAsc: "Less followers"
usersDesc: "More followers"
followingAsc: "Least followed"
followingDesc: "Has more followers"
followersAsc: "Sort by having less followers"
followersDesc: "Sort by the larger number of followers"
state: "Status"
followingDesc: "Most followed"
followersAsc: "Having less followers"
followersDesc: "The largest number of followers"
driveUsageAsc: "Least storage used"
driveUsageDesc: "Most storage used"
driveFilesAsc: "Least files stored on Drive"
driveFilesDesc: "The largest number of files stored on Drive"
state: "Sort"
states:
all: "All"
blocked: "Blocked"
not-responding: "Without response"
marked-as-closed: "Marked as closed"
result-is-truncated: "Displaying the top {n} items."
charts: "Charts"
chart-srcs:
requests: "Requests"
users: "Increase, or decrease in the number of users"
users-total: "Total number of users"
notes: "Increase, or decrease in the number of notes"
notes-total: "Total number of notes"
ff: "Increase of followers"
ff-total: "Total number of follows accumulated"
drive-usage: "Increase and decrease in storage use"
drive-usage-total: "Total usage of the Drive"
drive-files: "Increase, or decrease in the number of files stored on Drive"
drive-files-total: "The number of files accumulated on Drive"
chart-spans:
hour: "Hourly"
day: "Daily"
desktop/views/pages/welcome.vue:
about: "More details..."
gotit: "Got it!"
signin: "Log In"
signup: "Sign up"
signin-button: "Logging in..."
signup-button: "Sign up"
timeline: "Timeline"
announcements: "Announcements"
photos: "Recent Images"
@ -1280,8 +1341,6 @@ desktop/views/pages/welcome.vue:
info: "Information"
desktop/views/pages/drive.vue:
title: "Misskey storage"
desktop/views/pages/home-customize.vue:
title: "Customize home layout"
desktop/views/pages/note.vue:
prev: "Previous post"
next: "Next post"
@ -1293,8 +1352,6 @@ desktop/views/pages/selectdrive.vue:
desktop/views/pages/search.vue:
not-available: "Search feature is turned off in the settings for this instance."
not-found: "No posts were found for '{q}'"
desktop/views/pages/share.vue:
share-with: "Share on {name}"
desktop/views/pages/tag.vue:
no-posts-found: "No posts contains \"{q}\" found."
desktop/views/pages/user-list.users.vue:
@ -1313,29 +1370,26 @@ desktop/views/pages/user/user.photos.vue:
title: "Photos"
loading: "Loading"
no-photos: "No photos"
desktop/views/pages/user/user.profile.vue:
follows-you: "Follows you"
menu: "Menu"
desktop/views/pages/user/user.header.vue:
posts: "Notes"
following: "Following"
followers: "Followers"
is-bot: "This account is a Bot"
no-description: "This user has not written their profile introduction"
years-old: "{age} years old"
year: "/"
month: "/"
day: "-"
follows-you: "Follows you"
desktop/views/pages/user/user.timeline.vue:
default: "Posts"
with-replies: "Posts and replies"
with-media: "Media"
my-posts: "My posts"
empty: "This user doesn't seem to have posted anything yet."
desktop/views/widgets/messaging.vue:
title: "Message"
title: "Messaging"
desktop/views/widgets/notifications.vue:
title: "Notifications"
settings: "Settings"
desktop/views/widgets/polls.vue:
title: "Polls"
refresh: "refresh"
@ -1364,8 +1418,7 @@ mobile/views/components/drive.vue:
prompt: "What do you want to do? (Please enter a number): <1 → Upload a file | 2 → Upload a file from a URL | 3 → Create a folder | 4 → Change this folder's name | 5 → Move this folder | 6 → Delete this folder>"
deletion-alert: "Sorry! Deleting a folder is not yet implemented."
folder-name: "Folder name"
root-rename-alert: "You're in the root; it can't be renamed because it's not a folder. Navigate to a folder you want to rename and try again."
root-move-alert: "You're in the root; it can't be moved because it's not a folder. Navigate to a folder you want to move and try again."
here-is-root: "Currently, you are on the root, not inside of any folder."
url-prompt: "URL of the file you want to upload"
uploading: "Upload requested. It may take a while for the upload to finish."
mobile/views/components/drive-file-chooser.vue:
@ -1392,12 +1445,6 @@ common/views/components/follow-button.vue:
request-pending: "Pending"
follow-processing: "Processing"
follow-request: "Follow request"
mobile/views/components/friends-maker.vue:
title: "Let's follow them"
empty: "Featured user was not found."
fetching: "Loading"
refresh: "See more"
close: "Close"
mobile/views/components/note.vue:
private: "This post is private"
deleted: "This post has been deleted"
@ -1434,8 +1481,6 @@ mobile/views/components/sub-note-content.vue:
deleted: "This post has been deleted"
media-count: "{} media attached"
poll: "Poll"
mobile/views/components/timeline.vue:
empty: "No notes"
mobile/views/components/ui.header.vue:
welcome-back: "Welcome back, "
adjective: "Sir"
@ -1444,22 +1489,11 @@ mobile/views/components/ui.nav.vue:
notifications: "Notifications"
follow-requests: "Follow requests"
search: "Search"
favorites: "Favorites"
user-lists: "Lists"
widgets: "Widgets"
game: "Games"
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."
no-notes-with-media: "There are no notes with media attachments"
mobile/views/components/users-list.vue:
all: "All"
known: "In common"
mobile/views/pages/favorites.vue:
title: "Favorites"
mobile/views/pages/user-lists.vue:
title: "Lists"
enter-list-name: "Enter a name of the list to make"
@ -1478,8 +1512,6 @@ mobile/views/pages/home.vue:
messages: "Messages"
mobile/views/pages/tag.vue:
no-posts-found: "No posts contains \"{q}\" found."
mobile/views/pages/welcome.vue:
signup: "Sign up"
mobile/views/pages/widgets.vue:
dashboard: "Dashboard"
widgets-hints: "You can add/delete/rearrange widgets. To move the widget, drag \"三\". Tap \"x\" to delete the widget. Some widgets can change display by tapping."
@ -1497,9 +1529,6 @@ mobile/views/pages/note.vue:
title: "Post"
prev: "Previous note"
next: "Next note"
mobile/views/pages/notifications.vue:
notifications: "Notifications"
read-all: "Do you wish to mark all notifications as read?"
mobile/views/pages/games/reversi.vue:
reversi: "Reversi"
mobile/views/pages/search.vue:
@ -1509,47 +1538,6 @@ mobile/views/pages/selectdrive.vue:
select-file: "Choose files"
mobile/views/pages/settings.vue:
signed-in-as: "Signed in as {}"
design: "Design and display"
dark-mode: "Dark Mode"
i-am-under-limited-internet: "I'm in limited bandwidth"
circle-icons: "Use circle icons"
contrasted-acct: "Add contrast to username"
timeline: "Timeline"
show-reply-target: "Show reply target"
show-my-renotes: "Show my reposts"
show-renoted-my-notes: "Show renoted posts of mine"
show-local-renotes: "Show renoted local posts"
post-style: "Post design"
post-style-standard: "Standard"
post-style-smart: "Smart"
notification-position: "Notification style"
notification-position-bottom: "Bottom"
notification-position-top: "Top"
behavior: "Behavior"
fetch-on-scroll: "Endless loading on scroll"
keep-cw: "Preserve content warning"
note-visibility: "Post visibility"
default-note-visibility: "Default visibility"
remember-note-visibility: "Remember post visibility"
web-search-engine: "Web search engine"
web-search-engine-desc: "Example: https://www.google.com/?#q={{query}}"
disable-via-mobile: "Don't mark the post as 'from mobile'"
load-raw-images: "Show attached images in original quality"
load-remote-media: "Show media from a remote server"
update: "Misskey Update"
version: "Current version:"
latest-version: "Latest version:"
update-checking: "Checking for updates"
check-for-updates: "Check for updates"
no-updates: "No updates available"
no-updates-desc: "Your Misskey is up to date."
update-available: "A new version is available"
update-available-desc: "Updates will be applied after reloading the page"
settings: "Settings"
signout: "Sign out"
sound: "Sounds"
enable-sounds: "Enable sounds"
password: "Password"
mobile/views/pages/user.vue:
follows-you: "Follows you"
following: "Following"
@ -1565,15 +1553,9 @@ mobile/views/pages/user/home.vue:
activity: "Activity"
keywords: "Keywords"
domains: "Domains"
frequently-replied-users: "Frequently mentioned users"
frequently-replied-users: "Frequent mentions"
followers-you-know: "Followers you know"
last-used-at: "Last active:"
mobile/views/pages/user/home.followers-you-know.vue:
no-users: "No users you know"
mobile/views/pages/user/home.friends.vue:
no-users: "There are no users that you know"
mobile/views/pages/user/home.notes.vue:
no-notes: "No notes"
mobile/views/pages/user/home.photos.vue:
no-photos: "No photos"
deck:
@ -1587,6 +1569,7 @@ deck:
direct: "Direct posts"
notifications: "Notifications"
list: "List"
select-list: "Select a list"
swap-left: "Move left"
swap-right: "Move right"
swap-up: "Move up"
@ -1596,11 +1579,14 @@ deck:
rename: "Rename"
stack-left: "Stack to the left"
pop-right: "Dock on the right"
disabled-timeline:
title: "The timeline has been disabled"
description: "This timeline has been disabled by the server's administrator."
deck/deck.tl-column.vue:
is-media-only: "Only media posts"
is-media-view: "Media view"
edit: "Options"
deck/deck.user-column.vue:
follows-you: "Follows you"
posts: "Posts"
following: "Following"
followers: "Followers"

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,6 @@
---
meta:
lang: "Français"
divider: ""
common:
misskey: "Une ⭐ du fédiverse"
about-title: "Une ⭐ du fédiverse."
@ -15,9 +14,9 @@ common:
reaction: "Réactions"
reaction-desc: "Une manière simple d'exprimer vos émotions. Misskey peut attacher diverses réactions aux publications des autres utilisateurs. Si vous essayez les réactions sur Misskey, vous ne pourrez plus retourner sur une autre plateforme de réseaux sociaux n'offrant que des « J'aime »."
ui: "Interface utilisateur"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
ui-desc: "Aucune interface graphique ne peut plaire à tout le monde. Par conséquent, Misskey possède une interface utilisateur hautement personnalisable selon vos goûts. Vous pouvez rendre votre page d'accueil originale en modifiant la mise en page de votre fil et en déplaçant les widgets que vous pouvez facilement ajuster pour vous approprier cet espace."
drive: "Drive"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
drive-desc: "Vous voulez poster une photo que vous avez déjà transférée ? Vous souhaitez organiser, nommer et créer un dossier pour vos fichiers téléversés ? Misskey Drive est la meilleure solution pour vous. Très facile de partager vos fichiers en ligne."
outro: "Découvrez vous-même les fonctionnalités de Misskey. Étant donné que Misskey est un réseau social fédéré, vous pouvez essayer dautres instances afin de trouver vos amis si la présente instance ne vous correspond pas. Bonne chance et amusez-vous bien!"
adblock:
detected: "Veuillez désactiver votre bloqueur de publicités"
@ -28,10 +27,11 @@ common:
load-more: "Charger plus"
enter-password: "Veuillez entrer le mot de passe"
2fa: "Authentification à deux facteurs"
customize-home: "Personnaliser la disposition de votre accueil"
featured-notes: "Les notes mises en avant"
got-it: "Jai compris !"
customization-tips:
title: "Conseils de personnalisation"
paragraph: "<p>ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。</p><p>一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。</p><p>ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。</p><p>カスタマイズを終了するには、右上の「完了」をクリックします。</p>"
gotit: "Compris !"
notification:
file-uploaded: "Le fichier a été téléversé !"
@ -56,6 +56,16 @@ common:
trash: "Corbeille"
drive: "Drive"
messaging: "Conversations"
home: "Principal"
deck: "Deck"
timeline: "Fil"
explore: "Découvrir"
following: "Suit"
followers: "Abonné·e·s"
favorites: "Mettre cette note en favoris"
empty-timeline-info:
follow-users-to-make-your-timeline: "Les utilisateurs suivants afficheront leurs publications sur votre fil."
explore: "Trouver des utilisateurs"
weekday-short:
sunday: "D"
monday: "L"
@ -101,39 +111,32 @@ common:
d: "Désirez-vous publier quelques mots ?"
e: "Écrivez ici"
f: "En attente de vos écrits"
_settings:
profile: "Votre profil"
notification: "Notifications"
tags: "Hashtags"
blocking: "En cours blocage"
password: "Mot de passe"
other: "Avancé"
timeline: "Fil dactualité"
search: "Recherche"
delete: "Supprimer"
loading: "Chargement en cours…"
ok: "OK"
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 jeton vient dêtre généré, vous allez maintenant être déconnecté."
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"
use-avatar-reversi-stones: "Utiliser lavatar comme pion dans Reversi"
verified-user: "Compte vérifié"
disable-animated-mfm: "Désactiver les textes animés dans les publications"
disable-showing-animated-images: "アニメーション画像を再生しない"
suggest-recent-hashtags: "Suggérer les hashtags récemment utilisés dans le champs de saisie"
always-show-nsfw: "Toujours afficher les contenus sensibles"
always-mark-nsfw: "Toujours marquer les notes ayant des attachements comme sensibles"
show-full-acct: "Afficher ladresse complète de lutilisateur"
show-via: "Visualiser via"
reduce-motion: "Réduire les animations dans linterface utilisateur"
this-setting-is-this-device-only: "Uniquement sur cet appareil"
use-os-default-emojis: "Utiliser les émojis standards du système"
line-width: "Epaisseur du trait"
line-width-thin: "Fine"
line-width-normal: "Normale"
line-width-thick: "Épaisse"
hide-password: "Masquer le mot de passe"
show-password: "Afficher le mot de passe"
do-not-use-in-production: "Il sagit dune version de développement. Ne pas utiliser dans un environnement de production."
user-suspended: "Cet·te utilisateur·trice a été suspendu·e"
is-remote-user: "このユーザー情報は不正確な可能性があります。"
is-remote-user: "Les informations à propos de ce compte peuvent être incomplètes."
is-remote-post: "Ceci est une publication distante."
view-on-remote: " Consulter le profil complet"
renoted-by: "Renoté par {user}"
no-notes: "Sans aucune note"
turn-on-darkmode: "Basculer vers le mode nuit"
turn-off-darkmode: "Mode jour"
error:
title: "Une erreur est survenue"
retry: "Réessayer"
@ -197,6 +200,17 @@ auth/views/index.vue:
please-go-back: "Veillez retourner à l'application."
error: "La session nexiste pas."
sign-in: "Veuillez vous connecter"
common/views/pages/explore.vue:
verified-users: "Comptes vérifiés"
popular-users: "Utilisateurs populaires"
recently-updated-users: "Utilisateurs actifs récemment"
recently-registered-users: "Les nouveaux inscrits"
popular-tags: "Mots-clés populaires"
federated: "Du Fédiverse"
explore: "Explorer {host}"
users-info: "Actuellement, {users} utilisateurs se sont inscrit ici"
common/views/components/user-list.vue:
no-users: "Il n'y a aucun utilisateur"
common/views/components/games/reversi/reversi.vue:
matching:
waiting-for: "En attente de {}"
@ -229,7 +243,6 @@ common/views/components/games/reversi/reversi.room.vue:
black-or-white: "Noirs/Blancs"
black-is: "{} Noirs"
rules: "Règles"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "Carte en boucle"
can-put-everywhere: "Peut poser partout"
settings-of-the-bot: "Configuration du bot"
@ -370,7 +383,6 @@ common/views/components/user-menu.vue:
common/views/components/poll.vue:
vote-to: "Voter pour '{}'"
vote-count: "{} votes"
total-users: "{} utilisateur·rice·s ont voté"
vote: "Vote"
show-result: "Montrer les résultats"
voted: "Voté"
@ -380,6 +392,7 @@ common/views/components/poll-editor.vue:
remove: "Supprimer ce choix"
add: "+ Ajouter un choix"
destroy: "Annuler ce sondage"
day: "D"
common/views/components/reaction-picker.vue:
choose-reaction: "Choisissez votre réaction"
common/views/components/emoji-picker.vue:
@ -397,7 +410,6 @@ common/views/components/signin.vue:
password: "Mot de passe"
token: "Jeton"
signing-in: "Connexion…"
signin: "Se connecter"
or: "Ou"
signin-with-twitter: "Se connecter via Twitter"
signin-with-github: "Se connecter avec GitHub"
@ -438,7 +450,7 @@ common/views/components/notification-settings.vue:
mark-as-read-all-notifications: "Marquer toutes les notifications comme lues"
mark-as-read-all-unread-notes: "Marquer toutes les notes comme lues"
mark-as-read-all-talk-messages: "Marquer toutes les conversations comme lues"
auto-watch: "投稿の自動ウォッチ"
auto-watch: "Surveiller automatiquement les publications"
auto-watch-desc: "Recevoir automatiquement des notifications à propos des publications auxquelles vous avez réagi ou répondu"
common/views/components/integration-settings.vue:
title: "Intégrations"
@ -510,12 +522,18 @@ common/views/components/profile-editor.vue:
email-verified: "Ladresse du courrier électronique a été vérifiée."
email-not-verified: "Adresse de courriel nest pas confirmée. Veuillez vérifier votre boite de réception."
export: "Exporter"
import: "Importer"
export-targets:
all-notes: "Toutes les notes publiées"
following-list: "Liste des abonnements"
mute-list: "Liste des comptes mis en sourdine"
blocking-list: "Liste des comptes bloqués"
export-requested: "エクスポートをリクエストしました。これには時間がかかる場合があります。エクスポートが終わると、ドライブにファイルが追加されます。"
user-lists: "Listes"
export-requested: "Vous avez demandé une exportation. Cela peut prendre un certain temps. Une fois l'exportation terminée, le fichier résultant sera ajouté dans le Drive."
enter-password: "Veuillez saisir votre mot de passe"
danger-zone: "Zone de danger"
delete-account: "Supprimer le compte"
account-deleted: "Le compte a été supprimé. Cela peut prendre un certain temps avant que toutes les données disparaissent."
common/views/components/user-list-editor.vue:
users: "Utilisateur·rice"
rename: "Renommer la liste"
@ -555,7 +573,7 @@ common/views/widgets/slideshow.vue:
folder: "Veuillez cliquer pour spécifier le dossier"
no-image: "Il n'y a aucune image dans ce dossier"
common/views/widgets/tips.vue:
tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
tips-line1: "Vous pouvez vous concentrer sur le fil avec <kbd>t</kbd>"
tips-line2: "Ouvre la fenêtre de publication en appuyant sur <kbd>p</kbd> ou <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"
@ -564,7 +582,7 @@ common/views/widgets/tips.vue:
tips-line7: "Vous pouvez déplacer des dossiers en les glissant dans le Drive"
tips-line8: "Vous pouvez personnaliser l'Accueil via les paramètres"
tips-line9: "Misskey est sous licence AGPLv3"
tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
tips-line10: "L'utilisation du widget Time Machine permet de remonter facilement dans le passé du fil."
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: "Lorsque vous personnalisez la disposition de votre page daccueil, vous pouvez effectuer un clique droit sur un widget pour changer son apparence."
@ -572,7 +590,6 @@ common/views/widgets/tips.vue:
tips-line19: "Plusieurs fenêtres peuvent être détachées en dehors du navigateur."
tips-line20: "Pourcentage sur le widget calendrier qui indique le pourcentage de temps passé"
tips-line21: "Vous pouvez aussi utiliser l'API pour développer des Bots."
tips-line23: "藍かわいいよ藍"
tips-line24: "Misskey est fonctionnel depuis 2014"
tips-line25: "Vous pouvez recevoir les notifications de Misskey dans un navigateur web compatible"
common/views/pages/not-found.vue:
@ -684,12 +701,6 @@ desktop/views/components/following-window.vue:
following: "Suit {}"
desktop/views/components/following.vue:
empty: "Vous ne suivez aucun compte."
desktop/views/components/friends-maker.vue:
title: "Utilisateur·rice·s recommandé·e·s :"
empty: "Impossible de trouver des utilisateur·trice·s à recommander."
fetching: "Chargement"
refresh: "Plus"
close: "Fermer"
desktop/views/components/game-window.vue:
game: "Reversi"
desktop/views/components/home.vue:
@ -724,11 +735,11 @@ desktop/views/components/notes.vue:
desktop/views/components/notifications.vue:
empty: "Aucune de notification !"
desktop/views/components/post-form.vue:
add-visible-user: "+Ajouter un utilisateur"
add-visible-user: "+Ajouter un·e utilisateur·rice"
attach-location-information: "Attacher des informations de localisation"
hide-contents: "Masquer les contenus"
reply-placeholder: "Répondre à cette note…"
quote-placeholder: "Citer cette note…"
reply-placeholder: "Répondre à cette note …"
quote-placeholder: "Citer cette note …"
submit: "Publier"
reply: "Répondre"
renote: "Republier"
@ -738,7 +749,7 @@ desktop/views/components/post-form.vue:
note-failed: "La note à échoué"
reply-failed: "La réponse a échoué"
renote-failed: "Échec lors de la republication"
posting: "Publication…"
posting: "Publication …"
attach-media-from-local: "Joindre un média depuis votre appareil"
attach-media-from-drive: "Joindre un média depuis votre Drive"
attach-cancel: "Annuler le fichier attaché"
@ -751,8 +762,8 @@ desktop/views/components/post-form.vue:
visibility: "Visibilité"
geolocation-alert: "Votre appareil ne prend pas en charge les services de localisation"
error: "Erreur"
enter-username: "Saisir un nom d'utilisateur…"
annotations: "内容への注釈 (オプション)"
enter-username: "Saisir un nom d'utilisateur …"
annotations: "Commenter le contenu (optionnel)"
desktop/views/components/post-form-window.vue:
note: "Nouvelle note"
reply: "Répondre"
@ -773,101 +784,6 @@ desktop/views/components/renote-form-window.vue:
desktop/views/pages/user-following-or-followers.vue:
following: "{user} suit"
followers: "Abonné·e·s de {user}"
desktop/views/components/settings-window.vue:
settings: "Paramètres"
desktop/views/components/settings.vue:
profile: "Profil"
notification: "Notification"
apps: "Applications"
tags: "Hashtags"
mute-and-block: "Silencé·e·s / Bloqué·e·s"
blocking: "En cours de blocage"
security: "Sécurité"
signin: "Historique de connexion"
password: "Mot de Passe"
other: "Autres"
license: "Licence"
theme: "Thèmes"
behaviour: "Comportement"
fetch-on-scroll: "Chargement lors du défilement"
fetch-on-scroll-desc: "Chargement automatique du contenu lors du défilement de la page."
note-visibility: "Visibilité de la publication"
default-note-visibility: "Visibilité par défaut"
remember-note-visibility: "Se souvenir du mode de visibilité de la publication"
web-search-engine: "Moteur de recherche Web"
web-search-engine-desc: "Exemple: https://www.google.com/?#q={{query}}"
auto-popout: "Fenêtre contextuelle automatique"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
deck-nav: "Deck sans tansitions"
deck-nav-desc: "Vous obtenez une colonne temporaire sans transitions dans la page pendant la navigation, lors de lutilisation du Deck."
keep-cw: "Maintenir l'avertissement de contenu"
keep-cw-desc: "投稿にリプライする際、リプライ元の投稿にCWが設定されていたとき、デフォルトで同じCWを設定するようにします。"
deck-default: "Utiliser le Deck comme IU par défaut"
display: "Affichage et design"
customize: "Personnaliser l'Accueil"
wallpaper: "Arrière plan"
choose-wallpaper: "Sélectionner un fond d'écran"
delete-wallpaper: "Supprimer le fond d'écran"
dark-mode: "Mode nuit"
use-shadow: "Utiliser les ombres dans l'interface utilisateur"
rounded-corners: "Coins arrondis"
circle-icons: "Utiliser des icônes circulaires"
contrasted-acct: "Nom dutilisateur contrasté"
post-form-on-timeline: "Afficher le formulaire en haut du fil"
show-clock-on-header: "Afficher l'horloge à droite sur le coté supérieur"
show-reply-target: "Afficher les réponses"
timeline: "Chronologie"
show-my-renotes: "Afficher mes republications dans le fil"
show-renoted-my-notes: "Afficher mes republications dans les fils"
show-local-renotes: "Afficher les partages locaux sur les fils"
show-maps: "Afficher la carte"
remain-deleted-note: "Continuer à afficher les messages supprimés"
deck-column-align: "Alignement des colonnes du Deck"
deck-column-align-center: "Centrer"
deck-column-align-left: "À gauche"
deck-column-align-flexible: "Flexibles"
deck-column-width: "Largeur des colonnes du Deck"
deck-column-width-narrow: "Étroite"
deck-column-width-narrower: "Légèrement étroite"
deck-column-width-normal: "Normale"
deck-column-width-wider: "Légèrement large"
deck-column-width-wide: "Large"
sound: "Son"
enable-sounds: "Activer le son"
enable-sounds-desc: "Jouer un son lorsque vous recevez un message. Ce paramètre est sauvegardé dans le navigateur."
volume: "Volume"
test: "Test"
cache: "Cache"
clean-cache: "Nettoyage"
cache-warn: "Le nettoyage du cache du compte supprime les informations stockées dans le navigateur comme les messages, les réponses ainsi que dautres données (y compris les paramètres de configuration). Après le nettoyage, vous devez recharger la page."
cache-cleared: "Cache nettoyé"
cache-cleared-desc: "Veuillez recharger la page."
about: "À propose de Misskey"
operator: "L'admin de cette instance"
update: "Mise à jour de Misskey"
version: "Version :"
latest-version: "Dernière version :"
update-checking: "Vérification des mises à jour en cours…"
do-update: "Rechercher des mises à jour"
update-settings: "Paramètres avancés"
prevent-update: "Reporter les mises à jour (non recommandé)"
prevent-update-desc: "Même si ce paramètre est activé, la mise à jour pourrait être appliquée. Ce paramètre n'est valide que sur cet appareil."
no-updates: "Aucune mise à jour disponible"
no-updates-desc: "Votre client Misskey est à jour."
update-available: "Nouvelle version disponible !"
update-available-desc: "Les mises à jour seront appliquées une fois la page est rechargée."
advanced-settings: "Réglages avancés"
debug-mode: "Activer le mode débogage"
debug-mode-desc: "Ce paramètre est stocké dans le navigateur."
experimental: "Activer les fonctionnalités expérimentales"
experimental-desc: "Lactivation des fonctionnalités expérimentales peuvent rendre le client Misskey instable. Ce paramètre est stocké dans le navigateur."
tools: "Outils"
task-manager: "Gestionnaire de tâches"
third-parties: "Services tiers"
navbar-position: "Position de la barre de navigation"
navbar-position-top: "En haut"
navbar-position-left: "à gauche"
navbar-position-right: "à droite"
desktop/views/components/settings.2fa.vue:
intro: "Si vous configurez la vérication en deux étapes vous aurez non seulement besoin de votre mot de passe mais aussi un appareil déjà pré-enregistré(tel que votre smartphone) ce qui ameliora grandement la sécurité de votre compte."
detail: "Voir les détails..."
@ -958,17 +874,10 @@ desktop/views/components/ui.header.vue:
adjective: "M."
desktop/views/components/ui.header.account.vue:
profile: "Votre profil"
favorites: "Favorites"
lists: "Listes"
follow-requests: "Demandes de suivi"
customize: "Personnaliser l'Accueil"
follow-requests: "Demandes dabonnement"
admin: "Admin"
settings: "Réglages"
signout: "Déconnexion"
dark: "Fall in dark"
desktop/views/components/ui.header.nav.vue:
home: "Accueil"
deck: "Deck"
game: "Jeux"
desktop/views/components/ui.header.notifications.vue:
title: "Notifications"
@ -977,7 +886,7 @@ desktop/views/components/ui.header.post.vue:
desktop/views/components/ui.header.search.vue:
placeholder: "Chercher"
desktop/views/components/received-follow-requests-window.vue:
title: "Demandes de suivi"
title: "Demandes dabonnement"
accept: "Accepter"
reject: "Refuser"
desktop/views/components/user-lists-window.vue:
@ -1019,7 +928,7 @@ admin/views/dashboard.vue:
federated: "Fédérées"
admin/views/queue.vue:
operation: "Action(s)"
remove-all-jobs: "すべてのジョブをクリア"
remove-all-jobs: "Enlever toutes les tâches en attente"
admin/views/abuse.vue:
title: "Abus"
target: "Cible"
@ -1040,7 +949,6 @@ admin/views/instance.vue:
maintainer-email: "Contact administratif"
drive-config: "Paramètres du lecteur"
cache-remote-files: "Mettre en cache des fichiers distants"
cache-remote-files-desc: "この設定を無効にすると、リモートファイルをキャッシュせず直リンクするようになります。そのためサーバーのストレージを節約できますが、プライバシー設定で直リンクを無効にしているユーザーにはファイルが見えなくなったり、サムネイルが生成されないので通信量が増加します。通常はこの設定をオンにしておくことをおすすめします。"
local-drive-capacity-mb: "Volume du lecteur par utilisateur"
remote-drive-capacity-mb: "Volume du lecteur par utilisateur distant"
mb: "en mégaoctets"
@ -1065,7 +973,6 @@ admin/views/instance.vue:
discord-integration-client-id: "ID client"
discord-integration-client-secret: "Secret client"
proxy-account-config: "Compte proxy"
proxy-account-info: "プロキシアカウントは、特定の条件下でユーザーのリモートフォローを代行するアカウントです。例えば、ユーザーがリモートユーザーをリストに入れたとき、リストに入れられたユーザーを誰もフォローしていないとアクティビティがサーバーに配達されないため、代わりにプロキシアカウントがフォローするようにします。"
proxy-account-username: "Nom dutilisateur du compte proxy"
proxy-account-username-desc: "Spécifiez le nom dutilisateur du compte utilisé comme proxy."
proxy-account-warn: "Avant dentamer cette action, vous devez au préalable avoir créé un compte avec ce nom dutilisateur."
@ -1073,7 +980,7 @@ admin/views/instance.vue:
disable-registration: "Désactiver les inscriptions"
disable-local-timeline: "Désactiver le fil local"
disable-global-timeline: "Désactiver le fil global"
disabling-timelines-info: "これらのタイムラインを無効にしても、管理者およびモデレーターは引き続き利用できます。"
disabling-timelines-info: "Même si vous désactivez ces fils, l'administrateur et les modérateurs peuvent continuer à les utiliser."
invite: "Inviter"
save: "Sauvegarder"
saved: "Enregistré"
@ -1091,6 +998,7 @@ admin/views/instance.vue:
smtp-secure-info: "Désactiver STARTTLS lorsque celui-ci est utilisé."
smtp-host: "Hôte SMTP"
smtp-port: "Port SMTP"
smtp-auth: "Effectuer une authentification SMTP"
smtp-user: "Utilisateur SMTP"
smtp-pass: "Mot de passe SMTP"
serviceworker-config: "ServiceWorker"
@ -1167,7 +1075,7 @@ admin/views/users.vue:
verify-confirm: "Souhaiteriez-vous rendre votre compte comme étant un compte vérifié ?"
verified: "Le compte a été vérifié"
unverify: "Enlever la vérification du compte"
unverify-confirm: "公式アカウントを解除しますか?"
unverify-confirm: "Désirez-vous considérer ce compte comme étant non-vérifié ?"
unverified: "Ce compte n'est plus vérifié"
update-remote-user: "Mettre à jour les informations de lutilisateur·rice distant·e"
remote-user-updated: "Les informations de lutilisateur·rice distant·e ont étés mis à jour"
@ -1186,6 +1094,7 @@ admin/views/users.vue:
moderator: "Modérateur"
adminOrModerator: "Administrateur/Modérateur"
verified: "Compte vérifié"
silenced: "Déjà mis en sourdine"
suspended: "Suspendu"
origin:
title: "Origine"
@ -1243,36 +1152,45 @@ admin/views/federation.vue:
status: "Statuts"
latest-request-sent-at: "Dernière requête envoyée"
latest-request-received-at: "Dernière requête reçue"
remove-all-following: "フォローを全解除"
remove-all-following-info: "{host}からのフォローをすべて解除します。そのインスタンスがもう存在しなくなった場合などに実行してください。"
block: "ブロック"
lookup: "照会"
remove-all-following-info: "Se désabonner de tous les comptes de {host}. Exécutez cette commande si l'instance n'existe plus."
block: "Bloquer"
marked-as-closed: "Marquées comme fermées"
lookup: "Recherche"
instances: "Instances"
instance-not-registered: "そのインスタンスは登録されていません"
sort: "Trier par"
sorts:
caughtAtAsc: "Date dinscription (Ascendant)"
caughtAtDesc: "Date dinscription (Descendant)"
notesAsc: "投稿が少ない順"
lastCommunicatedAtAsc: "La date et l'heure des interactions plus anciennes"
lastCommunicatedAtDesc: "La date et l'heure des nouvelles interactions"
notesDesc: "Description des notes"
usersAsc: "ユーザーが少ない順"
usersDesc: "ユーザーが多い順"
followingAsc: "Les moins suivies"
followingDesc: "フォローが多い順"
followingDesc: "Ayant le plus d'abonné·e·s"
followersAsc: "Ayant le moins d'abonné·e·s"
followersDesc: "Ayant le plus d'abonné·e·s"
state: "状態"
driveUsageAsc: "Moins d'espace de stockage utilisé"
state: "État"
states:
all: "すべて"
blocked: "ブロック"
result-is-truncated: "上位{n}件を表示しています。"
all: "Tout"
blocked: "Bloquées"
not-responding: "Sans réponse"
marked-as-closed: "Marquée comme fermée"
charts: "Graphs"
chart-srcs:
requests: "Requêtes"
users: "Nombre dutilisateurs·trices : augmentation/diminution"
users-total: "Nombre total des utilisateur·rice·s"
notes: "Augmentation/diminution du nombre des notes"
notes-total: "Nombre total des notes"
ff: "Augmentation des abonné·e·s"
drive-usage: "Augmentation et diminution de la capacité stockage"
drive-usage-total: "Utilisation totale du stockage"
drive-files-total: "Nombre total des fichiers sur le Drive"
chart-spans:
hour: "Par heure"
day: "Par jour"
desktop/views/pages/welcome.vue:
about: "à propos"
gotit: "J'ai compris !"
signin: "Connexion"
signup: "S'enregistrer"
signin-button: "Se connecter"
signup-button: "S'inscrire"
timeline: "Fil dactualité"
announcements: "Notices"
photos: "Images récentes"
@ -1280,8 +1198,6 @@ desktop/views/pages/welcome.vue:
info: "Informations"
desktop/views/pages/drive.vue:
title: "Lecteur de Misskey"
desktop/views/pages/home-customize.vue:
title: "Personnaliser l'Accueil"
desktop/views/pages/note.vue:
prev: "Note précédente"
next: "Note suivante"
@ -1293,8 +1209,6 @@ desktop/views/pages/selectdrive.vue:
desktop/views/pages/search.vue:
not-available: "La fonction de recherche est désactivée dans les paramètres de linstance."
not-found: "Aucune publication trouvée pour « {q} »."
desktop/views/pages/share.vue:
share-with: "Partager avec {name}"
desktop/views/pages/tag.vue:
no-posts-found: "Aucune publication contenant « {q} » na été trouvée."
desktop/views/pages/user-list.users.vue:
@ -1313,29 +1227,26 @@ desktop/views/pages/user/user.photos.vue:
title: "Photos"
loading: "Chargement en cours"
no-photos: "Pas de photos"
desktop/views/pages/user/user.profile.vue:
follows-you: "Vous suit"
menu: "Menu"
desktop/views/pages/user/user.header.vue:
posts: "Notes"
following: "Suit"
followers: "Abonné·e·s"
is-bot: "Ce compte est un Bot"
no-description: "L'utilisateur n'a pas renseigné d'introduction sur son profile"
years-old: "{age} ans"
year: "/"
month: "/"
day: "-"
follows-you: "Vous suit"
desktop/views/pages/user/user.timeline.vue:
default: "Publications"
with-replies: "Publications et réponses"
with-media: "Média"
my-posts: "Mes Messages"
empty: "Cet utilisateur n'a rien posté encore."
desktop/views/widgets/messaging.vue:
title: "Messagerie"
desktop/views/widgets/notifications.vue:
title: "Notifications"
settings: "Réglages"
desktop/views/widgets/polls.vue:
title: "Sondages"
refresh: "Afficher d'autres"
@ -1364,8 +1275,6 @@ mobile/views/components/drive.vue:
prompt: "Que veux-tu faire ? (Entrez un nombre): <1 → Télécharger le fichier | 2 → Télécharger le fichier avec l'URL | 3 → Créer le dossier | 4 → Modifier le nom du dossier | 5 → Déplacer ce dossier | 6 → Supprimer ce dossier >"
deletion-alert: "Désolé ! La suppression dun dossier nest pas encore implémentée."
folder-name: "Nom du dossier"
root-rename-alert: "L'emplacement actuel est la racine, pas le dossier, vous ne pouvez donc pas le renommer. Veuillez vous déplacer dans le dossier dont vous souhaitez modifier le nom."
root-move-alert: "L'emplacement actuel est la racine, ce n'est pas un dossier et il ne peut pas être déplacé. Veuillez vous déplacer dans le dossier que vous souhaitez déplacer."
url-prompt: "URL du fichier que vous souhaitez téléverser"
uploading: "Envoi demandé. Le téléversement pourrait prendre un certain temps avant de s'achever."
mobile/views/components/drive-file-chooser.vue:
@ -1392,12 +1301,6 @@ common/views/components/follow-button.vue:
request-pending: "Demande en attente"
follow-processing: "En cours dabonnement"
follow-request: "Demande dabonnement"
mobile/views/components/friends-maker.vue:
title: "Abonnez-vous à"
empty: "Impossible de trouver des utilisateurs·trices à recommander."
fetching: "Chargement"
refresh: "Voir plus"
close: "Fermer"
mobile/views/components/note.vue:
private: "cette publication est privée"
deleted: "cette publication a été supprimée"
@ -1419,11 +1322,11 @@ mobile/views/components/note-sub.vue:
mobile/views/components/notifications.vue:
empty: "Aucune de notification !"
mobile/views/components/post-form.vue:
add-visible-user: "Ajouter un utilisateur"
add-visible-user: "Ajouter un·e utilisateur·rice"
submit: "Publier"
reply: "Répondre"
renote: "Republier"
quote-placeholder: "Citer ce billet... (Facultatif)"
quote-placeholder: "Citer ce billet ... (Facultatif)"
reply-placeholder: "Répondre à cette note"
cw-placeholder: "Commenter le contenu (optionnel)"
location-alert: "Votre appareil ne prend pas en charge les services de localisation"
@ -1434,8 +1337,6 @@ mobile/views/components/sub-note-content.vue:
deleted: "cette publication a été supprimée"
media-count: "{} médias attachés"
poll: "Sondage"
mobile/views/components/timeline.vue:
empty: "Pas de notes"
mobile/views/components/ui.header.vue:
welcome-back: "Content de vous revoir ! "
adjective: "M."
@ -1444,22 +1345,11 @@ mobile/views/components/ui.nav.vue:
notifications: "Notifications"
follow-requests: "Demandes dabonnement"
search: "Rechercher"
favorites: "Favoris"
user-lists: "Listes"
widgets: "Modules"
game: "Jeux"
darkmode: "Mode nuit"
settings: "Réglages"
admin: "Admin"
about: "À propos de Misskey"
mobile/views/components/user-timeline.vue:
no-notes: "Il semble que cet utilisateur na rien publié pour le moment."
no-notes-with-media: "Aucune note comprenant des médias"
mobile/views/components/users-list.vue:
all: "Tout"
known: "Vous connaissez"
mobile/views/pages/favorites.vue:
title: "Favoris"
mobile/views/pages/user-lists.vue:
title: "Listes"
enter-list-name: "Nom de la liste"
@ -1478,11 +1368,8 @@ mobile/views/pages/home.vue:
messages: "Messages"
mobile/views/pages/tag.vue:
no-posts-found: "Aucune publication ayant pour hashtag « {q} » na été trouvée."
mobile/views/pages/welcome.vue:
signup: "S'enregistrer"
mobile/views/pages/widgets.vue:
dashboard: "Tableau de bord"
widgets-hints: "Vous pouvez ajouter, supprimer et réarranger les widgets. Faites glisser « 三 » pour déplacer le widget. Appuyez sur « x » pour supprimer le widget. Certains widgets peuvent changer dapparence en cliquant dessus."
add-widget: "Ajouter"
customization-tips: "Conseils de personnalisation"
mobile/views/pages/widgets/activity.vue:
@ -1494,12 +1381,9 @@ mobile/views/pages/received-follow-requests.vue:
accept: "Accepter"
reject: "Refuser"
mobile/views/pages/note.vue:
title: "Post"
title: "Publication"
prev: "Note précédente"
next: "Note suivante"
mobile/views/pages/notifications.vue:
notifications: "Notifications"
read-all: "Êtes-vous sûr de vouloir marquer lensemble des notifications comme étant lues ?"
mobile/views/pages/games/reversi.vue:
reversi: "Reversi"
mobile/views/pages/search.vue:
@ -1509,47 +1393,6 @@ mobile/views/pages/selectdrive.vue:
select-file: "Choisissez un fichier"
mobile/views/pages/settings.vue:
signed-in-as: "Connecté·e en tant que {}"
design: "Affichage et design"
dark-mode: "Mode nuit"
i-am-under-limited-internet: "J'ai un accès Internet limité"
circle-icons: "Utiliser des icônes circulaires"
contrasted-acct: "Nom dutilisateur contrasté"
timeline: "Fil dactualité"
show-reply-target: "Afficher les réponses"
show-my-renotes: "Afficher mes partages"
show-renoted-my-notes: "Afficher mes notes partagées"
show-local-renotes: "Afficher les notes partagées localement"
post-style: "Style de la publication"
post-style-standard: "Standard"
post-style-smart: "Intelligent"
notification-position: "Style de notification"
notification-position-bottom: "en bas"
notification-position-top: "en haut"
behavior: "Comportement"
fetch-on-scroll: "Chargement lors du défilement"
keep-cw: "Garder l'avertissement de contenu"
note-visibility: "Visibilité de la publication"
default-note-visibility: "Visibilité par défaut"
remember-note-visibility: "Se souvenir du mode de visibilité de la publication"
web-search-engine: "Moteur de recherche Web"
web-search-engine-desc: "Exemple: https://www.google.com/?#q={{query}}"
disable-via-mobile: "Ne pas mentionner que ma publication provient d'un « périphérique mobile »"
load-raw-images: "Afficher les photos jointes en haute qualité"
load-remote-media: "Afficher les médias sur le serveur distant"
update: "Mise à jour de Misskey"
version: "Version :"
latest-version: "Dernière version :"
update-checking: "Recherche de mises à jour"
check-for-updates: "Fréquence de vérification"
no-updates: "Aucune mise à jour disponible"
no-updates-desc: "Votre Misskey est à jour."
update-available: "Nouvelle version disponible !"
update-available-desc: "Les mises à jour seront appliquées une fois la page est rechargée."
settings: "Réglages"
signout: "Déconnexion"
sound: "Sons"
enable-sounds: "Activer les sons"
password: "Mot de Passe"
mobile/views/pages/user.vue:
follows-you: "Vous suit"
following: "Abonnements"
@ -1565,15 +1408,9 @@ mobile/views/pages/user/home.vue:
activity: "Activité"
keywords: "Mot clés"
domains: "Domaines"
frequently-replied-users: "Utilisateurs mentionnés souvent"
frequently-replied-users: "Mentions fréquentes"
followers-you-know: "Abonné·e·s que vous connaissez"
last-used-at: "Dernière connexion il y a"
mobile/views/pages/user/home.followers-you-know.vue:
no-users: "Aucun utilisateur·rice connu·e"
mobile/views/pages/user/home.friends.vue:
no-users: "Aucun utilisateur connu"
mobile/views/pages/user/home.notes.vue:
no-notes: "Pas de notes"
mobile/views/pages/user/home.photos.vue:
no-photos: "Pas de photos"
deck:
@ -1587,6 +1424,7 @@ deck:
direct: "Messages directs"
notifications: "Notifications"
list: "Listes"
select-list: "Sélectionnez une liste"
swap-left: "Déplacer à gauche"
swap-right: "Déplacer à droite"
swap-up: "Déplacer vers le haut"
@ -1596,11 +1434,14 @@ deck:
rename: "Renommer"
stack-left: "Vers la gauche"
pop-right: "Vers la droite"
disabled-timeline:
title: "Le fil été désactivé"
description: "Ce fil a été désactivé par l'administrateur du serveur."
deck/deck.tl-column.vue:
is-media-only: "Les publications médias uniquement"
is-media-view: "Vue média"
edit: "Option"
deck/deck.user-column.vue:
follows-you: "Vous suit"
posts: "Notes"
following: "Suit"
followers: "Abonnés"

6
locales/index.d.ts vendored
View File

@ -1,5 +1,3 @@
type Locale = { [key: string]: string };
declare const locales: { [lang: string]: any };
declare const locales: { [lang: string]: Locale };
export default locales;
export = locales;

View File

@ -5,9 +5,46 @@
const fs = require('fs');
const yaml = require('js-yaml');
const langs = ['de-DE', 'en-US', 'fr-FR', 'ja-JP', 'ja-KS', 'pl-PL', 'es-ES', 'nl-NL', 'zh-CN', 'ko-KR'];
const merge = (...args) => args.reduce((a, c) => ({
...a,
...c,
...Object.entries(a)
.filter(([k]) => c && typeof c[k] === 'object')
.reduce((a, [k, v]) => (a[k] = merge(v, c[k]), a), {})
}), {});
const loadLocale = lang => yaml.safeLoad(fs.readFileSync(`${__dirname}/${lang}.yml`, 'utf-8'));
const locales = langs.map(lang => ({ [lang]: loadLocale(lang) }));
const languages = [
'de-DE',
'en-US',
'es-ES',
'fr-FR',
'ja-JP',
'ja-KS',
'ko-KR',
'nl-NL',
'pl-PL',
'zh-CN',
];
module.exports = locales.reduce((a, b) => ({ ...a, ...b }));
const primaries = {
'ja': 'JP',
'zh': 'CN',
};
const locales = languages.reduce((a, c) => (a[c] = yaml.safeLoad(fs.readFileSync(`${__dirname}/${c}.yml`, 'utf-8')) || {}, a), {});
module.exports = Object.entries(locales)
.reduce((a, [k ,v]) => (a[k] = (() => {
const [lang] = k.split('-');
switch (k) {
case 'ja-JP': return v;
case 'ja-KS':
case 'en-US': return merge(locales['ja-JP'], v);
default: return merge(
locales['ja-JP'],
locales['en-US'],
locales[`${lang}-${primaries[lang]}`] || {},
v
);
}
})(), a), {});

File diff suppressed because it is too large Load Diff

View File

@ -28,6 +28,13 @@ common:
load-more: "もっと読み込む"
enter-password: "パスワードを入力してください"
2fa: "二段階認証"
customize-home: "ホームをカスタマイズ"
featured-notes: "ハイライト"
dark-mode: "ダークモード"
signin: "ログイン"
signup: "新規登録"
signout: "ログアウト"
reload-to-apply-the-setting: "この設定を反映するにはページをリロードする必要があります。今すぐリロードしますか?"
got-it: "わかった"
customization-tips:
@ -58,6 +65,17 @@ common:
trash: "ゴミ箱"
drive: "ドライブ"
messaging: "トーク"
home: "ホーム"
deck: "デッキ"
timeline: "タイムライン"
explore: "みつける"
following: "フォロー中"
followers: "フォロワー"
favorites: "お気に入り"
empty-timeline-info:
follow-users-to-make-your-timeline: "ユーザーをフォローすると投稿がタイムラインに表示されます。"
explore: "ユーザーを探索する"
weekday-short:
sunday: "日"
@ -109,31 +127,119 @@ common:
e: "ここに書いてください"
f: "あなたが書くのを待っています..."
settings: "設定"
_settings:
profile: "プロフィール"
notification: "通知"
apps: "アプリ"
tags: "ハッシュタグ"
mute-and-block: "ミュート/ブロック"
blocking: "ブロック"
security: "セキュリティ"
signin: "ログイン履歴"
password: "パスワード"
other: "その他"
appearance: "デザイン"
behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み"
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
web-search-engine: "ウェブ検索エンジン"
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
keep-cw: "CW保持"
keep-cw-desc: "投稿にリプライする際、リプライ元の投稿にCWが設定されていたとき、デフォルトで同じCWを設定するようにします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
disable-showing-animated-images: "アニメーション画像を再生しない"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
always-show-nsfw: "常に閲覧注意のメディアを表示する"
always-mark-nsfw: "常にメディアを閲覧注意として投稿"
show-full-acct: "ユーザー名のホストを省略しない"
show-via: "viaを表示する"
reduce-motion: "UIの動きを減らす"
this-setting-is-this-device-only: "このデバイスのみ"
use-os-default-emojis: "OS標準の絵文字を使用"
line-width: "線の太さ"
line-width-thin: "細い"
line-width-normal: "普通"
line-width-thick: "太い"
font-size: "文字の大きさ"
font-size-x-small: "小さい"
font-size-small: "少し小さい"
font-size-medium: "普通"
font-size-large: "少し大きい"
font-size-x-large: "大きい"
deck-column-align: "デッキのカラムの配置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
deck-column-align-flexible: "フレキシブル"
deck-column-width: "デッキのカラムの幅"
deck-column-width-narrow: "狭"
deck-column-width-narrower: "やや狭"
deck-column-width-normal: "普通"
deck-column-width-wider: "やや広"
deck-column-width-wide: "広"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
timeline: "タイムライン"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
remain-deleted-note: "削除された投稿を表示し続ける"
sound: "サウンド"
enable-sounds: "サウンドを有効にする"
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
volume: "ボリューム"
test: "テスト"
update: "Misskey Update"
version: "バージョン:"
latest-version: "最新のバージョン:"
update-checking: "アップデートを確認中"
do-update: "アップデートを確認"
update-settings: "詳細設定"
no-updates: "利用可能な更新はありません"
no-updates-desc: "お使いのMisskeyは最新です。"
update-available: "新しいバージョンが利用可能です"
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
advanced-settings: "高度な設定"
debug-mode: "デバッグモードを有効にする"
debug-mode-desc: "この設定はブラウザに記憶されます。"
navbar-position: "ナビゲーションバーの位置"
navbar-position-top: "上"
navbar-position-left: "左"
navbar-position-right: "右"
i-am-under-limited-internet: "私は通信を制限されている"
post-style: "投稿の表示スタイル"
post-style-standard: "標準"
post-style-smart: "スマート"
notification-position: "通知の表示"
notification-position-bottom: "下"
notification-position-top: "上"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する"
search: "検索"
delete: "削除"
loading: "読み込み中"
ok: "わかった"
ok: "おk"
cancel: "やめる"
update-available-title: "更新があります"
update-available: "Misskeyの新しいバージョンがあります({newer}。現在{current}を利用中)。ページを再度読み込みすると更新が適用されます。"
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
disable-showing-animated-images: "アニメーション画像を再生しない"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
always-show-nsfw: "常に閲覧注意のメディアを表示する"
always-mark-nsfw: "常にメディアを閲覧注意として投稿"
show-full-acct: "ユーザー名のホストを省略しない"
show-via: "viaを表示する"
reduce-motion: "UIの動きを減らす"
this-setting-is-this-device-only: "このデバイスのみ"
use-os-default-emojis: "OS標準の絵文字を使用"
line-width: "線の太さ"
line-width-thin: "細い"
line-width-normal: "普通"
line-width-thick: "太い"
hide-password: "パスワードを隠す"
show-password: "パスワードを表示する"
@ -143,6 +249,9 @@ common:
is-remote-post: "この投稿情報はコピーです。"
view-on-remote: "正確な情報を見る"
renoted-by: "{user}がRenote"
no-notes: "投稿がありません"
turn-on-darkmode: "闇に飲まれる"
turn-off-darkmode: "光あれ"
error:
title: "問題が発生しました"
@ -213,6 +322,23 @@ auth/views/index.vue:
error: "セッションが存在しません。"
sign-in: "サインインしてください"
common/views/pages/explore.vue:
verified-users: "公式アカウント"
popular-users: "人気のユーザー"
recently-updated-users: "最近投稿したユーザー"
recently-registered-users: "新規ユーザー"
popular-tags: "人気のタグ"
federated: "連合"
explore: "{host}を探索"
users-info: "現在{users}ユーザーが登録されています"
common/views/components/url-preview.vue:
enable-player: "プレイヤーを開く"
disable-player: "プレイヤーを閉じる"
common/views/components/user-list.vue:
no-users: "ユーザーがいません"
common/views/components/games/reversi/reversi.vue:
matching:
waiting-for: "{}を待っています"
@ -402,10 +528,15 @@ common/views/components/user-menu.vue:
common/views/components/poll.vue:
vote-to: "「{}」に投票する"
vote-count: "{}票"
total-users: "{}人が投票"
total-votes: "{}票"
vote: "投票する"
show-result: "結果を見る"
voted: "投票済み"
closed: "終了済み"
remaining-days: "終了まであと{d}日{h}時間"
remaining-hours: "終了まであと{h}時間{m}分"
remaining-minutes: "終了まであと{m}分{s}秒"
remaining-seconds: "終了まであと{s}秒"
common/views/components/poll-editor.vue:
no-only-one-choice: "アンケートには、選択肢が最低2つ必要です"
@ -413,6 +544,20 @@ common/views/components/poll-editor.vue:
remove: "この選択肢を削除"
add: "+選択肢を追加"
destroy: "アンケートを破棄"
multiple: "複数回答可"
expiration: "期限"
infinite: "無期限"
at: "日時指定"
after: "経過指定"
no-more: "これ以上追加できません"
deadline-date: "期日"
deadline-time: "時間"
interval: "期間"
unit: "単位"
second: "秒"
minute: "分"
hour: "時間"
day: "日"
common/views/components/reaction-picker.vue:
choose-reaction: "リアクションを選択"
@ -433,7 +578,6 @@ common/views/components/signin.vue:
password: "パスワード"
token: "トークン"
signing-in: "やってます..."
signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
signin-with-github: "GitHubでログイン"
@ -558,12 +702,20 @@ common/views/components/profile-editor.vue:
email-verified: "メールアドレスが確認されました"
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
export: "エクスポート"
import: "インポート"
export-and-import: "エクスポートとインポート"
export-targets:
all-notes: "すべての投稿データ"
following-list: "フォロー"
mute-list: "ミュート"
blocking-list: "ブロック"
user-lists: "リスト"
export-requested: "エクスポートをリクエストしました。これには時間がかかる場合があります。エクスポートが終わると、ドライブにファイルが追加されます。"
import-requested: "インポートをリクエストしました。これには時間がかかる場合があります。"
enter-password: "パスワードを入力してください"
danger-zone: "危険な設定"
delete-account: "アカウントを削除"
account-deleted: "アカウントが削除されました。データが消えるまで時間がかかる場合があります。"
common/views/components/user-list-editor.vue:
users: "ユーザー"
@ -761,13 +913,6 @@ desktop/views/components/following-window.vue:
desktop/views/components/following.vue:
empty: "フォロー中のユーザーはいないようです。"
desktop/views/components/friends-maker.vue:
title: "気になるユーザーをフォロー:"
empty: "おすすめのユーザーは見つかりませんでした。"
fetching: "読み込んでいます"
refresh: "もっと見る"
close: "閉じる"
desktop/views/components/game-window.vue:
game: "リバーシ"
@ -866,111 +1011,6 @@ desktop/views/pages/user-following-or-followers.vue:
following: "{user}のフォロー"
followers: "{user}のフォロワー"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue:
profile: "プロフィール"
notification: "通知"
apps: "アプリ"
tags: "ハッシュタグ"
mute-and-block: "ミュート/ブロック"
blocking: "ブロック"
security: "セキュリティ"
signin: "サインイン履歴"
password: "パスワード"
other: "その他"
license: "ライセンス"
theme: "テーマ"
behaviour: "動作"
fetch-on-scroll: "スクロールで自動読み込み"
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
web-search-engine: "ウェブ検索エンジン"
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
auto-popout: "ウィンドウの自動ポップアウト"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
keep-cw: "CW保持"
keep-cw-desc: "投稿にリプライする際、リプライ元の投稿にCWが設定されていたとき、デフォルトで同じCWを設定するようにします。"
deck-default: "デッキをデフォルトのUIにする"
display: "デザインと表示"
customize: "ホームをカスタマイズ"
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
timeline: "タイムライン"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
show-maps: "マップの自動展開"
remain-deleted-note: "削除された投稿を表示し続ける"
deck-column-align: "デッキのカラムの配置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
deck-column-align-flexible: "フレキシブル"
deck-column-width: "デッキのカラムの幅"
deck-column-width-narrow: "狭"
deck-column-width-narrower: "やや狭"
deck-column-width-normal: "普通"
deck-column-width-wider: "やや広"
deck-column-width-wide: "広"
sound: "サウンド"
enable-sounds: "サウンドを有効にする"
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
volume: "ボリューム"
test: "テスト"
cache: "キャッシュ"
clean-cache: "クリーンアップ"
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
cache-cleared: "キャッシュを削除しました"
cache-cleared-desc: "ページを再度読み込みしてください。"
about: "Misskeyについて"
operator: "このサーバーの運営者"
update: "Misskey Update"
version: "バージョン:"
latest-version: "最新のバージョン:"
update-checking: "アップデートを確認中"
do-update: "アップデートを確認"
update-settings: "詳細設定"
prevent-update: "アップデートを延期する(非推奨)"
prevent-update-desc: "この設定をオンにしてもアップデートが反映される場合があります。この設定はこのデバイスのみ有効です。"
no-updates: "利用可能な更新はありません"
no-updates-desc: "お使いのMisskeyは最新です。"
update-available: "新しいバージョンが利用可能です"
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
advanced-settings: "高度な設定"
debug-mode: "デバッグモードを有効にする"
debug-mode-desc: "この設定はブラウザに記憶されます。"
experimental: "実験的機能を有効にする"
experimental-desc: "実験的機能を有効にするとMisskeyの動作が不安定になる可能性があります。この設定はブラウザに記憶されます。"
tools: "ツール"
task-manager: "タスクマネージャ"
third-parties: "サードパーティ"
navbar-position: "ナビゲーションバーの位置"
navbar-position-top: "上"
navbar-position-left: "左"
navbar-position-right: "右"
desktop/views/components/settings.2fa.vue:
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
detail: "詳細..."
@ -1073,18 +1113,11 @@ desktop/views/components/ui.header.vue:
desktop/views/components/ui.header.account.vue:
profile: "プロフィール"
favorites: "お気に入り"
lists: "リスト"
follow-requests: "フォロー申請"
customize: "ホームのカスタマイズ"
admin: "管理"
settings: "設定"
signout: "サインアウト"
dark: "闇に飲まれる"
desktop/views/components/ui.header.nav.vue:
home: "ホーム"
deck: "デッキ"
game: "ゲーム"
desktop/views/components/ui.header.notifications.vue:
@ -1134,6 +1167,7 @@ admin/views/index.vue:
hashtags: "ハッシュタグ"
abuse: "スパム報告"
queue: "ジョブキュー"
logs: "ログ"
back-to-misskey: "Misskeyに戻る"
admin/views/dashboard.vue:
@ -1146,7 +1180,7 @@ admin/views/dashboard.vue:
federated: "連合"
admin/views/queue.vue:
operation: "操作"
title: "キュー"
remove-all-jobs: "すべてのジョブをクリア"
admin/views/abuse.vue:
@ -1221,6 +1255,7 @@ admin/views/instance.vue:
smtp-secure-info: "STARTTLS使用時はオフにします。"
smtp-host: "SMTPホスト"
smtp-port: "SMTPポート"
smtp-auth: "SMTP認証を行う"
smtp-user: "SMTPユーザー"
smtp-pass: "SMTPパスワード"
serviceworker-config: "ServiceWorker"
@ -1319,6 +1354,7 @@ admin/views/users.vue:
moderator: "モデレーター"
adminOrModerator: "管理者+モデレーター"
verified: "公式アカウント"
silenced: "サイレンス済み"
suspended: "凍結済み"
origin:
title: "オリジン"
@ -1384,6 +1420,7 @@ admin/views/federation.vue:
remove-all-following: "フォローを全解除"
remove-all-following-info: "{host}からのフォローをすべて解除します。そのインスタンスがもう存在しなくなった場合などに実行してください。"
block: "ブロック"
marked-as-closed: "閉鎖されているとマーク"
lookup: "照会"
instances: "インスタンス"
instance-not-registered: "そのインスタンスは登録されていません"
@ -1391,6 +1428,8 @@ admin/views/federation.vue:
sorts:
caughtAtAsc: "登録日時が古い順"
caughtAtDesc: "登録日時が新しい順"
lastCommunicatedAtAsc: "最後にやり取りした日時が古い順"
lastCommunicatedAtDesc: "最後にやり取りした日時が新しい順"
notesAsc: "投稿が少ない順"
notesDesc: "投稿が多い順"
usersAsc: "ユーザーが少ない順"
@ -1407,6 +1446,8 @@ admin/views/federation.vue:
states:
all: "すべて"
blocked: "ブロック"
not-responding: "応答なし"
marked-as-closed: "閉鎖とマーク済み"
result-is-truncated: "上位{n}件を表示しています。"
charts: "チャート"
chart-srcs:
@ -1418,20 +1459,15 @@ admin/views/federation.vue:
ff: "フォロー/フォロワーの増減"
ff-total: "フォロー/フォロワーの積算"
drive-usage: "ドライブ使用量の増減"
drive-usage-total: "ドライブ使用量の増減"
drive-usage-total: "ドライブ使用量の積算"
drive-files: "ドライブファイル数の増減"
drive-files-total: "ドライブファイル数の増減"
drive-files-total: "ドライブファイル数の積算"
chart-spans:
hour: "1時間ごと"
day: "1日ごと"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
announcements: "お知らせ"
photos: "最近の画像"
@ -1441,9 +1477,6 @@ desktop/views/pages/welcome.vue:
desktop/views/pages/drive.vue:
title: "Misskey Drive"
desktop/views/pages/home-customize.vue:
title: "ホームのカスタマイズ"
desktop/views/pages/note.vue:
prev: "前の投稿"
next: "次の投稿"
@ -1458,9 +1491,6 @@ desktop/views/pages/search.vue:
not-available: "検索機能はインスタンスの設定で無効になっています。"
not-found: "「{q}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "{name}で共有"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿は見つかりませんでした。"
@ -1484,33 +1514,29 @@ desktop/views/pages/user/user.photos.vue:
loading: "読み込み中"
no-photos: "写真はありません"
desktop/views/pages/user/user.profile.vue:
follows-you: "フォローされています"
menu: "メニュー"
desktop/views/pages/user/user.header.vue:
posts: "投稿"
following: "フォロー"
followers: "フォロワー"
is-bot: "このアカウントはBotです"
no-description: "自己紹介はありません"
years-old: "{age}歳"
year: "年"
month: "月"
day: "日"
follows-you: "フォローされています"
desktop/views/pages/user/user.timeline.vue:
default: "投稿"
with-replies: "投稿と返信"
with-media: "メディア"
my-posts: "私の投稿"
empty: "このユーザーはまだ何も投稿していないようです。"
desktop/views/widgets/messaging.vue:
title: "メッセージ"
desktop/views/widgets/notifications.vue:
title: "通知"
settings: "通知の設定"
desktop/views/widgets/polls.vue:
title: "アンケート"
@ -1545,8 +1571,7 @@ mobile/views/components/drive.vue:
prompt: "何をしますか?(数字を入力してください): <1 → ファイルをアップロード | 2 → ファイルをURLでアップロード | 3 → フォルダ作成 | 4 → このフォルダ名を変更 | 5 → このフォルダを移動 | 6 → このフォルダを削除>"
deletion-alert: "ごめんなさい!フォルダの削除は未実装です...。"
folder-name: "フォルダー名"
root-rename-alert: "現在いる場所はルートで、フォルダではないため名前の変更はできません。名前を変更したいフォルダに移動してからやってください。"
root-move-alert: "現在いる場所はルートで、フォルダではないため移動はできません。移動したいフォルダに移動してからやってください。"
here-is-root: "現在いる場所はルートで、フォルダではありません。"
url-prompt: "アップロードしたいファイルのURL"
uploading: "アップロードをリクエストしました。アップロードが完了するまで時間がかかる場合があります。"
@ -1580,13 +1605,6 @@ common/views/components/follow-button.vue:
follow-processing: "フォロー処理中"
follow-request: "フォロー申請"
mobile/views/components/friends-maker.vue:
title: "気になるユーザーをフォロー"
empty: "おすすめのユーザーは見つかりませんでした。"
fetching: "読み込んでいます"
refresh: "もっと見る"
close: "閉じる"
mobile/views/components/note.vue:
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
@ -1630,9 +1648,6 @@ mobile/views/components/sub-note-content.vue:
media-count: "{}つのメディア"
poll: "アンケート"
mobile/views/components/timeline.vue:
empty: "投稿がありません"
mobile/views/components/ui.header.vue:
welcome-back: "おかえりなさい、"
adjective: "さん"
@ -1642,26 +1657,12 @@ mobile/views/components/ui.nav.vue:
notifications: "通知"
follow-requests: "フォロー申請"
search: "検索"
favorites: "お気に入り"
user-lists: "リスト"
widgets: "ウィジェット"
game: "ゲーム"
darkmode: "ダークモード"
settings: "設定"
admin: "管理"
about: "Misskeyについて"
mobile/views/components/user-timeline.vue:
no-notes: "このユーザーは投稿していないようです。"
no-notes-with-media: "メディア付き投稿はありません。"
mobile/views/components/users-list.vue:
all: "すべて"
known: "知り合い"
mobile/views/pages/favorites.vue:
title: "お気に入り"
mobile/views/pages/user-lists.vue:
title: "リスト"
enter-list-name: "リスト名を入力してください"
@ -1686,9 +1687,6 @@ mobile/views/pages/home.vue:
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
@ -1711,10 +1709,6 @@ mobile/views/pages/note.vue:
prev: "前の投稿"
next: "次の投稿"
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/games/reversi.vue:
reversi: "リバーシ"
@ -1727,47 +1721,6 @@ mobile/views/pages/selectdrive.vue:
mobile/views/pages/settings.vue:
signed-in-as: "{}としてサインイン中"
design: "デザインと表示"
dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "自分の投稿のRenoteを表示する"
show-local-renotes: "ローカルの投稿のRenoteを表示する"
post-style: "投稿の表示スタイル"
post-style-standard: "標準"
post-style-smart: "スマート"
notification-position: "通知の表示"
notification-position-bottom: "下"
notification-position-top: "上"
behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み"
keep-cw: "CW保持"
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
web-search-engine: "ウェブ検索エンジン"
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する"
update: "Misskey Update"
version: "バージョン:"
latest-version: "最新のバージョン:"
update-checking: "アップデートを確認中"
check-for-updates: "アップデートを確認"
no-updates: "利用可能な更新はありません"
no-updates-desc: "お使いのMisskeyは最新です。"
update-available: "新しいバージョンが利用可能です"
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
sound: "サウンド"
enable-sounds: "サウンドを有効にする"
password: "パスワード"
mobile/views/pages/user.vue:
follows-you: "フォローされています"
@ -1785,19 +1738,10 @@ mobile/views/pages/user/home.vue:
activity: "アクティビティ"
keywords: "キーワード"
domains: "頻出ドメイン"
frequently-replied-users: "よく話すユーザー"
frequently-replied-users: "よく話すユーザー"
followers-you-know: "知り合いのフォロワー"
last-used-at: "最終ログイン"
mobile/views/pages/user/home.followers-you-know.vue:
no-users: "知り合いのユーザーはいません"
mobile/views/pages/user/home.friends.vue:
no-users: "よく会話するユーザーはいません"
mobile/views/pages/user/home.notes.vue:
no-notes: "投稿はありません"
mobile/views/pages/user/home.photos.vue:
no-photos: "写真はありません"
@ -1812,6 +1756,7 @@ deck:
direct: "ダイレクト投稿"
notifications: "通知"
list: "リスト"
select-list: "リストを選択してください"
swap-left: "左に移動"
swap-right: "右に移動"
swap-up: "上に移動"
@ -1821,13 +1766,16 @@ deck:
rename: "名前を変更"
stack-left: "左に重ねる"
pop-right: "右に出す"
disabled-timeline:
title: "無効化されたタイムライン"
description: "サーバーの運営者により、このタイムラインは使用できない状態に設定されています。"
deck/deck.tl-column.vue:
is-media-only: "メディア投稿のみ"
is-media-view: "メディアビュー"
edit: "オプション"
deck/deck.user-column.vue:
follows-you: "フォローされています"
posts: "投稿"
following: "フォロー"
followers: "フォロワー"

View File

@ -1,7 +1,6 @@
---
meta:
lang: "日本語 (関西弁)"
divider: ""
common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
@ -56,6 +55,11 @@ common:
trash: "ゴミ箱"
drive: "ドライブ"
messaging: "トーク"
home: "ホーム"
timeline: "タイムライン"
following: "フォローしとる"
followers: "フォロワー"
favorites: "お気に入り"
weekday-short:
sunday: "日"
monday: "月"
@ -101,36 +105,22 @@ common:
d: "言うときたいことは?"
e: "ここに書いてや"
f: "あんさんが書くんを待っちょります..."
_settings:
profile: "プロフィール"
notification: "通知"
tags: "ハッシュタグ"
blocking: "ブロック"
password: "パスワード"
other: "その他"
timeline: "タイムライン"
search: "検索"
delete: "削除"
loading: "読み込み中"
ok: "ほい"
update-available-title: "更新があんで"
update-available: "Misskeyの新しいバージョンがあんで({newer}。現在{current}をつこてるわ)。ページを再度読み込みしたると更新が適用されるわ。"
my-token-regenerated: "あんさんのトークンが更新されたらしいわ。すまんがとりあえずサインアウトすんで。"
i-like-sushi: "寿司(のほうがプリンよりむしろ)ウマい、タコ焼きはあらへんけど。"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示や!"
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
verified-user: "アメちゃん付きアカウント"
disable-animated-mfm: "投稿内のちょろちょろ動いてんのを止める"
disable-showing-animated-images: "アニメーション画像を再生しない"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
always-show-nsfw: "閲覧注意?見せたらあかん?そんなん知らんわ、見せろや!"
always-mark-nsfw: "わからんからとりあえずメディアは見せたらあかん"
show-full-acct: "ユーザー名のホストも出したる"
show-via: "viaを見せる"
reduce-motion: "UI、動き過ぎや、静かにしてや"
this-setting-is-this-device-only: "このデバイスのみ"
use-os-default-emojis: "OSにもとから入っとる絵文字使う"
line-width: "線の太さ"
line-width-thin: "細い"
line-width-normal: "普通"
line-width-thick: "太い"
hide-password: "パスワードを隠す"
show-password: "パスワードを表示する"
do-not-use-in-production: "開発ビルドや。本番環境で使わんといて!知らんで!"
user-suspended: "このユーザーは凍結されています。"
is-remote-user: "このユーザー情報は不正確な可能性があります。"
is-remote-post: "この投稿情報はコピーです。"
view-on-remote: "ちゃんとした情報見せてや!"
renoted-by: "{user}がRenote"
@ -172,7 +162,7 @@ common:
hashtags: "ハッシュタグ"
dev: "アプリの作成あかんかったわ。もっぺんやってみて。"
ai-chan-kawaii: "藍ちゃめっさべっぴんさんや"
you: "あなた"
you: "あんさん"
auth/views/form.vue:
share-access: "あんたのアカウントに<i>{name}</i>がアクセスしようとしてるで?ええか?"
permission-ask: "このアプリは次の権限を要求してんで:"
@ -197,6 +187,9 @@ auth/views/index.vue:
please-go-back: "アプリケーションに戻って、気張ってってな。"
error: "セッションが存在してへん。"
sign-in: "サインインしてや"
common/views/pages/explore.vue:
verified-users: "アメちゃん付きアカウント"
federated: "連合"
common/views/components/games/reversi/reversi.vue:
matching:
waiting-for: "{}を待っとります"
@ -268,7 +261,6 @@ common/views/components/media-banner.vue:
sensitive: "見せたらあかん"
click-to-show: "押してみ、見せたるわ"
common/views/components/theme.vue:
theme: "テーマ"
light-theme: "ナイトゲームちゃう時のテーマどないする?"
dark-theme: "ナイトゲームの時のテーマどないする?"
light-themes: "デイゲーム"
@ -285,7 +277,6 @@ common/views/components/theme.vue:
base-theme: "この色が背景や!"
base-theme-light: "Light"
base-theme-dark: "Dark"
find-more-theme: "その他のテーマを入手"
theme-name: "テーマ名"
preview-created-theme: "試してみる"
invalid-theme: "このテーマあかんわ、なんか間違うとる"
@ -307,8 +298,6 @@ common/views/components/theme.vue:
common/views/components/cw-button.vue:
hide: "もうええわ"
show: "見たいやろ?"
chars: "{count}文字"
files: "{count}ファイル"
poll: "アンケート"
common/views/components/messaging.vue:
search-user: "ユーザーを探す"
@ -339,38 +328,22 @@ common/views/components/nav.vue:
develop: "開発者"
feedback: "フィードバック"
common/views/components/note-menu.vue:
mention: "メンション"
detail: "もっと"
copy-content: "内容をコピー"
copy-link: "リンクをコピー"
favorite: "お気に入り"
unfavorite: "お気に入りやめる"
watch: "ウォッチ"
unwatch: "ウォッチ解除"
pin: "ピン留め"
unpin: "ピン留めやめる"
delete: "ほかす"
delete-confirm: "この投稿を削除してもええか?"
remote: "投稿元に行ってみよか"
common/views/components/user-menu.vue:
mention: "メンション"
mute: "ミュート"
unmute: "ミュート解除"
block: "ブロック"
unblock: "ブロック解除"
push-to-list: "リストに追加"
select-list: "リストを選択してください"
report-abuse: "スパムを報告"
report-abuse-detail: "どのような迷惑行為を行っていますか?"
report-abuse-reported: "管理者に報告されました。ご協力ありがとうございました。"
silence: "サイレンス"
unsilence: "サイレンス解除"
suspend: "凍結"
unsuspend: "凍結解除"
common/views/components/poll.vue:
vote-to: "「{}」に投票や!"
vote-count: "{}票"
total-users: "{}人が投票"
vote: "投票するで"
show-result: "結果を見よか"
voted: "投票済みや"
@ -380,6 +353,7 @@ common/views/components/poll-editor.vue:
remove: "この選択肢を消すで"
add: "+選択肢を追加"
destroy: "アンケートをほかそ"
day: "日"
common/views/components/reaction-picker.vue:
choose-reaction: "リアクション、どれにするんや?"
common/views/components/emoji-picker.vue:
@ -397,7 +371,6 @@ common/views/components/signin.vue:
password: "パスワード"
token: "トークン"
signing-in: "サインイン中や..."
signin: "サインイン"
or: "それか"
signin-with-twitter: "Twitterでサインイン"
signin-with-github: "GitHubでログイン"
@ -435,11 +408,6 @@ common/views/components/stream-indicator.vue:
connected: "つないだわ"
common/views/components/notification-settings.vue:
title: "通知"
mark-as-read-all-notifications: "すべての通知を既読にする"
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
mark-as-read-all-talk-messages: "すべてのトークを既読にする"
auto-watch: "投稿の自動ウォッチ"
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
common/views/components/integration-settings.vue:
title: "サービス連携"
connect: "つなげる"
@ -489,7 +457,6 @@ common/views/components/profile-editor.vue:
account: "アカウント"
location: "場所"
description: "自己紹介"
you-can-include-hashtags: "ハッシュタグを含めることができます。"
language: "言語"
birthday: "誕生日"
avatar: "アイコン"
@ -498,7 +465,6 @@ common/views/components/profile-editor.vue:
is-bot: "このアカウントはBotやで"
is-locked: "他人のフォローは許可してからや!"
careful-bot: "Botからのフォローだけは許可制や"
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する"
advanced: "その他"
privacy: "プライバシーってなんや?オカンの年齢か?"
save: "保存"
@ -510,19 +476,15 @@ common/views/components/profile-editor.vue:
email-verified: "このメールアドレスOKや"
email-not-verified: "メールアドレスが確認されとらん。メールボックスもっぺん見てくれへん?"
export: "エクスポート"
import: "インポート"
export-targets:
all-notes: "すべての投稿データ"
following-list: "フォロー"
mute-list: "ミュート"
blocking-list: "ブロック"
export-requested: "エクスポートをリクエストしました。これには時間がかかる場合があります。エクスポートが終わると、ドライブにファイルが追加されます。"
user-lists: "リスト"
enter-password: "パスワードを入れてや"
common/views/components/user-list-editor.vue:
users: "ユーザー"
rename: "リスト名を変更"
delete: "リストを削除"
remove-user: "このリストから削除"
delete-are-you-sure: "リスト「$1」を削除しますか"
deleted: "削除しました"
common/views/widgets/broadcast.vue:
fetching: "見てみるわ…"
no-broadcasts: "お知らせはあらへんで"
@ -572,11 +534,8 @@ common/views/widgets/tips.vue:
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができんで"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示してんねん"
tips-line21: "APIをつこてbotの開発なども行えるで"
tips-line23: "藍かわいいよ藍"
tips-line24: "Misskeyは2014年にサービスを開始したんよ"
tips-line25: "対応ブラウザやったらMisskeyを開いとらんでも通知を受け取れんで"
common/views/pages/not-found.vue:
page-not-found: "ページが見つかりませんでした"
common/views/pages/follow.vue:
signed-in-as: "{}としてサインイン中"
following: "フォローしとる"
@ -684,12 +643,6 @@ desktop/views/components/following-window.vue:
following: "{} のフォロー"
desktop/views/components/following.vue:
empty: "フォロー中のユーザーはおらんっぽいで、知らんけど。"
desktop/views/components/friends-maker.vue:
title: "おもろそうやな:"
empty: "おもろいユーザー居らんかったわ"
fetching: "読み込んどります"
refresh: "もっとあるやろ!"
close: "さいなら"
desktop/views/components/game-window.vue:
game: "ゲーム"
desktop/views/components/home.vue:
@ -709,12 +662,10 @@ desktop/views/components/note-detail.vue:
location: "ここおるで:"
renote: "Renote"
add-reaction: "リアクション"
undo-reaction: "リアクション解除"
desktop/views/components/note.vue:
reply: "返す"
renote: "Renote"
add-reaction: "リアクション"
undo-reaction: "リアクション解除"
detail: "もっと"
private: "この投稿は見せられへんわ"
deleted: "この投稿なんか無くなってもうたわ"
@ -742,7 +693,6 @@ desktop/views/components/post-form.vue:
attach-media-from-local: "PCからメディア持ってくる"
attach-media-from-drive: "ドライブからメディア持ってくる"
attach-cancel: "くっつけるのやめよか"
insert-a-kao: "v('ω')v"
create-poll: "アンケートを作成"
text-remain: "残り{}文字"
recent-tags: "最近のタグ"
@ -773,101 +723,6 @@ desktop/views/components/renote-form-window.vue:
desktop/views/pages/user-following-or-followers.vue:
following: "{user}のフォロー"
followers: "{user}のフォロワー"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue:
profile: "プロフィール"
notification: "通知"
apps: "アプリ"
tags: "ハッシュタグ"
mute-and-block: "ミュート/ブロック"
blocking: "ブロック"
security: "セキュリティ"
signin: "こんな感じでサインインしたらしいで"
password: "パスワード"
other: "その他"
license: "ライセンス"
theme: "テーマ"
behaviour: "動き"
fetch-on-scroll: "スクロールしたらもっと見せてや"
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動でもっとコンテンツを読み込むで。"
note-visibility: "投稿の公開範囲"
default-note-visibility: "もとからの公開範囲"
remember-note-visibility: "投稿の公開範囲おぼえといて"
web-search-engine: "ウェブ検索エンジン"
web-search-engine-desc: "例: https://www.google.com/?#q?{{query}}"
auto-popout: "ウィンドウの自動ポップアウト"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトすんで。この設定はブラウザに記憶されんで。"
deck-nav: "デッキ内ナビゲーション"
deck-nav-desc: "デッキを使うとるとき、ナビゲーションが発生するときにページ移動せんで、一時的なカラムで受けれるようにするで"
keep-cw: "CW保持"
keep-cw-desc: "投稿にリプライする際、リプライ元の投稿にCWが設定されていたとき、デフォルトで同じCWを設定するようにします。"
deck-default: "デッキをデフォルトのUIにする"
display: "見た感じ"
customize: "ホームをカスタマイズ"
wallpaper: "壁紙"
choose-wallpaper: "壁紙選ぶ"
delete-wallpaper: "壁紙ほかす"
dark-mode: "夜にすんで"
use-shadow: "UIに影付けたる"
rounded-corners: "みんなまぁるくUI変更"
circle-icons: "アイコンもタコ焼きも丸いやんな?"
contrasted-acct: "ユーザー名ようわからんし見やすしといて"
post-form-on-timeline: "タイムラインの上の方で投稿できるようにせえへん?"
show-clock-on-header: "右上をカリヨン広場にする(時計表示)"
show-reply-target: "どこにリプライするんや見せて"
timeline: "タイムライン"
show-my-renotes: "わしのRenoteもタイムライン載せてくれや"
show-renoted-my-notes: "わしのRenoteもタイムライン載せてくれや"
show-local-renotes: "ローカル投稿のRenoteも見たいんや"
show-maps: "地図勝手にバァーって開いてくれ"
remain-deleted-note: "削除された投稿も表示しっぱなしにする"
deck-column-align: "デッキのカラムの配置"
deck-column-align-center: "真ん中"
deck-column-align-left: "左"
deck-column-align-flexible: "フレキシブル"
deck-column-width: "デッキのカラムの幅"
deck-column-width-narrow: "狭"
deck-column-width-narrower: "やや狭"
deck-column-width-normal: "普通"
deck-column-width-wider: "やや広"
deck-column-width-wide: "広"
sound: "サウンド"
enable-sounds: "サウンド鳴らす"
enable-sounds-desc: "投稿やメッセージもろたとき、音鳴らしたるわ。大丈夫や、この設定はブラウザが覚えてくれとる。"
volume: "ボリューム"
test: "テスト"
cache: "キャッシュ"
clean-cache: "お掃除"
cache-warn: "お掃除するとな、ブラウザが覚えてくれとるアカウントのあれこれや書きかけの投稿・返信・メッセージや設定情報なんかのデータが全部飛んでいくんや。これやったらページ再読込しといてな。"
cache-cleared: "キャッシュお掃除したで"
cache-cleared-desc: "もっぺんページ読みこみ直してくれや"
about: "Misskeyってなんや"
operator: "このサーバー誰のや"
update: "Misskey Update"
version: "バージョン:"
latest-version: "最新のバージョン:"
update-checking: "アップデートはあらへんか……"
do-update: "アップデートあるか見てみる"
update-settings: "もっと設定"
prevent-update: "アップデートしたないわ、また今度や(やめときや)"
prevent-update-desc: "この設定をオンにしとってもアップデートが反映される場合があるかも分からん、知らんけど気ぃつけてや。この設定はこのデバイスのみ有効やで。"
no-updates: "使える更新はあらへん"
no-updates-desc: "つこてるMisskeyは最新や"
update-available: "新しいバージョンが利用可能や"
update-available-desc: "ページを再度読み込みすると更新が適用されるで。"
advanced-settings: "ワイにはわからん設定"
debug-mode: "デバッグモードにしてみる"
debug-mode-desc: "この設定はブラウザに記憶されんで。"
experimental: "お試し機能使うてみる"
experimental-desc: "実験的機能を有効にするとMisskeyの動作が不安定になるかも分からん、知らんけど気ぃつけてや。この設定はブラウザに記憶されんで。"
tools: "ツール"
task-manager: "タスクマネージャ"
third-parties: "サードパーティ"
navbar-position: "ナビゲーションバーの位置"
navbar-position-top: "上"
navbar-position-left: "左"
navbar-position-right: "右"
desktop/views/components/settings.2fa.vue:
intro: "二段階認証を設定すると、サインイン時にパスワードだけとちゃうくて、予め登録しておいた物理的なデバイス(例えばあんさんのスマートフォンなど)も必要になり、よりセキュリティが向上すんで。"
detail: "詳細..."
@ -888,8 +743,8 @@ desktop/views/components/settings.2fa.vue:
failed: "なんか設定に失敗したで。トークンを間違えとらんか確認してや。"
info: "次のサインインからは、パスワードに加えてデバイスに出とるトークンを入力してな。"
common/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
sensitive: "ちょっと見せられへんわ"
click-to-show: "クリックして見せるで"
common/views/components/api-settings.vue:
intro: "API使うんやったらこのトークンを「i」っちゅうパラメータにくっつけてリクエストできるで。"
caution: "アカウント勝手にいじられるかも知れんから、このトークンは教えたらあかんし、アプリにも書いたらあかんで(これはフリちゃうで)"
@ -928,16 +783,13 @@ common/views/components/password-settings.vue:
enter-new-password-again: "もっぺん入れてや"
not-match: "パスワードがおうとらん"
changed: "パスワード変えたわ"
failed: "パスワード変更に失敗しました"
desktop/views/components/sub-note-content.vue:
private: "この投稿は見せられへんわ"
deleted: "この投稿なんか無くなってもうたわ"
media-count: "{}つのメディア"
poll: "アンケート"
desktop/views/components/settings.tags.vue:
title: "タグ"
query: "クエリ (省略可)"
add: "追加"
add: "増やす"
save: "保存"
desktop/views/components/taskmanager.vue:
title: "タスクマネージャ"
@ -958,17 +810,10 @@ desktop/views/components/ui.header.vue:
adjective: "はん"
desktop/views/components/ui.header.account.vue:
profile: "プロフィール"
favorites: "お気に入り"
lists: "リスト"
follow-requests: "フォロー許してくれや!言うてみる"
customize: "ホームをカスタマイズ"
admin: "管理"
settings: "設定"
signout: "さいなら"
dark: "ナイトゲームじゃ!"
desktop/views/components/ui.header.nav.vue:
home: "ホーム"
deck: "デッキ"
game: "ゲーム"
desktop/views/components/ui.header.notifications.vue:
title: "通知"
@ -1006,8 +851,6 @@ admin/views/index.vue:
federation: "連合"
announcements: "知っといてや"
hashtags: "ハッシュタグ"
abuse: "スパム報告"
queue: "ジョブキュー"
back-to-misskey: "Misskeyに戻る"
admin/views/dashboard.vue:
dashboard: "ダッシュボード"
@ -1019,12 +862,8 @@ admin/views/dashboard.vue:
federated: "連合"
admin/views/queue.vue:
operation: "操作"
remove-all-jobs: "すべてのジョブをクリア"
admin/views/abuse.vue:
title: "スパム報告"
target: "対象"
reporter: "報告者"
details: "詳細"
details: "もっと"
remove-report: "削除"
admin/views/instance.vue:
instance: "インスタンス"
@ -1032,7 +871,6 @@ admin/views/instance.vue:
instance-description: "インスタンスの紹介"
host: "ホスト"
banner-url: "バナー画像URL"
error-image-url: "エラー画像URL"
languages: "インスタンスの対象言語"
languages-desc: "スペースで区切って複数設定できるで。"
maintainer-config: "管理者情報"
@ -1072,8 +910,6 @@ admin/views/instance.vue:
max-note-text-length: "投稿の最大文字数"
disable-registration: "ユーザー登録の受付を止める"
disable-local-timeline: "ローカルタイムラインを使えんようにする"
disable-global-timeline: "グローバルタイムラインを無効にする"
disabling-timelines-info: "これらのタイムラインを無効にしても、管理者およびモデレーターは引き続き利用できます。"
invite: "来てや"
save: "保存"
saved: "保存したで!"
@ -1093,12 +929,6 @@ admin/views/instance.vue:
smtp-port: "SMTPポート"
smtp-user: "SMTPユーザー"
smtp-pass: "SMTPパスワード"
serviceworker-config: "ServiceWorker"
enable-serviceworker: "ServiceWorkerを有効にする"
serviceworker-info: "プッシュ通知を行うには有効する必要があります。"
vapid-publickey: "VAPID公開鍵"
vapid-privatekey: "VAPID秘密鍵"
vapid-info: "ServiceWorkerを有効にする場合、VAPIDキーペアを生成する必要があります。シェルで次のようにします:"
admin/views/charts.vue:
title: "チャート"
per-day: "1日ごと"
@ -1117,7 +947,6 @@ admin/views/charts.vue:
notes-total: "投稿の積算"
users: "ユーザーの増減"
users-total: "ユーザーの積算"
active-users: "アクティブユーザー数"
drive: "ドライブ使用量の増減"
drive-total: "ドライブ使用量の積算"
drive-files: "ドライブのファイル数の増減"
@ -1127,152 +956,66 @@ admin/views/charts.vue:
network-usage: "通信量"
admin/views/drive.vue:
operation: "操作"
fileid-or-url: "ファイルIDまたはファイルURL"
file-not-found: "ファイルが見つかりません"
lookup: "照会"
sort:
title: "ソート"
createdAtAsc: "アップロード日時が古い順"
createdAtDesc: "アップロード日時が新しい順"
sizeAsc: "サイズが小さい順"
sizeDesc: "サイズが大きい順"
origin:
title: "オリジン"
combined: "ローカル+リモート"
local: "ローカル"
remote: "リモート"
delete: "削除"
deleted: "削除しました"
mark-as-sensitive: "閲覧注意に設定"
unmark-as-sensitive: "閲覧注意を解除"
marked-as-sensitive: "閲覧注意に設定しました"
unmarked-as-sensitive: "閲覧注意を解除しました"
mark-as-sensitive: "見たらあかん感じにしとく"
unmark-as-sensitive: "やっぱ見せたるわ"
admin/views/users.vue:
operation: "操作"
username-or-userid: "ユーザー名またはユーザーID"
user-not-found: "ユーザーが見つからへん!"
lookup: "照会"
reset-password: "パスワードをリセット"
reset-password-confirm: "パスワードをリセットしますか?"
password-updated: "パスワードは現在「{password} 」やで"
suspend: "凍結"
suspend-confirm: "凍結しますか?"
suspended: "凍結しました"
unsuspend: "凍結の解除"
unsuspend-confirm: "凍結を解除しますか?"
unsuspended: "凍結を解除しました"
make-silence: "サイレンス"
unmake-silence: "サイレンスの解除"
verify: "公式アカウントにする"
verify-confirm: "公式アカウントにしますか?"
verified: "公式アカウントにしました"
unverify: "公式アカウントを解除する"
unverify-confirm: "公式アカウントを解除しますか?"
unverified: "公式アカウントを解除しました"
update-remote-user: "リモートユーザー情報の更新"
remote-user-updated: "リモートユーザー情報を更新しました"
users:
title: "ユーザー"
sort:
title: "ソート"
createdAtAsc: "登録日時が古い順"
createdAtDesc: "登録日時が新しい順"
updatedAtAsc: "更新日時が古い順"
updatedAtDesc: "更新日時が新しい順"
state:
title: "状態"
all: "すべて"
admin: "管理者"
moderator: "モデレーター"
adminOrModerator: "管理者+モデレーター"
verified: "公式アカウント"
suspended: "凍結済み"
verified: "アメちゃん付きアカウント"
origin:
title: "オリジン"
combined: "ローカル+リモート"
local: "ローカル"
remote: "リモート"
createdAt: "登録日時"
updatedAt: "更新日時"
admin/views/moderators.vue:
add-moderator:
title: "モデレーターの登録"
add: "登録"
added: "モデレーターを登録しました"
remove: "解除"
removed: "モデレーター登録を解除しました"
admin/views/emoji.vue:
add-emoji:
title: "絵文字の登録"
name: "絵文字名"
name-desc: "a~z 0~9 _ の文字が使えます。"
aliases: "エイリアス"
aliases-desc: "スペースで区切って複数設定できます。"
url: "絵文字画像URL"
add: "追加"
info: "50KB以下のPNG画像をおすすめします。"
added: "絵文字を登録しました"
add: "増やす"
emojis:
title: "絵文字一覧"
update: "更新"
remove: "削除"
updated: "更新しました"
remove-emoji:
are-you-sure: "「$1」を削除しますか"
removed: "削除しました"
admin/views/announcements.vue:
announcements: "お知らせ"
announcements: "知っときや"
save: "保存"
remove: "削除"
add: "追加"
title: "タイトル"
text: "内容"
saved: "保存しました"
_remove:
are-you-sure: "「$1」を削除しますか"
removed: "削除しました"
admin/views/hashtags.vue:
hided-tags: "Hidden Tags"
add: "増やす"
saved: "保存したで!"
admin/views/federation.vue:
federation: "連合"
host: "ホスト"
notes: "投稿"
users: "ユーザー"
following: "フォロー"
following: "フォローしとる"
followers: "フォロワー"
status: "ステータス"
latest-request-sent-at: "直近のリクエスト送信"
latest-request-received-at: "直近のリクエスト受信"
remove-all-following: "フォローを全解除"
remove-all-following-info: "{host}からのフォローをすべて解除します。そのインスタンスがもう存在しなくなった場合などに実行してください。"
block: "ブロック"
lookup: "照会"
instances: "インスタンス"
instance-not-registered: "そのインスタンスは登録されていません"
sort: "ソート"
sorts:
caughtAtAsc: "登録日時が古い順"
caughtAtDesc: "登録日時が新しい順"
notesAsc: "投稿が少ない順"
notesDesc: "投稿が多い順"
usersAsc: "ユーザーが少ない順"
usersDesc: "ユーザーが多い順"
followingAsc: "フォローが少ない順"
followingDesc: "フォローが多い順"
followersAsc: "フォロワーが少ない順"
followersDesc: "フォロワーが多い順"
state: "状態"
states:
all: "すべて"
blocked: "ブロック"
result-is-truncated: "上位{n}件を表示しています。"
charts: "チャート"
chart-srcs:
requests: "リクエスト"
users: "ユーザーの増減"
users-total: "ユーザーの積算"
notes-total: "投稿の積算"
drive-usage: "ドライブ使用量の増減"
drive-usage-total: "ドライブ使用量の積算"
chart-spans:
hour: "1時間ごと"
day: "1日ごと"
desktop/views/pages/welcome.vue:
about: "もうちょい……"
gotit: "ほい"
signin: "サインイン"
signup: "サインアップ"
signin-button: "やっとる"
signup-button: "サインアップ"
timeline: "タイムライン"
announcements: "知っときや"
photos: "最近の画像"
@ -1280,8 +1023,6 @@ desktop/views/pages/welcome.vue:
info: "情報"
desktop/views/pages/drive.vue:
title: "ドライブ"
desktop/views/pages/home-customize.vue:
title: "ホームをカスタマイズ"
desktop/views/pages/note.vue:
prev: "前のやつ"
next: "次のやつ"
@ -1292,11 +1033,6 @@ desktop/views/pages/selectdrive.vue:
upload: "PCからドライブにファイル上げる"
desktop/views/pages/search.vue:
not-available: "検索機能は使えへんわ。管理者がそう言うとる。"
not-found: "「{q}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "{name}で共有"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
users: "ユーザー"
add-user: "ユーザー増やす"
@ -1313,9 +1049,6 @@ desktop/views/pages/user/user.photos.vue:
title: "写真"
loading: "読み込んどります"
no-photos: "写真はあらへんで"
desktop/views/pages/user/user.profile.vue:
follows-you: "フォローされとるで"
menu: "メニュー"
desktop/views/pages/user/user.header.vue:
posts: "投稿"
following: "フォロー"
@ -1325,17 +1058,15 @@ desktop/views/pages/user/user.header.vue:
year: "年"
month: "月"
day: "日"
follows-you: "フォローされとるで"
desktop/views/pages/user/user.timeline.vue:
default: "投稿"
with-replies: "投稿と返信"
with-media: "メディア"
my-posts: "私の投稿"
empty: "このユーザーはまだ何も投稿しとらんようや。"
desktop/views/widgets/messaging.vue:
title: "メッセージ"
desktop/views/widgets/notifications.vue:
title: "通知"
settings: "通知の設定"
desktop/views/widgets/polls.vue:
title: "アンケート"
refresh: "他を見る"
@ -1364,8 +1095,6 @@ mobile/views/components/drive.vue:
prompt: "何すんの?(数字を入れてや): <1 → ファイルをアップロード | 2 → ファイルをURLでアップロード | 3 → フォルダ作成 | 4 → このフォルダ名を変更 | 5 → このフォルダを移動 | 6 → このフォルダを削除>"
deletion-alert: "フォルダの削除は未実装やねん...。堪忍な!"
folder-name: "フォルダー名"
root-rename-alert: "現在おる場所はルートで、フォルダとちゃうから名前の変更はできへん。名前を変更したいフォルダに移動してからやってな。"
root-move-alert: "現在おる場所はルートで、フォルダとちゃうから移動はできへん。移動したいフォルダに移動してからやってな。"
url-prompt: "このURLのファイルをアップロードしたいねん"
uploading: "アップロードをリクエストしたで。アップロードが完了するまで時間がかかるかも分からん、知らんけど。"
mobile/views/components/drive-file-chooser.vue:
@ -1392,12 +1121,6 @@ common/views/components/follow-button.vue:
request-pending: "フォロー許してくれるん待っとる"
follow-processing: "今フォロー処理やっとる‥"
follow-request: "フォローさせてや!言うてみる"
mobile/views/components/friends-maker.vue:
title: "おもろそうやな"
empty: "おすすめのユーザーはおらん。"
fetching: "読み込んどります"
refresh: "もっとあるやろ!"
close: "さいなら"
mobile/views/components/note.vue:
private: "この投稿は見せられへんわ"
deleted: "この投稿なんか無くなってもうたわ"
@ -1434,8 +1157,6 @@ mobile/views/components/sub-note-content.vue:
deleted: "この投稿なんか無くなってもうたわ"
media-count: "{}つのメディア"
poll: "アンケート"
mobile/views/components/timeline.vue:
empty: "投稿はあらへん"
mobile/views/components/ui.header.vue:
welcome-back: "おかえり、"
adjective: "はん"
@ -1444,22 +1165,11 @@ mobile/views/components/ui.nav.vue:
notifications: "通知"
follow-requests: "フォロー許してくれや!言うてみる"
search: "検索"
favorites: "お気に入り"
user-lists: "リスト"
widgets: "ウィジェット"
game: "ゲーム"
darkmode: "ナイトゲームや"
settings: "設定"
admin: "管理"
about: "Misskeyってなんや"
mobile/views/components/user-timeline.vue:
no-notes: "このユーザーは投稿しとらんようや。"
no-notes-with-media: "メディア付き投稿はあらへん。"
mobile/views/components/users-list.vue:
all: "すべて"
known: "知っとる"
mobile/views/pages/favorites.vue:
title: "お気に入り"
mobile/views/pages/user-lists.vue:
title: "リスト"
enter-list-name: "リスト名を入力してや"
@ -1478,11 +1188,8 @@ mobile/views/pages/home.vue:
messages: "メッセージ"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿はあらへんかった。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできんで。ウィジェットを移動するんやったら「三」をドラッグしてや。ウィジェットを削除するんやったら「x」をタップしてや。いくつかのウィジェットはタップしたったら表示を変更できるかも分からん、知らんけど。"
add-widget: "増やす"
customization-tips: "カスタマイズのヒント"
mobile/views/pages/widgets/activity.vue:
@ -1497,9 +1204,6 @@ mobile/views/pages/note.vue:
title: "投稿"
prev: "前のやつ"
next: "次のやつ"
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "通知全部読んだか?"
mobile/views/pages/games/reversi.vue:
reversi: "リバーシ"
mobile/views/pages/search.vue:
@ -1509,47 +1213,6 @@ mobile/views/pages/selectdrive.vue:
select-file: "ファイル選んでや"
mobile/views/pages/settings.vue:
signed-in-as: "あんたは橋の下で拾った{}や!"
design: "見た感じ"
dark-mode: "ナイトゲームや!"
i-am-under-limited-internet: "電波と阪神がザコいんや"
circle-icons: "アイコンもタコ焼きも丸いやんな?"
contrasted-acct: "ユーザー名ようわからんし見やすしといて"
timeline: "タイムライン"
show-reply-target: "どこにリプライするんや見せて"
show-my-renotes: "あんたのしたRenoteも出すで"
show-renoted-my-notes: "あんたの言うたことのRenoteも出すで"
show-local-renotes: "ローカル投稿のRenoteも出すで"
post-style: "投稿の表示スタイル"
post-style-standard: "標準"
post-style-smart: "べっぴんさん"
notification-position: "通知どこ見せる?"
notification-position-bottom: "ミナミの方"
notification-position-top: "キタの方"
behavior: "動き"
fetch-on-scroll: "スクロールしたらもっと見せてや"
keep-cw: "CW保持"
note-visibility: "投稿の公開範囲"
default-note-visibility: "もとからの公開範囲"
remember-note-visibility: "投稿の公開範囲おぼえといて"
web-search-engine: "ウェブ検索エンジン"
web-search-engine-desc: "例: https://www.google.com/?#q?{{query}}"
disable-via-mobile: "「モバイルからの投稿」フラグなんて要らんわ"
load-raw-images: "添付された画像もべっぴんさんのままにしといてな"
load-remote-media: "東京とか、リモートサーバーのメディアも見せてや"
update: "あんたのMisskeyいつのや"
version: "バージョン:"
latest-version: "いっちゃん新しいやつ:"
update-checking: "アップデートあるか見とるで"
check-for-updates: "アップデートあるんかな?"
no-updates: "アップデートあらへんわ"
no-updates-desc: "つこてるMisskeyは最新や"
update-available: "もっとええバージョンがあるで"
update-available-desc: "もっぺんページ読み込んだら新しなるで"
settings: "設定"
signout: "さいなら"
sound: "サウンド"
enable-sounds: "サウンド鳴らす"
password: "パスワード"
mobile/views/pages/user.vue:
follows-you: "フォローされとるで"
following: "フォロー"
@ -1565,15 +1228,9 @@ mobile/views/pages/user/home.vue:
activity: "やっとること"
keywords: "キーワード"
domains: "よく出るドメイン"
frequently-replied-users: "よう話しとるユーザー"
frequently-replied-users: "よう話すツレ"
followers-you-know: "知っとるフォロワー"
last-used-at: "最後いつ来た?"
mobile/views/pages/user/home.followers-you-know.vue:
no-users: "知っとるユーザーは居らん"
mobile/views/pages/user/home.friends.vue:
no-users: "よう話すユーザーは居らん"
mobile/views/pages/user/home.notes.vue:
no-notes: "投稿はあらへん"
mobile/views/pages/user/home.photos.vue:
no-photos: "写真はあらへんで"
deck:
@ -1598,9 +1255,9 @@ deck:
pop-right: "右に出すで!"
deck/deck.tl-column.vue:
is-media-only: "メディア投稿だけや"
is-media-view: "メディアビュー"
edit: "オプション"
deck/deck.user-column.vue:
follows-you: "フォローされとるで"
posts: "投稿"
following: "フォロー"
followers: "フォロワー"

View File

@ -1,7 +1,6 @@
---
meta:
lang: "한국어"
divider: ""
common:
misskey: "연합우주의 ⭐"
about-title: "연합우주의 ⭐."
@ -28,6 +27,13 @@ common:
load-more: "더보기"
enter-password: "비밀번호를 입력하여 주십시오"
2fa: "2단계 인증"
customize-home: "홈 커스터마이징"
featured-notes: "하이라이트"
dark-mode: "다크 모드"
signin: "로그인"
signup: "신규 등록"
signout: "로그아웃"
reload-to-apply-the-setting: "이 설정을 적용하려면 페이지를 새로고침해야 합니다. 바로 새로고침하시겠습니까?"
got-it: "알겠습니다"
customization-tips:
title: "커스터마이징 도움말"
@ -56,6 +62,16 @@ common:
trash: "휴지통"
drive: "드라이브"
messaging: "대화"
home: "홈"
deck: "덱"
timeline: "타임라인"
explore: "발견"
following: "팔로우 중"
followers: "팔로워"
favorites: "즐겨찾기"
empty-timeline-info:
follow-users-to-make-your-timeline: "사용자를 팔로우하면 글이 타임라인에 표시됩니다."
explore: "사용자 탐색"
weekday-short:
sunday: "일"
monday: "월"
@ -101,31 +117,118 @@ common:
d: "말하고 싶은 게 있나요?"
e: "여기에 적어주세요"
f: "작성해주시길 기다리고 있어요..."
settings: "설정"
_settings:
profile: "프로필"
notification: "알림"
apps: "앱"
tags: "해시태그"
mute-and-block: "뮤트/차단"
blocking: "차단"
security: "보안"
signin: "로그인 기록"
password: "비밀번호"
other: "기타"
appearance: "디자인"
behavior: "동작"
fetch-on-scroll: "스크롤하여 자동으로 불러오기"
fetch-on-scroll-desc: "페이지를 아래로 스크롤하였을 때 자동으로 추가 콘텐츠를 불러옵니다."
note-visibility: "게시물의 공개 범위"
default-note-visibility: "기본 공개 범위"
remember-note-visibility: "글의 공개 범위를 기억하기"
web-search-engine: "웹 검색엔진"
web-search-engine-desc: "예: https://www.google.com/?#q={{query}}"
keep-cw: "CW 유지"
keep-cw-desc: "글에 답글을 달 때, 답글할 글에 CW가 설정되어 있는 경우 기본값으로 동일한 CW를 설정하도록 합니다."
i-like-sushi: "저는 (푸딩보다 차라리) 초밥이 좋아요"
show-reversi-board-labels: "리버시 보드의 행과 열 레이블을 표시"
use-avatar-reversi-stones: "리버시의 돌로 아바타를 사용"
disable-animated-mfm: "글의 문자 애니메이션을 비활성화"
disable-showing-animated-images: "움직이는 이미지를 자동으로 재생하지 않음"
suggest-recent-hashtags: "최근 해시태그를 글 작성란에 표시"
always-show-nsfw: "항상 열람주의 미디어를 표시"
always-mark-nsfw: "항상 미디어를 열람주의로 설정하여 게시"
show-full-acct: "사용자명의 호스트를 표시하지 않기"
show-via: "via 표시하기"
reduce-motion: "UI의 애니메이션 줄이기"
this-setting-is-this-device-only: "이 장치만"
use-os-default-emojis: "운영체제의 기본 이모지 사용"
line-width: "선 두께"
line-width-thin: "얇음"
line-width-normal: "보통"
line-width-thick: "두꺼움"
font-size: "글씨 크기"
font-size-x-small: "작음"
font-size-small: "조금 작음"
font-size-medium: "보통"
font-size-large: "조금 큼"
font-size-x-large: "큼"
deck-column-align: "덱의 칼럼 위치"
deck-column-align-center: "가운데"
deck-column-align-left: "왼쪽"
deck-column-align-flexible: "플렉서블"
deck-column-width: "덱의 칼럼 폭"
deck-column-width-narrow: "좁음"
deck-column-width-narrower: "조금 좁음"
deck-column-width-normal: "보통"
deck-column-width-wider: "조금 넓음"
deck-column-width-wide: "넓음"
use-shadow: "UI에 그림자 효과 적용"
rounded-corners: "UI의 모서리를 둥글게 설정"
circle-icons: "원형 아이콘 사용"
contrasted-acct: "사용자명에 대비 추가"
wallpaper: "배경"
choose-wallpaper: "배경 설정"
delete-wallpaper: "배경 제거"
post-form-on-timeline: "타임라인 상단에 글 작성란을 표시"
show-clock-on-header: "오른쪽 상단에 시계 표시"
show-reply-target: "답글 대상 표시"
timeline: "타임라인"
show-my-renotes: "내 리노트를 타임라인에 보이기"
show-renoted-my-notes: "내 글이 리노트될 경우 타임라인에 보이기"
show-local-renotes: "로컬 글의 리노트를 타임라인에 보이기"
remain-deleted-note: "삭제된 글을 계속 표시"
sound: "소리"
enable-sounds: "소리 사용"
enable-sounds-desc: "글이나 메시지를 송수신하였을 때 소리를 재생합니다. 이 설정은 브라우저에 저장됩니다."
volume: "음량"
test: "테스트"
update: "Misskey Update"
version: "버전:"
latest-version: "최신 버전:"
update-checking: "업데이트 확인 중"
do-update: "업데이트 확인"
update-settings: "고급 설정"
no-updates: "사용 가능한 업데이트가 없습니다"
no-updates-desc: "사용중인 Misskey는 최신 버전입니다."
update-available: "새 버전을 사용할 수 있습니다"
update-available-desc: "페이지를 다시 로드하면 업데이트가 적용됩니다."
advanced-settings: "고급 설정"
debug-mode: "디버그 모드를 사용하도록 설정"
debug-mode-desc: "이 설정은 브라우저에 저장됩니다."
navbar-position: "내비게이션 막대 위치"
navbar-position-top: "위"
navbar-position-left: "왼쪽"
navbar-position-right: "오른쪽"
i-am-under-limited-internet: "저는 통신 대역폭이 제한되어 있습니다"
post-style: "글 표시 스타일"
post-style-standard: "표준"
post-style-smart: "스마트"
notification-position: "알림 표시"
notification-position-bottom: "아래"
notification-position-top: "위"
disable-via-mobile: "작성하는 글에 \"모바일에서 작성함\" 을 붙이지 않음"
load-raw-images: "첨부 이미지를 고품질로 표시"
load-remote-media: "원격 서버의 미디어를 표시"
search: "검색"
delete: "삭제"
loading: "로드 중"
ok: "확인"
ok: "ㅇㅇ"
cancel: "그만두기"
update-available-title: "업데이트가 있습니다"
update-available: "Misskey의 새로운 버전이 있습니다 ({newer}. 현재 {current}을 사용 중). 페이지를 다시 로드하면 업데이트가 적용됩니다."
my-token-regenerated: "당신의 토큰이 업데이트되었으므로 로그아웃합니다."
i-like-sushi: "저는 (푸딩보다 차라리) 초밥이 좋아요"
show-reversi-board-labels: "리버시 보드의 행과 열 레이블을 표시"
use-avatar-reversi-stones: "리버시의 돌로 아바타를 사용"
verified-user: "공식 계정"
disable-animated-mfm: "글의 문자 애니메이션을 비활성화"
disable-showing-animated-images: "アニメーション画像を再生しない"
suggest-recent-hashtags: "최근 해시태그를 글 작성란에 표시"
always-show-nsfw: "항상 열람주의 미디어를 표시"
always-mark-nsfw: "항상 미디어를 열람주의로 설정하여 게시"
show-full-acct: "사용자명의 호스트를 표시하지 않기"
show-via: "via 표시하기"
reduce-motion: "UI의 애니메이션 줄이기"
this-setting-is-this-device-only: "이 장치만"
use-os-default-emojis: "운영체제의 기본 이모지 사용"
line-width: "선 두께"
line-width-thin: "얇음"
line-width-normal: "보통"
line-width-thick: "두꺼움"
hide-password: "비밀번호 숨기기"
show-password: "비밀번호 표시"
do-not-use-in-production: "이것은 개발 빌드입니다. 프로덕션 환경에서 사용하지 마십시오."
@ -134,6 +237,9 @@ common:
is-remote-post: "이 글 정보는 복사본입니다."
view-on-remote: "정확한 정보 보기"
renoted-by: "{user}이(가) 리노트"
no-notes: "글이 없습니다"
turn-on-darkmode: "어둠에 삼켜져라"
turn-off-darkmode: "빛이 있으라"
error:
title: "오류가 발생했습니다"
retry: "다시 시도"
@ -197,6 +303,19 @@ auth/views/index.vue:
please-go-back: "어플리케이션으로 돌아가여 시도하여 주십시오."
error: "세션이 존재하지 않습니다."
sign-in: "로그인 해주시기 바랍니다"
common/views/pages/explore.vue:
verified-users: "공식 계정"
popular-users: "인기 사용자"
recently-updated-users: "최근 게시한 사용자"
recently-registered-users: "신규 사용자"
popular-tags: "인기 태그"
federated: "연합"
explore: "{host}을(를) 탐색"
users-info: "현재 {users} 사용자가 등록되어 있습니다"
common/views/components/url-preview.vue:
enable-player: "플레이어 열기"
common/views/components/user-list.vue:
no-users: "사용자가 없습니다"
common/views/components/games/reversi/reversi.vue:
matching:
waiting-for: "{}을(를) 기다리고 있습니다"
@ -209,7 +328,7 @@ common/views/components/games/reversi/reversi.game.vue:
can-put-everywhere: "어디에도 둘 수 있는 모드"
common/views/components/games/reversi/reversi.index.vue:
title: "Misskey Reversi"
sub-title: "다른 Misskey 유저와 리버시로 대결하자"
sub-title: "다른 Misskey 사용자와 리버시로 대결하자"
invite: "초대"
rule: "게임 방법"
rule-desc: "리버시는 상대와 번갈아가며 돌을 판에 두고, 상대의 돌을 자신의 돌 사이에 두어 자신의 색으로 바꿔나가며, 최종적으로 남아있는 돌이 많은 쪽이 승리하는 보드게임입니다."
@ -345,8 +464,8 @@ common/views/components/note-menu.vue:
copy-link: "링크 복사"
favorite: "이 노트 즐겨찾기"
unfavorite: "즐겨찾기에서 제거"
watch: "ウォッチ"
unwatch: "ウォッチ解除"
watch: "지켜보기"
unwatch: "지켜보기 해제"
pin: "프로필에 고정"
unpin: "프로필에서 고정 해제"
delete: "삭제"
@ -370,16 +489,35 @@ common/views/components/user-menu.vue:
common/views/components/poll.vue:
vote-to: "\"{}\"에 투표하기"
vote-count: "{}표"
total-users: "{}명이 투표"
total-votes: "{}표"
vote: "투표하기"
show-result: "결과 보기"
voted: "투표함"
closed: "종료됨"
remaining-days: "종료까지 앞으로 {d}일 {h}시간"
remaining-hours: "종료까지 앞으로 {h}시간 {m}분"
remaining-minutes: "종료까지 앞으로 {m}분 {s}초"
remaining-seconds: "종료까지 앞으로 {s}초"
common/views/components/poll-editor.vue:
no-only-one-choice: "투표에는 선택지가 최소한 두 개 필요합니다"
choice-n: "선택지 {}"
remove: "이 선택지를 제거"
add: "+선택지 추가"
destroy: "투표 제거"
multiple: "복수 응답 가능"
expiration: "기한"
infinite: "무기한"
at: "일시 지정"
after: "기간 지정"
no-more: "더 이상 추가할 수 없습니다"
deadline-date: "기한"
deadline-time: "시간"
interval: "기간"
unit: "단위"
second: "초"
minute: "분"
hour: "시간"
day: "일"
common/views/components/reaction-picker.vue:
choose-reaction: "반응 선택"
common/views/components/emoji-picker.vue:
@ -397,7 +535,6 @@ common/views/components/signin.vue:
password: "비밀번호"
token: "토큰"
signing-in: "로그인 중입니다..."
signin: "로그인"
or: "또는"
signin-with-twitter: "Twitter로 로그인"
signin-with-github: "GitHub으로 로그인"
@ -509,13 +646,21 @@ common/views/components/profile-editor.vue:
email-address: "메일 주소"
email-verified: "매일 주소가 확인되었습니다"
email-not-verified: "메일 주소가 확인되지 않았습니다. 받은 편지함을 확인하여 주시기 바랍니다."
export: "エクスポート"
export: "내보내기"
import: "가져오기"
export-and-import: "내보내기와 가져오기"
export-targets:
all-notes: "すべての投稿データ"
following-list: "フォロー"
mute-list: "ミュート"
blocking-list: "ブロック"
export-requested: "エクスポートをリクエストしました。これには時間がかかる場合があります。エクスポートが終わると、ドライブにファイルが追加されます。"
all-notes: "모든 글 데이터"
following-list: "팔로잉"
mute-list: "뮤트"
blocking-list: "차단"
user-lists: "리스트"
export-requested: "내보내기를 요청하였습니다. 이 작업은 시간이 걸릴 수 있습니다. 내보내기가 완료되면 드라이브에 파일이 추가됩니다."
import-requested: "가져오기를 요청하였습니다. 이 작업에는 시간이 걸릴 수 있습니다."
enter-password: "비밀번호를 입력하여 주십시오"
danger-zone: "위험한 설정"
delete-account: "계정 삭제"
account-deleted: "계정이 삭제되었습니다. 데이터가 사라질 때까지 시간이 걸릴 수 있습니다."
common/views/components/user-list-editor.vue:
users: "사용자"
rename: "리스트 이름 바꾸기"
@ -684,12 +829,6 @@ desktop/views/components/following-window.vue:
following: "{} 의 팔로우"
desktop/views/components/following.vue:
empty: "팔로우중인 사용자가 없는 것 같습니다."
desktop/views/components/friends-maker.vue:
title: "마음에 드는 사용자를 팔로우:"
empty: "추천 사용자를 찾을 수 없습니다."
fetching: "불러오는 중입니다"
refresh: "더 보기"
close: "닫기"
desktop/views/components/game-window.vue:
game: "리버시"
desktop/views/components/home.vue:
@ -773,101 +912,6 @@ desktop/views/components/renote-form-window.vue:
desktop/views/pages/user-following-or-followers.vue:
following: "{user}의 팔로잉"
followers: "{user}의 팔로워"
desktop/views/components/settings-window.vue:
settings: "설정"
desktop/views/components/settings.vue:
profile: "프로필"
notification: "알림"
apps: "앱"
tags: "해시태그"
mute-and-block: "뮤트/차단"
blocking: "차단중"
security: "보안"
signin: "로그인 기록"
password: "비밀번호"
other: "기타"
license: "라이선스"
theme: "테마"
behaviour: "동작"
fetch-on-scroll: "스크롤하여 자동으로 불러오기"
fetch-on-scroll-desc: "페이지를 아래로 스크롤하였을 때 자동으로 추가 콘텐츠를 불러옵니다."
note-visibility: "게시물의 공개 범위"
default-note-visibility: "기본 공개 범위"
remember-note-visibility: "글의 공개 범위를 기억하기"
web-search-engine: "웹 검색엔진"
web-search-engine-desc: "예: https://www.google.com/?#q={{query}}"
auto-popout: "창 자동 팝아웃"
auto-popout-desc: "창이 열릴 때 팝아웃 (브라우저 밖으로 분리) 이 가능한 경우 자동으로 팝아웃합니다. 이 설정은 브라우저에 저장됩니다."
deck-nav: "덱 내 탐색"
deck-nav-desc: "덱을 사용중일 때, 내비게이션이 발생하였을 경우 페이지를 이동하지 않고 일시적으로 임시 칼럼을 생성하도록 합니다."
keep-cw: "CW 유지"
keep-cw-desc: "글에 답글을 달 때, 답글할 글에 CW가 설정되어 있는 경우 기본값으로 동일한 CW를 설정하도록 합니다."
deck-default: "덱을 기본 UI로 설정"
display: "디자인 및 표시"
customize: "홈 커스터마이징"
wallpaper: "배경"
choose-wallpaper: "배경 설정"
delete-wallpaper: "배경 제거"
dark-mode: "다크 모드"
use-shadow: "UI에 그림자 효과 적용"
rounded-corners: "UI의 모서리를 둥글게 설정"
circle-icons: "원형 아이콘 사용"
contrasted-acct: "사용자명에 대비 추가"
post-form-on-timeline: "타임라인 상단에 글 작성란을 표시"
show-clock-on-header: "오른쪽 상단에 시계 표시"
show-reply-target: "답글 대상 표시"
timeline: "타임라인"
show-my-renotes: "내 리노트를 타임라인에 보이기"
show-renoted-my-notes: "내 글이 리노트될 경우 타임라인에 보이기"
show-local-renotes: "로컬 글의 리노트를 타임라인에 보이기"
show-maps: "지도 자동 표시"
remain-deleted-note: "삭제된 글을 계속 표시"
deck-column-align: "덱의 칼럼 위치"
deck-column-align-center: "가운데"
deck-column-align-left: "왼쪽"
deck-column-align-flexible: "플렉서블"
deck-column-width: "덱의 칼럼 폭"
deck-column-width-narrow: "좁음"
deck-column-width-narrower: "조금 좁음"
deck-column-width-normal: "보통"
deck-column-width-wider: "조금 넓음"
deck-column-width-wide: "넓음"
sound: "소리"
enable-sounds: "소리 사용"
enable-sounds-desc: "글이나 메시지를 송수신하였을 때 소리를 재생합니다. 이 설정은 브라우저에 저장됩니다."
volume: "음량"
test: "테스트"
cache: "캐시"
clean-cache: "지우기"
cache-warn: "지우기를 실행하면 브라우저에 저장된 계정 정보 캐시, 글이나 답글 및 메시지의 임시 저장, 그 외 데이터 (설정 정보 포함) 가 삭제 됩니다. 지우기 작업을 수행한 후 페이지를 다시 로드해야 합니다."
cache-cleared: "캐시를 삭제하였습니다"
cache-cleared-desc: "페이지를 새로고침해 주십시오."
about: "Misskey에 대하여"
operator: "이 서버의 운영자"
update: "Misskey Update"
version: "버전:"
latest-version: "최신 버전:"
update-checking: "업데이트 확인 중"
do-update: "업데이트 확인"
update-settings: "고급 설정"
prevent-update: "업데이트를 미루기 (비권장)"
prevent-update-desc: "이 설정을 ON으로 하더라도 업데이트가 반영될 가능성이 있습니다. 이 설정은 이 장치에서만 유효합니다."
no-updates: "사용 가능한 업데이트가 없습니다"
no-updates-desc: "사용중인 Misskey는 최신 버전입니다."
update-available: "새 버전을 사용할 수 있습니다"
update-available-desc: "페이지를 다시 로드하면 업데이트가 적용됩니다."
advanced-settings: "고급 설정"
debug-mode: "디버그 모드를 사용하도록 설정"
debug-mode-desc: "이 설정은 브라우저에 저장됩니다."
experimental: "실험적 기능 사용"
experimental-desc: "실험적 기능을 활성화하면 Misskey 프로그램이 불안정해질 수 있습니다. 이 설정은 브라우저에 저장됩니다."
tools: "도구"
task-manager: "작업 관리자"
third-parties: "서드 파티"
navbar-position: "내비게이션 막대 위치"
navbar-position-top: "위"
navbar-position-left: "왼쪽"
navbar-position-right: "오른쪽"
desktop/views/components/settings.2fa.vue:
intro: "2단계 인증을 설정하면 로그인 하려면 비밀번호 외에도 미리 등록 해놓은 물리적 장치 (예를 들면 당신의 스마트 폰 등) 도 필요하게 되어 보안 수준을 보다 향상시킵니다."
detail: "자세히..."
@ -958,17 +1002,10 @@ desktop/views/components/ui.header.vue:
adjective: "님"
desktop/views/components/ui.header.account.vue:
profile: "프로필"
favorites: "즐겨찾기"
lists: "리스트"
follow-requests: "팔로우 요청"
customize: "홈 커스터마이징"
admin: "관리"
settings: "설정"
signout: "로그아웃"
dark: "어둠에 삼켜져라"
desktop/views/components/ui.header.nav.vue:
home: "홈"
deck: "덱"
game: "게임"
desktop/views/components/ui.header.notifications.vue:
title: "알림"
@ -1007,7 +1044,8 @@ admin/views/index.vue:
announcements: "공지사항"
hashtags: "해시태그"
abuse: "스팸 신고"
queue: "ジョブキュー"
queue: "작업 대기열"
logs: "로그"
back-to-misskey: "Misskey로 돌아가기"
admin/views/dashboard.vue:
dashboard: "대시보드"
@ -1018,8 +1056,8 @@ admin/views/dashboard.vue:
this-instance: "이 인스턴스"
federated: "연합"
admin/views/queue.vue:
operation: "操作"
remove-all-jobs: "すべてのジョブをクリア"
operation: "동작"
remove-all-jobs: "모든 작업 제거"
admin/views/abuse.vue:
title: "스팸 신고"
target: "대상"
@ -1040,7 +1078,7 @@ admin/views/instance.vue:
maintainer-email: "관리자 연락처"
drive-config: "드라이브 설정"
cache-remote-files: "원격 파일을 캐시"
cache-remote-files-desc: "이 설정을 해지하면 원격 파일을 캐시하지 않고 해당 파일을 직접 링크하게 됩니다. 그에 따라 서버의 저장 공간을 절약할 수 있지만, 프라이버시 설정에서 직접 링크를 무효로 설정한 유저에게는 파일이 보이지 않거나, 썸네일이 생성되지 않기 때문에 통신량이 증가합니다. 일반적으로 이 설정을 ON으로 두는 것을 추천합니다."
cache-remote-files-desc: "이 설정을 해지하면 원격 파일을 캐시하지 않고 해당 파일을 직접 링크하게 됩니다. 그에 따라 서버의 저장 공간을 절약할 수 있지만, 프라이버시 설정에서 직접 링크를 무효로 설정한 사용자에게는 파일이 보이지 않거나, 썸네일이 생성되지 않기 때문에 통신량이 증가합니다. 일반적으로 이 설정을 ON으로 두는 것을 추천합니다."
local-drive-capacity-mb: "로컬 사용자 한 명당 드라이브 용량"
remote-drive-capacity-mb: "원격 사용자 한 명당 드라이브 용량"
mb: "메가바이트 단위"
@ -1091,6 +1129,7 @@ admin/views/instance.vue:
smtp-secure-info: "STARTTLS를 사용 시 ON으로 합니다."
smtp-host: "SMTP 호스트"
smtp-port: "SMTP 포트"
smtp-auth: "SMTP 인증 수행"
smtp-user: "SMTP 사용자"
smtp-pass: "SMTP 비밀번호"
serviceworker-config: "ServiceWorker"
@ -1114,7 +1153,7 @@ admin/views/charts.vue:
notes: "글 증감 (통합)"
local-notes: "글 증감 (로컬)"
remote-notes: "글 증감 (원격)"
notes-total: "글 누적"
notes-total: "글 누적"
users: "사용자 증감"
users-total: "사용자 누적"
active-users: "활성 사용자 수"
@ -1186,6 +1225,7 @@ admin/views/users.vue:
moderator: "모더레이터"
adminOrModerator: "관리자+모더레이터"
verified: "공식 계정"
silenced: "침묵됨"
suspended: "정지됨"
origin:
title: "위치 (오리진)"
@ -1234,45 +1274,65 @@ admin/views/announcements.vue:
admin/views/hashtags.vue:
hided-tags: "Hidden Tags"
admin/views/federation.vue:
federation: "連合"
host: "ホスト"
notes: "投稿"
users: "ユーザー"
following: "フォロー中"
followers: "フォロワー"
status: "ステータス"
latest-request-sent-at: "直近のリクエスト送信"
latest-request-received-at: "直近のリクエスト受信"
remove-all-following: "フォローを全解除"
remove-all-following-info: "{host}からのフォローをすべて解除します。そのインスタンスがもう存在しなくなった場合などに実行してください。"
block: "ブロック"
lookup: "照会"
instances: "インスタンス"
instance-not-registered: "そのインスタンスは登録されていません"
sort: "ソート"
federation: "연합"
host: "호스트"
notes: ""
users: "사용자"
following: "팔로우 중"
followers: "팔로워"
status: "상태"
latest-request-sent-at: "마지막으로 요청을 전송한 시간"
latest-request-received-at: "마지막으로 요청을 받은 시간"
remove-all-following: "모든 팔로잉 해제"
remove-all-following-info: "{host}(으)로부터 모든 팔로잉을 해제합니다. 해당 인스턴스가 더 이상 존재하지 않게 된 경우 등에 실행하십시오."
block: "차단"
marked-as-closed: "폐쇄된 것으로 표시"
lookup: "조회"
instances: "인스턴스"
instance-not-registered: "해당 인스턴스가 등록되어 있지 않습니다"
sort: "정렬"
sorts:
caughtAtAsc: "登録日時が古い順"
caughtAtDesc: "登録日時が新しい順"
notesAsc: "投稿が少ない順"
notesDesc: "投稿が多い順"
usersAsc: "ユーザーが少ない順"
usersDesc: "ユーザーが多い順"
followingAsc: "フォローが少ない順"
followingDesc: "フォローが多い順"
followersAsc: "フォロワーが少ない順"
followersDesc: "フォロワーが多い順"
state: "状態"
caughtAtAsc: "등록일이 오래된 순"
caughtAtDesc: "등록일이 최신인 순"
lastCommunicatedAtAsc: "마지막으로 요청을 주고받은 일시가 오래된 순"
lastCommunicatedAtDesc: "마지막으로 요청을 주고받은 일시가 빠른 순"
notesAsc: "글이 적은 순"
notesDesc: "글이 많은 순"
usersAsc: "사용자가 적은 순"
usersDesc: "사용자가 많은 순"
followingAsc: "팔로잉이 적은 순"
followingDesc: "팔로잉이 많은 순"
followersAsc: "팔로워가 적은 순"
followersDesc: "팔로워가 많은 순"
driveUsageAsc: "드라이브 사용량이 적은 순"
driveUsageDesc: "드라이브 사용량이 많은 순"
driveFilesAsc: "드라이브 파일 수가 적은 순"
driveFilesDesc: "드라이브 파일 수가 많은 순"
state: "상태"
states:
all: "すべて"
blocked: "ブロック"
result-is-truncated: "上位{n}件を表示しています。"
all: "모두"
blocked: "차단됨"
not-responding: "응답 없음"
marked-as-closed: "폐쇄된 것으로 표시됨"
result-is-truncated: "상위 {n}개를 표시하고 있습니다."
charts: "차트"
chart-srcs:
requests: "요청"
users: "사용자 증감"
users-total: "사용자 누적"
notes: "글 증감"
notes-total: "글 누적"
ff: "팔로잉/팔로워 증감"
ff-total: "팔로잉/팔로워 누적"
drive-usage: "드라이브 사용량 증감"
drive-usage-total: "드라이브 사용량 누적"
drive-files: "드라이브 파일 수 증감"
drive-files-total: "드라이브 파일 수 누적"
chart-spans:
hour: "1시간마다"
day: "1일마다"
desktop/views/pages/welcome.vue:
about: "자세히..."
gotit: "알겠습니다"
signin: "로그인"
signup: "신규 등록"
signin-button: "로그인 중"
signup-button: "등록"
timeline: "타임라인"
announcements: "공지사항"
photos: "최근 이미지"
@ -1280,8 +1340,6 @@ desktop/views/pages/welcome.vue:
info: "정보"
desktop/views/pages/drive.vue:
title: "Misskey Drive"
desktop/views/pages/home-customize.vue:
title: "홈 커스터마이징"
desktop/views/pages/note.vue:
prev: "이전 글"
next: "다음 글"
@ -1293,8 +1351,6 @@ desktop/views/pages/selectdrive.vue:
desktop/views/pages/search.vue:
not-available: "검색 기능은 인스턴스 설정에서 비활성화되어 있습니다."
not-found: "\"{q}\" 와 일치하는 글을 찾을 수 없습니다."
desktop/views/pages/share.vue:
share-with: "{name}(으)로 공유"
desktop/views/pages/tag.vue:
no-posts-found: "해시태그 \"{q}\"가 붙은 글을 찾을 수 없습니다."
desktop/views/pages/user-list.users.vue:
@ -1313,29 +1369,26 @@ desktop/views/pages/user/user.photos.vue:
title: "사진"
loading: "로드 중"
no-photos: "사진이 없습니다"
desktop/views/pages/user/user.profile.vue:
follows-you: "당신을 팔로우합니다"
menu: "메뉴"
desktop/views/pages/user/user.header.vue:
posts: "글"
following: "팔로잉"
followers: "팔로워"
is-bot: "이 계정은 Bot입니다"
no-description: "자기소개가 없습니다"
years-old: "{age}세"
year: "년"
month: "월"
day: "일"
follows-you: "당신을 팔로우합니다"
desktop/views/pages/user/user.timeline.vue:
default: "글"
with-replies: "글과 답글"
with-media: "미디어"
my-posts: "내 글"
empty: "이 사용자는 아직 아무것도 게시하지 않은 것 같습니다."
desktop/views/widgets/messaging.vue:
title: "메시지"
desktop/views/widgets/notifications.vue:
title: "알림"
settings: "알림 설정"
desktop/views/widgets/polls.vue:
title: "투표"
refresh: "새로고침"
@ -1364,8 +1417,7 @@ mobile/views/components/drive.vue:
prompt: "무엇을 하시겠습니까? (숫자를 입력하여 주십시오): <1 → 파일 업로드 | 2 → 파일을 URL에서 업로드 | 3 → 폴더 만들기 | 4 → 이 폴더의 이름을 변경 | 5 → 현재 폴더 이동| 6 → 현재 폴더 삭제>"
deletion-alert: "죄송합니다! 폴더 삭제는 아직 구현되지 않았습니다..."
folder-name: "폴더 이름"
root-rename-alert: "현재 위치가 루트이고, 폴더가 아니므로 이름을 변경할 수 없습니다. 이름을 바꾸고 싶은 폴더로 이동하여 주십시오."
root-move-alert: "현재 위치가 루트이므로, 폴더가 아니므로 이동할 수 없습니다. 이동하고 싶은 폴더로 이동하여 주십시오."
here-is-root: "현재 경로는 루트 경로로 폴더가 아닙니다."
url-prompt: "업로드 하려는 파일의 URL"
uploading: "업로드를 요청하였습니다. 업로드가 완료될 때까지 시간이 소요될 수 있습니다."
mobile/views/components/drive-file-chooser.vue:
@ -1392,12 +1444,6 @@ common/views/components/follow-button.vue:
request-pending: "팔로우 허가 대기중"
follow-processing: "팔로우 처리중"
follow-request: "팔로우 요청"
mobile/views/components/friends-maker.vue:
title: "마음에 드는 사용자를 팔로우"
empty: "추천 사용자를 찾을 수 없습니다."
fetching: "불러오는 중입니다"
refresh: "더 보기"
close: "닫기"
mobile/views/components/note.vue:
private: "이 글은 비공개입니다"
deleted: "이 글은 삭제되었습니다"
@ -1434,8 +1480,6 @@ mobile/views/components/sub-note-content.vue:
deleted: "이 글은 삭제되었습니다"
media-count: "{}개의 미디어"
poll: "투표"
mobile/views/components/timeline.vue:
empty: "글이 없습니다"
mobile/views/components/ui.header.vue:
welcome-back: "돌아오신 걸 환영합니다."
adjective: "님"
@ -1444,22 +1488,11 @@ mobile/views/components/ui.nav.vue:
notifications: "알림"
follow-requests: "팔로우 요청"
search: "검색"
favorites: "즐겨찾기"
user-lists: "리스트"
widgets: "위젯"
game: "게임"
darkmode: "다크 모드"
settings: "설정"
admin: "관리"
about: "Misskey에 대하여"
mobile/views/components/user-timeline.vue:
no-notes: "이 사용자는 작성한 글이 없는 것 같습니다."
no-notes-with-media: "미디어가 첨부된 글이 없습니다."
mobile/views/components/users-list.vue:
all: "모두"
known: "아는 사람"
mobile/views/pages/favorites.vue:
title: "즐겨찾기"
mobile/views/pages/user-lists.vue:
title: "리스트"
enter-list-name: "리스트명을 입력하십시오"
@ -1478,8 +1511,6 @@ mobile/views/pages/home.vue:
messages: "메시지"
mobile/views/pages/tag.vue:
no-posts-found: "해시태그 \"{q}\"가 붙은 글을 찾을 수 없습니다."
mobile/views/pages/welcome.vue:
signup: "신규 등록"
mobile/views/pages/widgets.vue:
dashboard: "대시보드"
widgets-hints: "위젯을 추가 / 제거하거나 정렬할 수 있습니다. 위젯을 이동하려면 창틀의 \"☰\" 아이콘을 드래그합니다. 위젯을 삭제하려면 \"X\" 아이콘을 탭 합니다. 몇몇 위젯은 탭하면 표시형식을 바꿀 수 있습니다."
@ -1497,9 +1528,6 @@ mobile/views/pages/note.vue:
title: "글"
prev: "이전 글"
next: "다음 글"
mobile/views/pages/notifications.vue:
notifications: "알림"
read-all: "모든 알림을 읽은 상태로 표시하시겠습니까?"
mobile/views/pages/games/reversi.vue:
reversi: "리버시"
mobile/views/pages/search.vue:
@ -1509,47 +1537,6 @@ mobile/views/pages/selectdrive.vue:
select-file: "파일 선택"
mobile/views/pages/settings.vue:
signed-in-as: "{}(으)로 로그인"
design: "디자인 및 표시"
dark-mode: "다크 모드"
i-am-under-limited-internet: "저는 통신 대역폭이 제한되어 있습니다"
circle-icons: "원형 아이콘 사용"
contrasted-acct: "사용자명에 대비 추가"
timeline: "타임라인"
show-reply-target: "답글 대상 표시"
show-my-renotes: "자신이 한 리노트 표시"
show-renoted-my-notes: "자신의 글이 리노트된 것을 표시"
show-local-renotes: "로컬 글의 리노트 표시"
post-style: "글 표시 스타일"
post-style-standard: "표준"
post-style-smart: "스마트"
notification-position: "알림 표시"
notification-position-bottom: "아래"
notification-position-top: "위"
behavior: "동작"
fetch-on-scroll: "스크롤하여 자동으로 불러오기"
keep-cw: "CW 유지"
note-visibility: "게시물의 공개 범위"
default-note-visibility: "기본 공개 범위"
remember-note-visibility: "글의 공개 범위를 기억하기"
web-search-engine: "웹 검색엔진"
web-search-engine-desc: "예: https://www.google.com/?#q={{query}}"
disable-via-mobile: "작성하는 글에 \"모바일에서 작성함\" 을 붙이지 않음"
load-raw-images: "첨부 이미지를 고품질로 표시"
load-remote-media: "원격 서버의 미디어를 표시"
update: "Misskey Update"
version: "버전:"
latest-version: "최신 버전:"
update-checking: "업데이트 확인 중"
check-for-updates: "업데이트 확인"
no-updates: "사용 가능한 업데이트가 없습니다"
no-updates-desc: "사용중인 Misskey는 최신 버전입니다."
update-available: "새 버전을 사용할 수 있습니다"
update-available-desc: "페이지를 다시 로드하면 업데이트가 적용됩니다."
settings: "설정"
signout: "로그아웃"
sound: "소리"
enable-sounds: "소리 사용"
password: "비밀번호"
mobile/views/pages/user.vue:
follows-you: "당신을 팔로우합니다"
following: "팔로잉"
@ -1565,15 +1552,9 @@ mobile/views/pages/user/home.vue:
activity: "활동"
keywords: "키워드"
domains: "자주 보이는 도메인"
frequently-replied-users: "자주 대화하는 사용자"
frequently-replied-users: "자주 언급되는 사용자"
followers-you-know: "아는 사람의 팔로워"
last-used-at: "마지막 로그인"
mobile/views/pages/user/home.followers-you-know.vue:
no-users: "아는 사용자가 없습니다"
mobile/views/pages/user/home.friends.vue:
no-users: "자주 대화하는 사용자가 없습니다"
mobile/views/pages/user/home.notes.vue:
no-notes: "글이 없습니다"
mobile/views/pages/user/home.photos.vue:
no-photos: "사진이 없습니다"
deck:
@ -1587,6 +1568,7 @@ deck:
direct: "다이렉트 게시글"
notifications: "알림"
list: "리스트"
select-list: "리스트를 선택하여 주십시오"
swap-left: "왼쪽으로 이동"
swap-right: "오른쪽으로 이동"
swap-up: "위로 이동"
@ -1596,11 +1578,14 @@ deck:
rename: "이름 변경"
stack-left: "왼쪽에 쌓기"
pop-right: "오른쪽으로 빼기"
disabled-timeline:
title: "비활성화된 타임라인"
description: "서버 운영자에 의해 이 타임라인이 사용할 수 없도록 설정되어 있습니다."
deck/deck.tl-column.vue:
is-media-only: "미디어가 달린 글만"
is-media-view: "미디어 보기"
edit: "옵션"
deck/deck.user-column.vue:
follows-you: "당신을 팔로우합니다"
posts: "글"
following: "팔로잉"
followers: "팔로워"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,6 @@
---
meta:
lang: "中文(简体)"
divider: ""
common:
misskey: "Fediverse中的一颗⭐"
about-title: "Fediverse中的一颗⭐"
@ -16,8 +15,8 @@ common:
reaction-desc: "这是表达情绪的最简单方法。 Misskey允许您向其他帖子添加各种类型的回应。 一旦体验过Misskey的回应功能就再也不会想回到那些只有点赞功能的其他SNS上了。"
ui: "交互界面"
ui-desc: "世界上没有一个UI可以适合每一个人. 所以, Misskey 提供一个可以高度定制的UI交互界面. 您可以通过编辑, 调整布局, 放置可选择的小部件来轻松定制您的专属UI界面。"
drive: "Misskey 云盘"
drive-desc: "想要发布一张您已经上传过的照片吗? 想要组织,命名和为上传的文件创建文件夹吗? Misskey盘是一个最好的解决方案. "
drive: "盘"
drive-desc: "想要发布一张您已经上传过的照片吗?想要管理文件或为上传的文件创建文件夹吗Misskey的网盘是一个最好的解决方案"
outro: "Misskey还有其他更多功能请亲身体验一下吧。因为 Misskey 是一个分布式的 SNS如果您感觉某个功能不适合自己试试其他的吧。祝您玩得开心"
adblock:
detected: "请关闭广告拦截器"
@ -28,7 +27,14 @@ common:
load-more: "加载更多"
enter-password: "请输入您的密码"
2fa: "双重身份验证"
got-it: "没问题"
customize-home: "自定义主页"
featured-notes: "高亮"
dark-mode: "黑暗模式"
signin: "登录"
signup: "注册"
signout: "退出"
reload-to-apply-the-setting: "必须重新加载页面以应用此设置。 确实要立即重新加载吗?"
got-it: "知道了"
customization-tips:
title: "自定义提示"
paragraph: "<p>主页定制允许您添加或删除, 拖放和重新排列小组件.</p></p>您可以通过<strong><strong>右键</strong>点击</strong>某些小部件来更改显示</p><p>若要删除小部件, 请将其拖到标头为<strong>「垃圾箱」</strong>的区域</p><p>如果您完成了定制过程,单击右上角的「完成」</p>"
@ -56,6 +62,16 @@ common:
trash: "垃圾箱"
drive: "网盘"
messaging: "聊天"
home: "首页"
deck: "Deck"
timeline: "时间线"
explore: "发现"
following: "正在关注"
followers: "关注者"
favorites: "最爱"
empty-timeline-info:
follow-users-to-make-your-timeline: "关注其他用户时,帖子将显示在时间线中。"
explore: "查找用户"
weekday-short:
sunday: "日"
monday: "一"
@ -87,7 +103,7 @@ common:
public: "公开"
home: "首页"
home-desc: "仅发送至首页的时间线"
followers: "粉丝"
followers: "关注者"
followers-desc: "仅发送至粉丝"
specified: "指定用户"
specified-desc: "仅发送至指定用户"
@ -101,31 +117,118 @@ common:
d: "你想要发布些什么吗?"
e: "请写下来吧"
f: "等待您的发布..."
settings: "设置"
_settings:
profile: "个人资料"
notification: "通知"
apps: "应用程序"
tags: "标签"
mute-and-block: "屏蔽/拉黑"
blocking: "屏蔽"
security: "安全性"
signin: "登录历史"
password: "密码"
other: "其他"
appearance: "设计"
behavior: "行为"
fetch-on-scroll: "向下滚动时自动加载"
fetch-on-scroll-desc: "向下滚动页面时,它会自动提取其他内容。"
note-visibility: "帖子可见性"
default-note-visibility: "默认可见性"
remember-note-visibility: "记住帖子可见性"
web-search-engine: "搜索引擎"
web-search-engine-desc: "例如: https://www.google.com/?#q={{query}}"
keep-cw: "保留内容警告"
keep-cw-desc: "在回复帖子时,如果原帖设置了内容警告,默认情况下回帖也会设置相同的内容警告。"
i-like-sushi: "相比于布丁来说, 我更喜欢寿司。"
show-reversi-board-labels: "在 Reversi 中显示行和列表签"
use-avatar-reversi-stones: "用头像作为黑白棋的棋子"
disable-animated-mfm: "在帖子中禁用动画文本"
disable-showing-animated-images: "不播放动画"
suggest-recent-hashtags: "在帖子表单上显示最近流行的主题标签"
always-show-nsfw: "总是显示 NSFW 的内容"
always-mark-nsfw: "总是用 NSFW 来标记附件"
show-full-acct: "不要从用户名中忽略主机名"
show-via: "显示 via"
reduce-motion: "减弱UI中的动画效果"
this-setting-is-this-device-only: "设置仅在本设备中生效"
use-os-default-emojis: "使用设备系统默认的表情符号"
line-width: "线条宽度"
line-width-thin: "细"
line-width-normal: "正常"
line-width-thick: "粗"
font-size: "文字大小"
font-size-x-small: "小"
font-size-small: "较小"
font-size-medium: "普通"
font-size-large: "较大"
font-size-x-large: "大"
deck-column-align: "列对齐设置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
deck-column-align-flexible: "可变"
deck-column-width: "Deck列宽"
deck-column-width-narrow: "窄"
deck-column-width-narrower: "很窄"
deck-column-width-normal: "普通"
deck-column-width-wider: "很宽"
deck-column-width-wide: "宽"
use-shadow: "在UI中使用阴影效果"
rounded-corners: "UI界面圆角效果"
circle-icons: "使用圆形图标"
contrasted-acct: "增加用户名的对比度"
wallpaper: "壁纸"
choose-wallpaper: "选择壁纸"
delete-wallpaper: "移除壁纸"
post-form-on-timeline: "在时间线顶部显示帖子表单"
show-clock-on-header: "在右上角显示时钟"
show-reply-target: "显示回复目标"
timeline: "时间线"
show-my-renotes: "在时间线上显示我的Renote"
show-renoted-my-notes: "在时间线上显示我的帖子的Renote"
show-local-renotes: "在时间线上显示本地帖子的Renote"
remain-deleted-note: "继续显示已删除的帖子"
sound: "声音"
enable-sounds: "开启声音"
enable-sounds-desc: "收到帖子/留言时播放声音。 此设置将被存储在浏览器中。"
volume: "音量"
test: "测试"
update: "Misskey更新"
version: "版本:"
latest-version: "最新版本:"
update-checking: "正在检查更新"
do-update: "检查更新"
update-settings: "详细设置"
no-updates: "无可用更新"
no-updates-desc: "您所使用的 Misskey 已经是最新版本。"
update-available: "有可用的新版本"
update-available-desc: "重新加载页面以应用更新。"
advanced-settings: "高级设置"
debug-mode: "启用调试模式"
debug-mode-desc: "此设置存储在浏览器中。"
navbar-position: "导航栏位置"
navbar-position-top: "顶部"
navbar-position-left: "左边"
navbar-position-right: "右边"
i-am-under-limited-internet: "我的带宽有限"
post-style: "发帖的展示风格"
post-style-standard: "标准"
post-style-smart: "Smart"
notification-position: "通知形式"
notification-position-bottom: "底部"
notification-position-top: "顶部"
disable-via-mobile: "不要将帖子标记为“来自手机”"
load-raw-images: "以原始质量显示附加图像"
load-remote-media: "显示来自远程服务器的媒体"
search: "搜索"
delete: "删除"
loading: "正在加载中"
ok: "OK"
ok: "确定"
cancel: "取消"
update-available-title: "有可用更新"
update-available: "新的 Misskey 版本现已发布({newer}。目前版本{current}). 刷新页面以应用更新。"
my-token-regenerated: "您的 Token 已被重置, 您将自动登出。"
i-like-sushi: "相比于布丁来说, 我更喜欢寿司。"
show-reversi-board-labels: "在 Reversi 中显示行和列表签"
use-avatar-reversi-stones: "用头像作为黑白棋的棋子"
verified-user: "认证用户"
disable-animated-mfm: "在帖子中禁用动画文本"
disable-showing-animated-images: "不播放动画"
suggest-recent-hashtags: "在帖子表单上显示最近流行的主题标签"
always-show-nsfw: "总是显示 NSFW 的内容"
always-mark-nsfw: "总是用 NSFW 来标记附件"
show-full-acct: "不要从用户名中忽略主机名"
show-via: "显示 via"
reduce-motion: "减弱UI中的动画效果"
this-setting-is-this-device-only: "设置仅在本设备中生效"
use-os-default-emojis: "使用设备系统默认的表情符号"
line-width: "线条宽度"
line-width-thin: "细"
line-width-normal: "正常"
line-width-thick: "粗"
hide-password: "隐藏密码"
show-password: "显示密码"
do-not-use-in-production: "这是一个开发者测试版. 请勿在生产环境中使用."
@ -134,6 +237,9 @@ common:
is-remote-post: "该投稿已被复制."
view-on-remote: "查看准确的信息"
renoted-by: "由 {user} Renote"
no-notes: "没有帖子"
turn-on-darkmode: "切换暗色主题"
turn-off-darkmode: "切换亮色主题"
error:
title: "出现问题"
retry: "重试"
@ -181,8 +287,8 @@ auth/views/form.vue:
note-write: "投稿。"
like-write: "点赞或取消赞。"
following-write: "关注或取消关注。"
drive-read: "查看您的盘"
drive-write: "上传/删除您云盘中的文件。"
drive-read: "查看您的盘"
drive-write: "管理网盘文件。"
notification-read: "查看通知。"
notification-write: "管理通知。"
cancel: "取消"
@ -197,6 +303,19 @@ auth/views/index.vue:
please-go-back: "请返回到应用程序"
error: "会话不存在。"
sign-in: "请登录。"
common/views/pages/explore.vue:
verified-users: "官方账户"
popular-users: "热门用户"
recently-updated-users: "活跃用户"
recently-registered-users: "新用户"
popular-tags: "热门标签"
federated: "联合"
explore: "查找{host}"
users-info: "当前有{users}个注册用户"
common/views/components/url-preview.vue:
enable-player: "打开播放器"
common/views/components/user-list.vue:
no-users: "无用户"
common/views/components/games/reversi/reversi.vue:
matching:
waiting-for: "等待 {}"
@ -324,7 +443,7 @@ common/views/components/messaging-room.form.vue:
input-message-here: "在此键入信息"
send: "发送"
attach-from-local: "从电脑中添加文件"
attach-from-drive: "从盘中添加文件"
attach-from-drive: "从盘中添加文件"
only-one-file-attached: "在信息中只允许添加一个附件"
common/views/components/messaging-room.message.vue:
is-read: "已读"
@ -370,16 +489,35 @@ common/views/components/user-menu.vue:
common/views/components/poll.vue:
vote-to: "为\"{}\"投票"
vote-count: "{}票"
total-users: "{} 人投票"
total-votes: "总票数{}"
vote: "投票"
show-result: "显示结果"
voted: "已投票"
closed: "已截止"
remaining-days: "{d}天{h}小时后截止"
remaining-hours: "{h}小时{m}分后截止"
remaining-minutes: "{m}分{s}秒后截止"
remaining-seconds: "{s}秒后截止"
common/views/components/poll-editor.vue:
no-only-one-choice: "至少选择两个选项"
choice-n: "选择{}"
remove: "删除选项"
add: "+添加一个选项"
destroy: "放弃投票"
multiple: "允许多个投票"
expiration: "截止时间"
infinite: "永久"
at: "指定日期"
after: "指定时间"
no-more: "最多只能添加十个回答"
deadline-date: "日期"
deadline-time: "时间"
interval: "时长"
unit: "单位"
second: "秒"
minute: "分"
hour: "小时"
day: "日"
common/views/components/reaction-picker.vue:
choose-reaction: "选择回应"
common/views/components/emoji-picker.vue:
@ -397,7 +535,6 @@ common/views/components/signin.vue:
password: "密码"
token: "Token (令牌)"
signing-in: "正在登录..."
signin: "登录"
or: "或者"
signin-with-twitter: "用 Twitter 登录"
signin-with-github: "用 GitHub 登录"
@ -510,12 +647,20 @@ common/views/components/profile-editor.vue:
email-verified: "电子邮件地址已验证"
email-not-verified: "邮件地址尚未验证。 请检查您的邮箱。"
export: "导出"
import: "导入"
export-and-import: "导出/导入"
export-targets:
all-notes: "所有发帖"
following-list: "关注列表"
mute-list: "屏蔽列表"
blocking-list: "黑名单"
user-lists: "列表"
export-requested: "导出请求已提交。可能需要花一些时间。导出的文件将保存到网盘中。"
import-requested: "导入请求已提交。这可能需要花一点时间。"
enter-password: "请输入您的密码"
danger-zone: "危险选项"
delete-account: "删除帐户"
account-deleted: "帐户已被删除。 数据会在一段时间之后清除。"
common/views/components/user-list-editor.vue:
users: "用户"
rename: "重命名列表"
@ -559,14 +704,14 @@ common/views/widgets/tips.vue:
tips-line2: "从 <kbd>p</kbd> 或者 <kbd>n</kbd>打开投稿表单"
tips-line3: "您可以在投稿表单上拖放文件。"
tips-line4: "您可以将剪贴板中的图像粘贴到提交表单中。"
tips-line5: "您可以通过将文件拖放到盘来上传文件。"
tips-line6: "您可以通过在盘中拖动文件夹来移动文件夹"
tips-line7: "您可以通过在文件夹中拖动文件夹来移动文件夹。"
tips-line5: "您可以通过将文件拖放到盘来上传文件。"
tips-line6: "您可以通过在盘中通过拖动操作来移动文件夹"
tips-line7: "您可以通过在网盘中通过拖动操作来移动文件夹。"
tips-line8: "可以从设置中定制主页。"
tips-line9: "Misskey 根据 AGPLv3 获得许可。"
tips-line10: "使用Time Machine(时光机)小部件可以轻松追溯到过去的时间轴。"
tips-line11: "您可以点击“...”将帖子固定到用户页面"
tips-line13: "附在帖子上的所有文件都会保存到盘中。"
tips-line13: "附在帖子上的所有文件都会保存到盘中。"
tips-line14: "在自定义首页布局时,您可以右键单击窗口小部件以更改其设计。"
tips-line17: "用“**”围绕文本将突出显示它。"
tips-line19: "可以在浏览器外部分离多个窗口。"
@ -684,12 +829,6 @@ desktop/views/components/following-window.vue:
following: "正在关注 {}"
desktop/views/components/following.vue:
empty: "看起来您没有正在关注的用户..."
desktop/views/components/friends-maker.vue:
title: "推荐用户:"
empty: "找不到推荐用户。"
fetching: "正在加载"
refresh: "浏览更多"
close: "关闭"
desktop/views/components/game-window.vue:
game: "游戏"
desktop/views/components/home.vue:
@ -698,7 +837,7 @@ desktop/views/components/home.vue:
add: "添加"
desktop/views/input-dialog.vue:
cancel: "取消"
ok: "完成"
ok: "确定"
desktop/views/components/messaging-room-window.vue:
title: "信息:"
desktop/views/components/messaging-window.vue:
@ -740,7 +879,7 @@ desktop/views/components/post-form.vue:
renote-failed: "转发失败"
posting: "发送中"
attach-media-from-local: "从设备中添加媒体文件"
attach-media-from-drive: "从盘中添加媒体文件"
attach-media-from-drive: "从盘中添加媒体文件"
attach-cancel: "删除附件"
insert-a-kao: "v('ω')v"
create-poll: "创建一个投票"
@ -773,101 +912,6 @@ desktop/views/components/renote-form-window.vue:
desktop/views/pages/user-following-or-followers.vue:
following: "{user}的正在关注"
followers: "{user}的关注者"
desktop/views/components/settings-window.vue:
settings: "设置"
desktop/views/components/settings.vue:
profile: "个人资料"
notification: "通知"
apps: "应用程序"
tags: "标签"
mute-and-block: "屏蔽/拉黑"
blocking: "已拉黑"
security: "安全性"
signin: "登录历史"
password: "密码"
other: "其他"
license: "许可证"
theme: "主题"
behaviour: "行为"
fetch-on-scroll: "向下滚动时自动加载"
fetch-on-scroll-desc: "向下滚动页面时,它会自动提取其他内容。"
note-visibility: "帖子可见性"
default-note-visibility: "默认可见性"
remember-note-visibility: "记住帖子可见性"
web-search-engine: "搜索引擎"
web-search-engine-desc: "例如: https://www.google.com/?#q={{query}}"
auto-popout: "自动弹出窗口"
auto-popout-desc: "如果可用,将使用弹出显示而不是打开新窗口。 此设置存储在浏览器中。"
deck-nav: "Deck 内的导航"
deck-nav-desc: "在使用Deck时您会在导航期间获得一个没有页面过渡的临时列。"
keep-cw: "保留内容警告"
keep-cw-desc: "在回复帖子时,如果原帖设置了内容警告,默认情况下回帖也会设置相同的内容警告。"
deck-default: "将Deck界面设置为默认UI显示界面"
display: "设计与展示"
customize: "自定义首页摆放"
wallpaper: "壁纸"
choose-wallpaper: "选择一个背景壁纸"
delete-wallpaper: "移除背景壁纸"
dark-mode: "黑暗模式"
use-shadow: "在UI中使用阴影效果"
rounded-corners: "UI界面圆角效果"
circle-icons: "使用圆形图标"
contrasted-acct: "增加用户名的对比度"
post-form-on-timeline: "在时间线顶部显示帖子表单"
show-clock-on-header: "在右上角显示时钟"
show-reply-target: "显示回复目标"
timeline: "时间线"
show-my-renotes: "在时间表中显示Renote"
show-renoted-my-notes: "在时间线上显示我的Renote"
show-local-renotes: "在时间线中显示Local Renote(s)"
show-maps: "自动显示地图"
remain-deleted-note: "继续显示已删除的帖子"
deck-column-align: "列对齐设置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
deck-column-align-flexible: "可变"
deck-column-width: "列宽度"
deck-column-width-narrow: "窄"
deck-column-width-narrower: "更窄"
deck-column-width-normal: "正常"
deck-column-width-wider: "更宽"
deck-column-width-wide: "宽"
sound: "声音"
enable-sounds: "开启声音"
enable-sounds-desc: "收到帖子/留言时播放声音。 此设置将被存储在浏览器中。"
volume: "音量"
test: "测试"
cache: "缓存"
clean-cache: "清除缓存"
cache-warn: "将删除存储在浏览器中的帐户信息/帖子/回复/消息/设置的缓存。 清理完毕后需要刷新页面。"
cache-cleared: "已清除缓存"
cache-cleared-desc: "请刷新页面。"
about: "关于 Misskey"
operator: "网站运营者"
update: "更新 Misskey"
version: "版本:"
latest-version: "最新版本:"
update-checking: "正在检查更新"
do-update: "检查更新"
update-settings: "更多设置"
prevent-update: "推迟更新(不推荐)"
prevent-update-desc: "即使您启用此设置,也可能会应用更新。 此设置仅对此设备启用。"
no-updates: "无可用更新"
no-updates-desc: "你的 Misskey 是最新版本的。"
update-available: "有新版本可用!"
update-available-desc: "重新加载页面以应用更新"
advanced-settings: "高级配置"
debug-mode: "启用调试模式"
debug-mode-desc: "此设置存储在浏览器中。"
experimental: "启用实验性功能"
experimental-desc: "激活此功能可能会使 Misskey 客户端不稳定。 此设置存储在浏览器中。"
tools: "工具"
task-manager: "任务管理器"
third-parties: "第三方"
navbar-position: "导航栏位置"
navbar-position-top: "顶部"
navbar-position-left: "左"
navbar-position-right: "右"
desktop/views/components/settings.2fa.vue:
intro: "如果设置了两步验证,则不仅需要在登录时使用密码,还需要验证设备(如智能手机),这将提高安全性。"
detail: "详细信息..."
@ -958,17 +1002,10 @@ desktop/views/components/ui.header.vue:
adjective: "先生"
desktop/views/components/ui.header.account.vue:
profile: "个人资料"
favorites: "最爱"
lists: "列表"
follow-requests: "关注申请"
customize: "自定义首页布局"
admin: "管理"
settings: "设置"
signout: "登出"
dark: "切换到黑暗模式 (夜间使用请打开此选项哦~)"
desktop/views/components/ui.header.nav.vue:
home: "首页"
deck: "Deck"
game: "游戏"
desktop/views/components/ui.header.notifications.vue:
title: "通知"
@ -1008,12 +1045,13 @@ admin/views/index.vue:
hashtags: "标签"
abuse: "举报垃圾信息"
queue: "作业队列"
logs: "登录"
back-to-misskey: "返回 Misskey"
admin/views/dashboard.vue:
dashboard: "Dashboard"
accounts: "账户"
notes: "帖子"
drive: "Misskey 云盘"
drive: "盘"
instances: "例子"
this-instance: "此实例"
federated: "联合"
@ -1038,11 +1076,11 @@ admin/views/instance.vue:
maintainer-config: "管理员信息"
maintainer-name: "管理员名称"
maintainer-email: "联系管理员"
drive-config: "盘设置"
drive-config: "盘设置"
cache-remote-files: "远程文件缓存"
cache-remote-files-desc: "如果没有此参数,则所有远程文件都将直接链接到其主机服务器。 这将是保存服务器存储的有效解决方案,但是对于设置禁用直接链接的用户而言,远程文件不可见,因为不会生成缩略图,从而增加流量。 建议启用此参数集。"
local-drive-capacity-mb: "每个用户的盘空间"
remote-drive-capacity-mb: "每个远程用户的盘容量"
local-drive-capacity-mb: "每个用户的盘空间"
remote-drive-capacity-mb: "每个远程用户的盘容量"
mb: "以兆字节(Mbps)为单位"
recaptcha-config: "reCAPTCHA设置"
recaptcha-info: "reCAPTCHA token是必要的. 请从 https://www.google.com/recaptcha/intro/ 获取。\n请注意, 该功能在中国大陆不可用。"
@ -1091,6 +1129,7 @@ admin/views/instance.vue:
smtp-secure-info: "使用时关闭 STARTTLS。"
smtp-host: "SMTP 服务器地址 (主机名)"
smtp-port: "SMTP 端口"
smtp-auth: "SMTP身份验证"
smtp-user: "SMTP 用户名"
smtp-pass: "SMTP 密码"
serviceworker-config: "ServiceWorker"
@ -1106,7 +1145,7 @@ admin/views/charts.vue:
federation: "联合"
notes: "投稿"
users: "用户"
drive: "Misskey 云盘"
drive: "盘"
network: "网络"
charts:
federation-instances: "实例数:增加/减少"
@ -1119,9 +1158,9 @@ admin/views/charts.vue:
users-total: "用户总数"
active-users: "活跃用户数"
drive: "存储容量:增加/减少"
drive-total: "盘总量"
drive-files: "云盘上的文件数:增加/减少"
drive-files-total: "云盘上文件总数"
drive-total: "盘总使用量"
drive-files: "网盘文件数量变化"
drive-files-total: "网盘文件总数"
network-requests: "请求"
network-time: "响应时间"
network-usage: "网络流量"
@ -1186,6 +1225,7 @@ admin/views/users.vue:
moderator: "版主"
adminOrModerator: "管理员+版主"
verified: "官方认证账户"
silenced: "已禁言"
suspended: "已冻结"
origin:
title: "源自"
@ -1246,6 +1286,7 @@ admin/views/federation.vue:
remove-all-following: "取消所有关注"
remove-all-following-info: "取消{host}的所有关注者。当实例不存在时执行。"
block: "拉黑"
marked-as-closed: "标记为已关闭"
lookup: "查询"
instances: "实例"
instance-not-registered: "实例未注册"
@ -1253,6 +1294,8 @@ admin/views/federation.vue:
sorts:
caughtAtAsc: "注册时间从旧到新"
caughtAtDesc: "注册时间从新到旧"
lastCommunicatedAtAsc: "上次互动时间从旧到新"
lastCommunicatedAtDesc: "上次互动时间从新到旧"
notesAsc: "发帖数量从少到多"
notesDesc: "发帖数量从多到少"
usersAsc: "用户数从少到多"
@ -1261,27 +1304,42 @@ admin/views/federation.vue:
followingDesc: "关注数从多到少"
followersAsc: "粉丝数从少到多"
followersDesc: "粉丝数从多到少"
driveUsageAsc: "网盘使用量从少到多"
driveUsageDesc: "网盘使用量从多到少"
driveFilesAsc: "网盘文件数从少到多"
driveFilesDesc: "网盘文件数从多到少"
state: "状态"
states:
all: "所有"
blocked: "已拉黑"
not-responding: "没有响应"
marked-as-closed: "已标记为已关闭"
result-is-truncated: "显示最前面的{n}项。"
charts: "图表"
chart-srcs:
requests: "请求"
users: "用户数量变化"
users-total: "用户总数"
notes: "发帖数变化"
notes-total: "帖子总数"
ff: "关注/被关注数量变化"
ff-total: "关注/被关注总数"
drive-usage: "网盘使用量变化"
drive-usage-total: "网盘总使用量"
drive-files: "网盘文件数量变化"
drive-files-total: "网盘文件总数"
chart-spans:
hour: "每小时"
day: "每天"
desktop/views/pages/welcome.vue:
about: "更多信息..."
gotit: "没问题! "
signin: "登录"
signup: "注册"
signin-button: "正在登录"
signup-button: "注册"
timeline: "时间线"
announcements: "公告"
photos: "最近图片"
powered-by-misskey: "Powered by <b>Misskey</b>."
info: "信息"
desktop/views/pages/drive.vue:
title: "Misskey 盘"
desktop/views/pages/home-customize.vue:
title: "自定义首页布局"
title: "Misskey 盘"
desktop/views/pages/note.vue:
prev: "上一个帖子"
next: "下一个帖子"
@ -1293,8 +1351,6 @@ desktop/views/pages/selectdrive.vue:
desktop/views/pages/search.vue:
not-available: "在此实例的设置中关闭搜索功能。"
not-found: "没有找到“{q}”的帖子"
desktop/views/pages/share.vue:
share-with: "共享{name}"
desktop/views/pages/tag.vue:
no-posts-found: "没有找到带有主题标签“{q}”的帖子"
desktop/views/pages/user-list.users.vue:
@ -1313,29 +1369,26 @@ desktop/views/pages/user/user.photos.vue:
title: "照片"
loading: "正在加载中"
no-photos: "没有图片"
desktop/views/pages/user/user.profile.vue:
follows-you: "关注您"
menu: "菜单"
desktop/views/pages/user/user.header.vue:
posts: "帖子"
following: "关注中"
followers: "关注者"
is-bot: "这个账户是Bot"
no-description: "没有自我介绍"
years-old: "{age}岁"
year: "年"
month: "月"
day: "日"
follows-you: "关注您"
desktop/views/pages/user/user.timeline.vue:
default: "帖子"
with-replies: "帖子与回复"
with-media: "媒体"
my-posts: "我的帖子"
empty: "看起来这个用户还没有发布什么呢。"
desktop/views/widgets/messaging.vue:
title: "信息"
desktop/views/widgets/notifications.vue:
title: "通知"
settings: "通知设置"
desktop/views/widgets/polls.vue:
title: "投票"
refresh: "更多"
@ -1359,13 +1412,12 @@ mobile/views/components/drive.vue:
folder-count: "文件夹"
count-separator: ""
file-count: "文件"
nothing-in-drive: "云盘上没有任何东西"
nothing-in-drive: "网盘为空"
folder-is-empty: "这文件夹是空的"
prompt: "您想要干什么呢?(请输入数字):<1 → 上传文件 | 2 → 从URL上传文件 | 3 → 创建新文件夹 | 4 → 更改这个文件夹的名称 | 5 → 移动这个文件夹 | 6 → 删除这个文件夹>"
deletion-alert: "抱歉! 删除文件夹功能尚未实现。"
folder-name: "文件夹名称"
root-rename-alert: "您目前在root模式; 它无法重命名,因为它不是文件夹。 导航到要重命名的文件夹,然后重试。"
root-move-alert: "您目前在root模式; 它无法移动,因为它不是文件夹。 导航到要移动的文件夹,然后重试。"
here-is-root: "当前位置为根目录。"
url-prompt: "要上传的文件的URL"
uploading: "已请求上传。 上传完成可能需要一段时间。"
mobile/views/components/drive-file-chooser.vue:
@ -1392,12 +1444,6 @@ common/views/components/follow-button.vue:
request-pending: "发送关注申请"
follow-processing: "申请处理中"
follow-request: "关注申请"
mobile/views/components/friends-maker.vue:
title: "推荐用户:"
empty: "找不到推荐用户。"
fetching: "正在加载..."
refresh: "浏览更多"
close: "关闭"
mobile/views/components/note.vue:
private: "私密帖子"
deleted: "帖子已删除"
@ -1434,8 +1480,6 @@ mobile/views/components/sub-note-content.vue:
deleted: "帖子已删除"
media-count: "附加{}媒体"
poll: "投票"
mobile/views/components/timeline.vue:
empty: "无帖子"
mobile/views/components/ui.header.vue:
welcome-back: "欢迎回来!"
adjective: "先生"
@ -1444,22 +1488,11 @@ mobile/views/components/ui.nav.vue:
notifications: "通知"
follow-requests: "关注申请"
search: "搜索"
favorites: "收藏"
user-lists: "列表"
widgets: "小部件"
game: "游戏"
darkmode: "夜间模式"
settings: "设置"
admin: "管理"
about: "关于 Misskey"
mobile/views/components/user-timeline.vue:
no-notes: "看起来该用户还没有发表任何东西哎。"
no-notes-with-media: "媒体附件没有备注"
mobile/views/components/users-list.vue:
all: "所有"
known: "共同"
mobile/views/pages/favorites.vue:
title: "收藏"
mobile/views/pages/user-lists.vue:
title: "列表"
enter-list-name: "输入要列出的列表的名称"
@ -1478,10 +1511,8 @@ mobile/views/pages/home.vue:
messages: "信息"
mobile/views/pages/tag.vue:
no-posts-found: "没有找到带有主题标签“{q}”的帖子"
mobile/views/pages/welcome.vue:
signup: "注册"
mobile/views/pages/widgets.vue:
dashboard: "Dashboard"
dashboard: "仪表盘"
widgets-hints: "您可以添加/删除/重新排列小部件。 要移动小部件,请拖动“三”。 点击“×”删除小部件。 某些小部件可以通过点击来更改显示。"
add-widget: "添加"
customization-tips: "定制提示"
@ -1497,9 +1528,6 @@ mobile/views/pages/note.vue:
title: "帖文"
prev: "上一个帖子"
next: "下一个帖子"
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "您希望将所有通知标记为已读吗?"
mobile/views/pages/games/reversi.vue:
reversi: "游戏"
mobile/views/pages/search.vue:
@ -1509,47 +1537,6 @@ mobile/views/pages/selectdrive.vue:
select-file: "选择文件"
mobile/views/pages/settings.vue:
signed-in-as: "以{}登录"
design: "设计与展示"
dark-mode: "夜间模式"
i-am-under-limited-internet: "我的带宽有限"
circle-icons: "使用圆形图标"
contrasted-acct: "增加用户名的对比度"
timeline: "时间线"
show-reply-target: "显示回复目标"
show-my-renotes: "显示我的转发"
show-renoted-my-notes: "显示我的 Renote"
show-local-renotes: "显示本地的 Renote 帖子"
post-style: "发布展示风格"
post-style-standard: "标准"
post-style-smart: "Smart"
notification-position: "通知形式"
notification-position-bottom: "底部"
notification-position-top: "顶部"
behavior: "动作"
fetch-on-scroll: "滚动无限加载"
keep-cw: "保留内容警告"
note-visibility: "帖子可见性"
default-note-visibility: "默认可见性"
remember-note-visibility: "记住帖子可见性"
web-search-engine: "搜索引擎"
web-search-engine-desc: "例如: https://www.google.com/?#q={{query}}"
disable-via-mobile: "不要将帖子标记为“来自手机”"
load-raw-images: "以原始质量显示附加图像"
load-remote-media: "显示来自远程服务器的媒体"
update: "更新 Misskey"
version: "当前版本:"
latest-version: "最新版本:"
update-checking: "正在检查更新"
check-for-updates: "检查更新"
no-updates: "无可用更新"
no-updates-desc: "你的Misskey是最新版本的。"
update-available: "有新版本可用!"
update-available-desc: "重新加载页面以应用更新"
settings: "设置"
signout: "注销"
sound: "声音"
enable-sounds: "开启声音"
password: "密码"
mobile/views/pages/user.vue:
follows-you: "关注您"
following: "关注中"
@ -1565,15 +1552,9 @@ mobile/views/pages/user/home.vue:
activity: "活动"
keywords: "关键字"
domains: "域名"
frequently-replied-users: "活跃用户"
frequently-replied-users: "活跃用户"
followers-you-know: "您可能认识的关注者"
last-used-at: "上次登录:"
mobile/views/pages/user/home.followers-you-know.vue:
no-users: "没有您认识的用户"
mobile/views/pages/user/home.friends.vue:
no-users: "没有您知道的用户"
mobile/views/pages/user/home.notes.vue:
no-notes: "没有帖子"
mobile/views/pages/user/home.photos.vue:
no-photos: "没有图片"
deck:
@ -1587,6 +1568,7 @@ deck:
direct: "直接发布"
notifications: "通知"
list: "列表"
select-list: "请选择一个列表"
swap-left: "向左移动"
swap-right: "向右移动"
swap-up: "向上移动"
@ -1596,11 +1578,14 @@ deck:
rename: "重命名"
stack-left: "向左折叠"
pop-right: "带到右边"
disabled-timeline:
title: "禁用时间线"
description: "服务器管理员已禁用时间线。"
deck/deck.tl-column.vue:
is-media-only: "只有媒体的帖子"
is-media-view: "媒体视图"
edit: "选项"
deck/deck.user-column.vue:
follows-you: "关注您"
posts: "帖子"
following: "关注中"
followers: "关注者"
@ -1654,7 +1639,7 @@ dev/views/new-app.vue:
note-write: "投稿。"
reaction-write: "添加或删除反应。"
following-write: "关注和不关注"
drive-read: "查看盘"
drive-write: "上传/删除云盘里的文件"
drive-read: "查看盘"
drive-write: "管理网盘文件"
notification-read: "阅读您的通知"
notification-write: "管理通知"

88
locales/zh-TW.yml Normal file
View File

@ -0,0 +1,88 @@
---
meta:
lang: "中文(繁体)"
common:
intro:
title: "什麽是 Misskey 呢?"
rich-contents: "發佈"
reaction: "回應"
drive: "雲端硬碟"
adblock:
detected: "請禁用廣告封鎖器"
close: "關閉"
enter-password: "請輸入密碼"
2fa: "雙重身份驗證"
dark-mode: "夜間模式"
signup: "註冊"
signout: "登出"
notification:
reversi-invited: "您已被邀請加入壹場遊戲"
reversi-invited-by: "來自{}的邀請"
notified-by: "來自{}的邀請"
time:
future: "未來"
just_now: "剛剛"
drive: "雲端硬碟"
weekday:
sunday: "週日"
monday: "週一"
tuesday: "週二"
wednesday: "週三"
thursday: "週四"
friday: "週五"
saturday: "週六"
reactions:
like: "贊"
love: "喜歡"
congrats: "恭喜"
_settings:
password: "密碼"
font-size: "字體大小"
font-size-x-small: "小"
font-size-small: "較小"
deck-column-width-wide: "寬"
timeline: "時間軸"
common/views/components/connect-failed.troubleshooter.vue:
flush: "清除快取"
common/views/components/theme.vue:
light-themes: "淺色主題"
dark-themes: "深色主題"
install-a-theme: "安裝主題"
save-created-theme: "保存主題"
common/views/components/signin.vue:
signin-with-twitter: "用 Twitter 帳號登入"
signin-with-github: "用 GitHub 帳號登入"
signin-with-discord: "用 Discord 帳號登入"
login-failed: "登錄失敗。 請檢查用戶名和密碼。"
common/views/components/signup.vue:
invitation-code: "邀請碼"
username: "用戶名"
available: "可用"
too-long: "請不要超過20個字元"
password: "密碼"
password-placeholder: "建議至少8個字元"
common/views/components/stream-indicator.vue:
connecting: "正在連線"
reconnecting: "正在重新連線"
connected: "已建立連線"
common/views/components/integration-settings.vue:
disconnect: "中斷連線"
common/views/components/github-setting.vue:
reconnect: "重新連線"
disconnect: "中斷連線"
common/views/components/discord-setting.vue:
reconnect: "重新連線"
disconnect: "中斷連線"
common/views/components/language-settings.vue:
recommended: "推薦"
auto: "自動"
specify-language: "指定語言"
common/views/components/profile-editor.vue:
title: "個人資料"
name: "名稱"
birthday: "生日:"
privacy: "隱私"
admin/views/dashboard.vue:
drive: "雲端硬碟"
admin/views/charts.vue:
drive: "雲端硬碟"

View File

@ -1,8 +1,7 @@
{
"name": "misskey",
"author": "syuilo <i@syuilo.com>",
"version": "10.83.0",
"clientVersion": "2.0.14211",
"version": "10.93.0",
"codename": "nighthike",
"repository": {
"type": "git",
@ -23,19 +22,17 @@
"test": "gulp test",
"format": "gulp format"
},
"resolutions": {
"terser": "3.14.1"
},
"dependencies": {
"@fortawesome/fontawesome-svg-core": "1.2.14",
"@fortawesome/free-brands-svg-icons": "5.7.1",
"@fortawesome/free-regular-svg-icons": "5.7.0",
"@fortawesome/free-solid-svg-icons": "5.6.3",
"@fortawesome/fontawesome-svg-core": "1.2.15",
"@fortawesome/free-brands-svg-icons": "5.7.2",
"@fortawesome/free-regular-svg-icons": "5.7.2",
"@fortawesome/free-solid-svg-icons": "5.7.2",
"@fortawesome/vue-fontawesome": "0.1.5",
"@koa/cors": "2.2.3",
"@prezzemolo/rap": "0.1.2",
"@prezzemolo/zip": "0.0.3",
"@types/bcryptjs": "2.4.2",
"@types/bull": "3.5.8",
"@types/chai-http": "3.0.5",
"@types/dateformat": "3.0.0",
"@types/deep-equal": "1.0.1",
@ -52,8 +49,8 @@
"@types/is-svg": "3.0.0",
"@types/is-url": "1.2.28",
"@types/js-yaml": "3.12.0",
"@types/jsdom": "12.2.1",
"@types/katex": "0.5.0",
"@types/jsdom": "12.2.3",
"@types/katex": "0.10.1",
"@types/koa": "2.0.48",
"@types/koa-bodyparser": "5.0.2",
"@types/koa-compress": "2.0.8",
@ -62,16 +59,16 @@
"@types/koa-logger": "3.1.1",
"@types/koa-mount": "3.0.1",
"@types/koa-multer": "1.0.0",
"@types/koa-router": "7.0.39",
"@types/koa-router": "7.0.40",
"@types/koa-send": "4.1.1",
"@types/koa-views": "2.0.3",
"@types/koa__cors": "2.2.3",
"@types/minio": "7.0.1",
"@types/mkdirp": "0.5.2",
"@types/mocha": "5.2.5",
"@types/mongodb": "3.1.19",
"@types/node": "10.12.21",
"@types/nodemailer": "4.6.5",
"@types/mongodb": "3.1.20",
"@types/node": "11.10.4",
"@types/nodemailer": "4.6.6",
"@types/nprogress": "0.0.29",
"@types/oauth": "0.9.1",
"@types/parse5": "5.0.0",
@ -86,9 +83,9 @@
"@types/request-stats": "3.0.0",
"@types/rimraf": "2.0.2",
"@types/seedrandom": "2.4.27",
"@types/sharp": "0.21.1",
"@types/sharp": "0.21.2",
"@types/showdown": "1.9.2",
"@types/speakeasy": "2.0.3",
"@types/speakeasy": "2.0.4",
"@types/systeminformation": "3.23.1",
"@types/tinycolor2": "1.4.1",
"@types/tmp": "0.0.33",
@ -99,21 +96,21 @@
"@types/websocket": "0.0.40",
"@types/ws": "6.0.1",
"animejs": "3.0.1",
"apexcharts": "3.2.2",
"apexcharts": "3.5.0",
"autobind-decorator": "2.4.0",
"autosize": "4.0.2",
"autwh": "0.1.0",
"bcryptjs": "2.4.3",
"bee-queue": "1.2.2",
"bootstrap-vue": "2.0.0-rc.11",
"cafy": "12.1.0",
"bootstrap-vue": "2.0.0-rc.13",
"bull": "3.7.0",
"cafy": "15.1.0",
"chai": "4.2.0",
"chai-http": "4.2.1",
"chalk": "2.4.2",
"commander": "2.19.0",
"crc-32": "1.2.0",
"css-loader": "2.1.0",
"cssnano": "4.1.8",
"cssnano": "4.1.10",
"dateformat": "3.0.3",
"deep-equal": "1.0.1",
"deepcopy": "0.6.3",
@ -122,11 +119,11 @@
"elasticsearch": "15.3.1",
"emojilib": "2.4.0",
"escape-regexp": "0.0.1",
"eslint": "5.12.0",
"eslint-plugin-vue": "5.1.0",
"eslint": "5.15.0",
"eslint-plugin-vue": "5.2.2",
"eventemitter3": "3.1.0",
"feed": "2.0.2",
"file-type": "10.7.1",
"file-type": "10.9.0",
"fuckadblock": "3.2.1",
"gulp": "4.0.0",
"gulp-cssnano": "2.1.3",
@ -140,18 +137,17 @@
"gulp-typescript": "5.0.0",
"gulp-uglify": "3.0.1",
"gulp-util": "3.0.8",
"gulp-yaml": "2.0.3",
"hard-source-webpack-plugin": "0.13.1",
"html-minifier": "3.5.21",
"http-signature": "1.2.0",
"insert-text-at-cursor": "0.1.1",
"insert-text-at-cursor": "0.1.2",
"is-root": "2.0.0",
"is-svg": "3.0.0",
"js-yaml": "3.12.1",
"jsdom": "13.2.0",
"json5": "2.1.0",
"json5-loader": "1.0.1",
"katex": "0.10.0",
"katex": "0.10.1",
"koa": "2.7.0",
"koa-bodyparser": "4.2.1",
"koa-compress": "3.0.0",
@ -180,7 +176,6 @@
"nodemailer": "5.1.1",
"nprogress": "0.2.0",
"object-assign-deep": "0.4.0",
"on-build-webpack": "0.1.0",
"os-utils": "0.0.14",
"parse5": "5.1.0",
"parsimmon": "1.12.0",
@ -215,47 +210,49 @@
"stylus": "0.54.5",
"stylus-loader": "3.0.2",
"summaly": "2.2.0",
"systeminformation": "3.54.0",
"systeminformation": "4.0.14",
"syuilo-password-strength": "0.0.1",
"terser-webpack-plugin": "1.2.2",
"terser-webpack-plugin": "1.2.3",
"textarea-caret": "3.1.0",
"tinycolor2": "1.4.1",
"tmp": "0.0.33",
"ts-loader": "5.3.3",
"ts-node": "7.0.1",
"tslint": "5.12.1",
"ts-node": "8.0.2",
"tslint": "5.13.1",
"tslint-sonarts": "1.9.0",
"typescript": "3.2.4",
"typescript-eslint-parser": "21.0.2",
"typescript": "3.3.3333",
"typescript-eslint-parser": "22.0.0",
"uglify-es": "3.3.9",
"url-loader": "1.1.2",
"uuid": "3.3.2",
"v-animate-css": "0.0.3",
"v-debounce": "0.1.2",
"video-thumbnail-generator": "1.1.3",
"vue": "2.6.3",
"vue": "2.6.8",
"vue-color": "2.7.0",
"vue-content-loading": "1.5.3",
"vue-cropperjs": "3.0.0",
"vue-i18n": "8.8.0",
"vue-i18n": "8.8.2",
"vue-js-modal": "1.3.28",
"vue-loader": "15.6.2",
"vue-json-pretty": "1.4.1",
"vue-loader": "15.7.0",
"vue-marquee-text-component": "1.1.1",
"vue-prism-component": "1.1.1",
"vue-router": "3.0.2",
"vue-sequential-entrance": "1.1.3",
"vue-style-loader": "4.1.2",
"vue-svg-inline-loader": "1.2.10",
"vue-template-compiler": "2.6.3",
"vuedraggable": "2.17.0",
"vue-svg-inline-loader": "1.2.12",
"vue-template-compiler": "2.6.8",
"vuedraggable": "2.18.1",
"vuewordcloud": "18.7.11",
"vuex": "3.1.0",
"vuex-persistedstate": "2.5.4",
"web-push": "3.3.3",
"webfinger.js": "2.7.0",
"webpack": "4.28.4",
"webpack-cli": "3.2.1",
"webpack-cli": "3.2.3",
"websocket": "1.0.28",
"ws": "6.1.3",
"ws": "6.1.4",
"xev": "2.0.1"
}
}

View File

@ -26,14 +26,14 @@ declare module 'webfinger.js' {
}
interface IIDXLinks {
'avatar': IJRDLink[];
'remotestorage': IJRDLink[];
'blog': IJRDLink[];
'vcard': IJRDLink[];
'updates': IJRDLink[];
'share': IJRDLink[];
'profile': IJRDLink[];
'webfist': IJRDLink[];
'avatar': IJRDLink[];
'remotestorage': IJRDLink[];
'blog': IJRDLink[];
'vcard': IJRDLink[];
'updates': IJRDLink[];
'share': IJRDLink[];
'profile': IJRDLink[];
'webfist': IJRDLink[];
'camlistore': IJRDLink[];
[type: string]: IJRDLink[];
}

View File

@ -5,9 +5,8 @@ program
.version(pkg.version)
.option('--no-daemons', 'Disable daemon processes (for debbuging)')
.option('--disable-clustering', 'Disable clustering')
.option('--disable-ap-queue', 'Disable creating job queue related to ap')
.option('--disable-queue', 'Disable job queue processing')
.option('--only-queue', 'Pocessing job queue only')
.option('--only-server', 'Run server only (without job queue processing)')
.option('--only-queue', 'Pocessing job queue only (without server)')
.option('--quiet', 'Suppress all logs')
.option('--verbose', 'Enable all logs')
.option('--with-log-time', 'Include timestamp for each logs')
@ -15,8 +14,6 @@ program
.option('--color', 'This option is a dummy for some external program\'s (e.g. forever) issue.')
.parse(process.argv);
/*if (process.env.MK_DISABLE_AP_QUEUE)*/ program.disableApQueue = true;
if (process.env.MK_DISABLE_QUEUE) program.disableQueue = true;
if (process.env.MK_ONLY_QUEUE) program.onlyQueue = true;
export { program };

View File

@ -1,7 +1,7 @@
<template>
<div>
<ui-card>
<div slot="title"><fa :icon="faExclamationCircle"/> {{ $t('title') }}</div>
<template #title><fa :icon="faExclamationCircle"/> {{ $t('title') }}</template>
<section class="fit-top">
<sequential-entrance animation="entranceFromTop" delay="25">
<div v-for="report in userReports" :key="report.id" class="haexwsjc">

View File

@ -1,7 +1,7 @@
<template>
<div>
<ui-card>
<div slot="title"><fa icon="broadcast-tower"/> {{ $t('announcements') }}</div>
<template #title><fa icon="broadcast-tower"/> {{ $t('announcements') }}</template>
<section v-for="(announcement, i) in announcements" class="fit-top">
<ui-input v-model="announcement.title" @change="save">
<span>{{ $t('title') }}</span>
@ -35,7 +35,7 @@ export default Vue.extend({
created() {
this.$root.getMeta().then(meta => {
this.announcements = meta.broadcasts;
this.announcements = meta.announcements;
});
},
@ -65,7 +65,7 @@ export default Vue.extend({
save(silent) {
this.$root.api('admin/update-meta', {
broadcasts: this.announcements
announcements: this.announcements
}).then(() => {
if (!silent) {
this.$root.dialog({

View File

@ -1,7 +1,7 @@
<template>
<div>
<ui-card>
<div slot="title"><fa :icon="faTerminal"/> {{ $t('operation') }}</div>
<template #title><fa :icon="faTerminal"/> {{ $t('operation') }}</template>
<section class="fit-top">
<ui-input v-model="target" type="text">
<span>{{ $t('fileid-or-url') }}</span>
@ -17,18 +17,18 @@
</ui-card>
<ui-card>
<div slot="title"><fa :icon="faCloud"/> {{ $t('@.drive') }}</div>
<template #title><fa :icon="faCloud"/> {{ $t('@.drive') }}</template>
<section class="fit-top">
<ui-horizon-group inputs>
<ui-select v-model="sort">
<span slot="label">{{ $t('sort.title') }}</span>
<template #label>{{ $t('sort.title') }}</template>
<option value="-createdAt">{{ $t('sort.createdAtAsc') }}</option>
<option value="+createdAt">{{ $t('sort.createdAtDesc') }}</option>
<option value="-size">{{ $t('sort.sizeAsc') }}</option>
<option value="+size">{{ $t('sort.sizeDesc') }}</option>
</ui-select>
<ui-select v-model="origin">
<span slot="label">{{ $t('origin.title') }}</span>
<template #label>{{ $t('origin.title') }}</template>
<option value="combined">{{ $t('origin.combined') }}</option>
<option value="local">{{ $t('origin.local') }}</option>
<option value="remote">{{ $t('origin.remote') }}</option>

View File

@ -1,20 +1,20 @@
<template>
<div>
<ui-card>
<div slot="title"><fa icon="plus"/> {{ $t('add-emoji.title') }}</div>
<template #title><fa icon="plus"/> {{ $t('add-emoji.title') }}</template>
<section class="fit-top">
<ui-horizon-group inputs>
<ui-input v-model="name">
<span>{{ $t('add-emoji.name') }}</span>
<span slot="desc">{{ $t('add-emoji.name-desc') }}</span>
<template #desc>{{ $t('add-emoji.name-desc') }}</template>
</ui-input>
<ui-input v-model="aliases">
<span>{{ $t('add-emoji.aliases') }}</span>
<span slot="desc">{{ $t('add-emoji.aliases-desc') }}</span>
<template #desc>{{ $t('add-emoji.aliases-desc') }}</template>
</ui-input>
</ui-horizon-group>
<ui-input v-model="url">
<i slot="icon"><fa icon="link"/></i>
<template #icon><fa icon="link"/></template>
<span>{{ $t('add-emoji.url') }}</span>
</ui-input>
<ui-info>{{ $t('add-emoji.info') }}</ui-info>
@ -23,7 +23,7 @@
</ui-card>
<ui-card>
<div slot="title"><fa :icon="faGrin"/> {{ $t('emojis.title') }}</div>
<template #title><fa :icon="faGrin"/> {{ $t('emojis.title') }}</template>
<section v-for="emoji in emojis" class="oryfrbft">
<div>
<img :src="emoji.url" :alt="emoji.name" style="width: 64px;"/>
@ -38,7 +38,7 @@
</ui-input>
</ui-horizon-group>
<ui-input v-model="emoji.url">
<i slot="icon"><fa icon="link"/></i>
<template #icon><fa icon="link"/></template>
<span>{{ $t('add-emoji.url') }}</span>
</ui-input>
<ui-horizon-group class="fit-bottom">

View File

@ -1,12 +1,12 @@
<template>
<div>
<ui-card>
<div slot="title"><fa :icon="faTerminal"/> {{ $t('federation') }}</div>
<template #title><fa :icon="faTerminal"/> {{ $t('federation') }}</template>
<section class="fit-top">
<ui-input class="target" v-model="target" type="text" @enter="showInstance">
<ui-input class="target" v-model="target" type="text" @enter="showInstance()">
<span>{{ $t('host') }}</span>
</ui-input>
<ui-button @click="showInstance"><fa :icon="faSearch"/> {{ $t('lookup') }}</ui-button>
<ui-button @click="showInstance()"><fa :icon="faSearch"/> {{ $t('lookup') }}</ui-button>
<div class="instance" v-if="instance">
<ui-input :value="instance.host" type="text" readonly>
@ -40,6 +40,7 @@
<span>{{ $t('latest-request-received-at') }}</span>
</ui-input>
<ui-switch v-model="instance.isBlocked" @change="updateInstance()">{{ $t('block') }}</ui-switch>
<ui-switch v-model="instance.isMarkedAsClosed" @change="updateInstance()">{{ $t('marked-as-closed') }}</ui-switch>
<details>
<summary>{{ $t('charts') }}</summary>
<ui-horizon-group inputs>
@ -73,13 +74,15 @@
</ui-card>
<ui-card>
<div slot="title"><fa :icon="faServer"/> {{ $t('instances') }}</div>
<template #title><fa :icon="faServer"/> {{ $t('instances') }}</template>
<section class="fit-top">
<ui-horizon-group inputs>
<ui-select v-model="sort">
<span slot="label">{{ $t('sort') }}</span>
<template #label>{{ $t('sort') }}</template>
<option value="-caughtAt">{{ $t('sorts.caughtAtAsc') }}</option>
<option value="+caughtAt">{{ $t('sorts.caughtAtDesc') }}</option>
<option value="-lastCommunicatedAt">{{ $t('sorts.lastCommunicatedAtAsc') }}</option>
<option value="+lastCommunicatedAt">{{ $t('sorts.lastCommunicatedAtDesc') }}</option>
<option value="-notes">{{ $t('sorts.notesAsc') }}</option>
<option value="+notes">{{ $t('sorts.notesDesc') }}</option>
<option value="-users">{{ $t('sorts.usersAsc') }}</option>
@ -94,9 +97,11 @@
<option value="+driveFiles">{{ $t('sorts.driveFilesDesc') }}</option>
</ui-select>
<ui-select v-model="state">
<span slot="label">{{ $t('state') }}</span>
<template #label>{{ $t('state') }}</template>
<option value="all">{{ $t('states.all') }}</option>
<option value="blocked">{{ $t('states.blocked') }}</option>
<option value="notResponding">{{ $t('states.not-responding') }}</option>
<option value="markedAsClosed">{{ $t('states.marked-as-closed') }}</option>
</ui-select>
</ui-horizon-group>
@ -109,8 +114,8 @@
<span>{{ $t('followers') }}</span>
<span>{{ $t('status') }}</span>
</header>
<div v-for="instance in instances">
<span>{{ instance.host }}</span>
<div v-for="instance in instances" :style="{ opacity: instance.isNotResponding ? 0.5 : 1 }">
<a @click.prevent="showInstance(instance.host)" target="_blank" :href="`https://${instance.host}`" :style="{ textDecoration: instance.isMarkedAsClosed ? 'line-through' : 'none' }">{{ instance.host }}</a>
<span>{{ instance.notesCount | number }}</span>
<span>{{ instance.usersCount | number }}</span>
<span>{{ instance.followingCount | number }}</span>
@ -143,7 +148,7 @@ export default Vue.extend({
return {
instance: null,
target: null,
sort: '+caughtAt',
sort: '+lastCommunicatedAt',
state: 'all',
limit: 50,
instances: [],
@ -228,9 +233,9 @@ export default Vue.extend({
},
methods: {
showInstance() {
showInstance(target?: string) {
this.$root.api('federation/show-instance', {
host: this.target
host: target || this.target
}).then(instance => {
if (instance == null) {
this.$root.dialog({
@ -247,7 +252,9 @@ export default Vue.extend({
fetchInstances() {
this.instances = [];
this.$root.api('federation/instances', {
state: this.state,
blocked: this.state === 'blocked' ? true : null,
notResponding: this.state === 'notResponding' ? true : null,
markedAsClosed: this.state === 'markedAsClosed' ? true : null,
sort: this.sort,
limit: this.limit
}).then(instances => {
@ -269,7 +276,8 @@ export default Vue.extend({
updateInstance() {
this.$root.api('admin/federation/update-instance', {
host: this.instance.host,
isBlocked: this.instance.isBlocked,
isBlocked: this.instance.isBlocked || false,
isClosed: this.instance.isMarkedAsClosed || false
});
},
@ -309,6 +317,9 @@ export default Vue.extend({
curve: 'straight',
width: 2
},
tooltip: {
theme: this.$store.state.device.darkmode ? 'dark' : 'light'
},
legend: {
labels: {
colors: tinycolor(getComputedStyle(document.documentElement).getPropertyValue('--text')).toRgbString()

View File

@ -1,7 +1,7 @@
<template>
<div>
<ui-card>
<div slot="title">{{ $t('hided-tags') }}</div>
<template #title>{{ $t('hided-tags') }}</template>
<section>
<textarea class="jdnqwkzlnxcfftthoybjxrebyolvoucw" v-model="hidedTags"></textarea>
<ui-button @click="save">{{ $t('save') }}</ui-button>

View File

@ -21,6 +21,7 @@
<li @click="nav('dashboard')" :class="{ active: page == 'dashboard' }"><fa icon="home" fixed-width/>{{ $t('dashboard') }}</li>
<li @click="nav('instance')" :class="{ active: page == 'instance' }"><fa icon="cog" fixed-width/>{{ $t('instance') }}</li>
<li @click="nav('queue')" :class="{ active: page == 'queue' }"><fa :icon="faTasks" fixed-width/>{{ $t('queue') }}</li>
<li @click="nav('logs')" :class="{ active: page == 'logs' }"><fa :icon="faStream" fixed-width/>{{ $t('logs') }}</li>
<li @click="nav('moderators')" :class="{ active: page == 'moderators' }"><fa :icon="faHeadset" fixed-width/>{{ $t('moderators') }}</li>
<li @click="nav('users')" :class="{ active: page == 'users' }"><fa icon="users" fixed-width/>{{ $t('users') }}</li>
<li @click="nav('drive')" :class="{ active: page == 'drive' }"><fa icon="cloud" fixed-width/>{{ $t('@.drive') }}</li>
@ -42,6 +43,7 @@
<div v-if="page == 'dashboard'"><x-dashboard/></div>
<div v-if="page == 'instance'"><x-instance/></div>
<div v-if="page == 'queue'"><x-queue/></div>
<div v-if="page == 'logs'"><x-logs/></div>
<div v-if="page == 'moderators'"><x-moderators/></div>
<div v-if="page == 'users'"><x-users/></div>
<div v-if="page == 'emoji'"><x-emoji/></div>
@ -62,6 +64,7 @@ import { version } from '../../config';
import XDashboard from "./dashboard.vue";
import XInstance from "./instance.vue";
import XQueue from "./queue.vue";
import XLogs from "./logs.vue";
import XModerators from "./moderators.vue";
import XEmoji from "./emoji.vue";
import XAnnouncements from "./announcements.vue";
@ -71,7 +74,7 @@ import XDrive from "./drive.vue";
import XAbuse from "./abuse.vue";
import XFederation from "./federation.vue";
import { faHeadset, faArrowLeft, faGlobe, faExclamationCircle, faTasks } from '@fortawesome/free-solid-svg-icons';
import { faHeadset, faArrowLeft, faGlobe, faExclamationCircle, faTasks, faStream } from '@fortawesome/free-solid-svg-icons';
import { faGrin } from '@fortawesome/free-regular-svg-icons';
// Detect the user agent
@ -84,6 +87,7 @@ export default Vue.extend({
XDashboard,
XInstance,
XQueue,
XLogs,
XModerators,
XEmoji,
XAnnouncements,
@ -107,7 +111,8 @@ export default Vue.extend({
faHeadset,
faGlobe,
faExclamationCircle,
faTasks
faTasks,
faStream
};
},
methods: {

View File

@ -1,20 +1,20 @@
<template>
<div>
<ui-card>
<div slot="title"><fa icon="cog"/> {{ $t('instance') }}</div>
<template #title><fa icon="cog"/> {{ $t('instance') }}</template>
<section class="fit-top fit-bottom">
<ui-input :value="host" readonly>{{ $t('host') }}</ui-input>
<ui-input v-model="name">{{ $t('instance-name') }}</ui-input>
<ui-textarea v-model="description">{{ $t('instance-description') }}</ui-textarea>
<ui-input v-model="mascotImageUrl"><i slot="icon"><fa icon="link"/></i>{{ $t('logo-url') }}</ui-input>
<ui-input v-model="bannerUrl"><i slot="icon"><fa icon="link"/></i>{{ $t('banner-url') }}</ui-input>
<ui-input v-model="errorImageUrl"><i slot="icon"><fa icon="link"/></i>{{ $t('error-image-url') }}</ui-input>
<ui-input v-model="languages"><i slot="icon"><fa icon="language"/></i>{{ $t('languages') }}<span slot="desc">{{ $t('languages-desc') }}</span></ui-input>
<ui-input v-model="mascotImageUrl"><template #icon><fa icon="link"/></template>{{ $t('logo-url') }}</ui-input>
<ui-input v-model="bannerUrl"><template #icon><fa icon="link"/></template>{{ $t('banner-url') }}</ui-input>
<ui-input v-model="errorImageUrl"><template #icon><fa icon="link"/></template>{{ $t('error-image-url') }}</ui-input>
<ui-input v-model="languages"><template #icon><fa icon="language"/></template>{{ $t('languages') }}<template #desc>{{ $t('languages-desc') }}</template></ui-input>
</section>
<section class="fit-bottom">
<header><fa :icon="faHeadset"/> {{ $t('maintainer-config') }}</header>
<ui-input v-model="maintainerName">{{ $t('maintainer-name') }}</ui-input>
<ui-input v-model="maintainerEmail" type="email"><i slot="icon"><fa :icon="farEnvelope"/></i>{{ $t('maintainer-email') }}</ui-input>
<ui-input v-model="maintainerEmail" type="email"><template #icon><fa :icon="farEnvelope"/></template>{{ $t('maintainer-email') }}</ui-input>
</section>
<section class="fit-top fit-bottom">
<ui-input v-model="maxNoteTextLength">{{ $t('max-note-text-length') }}</ui-input>
@ -27,46 +27,47 @@
</section>
<section class="fit-bottom">
<header><fa icon="cloud"/> {{ $t('drive-config') }}</header>
<ui-switch v-model="cacheRemoteFiles">{{ $t('cache-remote-files') }}<span slot="desc">{{ $t('cache-remote-files-desc') }}</span></ui-switch>
<ui-input v-model="localDriveCapacityMb" type="number">{{ $t('local-drive-capacity-mb') }}<span slot="suffix">MB</span><span slot="desc">{{ $t('mb') }}</span></ui-input>
<ui-input v-model="remoteDriveCapacityMb" type="number" :disabled="!cacheRemoteFiles">{{ $t('remote-drive-capacity-mb') }}<span slot="suffix">MB</span><span slot="desc">{{ $t('mb') }}</span></ui-input>
<ui-switch v-model="cacheRemoteFiles">{{ $t('cache-remote-files') }}<template #desc>{{ $t('cache-remote-files-desc') }}</template></ui-switch>
<ui-input v-model="localDriveCapacityMb" type="number">{{ $t('local-drive-capacity-mb') }}<template #suffix>MB</template><template #desc>{{ $t('mb') }}</template></ui-input>
<ui-input v-model="remoteDriveCapacityMb" type="number" :disabled="!cacheRemoteFiles">{{ $t('remote-drive-capacity-mb') }}<template #suffix>MB</template><template #desc>{{ $t('mb') }}</template></ui-input>
</section>
<section class="fit-bottom">
<header><fa :icon="faShieldAlt"/> {{ $t('recaptcha-config') }}</header>
<ui-switch v-model="enableRecaptcha">{{ $t('enable-recaptcha') }}</ui-switch>
<ui-info>{{ $t('recaptcha-info') }}</ui-info>
<ui-horizon-group inputs>
<ui-input v-model="recaptchaSiteKey" :disabled="!enableRecaptcha"><i slot="icon"><fa icon="key"/></i>{{ $t('recaptcha-site-key') }}</ui-input>
<ui-input v-model="recaptchaSecretKey" :disabled="!enableRecaptcha"><i slot="icon"><fa icon="key"/></i>{{ $t('recaptcha-secret-key') }}</ui-input>
<ui-input v-model="recaptchaSiteKey" :disabled="!enableRecaptcha"><template #icon><fa icon="key"/></template>{{ $t('recaptcha-site-key') }}</ui-input>
<ui-input v-model="recaptchaSecretKey" :disabled="!enableRecaptcha"><template #icon><fa icon="key"/></template>{{ $t('recaptcha-secret-key') }}</ui-input>
</ui-horizon-group>
</section>
<section>
<header><fa :icon="faGhost"/> {{ $t('proxy-account-config') }}</header>
<ui-info>{{ $t('proxy-account-info') }}</ui-info>
<ui-input v-model="proxyAccount"><span slot="prefix">@</span>{{ $t('proxy-account-username') }}<span slot="desc">{{ $t('proxy-account-username-desc') }}</span></ui-input>
<ui-input v-model="proxyAccount"><template #prefix>@</template>{{ $t('proxy-account-username') }}<template #desc>{{ $t('proxy-account-username-desc') }}</template></ui-input>
<ui-info warn>{{ $t('proxy-account-warn') }}</ui-info>
</section>
<section>
<header><fa :icon="farEnvelope"/> {{ $t('email-config') }}</header>
<ui-switch v-model="enableEmail">{{ $t('enable-email') }}<span slot="desc">{{ $t('email-config-info') }}</span></ui-switch>
<ui-switch v-model="enableEmail">{{ $t('enable-email') }}<template #desc>{{ $t('email-config-info') }}</template></ui-switch>
<ui-input v-model="email" type="email" :disabled="!enableEmail">{{ $t('email') }}</ui-input>
<ui-horizon-group inputs>
<ui-input v-model="smtpHost" :disabled="!enableEmail">{{ $t('smtp-host') }}</ui-input>
<ui-input v-model="smtpPort" type="number" :disabled="!enableEmail">{{ $t('smtp-port') }}</ui-input>
</ui-horizon-group>
<ui-switch v-model="smtpAuth">{{ $t('smtp-auth') }}</ui-switch>
<ui-horizon-group inputs>
<ui-input v-model="smtpUser" :disabled="!enableEmail">{{ $t('smtp-user') }}</ui-input>
<ui-input v-model="smtpPass" type="password" :withPasswordToggle="true" :disabled="!enableEmail">{{ $t('smtp-pass') }}</ui-input>
<ui-input v-model="smtpUser" :disabled="!enableEmail || !smtpAuth">{{ $t('smtp-user') }}</ui-input>
<ui-input v-model="smtpPass" type="password" :withPasswordToggle="true" :disabled="!enableEmail || !smtpAuth">{{ $t('smtp-pass') }}</ui-input>
</ui-horizon-group>
<ui-switch v-model="smtpSecure" :disabled="!enableEmail">{{ $t('smtp-secure') }}<span slot="desc">{{ $t('smtp-secure-info') }}</span></ui-switch>
<ui-switch v-model="smtpSecure" :disabled="!enableEmail">{{ $t('smtp-secure') }}<template #desc>{{ $t('smtp-secure-info') }}</template></ui-switch>
</section>
<section>
<header><fa :icon="faBolt"/> {{ $t('serviceworker-config') }}</header>
<ui-switch v-model="enableServiceWorker">{{ $t('enable-serviceworker') }}<span slot="desc">{{ $t('serviceworker-info') }}</span></ui-switch>
<ui-switch v-model="enableServiceWorker">{{ $t('enable-serviceworker') }}<template #desc>{{ $t('serviceworker-info') }}</template></ui-switch>
<ui-info>{{ $t('vapid-info') }}<br><code>npm i web-push -g<br>web-push generate-vapid-keys</code></ui-info>
<ui-horizon-group inputs class="fit-bottom">
<ui-input v-model="swPublicKey" :disabled="!enableServiceWorker"><i slot="icon"><fa icon="key"/></i>{{ $t('vapid-publickey') }}</ui-input>
<ui-input v-model="swPrivateKey" :disabled="!enableServiceWorker"><i slot="icon"><fa icon="key"/></i>{{ $t('vapid-privatekey') }}</ui-input>
<ui-input v-model="swPublicKey" :disabled="!enableServiceWorker"><template #icon><fa icon="key"/></template>{{ $t('vapid-publickey') }}</ui-input>
<ui-input v-model="swPrivateKey" :disabled="!enableServiceWorker"><template #icon><fa icon="key"/></template>{{ $t('vapid-privatekey') }}</ui-input>
</ui-horizon-group>
</section>
<section>
@ -76,8 +77,8 @@
<section>
<header><fa :icon="faUserPlus"/> {{ $t('user-recommendation-config') }}</header>
<ui-switch v-model="enableExternalUserRecommendation">{{ $t('enable-external-user-recommendation') }}</ui-switch>
<ui-input v-model="externalUserRecommendationEngine" :disabled="!enableExternalUserRecommendation">{{ $t('external-user-recommendation-engine') }}<span slot="desc">{{ $t('external-user-recommendation-engine-desc') }}</span></ui-input>
<ui-input v-model="externalUserRecommendationTimeout" type="number" :disabled="!enableExternalUserRecommendation">{{ $t('external-user-recommendation-timeout') }}<span slot="suffix">ms</span><span slot="desc">{{ $t('external-user-recommendation-timeout-desc') }}</span></ui-input>
<ui-input v-model="externalUserRecommendationEngine" :disabled="!enableExternalUserRecommendation">{{ $t('external-user-recommendation-engine') }}<template #desc>{{ $t('external-user-recommendation-engine-desc') }}</template></ui-input>
<ui-input v-model="externalUserRecommendationTimeout" type="number" :disabled="!enableExternalUserRecommendation">{{ $t('external-user-recommendation-timeout') }}<template #suffix>ms</template><template #desc>{{ $t('external-user-recommendation-timeout-desc') }}</template></ui-input>
</section>
<section>
<ui-button @click="updateMeta">{{ $t('save') }}</ui-button>
@ -85,7 +86,7 @@
</ui-card>
<ui-card>
<div slot="title">{{ $t('invite') }}</div>
<template #title>{{ $t('invite') }}</template>
<section>
<ui-button @click="invite">{{ $t('invite') }}</ui-button>
<p v-if="inviteCode">Code: <code>{{ inviteCode }}</code></p>
@ -93,12 +94,12 @@
</ui-card>
<ui-card>
<div slot="title"><fa :icon="['fab', 'twitter']"/> {{ $t('twitter-integration-config') }}</div>
<template #title><fa :icon="['fab', 'twitter']"/> {{ $t('twitter-integration-config') }}</template>
<section>
<ui-switch v-model="enableTwitterIntegration">{{ $t('enable-twitter-integration') }}</ui-switch>
<ui-horizon-group>
<ui-input v-model="twitterConsumerKey" :disabled="!enableTwitterIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('twitter-integration-consumer-key') }}</ui-input>
<ui-input v-model="twitterConsumerSecret" :disabled="!enableTwitterIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('twitter-integration-consumer-secret') }}</ui-input>
<ui-input v-model="twitterConsumerKey" :disabled="!enableTwitterIntegration"><template #icon><fa icon="key"/></template>{{ $t('twitter-integration-consumer-key') }}</ui-input>
<ui-input v-model="twitterConsumerSecret" :disabled="!enableTwitterIntegration"><template #icon><fa icon="key"/></template>{{ $t('twitter-integration-consumer-secret') }}</ui-input>
</ui-horizon-group>
<ui-info>{{ $t('twitter-integration-info', { url: `${url}/api/tw/cb` }) }}</ui-info>
<ui-button @click="updateMeta">{{ $t('save') }}</ui-button>
@ -106,12 +107,12 @@
</ui-card>
<ui-card>
<div slot="title"><fa :icon="['fab', 'github']"/> {{ $t('github-integration-config') }}</div>
<template #title><fa :icon="['fab', 'github']"/> {{ $t('github-integration-config') }}</template>
<section>
<ui-switch v-model="enableGithubIntegration">{{ $t('enable-github-integration') }}</ui-switch>
<ui-horizon-group>
<ui-input v-model="githubClientId" :disabled="!enableGithubIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('github-integration-client-id') }}</ui-input>
<ui-input v-model="githubClientSecret" :disabled="!enableGithubIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('github-integration-client-secret') }}</ui-input>
<ui-input v-model="githubClientId" :disabled="!enableGithubIntegration"><template #icon><fa icon="key"/></template>{{ $t('github-integration-client-id') }}</ui-input>
<ui-input v-model="githubClientSecret" :disabled="!enableGithubIntegration"><template #icon><fa icon="key"/></template>{{ $t('github-integration-client-secret') }}</ui-input>
</ui-horizon-group>
<ui-info>{{ $t('github-integration-info', { url: `${url}/api/gh/cb` }) }}</ui-info>
<ui-button @click="updateMeta">{{ $t('save') }}</ui-button>
@ -119,12 +120,12 @@
</ui-card>
<ui-card>
<div slot="title"><fa :icon="['fab', 'discord']"/> {{ $t('discord-integration-config') }}</div>
<template #title><fa :icon="['fab', 'discord']"/> {{ $t('discord-integration-config') }}</template>
<section>
<ui-switch v-model="enableDiscordIntegration">{{ $t('enable-discord-integration') }}</ui-switch>
<ui-horizon-group>
<ui-input v-model="discordClientId" :disabled="!enableDiscordIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('discord-integration-client-id') }}</ui-input>
<ui-input v-model="discordClientSecret" :disabled="!enableDiscordIntegration"><i slot="icon"><fa icon="key"/></i>{{ $t('discord-integration-client-secret') }}</ui-input>
<ui-input v-model="discordClientId" :disabled="!enableDiscordIntegration"><template #icon><fa icon="key"/></template>{{ $t('discord-integration-client-id') }}</ui-input>
<ui-input v-model="discordClientSecret" :disabled="!enableDiscordIntegration"><template #icon><fa icon="key"/></template>{{ $t('discord-integration-client-secret') }}</ui-input>
</ui-horizon-group>
<ui-info>{{ $t('discord-integration-info', { url: `${url}/api/dc/cb` }) }}</ui-info>
<ui-button @click="updateMeta">{{ $t('save') }}</ui-button>
@ -188,6 +189,7 @@ export default Vue.extend({
smtpPort: null,
smtpUser: null,
smtpPass: null,
smtpAuth: false,
enableServiceWorker: false,
swPublicKey: null,
swPrivateKey: null,
@ -236,6 +238,7 @@ export default Vue.extend({
this.smtpPort = meta.smtpPort;
this.smtpUser = meta.smtpUser;
this.smtpPass = meta.smtpPass;
this.smtpAuth = meta.smtpUser != null && meta.smtpUser !== '';
this.enableServiceWorker = meta.enableServiceWorker;
this.swPublicKey = meta.swPublickey;
this.swPrivateKey = meta.swPrivateKey;
@ -293,8 +296,8 @@ export default Vue.extend({
smtpSecure: this.smtpSecure,
smtpHost: this.smtpHost,
smtpPort: parseInt(this.smtpPort, 10),
smtpUser: this.smtpUser,
smtpPass: this.smtpPass,
smtpUser: this.smtpAuth ? this.smtpUser : '',
smtpPass: this.smtpAuth ? this.smtpPass : '',
enableServiceWorker: this.enableServiceWorker,
swPublicKey: this.swPublicKey,
swPrivateKey: this.swPrivateKey

View File

@ -0,0 +1,108 @@
<template>
<div>
<ui-card>
<template #title><fa :icon="faStream"/> {{ $t('logs') }}</template>
<section class="fit-top">
<ui-horizon-group inputs>
<ui-input v-model="domain" debounce>
<span>{{ $t('domain') }}</span>
</ui-input>
<ui-select v-model="level">
<template #label>{{ $t('level') }}</template>
<option value="all">{{ $t('levels.all') }}</option>
<option value="info">{{ $t('levels.info') }}</option>
<option value="success">{{ $t('levels.success') }}</option>
<option value="warning">{{ $t('levels.warning') }}</option>
<option value="error">{{ $t('levels.error') }}</option>
<option value="debug">{{ $t('levels.debug') }}</option>
</ui-select>
</ui-horizon-group>
<div class="nqjzuvev">
<code v-for="log in logs" :key="log._id" :class="log.level">
<details>
<summary><mk-time :time="log.createdAt"/> [{{ log.domain.join('.') }}] {{ log.message }}</summary>
<vue-json-pretty v-if="log.data" :data="log.data"></vue-json-pretty>
</details>
</code>
</div>
</section>
</ui-card>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import i18n from '../../i18n';
import { faStream } from '@fortawesome/free-solid-svg-icons';
import VueJsonPretty from 'vue-json-pretty';
export default Vue.extend({
i18n: i18n('admin/views/logs.vue'),
components: {
VueJsonPretty
},
data() {
return {
logs: [],
level: 'all',
domain: '',
faStream
};
},
watch: {
level() {
this.logs = [];
this.fetch();
},
domain() {
this.logs = [];
this.fetch();
}
},
mounted() {
this.fetch();
},
methods: {
fetch() {
this.$root.api('admin/logs', {
level: this.level === 'all' ? null : this.level,
domain: this.domain === '' ? null : this.domain,
limit: 100
}).then(logs => {
this.logs = logs.reverse();
});
}
}
});
</script>
<style lang="stylus" scoped>
.nqjzuvev
padding 8px
background #000
color #fff
font-size 14px
> code
display block
&.error
color #f00
&.warning
color #ff0
&.success
color #0f0
&.debug
opacity 0.7
</style>

View File

@ -1,10 +1,10 @@
<template>
<div>
<ui-card>
<div slot="title"><fa icon="plus"/> {{ $t('add-moderator.title') }}</div>
<template #title><fa icon="plus"/> {{ $t('add-moderator.title') }}</template>
<section class="fit-top">
<ui-input v-model="username" type="text">
<span slot="prefix">@</span>
<template #prefix>@</template>
</ui-input>
<ui-horizon-group>
<ui-button @click="add" :disabled="changing">{{ $t('add-moderator.add') }}</ui-button>

View File

@ -1,7 +1,37 @@
<template>
<div>
<ui-card>
<div slot="title">{{ $t('operation') }}</div>
<template #title><fa :icon="faTasks"/> {{ $t('title') }}</template>
<section class="wptihjuy">
<header><fa :icon="faPaperPlane"/> Deliver</header>
<ui-horizon-group inputs v-if="latestStats" class="fit-bottom">
<ui-input :value="latestStats.deliver.waiting | number" type="text" readonly>
<span>Waiting</span>
</ui-input>
<ui-input :value="latestStats.deliver.delayed | number" type="text" readonly>
<span>Delayed</span>
</ui-input>
<ui-input :value="latestStats.deliver.active | number" type="text" readonly>
<span>Active</span>
</ui-input>
</ui-horizon-group>
<div ref="deliverChart" class="chart"></div>
</section>
<section class="wptihjuy">
<header><fa :icon="faInbox"/> Inbox</header>
<ui-horizon-group inputs v-if="latestStats" class="fit-bottom">
<ui-input :value="latestStats.inbox.waiting | number" type="text" readonly>
<span>Waiting</span>
</ui-input>
<ui-input :value="latestStats.inbox.delayed | number" type="text" readonly>
<span>Delayed</span>
</ui-input>
<ui-input :value="latestStats.inbox.active | number" type="text" readonly>
<span>Active</span>
</ui-input>
</ui-horizon-group>
<div ref="inboxChart" class="chart"></div>
</section>
<section>
<ui-button @click="removeAllJobs">{{ $t('remove-all-jobs') }}</ui-button>
</section>
@ -12,15 +42,128 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../i18n';
import ApexCharts from 'apexcharts';
import * as tinycolor from 'tinycolor2';
import { faTasks, faInbox } from '@fortawesome/free-solid-svg-icons';
import { faPaperPlane } from '@fortawesome/free-regular-svg-icons';
export default Vue.extend({
i18n: i18n('admin/views/queue.vue'),
data() {
return {
stats: [],
deliverChart: null,
inboxChart: null,
faTasks, faPaperPlane, faInbox
};
},
computed: {
latestStats(): any {
return this.stats[this.stats.length - 1];
}
},
watch: {
stats(stats) {
this.inboxChart.updateSeries([{
name: 'Active',
data: stats.map((x, i) => ({ x: i, y: x.inbox.activeSincePrevTick }))
}, {
name: 'Waiting',
data: stats.map((x, i) => ({ x: i, y: x.inbox.waiting }))
}, {
name: 'Delayed',
data: stats.map((x, i) => ({ x: i, y: x.inbox.delayed }))
}]);
this.deliverChart.updateSeries([{
name: 'Active',
data: stats.map((x, i) => ({ x: i, y: x.deliver.activeSincePrevTick }))
}, {
name: 'Waiting',
data: stats.map((x, i) => ({ x: i, y: x.deliver.waiting }))
}, {
name: 'Delayed',
data: stats.map((x, i) => ({ x: i, y: x.deliver.delayed }))
}]);
}
},
mounted() {
const chartOpts = {
chart: {
type: 'area',
height: 200,
animations: {
dynamicAnimation: {
enabled: false
}
},
toolbar: {
show: false
},
zoom: {
enabled: false
}
},
dataLabels: {
enabled: false
},
grid: {
clipMarkers: false,
borderColor: 'rgba(0, 0, 0, 0.1)'
},
stroke: {
curve: 'straight',
width: 2
},
tooltip: {
enabled: false
},
legend: {
labels: {
colors: tinycolor(getComputedStyle(document.documentElement).getPropertyValue('--text')).toRgbString()
},
},
series: [] as any,
colors: ['#00BCD4', '#FFEB3B', '#e53935'],
xaxis: {
type: 'numeric',
labels: {
show: false
},
tooltip: {
enabled: false
}
},
yaxis: {
show: false,
min: 0,
}
};
this.inboxChart = new ApexCharts(this.$refs.inboxChart, chartOpts);
this.deliverChart = new ApexCharts(this.$refs.deliverChart, chartOpts);
this.inboxChart.render();
this.deliverChart.render();
const connection = this.$root.stream.useSharedConnection('queueStats');
connection.on('stats', this.onStats);
connection.on('statsLog', this.onStatsLog);
connection.send('requestLog', {
id: Math.random().toString().substr(2, 8),
length: 100
});
this.$once('hook:beforeDestroy', () => {
connection.dispose();
this.inboxChart.destroy();
this.deliverChart.destroy();
});
},
methods: {
async removeAllJobs() {
const process = async () => {
@ -38,6 +181,24 @@ export default Vue.extend({
});
});
},
onStats(stats) {
this.stats.push(stats);
if (this.stats.length > 100) this.stats.shift();
},
onStatsLog(statsLog) {
for (const stats of statsLog.reverse()) {
this.onStats(stats);
}
}
}
});
</script>
<style lang="stylus" scoped>
.wptihjuy
> .chart
min-height 200px !important
</style>

View File

@ -1,7 +1,7 @@
<template>
<div>
<ui-card>
<div slot="title"><fa :icon="faTerminal"/> {{ $t('operation') }}</div>
<template #title><fa :icon="faTerminal"/> {{ $t('operation') }}</template>
<section class="fit-top">
<ui-input class="target" v-model="target" type="text" @enter="showUser">
<span>{{ $t('username-or-userid') }}</span>
@ -32,26 +32,27 @@
</ui-card>
<ui-card>
<div slot="title"><fa :icon="faUsers"/> {{ $t('users.title') }}</div>
<template #title><fa :icon="faUsers"/> {{ $t('users.title') }}</template>
<section class="fit-top">
<ui-horizon-group inputs>
<ui-select v-model="sort">
<span slot="label">{{ $t('users.sort.title') }}</span>
<template #label>{{ $t('users.sort.title') }}</template>
<option value="-createdAt">{{ $t('users.sort.createdAtAsc') }}</option>
<option value="+createdAt">{{ $t('users.sort.createdAtDesc') }}</option>
<option value="-updatedAt">{{ $t('users.sort.updatedAtAsc') }}</option>
<option value="+updatedAt">{{ $t('users.sort.updatedAtDesc') }}</option>
</ui-select>
<ui-select v-model="state">
<span slot="label">{{ $t('users.state.title') }}</span>
<template #label>{{ $t('users.state.title') }}</template>
<option value="all">{{ $t('users.state.all') }}</option>
<option value="admin">{{ $t('users.state.admin') }}</option>
<option value="moderator">{{ $t('users.state.moderator') }}</option>
<option value="verified">{{ $t('users.state.verified') }}</option>
<option value="silenced">{{ $t('users.state.silenced') }}</option>
<option value="suspended">{{ $t('users.state.suspended') }}</option>
</ui-select>
<ui-select v-model="origin">
<span slot="label">{{ $t('users.origin.title') }}</span>
<template #label>{{ $t('users.origin.title') }}</template>
<option value="combined">{{ $t('users.origin.combined') }}</option>
<option value="local">{{ $t('users.origin.local') }}</option>
<option value="remote">{{ $t('users.origin.remote') }}</option>
@ -89,7 +90,7 @@ export default Vue.extend({
unsuspending: false,
sort: '+createdAt',
state: 'all',
origin: 'combined',
origin: 'local',
limit: 10,
offset: 0,
users: [],
@ -129,16 +130,25 @@ export default Vue.extend({
const usernamePromise = this.$root.api('users/show', parseAcct(this.target));
const idPromise = this.$root.api('users/show', { userId: this.target });
usernamePromise.then(res);
idPromise.then(res);
idPromise.catch(e => {
if (e == 'user not found') {
let _notFound = false;
const notFound = () => {
if (_notFound) {
this.$root.dialog({
type: 'error',
text: this.$t('user-not-found')
});
} else {
_notFound = true;
}
};
usernamePromise.then(res).catch(e => {
if (e == 'user not found') {
notFound();
}
});
idPromise.then(res).catch(e => {
notFound();
});
});
},
@ -329,7 +339,7 @@ export default Vue.extend({
});
return !confirm.canceled;
}
},
fetchUsers() {
this.$root.api('admin/show-users', {

View File

@ -39,3 +39,9 @@
75% { transform: translateY(-8px); }
100% { transform: translateY(0); }
}
@keyframes blink {
0% { opacity: 1; }
30% { opacity: 1; }
90% { opacity: 0; }
}

View File

@ -108,16 +108,11 @@
app = isMobile ? 'mobile' : 'desktop';
}
// Get salt query
const salt = localStorage.getItem('salt')
? `?salt=${localStorage.getItem('salt')}`
: '';
// Load an app script
// Note: 'async' make it possible to load the script asyncly.
// 'defer' make it possible to run the script when the dom loaded.
const script = document.createElement('script');
script.setAttribute('src', `/assets/${app}.${ver}.js${salt}`);
script.setAttribute('src', `/assets/${app}.${ver}.js`);
script.setAttribute('async', 'true');
script.setAttribute('defer', 'true');
head.appendChild(script);
@ -138,8 +133,8 @@
const meta = await res.json();
// Compare versions
if (meta.clientVersion != ver) {
localStorage.setItem('v', meta.clientVersion);
if (meta.version != ver) {
localStorage.setItem('v', meta.version);
alert(
'Misskeyの新しいバージョンがあります。ページを再度読み込みします。' +
@ -155,9 +150,6 @@
localStorage.removeItem('locale');
// Random
localStorage.setItem('salt', Math.random().toString().substr(2, 8));
// Clear cache (service worker)
try {
navigator.serviceWorker.controller.postMessage('clear');

View File

@ -9,6 +9,10 @@ export default function <T extends object>(data: {
widget: {
type: Object
},
column: {
type: Object,
default: null
},
platform: {
type: String,
required: true
@ -65,10 +69,14 @@ export default function <T extends object>(data: {
this.bakeProps();
this.$root.api('i/update_widget', {
id: this.id,
data: this.props
});
if (this.platform == 'deck') {
this.$store.commit('device/updateDeckColumn', this.column);
} else {
this.$root.api('i/update_widget', {
id: this.id,
data: this.props
});
}
}
}
});

View File

@ -1,8 +1,8 @@
import { clientVersion as current } from '../../config';
import { version as current } from '../../config';
export default async function($root: any, force = false, silent = false) {
const meta = await $root.getMeta(force);
const newer = meta.clientVersion;
const newer = meta.version;
if (newer != current) {
localStorage.setItem('should-refresh', 'true');

View File

@ -15,22 +15,22 @@ export default function(type, data): Notification {
switch (type) {
case 'driveFileCreated':
return {
title: '%i18n:common.notification.file-uploaded%',
title: 'File uploaded',
body: data.name,
icon: data.url
};
case 'unreadMessagingMessage':
return {
title: '%i18n:common.notification.message-from%'.split('{}')[0] + `${getUserName(data.user)}` + '%i18n:common.notification.message-from%'.split('{}')[1] ,
title: `New message from ${getUserName(data.user)}`,
body: data.text, // TODO: getMessagingMessageSummary(data),
icon: data.user.avatarUrl
};
case 'reversiInvited':
return {
title: '%i18n:common.notification.reversi-invited%',
body: '%i18n:common.notification.reversi-invited-by%'.split('{}')[0] + `${getUserName(data.parent)}` + '%i18n:common.notification.reversi-invited-by%'.split('{}')[1],
title: 'Play reversi with me',
body: `You got reversi invitation from ${getUserName(data.parent)}`,
icon: data.parent.avatarUrl
};
@ -38,21 +38,21 @@ export default function(type, data): Notification {
switch (data.type) {
case 'mention':
return {
title: '%i18n:common.notification.notified-by%'.split('{}')[0] + `${getUserName(data.user)}:` + '%i18n:common.notification.notified-by%'.split('{}')[1],
title: `${getUserName(data.user)}:`,
body: getNoteSummary(data),
icon: data.user.avatarUrl
};
case 'reply':
return {
title: '%i18n:common.notification.reply-from%'.split('{}')[0] + `${getUserName(data.user)}` + '%i18n:common.notification.reply-from%'.split('{}')[1],
title: `You got reply from ${getUserName(data.user)}:`,
body: getNoteSummary(data),
icon: data.user.avatarUrl
};
case 'quote':
return {
title: '%i18n:common.notification.quoted-by%'.split('{}')[0] + `${getUserName(data.user)}` + '%i18n:common.notification.quoted-by%'.split('{}')[1],
title: `${getUserName(data.user)}:`,
body: getNoteSummary(data),
icon: data.user.avatarUrl
};

View File

@ -1,9 +1,11 @@
import { url as instanceUrl } from '../../config';
import * as url from '../../../../prelude/url';
export function getStaticImageUrl(url: string): string {
const u = new URL(url);
export function getStaticImageUrl(baseUrl: string): string {
const u = new URL(baseUrl);
const dummy = `${u.host}${u.pathname}`; // 拡張子がないとキャッシュしてくれないCDNがあるので
let result = `${instanceUrl}/proxy/${dummy}?url=${encodeURIComponent(u.href)}`;
result += '&static=1';
return result;
return `${instanceUrl}/proxy/${dummy}?${url.query({
url: u.href,
static: '1'
})}`;
}

View File

@ -1,10 +1,11 @@
export default function(me, settings, note) {
const isMyNote = note.userId == me.id;
const isMyNote = me && (note.userId == me.id);
const isPureRenote = note.renoteId != null && note.text == null && note.fileIds.length == 0 && note.poll == null;
const includesMutedWords = (text: string) =>
text
? settings.mutedWords.some(q => q.length > 0 && !q.some(word => !text.includes(word)))
? settings.mutedWords.some(q => q.length > 0 && !q.some(word =>
word.startsWith('/') && word.endsWith('/') ? !(new RegExp(word.substr(1, word.length - 2)).test(text)) : !text.includes(word)))
: false;
return (

View File

@ -0,0 +1,18 @@
export default {
install(Vue) {
Vue.directive('size', {
inserted(el, binding) {
const query = binding.value;
const width = el.clientWidth;
for (const q of query) {
if (q.lt && (width <= q.lt)) {
el.classList.add(q.class);
}
if (q.gt && (width >= q.gt)) {
el.classList.add(q.class);
}
}
}
});
}
};

View File

@ -1,5 +1,5 @@
<template>
<span class="mk-acct">
<span class="mk-acct" v-once>
<span class="name">@{{ user.username }}</span>
<span class="host" :class="{ fade: $store.state.settings.contrastedAcct }" v-if="user.host || detail || $store.state.settings.showFullAcct">@{{ user.host || host }}</span>
<fa v-if="user.isLocked == true" class="locked" icon="lock" fixed-width/>

View File

@ -1,5 +1,5 @@
<template>
<div class="mk-activity">
<div>
<div ref="chart"></div>
</div>
</template>
@ -9,7 +9,17 @@ import Vue from 'vue';
import ApexCharts from 'apexcharts';
export default Vue.extend({
props: ['user'],
props: {
user: {
type: Object,
required: true
},
limit: {
type: Number,
required: false,
default: 21
}
},
data() {
return {
fetching: true,
@ -21,7 +31,7 @@ export default Vue.extend({
this.$root.api('charts/user/notes', {
userId: this.user.id,
span: 'day',
limit: 21
limit: this.limit
}).then(stats => {
const normal = [];
const reply = [];
@ -32,7 +42,7 @@ export default Vue.extend({
const m = now.getMonth();
const d = now.getDate();
for (let i = 0; i < 21; i++) {
for (let i = 0; i < this.limit; i++) {
const x = new Date(y, m, d - i);
normal.push([
x,
@ -99,10 +109,3 @@ export default Vue.extend({
}
});
</script>
<style lang="stylus" scoped>
.mk-activity
max-width 600px
margin 0 auto
</style>

View File

@ -4,7 +4,7 @@
<li v-for="user in users" @click="complete(type, user)" @keydown="onKeydown" tabindex="-1">
<img class="avatar" :src="user.avatarUrl" alt=""/>
<span class="name">
<mk-user-name :user="user"/>
<mk-user-name :user="user" :key="user.id"/>
</span>
<span class="username">@{{ user | acct }}</span>
</li>

View File

@ -1,14 +1,14 @@
<template>
<span class="mk-avatar" :style="style" :class="{ cat }" :title="user | acct" v-if="disableLink && !disablePreview" v-user-preview="user.id" @click="onClick">
<span class="mk-avatar" :style="style" :class="{ cat }" :title="user | acct" v-if="disableLink && !disablePreview" v-user-preview="user.id" @click="onClick" v-once>
<span class="inner" :style="icon"></span>
</span>
<span class="mk-avatar" :style="style" :class="{ cat }" :title="user | acct" v-else-if="disableLink && disablePreview" @click="onClick">
<span class="mk-avatar" :style="style" :class="{ cat }" :title="user | acct" v-else-if="disableLink && disablePreview" @click="onClick" v-once>
<span class="inner" :style="icon"></span>
</span>
<router-link class="mk-avatar" :style="style" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && !disablePreview" v-user-preview="user.id">
<router-link class="mk-avatar" :style="style" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && !disablePreview" v-user-preview="user.id" v-once>
<span class="inner" :style="icon"></span>
</router-link>
<router-link class="mk-avatar" :style="style" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && disablePreview">
<router-link class="mk-avatar" :style="style" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && disablePreview" v-once>
<span class="inner" :style="icon"></span>
</router-link>
</template>

View File

@ -2,18 +2,23 @@
<div class="felqjxyj" :class="{ splash }">
<div class="bg" ref="bg" @click="onBgClick"></div>
<div class="main" ref="main">
<div class="icon" v-if="!input && !select && !user" :class="type"><fa :icon="icon"/></div>
<header v-if="title" v-html="title"></header>
<div class="body" v-if="text" v-html="text"></div>
<ui-input v-if="input" v-model="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder" @keydown="onInputKeydown"></ui-input>
<ui-input v-if="user" v-model="userInputValue" autofocus @keydown="onInputKeydown"><span slot="prefix">@</span></ui-input>
<ui-select v-if="select" v-model="selectedValue">
<option v-for="item in select.items" :value="item.value">{{ item.text }}</option>
</ui-select>
<ui-horizon-group no-grow class="buttons fit-bottom" v-if="!splash">
<ui-button @click="ok" primary :autofocus="!input && !select && !user">OK</ui-button>
<ui-button @click="cancel" v-if="showCancelButton || input || select || user">Cancel</ui-button>
</ui-horizon-group>
<template v-if="type == 'signin'">
<mk-signin/>
</template>
<template v-else>
<div class="icon" v-if="!input && !select && !user" :class="type"><fa :icon="icon"/></div>
<header v-if="title" v-html="title"></header>
<div class="body" v-if="text" v-html="text"></div>
<ui-input v-if="input" v-model="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder" @keydown="onInputKeydown"></ui-input>
<ui-input v-if="user" v-model="userInputValue" autofocus @keydown="onInputKeydown"><template #prefix>@</template></ui-input>
<ui-select v-if="select" v-model="selectedValue" autofocus>
<option v-for="item in select.items" :value="item.value">{{ item.text }}</option>
</ui-select>
<ui-horizon-group no-grow class="buttons fit-bottom" v-if="!splash">
<ui-button @click="ok" primary :autofocus="!input && !select && !user">{{ (showCancelButton || input || select || user) ? $t('@.ok') : $t('@.got-it') }}</ui-button>
<ui-button @click="cancel" v-if="showCancelButton || input || select || user">{{ $t('@.cancel') }}</ui-button>
</ui-horizon-group>
</template>
</div>
</div>
</template>
@ -23,8 +28,10 @@ import Vue from 'vue';
import anime from 'animejs';
import { faTimesCircle, faQuestionCircle } from '@fortawesome/free-regular-svg-icons';
import parseAcct from "../../../../../misc/acct/parse";
import i18n from '../../../i18n';
export default Vue.extend({
i18n: i18n(),
props: {
type: {
type: String,
@ -128,15 +135,16 @@ export default Vue.extend({
},
close() {
this.$el.style.pointerEvents = 'none';
(this.$refs.bg as any).style.pointerEvents = 'none';
(this.$refs.main as any).style.pointerEvents = 'none';
anime({
targets: this.$refs.bg,
opacity: 0,
duration: 300,
easing: 'linear'
});
(this.$refs.main as any).style.pointerEvents = 'none';
anime({
targets: this.$refs.main,
opacity: 0,

View File

@ -0,0 +1,11 @@
<template>
<div>
<slot></slot>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
export default Vue.extend({
});
</script>

View File

@ -3,32 +3,31 @@
<header>
<button v-for="category in categories"
:title="category.text"
@click="go(category.ref)"
@click="go(category)"
:class="{ active: category.isActive }"
>
<fa :icon="category.icon" fixed-width/>
</button>
</header>
<div class="emojis" ref="emojis" @scroll.passive="onScroll">
<section v-for="category in categories" :ref="category.ref">
<header><fa :icon="category.icon" fixed-width/> {{ category.text }}</header>
<div v-if="category.name">
<button v-for="emoji in Object.entries(lib).filter(([k, v]) => v.category === category.name)"
:title="emoji[0]"
@click="chosen(emoji[1].char)"
>
<mk-emoji :emoji="emoji[1].char"/>
</button>
</div>
<div v-else>
<button v-for="emoji in customEmojis"
:title="emoji.name"
@click="chosen(`:${emoji.name}:`)"
>
<img :src="emoji.url" :alt="emoji.name"/>
</button>
</div>
</section>
<div class="emojis">
<header><fa :icon="categories.find(x => x.isActive).icon" fixed-width/> {{ categories.find(x => x.isActive).text }}</header>
<div v-if="categories.find(x => x.isActive).name">
<button v-for="emoji in Object.entries(lib).filter(([k, v]) => v.category === categories.find(x => x.isActive).name)"
:title="emoji[0]"
@click="chosen(emoji[1].char)"
:key="emoji[0]"
>
<mk-emoji :emoji="emoji[1].char"/>
</button>
</div>
<div v-else>
<button v-for="emoji in customEmojis"
:title="emoji.name"
@click="chosen(`:${emoji.name}:`)"
>
<img :src="emoji.url" :alt="emoji.name"/>
</button>
</div>
</div>
</div>
</template>
@ -48,55 +47,46 @@ export default Vue.extend({
lib,
customEmojis: [],
categories: [{
ref: 'customEmojiSection',
text: this.$t('custom-emoji'),
icon: faAsterisk,
isActive: true
}, {
name: 'people',
ref: 'peopleSection',
text: this.$t('people'),
icon: ['far', 'laugh'],
isActive: false
}, {
name: 'animals_and_nature',
ref: 'animalsAndNatureSection',
text: this.$t('animals-and-nature'),
icon: faLeaf,
isActive: false
}, {
name: 'food_and_drink',
ref: 'foodAndDrinkSection',
text: this.$t('food-and-drink'),
icon: faUtensils,
isActive: false
}, {
name: 'activity',
ref: 'activitySection',
text: this.$t('activity'),
icon: faFutbol,
isActive: false
}, {
name: 'travel_and_places',
ref: 'travelAndPlacesSection',
text: this.$t('travel-and-places'),
icon: faCity,
isActive: false
}, {
name: 'objects',
ref: 'objectsSection',
text: this.$t('objects'),
icon: faDice,
isActive: false
}, {
name: 'symbols',
ref: 'symbolsSection',
text: this.$t('symbols'),
icon: faHeart,
isActive: false
}, {
name: 'flags',
ref: 'flagsSection',
text: this.$t('flags'),
icon: faFlag,
isActive: false
@ -109,15 +99,9 @@ export default Vue.extend({
},
methods: {
go(ref) {
this.$refs.emojis.scrollTop = this.$refs[ref][0].offsetTop;
},
onScroll(e) {
for (const x of this.categories) {
const top = e.target.scrollTop;
const el = this.$refs[x.ref][0];
x.isActive = el.offsetTop <= top && el.offsetTop + el.offsetHeight > top;
go(category) {
for (const c of this.categories) {
c.isActive = c.name === category.name;
}
},
@ -156,47 +140,46 @@ export default Vue.extend({
overflow-y auto
overflow-x hidden
> section
> header
position sticky
top 0
left 0
z-index 1
padding 8px
background var(--faceHeader)
color var(--text)
font-size 12px
> header
position sticky
top 0
left 0
z-index 1
padding 8px
background var(--faceHeader)
color var(--text)
font-size 12px
> div
display grid
grid-template-columns 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr
gap 4px
padding 8px
> div
display grid
grid-template-columns 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr
gap 4px
padding 8px
> button
padding 0
width 100%
> button
padding 0
width 100%
&:before
content ''
display block
width 1px
height 0
padding-bottom 100%
&:hover
> *
transform scale(1.2)
transition transform 0s
&:before
content ''
display block
width 1px
height 0
padding-bottom 100%
&:hover
> *
position absolute
top 0
left 0
width 100%
height 100%
font-size 28px
transition transform 0.2s ease
pointer-events none
transform scale(1.2)
transition transform 0s
> *
position absolute
top 0
left 0
width 100%
height 100%
font-size 28px
transition transform 0.2s ease
pointer-events none
</style>

View File

@ -1,8 +1,9 @@
<template>
<button class="wfliddvnhxvyusikowhxozkyxyenqxqr"
:class="{ wait, block, mini, active: isFollowing || hasPendingFollowRequestFromYou }"
:class="{ wait, block, inline, mini, transparent, active: isFollowing || hasPendingFollowRequestFromYou }"
@click="onClick"
:disabled="wait"
:inline="inline"
>
<template v-if="!wait">
<fa :icon="iconAndText[0]"/> <template v-if="!mini">{{ iconAndText[1] }}</template>
@ -28,11 +29,21 @@ export default Vue.extend({
required: false,
default: false
},
inline: {
type: Boolean,
required: false,
default: false
},
mini: {
type: Boolean,
required: false,
default: false
}
},
transparent: {
type: Boolean,
required: false,
default: true
},
},
data() {
@ -128,6 +139,12 @@ export default Vue.extend({
border solid 1px var(--primary)
border-radius 36px
&:not(.transparent)
background #fff
&.inline
display inline-block
&.mini
padding 0
min-width 0

View File

@ -1,5 +1,5 @@
<template>
<a class="a" href="https://github.com/syuilo/misskey" target="_blank" title="View source on GitHub">
<a class="a" :href="repo" target="_blank" title="View source on GitHub">
<svg width="80" height="80" viewBox="0 0 250 250" aria-hidden="aria-hidden">
<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>
<path class="octo-arm" d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor"></path>
@ -8,9 +8,25 @@
</a>
</template>
<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
data() {
return {
repositoryUrl: 'https://github.com/syuilo/misskey'
};
},
created() {
this.$root.getMeta().then(meta => {
if (meta.maintainer)
this.repositoryUrl = meta.maintainer.repository_url;
});
}
});
</script>
<style lang="stylus" scoped>
.a
display block

View File

@ -5,17 +5,17 @@
<div style="overflow: hidden; line-height: 28px;">
<p class="turn" v-if="!iAmPlayer && !game.isEnded">
<mfm :text="$t('@.reversi.turn-of', { name: $options.filters.userName(turnUser) })" :should-break="false" :plain-text="true" :custom-emojis="turnUser.emojis"/>
<mfm :key="'turn:' + $options.filters.userName(turnUser)" :text="$t('@.reversi.turn-of', { name: $options.filters.userName(turnUser) })" :should-break="false" :plain-text="true" :custom-emojis="turnUser.emojis"/>
<mk-ellipsis/>
</p>
<p class="turn" v-if="logPos != logs.length">
<mfm :text="$t('@.reversi.past-turn-of', { name: $options.filters.userName(turnUser) })" :should-break="false" :plain-text="true" :custom-emojis="turnUser.emojis"/>
<mfm :key="'past-turn-of:' + $options.filters.userName(turnUser)" :text="$t('@.reversi.past-turn-of', { name: $options.filters.userName(turnUser) })" :should-break="false" :plain-text="true" :custom-emojis="turnUser.emojis"/>
</p>
<p class="turn1" v-if="iAmPlayer && !game.isEnded && !isMyTurn">{{ $t('@.reversi.opponent-turn') }}<mk-ellipsis/></p>
<p class="turn2" v-if="iAmPlayer && !game.isEnded && isMyTurn" v-animate-css="{ classes: 'tada', iteration: 'infinite' }">{{ $t('@.reversi.my-turn') }}</p>
<p class="result" v-if="game.isEnded && logPos == logs.length">
<template v-if="game.winner">
<mfm :text="$t('@.reversi.won', { name: $options.filters.userName(game.winner) })" :should-break="false" :plain-text="true" :custom-emojis="game.winner.emojis"/>
<mfm :key="'won'" :text="$t('@.reversi.won', { name: $options.filters.userName(game.winner) })" :should-break="false" :plain-text="true" :custom-emojis="game.winner.emojis"/>
<span v-if="game.surrendered != null"> ({{ $t('surrendered') }})</span>
</template>
<template v-else>{{ $t('@.reversi.drawn') }}</template>

View File

@ -1,5 +1,6 @@
import Vue from 'vue';
import dummy from './dummy.vue';
import userName from './user-name.vue';
import followButton from './follow-button.vue';
import error from './error.vue';
@ -32,6 +33,7 @@ import urlPreview from './url-preview.vue';
import fileTypeIcon from './file-type-icon.vue';
import emoji from './emoji.vue';
import welcomeTimeline from './welcome-timeline.vue';
import userList from './user-list.vue';
import uiInput from './ui/input.vue';
import uiButton from './ui/button.vue';
import uiHorizonGroup from './ui/horizon-group.vue';
@ -46,6 +48,7 @@ import formButton from './ui/form/button.vue';
import formRadio from './ui/form/radio.vue';
Vue.component('mfm', misskeyFlavoredMarkdown);
Vue.component('mk-dummy', dummy);
Vue.component('mk-user-name', userName);
Vue.component('mk-follow-button', followButton);
Vue.component('mk-error', error);
@ -77,6 +80,7 @@ Vue.component('mk-url-preview', urlPreview);
Vue.component('mk-file-type-icon', fileTypeIcon);
Vue.component('mk-emoji', emoji);
Vue.component('mk-welcome-timeline', welcomeTimeline);
Vue.component('mk-user-list', userList);
Vue.component('ui-input', uiInput);
Vue.component('ui-button', uiButton);
Vue.component('ui-horizon-group', uiHorizonGroup);

View File

@ -0,0 +1,48 @@
<template>
<a class="zxrjzpcj" :href="url" :class="service" target="_blank">
<fa :icon="icon" size="lg" fixed-width /><span>{{ text }}</span>
</a>
</template>
<script lang="ts">
import Vue from 'vue';
export default Vue.extend({
props: ['url', 'text', 'icon', 'service']
});
</script>
<style lang="stylus" scoped>
.zxrjzpcj
display inline-block
padding 6px 8px 6px 6px
margin-top 4px
margin-bottom 4px
border-radius 32px
white-space nowrap
&:hover
text-decoration none
&.twitter
color #fff
background #1da1f3
&:hover
background #0c87cf
&.github
color #fff
background #171515
&:hover
background #000
&.discord
color #fff
background #7289da
&:hover
background #4968ce
</style>

View File

@ -1,5 +1,5 @@
<template>
<div class="usertwitxxxgithxxdiscxxxintegrat" :v-if="user.twitter || user.github || user.discord">
<div class="nbogcrmo" :v-if="user.twitter || user.github || user.discord">
<x-integration v-if="user.twitter" service="twitter" :url="`https://twitter.com/${user.twitter.screenName}`" :text="user.twitter.screenName" :icon="['fab', 'twitter']"/>
<x-integration v-if="user.github" service="github" :url="`https://github.com/${user.github.login}`" :text="user.github.login" :icon="['fab', 'github']"/>
<x-integration v-if="user.discord" service="discord" :url="`https://discordapp.com/users/${user.discord.id}`" :text="`${user.discord.username}#${user.discord.discriminator}`" :icon="['fab', 'discord']"/>
@ -8,7 +8,7 @@
<script lang="ts">
import Vue from 'vue';
import XIntegration from './user.integrations.integration.vue';
import XIntegration from './integrations.integration.vue';
export default Vue.extend({
components: {
@ -19,45 +19,8 @@ export default Vue.extend({
</script>
<style lang="stylus" scoped>
.usertwitxxxgithxxdiscxxxintegrat
> a
display flex
align-items center
padding 32px 38px
box-shadow var(--shadow)
border-radius var(--round)
&:not(:last-child)
margin-bottom 16px
&:hover
text-decoration none
> div
padding-left .2em
line-height 1.3em
flex 1 0
word-wrap anywhere
&.twitter
color #fff
background #1da1f3
&:hover
background #0c87cf
&.github
color #fff
background #171515
&:hover
background #000
&.discord
color #fff
background #7289da
&:hover
background #4968ce
.nbogcrmo
> *
margin-right 10px
</style>

View File

@ -5,7 +5,7 @@
<b>{{ $t('sensitive') }}</b>
<span>{{ $t('click-to-show') }}</span>
</div>
<div class="audio" v-else-if="media.type.startsWith('audio')">
<div class="audio" v-else-if="media.type.startsWith('audio') && media.type !== 'audio/midi'">
<audio class="audio"
:src="media.url"
:title="media.name"
@ -44,7 +44,7 @@ export default Vue.extend({
},
mounted() {
const audioTag = this.$refs.audio as HTMLAudioElement;
audioTag.volume = this.$store.state.device.mediaVolume;
if (audioTag) audioTag.volume = this.$store.state.device.mediaVolume;
},
methods: {
volumechange() {

View File

@ -10,7 +10,9 @@
:style="style"
:title="image.name"
@click.prevent="onClick"
></a>
>
<div v-if="image.type === 'image/gif'">GIF</div>
</a>
</template>
<script lang="ts">
@ -76,6 +78,20 @@ export default Vue.extend({
background-size contain
background-repeat no-repeat
> div
background-color var(--text)
border-radius 6px
color var(--secondary)
display inline-block
font-size 14px
font-weight bold
left 12px
opacity .5
padding 0 6px
text-align center
top 12px
pointer-events none
.qjewsnkgzzxlxtzncydssfbgjibiehcy
display flex
justify-content center

View File

@ -64,6 +64,10 @@ export default Vue.extend({
this.hukidasi = false;
}
if (top < 0) {
top = 0;
}
popover.style.left = left + 'px';
popover.style.top = top + 'px';

View File

@ -40,7 +40,11 @@ export default Vue.component('misskey-flavored-markdown', {
},
customEmojis: {
required: false,
}
},
isNote: {
type: Boolean,
default: true
},
},
render(createElement) {
@ -204,7 +208,7 @@ export default Vue.component('misskey-flavored-markdown', {
return [createElement('router-link', {
key: Math.random(),
attrs: {
to: `/tags/${encodeURIComponent(token.node.props.hashtag)}`,
to: this.isNote ? `/tags/${encodeURIComponent(token.node.props.hashtag)}` : `/explore/tags/${encodeURIComponent(token.node.props.hashtag)}`,
style: 'color:var(--mfmHashtag);'
}
}, `#${token.node.props.hashtag}`)];

View File

@ -1,5 +1,5 @@
<template>
<mfm-core v-bind="$attrs" class="havbbuyv"/>
<mfm-core v-bind="$attrs" class="havbbuyv" v-once/>
</template>
<script lang="ts">

View File

@ -12,21 +12,54 @@
</li>
</ul>
<button class="add" v-if="choices.length < 10" @click="add">{{ $t('add') }}</button>
<button class="add" v-else disabled>{{ $t('no-more') }}</button>
<button class="destroy" @click="destroy" :title="$t('destroy')">
<fa icon="times"/>
</button>
<section>
<ui-switch v-model="multiple">{{ $t('multiple') }}</ui-switch>
<div>
<ui-select v-model="expiration">
<template #label>{{ $t('expiration') }}</template>
<option value="infinite">{{ $t('infinite') }}</option>
<option value="at">{{ $t('at') }}</option>
<option value="after">{{ $t('after') }}</option>
</ui-select>
<section v-if="expiration === 'at'">
<ui-input v-model="atDate" type="date">{{ $t('deadline-date') }}</ui-input>
<ui-input v-model="atTime" type="time">{{ $t('deadline-time') }}</ui-input>
</section>
<section v-if="expiration === 'after'">
<ui-input v-model="after" type="number">{{ $t('interval') }}</ui-input>
<ui-select v-model="unit">
<template #label>{{ $t('unit') }}</template>
<option value="second">{{ $t('second') }}</option>
<option value="minute">{{ $t('minute') }}</option>
<option value="hour">{{ $t('hour') }}</option>
<option value="day">{{ $t('day') }}</option>
</ui-select>
</section>
</div>
</section>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import * as moment from 'moment';
import i18n from '../../../i18n';
import { erase } from '../../../../../prelude/array';
export default Vue.extend({
i18n: i18n('common/views/components/poll-editor.vue'),
data() {
return {
choices: ['', '']
choices: ['', ''],
multiple: false,
expiration: 'infinite',
atDate: moment().add(1, 'day').toISOString().split('T')[0],
atTime: '00:00',
after: 0,
unit: 'second'
};
},
watch: {
@ -55,15 +88,46 @@ export default Vue.extend({
},
get() {
const at = () => {
const [date] = moment(this.atDate).toISOString().split('T');
const [hour, minute] = this.atTime.split(':');
return moment(`${date}T${hour}:${minute}Z`).valueOf();
};
const after = () => {
let base = parseInt(this.after);
switch (this.unit) {
case 'day': base *= 24;
case 'hour': base *= 60;
case 'minute': base *= 60;
case 'second': return base *= 1000;
default: return null;
}
};
return {
choices: erase('', this.choices)
}
choices: erase('', this.choices),
multiple: this.multiple,
...(
this.expiration === 'at' ? { expiresAt: at() } :
this.expiration === 'after' ? { expiredAfter: after() } : {})
};
},
set(data) {
if (data.choices.length == 0) return;
this.choices = data.choices;
if (data.choices.length == 1) this.choices = this.choices.concat('');
this.multiple = data.multiple;
if (data.expiresAt) {
this.expiration = 'at';
this.atDate = this.atTime = data.expiresAt;
} else if (typeof data.expiredAfter === 'number') {
this.expiration = 'after';
this.after = data.expiredAfter;
} else {
this.expiration = 'infinite';
}
}
}
});
@ -128,6 +192,7 @@ export default Vue.extend({
margin 8px 0 0 0
vertical-align top
color var(--primary)
z-index 1
> .destroy
position absolute
@ -142,4 +207,23 @@ export default Vue.extend({
&:active
color var(--primaryDarken30)
> section
margin 16px 0 -16px 0
> div
margin 0 8px
&:last-child
flex 1 0 auto
> section
align-items center
display flex
margin -32px 0 0
> :first-child
margin-right 16px
> .ui-input
flex 1 0 auto
</style>

View File

@ -1,8 +1,8 @@
<template>
<div class="mk-poll" :data-is-voted="isVoted">
<div class="mk-poll" :data-done="closed || isVoted">
<ul>
<li v-for="choice in poll.choices" :key="choice.id" @click="vote(choice.id)" :class="{ voted: choice.voted }" :title="!isVoted ? $t('vote-to').replace('{}', choice.text) : ''">
<div class="backdrop" :style="{ 'width': (showResult ? (choice.votes / total * 100) : 0) + '%' }"></div>
<li v-for="choice in poll.choices" :key="choice.id" @click="vote(choice.id)" :class="{ voted: choice.voted }" :title="!closed && !isVoted ? $t('vote-to').replace('{}', choice.text) : ''">
<div class="backdrop" :style="{ 'width': `${showResult ? (choice.votes / total * 100) : 0}%` }"></div>
<span>
<template v-if="choice.isVoted"><fa icon="check"/></template>
<mfm :text="choice.text" :should-break="false" :plain-text="true" :custom-emojis="note.emojis"/>
@ -10,11 +10,13 @@
</span>
</li>
</ul>
<p v-if="total > 0">
<span>{{ $t('total-users').replace('{}', total) }}</span>
<span></span>
<a v-if="!isVoted" @click="toggleShowResult">{{ showResult ? $t('vote') : $t('show-result') }}</a>
<p>
<span>{{ $t('total-votes').replace('{}', total) }}</span>
<span> · </span>
<a v-if="!closed && !isVoted" @click="toggleShowResult">{{ showResult ? $t('vote') : $t('show-result') }}</a>
<span v-if="isVoted">{{ $t('voted') }}</span>
<span v-else-if="closed">{{ $t('closed') }}</span>
<span v-if="remaining > 0"> · {{ timer }}</span>
</p>
</div>
</template>
@ -28,6 +30,7 @@ export default Vue.extend({
props: ['note'],
data() {
return {
remaining: -1,
showResult: false
};
},
@ -38,19 +41,43 @@ export default Vue.extend({
total(): number {
return sum(this.poll.choices.map(x => x.votes));
},
closed(): boolean {
return !this.remaining;
},
timer(): string {
return this.$t(
this.remaining > 86400 ? 'remaining-days' :
this.remaining > 3600 ? 'remaining-hours' :
this.remaining > 60 ? 'remaining-minutes' : 'remaining-seconds')
.replace('{s}', Math.floor(this.remaining % 60))
.replace('{m}', Math.floor(this.remaining / 60) % 60)
.replace('{h}', Math.floor(this.remaining / 3600) % 24)
.replace('{d}', Math.floor(this.remaining / 86400));
},
isVoted(): boolean {
return this.poll.choices.some(c => c.isVoted);
return !this.poll.multiple && this.poll.choices.some(c => c.isVoted);
}
},
created() {
this.showResult = this.isVoted;
if (this.note.poll.expiresAt) {
const update = () => {
if (this.remaining = Math.floor(Math.max(new Date(this.note.poll.expiresAt).getTime() - Date.now(), 0) / 1000))
requestAnimationFrame(update);
else
this.showResult = true;
};
update();
}
},
methods: {
toggleShowResult() {
this.showResult = !this.showResult;
},
vote(id) {
if (this.poll.choices.some(c => c.isVoted)) return;
if (this.closed || !this.poll.multiple && this.poll.choices.some(c => c.isVoted)) return;
this.$root.api('notes/polls/vote', {
noteId: this.note.id,
choice: id
@ -61,7 +88,7 @@ export default Vue.extend({
Vue.set(c, 'isVoted', true);
}
}
this.showResult = true;
if (!this.showResult) this.showResult = !this.poll.multiple;
});
}
}
@ -114,7 +141,7 @@ export default Vue.extend({
a
color inherit
&[data-is-voted]
&[data-done]
> ul > li
cursor default

View File

@ -1,5 +1,5 @@
<template>
<div class="puqkfets" :class="{ mini }">
<div class="puqkfets" :class="{ mini: narrow }">
<mk-avatar class="avatar" :user="note.user"/>
<fa icon="retweet"/>
<i18n path="@.renoted-by" tag="span">
@ -30,13 +30,13 @@ export default Vue.extend({
note: {
type: Object,
required: true
},
mini: {
type: Boolean,
required: false,
}
},
inject: {
narrow: {
default: false
}
}
},
});
</script>
@ -44,25 +44,20 @@ export default Vue.extend({
.puqkfets
display flex
align-items center
padding 16px 32px 8px 32px
padding 8px 16px
line-height 28px
white-space pre
color var(--renoteText)
background linear-gradient(to bottom, var(--renoteGradient) 0%, var(--face) 100%)
&.mini
&:not(.mini)
padding 8px 16px
@media (min-width 500px)
padding 16px
padding 8px 16px
@media (min-width 600px)
padding 16px 32px
> .avatar
@media (min-width 500px)
width 28px
height 28px
padding 16px 32px 8px 32px
> .avatar
flex-shrink 0

View File

@ -23,7 +23,7 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
import i18n from '../../../../i18n';
export default Vue.extend({
i18n: i18n('desktop/views/components/settings.2fa.vue'),

View File

@ -1,6 +1,6 @@
<template>
<ui-card>
<div slot="title"><fa icon="key"/> API</div>
<template #title><fa icon="key"/> API</template>
<section class="fit-top">
<ui-input :value="$store.state.i.token" readonly>
@ -19,7 +19,7 @@
</ui-input>
<ui-textarea v-model="body">
<span>{{ $t('console.parameter') }} (JSON or JSON5)</span>
<span slot="desc">{{ $t('console.credential-info') }}</span>
<template #desc>{{ $t('console.credential-info') }}</template>
</ui-textarea>
<ui-button @click="send" :disabled="sending">
<template v-if="sending">{{ $t('console.sending') }}</template>
@ -34,7 +34,7 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
import i18n from '../../../../i18n';
import * as JSON5 from 'json5';
export default Vue.extend({

View File

@ -12,7 +12,7 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
import i18n from '../../../../i18n';
export default Vue.extend({
i18n: i18n('desktop/views/components/settings.apps.vue'),
data() {

View File

@ -1,6 +1,6 @@
<template>
<ui-card>
<div slot="title"><fa icon="cloud"/> {{ $t('@.drive') }}</div>
<template #title><fa icon="cloud"/> {{ $t('@.drive') }}</template>
<section v-if="!fetching" class="juakhbxthdewydyreaphkepoxgxvfogn">
<div class="meter"><div :style="meterStyle"></div></div>
@ -16,7 +16,7 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
import i18n from '../../../../i18n';
import * as tinycolor from 'tinycolor2';
import ApexCharts from 'apexcharts';

View File

@ -1,6 +1,6 @@
<template>
<ui-card v-if="enableTwitterIntegration || enableDiscordIntegration || enableGithubIntegration">
<div slot="title"><fa icon="share-alt"/> {{ $t('title') }}</div>
<template #title><fa icon="share-alt"/> {{ $t('title') }}</template>
<section v-if="enableTwitterIntegration">
<header><fa :icon="['fab', 'twitter']"/> Twitter</header>
@ -27,8 +27,8 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
import { apiUrl } from '../../../config';
import i18n from '../../../../i18n';
import { apiUrl } from '../../../../config';
export default Vue.extend({
i18n: i18n('common/views/components/integration-settings.vue'),

View File

@ -1,6 +1,6 @@
<template>
<ui-card>
<div slot="title"><fa icon="language"/> {{ $t('title') }}</div>
<template #title><fa icon="language"/> {{ $t('title') }}</template>
<section class="fit-top">
<ui-select v-model="lang" :placeholder="$t('pick-language')">
@ -20,8 +20,8 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
import { langs } from '../../../config';
import i18n from '../../../../i18n';
import { langs } from '../../../../config';
export default Vue.extend({
i18n: i18n('common/views/components/language-settings.vue'),

View File

@ -1,6 +1,6 @@
<template>
<ui-card>
<div slot="title"><fa icon="ban"/> {{ $t('mute-and-block') }}</div>
<template #title><fa icon="ban"/> {{ $t('mute-and-block') }}</template>
<section>
<header>{{ $t('mute') }}</header>
@ -25,7 +25,7 @@
<section>
<header>{{ $t('word-mute') }}</header>
<ui-textarea v-model="mutedWords">
{{ $t('muted-words') }}<span slot="desc">{{ $t('muted-words-description') }}</span>
{{ $t('muted-words') }}<template #desc>{{ $t('muted-words-description') }}</template>
</ui-textarea>
<ui-button @click="save">{{ $t('save') }}</ui-button>
</section>
@ -34,7 +34,7 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
import i18n from '../../../../i18n';
export default Vue.extend({
i18n: i18n('common/views/components/mute-and-block.vue'),

View File

@ -1,9 +1,9 @@
<template>
<ui-card>
<div slot="title"><fa :icon="['far', 'bell']"/> {{ $t('title') }}</div>
<template #title><fa :icon="['far', 'bell']"/> {{ $t('title') }}</template>
<section>
<ui-switch v-model="$store.state.i.settings.autoWatch" @change="onChangeAutoWatch">
{{ $t('auto-watch') }}<span slot="desc">{{ $t('auto-watch-desc') }}</span>
{{ $t('auto-watch') }}<template #desc>{{ $t('auto-watch-desc') }}</template>
</ui-switch>
<section>
<ui-button @click="readAllNotifications">{{ $t('mark-as-read-all-notifications') }}</ui-button>
@ -16,7 +16,7 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
import i18n from '../../../../i18n';
export default Vue.extend({
i18n: i18n('common/views/components/notification-settings.vue'),

View File

@ -6,7 +6,7 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
import i18n from '../../../../i18n';
export default Vue.extend({
i18n: i18n('common/views/components/password-settings.vue'),

View File

@ -1,6 +1,6 @@
<template>
<ui-card>
<div slot="title"><fa icon="user"/> {{ $t('title') }}</div>
<template #title><fa icon="user"/> {{ $t('title') }}</template>
<section class="esokaraujimuwfttfzgocmutcihewscl">
<div class="header" :style="bannerStyle">
@ -14,59 +14,59 @@
<ui-input v-model="username" readonly>
<span>{{ $t('account') }}</span>
<span slot="prefix">@</span>
<span slot="suffix">@{{ host }}</span>
<template #prefix>@</template>
<template #suffix>@{{ host }}</template>
</ui-input>
<ui-input v-model="location">
<span>{{ $t('location') }}</span>
<span slot="prefix"><fa icon="map-marker-alt"/></span>
<template #prefix><fa icon="map-marker-alt"/></template>
</ui-input>
<ui-input v-model="birthday" type="date">
<span slot="title">{{ $t('birthday') }}</span>
<span slot="prefix"><fa icon="birthday-cake"/></span>
<template #title>{{ $t('birthday') }}</template>
<template #prefix><fa icon="birthday-cake"/></template>
</ui-input>
<ui-textarea v-model="description" :max="500">
<span>{{ $t('description') }}</span>
<span slot="desc">{{ $t('you-can-include-hashtags') }}</span>
<template #desc>{{ $t('you-can-include-hashtags') }}</template>
</ui-textarea>
<ui-select v-model="lang">
<span slot="label">{{ $t('language') }}</span>
<span slot="icon"><fa icon="language"/></span>
<template #label>{{ $t('language') }}</template>
<template #icon><fa icon="language"/></template>
<option v-for="lang in unique(Object.values(langmap).map(x => x.nativeName)).map(name => Object.keys(langmap).find(k => langmap[k].nativeName == name))" :value="lang" :key="lang">{{ langmap[lang].nativeName }}</option>
</ui-select>
<ui-input type="file" @change="onAvatarChange">
<span>{{ $t('avatar') }}</span>
<span slot="icon"><fa icon="image"/></span>
<span slot="desc" v-if="avatarUploading">{{ $t('uploading') }}<mk-ellipsis/></span>
<template #icon><fa icon="image"/></template>
<template #desc v-if="avatarUploading">{{ $t('uploading') }}<mk-ellipsis/></template>
</ui-input>
<ui-input type="file" @change="onBannerChange">
<span>{{ $t('banner') }}</span>
<span slot="icon"><fa icon="image"/></span>
<span slot="desc" v-if="bannerUploading">{{ $t('uploading') }}<mk-ellipsis/></span>
<template #icon><fa icon="image"/></template>
<template #desc v-if="bannerUploading">{{ $t('uploading') }}<mk-ellipsis/></template>
</ui-input>
<ui-button @click="save(true)">{{ $t('save') }}</ui-button>
<ui-button @click="save(true)"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</ui-form>
</section>
<section>
<header>{{ $t('advanced') }}</header>
<header><fa :icon="faCogs"/> {{ $t('advanced') }}</header>
<div>
<ui-switch v-model="isCat" @change="save(false)">{{ $t('is-cat') }}</ui-switch>
<ui-switch v-model="isBot" @change="save(false)">{{ $t('is-bot') }}</ui-switch>
<ui-switch v-model="alwaysMarkNsfw">{{ $t('@.always-mark-nsfw') }}</ui-switch>
<ui-switch v-model="alwaysMarkNsfw">{{ $t('@._settings.always-mark-nsfw') }}</ui-switch>
</div>
</section>
<section>
<header>{{ $t('privacy') }}</header>
<header><fa :icon="faUnlockAlt"/> {{ $t('privacy') }}</header>
<div>
<ui-switch v-model="isLocked" @change="save(false)">{{ $t('is-locked') }}</ui-switch>
@ -76,7 +76,7 @@
</section>
<section v-if="enableEmail">
<header>{{ $t('email') }}</header>
<header><fa :icon="faEnvelope"/> {{ $t('email') }}</header>
<div>
<template v-if="$store.state.i.email != null">
@ -84,12 +84,12 @@
<ui-info v-else warn>{{ $t('email-not-verified') }}</ui-info>
</template>
<ui-input v-model="email" type="email"><span>{{ $t('email-address') }}</span></ui-input>
<ui-button @click="updateEmail()">{{ $t('save') }}</ui-button>
<ui-button @click="updateEmail()"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</div>
</section>
<section>
<header>{{ $t('export') }}</header>
<header><fa :icon="faBoxes"/> {{ $t('export-and-import') }}</header>
<div>
<ui-select v-model="exportTarget">
@ -97,21 +97,33 @@
<option value="following">{{ $t('export-targets.following-list') }}</option>
<option value="mute">{{ $t('export-targets.mute-list') }}</option>
<option value="blocking">{{ $t('export-targets.blocking-list') }}</option>
<option value="user-lists">{{ $t('export-targets.user-lists') }}</option>
</ui-select>
<ui-button @click="doExport()"><fa :icon="faDownload"/> {{ $t('export') }}</ui-button>
<ui-horizon-group class="fit-bottom">
<ui-button @click="doExport()"><fa :icon="faDownload"/> {{ $t('export') }}</ui-button>
<ui-button @click="doImport()" :disabled="!['following', 'user-lists'].includes(exportTarget)"><fa :icon="faUpload"/> {{ $t('import') }}</ui-button>
</ui-horizon-group>
</div>
</section>
<section>
<details>
<summary>{{ $t('danger-zone') }}</summary>
<ui-button @click="deleteAccount()">{{ $t('delete-account') }}</ui-button>
</details>
</section>
</ui-card>
</template>
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
import { apiUrl, host } from '../../../config';
import i18n from '../../../../i18n';
import { apiUrl, host } from '../../../../config';
import { toUnicode } from 'punycode';
import langmap from 'langmap';
import { unique } from '../../../../../prelude/array';
import { faDownload } from '@fortawesome/free-solid-svg-icons';
import { unique } from '../../../../../../prelude/array';
import { faDownload, faUpload, faUnlockAlt, faBoxes, faCogs } from '@fortawesome/free-solid-svg-icons';
import { faSave, faEnvelope } from '@fortawesome/free-regular-svg-icons';
export default Vue.extend({
i18n: i18n('common/views/components/profile-editor.vue'),
@ -140,7 +152,7 @@ export default Vue.extend({
avatarUploading: false,
bannerUploading: false,
exportTarget: 'notes',
faDownload
faDownload, faUpload, faSave, faEnvelope, faUnlockAlt, faBoxes, faCogs
};
},
@ -277,12 +289,48 @@ export default Vue.extend({
this.exportTarget == 'following' ? 'i/export-following' :
this.exportTarget == 'mute' ? 'i/export-mute' :
this.exportTarget == 'blocking' ? 'i/export-blocking' :
this.exportTarget == 'user-lists' ? 'i/export-user-lists' :
null, {});
this.$root.dialog({
type: 'info',
text: this.$t('export-requested')
});
},
doImport() {
this.$chooseDriveFile().then(file => {
this.$root.api(
this.exportTarget == 'following' ? 'i/import-following' :
this.exportTarget == 'user-lists' ? 'i/import-user-lists' :
null, {
fileId: file.id
});
this.$root.dialog({
type: 'info',
text: this.$t('import-requested')
});
});
},
async deleteAccount() {
const { canceled: canceled, result: password } = await this.$root.dialog({
title: this.$t('enter-password'),
input: {
type: 'password'
}
});
if (canceled) return;
this.$root.api('i/delete-account', {
password
}).then(() => {
this.$root.dialog({
type: 'success',
text: this.$t('account-deleted')
});
});
}
}
});

View File

@ -0,0 +1,563 @@
<template>
<div class="nqfhvmnl">
<template v-if="page == null || page == 'profile'">
<x-profile/>
<x-integration/>
</template>
<template v-if="page == null || page == 'appearance'">
<x-theme/>
<ui-card>
<template #title><fa icon="desktop"/> {{ $t('@._settings.appearance') }}</template>
<section v-if="!$root.isMobile">
<ui-switch v-model="showPostFormOnTopOfTl">{{ $t('@._settings.post-form-on-timeline') }}</ui-switch>
<ui-button @click="customizeHome">{{ $t('@.customize-home') }}</ui-button>
</section>
<section v-if="!$root.isMobile">
<header>{{ $t('@._settings.wallpaper') }}</header>
<ui-horizon-group class="fit-bottom">
<ui-button @click="updateWallpaper">{{ $t('@._settings.choose-wallpaper') }}</ui-button>
<ui-button @click="deleteWallpaper">{{ $t('@._settings.delete-wallpaper') }}</ui-button>
</ui-horizon-group>
</section>
<section v-if="!$root.isMobile">
<header>{{ $t('@._settings.navbar-position') }}</header>
<ui-radio v-model="navbar" value="top">{{ $t('@._settings.navbar-position-top') }}</ui-radio>
<ui-radio v-model="navbar" value="left">{{ $t('@._settings.navbar-position-left') }}</ui-radio>
<ui-radio v-model="navbar" value="right">{{ $t('@._settings.navbar-position-right') }}</ui-radio>
</section>
<section>
<ui-switch v-model="useShadow">{{ $t('@._settings.use-shadow') }}</ui-switch>
<ui-switch v-model="roundedCorners">{{ $t('@._settings.rounded-corners') }}</ui-switch>
<ui-switch v-model="circleIcons">{{ $t('@._settings.circle-icons') }}</ui-switch>
<ui-switch v-model="reduceMotion">{{ $t('@._settings.reduce-motion') }}</ui-switch>
<ui-switch v-model="contrastedAcct">{{ $t('@._settings.contrasted-acct') }}</ui-switch>
<ui-switch v-model="showFullAcct">{{ $t('@._settings.show-full-acct') }}</ui-switch>
<ui-switch v-model="showVia">{{ $t('@._settings.show-via') }}</ui-switch>
<ui-switch v-model="useOsDefaultEmojis">{{ $t('@._settings.use-os-default-emojis') }}</ui-switch>
<ui-switch v-model="iLikeSushi">{{ $t('@._settings.i-like-sushi') }}</ui-switch>
</section>
<section>
<ui-switch v-model="suggestRecentHashtags">{{ $t('@._settings.suggest-recent-hashtags') }}</ui-switch>
<ui-switch v-model="showClockOnHeader" v-if="!$root.isMobile">{{ $t('@._settings.show-clock-on-header') }}</ui-switch>
<ui-switch v-model="alwaysShowNsfw">{{ $t('@._settings.always-show-nsfw') }}</ui-switch>
<ui-switch v-model="showReplyTarget">{{ $t('@._settings.show-reply-target') }}</ui-switch>
<ui-switch v-model="disableAnimatedMfm">{{ $t('@._settings.disable-animated-mfm') }}</ui-switch>
<ui-switch v-model="disableShowingAnimatedImages">{{ $t('@._settings.disable-showing-animated-images') }}</ui-switch>
<ui-switch v-model="remainDeletedNote">{{ $t('@._settings.remain-deleted-note') }}</ui-switch>
</section>
<section>
<header>{{ $t('@._settings.line-width') }}</header>
<ui-radio v-model="lineWidth" :value="0.5">{{ $t('@._settings.line-width-thin') }}</ui-radio>
<ui-radio v-model="lineWidth" :value="1">{{ $t('@._settings.line-width-normal') }}</ui-radio>
<ui-radio v-model="lineWidth" :value="2">{{ $t('@._settings.line-width-thick') }}</ui-radio>
</section>
<section>
<header>{{ $t('@._settings.font-size') }}</header>
<ui-radio v-model="fontSize" :value="-2">{{ $t('@._settings.font-size-x-small') }}</ui-radio>
<ui-radio v-model="fontSize" :value="-1">{{ $t('@._settings.font-size-small') }}</ui-radio>
<ui-radio v-model="fontSize" :value="0">{{ $t('@._settings.font-size-medium') }}</ui-radio>
<ui-radio v-model="fontSize" :value="1">{{ $t('@._settings.font-size-large') }}</ui-radio>
<ui-radio v-model="fontSize" :value="2">{{ $t('@._settings.font-size-x-large') }}</ui-radio>
</section>
<section v-if="$root.isMobile">
<header>{{ $t('@._settings.post-style') }}</header>
<ui-radio v-model="postStyle" value="standard">{{ $t('@._settings.post-style-standard') }}</ui-radio>
<ui-radio v-model="postStyle" value="smart">{{ $t('@._settings.post-style-smart') }}</ui-radio>
</section>
<section v-if="$root.isMobile">
<header>{{ $t('@._settings.notification-position') }}</header>
<ui-radio v-model="mobileNotificationPosition" value="bottom">{{ $t('@._settings.notification-position-bottom') }}</ui-radio>
<ui-radio v-model="mobileNotificationPosition" value="top">{{ $t('@._settings.notification-position-top') }}</ui-radio>
</section>
<section>
<header>{{ $t('@._settings.deck-column-align') }}</header>
<ui-radio v-model="deckColumnAlign" value="center">{{ $t('@._settings.deck-column-align-center') }}</ui-radio>
<ui-radio v-model="deckColumnAlign" value="left">{{ $t('@._settings.deck-column-align-left') }}</ui-radio>
<ui-radio v-model="deckColumnAlign" value="flexible">{{ $t('@._settings.deck-column-align-flexible') }}</ui-radio>
</section>
<section>
<header>{{ $t('@._settings.deck-column-width') }}</header>
<ui-radio v-model="deckColumnWidth" value="narrow">{{ $t('@._settings.deck-column-width-narrow') }}</ui-radio>
<ui-radio v-model="deckColumnWidth" value="narrower">{{ $t('@._settings.deck-column-width-narrower') }}</ui-radio>
<ui-radio v-model="deckColumnWidth" value="normal">{{ $t('@._settings.deck-column-width-normal') }}</ui-radio>
<ui-radio v-model="deckColumnWidth" value="wider">{{ $t('@._settings.deck-column-width-wider') }}</ui-radio>
<ui-radio v-model="deckColumnWidth" value="wide">{{ $t('@._settings.deck-column-width-wide') }}</ui-radio>
</section>
<section>
<ui-switch v-model="games_reversi_showBoardLabels">{{ $t('@._settings.show-reversi-board-labels') }}</ui-switch>
<ui-switch v-model="games_reversi_useAvatarStones">{{ $t('@._settings.use-avatar-reversi-stones') }}</ui-switch>
</section>
</ui-card>
</template>
<template v-if="page == null || page == 'behavior'">
<ui-card>
<template #title><fa icon="sliders-h"/> {{ $t('@._settings.behavior') }}</template>
<section>
<ui-switch v-model="fetchOnScroll">{{ $t('@._settings.fetch-on-scroll') }}
<template #desc>{{ $t('@._settings.fetch-on-scroll-desc') }}</template>
</ui-switch>
<ui-switch v-model="keepCw">{{ $t('@._settings.keep-cw') }}
<template #desc>{{ $t('@._settings.keep-cw-desc') }}</template>
</ui-switch>
<ui-switch v-if="$root.isMobile" v-model="disableViaMobile">{{ $t('@._settings.disable-via-mobile') }}</ui-switch>
</section>
<section>
<header>{{ $t('@._settings.timeline') }}</header>
<ui-switch v-model="showMyRenotes">{{ $t('@._settings.show-my-renotes') }}</ui-switch>
<ui-switch v-model="showRenotedMyNotes">{{ $t('@._settings.show-renoted-my-notes') }}</ui-switch>
<ui-switch v-model="showLocalRenotes">{{ $t('@._settings.show-local-renotes') }}</ui-switch>
</section>
<section>
<header>{{ $t('@._settings.note-visibility') }}</header>
<ui-switch v-model="rememberNoteVisibility">{{ $t('@._settings.remember-note-visibility') }}</ui-switch>
<section>
<header>{{ $t('@._settings.default-note-visibility') }}</header>
<ui-select v-model="defaultNoteVisibility">
<option value="public">{{ $t('@.note-visibility.public') }}</option>
<option value="home">{{ $t('@.note-visibility.home') }}</option>
<option value="followers">{{ $t('@.note-visibility.followers') }}</option>
<option value="specified">{{ $t('@.note-visibility.specified') }}</option>
<option value="local-public">{{ $t('@.note-visibility.local-public') }}</option>
<option value="local-home">{{ $t('@.note-visibility.local-home') }}</option>
<option value="local-followers">{{ $t('@.note-visibility.local-followers') }}</option>
</ui-select>
</section>
</section>
<section>
<header>{{ $t('@._settings.web-search-engine') }}</header>
<ui-input v-model="webSearchEngine">{{ $t('@._settings.web-search-engine') }}<template #desc>{{ $t('@._settings.web-search-engine-desc') }}</template></ui-input>
</section>
</ui-card>
<ui-card>
<template #title><fa icon="volume-up"/> {{ $t('@._settings.sound') }}</template>
<section>
<ui-switch v-model="enableSounds">{{ $t('@._settings.enable-sounds') }}
<template #desc>{{ $t('@._settings.enable-sounds-desc') }}</template>
</ui-switch>
<label>{{ $t('@._settings.volume') }}</label>
<input type="range"
v-model="soundVolume"
:disabled="!enableSounds"
max="1"
step="0.1"
/>
<ui-button @click="soundTest"><fa icon="volume-up"/> {{ $t('@._settings.test') }}</ui-button>
</section>
</ui-card>
<x-language/>
</template>
<template v-if="page == null || page == 'notification'">
<x-notification v-show="page == 'notification'"/>
</template>
<template v-if="page == null || page == 'drive'">
<x-drive/>
</template>
<template v-if="page == null || page == 'hashtags'">
<ui-card>
<template #title><fa icon="hashtag"/> {{ $t('@._settings.tags') }}</template>
<section>
<x-tags/>
</section>
</ui-card>
</template>
<template v-if="page == null || page == 'muteAndBlock'">
<x-mute-and-block/>
</template>
<!--
<template v-if="page == null || page == 'apps'">
<ui-card>
<template #title><fa icon="puzzle-piece"/> {{ $t('@._settings.apps') }}</template>
<section>
<x-apps/>
</section>
</ui-card>
</template>
-->
<template v-if="page == null || page == 'security'">
<ui-card>
<template #title><fa icon="unlock-alt"/> {{ $t('@._settings.password') }}</template>
<section>
<x-password/>
</section>
</ui-card>
<ui-card v-if="!$root.isMobile">
<template #title><fa icon="mobile-alt"/> {{ $t('@.2fa') }}</template>
<section>
<x-2fa/>
</section>
</ui-card>
<!--
<ui-card>
<template #title><fa icon="sign-in-alt"/> {{ $t('@._settings.signin') }}</template>
<section>
<x-signins/>
</section>
</ui-card>
-->
</template>
<template v-if="page == null || page == 'api'">
<x-api/>
</template>
<template v-if="page == null || page == 'other'">
<ui-card>
<template #title><fa icon="sync-alt"/> {{ $t('@._settings.update') }}</template>
<section>
<p>
<span>{{ $t('@._settings.version') }} <i>{{ version }}</i></span>
<template v-if="latestVersion !== undefined">
<br>
<span>{{ $t('@._settings.latest-version') }} <i>{{ latestVersion ? latestVersion : version }}</i></span>
</template>
</p>
<ui-button @click="checkForUpdate" :disabled="checkingForUpdate">
<template v-if="checkingForUpdate">{{ $t('@._settings.update-checking') }}<mk-ellipsis/></template>
<template v-else>{{ $t('@._settings.do-update') }}</template>
</ui-button>
</section>
</ui-card>
<ui-card>
<template #title><fa icon="cogs"/> {{ $t('@._settings.advanced-settings') }}</template>
<section>
<ui-switch v-model="debug">
{{ $t('@._settings.debug-mode') }}<template #desc>{{ $t('@._settings.debug-mode-desc') }}</template>
</ui-switch>
</section>
</ui-card>
</template>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../../i18n';
import X2fa from './2fa.vue';
import XApps from './apps.vue';
import XSignins from './signins.vue';
import XTags from './tags.vue';
import XIntegration from './integration.vue';
import XTheme from './theme.vue';
import XDrive from './drive.vue';
import XMuteAndBlock from './mute-and-block.vue';
import XPassword from './password.vue';
import XProfile from './profile.vue';
import XApi from './api.vue';
import XLanguage from './language.vue';
import XNotification from './notification.vue';
import { url, version } from '../../../../config';
import checkForUpdate from '../../../scripts/check-for-update';
export default Vue.extend({
i18n: i18n(),
components: {
X2fa,
XApps,
XSignins,
XTags,
XIntegration,
XTheme,
XDrive,
XMuteAndBlock,
XPassword,
XProfile,
XApi,
XLanguage,
XNotification,
},
props: {
page: {
type: String,
required: false,
default: null
}
},
data() {
return {
meta: null,
version,
latestVersion: undefined,
checkingForUpdate: false
};
},
computed: {
useOsDefaultEmojis: {
get() { return this.$store.state.device.useOsDefaultEmojis; },
set(value) { this.$store.commit('device/set', { key: 'useOsDefaultEmojis', value }); }
},
reduceMotion: {
get() { return this.$store.state.device.reduceMotion; },
set(value) { this.$store.commit('device/set', { key: 'reduceMotion', value }); }
},
keepCw: {
get() { return this.$store.state.settings.keepCw; },
set(value) { this.$store.commit('settings/set', { key: 'keepCw', value }); }
},
navbar: {
get() { return this.$store.state.device.navbar; },
set(value) { this.$store.commit('device/set', { key: 'navbar', value }); }
},
deckColumnAlign: {
get() { return this.$store.state.device.deckColumnAlign; },
set(value) { this.$store.commit('device/set', { key: 'deckColumnAlign', value }); }
},
deckColumnWidth: {
get() { return this.$store.state.device.deckColumnWidth; },
set(value) { this.$store.commit('device/set', { key: 'deckColumnWidth', value }); }
},
enableSounds: {
get() { return this.$store.state.device.enableSounds; },
set(value) { this.$store.commit('device/set', { key: 'enableSounds', value }); }
},
soundVolume: {
get() { return this.$store.state.device.soundVolume; },
set(value) { this.$store.commit('device/set', { key: 'soundVolume', value }); }
},
debug: {
get() { return this.$store.state.device.debug; },
set(value) { this.$store.commit('device/set', { key: 'debug', value }); }
},
alwaysShowNsfw: {
get() { return this.$store.state.device.alwaysShowNsfw; },
set(value) { this.$store.commit('device/set', { key: 'alwaysShowNsfw', value }); }
},
postStyle: {
get() { return this.$store.state.device.postStyle; },
set(value) { this.$store.commit('device/set', { key: 'postStyle', value }); }
},
disableViaMobile: {
get() { return this.$store.state.settings.disableViaMobile; },
set(value) { this.$store.dispatch('settings/set', { key: 'disableViaMobile', value }); }
},
useShadow: {
get() { return this.$store.state.device.useShadow; },
set(value) { this.$store.commit('device/set', { key: 'useShadow', value }); }
},
roundedCorners: {
get() { return this.$store.state.device.roundedCorners; },
set(value) { this.$store.commit('device/set', { key: 'roundedCorners', value }); }
},
lineWidth: {
get() { return this.$store.state.device.lineWidth; },
set(value) { this.$store.commit('device/set', { key: 'lineWidth', value }); }
},
fontSize: {
get() { return this.$store.state.device.fontSize; },
set(value) { this.$store.commit('device/set', { key: 'fontSize', value }); }
},
fetchOnScroll: {
get() { return this.$store.state.settings.fetchOnScroll; },
set(value) { this.$store.dispatch('settings/set', { key: 'fetchOnScroll', value }); }
},
rememberNoteVisibility: {
get() { return this.$store.state.settings.rememberNoteVisibility; },
set(value) { this.$store.dispatch('settings/set', { key: 'rememberNoteVisibility', value }); }
},
defaultNoteVisibility: {
get() { return this.$store.state.settings.defaultNoteVisibility; },
set(value) { this.$store.dispatch('settings/set', { key: 'defaultNoteVisibility', value }); }
},
webSearchEngine: {
get() { return this.$store.state.settings.webSearchEngine; },
set(value) { this.$store.dispatch('settings/set', { key: 'webSearchEngine', value }); }
},
showReplyTarget: {
get() { return this.$store.state.settings.showReplyTarget; },
set(value) { this.$store.dispatch('settings/set', { key: 'showReplyTarget', value }); }
},
showMyRenotes: {
get() { return this.$store.state.settings.showMyRenotes; },
set(value) { this.$store.dispatch('settings/set', { key: 'showMyRenotes', value }); }
},
showRenotedMyNotes: {
get() { return this.$store.state.settings.showRenotedMyNotes; },
set(value) { this.$store.dispatch('settings/set', { key: 'showRenotedMyNotes', value }); }
},
showLocalRenotes: {
get() { return this.$store.state.settings.showLocalRenotes; },
set(value) { this.$store.dispatch('settings/set', { key: 'showLocalRenotes', value }); }
},
showPostFormOnTopOfTl: {
get() { return this.$store.state.settings.showPostFormOnTopOfTl; },
set(value) { this.$store.dispatch('settings/set', { key: 'showPostFormOnTopOfTl', value }); }
},
suggestRecentHashtags: {
get() { return this.$store.state.settings.suggestRecentHashtags; },
set(value) { this.$store.dispatch('settings/set', { key: 'suggestRecentHashtags', value }); }
},
showClockOnHeader: {
get() { return this.$store.state.settings.showClockOnHeader; },
set(value) { this.$store.dispatch('settings/set', { key: 'showClockOnHeader', value }); }
},
circleIcons: {
get() { return this.$store.state.settings.circleIcons; },
set(value) {
this.$store.dispatch('settings/set', { key: 'circleIcons', value });
this.reload();
}
},
contrastedAcct: {
get() { return this.$store.state.settings.contrastedAcct; },
set(value) {
this.$store.dispatch('settings/set', { key: 'contrastedAcct', value });
this.reload();
}
},
showFullAcct: {
get() { return this.$store.state.settings.showFullAcct; },
set(value) {
this.$store.dispatch('settings/set', { key: 'showFullAcct', value });
this.reload();
}
},
showVia: {
get() { return this.$store.state.settings.showVia; },
set(value) { this.$store.dispatch('settings/set', { key: 'showVia', value }); }
},
iLikeSushi: {
get() { return this.$store.state.settings.iLikeSushi; },
set(value) { this.$store.dispatch('settings/set', { key: 'iLikeSushi', value }); }
},
games_reversi_showBoardLabels: {
get() { return this.$store.state.settings.games.reversi.showBoardLabels; },
set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.showBoardLabels', value }); }
},
games_reversi_useAvatarStones: {
get() { return this.$store.state.settings.games.reversi.useAvatarStones; },
set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.useAvatarStones', value }); }
},
disableAnimatedMfm: {
get() { return this.$store.state.settings.disableAnimatedMfm; },
set(value) { this.$store.dispatch('settings/set', { key: 'disableAnimatedMfm', value }); }
},
disableShowingAnimatedImages: {
get() { return this.$store.state.device.disableShowingAnimatedImages; },
set(value) { this.$store.commit('device/set', { key: 'disableShowingAnimatedImages', value }); }
},
remainDeletedNote: {
get() { return this.$store.state.settings.remainDeletedNote; },
set(value) { this.$store.dispatch('settings/set', { key: 'remainDeletedNote', value }); }
},
mobileNotificationPosition: {
get() { return this.$store.state.device.mobileNotificationPosition; },
set(value) { this.$store.commit('device/set', { key: 'mobileNotificationPosition', value }); }
},
},
created() {
this.$root.getMeta().then(meta => {
this.meta = meta;
});
},
methods: {
reload() {
this.$root.dialog({
type: 'warning',
text: this.$t('@.reload-to-apply-the-setting'),
showCancelButton: true
}).then(({ canceled }) => {
if (!canceled) {
location.reload();
}
});
},
customizeHome() {
location.href = '/?customize';
},
updateWallpaper() {
this.$chooseDriveFile({
multiple: false
}).then(file => {
this.$root.api('i/update', {
wallpaperId: file.id
});
});
},
deleteWallpaper() {
this.$root.api('i/update', {
wallpaperId: null
});
},
checkForUpdate() {
this.checkingForUpdate = true;
checkForUpdate(this.$root, true, true).then(newer => {
this.checkingForUpdate = false;
this.latestVersion = newer;
if (newer == null) {
this.$root.dialog({
title: this.$t('no-updates'),
text: this.$t('no-updates-desc')
});
} else {
this.$root.dialog({
title: this.$t('update-available'),
text: this.$t('update-available-desc')
});
}
});
},
soundTest() {
const sound = new Audio(`${url}/assets/message.mp3`);
sound.volume = this.$store.state.device.soundVolume;
sound.play();
}
}
});
</script>

View File

@ -15,7 +15,7 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
import i18n from '../../../../i18n';
import * as uuid from 'uuid';
export default Vue.extend({

View File

@ -1,10 +1,29 @@
<template>
<ui-card>
<div slot="title"><fa icon="palette"/> {{ $t('theme') }}</div>
<template #title><fa icon="palette"/> {{ $t('theme') }}</template>
<section class="nicnklzforebnpfgasiypmpdaaglujqm fit-top">
<div class="dark">
<div class="toggleWrapper">
<input type="checkbox" class="dn" id="dn" v-model="darkmode"/>
<label for="dn" class="toggle">
<span class="toggle__handler">
<span class="crater crater--1"></span>
<span class="crater crater--2"></span>
<span class="crater crater--3"></span>
</span>
<span class="star star--1"></span>
<span class="star star--2"></span>
<span class="star star--3"></span>
<span class="star star--4"></span>
<span class="star star--5"></span>
<span class="star star--6"></span>
</label>
</div>
</div>
<label>
<ui-select v-model="light" :placeholder="$t('light-theme')">
<span slot="label"><fa :icon="faSun"/> {{ $t('light-theme') }}</span>
<template #label><fa :icon="faSun"/> {{ $t('light-theme') }}</template>
<optgroup :label="$t('light-themes')">
<option v-for="x in lightThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
</optgroup>
@ -16,7 +35,7 @@
<label>
<ui-select v-model="dark" :placeholder="$t('dark-theme')">
<span slot="label"><fa :icon="faMoon"/> {{ $t('dark-theme') }}</span>
<template #label><fa :icon="faMoon"/> {{ $t('dark-theme') }}</template>
<optgroup :label="$t('dark-themes')">
<option v-for="x in darkThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
</optgroup>
@ -103,8 +122,8 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
import { lightTheme, darkTheme, builtinThemes, applyTheme, Theme } from '../../../theme';
import i18n from '../../../../i18n';
import { lightTheme, darkTheme, builtinThemes, applyTheme, Theme } from '../../../../theme';
import { Chrome } from 'vue-color';
import * as uuid from 'uuid';
import * as tinycolor from 'tinycolor2';
@ -195,7 +214,12 @@ export default Vue.extend({
text: tinycolor(typeof this.myThemeText == 'string' ? this.myThemeText : this.myThemeText.rgba).toRgbString()
}
};
}
},
darkmode: {
get() { return this.$store.state.device.darkmode; },
set(value) { this.$store.commit('device/set', { key: 'darkmode', value }); }
},
},
watch: {
@ -336,6 +360,216 @@ export default Vue.extend({
<style lang="stylus" scoped>
.nicnklzforebnpfgasiypmpdaaglujqm
> .dark
margin-top 48px
margin-bottom 110px
.toggleWrapper {
position: absolute;
top: 50%;
left: 50%;
overflow: hidden;
padding: 0 200px;
transform: translate3d(-50%, -50%, 0);
input {
position: absolute;
left: -99em;
}
}
.toggle {
cursor: pointer;
display: inline-block;
position: relative;
width: 90px;
height: 50px;
background-color: #83D8FF;
border-radius: 90px - 6;
transition: background-color 200ms cubic-bezier(0.445, 0.05, 0.55, 0.95) !important;
&:before {
content: 'Light';
position: absolute;
left: -60px;
top: 15px;
font-size: 18px;
color: var(--primary);
}
&:after {
content: 'Dark';
position: absolute;
right: -58px;
top: 15px;
font-size: 18px;
color: var(--text);
}
}
.toggle__handler {
display: inline-block;
position: relative;
z-index: 1;
top: 3px;
left: 3px;
width: 50px - 6;
height: 50px - 6;
background-color: #FFCF96;
border-radius: 50px;
box-shadow: 0 2px 6px rgba(0,0,0,.3);
transition: all 400ms cubic-bezier(0.68, -0.55, 0.265, 1.55) !important;
transform: rotate(-45deg);
.crater {
position: absolute;
background-color: #E8CDA5;
opacity: 0;
transition: opacity 200ms ease-in-out !important;
border-radius: 100%;
}
.crater--1 {
top: 18px;
left: 10px;
width: 4px;
height: 4px;
}
.crater--2 {
top: 28px;
left: 22px;
width: 6px;
height: 6px;
}
.crater--3 {
top: 10px;
left: 25px;
width: 8px;
height: 8px;
}
}
.star {
position: absolute;
background-color: #ffffff;
transition: all 300ms cubic-bezier(0.445, 0.05, 0.55, 0.95) !important;
border-radius: 50%;
}
.star--1 {
top: 10px;
left: 35px;
z-index: 0;
width: 30px;
height: 3px;
}
.star--2 {
top: 18px;
left: 28px;
z-index: 1;
width: 30px;
height: 3px;
}
.star--3 {
top: 27px;
left: 40px;
z-index: 0;
width: 30px;
height: 3px;
}
.star--4,
.star--5,
.star--6 {
opacity: 0;
transition: all 300ms 0 cubic-bezier(0.445, 0.05, 0.55, 0.95) !important;
}
.star--4 {
top: 16px;
left: 11px;
z-index: 0;
width: 2px;
height: 2px;
transform: translate3d(3px,0,0);
}
.star--5 {
top: 32px;
left: 17px;
z-index: 0;
width: 3px;
height: 3px;
transform: translate3d(3px,0,0);
}
.star--6 {
top: 36px;
left: 28px;
z-index: 0;
width: 2px;
height: 2px;
transform: translate3d(3px,0,0);
}
input:checked {
+ .toggle {
background-color: #749DD6;
&:before {
color: var(--text);
}
&:after {
color: var(--primary);
}
.toggle__handler {
background-color: #FFE5B5;
transform: translate3d(40px, 0, 0) rotate(0);
.crater { opacity: 1; }
}
.star--1 {
width: 2px;
height: 2px;
}
.star--2 {
width: 4px;
height: 4px;
transform: translate3d(-5px, 0, 0);
}
.star--3 {
width: 2px;
height: 2px;
transform: translate3d(-7px, 0, 0);
}
.star--4,
.star--5,
.star--6 {
opacity: 1;
transform: translate3d(0,0,0);
}
.star--4 {
transition: all 300ms 200ms cubic-bezier(0.445, 0.05, 0.55, 0.95) !important;
}
.star--5 {
transition: all 300ms 300ms cubic-bezier(0.445, 0.05, 0.55, 0.95) !important;
}
.star--6 {
transition: all 300ms 400ms cubic-bezier(0.445, 0.05, 0.55, 0.95) !important;
}
}
}
> a
display block
margin-top -16px

View File

@ -1,20 +1,20 @@
<template>
<form class="mk-signin" :class="{ signing }" @submit.prevent="onSubmit">
<div class="avatar" :style="{ backgroundImage: user ? `url('${ user.avatarUrl }')` : null }" v-show="withAvatar"></div>
<ui-input v-model="username" type="text" pattern="^[a-zA-Z0-9_]+$" spellcheck="false" autofocus required @input="onUsernameChange" styl="fill">
<ui-input v-model="username" type="text" pattern="^[a-zA-Z0-9_]+$" spellcheck="false" autofocus required @input="onUsernameChange">
<span>{{ $t('username') }}</span>
<span slot="prefix">@</span>
<span slot="suffix">@{{ host }}</span>
<template #prefix>@</template>
<template #suffix>@{{ host }}</template>
</ui-input>
<ui-input v-model="password" type="password" :with-password-toggle="true" required styl="fill">
<ui-input v-model="password" type="password" :with-password-toggle="true" required>
<span>{{ $t('password') }}</span>
<span slot="prefix"><fa icon="lock"/></span>
<template #prefix><fa icon="lock"/></template>
</ui-input>
<ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required styl="fill">
<ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required>
<span>{{ $t('@.2fa') }}</span>
<span slot="prefix"><fa icon="gavel"/></span>
<template #prefix><fa icon="gavel"/></template>
</ui-input>
<ui-button type="submit" :disabled="signing">{{ signing ? $t('signing-in') : $t('signin') }}</ui-button>
<ui-button type="submit" :disabled="signing">{{ signing ? $t('signing-in') : $t('@.signin') }}</ui-button>
<p v-if="meta && meta.enableTwitterIntegration" style="margin: 8px 0;"><a :href="`${apiUrl}/signin/twitter`">{{ $t('signin-with-twitter') }}</a></p>
<p v-if="meta && meta.enableGithubIntegration" style="margin: 8px 0;"><a :href="`${apiUrl}/signin/github`">{{ $t('signin-with-github') }}</a></p>
<p v-if="meta && meta.enableDiscordIntegration" style="margin: 8px 0;"><a :href="`${apiUrl}/signin/discord`">{{ $t('signin-with-discord') /* TODO: Make these layouts better */ }}</a></p>

View File

@ -3,37 +3,39 @@
<template v-if="meta">
<ui-input v-if="meta.disableRegistration" v-model="invitationCode" type="text" :autocomplete="Math.random()" spellcheck="false" required styl="fill">
<span>{{ $t('invitation-code') }}</span>
<span slot="prefix"><fa icon="id-card-alt"/></span>
<p slot="desc" v-html="this.$t('invitation-info').replace('{}', 'mailto:' + meta.maintainer.email)"></p>
<template #prefix><fa icon="id-card-alt"/></template>
<template #desc v-html="this.$t('invitation-info').replace('{}', 'mailto:' + meta.maintainer.email)"></template>
</ui-input>
<ui-input v-model="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :autocomplete="Math.random()" spellcheck="false" required @input="onChangeUsername" styl="fill">
<span>{{ $t('username') }}</span>
<span slot="prefix">@</span>
<span slot="suffix">@{{ host }}</span>
<p slot="desc" v-if="usernameState == 'wait'" style="color:#999"><fa icon="spinner" pulse fixed-width/> {{ $t('checking') }}</p>
<p slot="desc" v-if="usernameState == 'ok'" style="color:#3CB7B5"><fa icon="check" fixed-width/> {{ $t('available') }}</p>
<p slot="desc" v-if="usernameState == 'unavailable'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> {{ $t('unavailable') }}</p>
<p slot="desc" v-if="usernameState == 'error'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> {{ $t('error') }}</p>
<p slot="desc" v-if="usernameState == 'invalid-format'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> {{ $t('invalid-format') }}</p>
<p slot="desc" v-if="usernameState == 'min-range'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> {{ $t('too-short') }}</p>
<p slot="desc" v-if="usernameState == 'max-range'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> {{ $t('too-long') }}</p>
<template #prefix>@</template>
<template #suffix>@{{ host }}</template>
<template #desc>
<span v-if="usernameState == 'wait'" style="color:#999"><fa icon="spinner" pulse fixed-width/> {{ $t('checking') }}</span>
<span v-if="usernameState == 'ok'" style="color:#3CB7B5"><fa icon="check" fixed-width/> {{ $t('available') }}</span>
<span v-if="usernameState == 'unavailable'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> {{ $t('unavailable') }}</span>
<span v-if="usernameState == 'error'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> {{ $t('error') }}</span>
<span v-if="usernameState == 'invalid-format'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> {{ $t('invalid-format') }}</span>
<span v-if="usernameState == 'min-range'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> {{ $t('too-short') }}</span>
<span v-if="usernameState == 'max-range'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> {{ $t('too-long') }}</span>
</template>
</ui-input>
<ui-input v-model="password" type="password" :autocomplete="Math.random()" required @input="onChangePassword" :with-password-meter="true" styl="fill">
<span>{{ $t('password') }}</span>
<span slot="prefix"><fa icon="lock"/></span>
<div slot="desc">
<template #prefix><fa icon="lock"/></template>
<template #desc>
<p v-if="passwordStrength == 'low'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> {{ $t('weak-password') }}</p>
<p v-if="passwordStrength == 'medium'" style="color:#3CB7B5"><fa icon="check" fixed-width/> {{ $t('normal-password') }}</p>
<p v-if="passwordStrength == 'high'" style="color:#3CB7B5"><fa icon="check" fixed-width/> {{ $t('strong-password') }}</p>
</div>
</template>
</ui-input>
<ui-input v-model="retypedPassword" type="password" :autocomplete="Math.random()" required @input="onChangePasswordRetype" styl="fill">
<span>{{ $t('password') }} ({{ $t('retype') }})</span>
<span slot="prefix"><fa icon="lock"/></span>
<div slot="desc">
<template #prefix><fa icon="lock"/></template>
<template #desc>
<p v-if="passwordRetypeState == 'match'" style="color:#3CB7B5"><fa icon="check" fixed-width/> {{ $t('password-matched') }}</p>
<p v-if="passwordRetypeState == 'not-match'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> {{ $t('password-not-matched') }}</p>
</div>
</template>
</ui-input>
<div v-if="meta.enableRecaptcha" class="g-recaptcha" :data-sitekey="meta.recaptchaSiteKey" style="margin: 16px 0;"></div>
<ui-button type="submit">{{ $t('create') }}</ui-button>
@ -148,7 +150,7 @@ export default Vue.extend({
password: this.password
}).then(res => {
localStorage.setItem('i', res.i);
location.reload();
location.href = '/';
});
}).catch(() => {
alert(this.$t('some-error'));

View File

@ -1,5 +1,5 @@
<template>
<div class="ui-card" :class="{ shadow: $store.state.settings.useShadow }">
<div class="ui-card" :class="{ shadow: $store.state.device.useShadow, round: $store.state.device.roundedCorners }">
<header>
<slot name="title"></slot>
</header>
@ -25,7 +25,9 @@ export default Vue.extend({
max-width 850px
color var(--faceText)
background var(--face)
border-radius var(--round)
&.round
border-radius 6px
&.shadow
box-shadow 0 3px 1px -2px rgba(#000, 0.2), 0 2px 2px 0 rgba(#000, 0.14), 0 1px 5px 0 rgba(#000, 0.12)
@ -56,4 +58,12 @@ export default Vue.extend({
margin-bottom 16px
font-weight bold
color var(--faceText)
> section
margin 16px 0
> header
font-weight bold
color var(--text)
</style>

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