Compare commits

..

236 Commits

Author SHA1 Message Date
dc80d5d376 10.59.4 2018-12-02 07:08:26 +09:00
d3544f9637 Update README.md [AUTOGEN] (#3466) 2018-12-02 07:05:22 +09:00
864b6ad1bd Resolve #1826 2018-12-02 07:02:08 +09:00
c58027e521 [MFM] Better hashtag detection 2018-12-02 06:53:57 +09:00
10fb399588 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-12-02 06:44:25 +09:00
10f466c895 Improve performance 2018-12-02 06:44:18 +09:00
32068b4bcc Update README.md [AUTOGEN] (#3465) 2018-12-02 06:16:24 +09:00
8bc5febe66 [Client] Add missing icon (#3464) 2018-12-02 03:43:05 +09:00
20335e23f9 Resolve external recommended users (#3462)
* Resolve external recommended users

* Skip unresolvable users

* Fix indent

* Use original for unresolvable users
2018-12-02 03:42:45 +09:00
fe707f88a4 [MFM] Better MFM parsing 2018-12-01 10:40:09 +09:00
9b23ebd4a3 🎨 2018-12-01 09:45:48 +09:00
bea450cc2c 10.59.3 2018-12-01 08:00:25 +09:00
e80709f7aa Disable update notification 2018-12-01 07:59:15 +09:00
cb71f92f42 [ImgBot] Optimize images (#3455)
*Total -- 1,383.25kb -> 1,231.27kb (10.99%)

/assets/apple-touch-icon.png -- 4.72kb -> 2.51kb (46.79%)
/assets/icons/256.png -- 4.72kb -> 2.51kb (46.79%)
/assets/title.png -- 6.63kb -> 3.80kb (42.73%)
/assets/favicon/favicon.png -- 6.83kb -> 3.93kb (42.45%)
/assets/icons/192.png -- 3.49kb -> 2.02kb (42.08%)
/assets/icons/128.png -- 2.29kb -> 1.50kb (34.81%)
/assets/about/ui.png -- 125.21kb -> 94.85kb (24.25%)
/assets/ai-orig.png -- 255.55kb -> 199.67kb (21.86%)
/assets/icons/64.png -- 1.21kb -> 0.99kb (18.34%)
/assets/about/drive.png -- 110.33kb -> 94.20kb (14.62%)
/assets/about/post.png -- 344.52kb -> 316.57kb (8.11%)
/assets/ai.png -- 243.43kb -> 234.93kb (3.49%)
/src/client/assets/pointer.png -- 274.33kb -> 273.80kb (0.19%)
2018-12-01 07:55:34 +09:00
2ca5348560 Fix "Mi"/"Misskey" logos (#3400)
* Fix mi.svg

* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload
2018-12-01 07:52:15 +09:00
c8e98fdf8e Update vue-js-modal requirement from 1.3.26 to 1.3.27 (#3425)
Updates the requirements on [vue-js-modal](https://github.com/euvl/vue-js-modal) to permit the latest version.
- [Release notes](https://github.com/euvl/vue-js-modal/releases)
- [Commits](https://github.com/euvl/vue-js-modal/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-01 07:44:30 +09:00
0bfa041026 Merge pull request #3435 from syuilo/l10n_develop
New Crowdin translations
2018-12-01 07:20:03 +09:00
33bf474a1e Update @types/file-type requirement from 5.2.1 to 5.2.2 (#3450)
Updates the requirements on [@types/file-type](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>
2018-12-01 07:19:39 +09:00
53c559c001 Allow hyphens in the middle of remote usernames (#3440)
* Allow hyphens in the middle of remote usernames

refs: d797c29db462de4a3d69a5077a1ae4d03195b6f2

* Make options fallback better

* Make options flat
2018-12-01 07:19:17 +09:00
1c99ef454b Update webpack requirement from 4.26.0 to 4.26.1 (#3453)
Updates the requirements on [webpack](https://github.com/webpack/webpack) to permit the latest version.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/commits/v4.26.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-01 07:16:53 +09:00
cf4cecd4df Fix media video (#3452)
* Fix: Always show nsfw

* [Client] Add missing video play icon
2018-12-01 07:16:28 +09:00
6a8835b923 Exclude remote user or myself from talk user suggestions (#3449) 2018-12-01 07:15:55 +09:00
f2b1cf92e1 AP CW (#3448) 2018-12-01 07:15:10 +09:00
6b79618e74 New translations ja-JP.yml (Polish) 2018-12-01 02:22:34 +09:00
3db414add4 Use for-of instead of map
return values are not being used
2018-11-30 23:30:28 +09:00
9ef641b403 Remove consecutive blank line 2018-11-30 23:07:21 +09:00
6fa7819a44 Fix #3442 (#3443) 2018-11-30 18:13:55 +09:00
59a1b9adbe Trim notifications text (#3438)
* Trim notifications

* Remove needless colons

* Use single quote

* 🎨
2018-11-30 09:34:37 +09:00
3fbc7094f6 New translations ja-JP.yml (Korean) 2018-11-30 07:52:03 +09:00
56c6227bc2 New translations ja-JP.yml (English) 2018-11-30 05:02:18 +09:00
ee82f99f5a Better limit 2018-11-30 00:45:02 +09:00
72d9a46156 10.59.2 2018-11-30 00:36:02 +09:00
683a85ecc0 Fix SMTP (#3436) 2018-11-30 00:35:17 +09:00
89047fd66d 10.59.1 2018-11-30 00:15:02 +09:00
789de130a2 New translations ja-JP.yml (Norwegian) 2018-11-30 00:14:31 +09:00
46c026ce70 New translations ja-JP.yml (Dutch) 2018-11-30 00:14:24 +09:00
82290f6e4e New translations ja-JP.yml (Japanese, Kansai) 2018-11-30 00:14:17 +09:00
8729525f95 New translations ja-JP.yml (Spanish) 2018-11-30 00:14:09 +09:00
df0115ffe8 New translations ja-JP.yml (Russian) 2018-11-30 00:14:04 +09:00
0275b4fc9e New translations ja-JP.yml (Portuguese) 2018-11-30 00:13:57 +09:00
9982fd71ba New translations ja-JP.yml (Polish) 2018-11-30 00:13:49 +09:00
081060b7db New translations ja-JP.yml (Korean) 2018-11-30 00:13:45 +09:00
0de64f1fc7 New translations ja-JP.yml (Italian) 2018-11-30 00:13:37 +09:00
f0508c0a90 New translations ja-JP.yml (German) 2018-11-30 00:13:32 +09:00
b51ae1dfaa New translations ja-JP.yml (French) 2018-11-30 00:13:24 +09:00
6e7233d41b New translations ja-JP.yml (English) 2018-11-30 00:13:19 +09:00
8ca27a4480 Fix #3432 2018-11-30 00:13:13 +09:00
418041a56e New translations ja-JP.yml (Chinese Simplified) 2018-11-30 00:13:13 +09:00
17d20f5a18 New translations ja-JP.yml (Catalan) 2018-11-30 00:13:07 +09:00
77d2d84e05 Fix #3434 2018-11-30 00:04:28 +09:00
3bde4285eb Fix SMTP (#3433)
* Fix: SMTP local relay

* Fix SMTP SSL description

* ✌️
2018-11-30 00:03:28 +09:00
15efbfb244 Fix #3430 2018-11-29 22:05:11 +09:00
55a57db958 Show current selected language (#3429) 2018-11-29 21:56:53 +09:00
91f624c900 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-11-29 20:40:03 +09:00
d753489e49 10.59.0 2018-11-29 20:39:56 +09:00
36dd7c82db Merge pull request #3394 from syuilo/l10n_develop
New Crowdin translations
2018-11-29 20:38:43 +09:00
b00db74216 Add korean 2018-11-29 20:38:19 +09:00
cf9f85eb2a メールサーバーの設定がオフの場合はメール設定を表示しないように 2018-11-29 20:33:31 +09:00
bfa8414289 New translations ja-JP.yml (English) 2018-11-29 20:32:43 +09:00
58dc9c9544 New translations ja-JP.yml (Norwegian) 2018-11-29 20:24:05 +09:00
ba95ce18a8 New translations ja-JP.yml (Dutch) 2018-11-29 20:23:58 +09:00
ac10c40f31 New translations ja-JP.yml (Japanese, Kansai) 2018-11-29 20:23:51 +09:00
de8b40c80f New translations ja-JP.yml (Spanish) 2018-11-29 20:23:45 +09:00
60fe69728d New translations ja-JP.yml (Russian) 2018-11-29 20:23:39 +09:00
557607e842 New translations ja-JP.yml (Portuguese) 2018-11-29 20:23:34 +09:00
40ac9de728 New translations ja-JP.yml (Polish) 2018-11-29 20:23:26 +09:00
a725cd1946 New translations ja-JP.yml (Korean) 2018-11-29 20:23:21 +09:00
b648706756 New translations ja-JP.yml (Italian) 2018-11-29 20:23:15 +09:00
20f2e9fc6d New translations ja-JP.yml (German) 2018-11-29 20:23:10 +09:00
858ced0a53 New translations ja-JP.yml (French) 2018-11-29 20:23:04 +09:00
c9ca8f777f New translations ja-JP.yml (English) 2018-11-29 20:22:57 +09:00
0d0be31527 New translations ja-JP.yml (Chinese Simplified) 2018-11-29 20:22:52 +09:00
96305a088c New translations ja-JP.yml (Catalan) 2018-11-29 20:22:47 +09:00
22e30b44b9 Make require password to update email 2018-11-29 20:19:02 +09:00
48d0e2fa5f [MFM] Improve hashtag detection 2018-11-29 20:12:37 +09:00
0489291815 Refactor 2018-11-29 20:09:41 +09:00
7a412500e1 [Client] Fix #3427 2018-11-29 20:07:31 +09:00
dffaa72a88 New translations ja-JP.yml (Norwegian) 2018-11-29 16:34:41 +09:00
152d61f906 New translations ja-JP.yml (Dutch) 2018-11-29 16:34:29 +09:00
b44ded5fc9 New translations ja-JP.yml (Japanese, Kansai) 2018-11-29 16:34:21 +09:00
99d77cc843 New translations ja-JP.yml (Spanish) 2018-11-29 16:34:11 +09:00
bc385eec2d New translations ja-JP.yml (Russian) 2018-11-29 16:33:58 +09:00
2c6b9403b3 New translations ja-JP.yml (Portuguese) 2018-11-29 16:33:46 +09:00
89cdc59fe5 New translations ja-JP.yml (Polish) 2018-11-29 16:33:35 +09:00
3e04e1ccea New translations ja-JP.yml (Korean) 2018-11-29 16:33:27 +09:00
25f491a65f New translations ja-JP.yml (Italian) 2018-11-29 16:33:17 +09:00
7fdde157e0 New translations ja-JP.yml (German) 2018-11-29 16:33:10 +09:00
27f30a449a New translations ja-JP.yml (French) 2018-11-29 16:33:02 +09:00
dc66a0cd66 New translations ja-JP.yml (English) 2018-11-29 16:32:54 +09:00
f302ecd1e2 New translations ja-JP.yml (Chinese Simplified) 2018-11-29 16:32:46 +09:00
1afc2a227a New translations ja-JP.yml (Catalan) 2018-11-29 16:32:38 +09:00
ab594d1dfe Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-11-29 16:24:05 +09:00
647d32f506 🎨 2018-11-29 16:24:02 +09:00
1bc109b42c Implement email config 2018-11-29 16:23:45 +09:00
6e02e2a6b3 New translations ja-JP.yml (Norwegian) 2018-11-29 11:14:35 +09:00
3372baad6c New translations ja-JP.yml (Dutch) 2018-11-29 11:14:26 +09:00
e9b3e3877a New translations ja-JP.yml (Japanese, Kansai) 2018-11-29 11:14:16 +09:00
c84c5fbae7 New translations ja-JP.yml (Spanish) 2018-11-29 11:14:08 +09:00
2e7ab91f48 New translations ja-JP.yml (Russian) 2018-11-29 11:13:59 +09:00
92c41c003a New translations ja-JP.yml (Portuguese) 2018-11-29 11:13:51 +09:00
53688cdcdc New translations ja-JP.yml (Polish) 2018-11-29 11:13:44 +09:00
70f864ea8b New translations ja-JP.yml (Korean) 2018-11-29 11:13:34 +09:00
5dd94e551a New translations ja-JP.yml (Italian) 2018-11-29 11:13:26 +09:00
afc1ed9897 New translations ja-JP.yml (German) 2018-11-29 11:13:19 +09:00
df7562f98d New translations ja-JP.yml (French) 2018-11-29 11:13:10 +09:00
1c7e799164 New translations ja-JP.yml (English) 2018-11-29 11:13:02 +09:00
107a3f99f4 New translations ja-JP.yml (Chinese Simplified) 2018-11-29 11:12:54 +09:00
7e3cf4b4ad New translations ja-JP.yml (Catalan) 2018-11-29 11:12:45 +09:00
afdb23ff57 Feature / Configurable web search engine (#3406)
* configurable web search engine

* add webSearchEngine config in mobile ui

* add webSearchEngine config in desktop ui

* add webSearchEngine config

* add messages for web search engine config

* correct locale
2018-11-29 11:05:17 +09:00
0ce64f8c33 10.58.2 2018-11-29 06:34:07 +09:00
2cd6ccb85c Fix test 2018-11-29 06:33:23 +09:00
3dcf5374c2 Mark chart apis as stable 2018-11-29 06:06:07 +09:00
1c7d5f3f64 Update ts-loader requirement from 5.3.0 to 5.3.1 (#3426)
Updates the requirements on [ts-loader](https://github.com/TypeStrong/ts-loader) to permit the latest version.
- [Release notes](https://github.com/TypeStrong/ts-loader/releases)
- [Changelog](https://github.com/TypeStrong/ts-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/TypeStrong/ts-loader/commits/v5.3.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-29 05:31:41 +09:00
bb0cb0a866 Fix bad style in deck column options and other things (#3412)
* Fix wrong text color in empty timeline (#3268)

* Whoops

* Fix wrong text color in deck options (#3268)

* Some padding to make it look less ugly

* Fix wrong text color in user lists menu (#3268)

* Fix wrong text color of footer on welcome screen (mobile) (#3268)

* Fix misalignment of icons and text in menu (mobile) (#3289)

* Fix wrong text color in empty timeline (mobile) (#3268)
2018-11-29 05:02:35 +09:00
362dc29057 Update profile-editor.vue (#3424) 2018-11-29 04:54:36 +09:00
8af0218e4c ✌️🤔✌️ 2018-11-28 18:57:22 +09:00
09af9968b5 🎨 2018-11-28 16:29:18 +09:00
7d0b819c5a Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-11-28 16:19:09 +09:00
4bbb7eded3 Cookieを使わないように 2018-11-28 16:19:02 +09:00
72ea9e5522 Update systeminformation requirement from 3.49.3 to 3.51.3 (#3419)
Updates the requirements on [systeminformation](https://github.com/sebhildebrandt/systeminformation) to permit the latest version.
- [Release notes](https://github.com/sebhildebrandt/systeminformation/releases)
- [Changelog](https://github.com/sebhildebrandt/systeminformation/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sebhildebrandt/systeminformation/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-28 16:01:16 +09:00
743e5d947d Update autobind-decorator requirement from 2.2.1 to 2.3.1 (#3418)
Updates the requirements on [autobind-decorator](https://github.com/andreypopp/autobind-decorator) to permit the latest version.
- [Release notes](https://github.com/andreypopp/autobind-decorator/releases)
- [Changelog](https://github.com/andreypopp/autobind-decorator/blob/master/CHANGELOG.md)
- [Commits](https://github.com/andreypopp/autobind-decorator/commits/v2.3.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-28 16:00:58 +09:00
f257853906 Update signin.ts 2018-11-28 05:27:34 +09:00
32983d3829 New translations ja-JP.yml (Polish) 2018-11-28 04:42:11 +09:00
bdef33e88d Add theme_color and 512x512 icon to app manifest (#3417)
As per Chrome Lighthouse PWA suggestions.
2018-11-28 04:38:50 +09:00
a4a4194586 New translations ja-JP.yml (Polish) 2018-11-28 04:32:18 +09:00
e36c538dc0 New translations ja-JP.yml (Polish) 2018-11-28 04:22:13 +09:00
982a218bf2 New translations ja-JP.yml (Chinese Simplified) 2018-11-27 21:04:16 +09:00
f7aeca4c7c New translations ja-JP.yml (Korean) 2018-11-27 20:08:23 +09:00
4b81bc864f New translations ja-JP.yml (Korean) 2018-11-27 19:59:43 +09:00
a52cc62c04 New translations ja-JP.yml (Korean) 2018-11-27 19:42:47 +09:00
81f69bff9e New translations ja-JP.yml (Korean) 2018-11-27 19:33:25 +09:00
d9b2aa1880 New translations ja-JP.yml (Korean) 2018-11-27 19:13:03 +09:00
3bddd986a0 New translations ja-JP.yml (Korean) 2018-11-27 18:57:30 +09:00
d00712d817 New translations ja-JP.yml (Korean) 2018-11-27 18:43:54 +09:00
d756fdbebf New translations ja-JP.yml (Russian) 2018-11-27 17:00:13 +09:00
b2f2c74605 New translations ja-JP.yml (Russian) 2018-11-27 16:53:36 +09:00
1407cd71b5 New translations ja-JP.yml (Russian) 2018-11-27 16:32:45 +09:00
3dd3a7238d New translations ja-JP.yml (Russian) 2018-11-27 16:22:11 +09:00
afc834ae4b New translations ja-JP.yml (Russian) 2018-11-27 16:12:28 +09:00
357f190ce3 New translations ja-JP.yml (Russian) 2018-11-27 16:02:30 +09:00
ab92762320 Update webfinger.js requirement from 2.6.6 to 2.7.0 (#3414)
Updates the requirements on [webfinger.js](https://github.com/silverbucket/webfinger.js) to permit the latest version.
- [Release notes](https://github.com/silverbucket/webfinger.js/releases)
- [Changelog](https://github.com/silverbucket/webfinger.js/blob/master/RELEASE_CHECKLIST)
- [Commits](https://github.com/silverbucket/webfinger.js/commits/v2.7.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-27 15:49:50 +09:00
04942c8477 Update README.md [AUTOGEN] (#3415) 2018-11-27 15:49:39 +09:00
9c60f51e0d New translations ja-JP.yml (Russian) 2018-11-27 15:42:01 +09:00
956ae2ac46 New translations ja-JP.yml (Korean) 2018-11-27 13:01:57 +09:00
f2ed813337 New translations ja-JP.yml (Korean) 2018-11-27 12:52:16 +09:00
7d9a7d1a3c New translations ja-JP.yml (Korean) 2018-11-27 12:42:09 +09:00
2f67b6fb47 New translations ja-JP.yml (Korean) 2018-11-27 12:31:55 +09:00
7444dde93e New translations ja-JP.yml (Korean) 2018-11-27 12:22:14 +09:00
e62fad7bc6 Update README.md [AUTOGEN] (#3413) 2018-11-27 03:08:08 +09:00
2c6bad2501 [MFM] Improve hashtag detection 2018-11-27 02:08:51 +09:00
6952bb2eca New translations ja-JP.yml (Norwegian) 2018-11-27 01:26:59 +09:00
610972dbde New translations ja-JP.yml (Dutch) 2018-11-27 01:26:54 +09:00
926049055a New translations ja-JP.yml (Japanese, Kansai) 2018-11-27 01:26:49 +09:00
db5f6b60df New translations ja-JP.yml (Spanish) 2018-11-27 01:26:44 +09:00
7be7b9d9fd New translations ja-JP.yml (Russian) 2018-11-27 01:26:39 +09:00
366855c4cc New translations ja-JP.yml (Portuguese) 2018-11-27 01:26:35 +09:00
e950beeeab New translations ja-JP.yml (Polish) 2018-11-27 01:26:28 +09:00
5515b39f6c New translations ja-JP.yml (Korean) 2018-11-27 01:26:23 +09:00
f5d0599e4d New translations ja-JP.yml (Italian) 2018-11-27 01:26:17 +09:00
8fd7914f0f New translations ja-JP.yml (German) 2018-11-27 01:26:13 +09:00
24ef98eb01 10.58.1 2018-11-27 01:26:07 +09:00
b3dd6cf001 New translations ja-JP.yml (French) 2018-11-27 01:26:07 +09:00
6d4b474cb1 New translations ja-JP.yml (English) 2018-11-27 01:26:03 +09:00
0a8876a3ae New translations ja-JP.yml (Chinese Simplified) 2018-11-27 01:25:59 +09:00
9a83a48331 New translations ja-JP.yml (Catalan) 2018-11-27 01:25:54 +09:00
7ed50b90bd [Client] Resolve #3323 2018-11-27 01:21:16 +09:00
b6fd5d7282 No caching /api/ (#3411) 2018-11-27 01:16:25 +09:00
33243e7176 Fix #3409 (#3410)
* Update Dockerfile

* Update Dockerfile
2018-11-27 00:32:56 +09:00
e8439679a5 Add yarn.lock to .gitignore (#3408) 2018-11-26 21:55:16 +09:00
06124dbbd5 Return 404 for undefined .well-known (#3404) 2018-11-26 04:49:24 +09:00
857940f402 10.58.0 2018-11-26 04:33:39 +09:00
bcb04924ff Image for web publish (#3402)
* Image for Web

* Add comment

* Make main to original
2018-11-26 04:25:48 +09:00
2b6aeb9ebc New translations ja-JP.yml (Korean) 2018-11-25 18:55:39 +09:00
648e4538fb New translations ja-JP.yml (Korean) 2018-11-25 18:41:57 +09:00
cd4b3777da New translations ja-JP.yml (Korean) 2018-11-25 18:31:44 +09:00
4acf506b7e New translations ja-JP.yml (Korean) 2018-11-25 18:22:00 +09:00
543ca348bc New translations ja-JP.yml (Korean) 2018-11-25 18:11:50 +09:00
03375412f1 New translations ja-JP.yml (Korean) 2018-11-25 18:01:59 +09:00
0c7a9b6827 New translations ja-JP.yml (Korean) 2018-11-25 17:52:07 +09:00
c54bc3c176 New translations ja-JP.yml (Korean) 2018-11-25 17:42:22 +09:00
90973bedf4 New translations ja-JP.yml (Korean) 2018-11-25 17:32:03 +09:00
757f70162e New translations ja-JP.yml (Korean) 2018-11-25 17:21:56 +09:00
3047410b35 New translations ja-JP.yml (Korean) 2018-11-25 17:11:58 +09:00
9d0d4c5eae New translations ja-JP.yml (Korean) 2018-11-25 16:41:50 +09:00
cab5b4d601 New translations ja-JP.yml (Korean) 2018-11-25 16:31:55 +09:00
517b6e25d9 New translations ja-JP.yml (Korean) 2018-11-25 16:21:57 +09:00
94d394c29e New translations ja-JP.yml (Korean) 2018-11-25 16:11:51 +09:00
a52099d175 New translations ja-JP.yml (Korean) 2018-11-25 16:01:56 +09:00
f1cb7b862d New translations ja-JP.yml (Korean) 2018-11-25 15:51:50 +09:00
0863e5d379 🎨 2018-11-25 13:47:42 +09:00
55dcd25df1 Improve MFM 2018-11-25 13:36:52 +09:00
f3155ea180 [MFM] Add center syntax
Resolve #1775
2018-11-25 13:36:40 +09:00
2c5162671c Improve MFM 2018-11-25 13:23:18 +09:00
fc8aeb5a66 [Client] Fix bug 2018-11-25 13:21:47 +09:00
995cf503eb Add MFM test 2018-11-25 13:21:39 +09:00
0e49c11a4c Refactoring 2018-11-25 13:19:33 +09:00
0367c37b0a 10.57.3 2018-11-25 05:17:45 +09:00
e0b9fe5e5d 🎨 2018-11-25 05:16:39 +09:00
a4726e683b 🎨 2018-11-25 05:10:48 +09:00
3b10e93efe [MFM] Better hashtag parsing 2018-11-25 04:44:42 +09:00
02b07c1b5b Update note-mixin.ts 2018-11-25 04:30:32 +09:00
5e54751bd4 Refactor 2018-11-25 04:26:07 +09:00
34f1dc238d New translations ja-JP.yml (Korean) 2018-11-25 02:21:48 +09:00
3c0f4bdf35 New translations ja-JP.yml (Korean) 2018-11-25 02:11:52 +09:00
a68d370ad0 New translations ja-JP.yml (Korean) 2018-11-25 02:01:52 +09:00
debb27ed30 New translations ja-JP.yml (Korean) 2018-11-25 01:52:36 +09:00
97fbb857fb New translations ja-JP.yml (Korean) 2018-11-25 01:41:56 +09:00
93f13ffc8e Fix: url-preview (#3397) 2018-11-25 01:39:22 +09:00
4d9dc93d46 New translations ja-JP.yml (Korean) 2018-11-25 01:32:05 +09:00
22cd4c5d16 New translations ja-JP.yml (Korean) 2018-11-25 01:22:01 +09:00
6883994b22 New translations ja-JP.yml (Korean) 2018-11-25 00:42:19 +09:00
852a312753 New translations ja-JP.yml (Korean) 2018-11-25 00:32:57 +09:00
afea0baaa8 New translations ja-JP.yml (Korean) 2018-11-25 00:22:08 +09:00
2c477660a0 New translations ja-JP.yml (Korean) 2018-11-25 00:12:06 +09:00
16a1cd3c9d New translations ja-JP.yml (Korean) 2018-11-25 00:02:20 +09:00
db23dd2e01 New translations ja-JP.yml (Korean) 2018-11-24 23:51:44 +09:00
eaa1ded5ba New translations ja-JP.yml (Korean) 2018-11-24 23:48:03 +09:00
393e14196a New translations ja-JP.yml (Korean) 2018-11-24 23:41:59 +09:00
8b005307ea New translations ja-JP.yml (Korean) 2018-11-24 23:32:15 +09:00
c915ac0e72 New translations ja-JP.yml (Korean) 2018-11-24 23:22:10 +09:00
1752bb896e New translations ja-JP.yml (Korean) 2018-11-24 23:13:01 +09:00
9c8fa026f3 New translations ja-JP.yml (English) 2018-11-24 23:12:56 +09:00
e93db6324a New translations ja-JP.yml (Korean) 2018-11-24 23:03:31 +09:00
a10708bffa New translations ja-JP.yml (English) 2018-11-24 23:03:26 +09:00
e65a7a142f New translations ja-JP.yml (Korean) 2018-11-24 22:52:16 +09:00
72e0b2d470 New translations ja-JP.yml (English) 2018-11-24 22:52:12 +09:00
43fb0f36a7 New translations ja-JP.yml (Korean) 2018-11-24 22:43:27 +09:00
cf3533221b New translations ja-JP.yml (Korean) 2018-11-24 22:32:16 +09:00
de522ebe14 New translations ja-JP.yml (Korean) 2018-11-24 22:22:02 +09:00
2ace891dde New translations ja-JP.yml (Korean) 2018-11-24 22:11:52 +09:00
e212d9f991 New translations ja-JP.yml (Korean) 2018-11-24 19:32:05 +09:00
739f3f84d0 New translations ja-JP.yml (Korean) 2018-11-24 19:22:14 +09:00
5e206c86be New translations ja-JP.yml (French) 2018-11-24 19:22:08 +09:00
1ab37011ea New translations ja-JP.yml (French) 2018-11-24 19:12:20 +09:00
b6e02f63cd New translations ja-JP.yml (French) 2018-11-24 19:02:11 +09:00
17d1a1d7bd New translations ja-JP.yml (Korean) 2018-11-24 12:12:00 +09:00
129 changed files with 2793 additions and 2139 deletions

1
.gitignore vendored
View File

@ -17,3 +17,4 @@ api-docs.json
/mongo
/elasticsearch
*.code-workspace
yarn.lock

View File

@ -8,18 +8,20 @@ WORKDIR /misskey
FROM base AS builder
RUN unlink /usr/bin/free
RUN apk add --no-cache \
gcc \
g++ \
libc-dev \
python \
autoconf \
automake \
file \
g++ \
gcc \
libc-dev \
libtool \
make \
nasm \
pkgconfig \
libtool \
procps \
python \
zlib-dev
RUN npm i -g node-gyp

View File

@ -73,46 +73,50 @@ Please see [Contribution guide](./CONTRIBUTING.md).
----------------------------------------------------------------
<!-- PATREON_START -->
<table><tr>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12190916/fb7fa7983c14425f890369535b1506a4/1?token-time=2145916800&token-hash=Zeh1u6l_Vmgoy8A1eT1Sltea-_SZSq8t8uOWDRZRh94%3D" alt="weep"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13376668/71f3cf87ec6c4393a44b1b9df5ee3d12/1?token-time=2145916800&token-hash=7pSmWqgMfMSJHVIEcNsuuQoKeU3TRluew5p0EGTzWA4%3D" alt="Arctic"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12731202/0995c46cdcb54153ab5f073f5869b70a/1?token-time=2145916800&token-hash=Yd60FK_SWfQO56SeiJpy1tDHOnCV4xdEywQe8gn5_Wo%3D" alt="negao"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/2?token-time=2145916800&token-hash=mgPdX9TqZxEg4TTPuc477dxhIgYk9246qafjWZEqZ7g%3D" alt="Melilot"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/3384329/8b713330cb27404ea6e9fac50ff96efe/1?token-time=2145916800&token-hash=0eu4-m1gTWA9PhptVZt6rdKcusqcD7RB87rJT23VVFI%3D" alt="べすれい"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1?token-time=2145916800&token-hash=GgJ_NmUB6_nnRNLVGUWjV-WX91On7BOu59LKncYV9fE%3D" alt="gutfuckllc"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/11357794/923ce94cd8c44ba788ee931907881839/1?token-time=2145916800&token-hash=I8lJVM8LeW6TSo5W6uIIRZ42cw83zp1wK_FsbzY0mcQ%3D" alt="mydarkstar"></td>
<td><img src="https://c8.patreon.com/2/100/12718187" alt="Peter G."></td>
</tr><tr>
<td><a href="https://www.patreon.com/weepjp">weep</a></td>
<td><a href="https://www.patreon.com/user?u=13376668">Arctic</a></td>
<td><a href="https://www.patreon.com/negao">negao</a></td>
<td><a href="https://www.patreon.com/user?u=12913507">Melilot</a></td>
<td><a href="https://www.patreon.com/user?u=3384329">べすれい</a></td>
<td><a href="https://www.patreon.com/gutfuckllc">gutfuckllc</a></td>
<td><a href="https://www.patreon.com/mydarkstar">mydarkstar</a></td>
<td><a href="https://www.patreon.com/user?u=12718187">Peter G.</a></td>
</tr></table>
<table><tr>
<td><img src="https://c8.patreon.com/2/100/12718187" alt="Peter G."></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13039004/509d0c412eb14ae08d6a812a3054f7d6/1?token-time=2145916800&token-hash=zwSu01tOtn5xTUucDZHuPsCxF2HBEMVs9ROJKTlEV_o%3D" alt="nemu"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/3?token-time=2145916800&token-hash=qsdn0-e6yLaLI6hUX9JAkyTR6a5UdnSp7T1foniBvGQ%3D" alt="YUKIMOCHI"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/8241184/39e18850e87a449e9c9a71acb3310ebd/2?token-time=2145916800&token-hash=iUXOQzRyJDv3PJxwS7Mjwg1459dzh2trOq6NFtXu_OM%3D" alt="Acid Chicken"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1?token-time=2145916800&token-hash=UERBN4OyP7Nh5XwwdDg0N0IE5cD6_qUQMO81Z5Wizso%3D" alt="Hiratake"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/10789744/97175095d8f04c0f86225ff47cb98d40/1?token-time=2145916800&token-hash=P4BIzCX2I1CkEP66ottfhsC8Wr6BUSamjA-vq3pLqFI%3D" alt="Naoki Hirayama"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=S1zP0QyLU52Dqq6dtc9qNYyWfW86XrYHiR4NMbeOrnA%3D" alt="dansup"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/619786/32cf01444db24e578cd1982c197f6fc6/1?token-time=2145916800&token-hash=tB1e_r8RlZ5sFL0KV_e8dugapxatNBRK1Z3h67TO1g8%3D" alt="Gargron"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/5731881/4b6038e6cda34c04b83a5fcce3806a93/1?token-time=2145916800&token-hash=VZUtwrjQa8Jml4twCjHYQQZ64wHEY4oIlGl7Kc-VYUQ%3D" alt="Nokotaro Takeda"></td>
</tr><tr>
<td><a href="https://www.patreon.com/user?u=12718187">Peter G.</a></td>
<td><a href="https://www.patreon.com/user?u=13039004">nemu</a></td>
<td><a href="https://www.patreon.com/yukimochi">YUKIMOCHI</a></td>
<td><a href="https://www.patreon.com/acid_chicken">Acid Chicken</a></td>
<td><a href="https://www.patreon.com/hiratake">Hiratake</a></td>
<td><a href="https://www.patreon.com/spinlock">Naoki Hirayama</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>
</tr></table>
<table><tr>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/619786/32cf01444db24e578cd1982c197f6fc6/1?token-time=2145916800&token-hash=tB1e_r8RlZ5sFL0KV_e8dugapxatNBRK1Z3h67TO1g8%3D" alt="Gargron"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/5731881/4b6038e6cda34c04b83a5fcce3806a93/1?token-time=2145916800&token-hash=VZUtwrjQa8Jml4twCjHYQQZ64wHEY4oIlGl7Kc-VYUQ%3D" alt="Nokotaro Takeda"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=tMosUojzUYJCH_3t--tvYA-SMCyrS__hzSndyaRSnbo%3D" alt="Takashi Shibuya"></td>
</tr><tr>
<td><a href="https://www.patreon.com/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:** Fri, 23 Nov 2018 14:09:04 UTC
**Last updated:** Sat, 01 Dec 2018 22:05:05 UTC
<!-- PATREON_END -->
:four_leaf_clover: Copyright

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 KiB

After

Width:  |  Height:  |  Size: 317 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 KiB

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 243 KiB

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 264 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -1,108 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
viewBox="0 0 135.46667 135.46667"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="favicon.svg"
inkscape:export-filename="C:\Users\syuilo\projects\misskey\assets\favicon\16.png"
inkscape:export-xdpi="3"
inkscape:export-ydpi="3">
version="1.1"
viewBox="0 0 135.46667 135.46667"
height="512"
width="512">
<defs
id="defs2">
<inkscape:path-effect
effect="simplify"
id="path-effect5115"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect5111"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect5104"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4142136"
inkscape:cx="15.466544"
inkscape:cy="235.92965"
inkscape:document-units="px"
inkscape:current-layer="g4502"
showgrid="true"
units="px"
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="false"
inkscape:snap-smooth-nodes="true"
inkscape:snap-center="true"
inkscape:snap-page="true"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="-8"
inkscape:window-y="1072"
inkscape:window-maximized="1"
inkscape:snap-object-midpoints="true"
inkscape:snap-midpoints="true"
inkscape:object-paths="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
objecttolerance="1"
guidetolerance="1"
inkscape:snap-nodes="false"
inkscape:snap-others="false">
<inkscape:grid
type="xygrid"
id="grid4504"
spacingx="4.2333334"
spacingy="4.2333334"
empcolor="#ff3fff"
empopacity="0.25098039"
empspacing="4" />
</sodipodi:namedview>
id="defs2" />
<metadata
id="metadata5">
<rdf:RDF>
@ -116,32 +25,27 @@
</rdf:RDF>
</metadata>
<g
inkscape:label="レイヤー 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-30.809093,-111.78601)">
style="fill:#2fa3bc;fill-opacity:1"
transform="translate(-30.809093,-111.78601)"
id="layer1">
<g
id="g4502"
transform="matrix(1.096096,0,0,1.096096,-2.960633,-44.023579)">
style="fill:#2fa3bc;fill-opacity:1"
transform="matrix(1.096096,0,0,1.096096,-2.960633,-44.023579)"
id="g4502">
<g
style="fill:#2fa1bb;fill-opacity:1"
id="g5125">
id="g5125"
transform="translate(-1.3333333e-6,-1.3439941e-6)"
style="fill:#2fa3bc;fill-opacity:1">
<g
transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)"
aria-label="Mi"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#2fa3bc;fill-opacity:1;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text4489"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#2fa1bb;fill-opacity:1;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Mi">
transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)">
<path
sodipodi:nodetypes="zccssscssccscczzzccsccsscscsccz"
inkscape:connector-curvature="0"
id="path5210"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#2fa1bb;fill-opacity:1;stroke-width:0.28950602px"
d="m 75.196381,231.17126 c -5.855419,0.0202 -10.885068,-3.50766 -13.2572,-7.61584 -1.266603,-1.79454 -3.772419,-2.43291 -3.807919,0 v 11.2332 c 0,4.51309 -1.645397,8.41504 -4.936191,11.70583 -3.196772,3.19677 -7.098714,4.79516 -11.705826,4.79516 -4.513089,0 -8.415031,-1.59839 -11.705825,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -61.7729 c 0,-3.47884 0.987238,-6.6286 2.961715,-9.44928 2.068499,-2.91471 4.701135,-4.9362 7.897906,-6.06447 1.786431,-0.65816 3.666885,-0.98724 5.641362,-0.98724 5.077225,0 9.308247,1.97448 12.693064,5.92343 1.786431,1.97448 2.820681,3.00873 3.102749,3.10275 0,0 13.408119,16.21319 13.78421,16.49526 0.376091,0.28206 1.480789,2.43848 4.127113,2.43848 2.646324,0 3.89218,-2.15642 4.26827,-2.43848 0.376091,-0.28207 13.784088,-16.49526 13.784088,-16.49526 0.09402,0.094 1.081261,-0.94022 2.961715,-3.10275 3.478837,-3.94895 7.756866,-5.92343 12.834096,-5.92343 1.88045,0 3.76091,0.32908 5.64136,0.98724 3.19677,1.12827 5.7824,3.14976 7.75688,6.06447 2.06849,2.82068 3.10274,5.97044 3.10274,9.44928 v 61.7729 c 0,4.51309 -1.6454,8.41504 -4.93619,11.70583 -3.19677,3.19677 -7.09871,4.79516 -11.70582,4.79516 -4.51309,0 -8.41504,-1.59839 -11.705828,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -11.2332 c -0.277898,-3.06563 -2.987588,-1.13379 -3.948953,0 -2.538613,4.70114 -7.401781,7.59567 -13.2572,7.61584 z" />
<path
inkscape:connector-curvature="0"
id="path5212"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#2fa1bb;fill-opacity:1;stroke-width:0.28950602px"
d="m 145.83461,185.00361 q -5.92343,0 -10.15445,-4.08999 -4.08999,-4.23102 -4.08999,-10.15445 0,-5.92343 4.08999,-10.01342 4.23102,-4.23102 10.15445,-4.23102 5.92343,0 10.15445,4.23102 4.23102,4.08999 4.23102,10.01342 0,5.92343 -4.23102,10.15445 -4.23102,4.08999 -10.15445,4.08999 z m 0.14103,2.82068 q 5.92343,0 10.01342,4.23102 4.23102,4.23102 4.23102,10.15445 v 34.83541 q 0,5.92343 -4.23102,10.15445 -4.08999,4.08999 -10.01342,4.08999 -5.92343,0 -10.15445,-4.08999 -4.23102,-4.23102 -4.23102,-10.15445 v -34.83541 q 0,-5.92343 4.23102,-10.15445 4.23102,-4.23102 10.15445,-4.23102 z" />
transform="matrix(0.26412464,0,0,0.26412464,24.988264,136.28626)"
d="m 62.474609,76.585938 c -7.47555,0 -14.595784,1.246427 -21.359375,3.738281 C 29.011968,84.595952 19.044417,92.249798 11.212891,103.28516 3.7373405,113.96451 0,125.88934 0,139.06055 v 233.8789 c 0,17.08697 6.0510264,31.85913 18.154297,44.31836 12.459246,12.10327 27.233346,18.15625 44.320312,18.15625 17.442947,0 32.215089,-6.05298 44.318361,-18.15625 12.45925,-12.45923 18.68945,-27.23139 18.68945,-44.31836 V 330.4082 c 0.13441,-9.21122 9.6225,-6.79429 14.41797,0 8.98111,15.55395 28.02226,28.91242 50.19141,28.83594 22.16915,-0.0764 40.58194,-11.03699 50.19336,-28.83594 3.63981,-4.29263 13.89902,-11.60675 14.95117,0 v 42.53125 c 0,17.08697 6.05102,31.85913 18.15429,44.31836 12.45923,12.10327 27.23335,18.15625 44.32032,18.15625 17.44294,0 32.21509,-6.05298 44.31836,-18.15625 12.45923,-12.45923 18.68945,-27.23139 18.68945,-44.31836 v -233.8789 c 0,-13.17121 -3.9146,-25.09604 -11.74609,-35.77539 -7.47557,-11.035362 -17.26588,-18.689208 -29.36914,-22.960941 -7.11956,-2.491854 -14.23982,-3.738281 -21.35938,-3.738281 -19.22286,0 -35.41865,7.476649 -48.58984,22.427734 l -63.40235,74.199218 c -1.42391,1.06791 -6.14093,9.23242 -16.16015,9.23242 -10.01923,0 -14.20109,-8.16451 -15.625,-9.23242 L 110.53125,99.013672 C 97.716024,84.062587 81.697447,76.585938 62.474609,76.585938 Z m 395.060551,0 c -14.9511,-10e-7 -27.76596,5.340179 -38.44532,16.019531 -10.32338,10.323381 -15.48437,22.961011 -15.48437,37.912111 0,14.9511 5.16099,27.76596 15.48437,38.44531 10.67936,10.32338 23.49422,15.48633 38.44532,15.48633 14.95109,0 27.76596,-5.16295 38.44531,-15.48633 C 506.65982,158.28354 512,145.46868 512,130.51758 512,115.56648 506.65982,102.92885 495.98047,92.605469 485.30112,81.926117 472.48625,76.585938 457.53516,76.585938 Z m 0.5332,118.541012 c -14.9511,0 -27.76596,5.34018 -38.44531,16.01953 -10.67936,10.67936 -16.01758,23.49422 -16.01758,38.44532 v 131.89062 c 0,14.9511 5.33822,27.76596 16.01758,38.44531 10.67935,10.32339 23.49421,15.48633 38.44531,15.48633 14.9511,0 27.58873,-5.16294 37.91211,-15.48633 C 506.65982,409.24838 512,396.43352 512,381.48242 V 249.5918 c 0,-14.9511 -5.34018,-27.76596 -16.01953,-38.44532 -10.32338,-10.67935 -22.96101,-16.01953 -37.91211,-16.01953 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#2fa3bc;fill-opacity:1;stroke-width:1.09609616px" />
</g>
</g>
</g>

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 446 B

After

Width:  |  Height:  |  Size: 430 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 B

After

Width:  |  Height:  |  Size: 671 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1015 B

View File

@ -1,108 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
viewBox="0 0 135.46667 135.46667"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="mi.svg"
inkscape:export-filename="C:\Users\syuilo\projects\misskey\assets\favicon\32.png"
inkscape:export-xdpi="6"
inkscape:export-ydpi="6">
version="1.1"
viewBox="0 0 135.46667 135.46667"
height="512"
width="512">
<defs
id="defs2">
<inkscape:path-effect
effect="simplify"
id="path-effect5115"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect5111"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect5104"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4142136"
inkscape:cx="232.39583"
inkscape:cy="251.50613"
inkscape:document-units="px"
inkscape:current-layer="g4502"
showgrid="true"
units="px"
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="false"
inkscape:snap-smooth-nodes="true"
inkscape:snap-center="true"
inkscape:snap-page="true"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="-8"
inkscape:window-y="1072"
inkscape:window-maximized="1"
inkscape:snap-object-midpoints="true"
inkscape:snap-midpoints="true"
inkscape:object-paths="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
objecttolerance="1"
guidetolerance="1"
inkscape:snap-nodes="false"
inkscape:snap-others="false">
<inkscape:grid
type="xygrid"
id="grid4504"
spacingx="4.2333334"
spacingy="4.2333334"
empcolor="#ff3fff"
empopacity="0.25098039"
empspacing="4" />
</sodipodi:namedview>
id="defs2" />
<metadata
id="metadata5">
<rdf:RDF>
@ -111,32 +20,30 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="レイヤー 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-30.809093,-111.78601)">
transform="translate(-30.809093,-111.78601)"
id="layer1">
<g
id="g4502"
transform="matrix(1.096096,0,0,1.096096,-2.960633,-44.023579)">
transform="matrix(1.096096,0,0,1.096096,-2.960633,-44.023579)"
id="g4502">
<g
style="fill:#000000;fill-opacity:1"
id="g5125"
transform="translate(-1.3333333e-6,-1.3439941e-6)"
id="g5125">
style="fill:#000000;fill-opacity:1">
<g
transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)"
id="text4489"
aria-label="Mi"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Mi">
id="text4489"
transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)">
<path
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#000000;fill-opacity:1;stroke-width:1.09609616px"
d="M 62.474609 76.585938 C 54.999059 76.585938 47.878825 77.832365 41.115234 80.324219 C 29.011968 84.595952 19.044417 92.249798 11.212891 103.28516 C 3.7373405 113.96451 0 125.88934 0 139.06055 L 0 372.93945 C 0 390.02642 6.0510264 404.79858 18.154297 417.25781 C 30.613543 429.36108 45.387643 435.41406 62.474609 435.41406 C 79.917556 435.41406 94.689698 429.36108 106.79297 417.25781 C 119.25222 404.79858 125.48242 390.02642 125.48242 372.93945 L 125.48242 330.4082 C 125.61683 321.19698 135.10492 323.61391 139.90039 330.4082 C 148.8815 345.96215 167.92265 359.32062 190.0918 359.24414 C 212.26095 359.16778 230.67374 348.20715 240.28516 330.4082 C 243.92497 326.11557 254.18418 318.80145 255.23633 330.4082 L 255.23633 372.93945 C 255.23633 390.02642 261.28735 404.79858 273.39062 417.25781 C 285.84985 429.36108 300.62397 435.41406 317.71094 435.41406 C 335.15388 435.41406 349.92603 429.36108 362.0293 417.25781 C 374.48853 404.79858 380.71875 390.02642 380.71875 372.93945 L 380.71875 139.06055 C 380.71875 125.88934 376.80415 113.96451 368.97266 103.28516 C 361.49709 92.249798 351.70678 84.595952 339.60352 80.324219 C 332.48396 77.832365 325.3637 76.585938 318.24414 76.585938 C 299.02128 76.585938 282.82549 84.062587 269.6543 99.013672 C 262.53473 107.20121 258.79542 111.11761 258.43945 110.76172 C 258.43945 110.76172 207.67587 172.14495 206.25195 173.21289 C 204.82804 174.2808 200.11102 182.44531 190.0918 182.44531 C 180.07257 182.44531 175.89071 174.2808 174.4668 173.21289 C 173.04288 172.14495 122.2793 110.76172 122.2793 110.76172 C 121.21136 110.40575 117.29484 106.48923 110.53125 99.013672 C 97.716024 84.062587 81.697447 76.585938 62.474609 76.585938 z M 457.53516 76.585938 C 442.58406 76.585937 429.7692 81.926117 419.08984 92.605469 C 408.76646 102.92885 403.60547 115.56648 403.60547 130.51758 C 403.60547 145.46868 408.76646 158.28354 419.08984 168.96289 C 429.7692 179.28627 442.58406 184.44922 457.53516 184.44922 C 472.48625 184.44922 485.30112 179.28627 495.98047 168.96289 C 506.65982 158.28354 512 145.46868 512 130.51758 C 512 115.56648 506.65982 102.92885 495.98047 92.605469 C 485.30112 81.926117 472.48625 76.585938 457.53516 76.585938 z M 458.06836 195.12695 C 443.11726 195.12695 430.3024 200.46713 419.62305 211.14648 C 408.94369 221.82584 403.60547 234.6407 403.60547 249.5918 L 403.60547 381.48242 C 403.60547 396.43352 408.94369 409.24838 419.62305 419.92773 C 430.3024 430.25112 443.11726 435.41406 458.06836 435.41406 C 473.01946 435.41406 485.65709 430.25112 495.98047 419.92773 C 506.65982 409.24838 512 396.43352 512 381.48242 L 512 249.5918 C 512 234.6407 506.65982 221.82584 495.98047 211.14648 C 485.65709 200.46713 473.01946 195.12695 458.06836 195.12695 z "
id="path5210"
transform="matrix(0.26412464,0,0,0.26412464,24.988264,136.28626)"
id="path5210" />
d="m 62.474609,76.585938 c -7.47555,0 -14.595784,1.246427 -21.359375,3.738281 C 29.011968,84.595952 19.044417,92.249798 11.212891,103.28516 3.7373405,113.96451 0,125.88934 0,139.06055 v 233.8789 c 0,17.08697 6.0510264,31.85913 18.154297,44.31836 12.459246,12.10327 27.233346,18.15625 44.320312,18.15625 17.442947,0 32.215089,-6.05298 44.318361,-18.15625 12.45925,-12.45923 18.68945,-27.23139 18.68945,-44.31836 V 330.4082 c 0.13441,-9.21122 9.6225,-6.79429 14.41797,0 8.98111,15.55395 28.02226,28.91242 50.19141,28.83594 22.16915,-0.0764 40.58194,-11.03699 50.19336,-28.83594 3.63981,-4.29263 13.89902,-11.60675 14.95117,0 v 42.53125 c 0,17.08697 6.05102,31.85913 18.15429,44.31836 12.45923,12.10327 27.23335,18.15625 44.32032,18.15625 17.44294,0 32.21509,-6.05298 44.31836,-18.15625 12.45923,-12.45923 18.68945,-27.23139 18.68945,-44.31836 v -233.8789 c 0,-13.17121 -3.9146,-25.09604 -11.74609,-35.77539 -7.47557,-11.035362 -17.26588,-18.689208 -29.36914,-22.960941 -7.11956,-2.491854 -14.23982,-3.738281 -21.35938,-3.738281 -19.22286,0 -35.41865,7.476649 -48.58984,22.427734 l -63.40235,74.199218 c -1.42391,1.06791 -6.14093,9.23242 -16.16015,9.23242 -10.01923,0 -14.20109,-8.16451 -15.625,-9.23242 L 110.53125,99.013672 C 97.716024,84.062587 81.697447,76.585938 62.474609,76.585938 Z m 395.060551,0 c -14.9511,-10e-7 -27.76596,5.340179 -38.44532,16.019531 -10.32338,10.323381 -15.48437,22.961011 -15.48437,37.912111 0,14.9511 5.16099,27.76596 15.48437,38.44531 10.67936,10.32338 23.49422,15.48633 38.44532,15.48633 14.95109,0 27.76596,-5.16295 38.44531,-15.48633 C 506.65982,158.28354 512,145.46868 512,130.51758 512,115.56648 506.65982,102.92885 495.98047,92.605469 485.30112,81.926117 472.48625,76.585938 457.53516,76.585938 Z m 0.5332,118.541012 c -14.9511,0 -27.76596,5.34018 -38.44531,16.01953 -10.67936,10.67936 -16.01758,23.49422 -16.01758,38.44532 v 131.89062 c 0,14.9511 5.33822,27.76596 16.01758,38.44531 10.67935,10.32339 23.49421,15.48633 38.44531,15.48633 14.9511,0 27.58873,-5.16294 37.91211,-15.48633 C 506.65982,409.24838 512,396.43352 512,381.48242 V 249.5918 c 0,-14.9511 -5.34018,-27.76596 -16.01953,-38.44532 -10.32338,-10.67935 -22.96101,-16.01953 -37.91211,-16.01953 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#000000;fill-opacity:1;stroke-width:1.09609616px" />
</g>
</g>
</g>

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -26,6 +26,7 @@ common:
close: "閉じる"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
load-more: "もっと読み込む"
enter-password: "パスワードを入力してください"
got-it: "わかった"
customization-tips:
title: "カスタマイズのヒント"
@ -457,6 +458,10 @@ common/views/components/profile-editor.vue:
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
email: "メール設定"
email-address: "メールアドレス"
email-verified: "メールアドレスが確認されました"
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
common/views/widgets/broadcast.vue:
fetching: "確認中"
no-broadcasts: "お知らせはありません"
@ -731,6 +736,8 @@ desktop/views/components/settings.vue:
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: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "詳細設定"
@ -966,17 +973,17 @@ admin/views/instance.vue:
recaptcha-site-key: "reCAPTCHA site key"
recaptcha-secret-key: "reCAPTCHA secret key"
twitter-integration-config: "Twitter連携の設定"
twitter-integration-info: "コールバックURLは /api/tw/cb に設定します。"
twitter-integration-info: "コールバックURLは {url} に設定します。"
enable-twitter-integration: "Twitter連携を有効にする"
twitter-integration-consumer-key: "Consumer key"
twitter-integration-consumer-secret: "Consumer secret"
github-integration-config: "GitHub連携の設定"
github-integration-info: "コールバックURLは /api/gh/cb に設定します。"
github-integration-info: "コールバックURLは {url} に設定します。"
enable-github-integration: "GitHub連携を有効にする"
github-integration-client-id: "Client ID"
github-integration-client-secret: "Client Secret"
discord-integration-config: "Discord連携の設定"
discord-integration-info: "コールバックURLは /api/dc/cb に設定します。"
discord-integration-info: "コールバックURLは {url} に設定します。"
enable-discord-integration: "Discord連携を有効にする"
discord-integration-client-id: "Client ID"
discord-integration-client-secret: "Client Secret"
@ -997,6 +1004,16 @@ admin/views/instance.vue:
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
external-user-recommendation-timeout: "タイムアウト"
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
email-config: "メールサーバーの設定"
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
enable-email: "メール配信を有効にする"
email: "メールアドレス"
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
smtp-secure-info: "STARTTLS使用時はオフにします。"
smtp-host: "SMTPホスト"
smtp-port: "SMTPポート"
smtp-user: "SMTPユーザー"
smtp-pass: "SMTPパスワード"
admin/views/charts.vue:
title: "チャート"
per-day: "1日ごと"
@ -1371,6 +1388,8 @@ mobile/views/pages/settings.vue:
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: "リモートサーバーのメディアを表示する"

View File

@ -26,6 +26,7 @@ common:
close: "Schließen"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
load-more: "もっと読み込む"
enter-password: "パスワードを入力してください"
got-it: "Verstanden!"
customization-tips:
title: "Anpassung-Tipps"
@ -457,6 +458,10 @@ common/views/components/profile-editor.vue:
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
email: "メール設定"
email-address: "メールアドレス"
email-verified: "メールアドレスが確認されました"
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
common/views/widgets/broadcast.vue:
fetching: "Laden"
no-broadcasts: "Keine Broadcasts"
@ -731,6 +736,8 @@ desktop/views/components/settings.vue:
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
web-search-engine: "ウェブ検索エンジン"
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
auto-popout: "Automatische Pop-out Fenster"
auto-popout-desc: "Pop-out ein offenes Fenster wenn möglich. Diese Einstellung wird im Browser gespeichert."
advanced: "Erweiterte Einstellungen"
@ -966,17 +973,17 @@ admin/views/instance.vue:
recaptcha-site-key: "reCAPTCHA site key"
recaptcha-secret-key: "reCAPTCHA secret key"
twitter-integration-config: "Twitter連携の設定"
twitter-integration-info: "コールバックURLは /api/tw/cb に設定します。"
twitter-integration-info: "コールバックURLは {url} に設定します。"
enable-twitter-integration: "Twitter連携を有効にする"
twitter-integration-consumer-key: "Consumer key"
twitter-integration-consumer-secret: "Consumer secret"
github-integration-config: "GitHub連携の設定"
github-integration-info: "コールバックURLは /api/gh/cb に設定します。"
github-integration-info: "コールバックURLは {url} に設定します。"
enable-github-integration: "GitHub連携を有効にする"
github-integration-client-id: "Client ID"
github-integration-client-secret: "Client Secret"
discord-integration-config: "Discord連携の設定"
discord-integration-info: "コールバックURLは /api/dc/cb に設定します。"
discord-integration-info: "コールバックURLは {url} に設定します。"
enable-discord-integration: "Discord連携を有効にする"
discord-integration-client-id: "Client ID"
discord-integration-client-secret: "Client Secret"
@ -997,6 +1004,16 @@ admin/views/instance.vue:
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
external-user-recommendation-timeout: "タイムアウト"
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
email-config: "メールサーバーの設定"
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
enable-email: "メール配信を有効にする"
email: "メールアドレス"
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
smtp-secure-info: "STARTTLS使用時はオフにします。"
smtp-host: "SMTPホスト"
smtp-port: "SMTPポート"
smtp-user: "SMTPユーザー"
smtp-pass: "SMTPパスワード"
admin/views/charts.vue:
title: "チャート"
per-day: "1日ごと"
@ -1371,6 +1388,8 @@ mobile/views/pages/settings.vue:
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: "リモートサーバーのメディアを表示する"

View File

@ -26,6 +26,7 @@ common:
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: "パスワードを入力してください"
got-it: "Got it!"
customization-tips:
title: "Customization tips"
@ -90,9 +91,9 @@ common:
specified: "Direct"
specified-desc: "Post to specified users only"
private: "Private"
local-public: "Local (Public)"
local-home: "Local (Home)"
local-followers: "Local (Followers)"
local-public: "Public (Only local)"
local-home: "Home (Only local)"
local-followers: "Followers (Only local)"
note-placeholders:
a: "What are you doing?"
b: "What's happening?"
@ -208,7 +209,7 @@ common/views/components/games/reversi/reversi.index.vue:
invitations: "Youve got an invitation!"
my-games: "My game"
all-games: "All games"
enter-username: "Enter a username"
enter-username: "Please enter username"
game-state:
ended: "Finished"
playing: "In Progress"
@ -219,7 +220,7 @@ common/views/components/games/reversi/reversi.room.vue:
black-or-white: "Black/White"
black-is: "Black is {}"
rules: "Rules"
is-llotheo: "The lesser side wins"
is-llotheo: "The lesser one wins(Llotheo)"
looped-map: "Looped map"
can-put-everywhere: "Can put everywhere"
settings-of-the-bot: "Bot settings"
@ -267,7 +268,7 @@ common/views/components/theme.vue:
install: "Install"
installed: "\"{}\" has been installed"
create-a-theme: "Create a theme"
save-created-theme: "Save a theme"
save-created-theme: "Save theme"
primary-color: "Primary color"
secondary-color: "Secondary color"
text-color: "Text color"
@ -433,8 +434,8 @@ common/views/components/visibility-chooser.vue:
private: "Private"
local-public: "Local (Public)"
local-public-desc: "Do not publish to remote"
local-home: "Local (Home)"
local-followers: "Local (Followers)"
local-home: "Home (Only local)"
local-followers: "Followers (Only local)"
common/views/components/trends.vue:
count: "{} users mentioned"
empty: "No popular hashtag trends"
@ -445,20 +446,24 @@ common/views/components/profile-editor.vue:
location: "Location"
description: "About me"
birthday: "Birthday"
avatar: "Avatar"
avatar: "Icon"
banner: "Banner"
is-cat: "This account is a Cat"
is-bot: "This account is a Bot"
is-locked: "Follower requests require approval"
careful-bot: "Follower requests from bots require approval"
advanced: "Advanced"
advanced: "Other"
privacy: "Privacy"
save: "Update profile"
save: "Save"
saved: "Profile updated successfully"
uploading: "Uploading"
upload-failed: "Failed to upload"
email: "Email settings"
email-address: "Email Address"
email-verified: "Your email has been verified."
email-not-verified: "Email address is not confirmed. Please check your inbox."
common/views/widgets/broadcast.vue:
fetching: "Fetching"
fetching: "Checking"
no-broadcasts: "No announcements"
have-a-nice-day: "Have a nice day!"
next: "Next"
@ -731,6 +736,8 @@ desktop/views/components/settings.vue:
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."
advanced: "Advanced settings"
@ -966,17 +973,17 @@ admin/views/instance.vue:
recaptcha-site-key: "reCAPTCHA site key"
recaptcha-secret-key: "reCAPTCHA secret key"
twitter-integration-config: "Settings of connecting to Twitter"
twitter-integration-info: "The callback URL is set on /api/tw/cb."
twitter-integration-info: "The callback URL is set on {url}."
enable-twitter-integration: "Enable connection to Twitter"
twitter-integration-consumer-key: "Consumer key"
twitter-integration-consumer-secret: "Consumer Secret"
github-integration-config: "Setting of connecting to GitHub"
github-integration-info: "The callback URL is set on /api/gh/cb."
github-integration-info: "The callback URL is set on {url}."
enable-github-integration: "Enable connection to GitHub"
github-integration-client-id: "Client ID"
github-integration-client-secret: "Client Secret"
discord-integration-config: "Setting of Discord Integration"
discord-integration-info: "The callback URL is set on /api/dc/cb."
discord-integration-info: "The callback URL is set on {url}."
enable-discord-integration: "Enable Discord connection"
discord-integration-client-id: "Client ID"
discord-integration-client-secret: "Client Secret"
@ -997,6 +1004,16 @@ admin/views/instance.vue:
external-user-recommendation-engine-desc: "Example: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
external-user-recommendation-timeout: "Timeout"
external-user-recommendation-timeout-desc: "Number of milliseconds (ex. 300,000)"
email-config: "Email server settings"
email-config-info: "Used to confirm email and password reset etc."
enable-email: "Enable email delivery"
email: "Email Address"
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
smtp-secure-info: "STARTTLS使用時はオフにします。"
smtp-host: "SMTP Host"
smtp-port: "SMTP Port"
smtp-user: "SMTP User"
smtp-pass: "SMTP Password"
admin/views/charts.vue:
title: "Chart"
per-day: "per Day"
@ -1371,6 +1388,8 @@ mobile/views/pages/settings.vue:
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"

View File

@ -26,6 +26,7 @@ common:
close: "Cerrar"
do-not-copy-paste: "Por favor no copies código aquí. Tu cuenta puede resultar comprometida."
load-more: "もっと読み込む"
enter-password: "パスワードを入力してください"
got-it: "¡Listo!"
customization-tips:
title: "Consejos de personalización"
@ -457,6 +458,10 @@ common/views/components/profile-editor.vue:
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
email: "メール設定"
email-address: "メールアドレス"
email-verified: "メールアドレスが確認されました"
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
common/views/widgets/broadcast.vue:
fetching: "Recuperando"
no-broadcasts: "Sin emisión"
@ -731,6 +736,8 @@ desktop/views/components/settings.vue:
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
web-search-engine: "ウェブ検索エンジン"
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
auto-popout: "Ventana emergente automática"
auto-popout-desc: "Muestra una ventana emergente si es posible. Esta configuración depende del navegador."
advanced: "Configuración avanzada"
@ -966,17 +973,17 @@ admin/views/instance.vue:
recaptcha-site-key: "reCAPTCHA site key"
recaptcha-secret-key: "reCAPTCHA secret key"
twitter-integration-config: "Twitter連携の設定"
twitter-integration-info: "コールバックURLは /api/tw/cb に設定します。"
twitter-integration-info: "コールバックURLは {url} に設定します。"
enable-twitter-integration: "Twitter連携を有効にする"
twitter-integration-consumer-key: "Consumer key"
twitter-integration-consumer-secret: "Consumer secret"
github-integration-config: "GitHub連携の設定"
github-integration-info: "コールバックURLは /api/gh/cb に設定します。"
github-integration-info: "コールバックURLは {url} に設定します。"
enable-github-integration: "GitHub連携を有効にする"
github-integration-client-id: "Client ID"
github-integration-client-secret: "Client Secret"
discord-integration-config: "Discord連携の設定"
discord-integration-info: "コールバックURLは /api/dc/cb に設定します。"
discord-integration-info: "コールバックURLは {url} に設定します。"
enable-discord-integration: "Discord連携を有効にする"
discord-integration-client-id: "Client ID"
discord-integration-client-secret: "Client Secret"
@ -997,6 +1004,16 @@ admin/views/instance.vue:
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
external-user-recommendation-timeout: "タイムアウト"
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
email-config: "メールサーバーの設定"
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
enable-email: "メール配信を有効にする"
email: "メールアドレス"
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
smtp-secure-info: "STARTTLS使用時はオフにします。"
smtp-host: "SMTPホスト"
smtp-port: "SMTPポート"
smtp-user: "SMTPユーザー"
smtp-pass: "SMTPパスワード"
admin/views/charts.vue:
title: "チャート"
per-day: "1日ごと"
@ -1371,6 +1388,8 @@ mobile/views/pages/settings.vue:
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: "リモートサーバーのメディアを表示する"

View File

@ -18,7 +18,7 @@ common:
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "Drive"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
outro: "Découvrez vous-même les fonctionnalités de Misskey. Étant donné que Misskey est un réseaux social fédéré, vous pouvez essayer dautres instances afin de trouver vos ami·e·s 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"
warning: "<strong>Misskey nutilise pas de publicités</strong>, mais quelques options peuvent être non disponibles ou fonctionneraient mal si un bloqueur de publicités est activé."
@ -26,6 +26,7 @@ common:
close: "Fermer"
do-not-copy-paste: "Veuillez ne pas entrer ou coller le code ici. Le compte peut être compromis."
load-more: "Charger plus"
enter-password: "パスワードを入力してください"
got-it: "Jai compris !"
customization-tips:
title: "Conseils de personnalisation"
@ -457,6 +458,10 @@ common/views/components/profile-editor.vue:
saved: "Profil mis à jour avec succès"
uploading: "En cours d'envoi …"
upload-failed: "Échec de l'envoi"
email: "メール設定"
email-address: "メールアドレス"
email-verified: "メールアドレスが確認されました"
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
common/views/widgets/broadcast.vue:
fetching: "Récupération"
no-broadcasts: "Aucune annonce"
@ -731,6 +736,8 @@ desktop/views/components/settings.vue:
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: "ウェブ検索エンジン"
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
auto-popout: "Fenêtre contextuelle automatique"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "Paramètres avancés"
@ -966,17 +973,17 @@ admin/views/instance.vue:
recaptcha-site-key: "Clé reCAPTCHA du site"
recaptcha-secret-key: "Clé secrète reCAPTCHA"
twitter-integration-config: "Paramètres de connexion à Twitter"
twitter-integration-info: "LURL callback est définit sur /api/tw/cb"
twitter-integration-info: "コールバックURLは {url} に設定します。"
enable-twitter-integration: "Activer la connection à Twitter"
twitter-integration-consumer-key: "Clé du consommateur"
twitter-integration-consumer-secret: "Secret du consommateur"
github-integration-config: "Paramètres dauthentification GitHub"
github-integration-info: "LURL callback est définit sur /api/gh/cb"
github-integration-info: "コールバックURLは {url} に設定します。"
enable-github-integration: "Activer lauthentification avec Github"
github-integration-client-id: "ID client"
github-integration-client-secret: "Secret client"
discord-integration-config: "Paramètres dauthentification Discord"
discord-integration-info: "LURL callback est définit sur /api/dc/cb"
discord-integration-info: "コールバックURLは {url} に設定します。"
enable-discord-integration: "Activer lauthentification avec Discord"
discord-integration-client-id: "ID client"
discord-integration-client-secret: "Secret client"
@ -992,11 +999,21 @@ admin/views/instance.vue:
save: "Sauvegarder"
saved: "Enregistré"
user-recommendation-config: "Utilisateur·rice·s"
enable-external-user-recommendation: "外部ユーザーレコメンデーションを有効にする"
enable-external-user-recommendation: "Activer la recommandation des utilisateur·trice·s distant·e·s"
external-user-recommendation-engine: "Moteur"
external-user-recommendation-engine-desc: "Exemple: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
external-user-recommendation-timeout: "Délai dexpiration"
external-user-recommendation-timeout-desc: "En millisecondes (par exemple : 300000)"
email-config: "メールサーバーの設定"
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
enable-email: "メール配信を有効にする"
email: "メールアドレス"
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
smtp-secure-info: "STARTTLS使用時はオフにします。"
smtp-host: "SMTPホスト"
smtp-port: "SMTPポート"
smtp-user: "SMTPユーザー"
smtp-pass: "SMTPパスワード"
admin/views/charts.vue:
title: "Graph"
per-day: "par jour"
@ -1023,12 +1040,12 @@ admin/views/charts.vue:
network-time: "Temps de réponse"
network-usage: "Traffic"
admin/views/users.vue:
operation: "操作"
username-or-userid: "ユーザー名またはユーザーID"
user-not-found: "ユーザーが見つかりません"
lookup: "照会"
reset-password: "パスワードをリセット"
password-updated: "パスワードは現在「{password}」です"
operation: "Actions"
username-or-userid: "Nom dutilisateur·rice ou ID utilisateur"
user-not-found: "Utilisateur·rice non trouvé·e"
lookup: "Recherche"
reset-password: "Réinitialiser mot de passe"
password-updated: "Le mot de passe est « {password} »"
suspend: "Suspendre"
suspended: "Suspendu·e avec succès."
unsuspend: "Suspension levée"
@ -1038,20 +1055,20 @@ admin/views/users.vue:
unverify: "Ôter la vérification du compte"
unverified: "Ce compte n'est plus vérifié"
users:
title: "ユーザー"
title: "Utilisateur·rice·s"
sort:
title: "ソート"
createdAtAsc: "登録日時が古い順"
createdAtDesc: "登録日時が新しい順"
updatedAtAsc: "更新日時が古い順"
title: "Trier par"
createdAtAsc: "Date dinscription (Ascendant)"
createdAtDesc: "Date dinscription (Descendant)"
updatedAtAsc: "Mis à jour récemment (Ascendant)"
updatedAtDesc: "更新日時が新しい順"
origin:
title: "オリジン"
combined: "ローカル+リモート"
local: "ローカル"
remote: "リモート"
createdAt: "登録日時"
updatedAt: "更新日時"
title: "Origine"
combined: "Locaux + distants"
local: "Locaux"
remote: "Distants"
createdAt: "Créé le"
updatedAt: "Mis à jour le"
admin/views/moderators.vue:
add-moderator:
title: "Ajout dun modérateur"
@ -1371,6 +1388,8 @@ mobile/views/pages/settings.vue:
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: "ウェブ検索エンジン"
web-search-engine-desc: "例: 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"

View File

@ -5,7 +5,7 @@
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'];
const langs = ['de-DE', 'en-US', 'fr-FR', 'ja-JP', 'ja-KS', 'pl-PL', 'es-ES', 'nl-NL', 'zh-CN', 'ko-KR'];
const loadLocale = lang => yaml.safeLoad(fs.readFileSync(`${__dirname}/${lang}.yml`, 'utf-8'));
const locales = langs.map(lang => ({ [lang]: loadLocale(lang) }));

View File

@ -26,6 +26,7 @@ common:
close: "閉じる"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
load-more: "もっと読み込む"
enter-password: "パスワードを入力してください"
got-it: "わかった"
customization-tips:
title: "カスタマイズのヒント"
@ -457,6 +458,10 @@ common/views/components/profile-editor.vue:
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
email: "メール設定"
email-address: "メールアドレス"
email-verified: "メールアドレスが確認されました"
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
common/views/widgets/broadcast.vue:
fetching: "確認中"
no-broadcasts: "お知らせはありません"
@ -731,6 +736,8 @@ desktop/views/components/settings.vue:
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: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "詳細設定"
@ -966,17 +973,17 @@ admin/views/instance.vue:
recaptcha-site-key: "reCAPTCHA site key"
recaptcha-secret-key: "reCAPTCHA secret key"
twitter-integration-config: "Twitter連携の設定"
twitter-integration-info: "コールバックURLは /api/tw/cb に設定します。"
twitter-integration-info: "コールバックURLは {url} に設定します。"
enable-twitter-integration: "Twitter連携を有効にする"
twitter-integration-consumer-key: "Consumer key"
twitter-integration-consumer-secret: "Consumer secret"
github-integration-config: "GitHub連携の設定"
github-integration-info: "コールバックURLは /api/gh/cb に設定します。"
github-integration-info: "コールバックURLは {url} に設定します。"
enable-github-integration: "GitHub連携を有効にする"
github-integration-client-id: "Client ID"
github-integration-client-secret: "Client Secret"
discord-integration-config: "Discord連携の設定"
discord-integration-info: "コールバックURLは /api/dc/cb に設定します。"
discord-integration-info: "コールバックURLは {url} に設定します。"
enable-discord-integration: "Discord連携を有効にする"
discord-integration-client-id: "Client ID"
discord-integration-client-secret: "Client Secret"
@ -997,6 +1004,16 @@ admin/views/instance.vue:
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
external-user-recommendation-timeout: "タイムアウト"
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
email-config: "メールサーバーの設定"
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
enable-email: "メール配信を有効にする"
email: "メールアドレス"
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
smtp-secure-info: "STARTTLS使用時はオフにします。"
smtp-host: "SMTPホスト"
smtp-port: "SMTPポート"
smtp-user: "SMTPユーザー"
smtp-pass: "SMTPパスワード"
admin/views/charts.vue:
title: "チャート"
per-day: "1日ごと"
@ -1371,6 +1388,8 @@ mobile/views/pages/settings.vue:
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: "リモートサーバーのメディアを表示する"

View File

@ -26,6 +26,7 @@ common:
close: "閉じる"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
load-more: "もっと読み込む"
enter-password: "パスワードを入力してください"
got-it: "わかった"
customization-tips:
@ -503,6 +504,10 @@ common/views/components/profile-editor.vue:
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
email: "メール設定"
email-address: "メールアドレス"
email-verified: "メールアドレスが確認されました"
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
common/views/widgets/broadcast.vue:
fetching: "確認中"
@ -824,6 +829,8 @@ desktop/views/components/settings.vue:
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: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "詳細設定"
@ -1092,17 +1099,17 @@ admin/views/instance.vue:
recaptcha-site-key: "reCAPTCHA site key"
recaptcha-secret-key: "reCAPTCHA secret key"
twitter-integration-config: "Twitter連携の設定"
twitter-integration-info: "コールバックURLは /api/tw/cb に設定します。"
twitter-integration-info: "コールバックURLは {url} に設定します。"
enable-twitter-integration: "Twitter連携を有効にする"
twitter-integration-consumer-key: "Consumer key"
twitter-integration-consumer-secret: "Consumer secret"
github-integration-config: "GitHub連携の設定"
github-integration-info: "コールバックURLは /api/gh/cb に設定します。"
github-integration-info: "コールバックURLは {url} に設定します。"
enable-github-integration: "GitHub連携を有効にする"
github-integration-client-id: "Client ID"
github-integration-client-secret: "Client Secret"
discord-integration-config: "Discord連携の設定"
discord-integration-info: "コールバックURLは /api/dc/cb に設定します。"
discord-integration-info: "コールバックURLは {url} に設定します。"
enable-discord-integration: "Discord連携を有効にする"
discord-integration-client-id: "Client ID"
discord-integration-client-secret: "Client Secret"
@ -1123,6 +1130,16 @@ admin/views/instance.vue:
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
external-user-recommendation-timeout: "タイムアウト"
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
email-config: "メールサーバーの設定"
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
enable-email: "メール配信を有効にする"
email: "メールアドレス"
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
smtp-secure-info: "STARTTLS使用時はオフにします。"
smtp-host: "SMTPホスト"
smtp-port: "SMTPポート"
smtp-user: "SMTPユーザー"
smtp-pass: "SMTPパスワード"
admin/views/charts.vue:
title: "チャート"
@ -1564,6 +1581,8 @@ mobile/views/pages/settings.vue:
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: "リモートサーバーのメディアを表示する"

View File

@ -26,6 +26,7 @@ common:
close: "さいなら"
do-not-copy-paste: "ここにコードを入力したり張り付けたりせんといてください。アカウントが不正利用されるかも分からん。知らんけど。"
load-more: "もっと読み込む"
enter-password: "パスワードを入力してください"
got-it: "ほい"
customization-tips:
title: "カスタマイズのヒント"
@ -457,6 +458,10 @@ common/views/components/profile-editor.vue:
saved: "プロフィールを保存したで"
uploading: "アップロードしとります"
upload-failed: "これアップロードでけへんわ"
email: "メール設定"
email-address: "メールアドレス"
email-verified: "メールアドレスが確認されました"
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
common/views/widgets/broadcast.vue:
fetching: "見てみるわ…"
no-broadcasts: "お知らせはあらへんで"
@ -731,6 +736,8 @@ desktop/views/components/settings.vue:
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: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトすんで。この設定はブラウザに記憶されんで。"
advanced: "もっと設定"
@ -966,17 +973,17 @@ admin/views/instance.vue:
recaptcha-site-key: "reCAPTCHA site key"
recaptcha-secret-key: "reCAPTCHA secret key"
twitter-integration-config: "Twitter連携の設定"
twitter-integration-info: "コールバックURLは /api/tw/cb に設定します。"
twitter-integration-info: "コールバックURLは {url} に設定します。"
enable-twitter-integration: "Twitter連携を有効にする"
twitter-integration-consumer-key: "Consumer key"
twitter-integration-consumer-secret: "Consumer secret"
github-integration-config: "GitHub連携の設定"
github-integration-info: "コールバックURLは /api/gh/cb に設定します。"
github-integration-info: "コールバックURLは {url} に設定します。"
enable-github-integration: "GitHub連携を有効にする"
github-integration-client-id: "Client ID"
github-integration-client-secret: "Client Secret"
discord-integration-config: "Discord連携の設定"
discord-integration-info: "コールバックURLは /api/dc/cb に設定します。"
discord-integration-info: "コールバックURLは {url} に設定します。"
enable-discord-integration: "Discord連携を有効にする"
discord-integration-client-id: "Client ID"
discord-integration-client-secret: "Client Secret"
@ -997,6 +1004,16 @@ admin/views/instance.vue:
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
external-user-recommendation-timeout: "タイムアウト"
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
email-config: "メールサーバーの設定"
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
enable-email: "メール配信を有効にする"
email: "メールアドレス"
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
smtp-secure-info: "STARTTLS使用時はオフにします。"
smtp-host: "SMTPホスト"
smtp-port: "SMTPポート"
smtp-user: "SMTPユーザー"
smtp-pass: "SMTPパスワード"
admin/views/charts.vue:
title: "チャート"
per-day: "1日ごと"
@ -1371,6 +1388,8 @@ mobile/views/pages/settings.vue:
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: "東京とか、リモートサーバーのメディアも見せてや"

File diff suppressed because it is too large Load Diff

View File

@ -26,6 +26,7 @@ common:
close: "閉じる"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
load-more: "もっと読み込む"
enter-password: "パスワードを入力してください"
got-it: "わかった"
customization-tips:
title: "カスタマイズのヒント"
@ -457,6 +458,10 @@ common/views/components/profile-editor.vue:
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
email: "メール設定"
email-address: "メールアドレス"
email-verified: "メールアドレスが確認されました"
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
common/views/widgets/broadcast.vue:
fetching: "Bezig met ophalen"
no-broadcasts: "Geen uitzendingen"
@ -731,6 +736,8 @@ desktop/views/components/settings.vue:
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
web-search-engine: "ウェブ検索エンジン"
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
auto-popout: "Venster automatisch uitvouwen"
auto-popout-desc: "Venster uitvouwen, indien mogelijk. Deze instelling wordt opgeslagen in je browser."
advanced: "Geavanceerde instellingen"
@ -966,17 +973,17 @@ admin/views/instance.vue:
recaptcha-site-key: "reCAPTCHA site key"
recaptcha-secret-key: "reCAPTCHA secret key"
twitter-integration-config: "Twitter連携の設定"
twitter-integration-info: "コールバックURLは /api/tw/cb に設定します。"
twitter-integration-info: "コールバックURLは {url} に設定します。"
enable-twitter-integration: "Twitter連携を有効にする"
twitter-integration-consumer-key: "Consumer key"
twitter-integration-consumer-secret: "Consumer secret"
github-integration-config: "GitHub連携の設定"
github-integration-info: "コールバックURLは /api/gh/cb に設定します。"
github-integration-info: "コールバックURLは {url} に設定します。"
enable-github-integration: "GitHub連携を有効にする"
github-integration-client-id: "Client ID"
github-integration-client-secret: "Client Secret"
discord-integration-config: "Discord連携の設定"
discord-integration-info: "コールバックURLは /api/dc/cb に設定します。"
discord-integration-info: "コールバックURLは {url} に設定します。"
enable-discord-integration: "Discord連携を有効にする"
discord-integration-client-id: "Client ID"
discord-integration-client-secret: "Client Secret"
@ -997,6 +1004,16 @@ admin/views/instance.vue:
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
external-user-recommendation-timeout: "タイムアウト"
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
email-config: "メールサーバーの設定"
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
enable-email: "メール配信を有効にする"
email: "メールアドレス"
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
smtp-secure-info: "STARTTLS使用時はオフにします。"
smtp-host: "SMTPホスト"
smtp-port: "SMTPポート"
smtp-user: "SMTPユーザー"
smtp-pass: "SMTPパスワード"
admin/views/charts.vue:
title: "チャート"
per-day: "1日ごと"
@ -1371,6 +1388,8 @@ mobile/views/pages/settings.vue:
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
web-search-engine: "ウェブ検索エンジン"
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
disable-via-mobile: "Zonder 'mobiele berichten'"
load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する"

View File

@ -26,6 +26,7 @@ common:
close: "Lukk"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
load-more: "もっと読み込む"
enter-password: "パスワードを入力してください"
got-it: "Skjønner!"
customization-tips:
title: "カスタマイズのヒント"
@ -457,6 +458,10 @@ common/views/components/profile-editor.vue:
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
email: "メール設定"
email-address: "メールアドレス"
email-verified: "メールアドレスが確認されました"
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
common/views/widgets/broadcast.vue:
fetching: "Henter"
no-broadcasts: "お知らせはありません"
@ -731,6 +736,8 @@ desktop/views/components/settings.vue:
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: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "Avanserte innstillinger"
@ -966,17 +973,17 @@ admin/views/instance.vue:
recaptcha-site-key: "reCAPTCHA site key"
recaptcha-secret-key: "reCAPTCHA secret key"
twitter-integration-config: "Twitter連携の設定"
twitter-integration-info: "コールバックURLは /api/tw/cb に設定します。"
twitter-integration-info: "コールバックURLは {url} に設定します。"
enable-twitter-integration: "Twitter連携を有効にする"
twitter-integration-consumer-key: "Consumer key"
twitter-integration-consumer-secret: "Consumer secret"
github-integration-config: "GitHub連携の設定"
github-integration-info: "コールバックURLは /api/gh/cb に設定します。"
github-integration-info: "コールバックURLは {url} に設定します。"
enable-github-integration: "GitHub連携を有効にする"
github-integration-client-id: "Client ID"
github-integration-client-secret: "Client Secret"
discord-integration-config: "Discord連携の設定"
discord-integration-info: "コールバックURLは /api/dc/cb に設定します。"
discord-integration-info: "コールバックURLは {url} に設定します。"
enable-discord-integration: "Discord連携を有効にする"
discord-integration-client-id: "Client ID"
discord-integration-client-secret: "Client Secret"
@ -997,6 +1004,16 @@ admin/views/instance.vue:
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
external-user-recommendation-timeout: "タイムアウト"
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
email-config: "メールサーバーの設定"
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
enable-email: "メール配信を有効にする"
email: "メールアドレス"
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
smtp-secure-info: "STARTTLS使用時はオフにします。"
smtp-host: "SMTPホスト"
smtp-port: "SMTPポート"
smtp-user: "SMTPユーザー"
smtp-pass: "SMTPパスワード"
admin/views/charts.vue:
title: "チャート"
per-day: "1日ごと"
@ -1371,6 +1388,8 @@ mobile/views/pages/settings.vue:
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: "リモートサーバーのメディアを表示する"

View File

@ -7,16 +7,16 @@ common:
about-title: "⭐ Fediwersum"
about: "Dziękujemy za znalezienie Misskey. Misskey jest <b>zdecentralizowaną platformą mikroblogową</b> powstałą na Ziemi. Ponieważ działa ona w Fediwersum (uniwersum, w którego skład wchodzi wiele sieci społecznościowych), jest ona połączona z innymi platformami społecznościowymi. Spróbujesz odpocząć od zatłoczoneo miasta i zanurzyć się w nowym Internecie?"
intro:
title: "Misskeyって?"
title: "Czym jest Misskey?"
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
features: "特徴"
rich-contents: "投稿"
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
reaction: "リアクション"
reaction: "Reakcje"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "インターフェース"
ui: "Interfejs"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "ドライブ"
drive: "Dysk"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
adblock:
@ -26,6 +26,7 @@ common:
close: "Zamknij"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
load-more: "もっと読み込む"
enter-password: "パスワードを入力してください"
got-it: "Rozumiem!"
customization-tips:
title: "Wskazówki o dostosowywaniu"
@ -52,7 +53,7 @@ common:
years_ago: "{} lat temu"
month-and-day: "{month}-{day}"
trash: "Kosz"
drive: "ドライブ"
drive: "Dysk"
messaging: "トーク"
weekday-short:
sunday: "N"
@ -192,8 +193,8 @@ common/views/components/games/reversi/reversi.vue:
waiting-for: "Oczekiwanie na {}"
cancel: "Anuluj"
common/views/components/games/reversi/reversi.game.vue:
surrender: "投了"
surrendered: "投了により"
surrender: "Poddaj się"
surrendered: "Przez poddanie się"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
@ -293,8 +294,8 @@ common/views/components/theme.vue:
import-by-code: "またはコードをペースト"
theme-name-required: "テーマ名は必須です。"
common/views/components/cw-button.vue:
hide: "隠す"
show: "もっと見る"
hide: "Ukryj"
show: "Pokaż więcej"
common/views/components/messaging.vue:
search-user: "Znajdź użytkownika"
you: "Ty"
@ -350,7 +351,7 @@ common/views/components/reaction-picker.vue:
choose-reaction: "Wybierz reakcję"
common/views/components/emoji-picker.vue:
custom-emoji: "カスタム絵文字"
people: ""
people: "Ludzie"
animals-and-nature: "動物&自然"
food-and-drink: "食べ物&飲み物"
activity: "アクティビティ"
@ -366,8 +367,8 @@ common/views/components/signin.vue:
signin: "Zaloguj"
or: "または"
signin-with-twitter: "Zaloguj się za pomocą Twittera"
signin-with-github: "GitHubでログイン"
signin-with-discord: "Discordでログイン"
signin-with-github: "Zaloguj się za pomocą GitHuba"
signin-with-discord: "Zaloguj się za pomocą Discorda"
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
common/views/components/signup.vue:
invitation-code: "招待コード"
@ -457,6 +458,10 @@ common/views/components/profile-editor.vue:
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
email: "メール設定"
email-address: "メールアドレス"
email-verified: "メールアドレスが確認されました"
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
common/views/widgets/broadcast.vue:
fetching: "Sprawdzanie"
no-broadcasts: "Brak transmisji"
@ -731,6 +736,8 @@ desktop/views/components/settings.vue:
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
web-search-engine: "ウェブ検索エンジン"
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
auto-popout: "Automatycznie pojawiające się okna"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "Ustawienia zaawansowane"
@ -932,7 +939,7 @@ admin/views/index.vue:
moderators: "モデレーター"
users: "ユーザー"
federation: "連合"
announcements: "お知らせ"
announcements: "Ogłoszenia"
hashtags: "ハッシュタグ"
back-to-misskey: "Misskeyに戻る"
admin/views/dashboard.vue:
@ -966,17 +973,17 @@ admin/views/instance.vue:
recaptcha-site-key: "reCAPTCHA site key"
recaptcha-secret-key: "reCAPTCHA secret key"
twitter-integration-config: "Twitter連携の設定"
twitter-integration-info: "コールバックURLは /api/tw/cb に設定します。"
twitter-integration-info: "コールバックURLは {url} に設定します。"
enable-twitter-integration: "Twitter連携を有効にする"
twitter-integration-consumer-key: "Consumer key"
twitter-integration-consumer-secret: "Consumer secret"
github-integration-config: "GitHub連携の設定"
github-integration-info: "コールバックURLは /api/gh/cb に設定します。"
github-integration-info: "コールバックURLは {url} に設定します。"
enable-github-integration: "GitHub連携を有効にする"
github-integration-client-id: "Client ID"
github-integration-client-secret: "Client Secret"
discord-integration-config: "Discord連携の設定"
discord-integration-info: "コールバックURLは /api/dc/cb に設定します。"
discord-integration-info: "コールバックURLは {url} に設定します。"
enable-discord-integration: "Discord連携を有効にする"
discord-integration-client-id: "Client ID"
discord-integration-client-secret: "Client Secret"
@ -997,6 +1004,16 @@ admin/views/instance.vue:
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
external-user-recommendation-timeout: "タイムアウト"
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
email-config: "メールサーバーの設定"
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
enable-email: "メール配信を有効にする"
email: "メールアドレス"
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
smtp-secure-info: "STARTTLS使用時はオフにします。"
smtp-host: "SMTPホスト"
smtp-port: "SMTPポート"
smtp-user: "SMTPユーザー"
smtp-pass: "SMTPパスワード"
admin/views/charts.vue:
title: "チャート"
per-day: "1日ごと"
@ -1077,7 +1094,7 @@ admin/views/emoji.vue:
are-you-sure: "「$1」を削除しますか"
removed: "削除しました"
admin/views/announcements.vue:
announcements: "お知らせ"
announcements: "Ogłoszenia"
save: "保存"
remove: "削除"
add: "追加"
@ -1097,10 +1114,10 @@ desktop/views/pages/welcome.vue:
signin-button: "Zaloguj się"
signup-button: "Zarejestruj się"
timeline: "Oś czasu"
announcements: "お知らせ"
photos: "最近の画像"
announcements: "Ogłoszenia"
photos: "Ostatnie obrazy"
powered-by-misskey: "Oparto o <b>Misskey</b>."
info: "情報"
info: "Informacje"
desktop/views/pages/drive.vue:
title: "Dysk Misskey"
desktop/views/pages/home-customize.vue:
@ -1154,7 +1171,7 @@ desktop/views/pages/user/user.header.vue:
following: "Śledzeni"
followers: "Śledzący"
is-bot: "To konto jest botem"
years-old: "{age}"
years-old: "{age} lat"
year: "年"
month: "月"
day: "日"
@ -1223,10 +1240,10 @@ mobile/views/components/media-video.vue:
click-to-show: "Naciśnij aby wyświetlić"
common/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
follow: "Śledź"
request-pending: "フォロー許可待ち"
follow-processing: "フォロー処理中"
follow-request: "フォロー申請"
follow-request: "Poproś o śledzenie"
mobile/views/components/friends-maker.vue:
title: "Zacznij śledzić ludzi takich jak Ty"
empty: "Nie znaleziono podobnych użytkowników."
@ -1371,6 +1388,8 @@ mobile/views/pages/settings.vue:
note-visibility: "投稿の公開範囲"
default-note-visibility: "デフォルトの公開範囲"
remember-note-visibility: "投稿の公開範囲を記憶する"
web-search-engine: "ウェブ検索エンジン"
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
disable-via-mobile: "Nie oznaczaj wpisów jako „wysłane z telefonu”"
load-raw-images: "Wyświetlaj załączone zdjęcia w wysokiej jakości"
load-remote-media: "Wyświetlaj zawartość multimedialną ze zdalnych serwerów"
@ -1414,7 +1433,7 @@ mobile/views/pages/user.vue:
unmute: "ミュート解除"
block: "ブロック"
unblock: "ブロック解除"
years-old: "{age}"
years-old: "{age} lat"
mobile/views/pages/user/home.vue:
recent-notes: "Ostatnie wpisy"
images: "Zdjęcia"

View File

@ -26,6 +26,7 @@ common:
close: "Fechar"
do-not-copy-paste: "Por favor, não digite ou copie o código aqui. A conta pode ser comprometida."
load-more: "もっと読み込む"
enter-password: "パスワードを入力してください"
got-it: "Entendi!"
customization-tips:
title: "Dicas de personalização"
@ -457,6 +458,10 @@ common/views/components/profile-editor.vue:
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
email: "メール設定"
email-address: "メールアドレス"
email-verified: "メールアドレスが確認されました"
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
common/views/widgets/broadcast.vue:
fetching: "確認中"
no-broadcasts: "お知らせはありません"
@ -731,6 +736,8 @@ desktop/views/components/settings.vue:
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: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "詳細設定"
@ -966,17 +973,17 @@ admin/views/instance.vue:
recaptcha-site-key: "reCAPTCHA site key"
recaptcha-secret-key: "reCAPTCHA secret key"
twitter-integration-config: "Twitter連携の設定"
twitter-integration-info: "コールバックURLは /api/tw/cb に設定します。"
twitter-integration-info: "コールバックURLは {url} に設定します。"
enable-twitter-integration: "Twitter連携を有効にする"
twitter-integration-consumer-key: "Consumer key"
twitter-integration-consumer-secret: "Consumer secret"
github-integration-config: "GitHub連携の設定"
github-integration-info: "コールバックURLは /api/gh/cb に設定します。"
github-integration-info: "コールバックURLは {url} に設定します。"
enable-github-integration: "GitHub連携を有効にする"
github-integration-client-id: "Client ID"
github-integration-client-secret: "Client Secret"
discord-integration-config: "Discord連携の設定"
discord-integration-info: "コールバックURLは /api/dc/cb に設定します。"
discord-integration-info: "コールバックURLは {url} に設定します。"
enable-discord-integration: "Discord連携を有効にする"
discord-integration-client-id: "Client ID"
discord-integration-client-secret: "Client Secret"
@ -997,6 +1004,16 @@ admin/views/instance.vue:
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
external-user-recommendation-timeout: "タイムアウト"
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
email-config: "メールサーバーの設定"
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
enable-email: "メール配信を有効にする"
email: "メールアドレス"
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
smtp-secure-info: "STARTTLS使用時はオフにします。"
smtp-host: "SMTPホスト"
smtp-port: "SMTPポート"
smtp-user: "SMTPユーザー"
smtp-pass: "SMTPパスワード"
admin/views/charts.vue:
title: "チャート"
per-day: "1日ごと"
@ -1371,6 +1388,8 @@ mobile/views/pages/settings.vue:
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: "リモートサーバーのメディアを表示する"

View File

@ -7,61 +7,62 @@ common:
about-title: "Мы — ⭐ fediverse"
about: "Спасибо, что нашли Misskey. Misskey — это <b>децентрализованная платформа для микроблоггинга</b> родом с планеты Земля. Поскольку она существует внутри Fediverse (вселенной различных социальных платформ), она связана с другими платформами. Отдохните от шума большого города — и познакомьтесь с новым интернетом."
intro:
title: "Misskeyって?"
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
features: "特徴"
rich-contents: "投稿"
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
reaction: "リアクション"
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
ui: "インターフェース"
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
drive: "ドライブ"
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんかもしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんかMisskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
title: "Что такое Misskey?"
about: "Misskey - это <b>децентрализованный сервис микроблогинга</b> с открытым исходным кодом. Он имеет такие функции, как: навороченный, полностью настраиваемый пользовательский интерфейс, множество реакций на посты, бесплатное хранилище файлов с интегрированной системой управления и ещё куча передовых фишек. А ещё сетевая система под названием “Fediverse” позволяет нам общаться с пользователями других социальных сетей. Например, если ты что-нибудь запостишь, то твой пост будет отослан не только в Misskey, но ещё и mastodon. Просто представь, что планета посылает микроволны на другую планету для коммуникации."
features: "Особенности"
rich-contents: "Посты"
rich-contents-desc: "Просто выложи свою идею, актуальные темы и всё, что тебе хочется показать миру. Ты можешь декорировать свои слова, прикреплять свои любимые картинки, отправлять файлы с фильмами и создать голосование - это те вещи, которые ты можешь сделать с помощью Misskey!"
reaction: "Реакции"
reaction-desc: "Самый лёгкий способ выразить свои эмоции. Misskey позволяет добавлять различные виды реакций к постам других людей. Эмоциональный опыт из Misskey никогда не появится в других социальных сетях, позволяющих только жать “лайки”."
ui: "Интерфейс"
ui-desc: "Нет такого интерфейса, понравившегося всем. Поэтому у Misskey имеется пользовательский интерфейс, широко настраиваемый под ваши вкусы. Создай себе уникальную домашнюю страницу редактируя, подстраивая оформление ленты и размещая виджеты, которые тоже можно кастомизировать."
drive: "Хранилище файлов"
drive-desc: "Хотите запостить картинку, которую уже отправляли ранее? Хочется сортировать, переименовать и создать папку для ваших выложенных файлов? Тогда Misskey Drive - это лучшее решение для вас. Очень лёгкий способ делиться своими файлами онлайн."
outro: "Попробуйте будущие, уникальные для Misskey функции своими глазами! Если чувствуете, что это не в вашем вкусе, то попробуйте другие инстанции, ведь Misskey - это децентрализованная социальная сеть, так что ты можешь с лёгкостью найти себе товарищей. И наконец, GLHF!"
adblock:
detected: "広告ブロッカーを無効にしてください"
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
application-authorization: "アプリの連携"
close: "閉じる"
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
load-more: "もっと読み込む"
detected: "Пожалуйста, отключите блокировщик рекламы."
warning: "Некоторые функции перестанут быть доступными или будут работать неправильно, если включена блокировка рекламы. <strong>В Misskey нет рекламы</strong>."
application-authorization: "Авторизация приложений"
close: "Закрыть"
do-not-copy-paste: "Пожалуйста, не вводите и не вставляйте сюда код. Аккаунту может угрожать опасность."
load-more: "Загрузить больше"
enter-password: "パスワードを入力してください"
got-it: "わかった"
customization-tips:
title: "カスタマイズのヒント"
paragraph: "<p>ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。</p><p>一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。</p><p>ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。</p><p>カスタマイズを終了するには、右上の「完了」をクリックします。</p>"
gotit: "Got it!"
notification:
file-uploaded: "ファイルがアップロードされました"
message-from: "{}さんからメッセージ:"
reversi-invited: "対局への招待があります"
reversi-invited-by: "{}さんから"
file-uploaded: "Файл отправлен!"
message-from: "Сообщение от {}:"
reversi-invited: "Приглашён в игру"
reversi-invited-by: "Был приглашён {}:"
notified-by: "{}さんから"
reply-from: "{}さんから返信:"
quoted-by: "{}さんが引用:"
reply-from: "Ответ от {}:"
quoted-by: "Цитировано {}:"
time:
unknown: "なぞのじかん"
future: "未来"
just_now: "たった今"
seconds_ago: "{}秒前"
minutes_ago: "{}分前"
hours_ago: "{}時間前"
days_ago: "{}日前"
weeks_ago: "{}週間前"
months_ago: "{}ヶ月前"
years_ago: "{}年前"
month-and-day: "{month}月 {day}日"
trash: "ゴミ箱"
drive: "ドライブ"
messaging: "トーク"
unknown: "неизвестно"
future: "сейчас"
just_now: "сейчас"
seconds_ago: "{} секунд назад"
minutes_ago: "{} минут назад"
hours_ago: "{} часов назад"
days_ago: "{} дней назад"
weeks_ago: "{} недель назад"
months_ago: "{} месяцев назад"
years_ago: "{} лет назад"
month-and-day: "{day}.{month}"
trash: "Мусорное ведро"
drive: "Drive"
messaging: "Чат"
weekday-short:
sunday: ""
monday: ""
tuesday: ""
wednesday: ""
thursday: ""
friday: ""
saturday: ""
sunday: "Вс"
monday: "Пн"
tuesday: "Вт"
wednesday: "Ср"
thursday: "Чт"
friday: "Пт"
saturday: "Сб"
weekday:
sunday: "日曜日"
monday: "月曜日"
@ -111,60 +112,60 @@ common:
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
always-show-nsfw: "常に閲覧注意のメディアを表示する"
always-mark-nsfw: "常にメディアを閲覧注意として投稿"
disable-animated-mfm: "Отключить анимированный текст в постах"
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: "OS標準の絵文字を使用"
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
show-via: "показать через"
reduce-motion: "Уменьшить движение в интерфейсе"
this-setting-is-this-device-only: "Только для этого устройства"
use-os-default-emojis: "Использовать стандартные Emoji из ОС"
do-not-use-in-production: 'Эта сборка для разработчиков. Не используйте в продакшне.'
is-remote-user: "このユーザー情報はコピーです。"
is-remote-post: "この投稿情報はコピーです。"
view-on-remote: "正確な情報を見る"
renoted-by: "{user}がRenote"
error:
title: '問題が発生しました'
retry: 'やり直す'
title: 'Что-то пошло не так :('
retry: 'Повторить'
reversi:
drawn: "引き分け"
my-turn: "あなたのターンです"
opponent-turn: "相手のターンです"
turn-of: "{name}のターンです"
past-turn-of: "{name}のターン"
won: "{name}の勝ち"
black: ""
white: ""
total: "合計"
this-turn: "{count}ターン目"
drawn: "Ничья"
my-turn: "Ваш ход"
opponent-turn: "Ход оппонента"
turn-of: "Ход {name}"
past-turn-of: "Ход {name}"
won: "{name} победил"
black: "Чёрный"
white: "Белый"
total: "Всего"
this-turn: "Ход {count}"
widgets:
analog-clock: "アナログ時計"
profile: "プロフィール"
calendar: "カレンダー"
timemachine: "カレンダー(タイムマシン)"
activity: "アクティビティ"
rss: "RSSリーダー"
memo: "付箋"
trends: "トレンド"
photo-stream: "フォトストリーム"
analog-clock: "Аналоговые часы"
profile: "Профиль"
calendar: "Календарь"
timemachine: "Календарь (машина времени)"
activity: "Активность"
rss: "Ридер RSS"
memo: "Заметка"
trends: "Популярное"
photo-stream: "Фотопоток"
posts-monitor: "投稿チャート"
slideshow: "スライドショー"
version: "バージョン"
slideshow: "Слайдшоу"
version: "Версия"
broadcast: "ブロードキャスト"
notifications: "通知"
users: "おすすめユーザー"
polls: "アンケート"
notifications: "Уведомления"
users: "Рекомендованные пользователи"
polls: "Голосования"
post-form: "投稿フォーム"
server: "サーバー情報"
server: "Информация о сервере"
donation: "寄付のお願い"
nav: "ナビゲーション"
tips: "ヒント"
hashtags: "ハッシュタグ"
dev: "アプリの作成に失敗しました。再度お試しください。"
ai-chan-kawaii: "藍ちゃかわいい"
hashtags: "Хэштеги"
dev: "Не удалось создать приложение. Пожалуйста, попробуйте ещё раз."
ai-chan-kawaii: "Ai-chan kawaii!"
auth/views/form.vue:
share-access: "<i>{name}</i>があなたのアカウントにアクセスすることを許可しますか?"
share-access: "Вы разрешаете <i>{name}</i> получить доступ к вашему аккаунту?"
permission-ask: "このアプリは次の権限を要求しています:"
account-read: "アカウントの情報を見る。"
account-write: "アカウントの情報を操作する。"
@ -210,28 +211,28 @@ common/views/components/games/reversi/reversi.index.vue:
all-games: "みんなの対局"
enter-username: "ユーザー名を入力してください"
game-state:
ended: "終了"
playing: "進行中"
ended: "Завершено"
playing: "В процессе"
common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定"
settings-of-the-game: "Настройки игры"
choose-map: "マップを選択"
random: "ランダム"
black-or-white: "先手/後手"
black-is: "{}が黒"
rules: "ルール"
random: "Случайно"
black-or-white: "Чёрные/Белые"
black-is: "{} ходит чёрными"
rules: "Правила"
is-llotheo: "石の少ない方が勝ち(ロセオ)"
looped-map: "ループマップ"
can-put-everywhere: "どこでも置けるモード"
settings-of-the-bot: "Botの設定"
this-game-is-started-soon: "ゲームは数秒後に開始されます"
waiting-for-other: "相手の準備が完了するのを待っています"
settings-of-the-bot: "Настройки бота"
this-game-is-started-soon: "Игра вот-вот начнётся"
waiting-for-other: "Ожидание оппонента"
waiting-for-me: "あなたの準備が完了するのを待っています"
waiting-for-both: "準備中"
cancel: "キャンセル"
ready: "準備完了"
cancel: "Отмена"
ready: "Готов"
cancel-ready: "準備続行"
common/views/components/connect-failed.vue:
title: "サーバーに接続できません"
title: "Невозможно подключиться к серверу"
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
thanks: "いつもMisskeyをご利用いただきありがとうございます。"
troubleshoot: "トラブルシュート"
@ -457,6 +458,10 @@ common/views/components/profile-editor.vue:
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
email: "メール設定"
email-address: "メールアドレス"
email-verified: "メールアドレスが確認されました"
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
common/views/widgets/broadcast.vue:
fetching: "確認中"
no-broadcasts: "お知らせはありません"
@ -731,6 +736,8 @@ desktop/views/components/settings.vue:
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: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "詳細設定"
@ -966,17 +973,17 @@ admin/views/instance.vue:
recaptcha-site-key: "reCAPTCHA site key"
recaptcha-secret-key: "reCAPTCHA secret key"
twitter-integration-config: "Twitter連携の設定"
twitter-integration-info: "コールバックURLは /api/tw/cb に設定します。"
twitter-integration-info: "コールバックURLは {url} に設定します。"
enable-twitter-integration: "Twitter連携を有効にする"
twitter-integration-consumer-key: "Consumer key"
twitter-integration-consumer-secret: "Consumer secret"
github-integration-config: "GitHub連携の設定"
github-integration-info: "コールバックURLは /api/gh/cb に設定します。"
github-integration-info: "コールバックURLは {url} に設定します。"
enable-github-integration: "GitHub連携を有効にする"
github-integration-client-id: "Client ID"
github-integration-client-secret: "Client Secret"
discord-integration-config: "Discord連携の設定"
discord-integration-info: "コールバックURLは /api/dc/cb に設定します。"
discord-integration-info: "コールバックURLは {url} に設定します。"
enable-discord-integration: "Discord連携を有効にする"
discord-integration-client-id: "Client ID"
discord-integration-client-secret: "Client Secret"
@ -997,6 +1004,16 @@ admin/views/instance.vue:
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
external-user-recommendation-timeout: "タイムアウト"
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
email-config: "メールサーバーの設定"
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
enable-email: "メール配信を有効にする"
email: "メールアドレス"
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
smtp-secure-info: "STARTTLS使用時はオフにします。"
smtp-host: "SMTPホスト"
smtp-port: "SMTPポート"
smtp-user: "SMTPユーザー"
smtp-pass: "SMTPパスワード"
admin/views/charts.vue:
title: "チャート"
per-day: "1日ごと"
@ -1371,6 +1388,8 @@ mobile/views/pages/settings.vue:
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: "リモートサーバーのメディアを表示する"

View File

@ -26,6 +26,7 @@ common:
close: "关闭"
do-not-copy-paste: "请不要在这里输入或粘贴代码。您帐户可能会受到损害。"
load-more: "加载更多"
enter-password: "パスワードを入力してください"
got-it: "没问题"
customization-tips:
title: "客制化提示"
@ -457,6 +458,10 @@ common/views/components/profile-editor.vue:
saved: "更新配置文件成功"
uploading: "正在上传"
upload-failed: "上传失败"
email: "メール設定"
email-address: "メールアドレス"
email-verified: "メールアドレスが確認されました"
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
common/views/widgets/broadcast.vue:
fetching: "确认中"
no-broadcasts: "没有公告"
@ -731,6 +736,8 @@ desktop/views/components/settings.vue:
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: "如果可用,将使用弹出显示而不是打开新窗口。 此设置存储在浏览器中。"
advanced: "更多设置"
@ -966,17 +973,17 @@ admin/views/instance.vue:
recaptcha-site-key: "reCAPTCHA site key"
recaptcha-secret-key: "reCAPTCHA secret key"
twitter-integration-config: "连接到Twitter的设置"
twitter-integration-info: "回调 URL 设置为 /api/tw/cb"
twitter-integration-info: "设置返回的URL{url}。"
enable-twitter-integration: "启用连接到Twitter"
twitter-integration-consumer-key: "Consumer key"
twitter-integration-consumer-secret: "Consumer Secret"
github-integration-config: "连接到GitHub设置"
github-integration-info: "回调 URL 设置为 /api/gh/cb"
github-integration-info: "设置返回的URL{url}。"
enable-github-integration: "启用连接到GitHub"
github-integration-client-id: "Client ID"
github-integration-client-secret: "Client Secret"
discord-integration-config: "设置 Discord Integration"
discord-integration-info: "回调 URL 设置为 /api/dc/cb"
discord-integration-info: "设置返回的URL{url}。"
enable-discord-integration: "启用 Discord 连接"
discord-integration-client-id: "Client ID"
discord-integration-client-secret: "Client Secret"
@ -991,12 +998,22 @@ admin/views/instance.vue:
invite: "邀请"
save: "保存"
saved: "保存完毕"
user-recommendation-config: "おすすめユーザー"
enable-external-user-recommendation: "外部ユーザーレコメンデーションを有効にする"
external-user-recommendation-engine: "エンジン"
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
external-user-recommendation-timeout: "タイムアウト"
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
user-recommendation-config: "推荐用户"
enable-external-user-recommendation: "启用外部用户推荐"
external-user-recommendation-engine: "引擎"
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
external-user-recommendation-timeout: "超时"
external-user-recommendation-timeout-desc: "单位为毫秒 (例如:300000)"
email-config: "メールサーバーの設定"
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
enable-email: "メール配信を有効にする"
email: "メールアドレス"
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
smtp-secure-info: "STARTTLS使用時はオフにします。"
smtp-host: "SMTPホスト"
smtp-port: "SMTPポート"
smtp-user: "SMTPユーザー"
smtp-pass: "SMTPパスワード"
admin/views/charts.vue:
title: "历史记录"
per-day: "每天"
@ -1024,11 +1041,11 @@ admin/views/charts.vue:
network-usage: "网络流量"
admin/views/users.vue:
operation: "操作"
username-or-userid: "ユーザー名またはユーザーID"
user-not-found: "ユーザーが見つかりません"
lookup: "照会"
reset-password: "パスワードをリセット"
password-updated: "パスワードは現在「{password}」です"
username-or-userid: "用户名或用户ID"
user-not-found: "用户不存在"
lookup: "订阅"
reset-password: "密码重置"
password-updated: "密码为「{password}」"
suspend: "被冻结"
suspended: "成功冻结用户"
unsuspend: "已解除冻结"
@ -1038,20 +1055,20 @@ admin/views/users.vue:
unverify: "解除账户认证"
unverified: "该帐户未经认证"
users:
title: "ユーザー"
title: "用户"
sort:
title: "ソート"
createdAtAsc: "登録日時が古い順"
createdAtDesc: "登録日時が新しい順"
updatedAtAsc: "更新日時が古い順"
updatedAtDesc: "更新日時が新しい順"
title: "排序"
createdAtAsc: "注册时间从旧到新"
createdAtDesc: "注册时间从新到旧"
updatedAtAsc: "更新时间从旧到新"
updatedAtDesc: "更新时间从新到旧"
origin:
title: "オリジン"
combined: "ローカル+リモート"
local: "ローカル"
remote: "リモート"
createdAt: "登録日時"
updatedAt: "更新日時"
title: "源自"
combined: "本地+远程"
local: "本地"
remote: "远程"
createdAt: "注册日期"
updatedAt: "最后更新"
admin/views/moderators.vue:
add-moderator:
title: "注册版主"
@ -1371,6 +1388,8 @@ mobile/views/pages/settings.vue:
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: "显示来自远程服务器的媒体"

View File

@ -1,8 +1,8 @@
{
"name": "misskey",
"author": "syuilo <i@syuilo.com>",
"version": "10.57.2",
"clientVersion": "2.0.12088",
"version": "10.59.4",
"clientVersion": "2.0.12323",
"codename": "nighthike",
"main": "./built/index.js",
"private": true,
@ -35,7 +35,7 @@
"@types/deep-equal": "1.0.1",
"@types/double-ended-queue": "2.1.0",
"@types/elasticsearch": "5.0.28",
"@types/file-type": "5.2.1",
"@types/file-type": "5.2.2",
"@types/gulp": "3.8.36",
"@types/gulp-htmlmin": "1.3.32",
"@types/gulp-mocha": "0.0.32",
@ -64,6 +64,7 @@
"@types/mongodb": "3.1.14",
"@types/ms": "0.7.30",
"@types/node": "10.12.10",
"@types/nodemailer": "4.6.5",
"@types/oauth": "0.9.1",
"@types/parsimmon": "1.10.0",
"@types/portscanner": "2.1.0",
@ -88,7 +89,7 @@
"@types/ws": "6.0.1",
"animejs": "2.2.0",
"apexcharts": "2.2.3",
"autobind-decorator": "2.2.1",
"autobind-decorator": "2.3.1",
"autosize": "4.0.2",
"autwh": "0.1.0",
"bcryptjs": "2.4.3",
@ -166,6 +167,7 @@
"ms": "2.1.1",
"nan": "2.11.1",
"nested-property": "0.0.7",
"nodemailer": "4.7.0",
"nprogress": "0.2.0",
"object-assign-deep": "0.4.0",
"on-build-webpack": "0.1.0",
@ -201,13 +203,13 @@
"stylus": "0.54.5",
"stylus-loader": "3.0.2",
"summaly": "2.2.0",
"systeminformation": "3.49.3",
"systeminformation": "3.51.3",
"syuilo-password-strength": "0.0.1",
"terser-webpack-plugin": "1.1.0",
"textarea-caret": "3.1.0",
"tinycolor2": "1.4.1",
"tmp": "0.0.33",
"ts-loader": "5.3.0",
"ts-loader": "5.3.1",
"ts-node": "7.0.1",
"tslint": "5.10.0",
"typescript": "3.1.6",
@ -221,7 +223,7 @@
"vue-content-loading": "1.5.3",
"vue-cropperjs": "2.2.2",
"vue-i18n": "8.3.2",
"vue-js-modal": "1.3.26",
"vue-js-modal": "1.3.27",
"vue-loader": "15.4.2",
"vue-marquee-text-component": "1.1.0",
"vue-router": "3.0.2",
@ -233,8 +235,8 @@
"vuex": "3.0.1",
"vuex-persistedstate": "2.5.4",
"web-push": "3.3.3",
"webfinger.js": "2.6.6",
"webpack": "4.26.0",
"webfinger.js": "2.7.0",
"webpack": "4.26.1",
"webpack-cli": "3.1.2",
"websocket": "1.0.28",
"ws": "6.1.2",

View File

@ -12,11 +12,15 @@
<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="['far', 'envelope']"/></i>{{ $t('maintainer-email') }}</ui-input>
<ui-input v-model="maintainerEmail" type="email"><i slot="icon"><fa :icon="farEnvelope"/></i>{{ $t('maintainer-email') }}</ui-input>
</section>
<section class="fit-top fit-bottom">
<ui-input v-model="maxNoteTextLength">{{ $t('max-note-text-length') }}</ui-input>
</section>
<section>
<ui-switch v-model="disableRegistration">{{ $t('disable-registration') }}</ui-switch>
<ui-switch v-model="disableLocalTimeline">{{ $t('disable-local-timeline') }}</ui-switch>
</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>
@ -37,10 +41,18 @@
<ui-info warn>{{ $t('proxy-account-warn') }}</ui-info>
</section>
<section>
<ui-switch v-model="disableRegistration">{{ $t('disable-registration') }}</ui-switch>
</section>
<section>
<ui-switch v-model="disableLocalTimeline">{{ $t('disable-local-timeline') }}</ui-switch>
<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-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-horizon-group inputs>
<ui-input v-model="smtpUser" :disabled="!enableEmail">{{ $t('smtp-user') }}</ui-input>
<ui-input v-model="smtpPass" :disabled="!enableEmail">{{ $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>
</section>
<section>
<header>summaly Proxy</header>
@ -69,7 +81,7 @@
<div slot="title"><fa :icon="['fab', 'twitter']"/> {{ $t('twitter-integration-config') }}</div>
<section>
<ui-switch v-model="enableTwitterIntegration">{{ $t('enable-twitter-integration') }}</ui-switch>
<ui-info>{{ $t('twitter-integration-info') }}</ui-info>
<ui-info>{{ $t('twitter-integration-info', { url: `${url}/api/tw/cb` }) }}</ui-info>
<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-button @click="updateMeta">{{ $t('save') }}</ui-button>
@ -80,7 +92,7 @@
<div slot="title"><fa :icon="['fab', 'github']"/> {{ $t('github-integration-config') }}</div>
<section>
<ui-switch v-model="enableGithubIntegration">{{ $t('enable-github-integration') }}</ui-switch>
<ui-info>{{ $t('github-integration-info') }}</ui-info>
<ui-info>{{ $t('github-integration-info', { url: `${url}/api/gh/cb` }) }}</ui-info>
<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-button @click="updateMeta">{{ $t('save') }}</ui-button>
@ -91,7 +103,7 @@
<div slot="title"><fa :icon="['fab', 'discord']"/> {{ $t('discord-integration-config') }}</div>
<section>
<ui-switch v-model="enableDiscordIntegration">{{ $t('enable-discord-integration') }}</ui-switch>
<ui-info>{{ $t('discord-integration-info') }}</ui-info>
<ui-info>{{ $t('discord-integration-info', { url: `${url}/api/dc/cb` }) }}</ui-info>
<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-button @click="updateMeta">{{ $t('save') }}</ui-button>
@ -103,15 +115,17 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../i18n';
import { host } from '../../config';
import { url, host } from '../../config';
import { toUnicode } from 'punycode';
import { faHeadset, faShieldAlt, faGhost, faUserPlus } from '@fortawesome/free-solid-svg-icons';
import { faEnvelope as farEnvelope } from '@fortawesome/free-regular-svg-icons';
export default Vue.extend({
i18n: i18n('admin/views/instance.vue'),
data() {
return {
url,
host: toUnicode(host),
maintainerName: null,
maintainerEmail: null,
@ -143,7 +157,14 @@ export default Vue.extend({
externalUserRecommendationEngine: null,
externalUserRecommendationTimeout: null,
summalyProxy: null,
faHeadset, faShieldAlt, faGhost, faUserPlus
enableEmail: false,
email: null,
smtpSecure: false,
smtpHost: null,
smtpPort: null,
smtpUser: null,
smtpPass: null,
faHeadset, faShieldAlt, faGhost, faUserPlus, farEnvelope
};
},
@ -176,6 +197,13 @@ export default Vue.extend({
this.externalUserRecommendationEngine = meta.externalUserRecommendationEngine;
this.externalUserRecommendationTimeout = meta.externalUserRecommendationTimeout;
this.summalyProxy = meta.summalyProxy;
this.enableEmail = meta.enableEmail;
this.email = meta.email;
this.smtpSecure = meta.smtpSecure;
this.smtpHost = meta.smtpHost;
this.smtpPort = meta.smtpPort;
this.smtpUser = meta.smtpUser;
this.smtpPass = meta.smtpPass;
});
},
@ -221,7 +249,14 @@ export default Vue.extend({
enableExternalUserRecommendation: this.enableExternalUserRecommendation,
externalUserRecommendationEngine: this.externalUserRecommendationEngine,
externalUserRecommendationTimeout: parseInt(this.externalUserRecommendationTimeout, 10),
summalyProxy: this.summalyProxy
summalyProxy: this.summalyProxy,
enableEmail: this.enableEmail,
email: this.email,
smtpSecure: this.smtpSecure,
smtpHost: this.smtpHost,
smtpPort: parseInt(this.smtpPort, 10),
smtpUser: this.smtpUser,
smtpPass: this.smtpPass
}).then(() => {
this.$root.alert({
type: 'success',

View File

@ -21,12 +21,12 @@ export default async function($root: any, force = false, silent = false) {
console.error(e);
}
if (!silent) {
/*if (!silent) {
$root.alert({
title: $root.$t('@.update-available-title'),
text: $root.$t('@.update-available', { newer, current })
});
}
}*/
return newer;
} else {

View File

@ -2,7 +2,7 @@ const faces = [
'(=^・・^=)',
'v(\'ω\')v',
'🐡( \'-\' 🐡 )フグパンチ!!!!',
'🖕(´・_・`)🖕',
'✌️(´・_・`)✌️',
'(。><。)',
'(Δ・x・Δ)'
];

View File

@ -78,9 +78,10 @@ export default (opts: Opts = {}) => ({
urls(): string[] {
if (this.appearNote.text) {
const ast = parse(this.appearNote.text);
// TODO: 再帰的にURL要素がないか調べる
return unique(ast
.filter(t => (t.type == 'url' || t.type == 'link') && !t.silent)
.map(t => t.url));
.filter(t => ((t.name == 'url' || t.name == 'link') && t.props.url && !t.props.silent))
.map(t => t.props.url));
} else {
return null;
}

View File

@ -20,7 +20,7 @@ export default function(me, settings, note) {
}
}
if (!isMyNote && note.text && settings.mutedWords.some(q => !q.some(word => !note.text.includes(word)))) {
if (!isMyNote && note.text && settings.mutedWords.some(q => q.length > 0 && !q.some(word => !note.text.includes(word)))) {
return true;
}

View File

@ -187,7 +187,8 @@ export default Vue.extend({
} else {
this.$root.api('users/search', {
query: this.q,
limit: 30
limit: 10,
detail: false
}).then(users => {
this.users = users;
this.fetching = false;

View File

@ -50,15 +50,13 @@
</div>
<div class="player" v-if="game.isEnded">
<div>
<button @click="logPos = 0" :disabled="logPos == 0"><fa icon="angle-double-left"/></button>
<button @click="logPos--" :disabled="logPos == 0"><fa icon="angle-left"/></button>
</div>
<span>{{ logPos }} / {{ logs.length }}</span>
<div>
<button @click="logPos++" :disabled="logPos == logs.length"><fa icon="angle-right"/></button>
<button @click="logPos = logs.length" :disabled="logPos == logs.length"><fa icon="angle-double-right"/></button>
</div>
<ui-horizon-group>
<ui-button @click="logPos = 0" :disabled="logPos == 0"><fa :icon="faAngleDoubleLeft"/></ui-button>
<ui-button @click="logPos--" :disabled="logPos == 0"><fa :icon="faAngleLeft"/></ui-button>
<ui-button @click="logPos++" :disabled="logPos == logs.length"><fa :icon="faAngleRight"/></ui-button>
<ui-button @click="logPos = logs.length" :disabled="logPos == logs.length"><fa :icon="faAngleDoubleRight"/></ui-button>
</ui-horizon-group>
</div>
<div class="info">
@ -75,6 +73,7 @@ import i18n from '../../../../../i18n';
import * as CRC32 from 'crc-32';
import Reversi, { Color } from '../../../../../../../games/reversi/core';
import { url } from '../../../../../config';
import { faAngleDoubleLeft, faAngleLeft, faAngleRight, faAngleDoubleRight } from '@fortawesome/free-solid-svg-icons';
export default Vue.extend({
i18n: i18n('common/views/components/games/reversi/reversi.game.vue'),
@ -99,7 +98,8 @@ export default Vue.extend({
o: null as Reversi,
logs: [],
logPos: 0,
pollingClock: null
pollingClock: null,
faAngleDoubleLeft, faAngleLeft, faAngleRight, faAngleDoubleRight
};
},
@ -449,7 +449,9 @@ export default Vue.extend({
padding-bottom 16px
> .player
padding-bottom 32px
padding 0 16px 32px 16px
margin 0 auto
max-width 500px
> span
display inline-block

View File

@ -22,7 +22,10 @@ export default Vue.extend({
},
methods: {
search() {
window.open(`https://www.google.com/?#q=${this.query}`, '_blank');
const engine = this.$store.state.settings.webSearchEngine ||
'https://www.google.com/?#q={{query}}';
const url = engine.replace('{{query}}', this.query)
window.open(url, '_blank');
}
}
});

View File

@ -180,6 +180,7 @@ export default Vue.extend({
padding 8px 16px
width 100%
color var(--popupFg)
white-space nowrap
&:hover
color var(--primaryForeground)

View File

@ -51,8 +51,8 @@ export default Vue.extend({
if (this.message.text) {
const ast = parse(this.message.text);
return unique(ast
.filter(t => (t.type == 'url' || t.type == 'link') && !t.silent)
.map(t => t.url));
.filter(t => ((t.name == 'url' || t.name == 'link') && t.props.url && !t.silent))
.map(t => t.props.url));
} else {
return null;
}

View File

@ -115,9 +115,11 @@ export default Vue.extend({
}
this.$root.api('users/search', {
query: this.q,
max: 5
localOnly: true,
limit: 10,
detail: false
}).then(users => {
this.result = users;
this.result = users.filter(user => user.id != this.$store.state.i.id);
});
},
navigate(user) {

View File

@ -111,6 +111,14 @@ export default Vue.component('misskey-flavored-markdown', {
}, genEl(token.children));
}
case 'center': {
return [createElement('div', {
attrs: {
style: 'text-align:center;'
}
}, genEl(token.children))];
}
case 'motion': {
motionCount++;
const isLong = getTextCount(token.children) > 10 || getChildrenCount(token.children) > 5;

View File

@ -29,7 +29,7 @@ export default Vue.extend({
>>> .quote
margin 8px
padding 6px 12px
padding 6px 0 6px 12px
color var(--mfmQuote)
border-left solid 3px var(--mfmQuoteLine)
@ -38,7 +38,7 @@ export default Vue.extend({
margin 0 0.5em
font-size 80%
color #525252
background #f8f8f8
background rgba(0, 0, 0, 0.05)
border-radius 2px
>>> pre > code

View File

@ -72,7 +72,7 @@ export default Vue.extend({
methods: {
save() {
this._mutedWords = this.mutedWords.split('\n').map(line => line.split(' '));
this._mutedWords = this.mutedWords.split('\n').map(line => line.split(' ').filter(x => x != ''));
}
}
});

View File

@ -66,6 +66,19 @@
<ui-switch v-model="carefulBot" @change="save(false)">{{ $t('careful-bot') }}</ui-switch>
</div>
</section>
<section v-if="enableEmail">
<header>{{ $t('email') }}</header>
<div>
<template v-if="$store.state.i.email != null">
<ui-info v-if="$store.state.i.emailVerified">{{ $t('email-verified') }}</ui-info>
<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>
</div>
</section>
</ui-card>
</template>
@ -77,9 +90,12 @@ import { toUnicode } from 'punycode';
export default Vue.extend({
i18n: i18n('common/views/components/profile-editor.vue'),
data() {
return {
host: toUnicode(host),
enableEmail: false,
email: null,
name: null,
username: null,
location: null,
@ -113,7 +129,11 @@ export default Vue.extend({
},
created() {
this.name = this.$store.state.i.name || '';
this.$root.getMeta().then(meta => {
this.enableEmail = meta.enableEmail;
});
this.email = this.$store.state.i.email;
this.name = this.$store.state.i.name;
this.username = this.$store.state.i.username;
this.location = this.$store.state.i.profile.location;
this.description = this.$store.state.i.description;
@ -179,8 +199,8 @@ export default Vue.extend({
location: this.location || null,
description: this.description || null,
birthday: this.birthday || null,
avatarId: this.avatarId,
bannerId: this.bannerId,
avatarId: this.avatarId || undefined,
bannerId: this.bannerId || undefined,
isCat: !!this.isCat,
isBot: !!this.isBot,
isLocked: !!this.isLocked,
@ -199,6 +219,18 @@ export default Vue.extend({
});
}
});
},
updateEmail() {
this.$input({
title: this.$t('@.enter-password'),
type: 'password'
}).then(password => {
this.$root.api('i/update_email', {
password: password,
email: this.email == '' ? null : this.email
});
});
}
}
});

View File

@ -67,7 +67,8 @@ export default Vue.extend({
username: this.username,
password: this.password,
token: this.user && this.user.twoFactorEnabled ? this.token : undefined
}, true).then(() => {
}, true).then(res => {
localStorage.setItem('i', res.i);
location.reload();
}).catch(() => {
alert(this.$t('login-failed'));

View File

@ -79,6 +79,10 @@ export default Vue.extend({
*
pointer-events none
user-select none
&:disabled
opacity 0.7
&:focus
&:after
@ -107,30 +111,30 @@ export default Vue.extend({
color var(--text)
background var(--buttonBg)
&:hover
&:not(:disabled):hover
background var(--buttonHoverBg)
&:active
&:not(:disabled):active
background var(--buttonActiveBg)
&.primary
color var(--primaryForeground)
background var(--primary)
&:hover
&:not(:disabled):hover
background var(--primaryLighten5)
&:active
&:not(:disabled):active
background var(--primaryDarken5)
&:not(.fill)
color var(--primary)
background none
&:hover
&:not(:disabled):hover
color var(--primaryDarken5)
&:active
&:not(:disabled):active
background var(--primaryAlpha03)
</style>

View File

@ -22,6 +22,7 @@ export default Vue.extend({
<style lang="stylus" scoped>
.ui-card
margin 16px
max-width 850px
color var(--faceText)
background var(--face)
border-radius var(--round)

View File

@ -123,7 +123,7 @@ export default Vue.extend({
> span
display block
line-height 20px
color currentColor
color var(--text)
transition inherit
> p

View File

@ -1,5 +1,5 @@
<template>
<div class="uofhebxjdgksfmltszlxurtjnjjsvioh" v-if="video.isSensitive && hide" @click="hide = false">
<div class="uofhebxjdgksfmltszlxurtjnjjsvioh" v-if="video.isSensitive && hide && !$store.state.device.alwaysShowNsfw" @click="hide = false">
<div>
<b><fa icon="exclamation-triangle"/> {{ $t('sensitive') }}</b>
<span>{{ $t('click-to-show') }}</span>

View File

@ -1,5 +1,5 @@
<template>
<div class="mk-note-detail" :title="title">
<div class="mk-note-detail" :title="title" tabindex="-1">
<button
class="read-more"
v-if="appearNote.reply && appearNote.reply.replyId && conversation.length == 0"
@ -39,7 +39,7 @@
</header>
<div class="body">
<p v-if="appearNote.cw != null" class="cw">
<span class="text" v-if="appearNote.cw != ''">{{ appearNote.cw }}</span>
<misskey-flavored-markdown v-if="appearNote.cw != ''" class="text" :text="appearNote.cw" :author="appearNote.user" :i="$store.state.i" :custom-emojis="appearNote.emojis" />
<mk-cw-button v-model="showContent"/>
</p>
<div class="content" v-show="appearNote.cw == null || showContent">
@ -63,18 +63,18 @@
<footer>
<span class="app" v-if="note.app && $store.state.settings.showVia">via <b>{{ note.app.name }}</b></span>
<mk-reactions-viewer :note="appearNote"/>
<button class="replyButton" @click="reply" :title="$t('reply')">
<button class="replyButton" @click="reply()" :title="$t('reply')">
<template v-if="appearNote.reply"><fa icon="reply-all"/></template>
<template v-else><fa icon="reply"/></template>
<p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p>
</button>
<button class="renoteButton" @click="renote" :title="$t('renote')">
<button class="renoteButton" @click="renote()" :title="$t('renote')">
<fa icon="retweet"/><p class="count" v-if="appearNote.renoteCount > 0">{{ appearNote.renoteCount }}</p>
</button>
<button class="reactionButton" :class="{ reacted: appearNote.myReaction != null }" @click="react" ref="reactButton" :title="$t('add-reaction')">
<button class="reactionButton" :class="{ reacted: appearNote.myReaction != null }" @click="react()" ref="reactButton" :title="$t('add-reaction')">
<fa icon="plus"/><p class="count" v-if="appearNote.reactions_count > 0">{{ appearNote.reactions_count }}</p>
</button>
<button @click="menu" ref="menuButton">
<button @click="menu()" ref="menuButton">
<fa icon="ellipsis-h"/>
</button>
</footer>
@ -88,23 +88,18 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
import parse from '../../../../../mfm/parse';
import MkPostFormWindow from './post-form-window.vue';
import MkRenoteFormWindow from './renote-form-window.vue';
import MkNoteMenu from '../../../common/views/components/note-menu.vue';
import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
import XSub from './note.sub.vue';
import { sum, unique } from '../../../../../prelude/array';
import noteSubscriber from '../../../common/scripts/note-subscriber';
import noteMixin from '../../../common/scripts/note-mixin';
export default Vue.extend({
i18n: i18n('desktop/views/components/note-detail.vue'),
components: {
XSub
},
mixins: [noteSubscriber('note')],
mixins: [noteMixin(), noteSubscriber('note')],
props: {
note: {
@ -118,47 +113,12 @@ export default Vue.extend({
data() {
return {
showContent: false,
conversation: [],
conversationFetching: false,
replies: []
};
},
computed: {
isRenote(): boolean {
return (this.note.renote &&
this.note.text == null &&
this.note.fileIds.length == 0 &&
this.note.poll == null);
},
appearNote(): any {
return this.isRenote ? this.note.renote : this.note;
},
reactionsCount(): number {
return this.appearNote.reactionCounts
? sum(Object.values(this.appearNote.reactionCounts))
: 0;
},
title(): string {
return new Date(this.appearNote.createdAt).toLocaleString();
},
urls(): string[] {
if (this.appearNote.text) {
const ast = parse(this.appearNote.text);
return unique(ast
.filter(t => (t.type == 'url' || t.type == 'link') && !t.silent)
.map(t => t.url));
} else {
return null;
}
}
},
mounted() {
// Get replies
if (!this.compact) {
@ -169,24 +129,6 @@ export default Vue.extend({
this.replies = replies;
});
}
// Draw map
if (this.appearNote.geo) {
const shouldShowMap = this.$store.getters.isSignedIn ? this.$store.state.settings.showMaps : true;
if (shouldShowMap) {
this.$root.os.getGoogleMaps().then(maps => {
const uluru = new maps.LatLng(this.appearNote.geo.coordinates[1], this.appearNote.geo.coordinates[0]);
const map = new maps.Map(this.$refs.map, {
center: uluru,
zoom: 15
});
new maps.Marker({
position: uluru,
map: map
});
});
}
}
},
methods: {
@ -200,32 +142,6 @@ export default Vue.extend({
this.conversationFetching = false;
this.conversation = conversation.reverse();
});
},
reply() {
this.$root.new(MkPostFormWindow, {
reply: this.appearNote
});
},
renote() {
this.$root.new(MkRenoteFormWindow, {
note: this.appearNote
});
},
react() {
this.$root.new(MkReactionPicker, {
source: this.$refs.reactButton,
note: this.appearNote
});
},
menu() {
this.$root.new(MkNoteMenu, {
source: this.$refs.menuButton,
note: this.appearNote
});
}
}
});

View File

@ -5,7 +5,7 @@
<mk-note-header class="header" :note="note" :mini="true"/>
<div class="body">
<p v-if="note.cw != null" class="cw">
<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
<misskey-flavored-markdown v-if="note.cw != ''" class="text" :text="note.cw" :author="note.user" :i="$store.state.i" :custom-emojis="note.emojis" />
<mk-cw-button v-model="showContent"/>
</p>
<div class="content" v-show="note.cw == null || showContent">

View File

@ -5,7 +5,7 @@
<mk-note-header class="header" :note="note"/>
<div class="body">
<p v-if="note.cw != null" class="cw">
<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
<misskey-flavored-markdown v-if="note.cw != ''" class="text" :text="note.cw" :author="note.user" :i="$store.state.i" :custom-emojis="note.emojis" />
<mk-cw-button v-model="showContent"/>
</p>
<div class="content" v-show="note.cw == null || showContent">

View File

@ -20,7 +20,7 @@
<mk-note-header class="header" :note="appearNote" :mini="mini"/>
<div class="body" v-if="appearNote.deletedAt == null">
<p v-if="appearNote.cw != null" class="cw">
<span class="text" v-if="appearNote.cw != ''">{{ appearNote.cw }}</span>
<misskey-flavored-markdown v-if="appearNote.cw != ''" class="text" :text="appearNote.cw" :author="appearNote.user" :i="$store.state.i" :custom-emojis="appearNote.emojis" />
<mk-cw-button v-model="showContent"/>
</p>
<div class="content" v-show="appearNote.cw == null || showContent">

View File

@ -20,7 +20,7 @@
<mk-reaction-icon :reaction="notification.reaction"/>
<router-link :to="notification.user | userPage" v-user-preview="notification.user.id">{{ notification.user | userName }}</router-link>
</p>
<router-link class="note-ref" :to="notification.note | notePage">
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note)">
<fa icon="quote-left"/>{{ getNoteSummary(notification.note) }}<fa icon="quote-right"/>
</router-link>
</div>
@ -32,7 +32,7 @@
<p><fa icon="retweet"/>
<router-link :to="notification.note.user | userPage" v-user-preview="notification.note.userId">{{ notification.note.user | userName }}</router-link>
</p>
<router-link class="note-ref" :to="notification.note | notePage">
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note.renote)">
<fa icon="quote-left"/>{{ getNoteSummary(notification.note.renote) }}<fa icon="quote-right"/>
</router-link>
</div>
@ -44,7 +44,7 @@
<p><fa icon="quote-left"/>
<router-link :to="notification.note.user | userPage" v-user-preview="notification.note.userId">{{ notification.note.user | userName }}</router-link>
</p>
<router-link class="note-preview" :to="notification.note | notePage">{{ getNoteSummary(notification.note) }}</router-link>
<router-link class="note-preview" :to="notification.note | notePage" :title="getNoteSummary(notification.note)">{{ getNoteSummary(notification.note) }}</router-link>
</div>
</template>
@ -72,7 +72,7 @@
<p><fa icon="reply"/>
<router-link :to="notification.note.user | userPage" v-user-preview="notification.note.userId">{{ notification.note.user | userName }}</router-link>
</p>
<router-link class="note-preview" :to="notification.note | notePage">{{ getNoteSummary(notification.note) }}</router-link>
<router-link class="note-preview" :to="notification.note | notePage" :title="getNoteSummary(notification.note)">{{ getNoteSummary(notification.note) }}</router-link>
</div>
</template>
@ -82,7 +82,7 @@
<p><fa icon="at"/>
<router-link :to="notification.note.user | userPage" v-user-preview="notification.note.userId">{{ notification.note.user | userName }}</router-link>
</p>
<a class="note-preview" :href="notification.note | notePage">{{ getNoteSummary(notification.note) }}</a>
<a class="note-preview" :href="notification.note | notePage" :title="getNoteSummary(notification.note)">{{ getNoteSummary(notification.note) }}</a>
</div>
</template>
@ -90,7 +90,7 @@
<mk-avatar class="avatar" :user="notification.user"/>
<div class="text">
<p><fa icon="chart-pie"/><a :href="notification.user | userPage" v-user-preview="notification.user.id">{{ notification.user | userName }}</a></p>
<router-link class="note-ref" :to="notification.note | notePage">
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note)">
<fa icon="quote-left"/>{{ getNoteSummary(notification.note) }}<fa icon="quote-right"/>
</router-link>
</div>
@ -219,7 +219,7 @@ export default Vue.extend({
margin 0
padding 16px
overflow-wrap break-word
font-size 13px
font-size 12px
border-bottom solid 1px var(--faceDivider)
&:last-child
@ -262,9 +262,18 @@ export default Vue.extend({
.note-preview
color var(--noteText)
display inline-block
overflow hidden
max-height 48px
word-break break-all
.note-ref
color var(--noteText)
display inline-block
width: 100%
overflow hidden
white-space nowrap
text-overflow ellipsis
[data-icon]
font-size 1em

View File

@ -91,6 +91,11 @@
</ui-select>
</section>
</section>
<section>
<header>{{ $t('web-search-engine') }}</header>
<ui-input v-model="webSearchEngine">{{ $t('web-search-engine') }}<span slot="desc">{{ $t('web-search-engine-desc') }}</span></ui-input>
</section>
</ui-card>
<ui-card class="web" v-show="page == 'web'">
@ -177,6 +182,7 @@
</optgroup>
</ui-select>
<div class="none ui info">
<div>Current: <i>{{ this.currentLanguage }}</i></div>
<p><fa icon="info-circle"/>{{ $t('language-desc') }}</p>
</div>
</section>
@ -345,6 +351,7 @@ export default Vue.extend({
meta: null,
version,
langs,
currentLanguage: 'Unknown',
latestVersion: undefined,
checkingForUpdate: false
};
@ -455,6 +462,11 @@ export default Vue.extend({
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 }); }
@ -544,6 +556,12 @@ export default Vue.extend({
this.$root.getMeta().then(meta => {
this.meta = meta;
});
try {
const locale = JSON.parse(localStorage.getItem('locale') || "{}");
const localeKey = localStorage.getItem('localeKey');
this.currentLanguage = `${locale.meta.lang} (${localeKey})`;
} catch { }
},
methods: {
readAllUnreadNotes() {

View File

@ -54,7 +54,25 @@ export default Vue.extend({
padding 16px
> button
display block
margin-bottom 16px
color var(--primaryForeground)
background var(--primary)
width 100%
border-radius 38px
user-select none
cursor pointer
padding 0 16px
min-width 100px
line-height 38px
font-size 14px
font-weight 700
&:hover
background var(--primaryLighten10)
&:active
background var(--primaryDarken10)
> a
display block

View File

@ -8,7 +8,7 @@
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
<mk-time :time="notification.createdAt"/>
</header>
<router-link class="note-ref" :to="notification.note | notePage">
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note)">
<fa icon="quote-left"/>{{ getNoteSummary(notification.note) }}
<fa icon="quote-right"/>
</router-link>
@ -23,7 +23,7 @@
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
<mk-time :time="notification.createdAt"/>
</header>
<router-link class="note-ref" :to="notification.note | notePage">
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note.renote)">
<fa icon="quote-left"/>{{ getNoteSummary(notification.note.renote) }}<fa icon="quote-right"/>
</router-link>
</div>
@ -59,7 +59,7 @@
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
<mk-time :time="notification.createdAt"/>
</header>
<router-link class="note-ref" :to="notification.note | notePage">
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note)">
<fa icon="quote-left"/>{{ getNoteSummary(notification.note) }}<fa icon="quote-right"/>
</router-link>
</div>
@ -112,7 +112,7 @@ export default Vue.extend({
.dsfykdcjpuwfvpefwufddclpjhzktmpw
> .notification
padding 16px
font-size 13px
font-size 12px
overflow-wrap break-word
&:after
@ -150,6 +150,11 @@ export default Vue.extend({
> .note-ref
color var(--noteText)
display inline-block
width: 100%
overflow hidden
white-space nowrap
text-overflow ellipsis
[data-icon]
font-size 1em

View File

@ -10,7 +10,7 @@
<span>{{ name }}</span>
</span>
<div class="editor" style="padding:0 12px" v-if="edit">
<div class="editor" style="padding:12px" v-if="edit">
<ui-switch v-model="column.isMediaOnly" @change="onChangeSettings">{{ $t('is-media-only') }}</ui-switch>
<ui-switch v-model="column.isMediaView" @change="onChangeSettings">{{ $t('is-media-view') }}</ui-switch>
</div>

View File

@ -151,18 +151,20 @@ export default Vue.extend({
&:hover
color var(--desktopTimelineSrcHover)
> .empty
display block
margin 0 auto
padding 32px
max-width 400px
text-align center
color #999
> .mk-notes
> [data-icon]
> .empty
display block
margin-bottom 16px
font-size 3em
color #ccc
margin 0 auto
padding 32px
max-width 400px
text-align center
color var(--text)
> [data-icon]
display block
margin-bottom 16px
font-size 3em
color var(--faceHeaderText);
</style>

View File

@ -371,7 +371,6 @@ export default Vue.extend({
> .main
grid-row 1
grid-column 1 / 3
border-top solid 5px var(--primary)
> div
padding 32px

View File

@ -143,6 +143,9 @@ import {
faCalendarAlt as farCalendarAlt,
faHdd as farHdd,
faMoon as farMoon,
faPlayCircle as farPlayCircle,
faLightbulb as farLightbulb,
faStickyNote as farStickyNote,
} from '@fortawesome/free-regular-svg-icons';
import {
@ -248,7 +251,7 @@ library.add(
faSync,
faArrowLeft,
faMapMarker,
faRobot,
faRobot,
farBell,
farEnvelope,
@ -268,6 +271,9 @@ library.add(
farCalendarAlt,
farHdd,
farMoon,
farPlayCircle,
farLightbulb,
farStickyNote,
fabTwitter,
fabGithub,

View File

@ -190,8 +190,8 @@ export default class MiOS extends EventEmitter {
this.store.dispatch('mergeMe', freshData);
});
} else {
// Get token from cookie
const i = (document.cookie.match(/i=(!\w+)/) || [null, null])[1];
// Get token from cookie or localStorage
const i = (document.cookie.match(/i=(!\w+)/) || [null, null])[1] || localStorage.getItem('i');
fetchme(i, me => {
if (me) {

View File

@ -1,5 +1,5 @@
<template>
<div class="icozogqfvdetwohsdglrbswgrejoxbdj" v-if="video.isSensitive && hide" @click="hide = false">
<div class="icozogqfvdetwohsdglrbswgrejoxbdj" v-if="video.isSensitive && hide && !$store.state.device.alwaysShowNsfw" @click="hide = false">
<div>
<b><fa icon="exclamation-triangle"/> {{ $t('sensitive') }}</b>
<span>{{ $t('click-to-show') }}</span>

View File

@ -1,5 +1,5 @@
<template>
<div class="mk-note-detail">
<div class="mk-note-detail" tabindex="-1">
<button
class="more"
v-if="appearNote.reply && appearNote.reply.replyId && conversation.length == 0"
@ -26,7 +26,7 @@
</header>
<div class="body">
<p v-if="appearNote.cw != null" class="cw">
<span class="text" v-if="appearNote.cw != ''">{{ appearNote.cw }}</span>
<misskey-flavored-markdown v-if="appearNote.cw != ''" class="text" :text="appearNote.cw" :author="appearNote.user" :i="$store.state.i" :custom-emojis="appearNote.emojis" />
<mk-cw-button v-model="showContent"/>
</p>
<div class="content" v-show="appearNote.cw == null || showContent">
@ -61,18 +61,18 @@
</div>
<footer>
<mk-reactions-viewer :note="appearNote"/>
<button @click="reply" :title="$t('title')">
<button @click="reply()" :title="$t('title')">
<template v-if="appearNote.reply"><fa icon="reply-all"/></template>
<template v-else><fa icon="reply"/></template>
<p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p>
</button>
<button @click="renote" title="Renote">
<button @click="renote()" title="Renote">
<fa icon="retweet"/><p class="count" v-if="appearNote.renoteCount > 0">{{ appearNote.renoteCount }}</p>
</button>
<button :class="{ reacted: appearNote.myReaction != null }" @click="react" ref="reactButton" :title="$t('title')">
<button :class="{ reacted: appearNote.myReaction != null }" @click="react()" ref="reactButton" :title="$t('title')">
<fa icon="plus"/><p class="count" v-if="appearNote.reactions_count > 0">{{ appearNote.reactions_count }}</p>
</button>
<button @click="menu" ref="menuButton">
<button @click="menu()" ref="menuButton">
<fa icon="ellipsis-h"/>
</button>
</footer>
@ -86,21 +86,18 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
import parse from '../../../../../mfm/parse';
import MkNoteMenu from '../../../common/views/components/note-menu.vue';
import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
import XSub from './note.sub.vue';
import { sum, unique } from '../../../../../prelude/array';
import noteSubscriber from '../../../common/scripts/note-subscriber';
import noteMixin from '../../../common/scripts/note-mixin';
export default Vue.extend({
i18n: i18n('mobile/views/components/note-detail.vue'),
components: {
XSub
},
mixins: [noteSubscriber('note')],
mixins: [noteMixin(), noteSubscriber('note')],
props: {
note: {
@ -114,43 +111,12 @@ export default Vue.extend({
data() {
return {
showContent: false,
conversation: [],
conversationFetching: false,
replies: []
};
},
computed: {
isRenote(): boolean {
return (this.note.renote &&
this.note.text == null &&
this.note.fileIds.length == 0 &&
this.note.poll == null);
},
appearNote(): any {
return this.isRenote ? this.note.renote : this.note;
},
reactionsCount(): number {
return this.appearNote.reactionCounts
? sum(Object.values(this.appearNote.reactionCounts))
: 0;
},
urls(): string[] {
if (this.appearNote.text) {
const ast = parse(this.appearNote.text);
return unique(ast
.filter(t => (t.type == 'url' || t.type == 'link') && !t.silent)
.map(t => t.url));
} else {
return null;
}
}
},
mounted() {
// Get replies
if (!this.compact) {
@ -161,24 +127,6 @@ export default Vue.extend({
this.replies = replies;
});
}
// Draw map
if (this.appearNote.geo) {
const shouldShowMap = this.$store.getters.isSignedIn ? this.$store.state.settings.showMaps : true;
if (shouldShowMap) {
this.$root.os.getGoogleMaps().then(maps => {
const uluru = new maps.LatLng(this.appearNote.geo.coordinates[1], this.appearNote.geo.coordinates[0]);
const map = new maps.Map(this.$refs.map, {
center: uluru,
zoom: 15
});
new maps.Marker({
position: uluru,
map: map
});
});
}
}
},
methods: {
@ -192,35 +140,6 @@ export default Vue.extend({
this.conversationFetching = false;
this.conversation = conversation.reverse();
});
},
reply() {
this.$post({
reply: this.appearNote
});
},
renote() {
this.$post({
renote: this.appearNote
});
},
react() {
this.$root.new(MkReactionPicker, {
source: this.$refs.reactButton,
note: this.appearNote,
compact: true,
big: true
});
},
menu() {
this.$root.new(MkNoteMenu, {
source: this.$refs.menuButton,
note: this.appearNote,
compact: true
});
}
}
});

View File

@ -5,7 +5,7 @@
<mk-note-header class="header" :note="note" :mini="true"/>
<div class="body">
<p v-if="note.cw != null" class="cw">
<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
<misskey-flavored-markdown v-if="note.cw != ''" class="text" :text="note.cw" :author="note.user" :i="$store.state.i" :custom-emojis="note.emojis" />
<mk-cw-button v-model="showContent"/>
</p>
<div class="content" v-show="note.cw == null || showContent">

View File

@ -16,7 +16,7 @@
<mk-note-header class="header" :note="appearNote" :mini="true"/>
<div class="body" v-if="appearNote.deletedAt == null">
<p v-if="appearNote.cw != null" class="cw">
<span class="text" v-if="appearNote.cw != ''">{{ appearNote.cw }}</span>
<misskey-flavored-markdown v-if="appearNote.cw != ''" class="text" :text="appearNote.cw" :author="appearNote.user" :i="$store.state.i" :custom-emojis="appearNote.emojis" />
<mk-cw-button v-model="showContent"/>
</p>
<div class="content" v-show="appearNote.cw == null || showContent">

View File

@ -8,7 +8,7 @@
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
<mk-time :time="notification.createdAt"/>
</header>
<router-link class="note-ref" :to="notification.note | notePage">
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note)">
<fa icon="quote-left"/>{{ getNoteSummary(notification.note) }}
<fa icon="quote-right"/>
</router-link>
@ -23,7 +23,7 @@
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
<mk-time :time="notification.createdAt"/>
</header>
<router-link class="note-ref" :to="notification.note | notePage">
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note.renote)">
<fa icon="quote-left"/>{{ getNoteSummary(notification.note.renote) }}<fa icon="quote-right"/>
</router-link>
</div>
@ -59,7 +59,7 @@
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
<mk-time :time="notification.createdAt"/>
</header>
<router-link class="note-ref" :to="notification.note | notePage">
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note)">
<fa icon="quote-left"/>{{ getNoteSummary(notification.note) }}<fa icon="quote-right"/>
</router-link>
</div>
@ -162,6 +162,11 @@ export default Vue.extend({
> .note-ref
color var(--noteText)
display inline-block
width: 100%
overflow hidden
white-space nowrap
text-overflow ellipsis
[data-icon]
font-size 1em

View File

@ -86,6 +86,11 @@
</ui-select>
</section>
</section>
<section>
<header>{{ $t('web-search-engine') }}</header>
<ui-input v-model="webSearchEngine">{{ $t('web-search-engine') }}<span slot="desc">{{ $t('web-search-engine-desc') }}</span></ui-input>
</section>
</ui-card>
<x-drive-settings/>
@ -113,7 +118,8 @@
<option v-for="x in langs" :value="x[0]" :key="x[0]">{{ x[1] }}</option>
</optgroup>
</ui-select>
<span><fa icon="info-circle"/> {{ $t('lang-tip') }}</span>
<div>Current: <i>{{ this.currentLanguage }}</i></div>
<p><fa icon="info-circle"/> {{ $t('lang-tip') }}</p>
</section>
</ui-card>
@ -220,6 +226,7 @@ export default Vue.extend({
version,
codename,
langs,
currentLanguage: 'Unknown',
latestVersion: undefined,
checkingForUpdate: false
};
@ -365,6 +372,19 @@ export default Vue.extend({
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 }); }
},
},
created() {
try {
const locale = JSON.parse(localStorage.getItem('locale') || "{}");
const localeKey = localStorage.getItem('localeKey');
this.currentLanguage = `${locale.meta.lang} (${localeKey})`;
} catch { }
},
mounted() {

View File

@ -334,6 +334,7 @@ main
max-width 680px
margin 0 auto
padding 8px
color var(--text)
@media (min-width 500px)
padding 16px

View File

@ -306,6 +306,7 @@ export default Vue.extend({
padding 16px 0
border solid 2px rgba(0, 0, 0, 0.1)
border-radius 8px
color var(--text)
> *
margin 0 16px

View File

@ -11,11 +11,3 @@ if (!('fetch' in window)) {
'Your browser (or your OS) seems outdated. ' +
'To run Misskey, please update your browser to latest version or try other browsers.');
}
// Check whether cookie enabled
if (!navigator.cookieEnabled) {
alert(
'Misskeyを利用するにはCookieを有効にしてください。' +
'\n\n' +
'To use Misskey, please enable Cookie.');
}

View File

@ -35,6 +35,7 @@ const defaultSettings = {
iLikeSushi: false,
rememberNoteVisibility: false,
defaultNoteVisibility: 'public',
webSearchEngine: 'https://www.google.com/?#q={{query}}',
mutedWords: [],
games: {
reversi: {
@ -129,6 +130,7 @@ export default (os: MiOS) => new Vuex.Store({
logout(ctx) {
ctx.commit('updateI', null);
document.cookie = `i=; domain=${hostname}; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;
localStorage.removeItem('i');
},
mergeMe(ctx, me) {

View File

@ -4,6 +4,7 @@
"start_url": "/",
"display": "standalone",
"background_color": "#313a42",
"theme_color": "#fb4e4e",
"icons": [
{
"src": "/assets/icons/16.png",
@ -34,6 +35,11 @@
"src": "/assets/icons/256.png",
"sizes": "256x256",
"type": "image/png"
},
{
"src": "/assets/icons/512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"share_target": {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 274 KiB

After

Width:  |  Height:  |  Size: 274 KiB

View File

@ -45,6 +45,12 @@ export default (tokens: Node[], mentionedRemoteUsers: INote['mentionedRemoteUser
return pre;
},
center(token) {
const el = doc.createElement('div');
dive(token.children).forEach(child => el.appendChild(child));
return el;
},
emoji(token) {
return doc.createTextNode(token.props.emoji ? token.props.emoji : `:${token.props.name}:`);
},

View File

@ -26,45 +26,6 @@ export default (source: string): Node[] => {
nodes = concatText(nodes);
concatTextRecursive(nodes);
function getBeforeTextNode(node: Node): Node {
if (node == null) return null;
if (node.name == 'text') return node;
if (node.children) return getBeforeTextNode(node.children[node.children.length - 1]);
return null;
}
function getAfterTextNode(node: Node): Node {
if (node == null) return null;
if (node.name == 'text') return node;
if (node.children) return getBeforeTextNode(node.children[0]);
return null;
}
function isBlockNode(node: Node): boolean {
return ['blockCode', 'quote', 'title'].includes(node.name);
}
/**
* ブロック要素の前後にある改行を削除します
* (ブロック要素自体が改行の役割を果たすため、余計に改行されてしまう)
* @param nodes
*/
const removeNeedlessLineBreaks = (nodes: Node[]) => {
nodes.forEach((node, i) => {
if (node.children) removeNeedlessLineBreaks(node.children);
if (isBlockNode(node)) {
const before = getBeforeTextNode(nodes[i - 1]);
const after = getAfterTextNode(nodes[i + 1]);
if (before && before.props.text.endsWith('\n')) {
before.props.text = before.props.text.substring(0, before.props.text.length - 1);
}
if (after && after.props.text.startsWith('\n')) {
after.props.text = after.props.text.substring(1);
}
}
});
};
const removeEmptyTextNodes = (nodes: Node[]) => {
nodes.forEach(n => {
if (n.children) {
@ -74,8 +35,6 @@ export default (source: string): Node[] => {
return nodes.filter(n => !(n.name == 'text' && n.props.text == ''));
};
removeNeedlessLineBreaks(nodes);
nodes = removeEmptyTextNodes(nodes);
return nodes;

View File

@ -29,6 +29,32 @@ function makeNodeWithChildren(name: string, children: Node[], props?: any): Node
return _makeNode(name, children, props);
}
function getTrailingPosition(x: string): number {
const brackets = [
['(', ')'],
['「', '」'],
];
const pendingBrackets = [] as any;
const end = x.split('').findIndex(char => {
const closeMatch = brackets.map(x => x[1]).indexOf(char);
const openMatch = brackets.map(x => x[0]).indexOf(char);
if (closeMatch != -1) {
if (pendingBrackets[closeMatch] > 0) {
pendingBrackets[closeMatch]--;
return false;
} else {
return true;
}
} else if (openMatch != -1) {
pendingBrackets[openMatch] = (pendingBrackets[openMatch] || 0) + 1;
return false;
} else {
return false;
}
});
return end > 0 ? end : x.length;
}
const newline = P((input, i) => {
if (i == 0 || input[i] == '\n' || input[i - 1] == '\n') {
return P.makeSuccess(i, null);
@ -53,6 +79,7 @@ const mfm = P.createLanguage({
r.math,
r.search,
r.title,
r.center,
r.text
).atLeast(1),
@ -65,6 +92,7 @@ const mfm = P.createLanguage({
r.mention,
r.hashtag,
r.emoji,
r.math,
r.text
).atLeast(1).tryParse(x))),
//#endregion
@ -87,11 +115,30 @@ const mfm = P.createLanguage({
.map(x => makeNodeWithChildren('bold', P.alt(
r.mention,
r.hashtag,
r.url,
r.link,
r.emoji,
r.text
).atLeast(1).tryParse(x))),
//#endregion
//#region Center
center: r =>
P.regexp(/<center>([\s\S]+?)<\/center>/, 1)
.map(x => makeNodeWithChildren('center', P.alt(
r.big,
r.bold,
r.motion,
r.mention,
r.hashtag,
r.emoji,
r.math,
r.url,
r.link,
r.text
).atLeast(1).tryParse(x))),
//#endregion
//#region Emoji
emoji: r =>
P.alt(
@ -112,9 +159,11 @@ const mfm = P.createLanguage({
const text = input.substr(i);
const match = text.match(/^#([^\s\.,!\?#]+)/i);
if (!match) return P.makeFailure(i, 'not a hashtag');
if (match[1].match(/^[0-9]+$/)) return P.makeFailure(i, 'not a hashtag');
if (input[i - 1] != '\n' && input[i - 1] != ' ' && input[i - 1] != null) return P.makeFailure(i, 'require space before "#"');
return P.makeSuccess(i + match[0].length, makeNode('hashtag', { hashtag: match[1] }));
let hashtag = match[1];
hashtag = hashtag.substr(0, getTrailingPosition(hashtag));
if (hashtag.match(/^[0-9]+$/)) return P.makeFailure(i, 'not a hashtag');
if (input[i - 1] != null && input[i - 1].match(/[a-z0-9]/i)) return P.makeFailure(i, 'not a hashtag');
return P.makeSuccess(i + ('#' + hashtag).length, makeNode('hashtag', { hashtag: hashtag }));
}),
//#endregion
@ -181,6 +230,9 @@ const mfm = P.createLanguage({
r.mention,
r.hashtag,
r.emoji,
r.url,
r.link,
r.math,
r.text
).atLeast(1).tryParse(x))),
//#endregion
@ -202,7 +254,7 @@ const mfm = P.createLanguage({
const qInner = quote.join('\n').replace(/^>/gm, '').replace(/^ /gm, '');
if (qInner == '') return P.makeFailure(i, 'not a quote');
const contents = r.root.tryParse(qInner);
return P.makeSuccess(i + quote.join('\n').length, makeNodeWithChildren('quote', contents));
return P.makeSuccess(i + quote.join('\n').length + 1, makeNodeWithChildren('quote', contents));
})),
//#endregion
@ -246,23 +298,7 @@ const mfm = P.createLanguage({
const match = text.match(/^https?:\/\/[\w\/:%#@\$&\?!\(\)\[\]~\.,=\+\-]+/);
if (!match) return P.makeFailure(i, 'not a url');
let url = match[0];
let pendingBracket = 0;
const end = url.split('').findIndex(char => {
if (char == ')') {
if (pendingBracket > 0) {
pendingBracket--;
return false;
} else {
return true;
}
} else if (char == '(') {
pendingBracket++;
return false;
} else {
return false;
}
});
if (end > 0) url = url.substr(0, end);
url = url.substr(0, getTrailingPosition(url));
if (url.endsWith('.')) url = url.substr(0, url.lastIndexOf('.'));
if (url.endsWith(',')) url = url.substr(0, url.lastIndexOf(','));
return P.makeSuccess(i + url.length, url);

View File

@ -6,15 +6,24 @@ export default function(file: IDriveFile, thumbnail = false): string {
if (file.metadata.withoutChunks) {
if (thumbnail) {
return file.metadata.thumbnailUrl || file.metadata.url;
return file.metadata.thumbnailUrl || file.metadata.webpublicUrl || file.metadata.url;
} else {
return file.metadata.url;
return file.metadata.webpublicUrl || file.metadata.url;
}
} else {
if (thumbnail) {
return `${config.drive_url}/${file._id}?thumbnail`;
} else {
return `${config.drive_url}/${file._id}`;
return `${config.drive_url}/${file._id}?web`;
}
}
}
export function getOriginalUrl(file: IDriveFile) {
if (file.metadata && file.metadata.url) {
return file.metadata.url;
}
const accessKey = file.metadata ? file.metadata.accessKey : null;
return `${config.drive_url}/${file._id}${accessKey ? '?original=' + accessKey : ''}`;
}

View File

@ -29,18 +29,18 @@ const summarize = (note: any): string => {
// 返信のとき
if (note.replyId) {
if (note.reply) {
summary += ` RE: ${summarize(note.reply)}`;
summary += `\n\nRE: ${summarize(note.reply)}`;
} else {
summary += ' RE: ...';
summary += '\n\nRE: ...';
}
}
// Renoteのとき
if (note.renoteId) {
if (note.renote) {
summary += ` RN: ${summarize(note.renote)}`;
summary += `\n\nRN: ${summarize(note.renote)}`;
} else {
summary += ' RN: ...';
summary += '\n\nRN: ...';
}
}

View File

@ -0,0 +1,29 @@
import * as mongo from 'mongodb';
import monkDb, { nativeDbConn } from '../db/mongodb';
const DriveFileWebpublic = monkDb.get<IDriveFileWebpublic>('driveFileWebpublics.files');
DriveFileWebpublic.createIndex('metadata.originalId', { sparse: true, unique: true });
export default DriveFileWebpublic;
export const DriveFileWebpublicChunk = monkDb.get('driveFileWebpublics.chunks');
export const getDriveFileWebpublicBucket = async (): Promise<mongo.GridFSBucket> => {
const db = await nativeDbConn();
const bucket = new mongo.GridFSBucket(db, {
bucketName: 'driveFileWebpublics'
});
return bucket;
};
export type IMetadata = {
originalId: mongo.ObjectID;
};
export type IDriveFileWebpublic = {
_id: mongo.ObjectID;
uploadDate: Date;
md5: string;
filename: string;
contentType: string;
metadata: IMetadata;
};

View File

@ -3,7 +3,7 @@ const deepcopy = require('deepcopy');
import { pack as packFolder } from './drive-folder';
import monkDb, { nativeDbConn } from '../db/mongodb';
import isObjectId from '../misc/is-objectid';
import getDriveFileUrl from '../misc/get-drive-file-url';
import getDriveFileUrl, { getOriginalUrl } from '../misc/get-drive-file-url';
const DriveFile = monkDb.get<IDriveFile>('driveFiles.files');
DriveFile.createIndex('md5');
@ -28,21 +28,48 @@ export type IMetadata = {
_user: any;
folderId: mongo.ObjectID;
comment: string;
/**
* リモートインスタンスから取得した場合の元URL
*/
uri?: string;
/**
* URL for web(生成されている場合) or original
* * オブジェクトストレージを利用している or リモートサーバーへの直リンクである 場合のみ
*/
url?: string;
/**
* URL for thumbnail (thumbnailがなければなし)
* * オブジェクトストレージを利用している or リモートサーバーへの直リンクである 場合のみ
*/
thumbnailUrl?: string;
/**
* URL for original (web用が生成されてない場合はurlがoriginalを指す)
* * オブジェクトストレージを利用している or リモートサーバーへの直リンクである 場合のみ
*/
webpublicUrl?: string;
accessKey?: string;
src?: string;
deletedAt?: Date;
/**
* このファイルの中身データがMongoDB内に保存されているのか否か
* このファイルの中身データがMongoDB内に保存されていないか否か
* オブジェクトストレージを利用している or リモートサーバーへの直リンクである
* な場合は false になります
* な場合は true になります
*/
withoutChunks?: boolean;
storage?: string;
storageProps?: any;
/***
* ObjectStorage の格納先の情報
*/
storageProps?: IStorageProps;
isSensitive?: boolean;
/**
@ -56,6 +83,25 @@ export type IMetadata = {
isRemote?: boolean;
};
export type IStorageProps = {
/**
* ObjectStorage key for original
*/
key: string;
/***
* ObjectStorage key for thumbnail (thumbnailがなければなし)
*/
thumbnailKey?: string;
/***
* ObjectStorage key for webpublic (webpublicがなければなし)
*/
webpublicKey?: string;
id?: string;
};
export type IDriveFile = {
_id: mongo.ObjectID;
uploadDate: Date;
@ -83,7 +129,8 @@ export function validateFileName(name: string): boolean {
export const packMany = (
files: any[],
options?: {
detail: boolean
detail?: boolean
self?: boolean,
}
) => {
return Promise.all(files.map(f => pack(f, options)));
@ -95,11 +142,13 @@ export const packMany = (
export const pack = (
file: any,
options?: {
detail: boolean
detail?: boolean,
self?: boolean,
}
) => new Promise<any>(async (resolve, reject) => {
const opts = Object.assign({
detail: false
detail: false,
self: false
}, options);
let _file: any;
@ -165,5 +214,9 @@ export const pack = (
delete _target.isRemote;
delete _target._user;
if (opts.self) {
_target.url = getOriginalUrl(_file);
}
resolve(_target);
});

View File

@ -214,4 +214,12 @@ export type IMeta = {
enableExternalUserRecommendation?: boolean;
externalUserRecommendationEngine?: string;
externalUserRecommendationTimeout?: number;
enableEmail?: boolean;
email?: string;
smtpSecure?: boolean;
smtpHost?: string;
smtpPort?: number;
smtpUser?: string;
smtpPass?: string;
};

View File

@ -78,6 +78,8 @@ export interface ILocalUser extends IUserBase {
host: null;
keypair: string;
email: string;
emailVerified?: boolean;
emailVerifyCode?: string;
password: string;
token: string;
twitter: {
@ -99,9 +101,6 @@ export interface ILocalUser extends IUserBase {
username: string;
discriminator: string;
};
line: {
userId: string;
};
profile: {
location: string;
birthday: string; // 'YYYY-MM-DD'
@ -148,8 +147,8 @@ export const isRemoteUser = (user: any): user is IRemoteUser =>
!isLocalUser(user);
//#region Validators
export function validateUsername(username: string): boolean {
return typeof username == 'string' && /^[a-zA-Z0-9_]{1,20}$/.test(username);
export function validateUsername(username: string, remote?: boolean): boolean {
return typeof username == 'string' && (remote ? /^\w+([\w\.-]+\w+)?$/ : /^[a-zA-Z0-9_]{1,20}$/).test(username);
}
export function validatePassword(password: string): boolean {
@ -286,6 +285,7 @@ export const pack = (
delete _user._id;
delete _user.usernameLower;
delete _user.emailVerifyCode;
if (_user.host == null) {
// Remove private properties
@ -306,11 +306,11 @@ export const pack = (
delete _user.discord.refreshToken;
delete _user.discord.expiresDate;
}
delete _user.line;
// Visible via only the official client
if (!opts.includeSecrets) {
delete _user.email;
delete _user.emailVerified;
delete _user.settings;
delete _user.clientSettings;
}

View File

@ -103,6 +103,8 @@ export async function createNote(value: any, resolver?: Resolver, silent = false
quote = await resolveNote(note._misskey_quote).catch(() => null);
}
const cw = note.summary === '' ? null : note.summary;
// テキストのパース
const text = note._misskey_content ? note._misskey_content : htmlToMFM(note.content);
@ -120,7 +122,7 @@ export async function createNote(value: any, resolver?: Resolver, silent = false
files: files,
reply,
renote: quote,
cw: note.summary,
cw: cw,
text: text,
viaMobile: false,
localOnly: false,

View File

@ -43,7 +43,7 @@ function validatePerson(x: any, uri: string) {
return new Error('invalid person: inbox is not a string');
}
if (!validateUsername(x.preferredUsername)) {
if (!validateUsername(x.preferredUsername, true)) {
return new Error('invalid person: invalid username');
}

View File

@ -106,6 +106,8 @@ export default async function renderNote(note: INote, dive = true): Promise<any>
text += `\n\nRE: ${url}`;
}
const summary = note.cw === '' ? String.fromCharCode(0x200B) : note.cw;
const content = toHtml(Object.assign({}, note, { text }));
const emojis = await getEmojis(note.emojis);
@ -121,7 +123,7 @@ export default async function renderNote(note: INote, dive = true): Promise<any>
id: `${config.url}/notes/${note._id}`,
type: 'Note',
attributedTo,
summary: note.cw,
summary,
content,
_misskey_content: text,
_misskey_quote: quote,

View File

@ -4,21 +4,24 @@ import config from '../../../config';
import { ILocalUser } from '../../../models/user';
export default function(ctx: Koa.Context, user: ILocalUser, redirect = false) {
const expires = 1000 * 60 * 60 * 24 * 365; // One Year
ctx.cookies.set('i', user.token, {
path: '/',
domain: config.hostname,
// SEE: https://github.com/koajs/koa/issues/974
// When using a SSL proxy it should be configured to add the "X-Forwarded-Proto: https" header
secure: config.url.startsWith('https'),
httpOnly: false,
expires: new Date(Date.now() + expires),
maxAge: expires
});
if (redirect) {
//#region Cookie
const expires = 1000 * 60 * 60 * 24 * 365; // One Year
ctx.cookies.set('i', user.token, {
path: '/',
domain: config.hostname,
// SEE: https://github.com/koajs/koa/issues/974
// When using a SSL proxy it should be configured to add the "X-Forwarded-Proto: https" header
secure: config.url.startsWith('https'),
httpOnly: false,
expires: new Date(Date.now() + expires),
maxAge: expires
});
//#endregion
ctx.redirect(config.url);
} else {
ctx.status = 204;
ctx.body = { i: user.token };
ctx.status = 200;
}
}

View File

@ -228,7 +228,56 @@ export const meta = {
desc: {
'ja-JP': '外部ユーザーレコメンデーションのタイムアウト (ミリ秒)'
}
}
},
enableEmail: {
validator: $.bool.optional,
desc: {
'ja-JP': 'メール配信を有効にするか否か'
}
},
email: {
validator: $.str.optional.nullable,
desc: {
'ja-JP': 'メール配信する際に利用するメールアドレス'
}
},
smtpSecure: {
validator: $.bool.optional,
desc: {
'ja-JP': 'SMTPサーバがSSLを使用しているか否か'
}
},
smtpHost: {
validator: $.str.optional.nullable,
desc: {
'ja-JP': 'SMTPサーバのホスト'
}
},
smtpPort: {
validator: $.num.optional.nullable,
desc: {
'ja-JP': 'SMTPサーバのポート'
}
},
smtpUser: {
validator: $.str.optional.nullable,
desc: {
'ja-JP': 'SMTPサーバのユーザー名'
}
},
smtpPass: {
validator: $.str.optional.nullable,
desc: {
'ja-JP': 'SMTPサーバのパスワード'
}
},
}
};
@ -359,6 +408,34 @@ export default define(meta, (ps) => new Promise(async (res, rej) => {
set.externalUserRecommendationTimeout = ps.externalUserRecommendationTimeout;
}
if (ps.enableEmail !== undefined) {
set.enableEmail = ps.enableEmail;
}
if (ps.email !== undefined) {
set.email = ps.email;
}
if (ps.smtpSecure !== undefined) {
set.smtpSecure = ps.smtpSecure;
}
if (ps.smtpHost !== undefined) {
set.smtpHost = ps.smtpHost;
}
if (ps.smtpPort !== undefined) {
set.smtpPort = ps.smtpPort;
}
if (ps.smtpUser !== undefined) {
set.smtpUser = ps.smtpUser;
}
if (ps.smtpPass !== undefined) {
set.smtpPass = ps.smtpPass;
}
await Meta.update({}, {
$set: set
}, { upsert: true });

View File

@ -3,6 +3,8 @@ import define from '../../define';
import driveChart from '../../../../chart/drive';
export const meta = {
stability: 'stable',
desc: {
'ja-JP': 'ドライブのチャートを取得します。'
},

View File

@ -3,6 +3,8 @@ import define from '../../define';
import federationChart from '../../../../chart/federation';
export const meta = {
stability: 'stable',
desc: {
'ja-JP': 'フェデレーションのチャートを取得します。'
},

View File

@ -3,6 +3,8 @@ import define from '../../define';
import hashtagChart from '../../../../chart/hashtag';
export const meta = {
stability: 'stable',
desc: {
'ja-JP': 'ハッシュタグごとのチャートを取得します。'
},

View File

@ -3,6 +3,8 @@ import define from '../../define';
import networkChart from '../../../../chart/network';
export const meta = {
stability: 'stable',
desc: {
'ja-JP': 'ネットワークのチャートを取得します。'
},

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