Compare commits

..

474 Commits

Author SHA1 Message Date
syuilo
3b1669fb6b Merge branch 'develop' 2022-08-07 00:39:21 +09:00
syuilo
395e18e584 12.118.0 2022-08-07 00:39:01 +09:00
syuilo
1c3715a43a New translations ja-JP.yml (Chinese Traditional) (#9041) 2022-08-07 00:35:28 +09:00
syuilo
e3aa39e050 refactor 2022-08-06 20:04:23 +09:00
syuilo
c4830dcf3a perf(client): use shallowRef as possible 2022-08-06 19:20:53 +09:00
syuilo
cb35ace047 12.118.0-beta.5 2022-08-06 18:17:01 +09:00
syuilo
d8767fa87b Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-08-06 18:16:46 +09:00
syuilo
5ec10f9ff7 New Crowdin updates (#9022)
* New translations ja-JP.yml (Slovak)

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

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

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

* New translations ja-JP.yml (German)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

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

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

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

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (Swedish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Slovak)

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

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Bengali)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Romanian)

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Chinese Simplified)
2022-08-06 18:16:37 +09:00
syuilo
f22c32af05 chore(client): tweak scroll behavior in routing 2022-08-06 18:16:21 +09:00
syuilo
b31f09692a enhance(client): improve clock widget 2022-08-06 18:15:13 +09:00
syuilo
3a9da78901 enhance(client): improve clock widget 2022-08-06 16:39:09 +09:00
syuilo
dea5e6207e enhance(client): improve clock widget 2022-08-06 14:02:03 +09:00
syuilo
2cd70b80a2 enhance(client): improve clock widgets 2022-08-05 23:51:15 +09:00
syuilo
bdaa35d11f feat(client): improve widget 2022-08-04 22:20:00 +09:00
Johann150
b934c738a6 Collapse long notes (#8990)
* Revert "Revert option to collapse long notes (#8561)"

This reverts commit 71150f21cd and reinstates
the option to collapse long notes again after they were expanded.

* fix(client): wrongly collapsed posts

* fix: don't use ref

* tweak style

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2022-08-01 17:55:24 +09:00
syuilo
f3164c9cf2 fix: use new for throw error
Co-Authored-By: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2022-08-01 17:44:53 +09:00
syuilo
78f061b9db update deps 2022-07-31 22:01:01 +09:00
tamaina
14c2f9e47e feature: Client Preferences Registry (#8511)
* Fix settings page

* nanka iroiro

* clean up

* clean up

* feature: Client Preferences Registry on the account

* add changelog

* インデックスに戻ってもタイトルが残ってしまうのを修正

* fix createdAt -> updatedAt

* remove console.log

* 適用→このデバイスに適用

* add wallpaper

* ローカルのjsonファイルを保存・読み込みできるように

* clean up

* use apiWithDialog

* Update packages/client/src/pages/settings/preferences-registry.vue

Co-authored-by: Andreas Nedbal <github-bf215181b5140522137b3d4f6b73544a@desu.email>

* Update packages/client/src/pages/settings/preferences-registry.vue

Co-authored-by: Andreas Nedbal <github-bf215181b5140522137b3d4f6b73544a@desu.email>

* Update packages/client/src/pages/settings/preferences-registry.vue

Co-authored-by: Andreas Nedbal <github-bf215181b5140522137b3d4f6b73544a@desu.email>

* fix lint

* ✌️

* change router

* nanka iroiro

* tweak

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
Co-authored-by: Andreas Nedbal <github-bf215181b5140522137b3d4f6b73544a@desu.email>
2022-07-31 21:55:20 +09:00
syuilo
b5bf4e75a6 use es2021 for node 2022-07-31 14:20:10 +09:00
syuilo
6dcee5aa5c 12.118.0-beta.4 2022-07-25 21:25:08 +09:00
syuilo
519c8b419b chore(client): tweak style 2022-07-25 21:24:37 +09:00
syuilo
b7f4cb6433 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-07-25 21:16:52 +09:00
syuilo
595bf6fc69 add missing dependency 2022-07-25 21:16:46 +09:00
hayabusa
36f083c189 一部のアプリからファイルを投稿フォームへドロップできない場合がある問題を修正 (#9035)
* dropEffectとeffectAllowedの関連付けを修正

* Update Changelog

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2022-07-25 21:16:11 +09:00
syuilo
f835421d70 update deps 2022-07-25 21:10:06 +09:00
syuilo
756eeb51f3 chore(client): tweak ui 2022-07-24 18:44:50 +09:00
syuilo
9f5c8f42e0 tweak rate limit 2022-07-24 17:56:48 +09:00
syuilo
212b2c738b fix html 2022-07-24 17:09:46 +09:00
syuilo
92f9392bcf refactor(client): refactor components 2022-07-24 15:45:16 +09:00
syuilo
bd8db402e6 chore(client): tweak style 2022-07-24 15:41:06 +09:00
dependabot[bot]
d93ad43c49 chore(deps): bump undici from 5.5.1 to 5.8.0 in /packages/backend (#9028)
Bumps [undici](https://github.com/nodejs/undici) from 5.5.1 to 5.8.0.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v5.5.1...v5.8.0)

---
updated-dependencies:
- dependency-name: undici
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-23 14:41:01 +09:00
dependabot[bot]
ab9fcc863f chore(deps): bump file-type from 17.1.2 to 17.1.3 in /packages/backend (#9030)
Bumps [file-type](https://github.com/sindresorhus/file-type) from 17.1.2 to 17.1.3.
- [Release notes](https://github.com/sindresorhus/file-type/releases)
- [Commits](https://github.com/sindresorhus/file-type/compare/v17.1.2...v17.1.3)

---
updated-dependencies:
- dependency-name: file-type
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-23 14:40:54 +09:00
syuilo
c64b3c9c43 lint fix 2022-07-23 14:31:54 +09:00
syuilo
3acfeb1680 update tfjs 2022-07-23 14:31:15 +09:00
Kainoa Kanter
e371120c8b fix: broken chats (#8983)
* Fix broken chats

Co-authored-by: @ltlapy

* 🎨
2022-07-23 00:46:52 +09:00
syuilo
43ee600fb3 Update CHANGELOG.md 2022-07-22 15:42:12 +09:00
xianon
b6556c7ff1 リモートユーザーを正しくブロックできるように修正する (#9027) 2022-07-22 15:41:31 +09:00
syuilo
9d5901a779 12.118.0-beta.3 2022-07-22 00:40:54 +09:00
syuilo
59b7b0f832 Update CONTRIBUTING.md 2022-07-22 00:35:30 +09:00
syuilo
035ec0a874 enhance(client): add some themes 2022-07-22 00:25:56 +09:00
syuilo
9ed6a9701a fix(client): MiAuth page is broken
Fix #9026
2022-07-22 00:17:52 +09:00
syuilo
53d24c2ba1 chore: improve error message of boot 2022-07-21 22:30:36 +09:00
syuilo
62226b985a fix(client): fix drawer menu style regression 2022-07-21 22:22:13 +09:00
syuilo
d72ac908f4 fix(client): some fixes 2022-07-21 00:32:41 +09:00
syuilo
00be79ce13 12.118.0-beta.2 2022-07-20 23:22:11 +09:00
syuilo
8261321dac fix(client): fix some routings 2022-07-20 23:21:42 +09:00
syuilo
4761ff7444 Add vi-VN language support
Resolve #8975
2022-07-20 23:12:18 +09:00
syuilo
d1f1430b84 12.118.0-beta.1 2022-07-20 23:04:56 +09:00
syuilo
39ee039fcb chore(client): tweak theme select ui 2022-07-20 23:02:14 +09:00
syuilo
9606ba0454 fix(client): support v-if of select component 2022-07-20 23:01:40 +09:00
syuilo
50e3ca19bc refactor(client): 2022-07-20 22:24:26 +09:00
dependabot[bot]
9a1f5afde9 chore(deps): bump terser from 5.9.0 to 5.14.2 (#9024)
Bumps [terser](https://github.com/terser/terser) from 5.9.0 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-20 21:46:16 +09:00
syuilo
716cb23acb fix(client): タイミングによっては tag-cloud でエラーが発生するのを修正 2022-07-20 20:00:35 +09:00
syuilo
e83dd90e07 chore(client): tweak radio component 2022-07-20 19:59:50 +09:00
syuilo
66f1aaf5f7 enhance(client): ネストしたルーティングに対応 2022-07-20 19:59:27 +09:00
syuilo
17afbc3c46 enhance(client): suspense
Fix #8817
2022-07-19 21:36:33 +09:00
syuilo
09591fa4ae Merge branch 'develop' 2022-07-19 17:22:32 +09:00
syuilo
b495f6cfff 12.117.1 2022-07-19 17:22:24 +09:00
syuilo
c3c74c098d New translations ja-JP.yml (Slovak) (#9014) 2022-07-19 17:21:30 +09:00
syuilo
4769cd420b fix(client): 「インスタンスからのお知らせを受け取る」の設定を変更できない問題を修正
Fix #8474
2022-07-19 17:21:03 +09:00
syuilo
5b8d960b9f fix(client): tweak mfm-cheat-sheet 2022-07-19 17:13:24 +09:00
syuilo
7dd381bb5c Update CHANGELOG.md 2022-07-19 17:10:21 +09:00
Acid Chicken (硫酸鶏)
a3c2dbbfb5 fix(server): make sure getFileInfo doesn't fail if detectSensitivity ever fails (#9020) 2022-07-19 17:09:21 +09:00
syuilo
e35f599b6d update vite 2022-07-19 13:25:23 +09:00
syuilo
6fc42629c8 Update CHANGELOG.md 2022-07-19 13:23:36 +09:00
syuilo
a8867a8eea Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-07-19 01:20:38 +09:00
syuilo
264a6cda8e fix(client): fix window default prop 2022-07-19 01:20:36 +09:00
xianon
a675131b80 ユーザー情報の取得の再試行を修正する (#9017) 2022-07-18 21:43:31 +09:00
syuilo
369660ac79 chore(client): tweak style 2022-07-18 18:41:17 +09:00
syuilo
b3b0a960af update vite 2022-07-18 18:41:07 +09:00
syuilo
1c21cb4d82 lint fix 2022-07-18 05:08:13 +09:00
syuilo
85ce00adc0 Merge branch 'develop' 2022-07-18 05:07:12 +09:00
syuilo
036017a6af 12.117.0 2022-07-18 05:06:50 +09:00
syuilo
f095863b61 New Crowdin updates (#9009)
* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Bengali)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

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

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

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

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)
2022-07-18 05:04:28 +09:00
syuilo
49499f3d7d enhance(client): tweak ui 2022-07-18 05:03:39 +09:00
syuilo
cbd07cdbe9 12.117.0-beta.1 2022-07-18 01:37:26 +09:00
syuilo
b123cbca58 chore(client): tweak style 2022-07-18 01:29:29 +09:00
Ryu jongheon
61d8b56eee fix(client): use icon for local if available (#9012) 2022-07-18 00:33:12 +09:00
syuilo
e9a97b4717 enhance(client): ウィンドウを最大化できるように 2022-07-18 00:31:55 +09:00
syuilo
01d7403dc4 🎨 2022-07-18 00:18:56 +09:00
syuilo
8f3ca867d2 enhance(client): tweak ui 2022-07-17 23:18:05 +09:00
syuilo
d7222dd56a enhance(client): tweak ui 2022-07-17 21:06:33 +09:00
syuilo
f25518af91 Merge branch 'develop' 2022-07-17 05:35:36 +09:00
syuilo
3b69a563f8 12.116.1 2022-07-17 05:35:28 +09:00
syuilo
0331f3c61b chore(client): tweak deck ui 2022-07-17 05:33:21 +09:00
syuilo
2dae56fc8f chore(client): tweak style 2022-07-17 05:13:07 +09:00
syuilo
bec2d9e3fa Update 1651224615271-foreign-key.js
#8852
2022-07-17 05:12:59 +09:00
syuilo
da92988fb8 fix(client): fix deck style 2022-07-17 05:12:43 +09:00
syuilo
77d4d6e377 fix(client): デッキUI時に ページで表示 ボタンが機能しない問題を修正
Fix #9010
2022-07-17 05:12:22 +09:00
syuilo
b796aacf7f Merge branch 'develop' 2022-07-16 23:53:24 +09:00
syuilo
a974ab00d7 12.116.0 2022-07-16 23:53:15 +09:00
syuilo
4352331b70 New Crowdin updates (#9007)
* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Chinese Traditional)
2022-07-16 23:53:01 +09:00
syuilo
e4453e9ca8 Update 1651224615271-foreign-key.js
#8852
2022-07-16 23:51:32 +09:00
syuilo
3811b90150 12.116.0-beta.1 2022-07-16 23:11:08 +09:00
syuilo
003f592ef6 feat(client): registry editor 2022-07-16 23:11:05 +09:00
syuilo
a3f3ef4226 chore(client): tweak style 2022-07-16 22:16:01 +09:00
syuilo
fbb0cc686e chore(client): tweak style 2022-07-16 20:53:53 +09:00
syuilo
c1c8c9c37c fix(server): fix bind of method
Fix #9006
2022-07-16 19:03:41 +09:00
syuilo
ff24811676 Merge branch 'develop' 2022-07-16 18:21:44 +09:00
syuilo
ab3bc4a982 12.115.0 2022-07-16 18:21:29 +09:00
syuilo
b6e4ec7056 New Crowdin updates (#9004)
* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

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

* New translations ja-JP.yml (Chinese Simplified)
2022-07-16 18:19:38 +09:00
Kainoa Kanter
5619a3390d chore: improve ad style (#8995)
* Improve ad style

* 🎨

* `ad` -> `info`
2022-07-16 17:50:12 +09:00
syuilo
e9fd064624 chore(client): tweak user-info routing 2022-07-16 16:52:12 +09:00
syuilo
274bfc965f 12.115.0-beta.1 2022-07-16 15:56:27 +09:00
syuilo
672ceb8687 chore(client): tweak style 2022-07-16 15:19:52 +09:00
syuilo
a3a9b7fbd3 chore(client): tweak deck ui 2022-07-16 15:19:44 +09:00
syuilo
57e533a5ef chore(client): tweak ui 2022-07-16 13:49:23 +09:00
syuilo
4f9b03a997 refactor(client): use setup syntax 2022-07-16 13:14:16 +09:00
syuilo
01d07edfe3 chore(client): tweak style 2022-07-16 13:13:58 +09:00
syuilo
4c8a1867f0 Merge branch 'develop' 2022-07-15 22:45:13 +09:00
syuilo
7d63118941 12.114.0 2022-07-15 22:44:53 +09:00
syuilo
aa5eab746a New Crowdin updates (#9001)
* New translations ja-JP.yml (Chinese Traditional)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (Kabyle)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Bengali)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)
2022-07-15 22:43:42 +09:00
syuilo
3d0870f414 12.114.0-beta.8 2022-07-15 22:10:02 +09:00
syuilo
92e8a5dbd6 chore(client): tweak ui 2022-07-15 22:09:05 +09:00
syuilo
113df68843 chore(client): tweak style 2022-07-15 19:31:04 +09:00
syuilo
92792719bd chore(client): tweak style 2022-07-15 19:15:23 +09:00
syuilo
47186c0fff 12.114.0-beta.7 2022-07-15 17:14:41 +09:00
syuilo
eb73a8137d Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-07-15 17:14:29 +09:00
Johann150
7cb5b5c8c2 refactor: signup component as composition api (#8957) 2022-07-15 17:14:05 +09:00
syuilo
6f45208ab6 enhance(client): RSSティッカーで表示順序をシャッフルできるように 2022-07-15 17:12:08 +09:00
syuilo
165c4b2c00 chore(client): tweak ui 2022-07-15 17:01:13 +09:00
syuilo
a4b5a0072d move rollup to devDeps 2022-07-14 23:54:52 +09:00
syuilo
ddc899938a chore(client): improve usability 2022-07-14 23:50:07 +09:00
tamaina
77c2a7cd71 refactor(client): remove useCssModule (#8999)
* refactor(client): remove useCssModule()

* use MkStickyContainer

* Revert "use MkStickyContainer"

This reverts commit 639746786b.
2022-07-14 23:32:00 +09:00
tamaina
de24131993 use MkStickyContainer (#9000) 2022-07-14 23:31:01 +09:00
syuilo
7b7fe019c0 Update CHANGELOG.md 2022-07-14 23:24:10 +09:00
syuilo
c30ffec1af 12.114.0-beta.6 2022-07-14 22:26:02 +09:00
syuilo
44f560b453 tweak boot.js 2022-07-14 22:25:57 +09:00
syuilo
5fa8c62305 12.114.0-beta.5 2022-07-14 22:15:08 +09:00
syuilo
17500fc9c9 Revert "fix(client): revert es2017"
This reverts commit 0ddabdbf68.
2022-07-14 22:14:42 +09:00
syuilo
e3bad795e0 Revert "debug"
This reverts commit fa5140310f.
2022-07-14 22:13:04 +09:00
syuilo
1ba559a98b Revert "debug"
This reverts commit 800bbc4328.
2022-07-14 22:13:00 +09:00
syuilo
3053767c71 12.114.0-beta.4 2022-07-14 22:05:03 +09:00
syuilo
f2e91f4d62 tweak boot.js 2022-07-14 22:04:16 +09:00
syuilo
10f4815d34 tweak boot.js 2022-07-14 21:52:58 +09:00
syuilo
d43eb123b1 12.114.0-beta.3 2022-07-14 21:40:55 +09:00
syuilo
800bbc4328 debug 2022-07-14 21:40:30 +09:00
syuilo
7a43cac6b3 12.114.0-beta.2 2022-07-14 21:32:33 +09:00
syuilo
fa5140310f debug 2022-07-14 21:32:21 +09:00
syuilo
1dec3461cd 12.114.0-beta.1 2022-07-14 21:06:38 +09:00
syuilo
0ddabdbf68 fix(client): revert es2017 2022-07-14 21:06:07 +09:00
syuilo
d78faf1134 chore: use tab 2022-07-14 21:02:45 +09:00
syuilo
cb00786f1e improve error handling of client boot 2022-07-14 20:41:17 +09:00
syuilo
61e26696aa log error while client boot 2022-07-14 20:29:45 +09:00
syuilo
f3b0c6f1e7 chore(client): tweak ui 2022-07-14 17:52:59 +09:00
syuilo
242538ddce refactor(client): rename menu(sidebar) -> navbar 2022-07-14 17:42:12 +09:00
syuilo
64be9baed0 chore(client): tweak style 2022-07-14 17:22:06 +09:00
syuilo
bce48dfee9 Merge branch 'develop' 2022-07-13 21:59:47 +09:00
syuilo
e365139961 12.113.0 2022-07-13 21:59:39 +09:00
syuilo
719c438b41 New Crowdin updates (#8959)
* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Slovak)

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

* New translations ja-JP.yml (Bengali)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Vietnamese)

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

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

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Catalan)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Russian)

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

* New translations ja-JP.yml (Chinese Traditional)
2022-07-13 21:59:08 +09:00
syuilo
5948a9da0f 12.113.0-beta.3 2022-07-13 21:46:39 +09:00
syuilo
db21be3282 chore(client): trust ios 2022-07-13 21:41:06 +09:00
syuilo
096b306bc5 lit fixes 2022-07-13 21:39:16 +09:00
syuilo
e30a03b5c4 update deps 2022-07-13 21:37:48 +09:00
syuilo
21d22200a3 update vite 2022-07-13 21:29:38 +09:00
Andreas Nedbal
53227d76d6 fix(client): hide bot protection warning with disabled registrations (#8794)
* fix(client): hide bot protection warning with disabled registrations

* Apply review suggestion from @Johann150

Co-authored-by: Johann150 <johann@qwertqwefsday.eu>

Co-authored-by: Johann150 <johann@qwertqwefsday.eu>
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2022-07-13 21:23:20 +09:00
syuilo
9cc08aebbe chore(dev): add note 2022-07-13 21:19:27 +09:00
Johann150
ee9bb8286e fix: add es2017 build target (#8931)
* remove top level awaits

* add es2017 target

* refactor: use setup and ref sugar
2022-07-13 21:17:19 +09:00
tamaina
ae92378689 fix(sw, notification): Don't issue an event if there is no affect (#8979)
* test

* ]v]
2022-07-13 21:07:49 +09:00
Johann150
714c80bf3f enhance: read theme color nodeinfo (#8977)
* provide theme color in nodeinfo metadata

* read theme color from nodeinfo

Prefer to read the theme color from the nodeinfo since it is more
performant than performing selector search on a DOM.
2022-07-13 21:06:24 +09:00
nvisser
947f079735 Make tensorflow an optinal dependency (#8986) 2022-07-13 21:00:59 +09:00
syuilo
c771135fd8 chore(client): fix routing 2022-07-13 18:28:04 +09:00
syuilo
ad970dffda fix(client): fix url encoded string handling of nirax
Fix #8878
2022-07-13 18:11:54 +09:00
syuilo
dd4f7be3da 🎨 2022-07-13 18:09:47 +09:00
syuilo
0bcfa2d04f chore(client): tweak explore page 2022-07-13 18:09:41 +09:00
syuilo
170b1b89ba chore(client): fix type def 2022-07-13 16:33:52 +09:00
syuilo
b08ead1dce chore(client): fix mention style 2022-07-13 16:33:39 +09:00
syuilo
05a342009f 🎨 2022-07-13 16:33:18 +09:00
syuilo
d7247e2db2 chore(client): tweak ui 2022-07-12 22:42:50 +09:00
syuilo
4550a4459b feat: support <plain> syntax for mfm 2022-07-12 12:03:38 +09:00
MeiMei
660781afd9 Fix crash at startup if TensorFlow is not supported (#8984)
* Lazy loading tensorflow

* CHANGELOG

* CHANGELOG

* Check CPU flags

* .
2022-07-12 10:38:57 +09:00
syuilo
1557d0afb8 12.113.0-beta.2 2022-07-11 23:36:55 +09:00
syuilo
d8264b11e2 enhance(client): improve widgets component 2022-07-11 23:36:39 +09:00
syuilo
a5648fb07f re: update mfm-js 0.23.0-canary.1 2022-07-11 23:13:23 +09:00
syuilo
43316ec355 12.113.0-beta.1 2022-07-10 21:11:03 +09:00
syuilo
18206e3cf6 update mfm-js 0.23.0-canary.1 2022-07-10 21:09:37 +09:00
yzhe819
9107de63b4 chore: fix lint errors (#8981) 2022-07-10 19:47:29 +09:00
syuilo
bbe4824955 enhance(client): update themes 2022-07-10 15:36:02 +09:00
syuilo
e7f4ec72b4 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-07-10 15:35:45 +09:00
syuilo
5cdb9fb748 chore(client): tweak style 2022-07-10 15:35:43 +09:00
tamaina
83ebe79a3f enhance(sw): If receiving a push notification issued more than a day, ignore it. (#8980)
* enhance(sw): ignore old push notification

* ✌️

* 半日

* !==

* 1日
2022-07-10 15:15:21 +09:00
syuilo
7f808eaf42 fix(client): fix style of mention 2022-07-10 13:16:11 +09:00
syuilo
fbd6b90bf8 chore(dev): remove duplicated lint rule 2022-07-10 11:14:41 +09:00
dogcraft
d92200a6d6 fix: QueryFailedError when logging user's IPs (#8973)
* fix QueryFailedError when logging user's IPs

* use `orIgnore` to fix
2022-07-10 11:02:46 +09:00
syuilo
c20311b8a7 Merge branch 'develop' 2022-07-09 18:32:55 +09:00
syuilo
111d4d0149 12.112.3 2022-07-09 18:32:45 +09:00
syuilo
49012f8352 update summaly 2022-07-09 18:23:21 +09:00
MeiMei
53e54c22fa Fix Attempts to update all notifications (#8974)
* Fix massive update notification parameters

* CHANGELOG

* CHANGELOG
2022-07-09 18:18:39 +09:00
syuilo
75d516011b enhance: make active email validation configurable 2022-07-09 15:05:55 +09:00
syuilo
522ddba3d7 enhance(server): tweak identicon generation 2022-07-09 13:22:35 +09:00
syuilo
fb14ac50b8 Merge branch 'develop' 2022-07-08 17:34:53 +09:00
syuilo
4ac75243e5 12.112.2 2022-07-08 17:34:44 +09:00
MeiMei
417e75b470 DockerでAlpineではなくDebianを使用するように (#8966)
* Debian

* CHANGELOG

* Update CHANGELOG
2022-07-08 17:17:21 +09:00
syuilo
481783606f Update CHANGELOG.md 2022-07-08 11:27:49 +09:00
syuilo
3b71f985a5 Update CHANGELOG.md 2022-07-08 11:24:12 +09:00
syuilo
9a58b4160b Update CHANGELOG.md 2022-07-08 11:21:14 +09:00
syuilo
207d7e0478 fix test 2022-07-08 11:21:11 +09:00
syuilo
84d984bd31 Merge branch 'develop' 2022-07-07 21:23:03 +09:00
syuilo
4bff55231f 12.112.1 2022-07-07 21:22:43 +09:00
syuilo
0890253b4c 12.112.0 2022-07-07 21:21:36 +09:00
Johann150
a1b8587ab2 enhance: show recipients of notes with specified visibility (#8949)
* enhance: reusable visibility component

* rename renote tooltip component

The tooltip that is used for renotes can be used in other cases as well.

* add tooltip for specified recipients

* add changelog entry

* Update visibility.vue

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2022-07-07 21:17:47 +09:00
syuilo
e560601815 feat: auto nsfw detection (#8840)
* feat: auto nsfw detection

* ✌️

* Update ja-JP.yml

* Update ja-JP.yml

* ポルノ判定のしきい値を高めに

* エラーハンドリングちゃんとした

* Update ja-JP.yml

* 感度設定を強化

* refactor

* feat: add video support for auto nsfw detection

* rename: image -> media

* .js

* fix: add missing error handling

* fix: use valid pathname instead of using filename due to invalid usage

* perf(nsfw-detection): decode frames

* disable detection of video for some reasons

* perf(nsfw-detection): streamify detection process for video

* disable disallowUploadWhenPredictedAsPorn option

* fix(nsfw-detection): improve reliability

* fix(nsfw-detection): use Math.ceil instead of Math.round

* perf(nsfw-detection): delete tmp frames after used

* fix(nsfw-detection): FSWatcher does not emit ready event

* perf(nsfw-detection): skip black frames

* refactor: strip exists check

* Update package.json

* めっちゃ変えた

* lint

* Update COPYING

* オプションで動画解析できるように

* Update yarn.lock

* Update CHANGELOG.md

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2022-07-07 21:06:37 +09:00
syuilo
010db2515c New Crowdin updates (#8950)
* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)
2022-07-07 21:01:45 +09:00
syuilo
a785f1f933 chore(client): tweak ui 2022-07-07 21:00:42 +09:00
syuilo
c0eba65527 chore(client): tweak ui 2022-07-07 20:19:50 +09:00
syuilo
15a9a4b119 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-07-07 19:08:21 +09:00
syuilo
da239b8362 chore(server): tweak api for admin 2022-07-07 19:08:18 +09:00
dependabot[bot]
10f7e976ee chore(deps): bump moment from 2.29.3 to 2.29.4 in /packages/backend (#8958)
Bumps [moment](https://github.com/moment/moment) from 2.29.3 to 2.29.4.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.3...2.29.4)

---
updated-dependencies:
- dependency-name: moment
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-07 18:29:42 +09:00
syuilo
95b966474f 12.112.0-beta.21 2022-07-07 18:28:54 +09:00
syuilo
3ffe674e80 update deps 2022-07-07 18:28:43 +09:00
syuilo
423e7692db chore(server): tweak api for admin 2022-07-07 18:09:50 +09:00
syuilo
a279d50212 chore(client): tweak ui 2022-07-07 18:06:34 +09:00
syuilo
9426f37c3e chore(client): tweak ui 2022-07-07 17:55:47 +09:00
syuilo
37bc81595a Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-07-07 17:36:45 +09:00
Kainoa Kanter
a23f59b996 enhance: Styled error screen (#8946)
* Styled error screen

* Make details margin auto

* Update boot.css

* Replace fontawesome with tabler svg

* Remove hr

* Add new style to flush screen

* Rename to `error.css`

* Fix

* Update base.pug

* Finally fix!

* Wrap details in `<code>`

* Add style to flush

* Fix

* BIOS -> Repair tool

* Fix

* Typo

* Adjust style

* Adjust text

* Flush -> Clear

* Revert flush changes

* Responsive

* Also hide splash
2022-07-07 17:35:56 +09:00
syuilo
f4fcb912e3 enhance(client): make widgets available on tablet again 2022-07-07 17:29:30 +09:00
syuilo
1c5f339d09 chore(client): tweak style 2022-07-07 17:28:21 +09:00
syuilo
7cf3218068 chore(client): tweak ui 2022-07-07 17:28:13 +09:00
Johann150
7775eb9641 refactor: use overflow-y to determine scroll container
By using `overflow-y` instead of `overflow` using `endsWith` can be
avoided and represents the data we are actually interested in here
more accurately.
2022-07-06 19:02:39 +02:00
Johann150
ac6b8f3480 refactor: use autofocus parameter
Using the `ref` seems to be broken but using the autofocus parameter
seems to fix it.
2022-07-06 18:23:05 +02:00
syuilo
41bef75d1a chore(client): tweak style 2022-07-06 18:20:32 +09:00
syuilo
14e32557d2 Update CHANGELOG.md 2022-07-06 08:42:04 +09:00
syuilo
6d7a29b2cb 12.112.0-beta.20 2022-07-06 07:54:35 +09:00
syuilo
7db4af5578 perf(client): trying improve perf of emoji-picker 2022-07-06 07:54:04 +09:00
syuilo
f7747af690 Revert "revert emoji picker changes"
This reverts commit 38d5303ccd.
2022-07-06 07:30:56 +09:00
Johann150
4940894324 fix prismjs import
fixes #8944
2022-07-06 00:29:51 +02:00
syuilo
2618d72f1f 12.112.0-beta.19 2022-07-06 07:27:09 +09:00
syuilo
38d5303ccd revert emoji picker changes 2022-07-06 07:26:58 +09:00
syuilo
efafc31c9b fix(client): テーマを作成するとクライアントが起動しなくなる 2022-07-06 07:08:45 +09:00
syuilo
b35c3114c8 revert: feat: styled error screen (#8930) 2022-07-06 06:36:14 +09:00
syuilo
b9f9fe2927 12.112.0-beta.18 2022-07-05 23:13:49 +09:00
syuilo
d393cabfe1 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-07-05 23:13:33 +09:00
syuilo
bf186de56c chore(client): rendering performance tweak a bit 2022-07-05 23:13:28 +09:00
syuilo
21279769c9 New Crowdin updates (#8841)
* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Slovak)

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

* New translations ja-JP.yml (Kabyle)

* New translations ja-JP.yml (Kannada)

* New translations ja-JP.yml (Bengali)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Romanian)

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (Catalan)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Swedish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Portuguese)

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

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Slovak)

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

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Thai)

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

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

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

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Slovak)

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

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Slovak)

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

* New translations ja-JP.yml (Bengali)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (Ukrainian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (Vietnamese)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Slovak)

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

* New translations ja-JP.yml (Vietnamese)
2022-07-05 23:08:24 +09:00
syuilo
bc73ad2e56 chore(client): rendering performance tweak a bit 2022-07-05 23:01:23 +09:00
syuilo
f882e0b6b6 chore(client): remove unused class 2022-07-05 22:40:53 +09:00
syuilo
bc012784ef chore(client): tweak ui 2022-07-05 22:40:15 +09:00
syuilo
f66235f066 chore(client): rendering performance tweak a bit 2022-07-05 22:35:57 +09:00
syuilo
60710805d5 chore(client): fix type 2022-07-05 22:25:34 +09:00
syuilo
62f8af4891 enhance(client): improve usability 2022-07-05 22:25:27 +09:00
syuilo
7dd9f93efb feat(client): メニューからページをリロードできるように 2022-07-05 19:29:44 +09:00
syuilo
972b03f842 perf: allow get for notes/reactions 2022-07-05 19:16:21 +09:00
syuilo
a1cbffd14f chore(client): tweak ui 2022-07-05 17:55:47 +09:00
syuilo
38c1867a8b 12.112.0-beta.17 2022-07-05 17:46:55 +09:00
syuilo
cb246d3459 rename: BIOS -> Repair Tool 2022-07-05 17:46:17 +09:00
Kainoa Kanter
40656e3ee2 feat: styled error screen (#8930)
* Styled error screen

* Make details margin auto

* Update boot.css

* Replace fontawesome with tabler svg

* Remove hr

* Add new style to flush screen

* Rename to `error.css`
2022-07-05 17:44:05 +09:00
Johann150
ef9fdb93d2 fix: pagination uses API correctly (#8925) 2022-07-05 17:42:54 +09:00
syuilo
02fafd5114 fix(client): user search of explore not working 2022-07-05 17:20:34 +09:00
syuilo
58b00e2f4c chore(client): tweak style 2022-07-05 16:19:52 +09:00
syuilo
0de176a2ba enhance(client): improve marquee 2022-07-05 16:16:13 +09:00
syuilo
1778269ea8 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-07-05 16:07:55 +09:00
syuilo
ccea04f391 chore(client): tweak deck 2022-07-05 16:07:53 +09:00
syuilo
135dfa8026 chore(client): tweak deck 2022-07-05 15:55:55 +09:00
Kainoa Kanter
25b7d02540 Update store.ts (#8937) 2022-07-05 15:21:46 +09:00
syuilo
4f0878e267 chore(client): tweak ui 2022-07-05 12:09:49 +09:00
Kainoa Kanter
1eb504a640 chore: fix client lint errors (#8934)
* Fix client lint

* Hide no-v-html

* Ignore banned type

* Update page-editor.vue
2022-07-05 11:21:59 +09:00
Usuyuki
ce9d29828d fix:typo 「有効する必要…」→「有効にする必要…」 (#8936) 2022-07-05 11:17:42 +09:00
tamaina
2fe4a51d26 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-07-04 15:26:21 +00:00
tamaina
452f2a07ac update CHANGELOG.md 2022-07-04 15:26:18 +00:00
CyberRex
cd07eb222e Add additional drive capacity change support (#8867)
* Add additional drive capacity change support

* Update packages/backend/src/server/api/endpoints/admin/drive-capacity-override.ts

Co-authored-by: Johann150 <johann@qwertqwefsday.eu>

* 🎨

* show instance default capacity in placeholder

* fix

* update api/drive

* fix

* remove :

* fix lint

Co-authored-by: Johann150 <johann@qwertqwefsday.eu>
Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2022-07-05 00:21:01 +09:00
Johann150
a228d1ddaa fix lint @typescript-eslint/ban-types 2022-07-04 16:46:48 +02:00
Johann150
d748ba2c51 fix lint no-prototype-builtins 2022-07-04 16:39:04 +02:00
Johann150
a5c3fcea6e fix lint no-undef 2022-07-04 16:33:55 +02:00
Johann150
2bd4323b17 fix lint: use let instead of const for $ref
Fixes lint no-const-assign.
2022-07-04 16:22:21 +02:00
Johann150
935fce338a refactor: remove unnecessary computed
Fixes lint no-const-assign.
2022-07-04 16:17:07 +02:00
Johann150
366fae41ff fix lint vue/require-valid-default-prop 2022-07-04 16:06:46 +02:00
Johann150
0b9c961707 fix lint no-fallthrough 2022-07-04 16:05:41 +02:00
Johann150
f14d5886f2 fix lint padded-blocks 2022-07-04 15:59:24 +02:00
Johann150
ea9e32096b fix(lint): semicolong spacing 2022-07-04 15:56:16 +02:00
Johann150
121fa40621 fix: replace use of window 2022-07-04 15:27:21 +02:00
syuilo
f9444aa3d3 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-07-04 21:29:10 +09:00
syuilo
08c6ed04bf update vite 2022-07-04 21:29:07 +09:00
syuilo
65c12903e4 enhance(client): deckのウイジェットカラムが未設定の時に説明を表示するように 2022-07-04 21:28:59 +09:00
Johann150
e0e42a6425 fix: spellcheck is boolean not string 2022-07-04 10:35:27 +02:00
Johann150
b438a1935d update changelog 2022-07-03 21:41:10 +02:00
syuilo
4ab2f16ed3 enhance(client): tweak statusbar 2022-07-04 01:37:47 +09:00
syuilo
dc1a35c13c chore(client): tweak style 2022-07-04 01:12:36 +09:00
syuilo
1cb847aa80 enhance(client): tweak deck 2022-07-03 23:13:41 +09:00
MeiMei
034c5d792b fix: streamingテストおそい (#8912) 2022-07-03 20:54:54 +09:00
syuilo
0076797b15 12.112.0-beta.16 2022-07-03 20:32:34 +09:00
syuilo
ee0d3c6742 Update CHANGELOG.md 2022-07-03 20:32:21 +09:00
syuilo
1163c85db6 enhance(client): refine deck
Fix #7720
2022-07-03 20:30:58 +09:00
syuilo
af6dd4194f fix(client): contextmenu of deck not working 2022-07-03 19:11:10 +09:00
syuilo
26c89e053d fix typo 2022-07-03 19:01:08 +09:00
syuilo
751e655d72 12.112.0-beta.15 2022-07-03 17:04:44 +09:00
syuilo
57c6db6952 chore(client): rename marquee -> ticker 2022-07-03 16:50:51 +09:00
syuilo
66ffb253a2 chore(client): tweak style 2022-07-03 16:46:00 +09:00
syuilo
ab5cd1cb15 fix(client): fix wrong import 2022-07-03 16:36:23 +09:00
syuilo
4774bc1f47 chore(client): tweak style 2022-07-03 16:36:13 +09:00
syuilo
1cc8fd54c0 fix(client): fix wrong import 2022-07-03 16:19:47 +09:00
syuilo
e393ab6044 fix(client): style tweak for ios 2022-07-03 16:17:31 +09:00
syuilo
01688b543a 12.112.0-beta.14 2022-07-03 14:45:20 +09:00
syuilo
b2af1948a4 fix(client): フォロワー一覧がフォローににゃっているんだにゃあ 2022-07-03 14:44:18 +09:00
syuilo
0eb473198c chore(client): tweak style 2022-07-03 14:43:28 +09:00
syuilo
44c85aff86 feat(client): status bar (experimental) 2022-07-03 14:40:02 +09:00
syuilo
f8f3ecbf02 12.112.0-beta.13 2022-07-03 00:24:49 +09:00
syuilo
dd426735a0 feat: moderation note 2022-07-03 00:15:03 +09:00
syuilo
0de973d293 update eslint rules 2022-07-02 23:01:13 +09:00
syuilo
9c6a220810 chore(client): tweak ui 2022-07-02 22:07:04 +09:00
syuilo
ec41aefeea fix(client): fix typo 2022-07-02 22:06:53 +09:00
syuilo
66231c1669 fix(client): use unique class names for root to prevent conflicts of style 2022-07-02 21:29:48 +09:00
syuilo
f9ba35d928 enhance(client): better sticky-container component 2022-07-02 21:28:55 +09:00
syuilo
ef83670716 enhance(client): better marquee component 2022-07-02 21:28:04 +09:00
syuilo
949dbb3918 feat(server): add fetch-rss api to reduce dependency of external apis 2022-07-02 21:26:33 +09:00
syuilo
eb709508a4 12.112.0-beta.12 2022-07-02 15:17:09 +09:00
syuilo
eccc90c843 feat: Log user ips (#8872)
* wip

* store ip and headers

* Update admin-file.vue

* require admin for view ip/headers

* IP (recent) 消した

* admin必須

* opt in

* clean ips periodically

* respect logging setting in drive/files/create
2022-07-02 15:12:11 +09:00
syuilo
ded0f6f0df refactor(client): refactoring 2022-07-02 14:00:37 +09:00
syuilo
52a1ec9af1 enhance(server): アンケートを新しい順にソート 2022-07-02 12:34:22 +09:00
syuilo
b773d516d3 chore(client): tweak ui 2022-07-02 12:22:52 +09:00
syuilo
6bcd5cb310 enhance(client): cache pages in page-window 2022-07-02 12:12:10 +09:00
syuilo
01d5a97a4f feat(client): poll highlights in explore page 2022-07-01 23:42:03 +09:00
syuilo
afe0d9a266 enhance(client): ハイライトをみつけるに統合 2022-07-01 23:33:47 +09:00
syuilo
add6e9b14b chore(client): tweak ui 2022-07-01 18:55:45 +09:00
syuilo
80a033c1cf chore(client): tweak style 2022-07-01 17:08:45 +09:00
syuilo
c67c3b0360 chore(client): tweak style 2022-07-01 16:43:38 +09:00
syuilo
f635d5b864 chore(client): tweak style 2022-07-01 15:23:49 +09:00
syuilo
9205155fc9 12.112.0-beta.11 2022-07-01 15:11:39 +09:00
syuilo
65b0a002c7 chore(client): tweak ui 2022-07-01 15:06:17 +09:00
MeiMei
2f65d91ea8 migrate parse5 to 7.0.0 (#8916)
* migrate parse5 to 7.0.0

* fix
2022-07-01 13:48:03 +09:00
syuilo
b846ebeb97 use parse5 6.0.1
Fix #8914
2022-07-01 11:07:14 +09:00
Johann150
66b27bdc97 fix typo
Co-authored-by: mei23 <m@m544.net>
2022-06-30 22:03:04 +02:00
syuilo
649bb672df chore(client): fix pie rendering 2022-07-01 00:38:20 +09:00
syuilo
27fef64cf3 12.112.0-beta.10 2022-07-01 00:21:38 +09:00
syuilo
e3bf53ea84 update deps 2022-07-01 00:21:25 +09:00
syuilo
30aa1dcdcd chore(client): tweak rss-marquee 2022-06-30 23:53:58 +09:00
syuilo
7c7ce072c7 chore(client): tweak ui 2022-06-30 23:51:18 +09:00
syuilo
6ba888f476 feat(client): add rss-marquee widget 2022-06-30 23:45:11 +09:00
syuilo
bbdc52a7ea chore(client): tweak style 2022-06-30 23:07:45 +09:00
syuilo
cb697cf582 chore(client): tweak ui 2022-06-30 22:02:08 +09:00
syuilo
4c2cd3c8d5 chore(client): tweak ui 2022-06-30 21:38:34 +09:00
syuilo
1bec974fe6 12.112.0-beta.9 2022-06-30 20:15:47 +09:00
syuilo
1069ae6525 update vite 2022-06-30 20:15:40 +09:00
syuilo
ed41d542bb chore(client): tweak ui 2022-06-30 20:15:14 +09:00
syuilo
eac31eb323 chore(client): tweak ui 2022-06-30 19:19:54 +09:00
syuilo
324f5525b5 fix(server): cannot show users 2022-06-30 15:36:09 +09:00
syuilo
6f3e64f13e chore(client): tweak client 2022-06-30 15:32:11 +09:00
syuilo
6f2d2a71f9 enhance(client): show confirm dialog when logout 2022-06-30 15:09:10 +09:00
syuilo
47dcb1b41f refactor(client): use setup syntax 2022-06-30 12:48:42 +09:00
syuilo
fa6eb0e0f2 perf(client): improve range control performance 2022-06-30 12:42:35 +09:00
syuilo
bffe6fb9bf tweak client 2022-06-30 10:53:40 +09:00
syuilo
9ac526b6b6 tweak client 2022-06-30 10:13:27 +09:00
Johann150
ca6afd40ad fix client router catchall
fixes #8903
2022-06-29 22:09:44 +02:00
Johann150
8b7dcf4dba fix 'assignment to const' error 2022-06-29 17:44:03 +02:00
syuilo
99dcd7bb27 feat(client): add instance-cloud widget 2022-06-29 23:28:52 +09:00
syuilo
6a7dff1c82 Update .eslintrc.js 2022-06-29 23:06:03 +09:00
syuilo
82e9658ac3 12.112.0-beta.8 2022-06-29 21:22:47 +09:00
syuilo
3f6e04697a Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-06-29 21:22:18 +09:00
syuilo
c9b3ab80ca feat(client): add tag cloud component 2022-06-29 21:22:15 +09:00
Johann150
7f111f4474 Prevent access to user pages when not logged in [v2] (#8904)
* do not throw error when navigating

* enhance: add loginRequired to router

This allows client pages to require logging in before displaying the
page, useful for example for user settings pages.

* add login requirements

Co-authored-by: Andreas Nedbal <git@pixelde.su>
2022-06-29 18:26:06 +09:00
syuilo
f997b7dff2 chore(client): fix type def 2022-06-29 16:07:38 +09:00
syuilo
a107dff4d6 perf(client): remove needless reactivity 2022-06-29 16:06:13 +09:00
syuilo
bb68cfaa81 enhance(client): improve router
Fix #8902
2022-06-29 16:00:00 +09:00
syuilo
4fd386c3dc chore(client): tweak client 2022-06-29 15:41:06 +09:00
syuilo
8648308823 chore(client): tweak style 2022-06-29 14:19:40 +09:00
syuilo
2b1e03cc64 enhance(client): add users tab to instance-info 2022-06-29 14:14:27 +09:00
syuilo
0f1c0a42a2 enhance(client): メニュー整理
Resolve #6389
Fix #8035
2022-06-29 11:13:32 +09:00
syuilo
1a698111a4 refactor(client): remove invalid computed 2022-06-29 00:36:06 +09:00
syuilo
9f7c9b122f fix(client): 非モデレーターがインスタンス情報ページを表示できない問題を修正 2022-06-28 22:56:18 +09:00
syuilo
9a4198293a chore(client): tweak style 2022-06-28 22:32:01 +09:00
syuilo
ac162f9996 chore(client): tweak style 2022-06-28 18:41:37 +09:00
syuilo
d7e7152bd3 chore(client): tweak style 2022-06-28 18:09:42 +09:00
syuilo
a50b1d69a1 chore(client): fix #8858 2022-06-28 17:59:23 +09:00
syuilo
30bdfde4cc 12.112.0-beta.7 2022-06-28 16:06:23 +09:00
syuilo
ea3d391df9 chore(client): tweak style 2022-06-28 16:02:39 +09:00
syuilo
270e1212ac chore(client): refactor and style tweaks 2022-06-28 15:59:49 +09:00
syuilo
57bb6e611f refactor(client): use setup syntax 2022-06-28 14:34:44 +09:00
syuilo
31d73f4659 chore(client): fix type def 2022-06-28 13:06:31 +09:00
syuilo
5c3e782d29 improve instance doughnut charts 2022-06-28 13:05:20 +09:00
syuilo
553d644781 chore(client): tweak style 2022-06-28 12:16:20 +09:00
syuilo
7d8a70f99e fix(api): fix instance schema 2022-06-28 12:16:11 +09:00
syuilo
0f550d568d 12.112.0-beta.6 2022-06-28 10:43:18 +09:00
syuilo
0657995b42 chore(client): tweak style 2022-06-28 10:42:54 +09:00
syuilo
fe460c022c feat(client): add instances doughnuts charts for dashboard 2022-06-28 10:42:26 +09:00
syuilo
d7c6e2e61c fix(client): fix chart tooltip rendering 2022-06-28 10:41:38 +09:00
syuilo
c04d3d22af feat(api): add federation/stats endpoint 2022-06-28 10:41:22 +09:00
syuilo
164d4a9825 fix(api): add missing themeColor property of instance 2022-06-28 10:40:49 +09:00
syuilo
596a61ce18 lint fix 2022-06-28 00:27:24 +09:00
syuilo
40cd5c5a49 chore(client): tweak style 2022-06-28 00:20:51 +09:00
syuilo
329f055a97 feat: make possible to delete an account by admin
Resolve #8830
2022-06-27 23:49:16 +09:00
Johann150
bc3ae901cc refactor: remove duplicate code (#8895) 2022-06-27 21:48:10 +09:00
syuilo
0ec266abf7 chore(client): tweak client 2022-06-26 19:41:21 +09:00
MeiMei
f834d6a813 fix: mocha テストが動かないのを修正 v2 (#8892)
* on push

* Fix mute test

* fix note test

* api

* inc timeout

* uploadUrl

* Revert "on push"

This reverts commit 778a58df61.

* lint

* waitFire

* Wrap connectStream

* return
2022-06-26 19:16:32 +09:00
syuilo
4634920866 fix #8894 2022-06-26 17:38:50 +09:00
syuilo
744db4b5ed chore(client): tweak ui 🎨 2022-06-26 16:57:12 +09:00
syuilo
bd3c6f4157 chore(client): tweak ui 🎨 2022-06-26 16:38:27 +09:00
syuilo
4329d9e76d chore(client): fix type 2022-06-26 15:55:51 +09:00
syuilo
311478e725 chore(client): tweak client 2022-06-26 15:54:07 +09:00
syuilo
c27d9e11b4 chore(client): tweak client 2022-06-26 14:17:55 +09:00
syuilo
de43b47ca8 12.112.0-beta.5 2022-06-26 13:29:14 +09:00
syuilo
3183a02824 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-06-26 13:28:49 +09:00
syuilo
0cae0a49e2 chore(client): tweak ui 2022-06-26 13:28:47 +09:00
tamaina
2366f568b9 enhance(client): Enhance boot error display (#8879)
* Change boot error message

* fix

* ✌️

* fix
2022-06-26 12:47:43 +09:00
syuilo
5e95a1f7af refactor(client): extract interval logic to a composable function
あと`onUnmounted`を`onMounted`内で呼んでいたりしたのを修正したりとか
2022-06-26 03:12:58 +09:00
syuilo
6a4574b612 enhance(client): tweak control panel dashboard 2022-06-26 01:45:33 +09:00
syuilo
f071ea4902 fix(client): remove needless requestLog call 2022-06-25 23:16:02 +09:00
syuilo
0af581f2e6 12.112.0-beta.4 2022-06-25 23:01:48 +09:00
syuilo
0248a2a989 enhance(client): improve control panel 2022-06-25 23:01:40 +09:00
tamaina
c67c0df762 fix notification-setting-window.vue 2022-06-25 09:29:42 +00:00
syuilo
929dc076ec Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-06-25 18:26:34 +09:00
syuilo
58e83f8e4f feat: allow GET for some endpoints
Resolve #8263
2022-06-25 18:26:31 +09:00
syuilo
7be4b2145b refactor(client): extract tooltip logic of chart 2022-06-25 18:05:35 +09:00
Johann150
d5ef68336a refactor: notification setting window composition API (#8860)
* refactor: notification setting window composition API

* fix lint vue/require-valid-default-prop

* fix type
2022-06-25 17:14:13 +09:00
dependabot[bot]
126011c1a7 chore(deps): bump jsrsasign from 10.5.24 to 10.5.25 in /packages/backend (#8889)
Bumps [jsrsasign](https://github.com/kjur/jsrsasign) from 10.5.24 to 10.5.25.
- [Release notes](https://github.com/kjur/jsrsasign/releases)
- [Changelog](https://github.com/kjur/jsrsasign/blob/master/ChangeLog.txt)
- [Commits](https://github.com/kjur/jsrsasign/compare/10.5.24...10.5.25)

---
updated-dependencies:
- dependency-name: jsrsasign
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-25 16:28:36 +09:00
Andreas Nedbal
36f09b6cdc fix(client): only enable hotkeys for logged in users (#8793)
* fix(client): only enable hotkeys for logged in users

* fix(client): keep theme and search hotkeys for logged out users
2022-06-25 14:25:22 +09:00
Johann150
5728350267 fix: always respect instance mutes (#8854)
* fix: muted user query also checks instances

This way it can be ensured that the instance mute is used everywhere it
is required without checking the whole codebase again. Muted users and
muted instances should be used together anyways.

* fix lint
2022-06-25 14:23:59 +09:00
dependabot[bot]
e3461f1b58 chore(deps): bump jpeg-js from 0.4.1 to 0.4.4 in /packages/backend (#8843)
Bumps [jpeg-js](https://github.com/eugeneware/jpeg-js) from 0.4.1 to 0.4.4.
- [Release notes](https://github.com/eugeneware/jpeg-js/releases)
- [Commits](https://github.com/eugeneware/jpeg-js/compare/v0.4.1...v0.4.4)

---
updated-dependencies:
- dependency-name: jpeg-js
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-25 13:50:15 +09:00
dependabot[bot]
ca5200d1f1 chore(deps): bump undici from 5.4.0 to 5.5.1 in /packages/backend (#8842)
Bumps [undici](https://github.com/nodejs/undici) from 5.4.0 to 5.5.1.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v5.4.0...v5.5.1)

---
updated-dependencies:
- dependency-name: undici
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-25 13:50:06 +09:00
syuilo
16fda89738 chore(client): tweak MkKeyValue component 2022-06-25 11:50:19 +09:00
syuilo
b2caf821ef 12.112.0-beta.3 2022-06-25 00:06:13 +09:00
syuilo
734fe9fd9d chore(client): tweak ui 2022-06-25 00:03:59 +09:00
syuilo
03973654b5 chore(client): improve usability 2022-06-24 23:49:47 +09:00
syuilo
1b2bd89383 fix bug 2022-06-24 21:48:54 +09:00
syuilo
1e8d84dbfa refactor: remove unused import 2022-06-24 21:46:49 +09:00
syuilo
696e8add00 feat: 管理者が特定ユーザーのアップロードしたファイル一覧を見れるように 2022-06-24 21:43:28 +09:00
syuilo
905d8625f8 fix(client): アカウント作成フォームでエラーが出る問題を修正 2022-06-24 21:19:38 +09:00
syuilo
bf4726f91d fix(client): ログアウトできない問題を修正 2022-06-24 21:16:05 +09:00
syuilo
274352beab Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-06-24 19:47:48 +09:00
syuilo
a1449455a2 chore(client): tweak mini-chart rendering 2022-06-24 19:47:38 +09:00
Johann150
a5241379af fix lints 2022-06-24 12:44:22 +02:00
MeiMei
6f8e3fe366 enhance: Redisをioredisに統一してIPv6サポート (#8869)
* Use ioredis, Supports IPv6 host

https://github.com/misskey-dev/misskey/issues/8862

* Fix import

* order

* a

* i

* fix

* flushdb

* family

* CHANGELOG

* redis_version

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2022-06-24 19:22:19 +09:00
Johann150
1c2e2c4b06 fix(client): ask to log in for poll vote (#8883) 2022-06-24 19:03:41 +09:00
syuilo
55c22eec8b chore(client): tweak ui 2022-06-24 10:52:34 +09:00
syuilo
4a5d5fe20c refactor(client): use composition api 2022-06-24 10:52:28 +09:00
tamaina
12374bd6a3 fix(nirax): Normalize path (#8877) 2022-06-24 01:26:15 +09:00
syuilo
c9e9129373 fix #8861 2022-06-24 00:47:55 +09:00
syuilo
5ee53c222b chore(client): tweak ui 2022-06-23 23:45:22 +09:00
syuilo
3e1248ff35 lint fixes 2022-06-23 21:46:15 +09:00
Johann150
4f4d2b7c53 refactor: simplify ap/show with DbResolver (#8838)
Using the existing code in DbResolver we can avoid separate code for
parsing the URIs in this endpoint.

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2022-06-23 21:32:17 +09:00
Johann150
ecdaeea94f enhance: word mute checks CW (#8873) 2022-06-23 20:26:47 +09:00
syuilo
d1e151172b chore(client): tweak client design 2022-06-23 13:39:28 +09:00
syuilo
2a2020b797 chore(dev): improve eslint config 2022-06-23 13:19:17 +09:00
syuilo
43b9a9e618 enhance(client): tweak ui 2022-06-22 23:40:53 +09:00
syuilo
aabf12038c 12.112.0-beta.2 2022-06-22 20:51:04 +09:00
syuilo
d3f25fa290 tweak client 2022-06-22 20:47:53 +09:00
syuilo
be383aa5b2 refactor(client): use composition api 2022-06-22 16:30:55 +09:00
syuilo
85365da69e refactor(client): refactor header tab handling 2022-06-22 16:30:45 +09:00
syuilo
e44cb42de4 🎨 2022-06-22 00:48:16 +09:00
syuilo
ad123b3cce tweak client 2022-06-22 00:10:34 +09:00
syuilo
1e85a3025c Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-06-21 23:22:20 +09:00
syuilo
c9d4c00708 fix(client): moderators cannot view instance-info page 2022-06-21 23:22:18 +09:00
Johann150
e0c6688709 update changelog 2022-06-21 15:56:47 +02:00
syuilo
2d181ba5af enhance(client): show warning in control panel when there is an unresolved abuse report 2022-06-21 19:48:28 +09:00
syuilo
f880d0631c tweak client 2022-06-21 17:55:38 +09:00
syuilo
a6fff86099 refactor(client): use composition api 2022-06-21 14:39:23 +09:00
syuilo
4efee455b1 fix(server): faviconUrl of federated instance is missing 2022-06-21 14:28:43 +09:00
syuilo
14cc341cc9 chore: add comments 2022-06-21 14:18:06 +09:00
syuilo
ce6cc21bcd tweak client
Fix #8856
2022-06-21 14:12:39 +09:00
Johann150
3796a3edea fix: block button in federation panel (#8855) 2022-06-20 23:48:38 +09:00
syuilo
f995172c5d tweak client 2022-06-20 21:05:18 +09:00
syuilo
8e20e27ff9 fix client 2022-06-20 19:49:51 +09:00
syuilo
699f24f3dc refactor(client): Refine routing (#8846) 2022-06-20 17:38:49 +09:00
tamaina
30a39a296d refactor: チャットルームをComposition API化 (#8850)
* pick form

* pick message

* pick room

* fix lint

* fix scroll?

* fix scroll.ts

* fix directives/sticky-container

* update global/sticky-container.vue

* fix, 🎨

* test.1
2022-06-20 13:20:28 +09:00
tamaina
b70473ed60 feat: Add Badge Image to Push Notification (#8012)
* fix

* nanka iroiro

* wip

* wip

* fix lint

* fix loginId

* fix

* refactor

* refactor

* remove follow action

* clean up

* Revert "remove follow action"

This reverts commit defbb41648.

* Revert "clean up"

This reverts commit f94919cb9c.

* remove fetch specification

* renoteの条件追加

* apiFetch => cli

* bypass fetch?

* fix

* refactor: use path alias

* temp: add submodule

* remove submodule

* enhane: unison-reloadに指定したパスに移動できるように

* null

* null

* feat: ログインするアカウントのIDをクエリ文字列で指定する機能

* null

* await?

* rename

* rename

* Update read.ts

* merge

* get-note-summary

* fix

* swパッケージに

* add missing packages

* fix getNoteSummary

* add webpack-cli

* ✌️

* remove plugins

* sw-inject分離したがテストしてない

* fix notification.vue

* remove a blank line

* disconnect intersection observer

* disconnect2

* fix notification.vue

* remove a blank line

* disconnect intersection observer

* disconnect2

* fix

* ✌️

* clean up config

* typesを戻した

* backend/src/web/index.ts

* notification-badges

* add scripts

* change create-notification.ts

* Update packages/client/src/components/notification.vue

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>

* disconnect

* oops

* Failed to load the script unexpectedly回避
sw.jsとlib.tsを分離してみた

* truncate notification

* Update packages/client/src/ui/_common_/common.vue

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>

* clean up

* clean up

* refactor

* キャッシュ対策

* Truncate push notification message

* fix

* クライアントがあったらストリームに接続しているということなので通知しない判定の位置を修正

* components/drive-file-thumbnail.vue

* components/drive-select-dialog.vue

* components/drive-window.vue

* merge

* fix

* Service Workerのビルドにesbuildを使うようにする

* return createEmptyNotification()

* fix

* fix

* i18n.ts

* update

* ✌️

* remove ts-loader

* fix

* fix

* enhance: Service Workerを常に登録するように

* pollEnded

* pollEnded

* URLをsw.jsに戻す

* clean up

* fix lint

* changelog

* alpha-test

* also with twemoji

* add isMimeImage function

* catch

* Colour => Color

* char2file => char2filePath

* Update autocomplete.vue

* remove clone?

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2022-06-20 00:33:46 +09:00
Andreas Nedbal
54465d36a7 Refactor page-editor elements to use Composition API (#8721)
* refactor(client): refactor page-editor elements to use Composition API

* Apply review suggestions from @Johann150

Co-authored-by: Johann150 <johann@qwertqwefsday.eu>

Co-authored-by: Johann150 <johann@qwertqwefsday.eu>
2022-06-18 18:39:04 +09:00
syuilo
802a35d4b6 fix typo 2022-06-18 18:27:47 +09:00
futchitwo
5b7595d9d7 Improve: unclip (#8823)
* Refactor clip page to use Composition API

* Refactor clip page

* Refactor clip page

* Refactor clip page

* Improve: unclip

* Fix unclip

* Fix unclip

* chore: better type and name

* Fix

* Fix clipPage vue provider

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2022-06-18 18:27:09 +09:00
futchitwo
d7bab7cf0b Refactor clip page to Composition API (#8822)
* Refactor clip page to use Composition API

* Refactor clip page

* Refactor clip page

* Refactor clip page
2022-06-18 18:23:54 +09:00
MeiMei
6422cde5f2 enhance: Improve player detection in URL preview (#8849)
* enhance: Improve player detection in URL preview

* CHANGELOG
2022-06-18 16:02:31 +09:00
syuilo
8df2f19b5b enhance(client): improve file moderation ui 2022-06-17 15:03:02 +09:00
syuilo
e29a310f7d Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2022-06-17 14:31:31 +09:00
syuilo
70450fe6b4 Update ROADMAP.md 2022-06-17 13:56:39 +09:00
syuilo
7faa75d483 chore(client): tweak range control design 2022-06-17 13:20:33 +09:00
syuilo
836ecff785 Update CONTRIBUTING.md 2022-06-17 11:02:47 +09:00
Johann150
6078c986d3 fix: render empty note content correctly
Instead of coercing to `null`, coercing to an empty string should simplify handling.
2022-06-16 12:51:44 +02:00
Johann150
b54f906605 fix: correctly render note text
Fix a regression from #8787 that was previously fixed in #8440.
2022-06-16 12:32:09 +02:00
syuilo
4a55425fdb enhance(client): improve files page of control panel 2022-06-16 16:05:43 +09:00
syuilo
fdba255b9a Update CHANGELOG.md 2022-06-14 23:05:11 +09:00
MeiMei
1d8ec102f1 fix: GenerateVideoThumbnail (#8825)
* fix: GenerateVideoThumbnail

* CHANGELOG

* fix cleanup

* Revert "fix cleanup"

This reverts commit d54cf8262a.
2022-06-14 23:02:14 +09:00
Johann150
3a42fe50c6 fix: tmpdir cleanup removes contained files (#8826) 2022-06-14 23:00:10 +09:00
syuilo
e4dc25dd5c enhance(server): モデレーターであってもレートリミットを有効に 2022-06-14 22:59:19 +09:00
tamaina
f1e6fa8ee2 fix: add limit to i/notifications (#8836)
* fix: add limit to i/notifications

* ms

* remove ms
2022-06-14 22:55:58 +09:00
Johann150
10d979bd65 fix(docs): use correct description property 2022-06-14 11:55:58 +02:00
Johann150
b5390c0922 fix: remove unused parameter 2022-06-14 11:54:55 +02:00
syuilo
963f538728 lint fixes 2022-06-14 18:01:23 +09:00
664 changed files with 26548 additions and 18286 deletions

View File

@@ -57,6 +57,7 @@ db:
redis:
host: localhost
port: 6379
#family: 0 # 0=Both, 4=IPv4, 6=IPv6
#pass: example-pass
#prefix: example-prefix
#db: 1

View File

@@ -2,6 +2,7 @@
## 12.x.x (unreleased)
### Improvements
- Client: Preferences Registry
### Bugfixes
-
@@ -9,6 +10,146 @@
You should also include the user name that made the change.
-->
## 12.118.0 (2022/08/07)
### Improvements
- Client: 設定のバックアップ/リストア機能
- Client: Add vi-VN language support
- Client: Add unix time widget @syuilo
### Bugfixes
- Server: リモートユーザーを正しくブロックできるように修正する @xianonn
- Client: 一度作ったwebhookの設定画面を開こうとするとページがフリーズする @syuilo
- Client: MiAuth認証ページが機能していない @syuilo
- Client: 一部のアプリからファイルを投稿フォームへドロップできない場合がある問題を修正 @m-hayabusa
## 12.117.1 (2022/07/19)
### Improvements
- Client: UIのブラッシュアップ @syuilo
### Bugfixes
- Server: ファイルのアップロードに失敗することがある問題を修正 @acid-chicken
- Client: リアクションピッカーがアプリ内ウィンドウの後ろに表示されてしまう問題を修正 @syuilo
- Client: ユーザー情報の取得の再試行を修正 @xianonn
- Client: MFMチートシートの挙動を修正 @syuilo
- Client: 「インスタンスからのお知らせを受け取る」の設定を変更できない問題を修正 @syuilo
## 12.117.0 (2022/07/18)
### Improvements
- Client: ウィンドウを最大化できるように @syuilo
- Client: Shiftキーを押した状態でリンクをクリックするとアプリ内ウィンドウで開くように @syuilo
- Client: デッキを使用している際、Ctrlキーを押した状態でリンクをクリックするとページ遷移を強制できるように @syuilo
- Client: UIのブラッシュアップ @syuilo
## 12.116.1 (2022/07/17)
### Bugfixes
- Client: デッキUI時に ページで表示 ボタンが機能しない問題を修正 @syuilo
- Error During Migration Run to 12.111.x
## 12.116.0 (2022/07/16)
### Improvements
- Client: registry editor @syuilo
- Client: UIのブラッシュアップ @syuilo
### Bugfixes
- Error During Migration Run to 12.111.x
- Server: TypeError: Cannot convert undefined or null to object @syuilo
## 12.115.0 (2022/07/16)
### Improvements
- Client: Deckのプロファイル切り替えを簡単に @syuilo
- Client: UIのブラッシュアップ @syuilo
## 12.114.0 (2022/07/15)
### Improvements
- RSSティッカーで表示順序をシャッフルできるように @syuilo
### Bugfixes
- クライアントが起動しなくなることがある問題を修正 @syuilo
## 12.113.0 (2022/07/13)
### Improvements
- Support <plain> syntax for MFM
### Bugfixes
- Server: Fix crash at startup if TensorFlow is not supported @mei23
- Client: URLエンコードされたルーティングを修正
## 12.112.3 (2022/07/09)
### Improvements
- Make active email validation configurable
### Bugfixes
- Server: Fix Attempts to update all notifications @mei23
## 12.112.2 (2022/07/08)
### Bugfixes
- Fix Docker doesn't work @mei23
Still not working on arm64 environment. (See 12.112.0)
## 12.112.1 (2022/07/07)
same as 12.112.0
## 12.112.0 (2022/07/07)
### Known issues
- 現在arm64環境ではインストールに失敗します。これは次のバージョンで修正される予定です。
### Changes
- ハイライトがみつけるに統合されました
- カスタム絵文字ページはインスタンス情報ページに統合されました
- 連合ページはインスタンス情報ページに統合されました
- メンション一覧ページは通知一覧ページに統合されました
- ダイレクト投稿一覧ページは通知一覧ページに統合されました
- メニューからアンテナタイムラインを表示する方法は廃止され、タイムライン上部のアイコンからアクセスするようになりました
- メニューからリストタイムラインを表示する方法は廃止され、タイムライン上部のアイコンからアクセスするようになりました
### Improvements
- Server: Allow GET method for some endpoints @syuilo
- Server: Auto NSFW detection @syuilo
- Server: Add rate limit to i/notifications @tamaina
- Client: Improve control panel @syuilo
- Client: Show warning in control panel when there is an unresolved abuse report @syuilo
- Client: Statusbars @syuilo
- Client: Add instance-cloud widget @syuilo
- Client: Add rss-ticker widget @syuilo
- Client: Removing entries from a clip @futchitwo
- Client: Poll highlights in explore page @syuilo
- Client: Improve deck UI @syuilo
- Client: Word mute also checks content warnings @Johann150
- Client: メニューからページをリロードできるように @syuilo
- Client: Improve emoji picker performance @syuilo
- Client: For notes with specified visibility, show recipients when hovering over visibility symbol. @Johann150
- Client: Make widgets available again on a tablet @syuilo
- ユーザーにモデレーションメモを残せる機能 @syuilo
- Make possible to delete an account by admin @syuilo
- Improve player detection in URL preview @mei23
- Add Badge Image to Push Notification #8012 @tamaina
- Server: Improve performance
- Server: Supports IPv6 on Redis transport. @mei23
IPv4/IPv6 is used by default. You can tune this behavior via `redis.family`.
- Server: Add possibility to log IP addresses of users @syuilo
- Add additional drive capacity change support @CyberRex0
### Bugfixes
- Server: Fix GenerateVideoThumbnail failed @mei23
- Server: Ensure temp directory cleanup @Johann150
- favicons of federated instances not showing @syuilo
- Admin: The checkbox for blocking an instance works again @Johann150
- Client: Prevent access to user pages when not logged in @pixeldesu @Johann150
- Client: Disable some hotkeys (e.g. for creating a post) for not logged in users @pixeldesu
- Client: Ask users that are not logged in to log in when trying to vote in a poll @Johann150
- Instance mutes also apply in antennas etc. @Johann150
## 12.111.1 (2022/06/13)
### Bugfixes

View File

@@ -74,8 +74,6 @@ The `/deploy` command by issue comment can be used to deploy the contents of a P
An actual domain will be assigned so you can test the federation.
## Merge
For now, basically only @syuilo has the authority to merge PRs into develop because he is most familiar with the codebase.
However, minor fixes, refactoring, and urgent changes may be merged at the discretion of a contributor.
## Release
### Release Instructions
@@ -142,6 +140,34 @@ Misskey uses Vue(v3) as its front-end framework.
- **When creating a new component, please use the Composition API (with [setup sugar](https://v3.vuejs.org/api/sfc-script-setup.html) and [ref sugar](https://github.com/vuejs/rfcs/discussions/369)) instead of the Options API.**
- Some of the existing components are implemented in the Options API, but it is an old implementation. Refactors that migrate those components to the Composition API are also welcome.
## nirax
niraxは、Misskeyで使用しているオリジナルのフロントエンドルーティングシステムです。
**vue-routerから影響を多大に受けているので、まずはvue-routerについて学ぶことをお勧めします。**
### ルート定義
ルート定義は、以下の形式のオブジェクトの配列です。
``` ts
{
name?: string;
path: string;
component: Component;
query?: Record<string, string>;
loginRequired?: boolean;
hash?: string;
globalCacheKey?: string;
children?: RouteDef[];
}
```
> **Warning**
> 現状、ルートは定義された順に評価されます。
> たとえば、`/foo/:id`ルート定義の次に`/foo/bar`ルート定義がされていた場合、後者がマッチすることはありません。
### 複数のルーター
vue-routerとの最大の違いは、niraxは複数のルーターが存在することを許可している点です。
これにより、アプリ内ウィンドウでブラウザとは個別にルーティングすることなどが可能になります。
## Notes
### How to resolve conflictions occurred at yarn.lock?

View File

@@ -1,5 +1,5 @@
Unless otherwise stated this repository is
Copyright © 2014-2020 syuilo and contributers
Copyright © 2014-2022 syuilo and contributers
And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE.
@@ -13,3 +13,7 @@ https://github.com/muan/emojilib/blob/master/LICENSE
RsaSignature2017 implementation by Transmute Industries Inc
License: MIT
https://github.com/transmute-industries/RsaSignature2017/blob/master/LICENSE
Machine learning model for sensitive images by Infinite Red, Inc.
License: MIT
https://github.com/infinitered/nsfwjs/blob/master/LICENSE

View File

@@ -1,28 +1,24 @@
FROM node:18.0.0-alpine3.15 AS base
FROM node:16.15.1-bullseye AS builder
ARG NODE_ENV=production
WORKDIR /misskey
ENV BUILD_DEPS autoconf automake file g++ gcc libc-dev libtool make nasm pkgconfig python3 zlib-dev git
FROM base AS builder
COPY . ./
RUN apk add --no-cache $BUILD_DEPS && \
git submodule update --init && \
yarn install && \
yarn build && \
rm -rf .git
RUN apt-get update
RUN apt-get install -y build-essential
RUN git submodule update --init
RUN yarn install
RUN yarn build
RUN rm -rf .git
FROM base AS runner
FROM node:16.15.1-bullseye-slim AS runner
RUN apk add --no-cache \
ffmpeg \
tini
WORKDIR /misskey
ENTRYPOINT ["/sbin/tini", "--"]
RUN apt-get update
RUN apt-get install -y ffmpeg tini
COPY --from=builder /misskey/node_modules ./node_modules
COPY --from=builder /misskey/built ./built
@@ -32,5 +28,5 @@ COPY --from=builder /misskey/packages/client/node_modules ./packages/client/node
COPY . ./
ENV NODE_ENV=production
ENTRYPOINT ["/usr/bin/tini", "--"]
CMD ["npm", "run", "migrateandstart"]

View File

@@ -19,6 +19,7 @@ This is the phase we are at now. We need to make a high-maintenance environment
## (2) Improve functionality
Once Phase 1 is complete and an environment conducive to the development of a stable system is in place, the implementation of new functions can begin gradually.
- Improve features for moderation
- OAuth2 support https://github.com/misskey-dev/misskey/issues/8262
- GraphQL support?

View File

@@ -52,6 +52,7 @@ searchUser: "ابحث عن مستخدمين"
reply: "رد"
loadMore: "عرض المزيد"
showMore: "عرض المزيد"
showLess: "اغلق"
youGotNewFollower: "يتابعك"
receiveFollowRequest: "تلقيت طلب متابعة"
followRequestAccepted: "قُبل طلب المتابعة"
@@ -803,6 +804,12 @@ oneHour: "ساعة"
oneDay: "يوم"
oneWeek: "أسبوع"
failedToFetchAccountInformation: "تعذر جلب معلومات الحساب"
file: "الملفات"
reverse: "اقلب"
colored: "ملوّن"
label: "التسمية"
localOnly: "المحلي فقط"
account: "الحسابات"
_emailUnavailable:
used: "هذا البريد الإلكتروني مستخدم"
format: "صيغة البريد الإلكتروني غير صالحة"

View File

@@ -52,6 +52,7 @@ searchUser: "ব্যবহারকারী খুঁজুন..."
reply: "জবাব"
loadMore: "আরও দেখুন"
showMore: "আরও দেখুন"
showLess: "বন্ধ"
youGotNewFollower: "আপনাকে অনুসরণ করছে"
receiveFollowRequest: "অনুসরণ করার জন্য অনুরোধ পাওয়া গেছে"
followRequestAccepted: "অনুসরণ করার অনুরোধ গৃহীত হয়েছে"
@@ -843,6 +844,12 @@ oneWeek: "এক সপ্তাহ"
reflectMayTakeTime: "এটির কাজ দেখা যেতে কিছুটা সময় লাগতে পারে।"
failedToFetchAccountInformation: "অ্যাকাউন্টের তথ্য উদ্ধার করা যায়নি"
rateLimitExceeded: "রেট লিমিট ছাড়িয়ে গেছে "
file: "ফাইলগুলি"
reverse: "উল্টান"
colored: "রঙ্গিন"
label: "লেবেল"
localOnly: "শুধুমাত্র লোকাল"
account: "অ্যাকাউন্টগুলি"
_emailUnavailable:
used: "এই ইমেইল ঠিকানাটি ইতোমধ্যে ব্যবহৃত হয়েছে"
format: "এই ইমেল ঠিকানাটি সঠিকভাবে লিখা হয়নি"
@@ -1638,9 +1645,8 @@ _notification:
_deck:
alwaysShowMainColumn: "সর্বদা মেইন কলাম দেখান"
columnAlign: "কলাম সাজান"
columnMargin: "কলামের মধ্যবর্তী মার্জিন"
columnHeaderHeight: "কলামের হেডারের উচ্চতা"
addColumn: "কলাম যুক্ত করুন"
configureColumn: "কলাম সেটিংস"
swapLeft: "বামে সরান"
swapRight: "ডানে সরান"
swapUp: "উপরে উঠান"

View File

@@ -111,6 +111,14 @@ reactionSettingDescription2: "Arrossega per reordenar, fes clic per suprimir, pr
rememberNoteVisibility: "Recorda la configuració de visibilitat de les notes"
attachCancel: "Eliminar el fitxer adjunt"
markAsSensitive: "Marcar com a NSFW"
unmarkAsSensitive: "Deixar de marcar com a sensible"
enterFileName: "Defineix nom del fitxer"
mute: "Silencia"
unmute: "Deixa de silenciar"
block: "Bloqueja"
unblock: "Desbloqueja"
suspend: "Suspèn"
unsuspend: "Deixa de suspendre"
instances: "Instàncies"
remove: "Eliminar"
nsfw: "NSFW"
@@ -120,6 +128,7 @@ smtpUser: "Nom d'usuari"
smtpPass: "Contrasenya"
user: "Usuaris"
searchByGoogle: "Cercar"
file: "Fitxers"
_email:
_follow:
title: "t'ha seguit"
@@ -147,6 +156,8 @@ _profile:
username: "Nom d'usuari"
_exportOrImport:
followingList: "Seguint"
muteList: "Silencia"
blockingList: "Bloqueja"
userLists: "Llistes"
_pages:
script:

View File

@@ -52,6 +52,7 @@ searchUser: "Vyhledat uživatele"
reply: "Odpovědět"
loadMore: "Zobrazit více"
showMore: "Zobrazit více"
showLess: "Zavřít"
youGotNewFollower: "Máte nového následovníka"
receiveFollowRequest: "Žádost o sledování přijata"
followRequestAccepted: "Žádost o sledování přijata"
@@ -474,6 +475,7 @@ info: "Informace"
user: "Uživatelé"
administration: "Administrace"
searchByGoogle: "Vyhledávání"
file: "Soubor(ů)"
_email:
_follow:
title: "Máte nového následovníka"

View File

@@ -52,6 +52,7 @@ searchUser: "Nach einem Benutzer suchen"
reply: "Antworten"
loadMore: "Mehr laden"
showMore: "Mehr anzeigen"
showLess: "Schließen"
youGotNewFollower: "ist dir gefolgt"
receiveFollowRequest: "Follow-Anfrage erhalten"
followRequestAccepted: "Follow-Anfrage akzeptiert"
@@ -203,6 +204,7 @@ done: "Fertig"
processing: "In Bearbeitung …"
preview: "Vorschau"
default: "Standard"
defaultValueIs: "Standardwert: {value}"
noCustomEmojis: "Keine benutzerdefinierten Emojis gefunden"
noJobs: "Keine Jobs vorhanden"
federating: "Wird föderiert"
@@ -356,7 +358,7 @@ antennaExcludeKeywords: "Zu ignorierende Schlüsselwörter"
antennaKeywordsDescription: "Zum Nutzen einer \"UND\"-Verknüpfung Einträge mit Leerzeichen trennen, zum Nutzen einer \"ODER\"-Verknüpfung Einträge mit einem Zeilenumbruch trennen"
notifyAntenna: "Über neue Notizen benachrichtigen"
withFileAntenna: "Nur Notizen mit Dateien"
enableServiceworker: "ServiceWorker aktivieren"
enableServiceworker: "Push-Benachrichtigungen im Browser aktivieren"
antennaUsersDescription: "Benutzernamen getrennt durch Zeilenumbrüche angeben"
caseSensitive: "Groß-/Kleinschreibung unterscheiden"
withReplies: "Antworten beinhalten"
@@ -381,6 +383,7 @@ administrator: "Administrator"
token: "Token"
twoStepAuthentication: "Zwei-Faktor-Authentifizierung"
moderator: "Moderator"
moderation: "Moderation"
nUsersMentioned: "Von {n} Benutzern erwähnt"
securityKey: "Sicherheitsschlüssel"
securityKeyName: "Schlüsselname"
@@ -425,7 +428,7 @@ quoteQuestion: "Als Zitat anhängen?"
noMessagesYet: "Noch keine Nachrichten vorhanden"
newMessageExists: "Du hast eine neue Nachricht"
onlyOneFileCanBeAttached: "Es kann pro Nachricht nur eine Datei angehängt werden"
signinRequired: "Bitte melde dich an"
signinRequired: "Bitte registriere oder melde dich an, um fortzufahren"
invitations: "Einladungen"
invitationCode: "Einladungscode"
checking: "Wird überprüft …"
@@ -559,6 +562,7 @@ author: "Autor"
leaveConfirm: "Es gibt unspeicherte Änderungen. Möchtest du diese verwerfen?"
manage: "Verwaltung"
plugins: "Plugins"
preferencesBackups: "Einstellungsbackups"
deck: "Deck"
undeck: "Deck verlassen"
useBlurEffectForModal: "Weichzeichnungseffekt für Modals verwenden"
@@ -643,6 +647,8 @@ clip: "Clip erstellen"
createNew: "Neu erstellen"
optional: "Optional"
createNewClip: "Neuen Clip erstellen"
unclip: "Aus Clip entfernen"
confirmToUnclipAlreadyClippedNote: "Diese Notiz ist bereits im \"{name}\" Clip enthalten. Möchtest du sie aus diesem Clip entfernen?"
public: "Öffentlich"
i18nInfo: "Misskey wird durch freiwillige Helfer in viele verschiedene Sprachen übersetzt. Auf {link} kannst du mithelfen."
manageAccessTokens: "Zugriffstokens verwalten"
@@ -830,7 +836,7 @@ auto: "Automatisch"
themeColor: "Farbe der Instanz-Information"
size: "Größe"
numberOfColumn: "Spaltenanzahl"
searchByGoogle: "Googlen"
searchByGoogle: "Suchen"
instanceDefaultLightTheme: "Instanzweites Standardfarbschema (Hell)"
instanceDefaultDarkTheme: "Instanzweites Standardfarbschema (Dunkel)"
instanceDefaultThemeDescription: "Gib den Farbschemencode im Objektformat ein."
@@ -845,6 +851,56 @@ failedToFetchAccountInformation: "Benutzerkontoinformationen konnten nicht abgef
rateLimitExceeded: "Versuchsanzahl überschritten"
cropImage: "Bild zuschneiden"
cropImageAsk: "Möchtest du das Bild zuschneiden?"
file: "Datei"
recentNHours: "Letzten {n} Stunden"
recentNDays: "Letzten {n} Tage"
noEmailServerWarning: "Es ist kein Email-Server konfiguriert."
thereIsUnresolvedAbuseReportWarning: "Es liegen ungelöste Meldungen vor."
recommended: "Empfehlung"
check: "Check"
driveCapOverrideLabel: "Die Drive-Kapazität dieses Nutzers verändern"
driveCapOverrideCaption: "Gib einen Wert von 0 oder weniger ein, um die Kapazität auf den Standard zurückzusetzen."
requireAdminForView: "Melde dich mit einem Administratorkonto an, um dies einzusehen."
isSystemAccount: "Ein Benutzerkonto, dass durch das System erstellt und automatisch kontrolliert wird."
typeToConfirm: "Bitte gib zur Bestätigung {x} ein"
deleteAccount: "Benutzerkonto löschen"
document: "Dokumentation"
numberOfPageCache: "Seitencachegröße"
numberOfPageCacheDescription: "Das Erhöhen dieses Caches führt zu einer angenehmerern Benutzererfahrung, erhöht aber Serverlast und Arbeitsspeicherauslastung."
logoutConfirm: "Wirklich abmelden?"
lastActiveDate: "Zuletzt verwendet am"
statusbar: "Statusleiste"
pleaseSelect: "Wähle eine Option"
reverse: "Umkehren"
colored: "Farbig"
refreshInterval: "Aktualisierungsrate"
label: "Beschriftung"
type: "Art"
speed: "Geschwindigkeit"
slow: "Langsam"
fast: "Schnell"
sensitiveMediaDetection: "Erkennung von NSFW-Medien"
localOnly: "Nur Lokal"
remoteOnly: "Nur für fremde Instanzen"
failedToUpload: "Hochladen fehlgeschlagen"
cannotUploadBecauseInappropriate: "Diese Datei kann nicht hochgeladen werden, da Anteile der Datei als möglicherweise NSFW festgestellt wurden."
cannotUploadBecauseNoFreeSpace: "Die Datei konnte nicht hochgeladen werden, da dein Drive-Speicherplatz aufgebraucht ist."
beta: "Beta"
enableAutoSensitive: "NSFW-Automarkierung"
enableAutoSensitiveDescription: "Setzt soweit möglich durch Verwendung von Machine Learning automatisch NSFW-Markierungen für Medien, die NSFW-Anteile beinhalten. Auch wenn du diese Option deaktiviert hast, ist sie möglicherweise auf Instanzebene aktiviert."
activeEmailValidationDescription: "Aktivert strengere Überprüfung von E-Mail-Adressen, d.h. Testen auf Wegwerfadressen und darauf, ob mit der Adresse tatsächlich kommuniziert werden kann. Ist dies deaktiviert, so wird nur das Format der E-Mail überprüft."
navbar: "Navigationsleiste"
shuffle: "Mischen"
account: "Benutzerkonto"
move: "Verschieben"
_sensitiveMediaDetection:
description: "Ermöglicht eine Erleichterung der Servermoderation durch die automatische Erkennungen von NSFW-Medien unter Verwendung von Machine Learning. Hierdurch wird die Serverlast etwas erhöht."
sensitivity: "Erkennungssensitivität"
sensitivityDescription: "Durch das Senken der Sensitivität kann die Anzahl an Fehlerkennungen (sog. false positives) reduziert werden. Durch ein Erhöhen dieser kann die Anzahl an verpassten Erkennungen (sog. false negatives) reduziert werden."
setSensitiveFlagAutomatically: "Als NSFW markieren"
setSensitiveFlagAutomaticallyDescription: "Die Resultate der internen Erkennung werden beibehalten, auch wenn diese Option deaktiviert ist."
analyzeVideos: "Videoanalyse aktivieren"
analyzeVideosDescription: "Analysiert zusätzlich zu Bildern auch Videos. Die Last des Servers wird hierdurch etwas erhöht."
_emailUnavailable:
used: "Diese Email-Adresse wird bereits verwendet"
format: "Das Format dieser Email-Adresse ist ungültig"
@@ -887,6 +943,24 @@ _plugin:
install: "Plugins installieren"
installWarn: "Installiere bitte nur vertrauenswürdige Plugins."
manage: "Plugins verwalten"
_preferencesBackups:
list: "Erstellte Backups"
saveNew: "Neu erstellen"
loadFile: "Von Datei laden"
apply: "Auf dieses Gerät anwenden"
save: "Speichern"
inputName: "Gib einen Namen für dieses Backup ein"
cannotSave: "Speichern fehlgeschlagen"
nameAlreadyExists: "Es existiert bereits ein Backup unter dem Namen \"{name}\". Bitte gib einen anderen Namen ein."
applyConfirm: "Wirklich das Backup \"{name}\" auf dieses Gerät anwenden? Bestehende Einstellungen darauf werden überschrieben."
saveConfirm: "Als {name} speichern?"
deleteConfirm: "Das Backup {name} löschen?"
renameConfirm: "Soll dieses Backup von \"{old}\" zu \"{new}\" umbenannt werden?"
noBackups: "Keine Backups existieren. Backups können über \"Neu erstellen\" erstelllt werden."
createdAt: "Erstellt am: {date} {time}"
updatedAt: "Aktualisiert am: {date} {time}"
cannotLoad: "Laden fehlgeschlagen"
invalidFile: "Ungültiges Dateiformat."
_registry:
scope: "Scope"
key: "Schlüssel"
@@ -970,6 +1044,8 @@ _mfm:
sparkleDescription: "Verleiht Inhalt einen glitzernden Partikeleffekt."
rotate: "Drehen"
rotateDescription: "Dreht den Inhalt um einen angegebenen Winkel."
plain: "Schlicht"
plainDescription: "Deaktiviert jegliche MFM-Syntax, die sich innerhalb dieses MFM-Effekts befindet."
_instanceTicker:
none: "Nie anzeigen"
remote: "Für Benutzer fremder Instanzen anzeigen"
@@ -1199,10 +1275,13 @@ _widgets:
trends: "Trends"
clock: "Uhr"
rss: "RSS-Reader"
rssTicker: "RSS-Ticker"
activity: "Aktivität"
photos: "Fotos"
digitalClock: "Digitaluhr"
unixClock: "UNIX-Uhr"
federation: "Föderation"
instanceCloud: "Instanzwolke"
postForm: "Notizfenster"
slideshow: "Diashow"
button: "Knopf"
@@ -1640,9 +1719,8 @@ _notification:
_deck:
alwaysShowMainColumn: "Hauptspalte immer zeigen"
columnAlign: "Spaltenausrichtung"
columnMargin: "Spaltenabstand"
columnHeaderHeight: "Spaltenkopfhöhe"
addColumn: "Spalte hinzufügen"
configureColumn: "Spalteneinstellungen"
swapLeft: "Mit linker Spalte tauschen"
swapRight: "Mit rechter Spalte tauschen"
swapUp: "Mit oberer Spalte tauschen"
@@ -1650,6 +1728,11 @@ _deck:
stackLeft: "Auf linke Spalte stapeln"
popRight: "Nach rechts vom Stapel nehmen"
profile: "Profil"
newProfile: "Neues Profil"
deleteProfile: "Profil löschen"
introduction: "Erstelle eine auf dich zugeschneiderte Benutzeroberfläche durch das Aneinanderreihen von Spalten!"
introduction2: "Klicke auf das + rechts um wann immer du möchtest neue Spalten hinzuzufügen."
widgetsIntroduction: "Drücke bitte \"Widgets bearbeiten\" im Spaltenmenü und füge ein Widget hinzu."
_columns:
main: "Hauptspalte"
widgets: "Widgets"

View File

@@ -52,6 +52,7 @@ searchUser: "Search for a user"
reply: "Reply"
loadMore: "Load more"
showMore: "Show more"
showLess: "Close"
youGotNewFollower: "followed you"
receiveFollowRequest: "Follow request received"
followRequestAccepted: "Follow request accepted"
@@ -203,6 +204,7 @@ done: "Done"
processing: "Processing..."
preview: "Preview"
default: "Default"
defaultValueIs: "Default: {value}"
noCustomEmojis: "There are no emoji"
noJobs: "There are no jobs"
federating: "Federating"
@@ -356,7 +358,7 @@ antennaExcludeKeywords: "Keywords to exclude"
antennaKeywordsDescription: "Separate with spaces for an AND condition or with line breaks for an OR condition."
notifyAntenna: "Notify about new notes"
withFileAntenna: "Only notes with files"
enableServiceworker: "Enable ServiceWorker"
enableServiceworker: "Enable Push-Notifications for your Browser"
antennaUsersDescription: "List one username per line"
caseSensitive: "Case sensitive"
withReplies: "Include replies"
@@ -381,6 +383,7 @@ administrator: "Administrator"
token: "Token"
twoStepAuthentication: "Two-factor authentication"
moderator: "Moderator"
moderation: "Moderation"
nUsersMentioned: "Mentioned by {n} users"
securityKey: "Security key"
securityKeyName: "Key name"
@@ -425,7 +428,7 @@ quoteQuestion: "Append as quote?"
noMessagesYet: "No messages yet"
newMessageExists: "There are new messages"
onlyOneFileCanBeAttached: "You can only attach one file to a message"
signinRequired: "Please sign in"
signinRequired: "Please register or sign in before continuing"
invitations: "Invites"
invitationCode: "Invitation code"
checking: "Checking..."
@@ -559,6 +562,7 @@ author: "Author"
leaveConfirm: "There are unsaved changes. Do you want to discard them?"
manage: "Management"
plugins: "Plugins"
preferencesBackups: "Preference backups"
deck: "Deck"
undeck: "Leave Deck"
useBlurEffectForModal: "Use blur effect for modals"
@@ -643,6 +647,8 @@ clip: "Clip"
createNew: "Create new"
optional: "Optional"
createNewClip: "Create new clip"
unclip: "Unclip"
confirmToUnclipAlreadyClippedNote: "This note is already part of the \"{name}\" clip. Do you want to remove it from this clip instead?"
public: "Public"
i18nInfo: "Misskey is being translated into various languages by volunteers. You can help at {link}."
manageAccessTokens: "Manage access tokens"
@@ -830,7 +836,7 @@ auto: "Auto"
themeColor: "Instance Ticker Color"
size: "Size"
numberOfColumn: "Number of columns"
searchByGoogle: "Google"
searchByGoogle: "Search"
instanceDefaultLightTheme: "Instance-wide default light theme"
instanceDefaultDarkTheme: "Instance-wide default dark theme"
instanceDefaultThemeDescription: "Enter the theme code in object format."
@@ -845,6 +851,56 @@ failedToFetchAccountInformation: "Could not fetch account information"
rateLimitExceeded: "Rate limit exceeded"
cropImage: "Crop image"
cropImageAsk: "Do you want to crop this image?"
file: "File"
recentNHours: "Last {n} hours"
recentNDays: "Last {n} days"
noEmailServerWarning: "Email server not configured."
thereIsUnresolvedAbuseReportWarning: "There are unsolved reports."
recommended: "Recommended"
check: "Check"
driveCapOverrideLabel: "Change the drive capacity for this user"
driveCapOverrideCaption: "Reset the capacity to default by inputting a value of 0 or lower."
requireAdminForView: "You must log in with an administrator account to view this."
isSystemAccount: "An account created and automatically operated by the system."
typeToConfirm: "Please enter {x} to confirm"
deleteAccount: "Delete account"
document: "Documentation"
numberOfPageCache: "Number of cached pages"
numberOfPageCacheDescription: "Increasing this number will improve convenience for users but cause more server load as well as more memory to be used."
logoutConfirm: "Really log out?"
lastActiveDate: "Last used at"
statusbar: "Status bar"
pleaseSelect: "Select an option"
reverse: "Reverse"
colored: "Colored"
refreshInterval: "Update interval "
label: "Label"
type: "Type"
speed: "Speed"
slow: "Slow"
fast: "Fast"
sensitiveMediaDetection: "Detection of NSFW media"
localOnly: "Local only"
remoteOnly: "Remote only"
failedToUpload: "Upload failed"
cannotUploadBecauseInappropriate: "This file could not be uploaded because parts of it have been detected as potentially NSFW."
cannotUploadBecauseNoFreeSpace: "Upload failed due to lack of Drive capacity."
beta: "Beta"
enableAutoSensitive: "Automatic NSFW-Marking"
enableAutoSensitiveDescription: "Allows automatic detection and marking of NSFW media through Machine Learning where possible. Even if this option is disabled, it may be enabled instance-wide."
activeEmailValidationDescription: "Enables stricter validation of email addresses, which includes checking for disposable addresses and by whether it can actually be communicated with. When unchecked, only the format of the email is validated."
navbar: "Navigation bar"
shuffle: "Shuffle"
account: "Account"
move: "Move"
_sensitiveMediaDetection:
description: "Reduces the effort of server moderation through automatically recognizing NSFW media via Machine Learning. This will slightly increase the load on the server."
sensitivity: "Detection sensitivity"
sensitivityDescription: "Reducing the sensitivity will lead to fewer misdetections (false positives) whereas increasing it will lead to fewer missed detections (false negatives)."
setSensitiveFlagAutomatically: "Mark as NSFW"
setSensitiveFlagAutomaticallyDescription: "The results of the internal detection will be retained even if this option is turned off."
analyzeVideos: "Enable analysis of videos"
analyzeVideosDescription: "Analyzes videos in addition to images. This will slightly increase the load on the server."
_emailUnavailable:
used: "This email address is already being used"
format: "The format of this email address is invalid"
@@ -887,6 +943,24 @@ _plugin:
install: "Install plugins"
installWarn: "Please do not install untrustworthy plugins."
manage: "Manage plugins"
_preferencesBackups:
list: "Created backups"
saveNew: "Save new backup"
loadFile: "Load from file"
apply: "Apply to this device"
save: "Save changes"
inputName: "Please enter a name for this backup"
cannotSave: "Saving failed"
nameAlreadyExists: "A backup called \"{name}\" already exists. Please enter a different name."
applyConfirm: "Do you really want to apply the \"{name}\" backup to this device? Existing settings of this device will be overwritten."
saveConfirm: "Save backup as {name}?"
deleteConfirm: "Delete the {name} backup?"
renameConfirm: "Rename this backup from \"{old}\" to \"{new}\"?"
noBackups: "No backups exist. You may backup your client settings on this server by using \"Create new backup\"."
createdAt: "Created at: {date} {time}"
updatedAt: "Updated at: {date} {time}"
cannotLoad: "Loading failed"
invalidFile: "Invalid file format"
_registry:
scope: "Scope"
key: "Key"
@@ -970,6 +1044,8 @@ _mfm:
sparkleDescription: "Gives content a sparkling particle effect."
rotate: "Rotate"
rotateDescription: "Turns content by a specified angle."
plain: "Plain"
plainDescription: "Deactivates the effects of all MFM contained within this MFM effect."
_instanceTicker:
none: "Never show"
remote: "Show for remote users"
@@ -1199,10 +1275,13 @@ _widgets:
trends: "Trending"
clock: "Clock"
rss: "RSS reader"
rssTicker: "RSS-Ticker"
activity: "Activity"
photos: "Photos"
digitalClock: "Digital clock"
unixClock: "UNIX clock"
federation: "Federation"
instanceCloud: "Instance cloud"
postForm: "Posting form"
slideshow: "Slideshow"
button: "Button"
@@ -1640,9 +1719,8 @@ _notification:
_deck:
alwaysShowMainColumn: "Always show main column"
columnAlign: "Align columns"
columnMargin: "Margin between columns"
columnHeaderHeight: "Column header height"
addColumn: "Add column"
configureColumn: "Column settings"
swapLeft: "Swap with the left column"
swapRight: "Swap with the right column"
swapUp: "Swap with the above column"
@@ -1650,6 +1728,11 @@ _deck:
stackLeft: "Stack with the left column"
popRight: "Pop column to the right"
profile: "Profile"
newProfile: "New profile"
deleteProfile: "Delete profile"
introduction: "Create the perfect interface for you by arranging columns freely!"
introduction2: "Click on the + on the right of the screen to add new colums whenever you want."
widgetsIntroduction: "Please select \"Edit widgets\" in the column menu and add a widget."
_columns:
main: "Main"
widgets: "Widgets"

View File

@@ -1,16 +1,16 @@
---
_lang_: "Español"
headlineMisskey: "Red conectada por notas"
introMisskey: "¡Bienvenido/a! Misskey es un servicio de microblogging descentralizado de código abierto.\nEscribe \"notas\" para compartir lo que te ocurre ahora o para contar sobre ti a todos 📡\nCon la función de \"reacciones\", puedes también añadir una reacción rápida a las notas de todos 👍\nExplora un nuevo mundo 🚀"
introMisskey: "¡Bienvenido/a! Misskey es un servicio de microblogging descentralizado de código abierto.\nEscribe \"notas\" para compartir lo que te ocurre ahora o para contar sobre ti a todos 📡\nCon la función de \"reacciones\", puedes también añadir una reacción rápida a las notas de todos 👍\n¡Exploremos juntos un nuevo mundo! 🚀"
monthAndDay: "{day}/{month}"
search: "Buscar"
notifications: "Notificaciones"
username: "Nombre de usuario"
password: "Contraseña"
forgotPassword: "Olvidé mi Contraseña"
fetchingAsApObject: "Buscando en el fediverso"
fetchingAsApObject: "Recuperando desde el Fediverso..."
ok: "OK"
gotIt: "Entendido"
gotIt: "¡Lo tengo!"
cancel: "Cancelar"
enterUsername: "Introduce el nombre de usuario"
renotedBy: "Renotado por {user}"
@@ -22,36 +22,37 @@ basicSettings: "Configuración Básica"
otherSettings: "Configuración avanzada"
openInWindow: "Abrir en una ventana"
profile: "Perfil"
timeline: "Linea de tiempo"
noAccountDescription: "Este usuario no tiene una descripción"
timeline: "Línea de tiempo"
noAccountDescription: "Este usuario no ha escrito su biografía aún"
login: "Iniciar sesión"
loggingIn: "Iniciando sesión"
logout: "Cerrar sesión"
signup: "Registrarse"
uploading: "Cargando"
uploading: "Cargando..."
save: "Guardar"
users: "Usuarios"
addUser: "Agregar usuario"
favorite: "Favorito"
favorite: "Añadir a favoritos"
favorites: "Favoritos"
unfavorite: "Quitar de favoritos"
favorited: "Añadido a favoritos"
favorited: "Añadido a favoritos."
alreadyFavorited: "Ya había sido añadido a favoritos"
cantFavorite: "No fue añadido a favoritos"
pin: "Fijar"
cantFavorite: "No se puede añadir a favoritos."
pin: "Fijar al perfil"
unpin: "Desfijar"
copyContent: "Copiar contenido"
copyLink: "Copiar enlace"
delete: "Borrar"
deleteAndEdit: "Borrar y editar"
deleteAndEditConfirm: "¿Quieres borrar y editar este nota? Las reacciones, renotes, respuestas y todo desaparecerán."
deleteAndEditConfirm: "¿Estás seguro de que quieres borrar esta nota y editarla? Perderás todas las reacciones, renotas y respuestas."
addToList: "Agregar a lista"
sendMessage: "Énviar mensaje"
sendMessage: "Enviar un mensaje"
copyUsername: "Copiar nombre de usuario"
searchUser: "Búsqueda de usuarios"
searchUser: "Buscar un usuario"
reply: "Responder"
loadMore: "Ver más"
showMore: "Ver más"
showLess: "Cerrar"
youGotNewFollower: "te ha seguido"
receiveFollowRequest: "Recibiste una solicitud de seguimiento"
followRequestAccepted: "La solicitud de seguimiento fue aceptada"
@@ -87,11 +88,11 @@ enterListName: "Ingrese nombre de lista"
privacy: "Privacidad"
makeFollowManuallyApprove: "Aprobar manualmente las solicitudes de seguimiento"
defaultNoteVisibility: "Visibilidad por defecto"
follow: "Sigue"
followRequest: "Solicitud de seguimiento"
follow: "Seguir"
followRequest: "Enviar solicitud de seguimiento"
followRequests: "Solicitudes de seguimiento"
unfollow: "Dejar de seguir"
followRequestPending: "Solicitudes de seguimiento pendientes"
followRequestPending: "Solicitudes de seguimiento pendiente"
enterEmoji: "Ingresar emojis"
renote: "Renotar"
unrenote: "Quitar renota"
@@ -100,7 +101,7 @@ cantRenote: "No se puede renotar este post"
cantReRenote: "No se puede renotar una renota"
quote: "Citar"
pinnedNote: "Nota fijada"
pinned: "Fijar"
pinned: "Fijar al perfil"
you: "Tú"
clickToShow: "Click para ver"
sensitive: "Marcado como sensible"
@@ -203,6 +204,7 @@ done: "Terminado"
processing: "Procesando"
preview: "Vista previa"
default: "Predeterminado"
defaultValueIs: "Predeterminado"
noCustomEmojis: "No hay emojis personalizados"
noJobs: "No hay trabajos"
federating: "Federando"
@@ -381,6 +383,7 @@ administrator: "Administrador"
token: "Token"
twoStepAuthentication: "Autenticación de dos factores"
moderator: "Moderador"
moderation: "Moderación"
nUsersMentioned: "{n} usuarios mencionados"
securityKey: "Clave de seguridad"
securityKeyName: "Nombre de la Clave"
@@ -559,6 +562,7 @@ author: "Autor"
leaveConfirm: "Hay modificaciones sin guardar. ¿Desea descartarlas?"
manage: "Administrar"
plugins: "Plugins"
preferencesBackups: "Respaldo de preferencias"
deck: "Deck"
undeck: "Quitar deck"
useBlurEffectForModal: "Usar efecto borroso en modales"
@@ -592,6 +596,8 @@ smtpSecure: "Usar SSL/TLS implícito en la conexión SMTP"
smtpSecureInfo: "Apagar cuando se use STARTTLS"
testEmail: "Prueba de envío"
wordMute: "Silenciar palabras"
regexpError: "Error de la expresión regular"
regexpErrorDescription: "Ocurrió un error en la expresión regular en la linea {line} de las palabras muteadas {tab}"
instanceMute: "Instancias silenciadas"
userSaysSomething: "{name} dijo algo"
makeActive: "Activar"
@@ -620,8 +626,9 @@ reportAbuse: "Reportar"
reportAbuseOf: "Reportar a {name}"
fillAbuseReportDescription: "Ingrese los detalles del reporte. Si hay una nota en particular, ingrese la URL de esta."
abuseReported: "Se ha enviado el reporte. Muchas gracias."
reporteeOrigin: "Informar a"
reporterOrigin: "Origen del informe"
reporter: "Reportador"
reporteeOrigin: "Reportar a"
reporterOrigin: "Origen del reporte"
forwardReport: "Transferir un informe a una instancia remota"
forwardReportIsAnonymous: "No puede ver su información de la instancia remota y aparecerá como una cuenta anónima del sistema"
send: "Enviar"
@@ -640,6 +647,8 @@ clip: "Clip"
createNew: "Crear"
optional: "Opcional"
createNewClip: "Crear clip nuevo"
unclip: "Quitar clip"
confirmToUnclipAlreadyClippedNote: "Esta nota ya está incluida en el clip \"{name}\". ¿Quiere quitar la nota del clip?"
public: "Público"
i18nInfo: "Misskey está siendo traducido a varios idiomas gracias a voluntarios. Se puede colaborar traduciendo en {link}"
manageAccessTokens: "Administrar tokens de acceso"
@@ -727,6 +736,7 @@ showingPastTimeline: "Mostrar líneas de tiempo antiguas"
clear: "Limpiar"
markAllAsRead: "Marcar todo como leído"
goBack: "Deseleccionar"
unlikeConfirm: "¿Quitar como favorito?"
fullView: "Vista completa"
quitFullView: "quitar vista completa"
addDescription: "Agregar descripción"
@@ -794,6 +804,7 @@ pubSub: "Cuentas Pub/Sub"
lastCommunication: "Última comunicación"
resolved: "Resuelto"
unresolved: "Sin resolver"
breakFollow: "Dejar de seguir"
itsOn: "¡Está encendido!"
itsOff: "¡Está apagado!"
emailRequiredForSignup: "Se requere una dirección de correo electrónico para el registro de la cuenta"
@@ -807,16 +818,116 @@ classic: "Clásico"
muteThread: "Ocultar hilo"
unmuteThread: "Mostrar hilo"
ffVisibility: "Visibilidad de seguidores y seguidos"
ffVisibilityDescription: "Puedes configurar quien puede ver a quienes sigues y quienes te siguen"
continueThread: "Ver la continuación del hilo"
deleteAccountConfirm: "La cuenta será borrada. ¿Está seguro?"
incorrectPassword: "La contraseña es incorrecta"
voteConfirm: "¿Confirma su voto a {choice}?"
hide: "Ocultar"
leaveGroup: "Dejar el grupo"
leaveGroupConfirm: "¿Desea salir de {name}?"
useDrawerReactionPickerForMobile: "Mostrar panel de reacciones en móviles"
welcomeBackWithName: "Bienvenido otra vez, {name}"
clickToFinishEmailVerification: "Cliquée {ok} y verifique su correo"
overridedDeviceKind: "Tipo de dispositivo"
smartphone: "Teléfono smartphone"
tablet: "Tablet"
auto: "Automático"
themeColor: "Color del tema"
size: "Tamaño"
numberOfColumn: "Cantidad de columnas"
searchByGoogle: "Buscar"
instanceDefaultLightTheme: "Tema claro por defecto de la instancia"
instanceDefaultDarkTheme: "Tema oscuro por defecto de la instancia"
instanceDefaultThemeDescription: "Ingrese el código del tema en formato objeto"
mutePeriod: "Período de silenciamiento"
indefinitely: "Sin límite de tiempo"
tenMinutes: "10 minutos"
oneHour: "1 hora"
oneDay: "1 día"
oneWeek: "1 semana"
reflectMayTakeTime: "Puede pasar un tiempo hasta que se reflejen los cambios"
failedToFetchAccountInformation: "No se pudo obtener información de la cuenta"
rateLimitExceeded: "Se excedió el límite de peticiones"
cropImage: "Recortar imágen"
cropImageAsk: "¿Desea recortar la imagen?"
file: "Archivos"
recentNHours: "Últimas {n} horas"
recentNDays: "Últimos {n} días"
noEmailServerWarning: "No se ha configurado un servidor de correo electrónico."
thereIsUnresolvedAbuseReportWarning: "Hay reportes sin resolver"
recommended: "Recomendado"
check: "Verificar"
driveCapOverrideLabel: "Cambiar la capacidad de la unidad para este usuario"
driveCapOverrideCaption: "Restablecer la capacidad a su predeterminado ingresando un valor de 0 o menos"
requireAdminForView: "Necesitas iniciar sesión como administrador para ver esto."
isSystemAccount: "Cuenta creada y operada automáticamente por el sistema"
typeToConfirm: "Ingrese {x} para confirmar"
deleteAccount: "Borrar cuenta"
document: "Documento"
numberOfPageCache: "Cantidad de páginas cacheadas"
numberOfPageCacheDescription: "Al aumentar el número mejora la conveniencia pero tambien puede aumentar la carga y la memoria a usarse"
logoutConfirm: "¿Cerrar sesión?"
lastActiveDate: "Utilizado por última vez el"
statusbar: "Barra de estado"
pleaseSelect: "Selecciona una opción"
reverse: "Echar de un capirotazo"
colored: "Color"
refreshInterval: "Intervalo de actualización"
label: "Etiqueta"
type: "Tipo"
speed: "Velocidad"
slow: "Lento"
fast: "Rápido"
sensitiveMediaDetection: "Detección de contenido NSFW"
localOnly: "Solo local"
remoteOnly: "Sólo remoto"
failedToUpload: "La subida falló"
cannotUploadBecauseInappropriate: "Este archivo no se puede subir debido a que algunas partes han sido detectadas comoNSFW."
cannotUploadBecauseNoFreeSpace: "La subida falló debido a falta de espacio libre en la unidad del usuario."
beta: "Beta"
enableAutoSensitive: "Marcar automáticamente contenido NSFW"
enableAutoSensitiveDescription: "Permite la detección y marcado automático de contenido NSFW usando 'Machine Learning' cuando sea posible. Incluso si esta opción está desactivada, puede ser activado para toda la instancia."
activeEmailValidationDescription: "Habilita la validación estricta de direcciones de correo electrónico, lo cual incluye la revisión de direcciones desechables y si se puede comunicar con éstas. Cuando está deshabilitado, sólo el formato de la dirección es validado."
navbar: "Barra de navegación"
shuffle: "Aleatorio"
account: "Cuentas"
move: "Mover"
_sensitiveMediaDetection:
description: "Reduce el esfuerzo de la moderación el el servidor a través del reconocimiento automático de contenido NSFW usando 'Machine Learning'. Esto puede incrementar ligeramente la carga en el servidor."
sensitivity: "Sensibilidad de detección"
sensitivityDescription: "Reducir la sensibilidad puede acarrear a varios falsos positivos, mientras que incrementarla puede reducir las detecciones (falsos negativos)."
setSensitiveFlagAutomatically: "Marcar como NSFW"
setSensitiveFlagAutomaticallyDescription: "Los resultados de la detección interna pueden ser retenidos incluso si la opción está desactivada."
analyzeVideos: "Habilitar el análisis de videos"
analyzeVideosDescription: "Analizar videos en adición a las imágenes. Esto puede incrementar ligeramente la carga del servidor."
_emailUnavailable:
used: "Ya fue usado"
format: "Formato no válido."
disposable: "No es un correo reutilizable"
mx: "Servidor de correo inválido"
smtp: "Servidor de correo no disponible"
_ffVisibility:
public: "Publicar"
followers: "Visible solo para seguidores"
private: "Privado"
_signup:
almostThere: "Ya falta poco"
emailAddressInfo: "Ingrese el correo electrónico que usa. Este no se hará público."
emailSent: "Se envió un correo de verificación a la dirección {email}. Acceda al link enviado en el correo para completar el ingreso."
_accountDelete:
accountDelete: "Eliminar Cuenta"
mayTakeTime: "La eliminación de la cuenta es un proceso que precisa de carga. Puede pasar un tiempo hasta que se complete si es mucho el contenido creado y los archivos subidos."
sendEmail: "Cuando se termine de borrar la cuenta, se enviará un correo a la dirección usada para el registro."
requestAccountDelete: "Pedir la eliminación de la cuenta."
started: "El proceso de eliminación ha comenzado."
inProgress: "La eliminación está en proceso."
_ad:
back: "Deseleccionar"
reduceFrequencyOfThisAd: "Mostrar menos este anuncio."
_forgotPassword:
enterEmail: "Ingrese el correo usado para registrar la cuenta. Se enviará un link para resetear la contraseña."
ifNoEmail: "Si no utilizó un correo para crear la cuenta, contáctese con el administrador."
contactAdmin: "Esta instancia no admite el uso de direcciones de correo electrónico, póngase en contacto con el administrador de la instancia para restablecer su contraseña"
_gallery:
my: "Mi galería"
@@ -832,6 +943,24 @@ _plugin:
install: "Instalar plugins"
installWarn: "Por favor no instale plugins que no son de confianza"
manage: "Gestionar plugins"
_preferencesBackups:
list: "Respaldos creados"
saveNew: "Guardar nuevo respaldo"
loadFile: "Cargar desde archivo"
apply: "Aplicar a este dispositivo"
save: "Guardar cambios"
inputName: "Por favor, ingresa un nombre para este respaldo"
cannotSave: "Fallo al guardar"
nameAlreadyExists: "Un respaldo llamado \"{name}\" ya existe. Por favor ingresa un nombre diferente"
applyConfirm: "¿Realmente quieres aplicar los cambios desde el archivo \"{name}\" a este dispositivo? Las configuraciones existentes serán sobreescritas. "
saveConfirm: "¿Guardar respaldo como \"{name}\"?"
deleteConfirm: "¿Borrar el respaldo \"{name}\"?"
renameConfirm: "¿Renombrar este respaldo de \"{old}\" a \"{new}\"?"
noBackups: "No existen respaldos. Deberás respaldar las configuraciones del cliente en este servidor usando \"Crear nuevo respaldo\""
createdAt: "Creado: {date} {time}"
updatedAt: "Actualizado: {date} {time}"
cannotLoad: "La carga falló"
invalidFile: "Formato de archivo inválido"
_registry:
scope: "Alcance"
key: "Clave"
@@ -858,20 +987,65 @@ _mfm:
mention: "Menciones"
mentionDescription: "El signo @ seguido de un nombre de usuario se puede utilizar para notificar a un usuario en particular."
hashtag: "Hashtag"
hashtagDescription: "Puede especificar un hashtag con un numeral y el texto."
url: "URL"
urlDescription: "Se pueden mostrar las URL"
link: "Vínculo"
linkDescription: "Se pueden asociar partes de texto a la URL"
bold: "Negrita"
boldDescription: "Muestra el texto con las letras más gruesas"
small: "Pequeño"
smallDescription: "Muestra el texto más pequeño y delgado"
center: "Centrar"
centerDescription: "Muestra el texto centrado"
inlineCode: "Código (insertado)"
inlineCodeDescription: "Muestra el código de un programa resaltando su sintaxis"
blockCode: "Código (bloque)"
blockCodeDescription: "Código de resaltado de sintaxis, como programas de varias líneas con bloques."
inlineMath: "Fórmula (insertado)"
inlineMathDescription: "Muestra fórmulas (KaTeX) insertadas"
blockMath: "Fórmula (bloque)"
blockMathDescription: "Muestra fórmulas (KaTeX) de varias líneas en un bloque"
quote: "Citar"
quoteDescription: "Muestra el contenido como una cita"
emoji: "Emojis personalizados"
emojiDescription: "Muestra los emojis personalizados encerrados entre dos puntos."
search: "Buscar"
searchDescription: "Muestra una caja de búsqueda con texto pre-escrito"
flip: "Echar de un capirotazo"
flipDescription: "Voltea el contenido hacia arriba / abajo o hacia la izquierda / derecha."
jelly: "Animación (gelatina)"
jellyDescription: "Aplica un efecto de animación tipo gelatina"
tada: "Animación (tadá)"
tadaDescription: "Aplica un efecto de animación al estilo \"Tadá\""
jump: "Animación (saltar)"
jumpDescription: "Aplica un efecto de animación tipo salto"
bounce: "Animación (rebotar)"
bounceDescription: "Aplica un efecto de animación tipo rebote"
shake: "Animación (temblor)"
shakeDescription: "Aplica un efecto de animación tipo temblor"
twitch: "Animación (sacudida)"
twitchDescription: "Aplica un efecto de animación tipo sacudida"
spin: "Animación (giro)"
spinDescription: "Aplica un efecto de animación tipo rotación"
x2: "Grande"
x2Description: "Muestra el contenido más grande"
x3: "Muy grande"
x3Description: "Muestra el contenido mucho más grande"
x4: "Totalmente grande"
x4Description: "Muestra el contenido totalmente grande"
blur: "Desenfoque"
blurDescription: "Para desenfocar el contenido. Se muestra claramente al colocar el puntero encima."
font: "Fuente"
fontDescription: "Elegir la fuente del contenido"
rainbow: "Arcoíris"
rainbowDescription: "Muestra el contenido con los colores del arcoíris"
sparkle: "Parpadeante"
sparkleDescription: "Aplica un efecto de partículas parpadeantes"
rotate: "Rotar"
rotateDescription: "Rota el contenido a un ángulo especificado."
plain: "Plano"
plainDescription: "Desactiva los efectos de todo el contenido MFM con este efecto MFM."
_instanceTicker:
none: "No mostrar"
remote: "Mostrar a usuarios remotos"
@@ -893,6 +1067,7 @@ _channel:
_menuDisplay:
sideFull: "Horizontal"
sideIcon: "Horizontal (ícono)"
top: "Arriba"
hide: "Ocultar"
_wordMute:
muteWords: "Palabras que silenciar"
@@ -915,6 +1090,8 @@ _theme:
code: "Código del tema"
description: "Descripción"
installed: "{name} ha sido instalado"
installedThemes: "Temas instalados"
builtinThemes: "Temas integrados"
alreadyInstalled: "Este tema ya está instalado"
invalid: "El formato del tema no es válido"
make: "Crear tema"
@@ -1032,6 +1209,7 @@ _2fa:
registerKey: "Registrar clave"
step1: "Primero, instale en su dispositivo la aplicación de autenticación {a} o {b} u otra."
step2: "Luego, escanee con la aplicación el código QR mostrado en pantalla."
step2Url: "En una aplicación de escritorio se puede ingresar la siguiente URL:"
step3: "Para terminar, ingrese el token mostrado en la aplicación."
step4: "Ahora cuando inicie sesión, ingrese el mismo token"
securityKeyInfo: "Se puede configurar el inicio de sesión usando una clave de seguridad de hardware que soporte FIDO2 o con un certificado de huella digital o con un PIN"
@@ -1064,6 +1242,10 @@ _permissions:
"write:user-groups": "Administrar grupos de usuarios"
"read:channels": "Ver canal"
"write:channels": "Modificar canal"
"read:gallery": "Ver galería"
"write:gallery": "Editar galería"
"read:gallery-likes": "Ver favoritos de la galería"
"write:gallery-likes": "Editar favoritos de la galería"
_auth:
shareAccess: "¿Desea permitir el acceso a la cuenta \"{name}\"?"
shareAccessAsk: "¿Está seguro de que desea autorizar esta aplicación para acceder a su cuenta?"
@@ -1093,13 +1275,21 @@ _widgets:
trends: "Tendencias"
clock: "Reloj"
rss: "Lector RSS"
rssTicker: "Ticker-RSS"
activity: "Actividad"
photos: "Fotos"
digitalClock: "Reloj digital"
unixClock: "Reloj UNIX"
federation: "Federación"
instanceCloud: "Nube de palabras de la instancia"
postForm: "Formulario"
slideshow: "Diapositivas"
button: "Botón"
onlineUsers: "Usuarios en linea"
jobQueue: "Cola de trabajos"
serverMetric: "Estadísticas del servidor"
aiscript: "Consola de AiScript"
aichan: "indigo"
_cw:
hide: "Ocultar"
show: "Ver más"
@@ -1154,14 +1344,21 @@ _profile:
username: "Nombre de usuario"
description: "Descripción"
youCanIncludeHashtags: "Puedes añadir hashtags"
metadata: "información adicional"
metadataEdit: "Editar información adicional"
metadataDescription: "Muestra la información adicional en el perfil"
metadataLabel: "Etiqueta"
metadataContent: "Contenido"
changeAvatar: "Cambiar avatar"
changeBanner: "Cambiar banner"
_exportOrImport:
allNotes: "Todas las notas"
followingList: "Siguiendo"
muteList: "Silenciados"
blockingList: "Bloqueados"
userLists: "Listas"
excludeMutingUsers: "Excluir usuarios silenciados"
excludeInactiveUsers: "Excluir usuarios inactivos"
_charts:
federation: "Federación"
apRequest: "Pedidos"
@@ -1200,6 +1397,7 @@ _pages:
created: "La página fue creada"
updated: "La página fue actualizada"
deleted: "La página borrada"
pageSetting: "Configurar página"
nameAlreadyExists: "La URL de la página especificada ya existe"
invalidNameTitle: "URL inválida"
invalidNameText: "Verifique que no tenga espacios en blanco"
@@ -1210,6 +1408,7 @@ _pages:
unlike: "Quitar me gusta"
my: "Mis páginas"
liked: "Páginas que me gustan"
featured: "Popular"
inspector: "Inspector"
contents: "Contenido"
content: "Bloque de página"
@@ -1265,6 +1464,11 @@ _pages:
id: "Lienzo ID"
width: "Ancho"
height: "Altura"
note: "Nota embebida"
_note:
id: "Id de la nota"
idDescription: "Pega la URL de la nota para configurarla"
detailed: "Ver Detalles"
switch: "Interruptor"
_switch:
name: "Nombre de variable"
@@ -1492,6 +1696,8 @@ _notification:
youReceivedFollowRequest: "Has mandado una solicitud de seguimiento"
yourFollowRequestAccepted: "Tu solicitud de seguimiento fue aceptada"
youWereInvitedToGroup: "Invitado al grupo"
pollEnded: "Estan disponibles los resultados de la encuesta"
emptyPushNotificationMessage: "Se han actualizado las notificaciones push"
_types:
all: "Todo"
follow: "Siguiendo"
@@ -1501,24 +1707,34 @@ _notification:
quote: "Citar"
reaction: "Reacción"
pollVote: "Votado en la encuesta"
pollEnded: "La encuesta terminó"
receiveFollowRequest: "Recibió una solicitud de seguimiento"
followRequestAccepted: "El seguimiento fue aceptado"
groupInvited: "Invitado al grupo"
app: "Notificaciones desde aplicaciones"
_actions:
followBack: "Te sigue de vuelta"
reply: "Responder"
renote: "Renotar"
_deck:
alwaysShowMainColumn: "Siempre mostrar la columna principal"
columnAlign: "Alinear columnas"
addColumn: "Agregar columna"
configureColumn: "Ajustes de columna"
swapLeft: "Mover a la izquierda"
swapRight: "Mover a la derecha"
swapUp: "Mover arriba"
swapDown: "Mover abajo"
stackLeft: "Apilar a la izquierda"
popRight: "Sacar a la derecha"
profile: "Perfil"
newProfile: "Nuevo perfil"
deleteProfile: "Eliminar perfil"
introduction: "¡Crea la interfaz perfecta para tí organizando las columnas libremente!"
introduction2: "Presiona en la + de la derecha de la pantalla para añadir nuevas columnas donde quieras."
widgetsIntroduction: "Por favor selecciona \"Editar Widgets\" en el menú columna y agrega un widget."
_columns:
main: "Principal"
widgets: "Widgets"
notifications: "Notificaciones"
tl: "Linea de tiempo"

View File

@@ -52,6 +52,7 @@ searchUser: "Chercher un·e utilisateur·rice"
reply: "Répondre"
loadMore: "Afficher plus …"
showMore: "Afficher plus …"
showLess: "Fermer"
youGotNewFollower: "Vous suit"
receiveFollowRequest: "Demande dabonnement reçue"
followRequestAccepted: "La demande dabonnement a été acceptée"
@@ -815,6 +816,7 @@ voteConfirm: "Confirmez-vous votre vote pour « {choice} » ?"
hide: "Masquer"
leaveGroup: "Quitter le groupe"
leaveGroupConfirm: "Êtes vous sûr de vouloir quitter \"{name}\" ?"
useDrawerReactionPickerForMobile: "Afficher le sélecteur de réactions en tant que panneau sur mobile"
welcomeBackWithName: "Heureux de vous revoir, {name}"
clickToFinishEmailVerification: "Veuillez cliquer sur [{ok}] afin de compléter la vérification par courriel."
overridedDeviceKind: "Type dappareil"
@@ -827,15 +829,26 @@ numberOfColumn: "Nombre de colonnes"
searchByGoogle: "Google"
instanceDefaultLightTheme: "Thème clair par défaut sur toute linstance"
instanceDefaultDarkTheme: "Thème sombre par défaut sur toute linstance"
instanceDefaultThemeDescription: "Saisissez le code du thème en format objet."
mutePeriod: "Durée de mise en sourdine"
indefinitely: "Illimité"
tenMinutes: "10 minutes"
oneHour: "1 heure"
oneDay: "1 jour"
oneWeek: "1 semaine"
rateLimitExceeded: "Limite de taux dépassée"
cropImage: "Recadrer l'image"
cropImageAsk: "Voulez-vous recadrer cette image ?"
file: "Fichiers"
reverse: "Inverser"
colored: "Coloré"
label: "Étiquette"
localOnly: "Local seulement"
account: "Comptes"
_emailUnavailable:
used: "Non disponible"
format: "Le format de cette adresse de courriel est invalide"
disposable: "Les adresses e-mail jetables ne peuvent pas être utilisées"
mx: "Ce serveur de courriels est invalide"
smtp: "Ce serveur de courriels ne répond pas"
_ffVisibility:
@@ -1118,6 +1131,7 @@ _2fa:
registerKey: "Enregistrer une clef"
step1: "Tout d'abord, installez une application d'authentification, telle que {a} ou {b}, sur votre appareil."
step2: "Ensuite, scannez le code QR affiché sur lécran."
step2Url: "Vous pouvez également saisir cette URL si vous utilisez un programme de bureau :"
step3: "Entrez le jeton affiché sur votre application pour compléter la configuration."
step4: "À partir de maintenant, ce même jeton vous sera demandé à chacune de vos connexions."
securityKeyInfo: "Vous pouvez configurer l'authentification WebAuthN pour sécuriser davantage le processus de connexion grâce à une clé de sécurité matérielle qui prend en charge FIDO2, ou bien en configurant l'authentification par empreinte digitale ou par code PIN sur votre appareil."
@@ -1601,6 +1615,8 @@ _notification:
youReceivedFollowRequest: "Vous avez reçu une demande dabonnement"
yourFollowRequestAccepted: "Votre demande dabonnement a été accepté"
youWereInvitedToGroup: "Invité·e au groupe"
pollEnded: "Les résultats du sondage sont disponibles"
emptyPushNotificationMessage: "Les notifications push ont été mises à jour"
_types:
all: "Toutes"
follow: "Nouvel·le abonné·e"
@@ -1615,13 +1631,12 @@ _notification:
groupInvited: "Invitation à un groupe"
app: "Notifications provenant des apps"
_actions:
followBack: "Suivre"
reply: "Répondre"
renote: "Renoter"
_deck:
alwaysShowMainColumn: "Toujours afficher la colonne principale"
columnAlign: "Aligner les colonnes"
columnMargin: "Marge entre les colonnes"
columnHeaderHeight: "Taille de l'en-tête de colonne"
addColumn: "Ajouter une colonne"
swapLeft: "Déplacer à gauche"
swapRight: "Déplacer à droite"

View File

@@ -52,6 +52,7 @@ searchUser: "Cari pengguna"
reply: "Balas"
loadMore: "Selebihnya"
showMore: "Selebihnya"
showLess: "Tutup"
youGotNewFollower: "Mengikuti kamu"
receiveFollowRequest: "Ingin mengikuti kamu"
followRequestAccepted: "Permintaan mengikuti telah disetujui"
@@ -81,7 +82,7 @@ somethingHappened: "Terjadi kesalahan"
retry: "Coba lagi"
pageLoadError: "Gagal memuat halaman."
pageLoadErrorDescription: "Umumnya disebabkan jaringan atau tembolok perambah. Cobalah bersihkan tembolok peramban lalu tunggu sesaat sebelum mencoba kembali."
serverIsDead: "Tidak ada respon dari server. Mohon tunggu dan coba beberapa saat lagi."
serverIsDead: "Tidak ada respon dari peladen. Mohon tunggu dan coba beberapa saat lagi."
youShouldUpgradeClient: "Untuk melihat halaman ini, mohon muat ulang untuk memutakhirkan klienmu."
enterListName: "Masukkan nama daftar"
privacy: "Privasi"
@@ -294,8 +295,8 @@ rename: "Ubah nama"
avatar: "Avatar"
banner: "Banner"
nsfw: "Konten sensitif"
whenServerDisconnected: "Ketika kehilangan koneksi dengan server"
disconnectedFromServer: "Terputus koneksi dari server"
whenServerDisconnected: "Ketika kehilangan koneksi dengan peladen"
disconnectedFromServer: "Terputus koneksi dari peladen"
reload: "Muat ulang"
doNothing: "Abaikan"
reloadConfirm: "Apakah kamu ingin memuat ulang linimasa?"
@@ -495,7 +496,7 @@ objectStorageUseSSLDesc: "Matikan ini jika kamu tidak akan menggunakan HTTPS unt
objectStorageUseProxy: "Hubungkan melalui Proxy"
objectStorageUseProxyDesc: "Matikan ini jika kamu tidak akan menggunakan Proxy untuk koneksi ObjectStorage"
objectStorageSetPublicRead: "Setel \"public-read\" disaat mengunggah"
serverLogs: "Log Server"
serverLogs: "Log Peladen"
deleteAll: "Hapus semua"
showFixedPostForm: "Tampilkan form posting di atas linimasa."
newNoteRecived: "Kamu mendapat catatan baru"
@@ -533,7 +534,7 @@ removeAllFollowingDescription: "Batal mengikuti semua akun dari {host}. Mohon ja
userSuspended: "Pengguna ini telah dibekukan."
userSilenced: "Pengguna ini telah dibungkam."
yourAccountSuspendedTitle: "Akun ini dibekukan"
yourAccountSuspendedDescription: "Akun ini dibekukan karena melanggar ketentuan penggunaan layanan server atau semacamnya. Hubungi admin apabila ingin tahu alasan lebih lanjut. Mohon untuk tidak membuat akun baru."
yourAccountSuspendedDescription: "Akun ini dibekukan karena melanggar ketentuan penggunaan layanan peladen atau semacamnya. Hubungi admin apabila ingin tahu alasan lebih lanjut. Mohon untuk tidak membuat akun baru."
menu: "Menu"
divider: "Pembagi"
addItem: "Tambahkan item"
@@ -577,12 +578,12 @@ pluginTokenRequestedDescription: "Plugin ini dapat menggunakan setelan ijin disi
notificationType: "Jenis pemberitahuan"
edit: "Sunting"
useStarForReactionFallback: "Gunakan ★ sebagai fallback jika reaksi emoji tidak diketahui"
emailServer: "Server surel"
emailServer: "Peladen surel"
enableEmail: "Nyalakan distribusi surel"
emailConfigInfo: "Digunakan untuk mengonfirmasi surel kamu disaat mendaftar dan lupa kata sandi"
email: "Surel"
emailAddress: "Alamat surel"
smtpConfig: "Konfigurasi server SMTP"
smtpConfig: "Konfigurasi peladen SMTP"
smtpHost: "Host"
smtpPort: "Port"
smtpUser: "Nama Pengguna"
@@ -643,6 +644,8 @@ clip: "Klip"
createNew: "Buat baru"
optional: "Opsional"
createNewClip: "Buat klip baru"
unclip: "Batalkan klip"
confirmToUnclipAlreadyClippedNote: "Catatan ini sudah disertakan di klip \"{name}\". Yakin ingin membatalkan catatan dari klip ini?"
public: "Publik"
i18nInfo: "Misskey diterjemahkan ke dalam banyak bahasa oleh sukarelawan. Kamu dapat ikut membantu di {link}."
manageAccessTokens: "Kelola access token"
@@ -791,7 +794,7 @@ whatIsNew: "Lihat perubahan pemutakhiran"
translate: "Terjemahkan"
translatedFrom: "Terjemahkan dari {x}"
accountDeletionInProgress: "Penghapusan akun sedang dalam proses"
usernameInfo: "Nama yang mengidentifikasikan akun kamu dari yang lain pada server ini. Kamu dapat menggunakan alfabet (a~z, A~Z), digit (0~9) atau garis bawah (_). Username tidak dapat diubah setelahnya."
usernameInfo: "Nama yang mengidentifikasikan akun kamu dari yang lain pada peladen ini. Kamu dapat menggunakan alfabet (a~z, A~Z), digit (0~9) atau garis bawah (_). Username tidak dapat diubah setelahnya."
aiChanMode: "Mode Ai"
keepCw: "Biarkan Peringatan Konten"
pubSub: "Akun Pub/Sub"
@@ -804,7 +807,7 @@ itsOff: "Nonaktif"
emailRequiredForSignup: "Membutuhkan alamat surel untuk mendaftar"
unread: "Belum dibaca"
filter: "Saring"
controlPanel: "Panel kontrol"
controlPanel: "Panel kendali"
manageAccounts: "Kelola Akun"
makeReactionsPublic: "Tampilkan riwayat reaksi ke publik"
makeReactionsPublicDescription: "Pengaturan ini akan membuat daftar dari semua reaksi masa lalu kamu ditampilkan secara publik."
@@ -845,12 +848,18 @@ failedToFetchAccountInformation: "Gagal untuk mendapatkan informasi akun"
rateLimitExceeded: "Batas sudah terlampaui"
cropImage: "potong gambar"
cropImageAsk: "Ingin memotong gambar?"
file: "Berkas"
reverse: "Balik"
colored: "Diwarnai"
label: "Label"
localOnly: "Hanya lokal"
account: "Akun"
_emailUnavailable:
used: "Alamat surel ini telah digunakan"
format: "Format tidak valid."
disposable: "Alamat surel temporer tidak dapat digunakan"
mx: "Server alamat surel ini tidak valid"
smtp: "Server alamat surel ini tidak merespon"
mx: "Peladen alamat surel ini tidak valid"
smtp: "Peladen alamat surel ini tidak merespon"
_ffVisibility:
public: "Terbitkan"
followers: "Tampil untuk pengikut saja"
@@ -1208,7 +1217,7 @@ _widgets:
button: "Tombol"
onlineUsers: "Pengguna online"
jobQueue: "Antrian kerja"
serverMetric: "Statistik server"
serverMetric: "Statistik peladen"
aiscript: "Konsol AiScript"
aichan: "Ai"
_cw:
@@ -1640,8 +1649,6 @@ _notification:
_deck:
alwaysShowMainColumn: "Selalu tampilkan kolom utama"
columnAlign: "Luruskan kolom"
columnMargin: "Batas antar kolom"
columnHeaderHeight: "Tinggi kolom header"
addColumn: "Tambahkan kolom"
swapLeft: "Pindah ke kiri"
swapRight: "Pindah ke kanan"

View File

@@ -36,6 +36,7 @@ const languages = [
'sk-SK',
'ug-CN',
'uk-UA',
'vi-VN',
'zh-CN',
'zh-TW',
];

View File

@@ -52,6 +52,7 @@ searchUser: "Cerca utente"
reply: "Rispondi"
loadMore: "Mostra di più"
showMore: "Mostra di più"
showLess: "Chiudi"
youGotNewFollower: "Ha iniziato a seguirti"
receiveFollowRequest: "Hai ricevuto una richiesta di follow."
followRequestAccepted: "Richiesta di follow accettata"
@@ -809,6 +810,12 @@ tenMinutes: "10 minuti"
oneHour: "1 ora"
oneDay: "1 giorno"
oneWeek: "1 settimana"
file: "Allegati"
reverse: "Inverti"
colored: "Colorato"
label: "Etichetta"
localOnly: "Soltanto locale"
account: "Account"
_emailUnavailable:
used: "Email già in uso"
format: "Formato email non valido"
@@ -1443,8 +1450,6 @@ _notification:
_deck:
alwaysShowMainColumn: "Mostra sempre la colonna principale"
columnAlign: "Allineare colonne"
columnMargin: "Margine tra le colonne"
columnHeaderHeight: "Dimensioni dell'intestazione della colonna"
addColumn: "Aggiungi colonna"
swapLeft: "Sposta a sinistra"
swapRight: "Sposta a destra"

View File

@@ -52,6 +52,7 @@ searchUser: "ユーザーを検索"
reply: "返信"
loadMore: "もっと見る"
showMore: "もっと見る"
showLess: "閉じる"
youGotNewFollower: "フォローされました"
receiveFollowRequest: "フォローリクエストされました"
followRequestAccepted: "フォローが承認されました"
@@ -203,6 +204,7 @@ done: "完了"
processing: "処理中"
preview: "プレビュー"
default: "デフォルト"
defaultValueIs: "デフォルト: {value}"
noCustomEmojis: "絵文字はありません"
noJobs: "ジョブはありません"
federating: "連合中"
@@ -381,6 +383,7 @@ administrator: "管理者"
token: "トークン"
twoStepAuthentication: "二段階認証"
moderator: "モデレーター"
moderation: "モデレーション"
nUsersMentioned: "{n}人が投稿"
securityKey: "セキュリティキー"
securityKeyName: "キーの名前"
@@ -541,7 +544,7 @@ relays: "リレー"
addRelay: "リレーの追加"
inboxUrl: "inboxのURL"
addedRelays: "追加済みのリレー"
serviceworkerInfo: "プッシュ通知を行うには有効する必要があります。"
serviceworkerInfo: "プッシュ通知を行うには有効する必要があります。"
deletedNote: "削除された投稿"
invisibleNote: "非公開の投稿"
enableInfiniteScroll: "自動でもっと見る"
@@ -559,6 +562,7 @@ author: "作者"
leaveConfirm: "未保存の変更があります。破棄しますか?"
manage: "管理"
plugins: "プラグイン"
preferencesBackups: "設定のバックアップ"
deck: "デッキ"
undeck: "デッキ解除"
useBlurEffectForModal: "モーダルにぼかし効果を使用"
@@ -643,6 +647,8 @@ clip: "クリップ"
createNew: "新規作成"
optional: "任意"
createNewClip: "新しいクリップを作成"
unclip: "クリップ解除"
confirmToUnclipAlreadyClippedNote: "このノートはすでにクリップ「{name}」に含まれています。ノートをこのクリップから除外しますか?"
public: "パブリック"
i18nInfo: "Misskeyは有志によって様々な言語に翻訳されています。{link}で翻訳に協力できます。"
manageAccessTokens: "アクセストークンの管理"
@@ -845,6 +851,57 @@ failedToFetchAccountInformation: "アカウント情報の取得に失敗しま
rateLimitExceeded: "レート制限を超えました"
cropImage: "画像のクロップ"
cropImageAsk: "画像をクロップしますか?"
file: "ファイル"
recentNHours: "直近{n}時間"
recentNDays: "直近{n}日"
noEmailServerWarning: "メールサーバーの設定がされていません。"
thereIsUnresolvedAbuseReportWarning: "未対応の通報があります。"
recommended: "推奨"
check: "チェック"
driveCapOverrideLabel: "このユーザーのドライブ容量上限を変更"
driveCapOverrideCaption: "0以下を指定すると解除されます。"
requireAdminForView: "閲覧するには管理者アカウントでログインしている必要があります。"
isSystemAccount: "システムにより自動で作成・管理されているアカウントです。"
typeToConfirm: "この操作を行うには {x} と入力してください"
deleteAccount: "アカウント削除"
document: "ドキュメント"
numberOfPageCache: "ページキャッシュ数"
numberOfPageCacheDescription: "多くすると利便性が向上しますが、負荷とメモリ使用量が増えます。"
logoutConfirm: "ログアウトしますか?"
lastActiveDate: "最終利用日時"
statusbar: "ステータスバー"
pleaseSelect: "選択してください"
reverse: "反転"
colored: "色付き"
refreshInterval: "更新間隔"
label: "ラベル"
type: "タイプ"
speed: "速度"
slow: "遅い"
fast: "速い"
sensitiveMediaDetection: "センシティブなメディアの検出"
localOnly: "ローカルのみ"
remoteOnly: "リモートのみ"
failedToUpload: "アップロード失敗"
cannotUploadBecauseInappropriate: "不適切な内容を含む可能性があると判定されたためアップロードできません。"
cannotUploadBecauseNoFreeSpace: "ドライブの空き容量が無いためアップロードできません。"
beta: "ベータ"
enableAutoSensitive: "自動NSFW判定"
enableAutoSensitiveDescription: "利用可能な場合は、機械学習を利用して自動でメディアにNSFWフラグを設定します。この機能をオフにしても、インスタンスによっては自動で設定されることがあります。"
activeEmailValidationDescription: "ユーザーのメールアドレスのバリデーションを、捨てアドかどうかや実際に通信可能かどうかなどを判定しより積極的に行います。オフにすると単に文字列として正しいかどうかのみチェックされます。"
navbar: "ナビゲーションバー"
shuffle: "シャッフル"
account: "アカウント"
move: "移動"
_sensitiveMediaDetection:
description: "機械学習を使って自動でセンシティブなメディアを検出し、モデレーションに役立てることができます。サーバーの負荷が少し増えます。"
sensitivity: "検出感度"
sensitivityDescription: "感度を低くすると、誤検知(偽陽性)が減ります。感度を高くすると、検知漏れ(偽陰性)が減ります。"
setSensitiveFlagAutomatically: "NSFWフラグを設定する"
setSensitiveFlagAutomaticallyDescription: "この設定をオフにしても内部的に判定結果は保持されます。"
analyzeVideos: "動画の解析を有効化"
analyzeVideosDescription: "静止画に加えて動画も解析するようにします。サーバーの負荷が少し増えます。"
_emailUnavailable:
used: "既に使用されています"
@@ -897,6 +954,25 @@ _plugin:
installWarn: "信頼できないプラグインはインストールしないでください。"
manage: "プラグインの管理"
_preferencesBackups:
list: "作成したバックアップ"
saveNew: "新規保存"
loadFile: "ファイルを読み込み"
apply: "このデバイスに適用"
save: "上書き保存"
inputName: "バックアップ名を入力"
cannotSave: "保存できません"
nameAlreadyExists: "バックアップ名「{name}」は既に存在します。違う名前を指定してください。"
applyConfirm: "バックアップ「{name}」を現在のデバイスに適用しますか?現在のデバイス設定は失われます。"
saveConfirm: "{name}に上書き保存しますか?"
deleteConfirm: "{name}を削除しますか?"
renameConfirm: "「{old}」を「{new}」に変更しますか?"
noBackups: "バックアップはありません。「新規保存」で現在のクライアント設定をサーバーに保存できます。"
createdAt: "作成日時: {date} {time}"
updatedAt: "更新日時: {date} {time}"
cannotLoad: "読み込みできません"
invalidFile: "ファイル形式が違います。"
_registry:
scope: "スコープ"
key: "キー"
@@ -983,6 +1059,8 @@ _mfm:
sparkleDescription: "キラキラしたパーティクルのエフェクトを追加します。"
rotate: "回転"
rotateDescription: "指定した角度で回転させます。"
plain: "プレーン"
plainDescription: "内側の構文を全て無効にします。"
_instanceTicker:
none: "表示しない"
@@ -1230,10 +1308,13 @@ _widgets:
trends: "トレンド"
clock: "時計"
rss: "RSSリーダー"
rssTicker: "RSSティッカー"
activity: "アクティビティ"
photos: "フォト"
digitalClock: "デジタル時計"
unixClock: "UNIX時計"
federation: "連合"
instanceCloud: "インスタンスクラウド"
postForm: "投稿フォーム"
slideshow: "スライドショー"
button: "ボタン"
@@ -1698,9 +1779,8 @@ _notification:
_deck:
alwaysShowMainColumn: "常にメインカラムを表示"
columnAlign: "カラムの寄せ"
columnMargin: "カラム間のマージン"
columnHeaderHeight: "カラムのヘッダー幅"
addColumn: "カラムを追加"
configureColumn: "カラムの設定"
swapLeft: "左に移動"
swapRight: "右に移動"
swapUp: "上に移動"
@@ -1708,6 +1788,11 @@ _deck:
stackLeft: "左に重ねる"
popRight: "右に出す"
profile: "プロファイル"
newProfile: "新規プロファイル"
deleteProfile: "プロファイルを削除"
introduction: "カラムを組み合わせて自分だけのインターフェイスを作りましょう!"
introduction2: "画面の右にある + を押して、いつでもカラムを追加できます。"
widgetsIntroduction: "カラムのメニューから、「ウィジェットの編集」を選択してウィジェットを追加してください"
_columns:
main: "メイン"

View File

@@ -52,6 +52,7 @@ searchUser: "ユーザーを検索"
reply: "返事"
loadMore: "まだまだあるで!"
showMore: "まだまだあるで!"
showLess: "閉じる"
youGotNewFollower: "フォローされたで"
receiveFollowRequest: "フォローリクエストされたで"
followRequestAccepted: "フォローが承認されたで"
@@ -203,6 +204,7 @@ done: "でけた"
processing: "処理しとる"
preview: "プレビュー"
default: "デフォルト"
defaultValueIs: "デフォルト"
noCustomEmojis: "絵文字はあらへん"
noJobs: "ジョブはあらへん"
federating: "連合しとる"
@@ -317,6 +319,8 @@ monthX: "{month}月"
yearX: "{year}年"
pages: "ページ"
integration: "連携"
connectService: "つなげるで"
disconnectService: "切るで"
enableLocalTimeline: "ローカルタイムラインを使えるようにする"
enableGlobalTimeline: "グローバルタイムラインを使えるようにする"
disablingTimelinesInfo: "ここらへんのタイムラインを使えんようにしてしもても、管理者とモデレーターは使えるままになってるで、そうやなかったら不便やからな。"
@@ -328,10 +332,13 @@ driveCapacityPerRemoteAccount: "リモートユーザーひとりあたりのド
inMb: "メガバイト単位"
iconUrl: "アイコン画像のURL"
bannerUrl: "バナー画像のURL"
backgroundImageUrl: "背景画像のURL"
basicInfo: "基本情報"
pinnedUsers: "ピン留めしたユーザー"
pinnedUsersDescription: "「みつける」ページとかにピン留めしたいユーザーをここに書けばええんやで。他ん人との名前は改行で区切ればええんやで。"
pinnedPages: "ピン留めページ"
pinnedPagesDescription: "インスタンスのいっちゃん上にピン留めしたいページのパスを改行で区切って記述してな"
pinnedClipId: "ピン留めするクリップのID"
pinnedNotes: "ピン留めされとるノート"
hcaptcha: "hCaptchaキャプチャ"
enableHcaptcha: "hCaptchaキャプチャをつけとく"
@@ -376,6 +383,7 @@ administrator: "管理者"
token: "トークン"
twoStepAuthentication: "二段階認証"
moderator: "モデレーター"
moderation: "モデレーション"
nUsersMentioned: "{n}人が投稿"
securityKey: "セキュリティキー"
securityKeyName: "キーの名前"
@@ -435,13 +443,17 @@ strongPassword: "ええ感じのパスワード"
passwordMatched: "よし!一致や!"
passwordNotMatched: "一致しとらんで?"
signinWith: "{x}でログイン"
signinFailed: "ログインできんかったで。もっかいユーザー名とパスワードを確認してみてな。"
tapSecurityKey: "セキュリティキーにタッチしてな"
or: "それか"
language: "言語"
uiLanguage: "UIの表示言語"
groupInvited: "グループに招待されとるで"
aboutX: "{x}について"
useOsNativeEmojis: "OSネイティブの絵文字を使う"
disableDrawer: "メニューをドロワーで表示せぇへん"
youHaveNoGroups: "グループがあらへんねぇ。"
joinOrCreateGroup: "既存のグループに招待してもらうか、新しくグループ作ってからやってな"
noHistory: "履歴はあらへんねぇ。"
signinHistory: "ログイン履歴"
disableAnimatedMfm: "動きがやかましいMFMを止める"
@@ -450,6 +462,7 @@ category: "カテゴリ"
tags: "タグ"
docSource: "このドキュメントのソース"
createAccount: "アカウントを作成"
existingAccount: "既存のアカウント"
regenerate: "再生成"
fontSize: "フォントサイズ"
noFollowRequests: "フォロー申請はあらへんで"
@@ -473,10 +486,15 @@ useObjectStorage: "オブジェクトストレージを使う"
objectStorageBaseUrl: "Base URL"
objectStorageBaseUrlDesc: "参照に使うにURLやで。CDNやProxyを使用してるんならそのURL、S3: 'https://<bucket>.s3.amazonaws.com'、GCSとかなら: 'https://storage.googleapis.com/<bucket>'。"
objectStorageBucket: "Bucket"
objectStorageBucketDesc: "使ってるサービスのbucket名を選んでな"
objectStoragePrefix: "Prefix"
objectStoragePrefixDesc: "このprefixのディレクトリ下に格納されるで"
objectStorageEndpoint: "Endpoint"
objectStorageEndpointDesc: "S3のときは空、それ以外は各サービスのendpointを指定してなー。'<host>'ってやるか'<host>:<port>'みたいに指定するんやで。"
objectStorageRegion: "Region"
objectStorageRegionDesc: "'xx-east-1'みたいなregionを指定したってやー。使ってるサービスにregionの概念がないときは、空か'us-east-1'にするんやで。"
objectStorageUseSSL: "SSLを使う"
objectStorageUseSSLDesc: "API接続にhttpsを使わん場合はオフにするんやで"
objectStorageUseProxy: "Proxyを使う"
objectStorageUseProxyDesc: "API接続にproxy使わんのやったら切ってくれへん"
objectStorageSetPublicRead: "アップロードした時に'public-read'を設定してや"
@@ -517,29 +535,52 @@ removeAllFollowing: "フォローを全解除"
removeAllFollowingDescription: "{host}からのフォローをすべて解除するで。そのインスタンスが消えて無くなった時とかには便利な機能やで。"
userSuspended: "このユーザーは...凍結されとる。"
userSilenced: "このユーザーは...サイレンスされとる。"
yourAccountSuspendedTitle: "あんたのアカウント凍結されとるで"
yourAccountSuspendedDescription: "あんたのアカウントは、サーバーの利用規約に違反したとかの理由で、凍結されとるで。細かいことは管理者までお問い合わせたってなー。絶対に新しいアカウント作ったらあかんで。絶対やで。"
menu: "メニュー"
divider: "分割線"
addItem: "項目を追加"
relays: "リレー"
addRelay: "リレーの追加"
inboxUrl: "inboxのURL"
addedRelays: "追加済みのリレー"
serviceworkerInfo: "プッシュ通知をするんなら有効にせなあかんで。"
deletedNote: "消された投稿"
invisibleNote: "非公開の投稿"
enableInfiniteScroll: "自動でもっと見る"
visibility: "公開範囲"
poll: "アンケート"
useCw: "内容を隠す"
enablePlayer: "プレイヤーを開く"
disablePlayer: "プレイヤーを閉じる"
expandTweet: "ツイートを展開する"
themeEditor: "テーマエディター"
description: "説明"
describeFile: "キャプションを付ける"
enterFileDescription: "キャプションを入力"
author: "作者"
leaveConfirm: "未保存の変更があるで!ほかしてええか?"
manage: "管理"
plugins: "プラグイン"
deck: "デッキ"
undeck: "デッキ解除"
useBlurEffectForModal: "モーダルにぼかし効果を使用"
useFullReactionPicker: "フル機能にリアクションピッカーを使用"
width: "幅"
height: "高さ"
large: "大"
medium: "中"
small: "小"
generateAccessToken: "アクセストークンの発行"
permission: "権限"
enableAll: "全部使えるようにする"
disableAll: "全部使えへんようにする"
tokenRequested: "アカウントへのアクセス許可"
pluginTokenRequestedDescription: "このプラグインはここで設定した権限を使えるようになるで。"
notificationType: "通知の種類"
edit: "編集"
useStarForReactionFallback: "リアクションがようわからん場合、★を使う"
emailServer: "メールサーバー"
enableEmail: "メール配信を受け取る"
emailConfigInfo: "メールアドレスの確認とかパスワードリセットの時に使うで"
email: "メール"
@@ -551,8 +592,12 @@ smtpUser: "ユーザー名"
smtpPass: "パスワード"
emptyToDisableSmtpAuth: "ユーザー名とパスワードになんも入れんかったら、SMTP認証を無効化するで"
smtpSecure: "SMTP 接続に暗黙的なSSL/TLSを使用する"
smtpSecureInfo: "STARTTLS使っとる時はオフにするで。"
testEmail: "配信テスト"
wordMute: "ワードミュート"
regexpError: "正規表現エラー"
regexpErrorDescription: "{tab}ワードミュートの{line}行目の正規表現にエラーが出てきたで:"
instanceMute: "インスタンスミュート"
userSaysSomething: "{name}が何か言ったようやで"
makeActive: "使うで"
display: "表示"
@@ -567,13 +612,24 @@ create: "作成"
notificationSetting: "通知設定"
notificationSettingDesc: "表示する通知の種類えらんでや。"
useGlobalSetting: "グローバル設定を使ってや"
useGlobalSettingDesc: "オンにすると、アカウントの通知設定が使われるで。オフにすると、別々に設定できるようになるで。"
other: "その他"
regenerateLoginToken: "ログイントークンを再生成"
regenerateLoginTokenDescription: "ログインに使われる内部トークンをもっかい作るで。いつもならこれをやる必要はないで。もっかい作ると、全部のデバイスでログアウトされるで気ぃつけてなー。"
setMultipleBySeparatingWithSpace: "スペースで区切って複数設定できるで。"
fileIdOrUrl: "ファイルIDかURL"
behavior: "動作"
sample: "サンプル"
abuseReports: "通報"
reportAbuse: "通報"
reportAbuseOf: "{name}を通報する"
fillAbuseReportDescription: "細かい通報理由を書いてなー。対象ートがある時はそのURLも書いといてなー。"
abuseReported: "無事内容が送信されたみたいやで。おおきに〜。"
reporter: "通報者"
reporteeOrigin: "通報先"
reporterOrigin: "通報元"
forwardReport: "リモートインスタンスに通報を転送するで"
forwardReportIsAnonymous: "リモートインスタンスからはあんたの情報は見れへんくって、匿名のシステムアカウントとして表示されるで。"
send: "送信"
abuseMarkAsResolved: "対応したで"
openInNewTab: "新しいタブで開く"
@@ -587,22 +643,57 @@ system: "システム"
switchUi: "UI切り替え"
desktop: "デスクトップ"
clip: "クリップ"
createNew: "新しく作るで"
optional: "任意"
createNewClip: "新しいクリップを作るで"
unclip: "クリップ解除するで"
confirmToUnclipAlreadyClippedNote: "このノートはすでにクリップ「{name}」に含まれとるで。ノートをこのクリップから除外したる?"
public: "パブリック"
i18nInfo: "Misskeyは有志によっていろんな言語に翻訳されとるで。{link}で翻訳に協力したってやー。"
manageAccessTokens: "アクセストークンの管理"
accountInfo: "アカウント情報"
notesCount: "ノートの数やで"
repliesCount: "返信した数やで"
renotesCount: "Renoteした数やで"
repliedCount: "返信された数やで"
renotedCount: "Renoteされた数やで"
followingCount: "フォロー数やで"
followersCount: "フォロワー数やで"
sentReactionsCount: "リアクションした数やで"
receivedReactionsCount: "リアクションされた数"
pollVotesCount: "アンケートに投票した数"
pollVotedCount: "アンケートに投票された数"
yes: "はい"
no: "いいえ"
driveFilesCount: "ドライブのファイル数"
driveUsage: "ドライブ使用量やで"
noCrawle: "クローラーによるインデックスを拒否するで"
noCrawleDescription: "検索エンジンにあんたのユーザーページ、ート、Pagesとかのコンテンツを登録(インデックス)せぇへんように頼むで。"
lockedAccountInfo: "フォローを承認制にしとっても、ノートの公開範囲を「フォロワー」にせぇへん限り、誰でもあんたのノートを見れるで。"
alwaysMarkSensitive: "デフォルトでメディアを閲覧注意にするで"
loadRawImages: "添付画像のサムネイルをオリジナル画質にするで"
disableShowingAnimatedImages: "アニメーション画像を再生しやへんで"
verificationEmailSent: "無事確認のメールを送れたで。メールに書いてあるリンクにアクセスして、設定を完了してなー。"
notSet: "未設定"
emailVerified: "メールアドレスは確認されたで"
noteFavoritesCount: "お気に入りノートの数やで"
pageLikesCount: "Pageにええやんと思った数"
pageLikedCount: "Pageにええやんと思ってくれた数"
contact: "連絡先"
useSystemFont: "システムのデフォルトのフォントを使うで"
clips: "クリップ"
experimentalFeatures: "実験的機能やで"
developer: "開発者やで"
makeExplorable: "アカウントを見つけやすくするで"
makeExplorableDescription: "オフにすると、「みつける」にアカウントが載らんくなるで。"
showGapBetweenNotesInTimeline: "タイムラインのノートを放して表示するで"
duplicate: "複製"
left: "左"
center: "中央"
wide: "広い"
narrow: "狭い"
reloadToApplySetting: "設定はページリロード後に反映されるで。今リロードしとくか?"
needReloadToApply: "反映には再起動せなあかんで"
showTitlebar: "タイトルバーを見せる"
clearCache: "キャッシュをほかす"
onlineUsersCount: "{n}人が起きとるで"
@@ -621,6 +712,7 @@ createdAt: "作成した日"
updatedAt: "更新日時"
saveConfirm: "保存するで?"
deleteConfirm: "ホンマに削除するで?"
invalidValue: "有効な値じゃないみたいやで。"
registry: "レジストリ"
closeAccount: "アカウントを閉鎖する"
currentVersion: "現在のバージョン"
@@ -634,6 +726,7 @@ editCode: "コードを編集"
apply: "適用"
receiveAnnouncementFromInstance: "インスタンスからのお知らせを受け取る"
emailNotification: "メール通知"
publish: "公開"
inChannelSearch: "チャンネル内検索"
useReactionPickerForContextMenu: "右クリックでリアクションピッカーを開くようにする"
typingUsers: "{users}が今書きよるで"
@@ -642,21 +735,121 @@ showingPastTimeline: "過去のタイムラインを表示してるで"
clear: "クリア"
markAllAsRead: "もうみな読んでもうたわ"
goBack: "戻る"
unlikeConfirm: "いいね解除するんか?"
fullView: "フルビュー"
quitFullView: "フルビュー解除"
addDescription: "説明を追加するで"
userPagePinTip: "個々のノートのメニューから「ピン留め」を選んどくと、ここにノートを表示しておけるで。"
notSpecifiedMentionWarning: "宛先に含まれてへんメンションがあるで"
info: "情報"
userInfo: "ユーザー情報やで"
unknown: "不明"
onlineStatus: "オンライン状態"
hideOnlineStatus: "オンライン状態を隠すで"
hideOnlineStatusDescription: "オンライン状態を隠すと、検索とかの一部の機能で使いにくくなるかもしれんよ。"
online: "オンライン"
active: "アクティブ"
offline: "オフライン"
notRecommended: "あんま推奨しやんで"
botProtection: "Botプロテクション"
instanceBlocking: "インスタンスブロック"
selectAccount: "アカウントを選んでなー"
switchAccount: "アカウントを変えるで"
enabled: "有効"
disabled: "無効"
quickAction: "クイックアクション"
user: "ユーザー"
administration: "管理"
accounts: "アカウント"
switch: "切り替え"
noMaintainerInformationWarning: "管理者情報が設定されてへんで"
noBotProtectionWarning: "Botプロテクションが設定されてへんで。"
configure: "設定する"
postToGallery: "ギャラリーへ投稿"
gallery: "ギャラリー"
recentPosts: "最近の投稿"
popularPosts: "人気の投稿"
shareWithNote: "ノートで共有"
ads: "広告"
expiration: "期限"
memo: "メモ"
priority: "優先度"
high: "高い"
middle: "中"
low: "低い"
emailNotConfiguredWarning: "メアドの設定がされてへんで。"
ratio: "比率"
previewNoteText: "本文を下見するで"
customCss: "カスタムCSS"
customCssWarn: "この設定は必ず知識のある人がやらなあかんで。あんま良くない設定をしたるとクライアントがちゃんと使えへんくなってくで。"
global: "グローバル"
squareAvatars: "アイコンを四角形で表示するで"
sent: "送信"
received: "受信"
searchResult: "検索結果やで"
hashtags: "ハッシュタグ"
troubleshooting: "トラブルシューティング"
useBlurEffect: "UIにぼかし効果を使うで"
learnMore: "詳しく"
misskeyUpdated: "Misskeyが更新されたで\nモデレーターの人らに感謝せなあかんで"
whatIsNew: "更新情報を見るで"
translate: "翻訳"
translatedFrom: "{x}から翻訳するで"
accountDeletionInProgress: "アカウント削除しとるで待っとってなー"
usernameInfo: "サーバー上であんたのアカウントをあんたやと分かるようにするための名前やで。アルファベット(a~z, A~Z)、数字(0~9)、それとアンダーバー(_)が使って考えてな。この名前は後から変更することはできへんからちゃんと考えるんやで。"
aiChanMode: "藍モードやで"
keepCw: "CWを維持するで"
pubSub: "Pub/Subのアカウント"
lastCommunication: "直近の通信"
resolved: "解決したで"
unresolved: "まだ解決してないで"
breakFollow: "フォロワーを解除するで"
itsOn: "オンになっとるよ"
hide: "隠す"
searchByGoogle: "探す"
indefinitely: "無期限"
file: "ファイル"
requireAdminForView: "これを見るには管理者アカウントでログインしとらなあかんで。"
isSystemAccount: "システムが自動で作成・管理しとるアカウントやで。"
typeToConfirm: "この操作をやるんなら {x} と入力してなー"
deleteAccount: "アカウント削除するで"
document: "ドキュメント"
numberOfPageCache: "ページキャッシュ数やで"
numberOfPageCacheDescription: "増やすと使いやすくなる、負荷とメモリ使用量が増えてくで。一長一短やな。"
logoutConfirm: "ログアウトしまっか?"
lastActiveDate: "最後に使った日時"
statusbar: "ステータスバー"
pleaseSelect: "選択したってやー"
reverse: "反転"
colored: "色付き"
refreshInterval: "更新間隔"
label: "ラベル"
type: "タイプ"
speed: "速度"
slow: "遅い"
fast: "速い"
sensitiveMediaDetection: "センシティブなメディアの検出"
localOnly: "ローカルのみ"
remoteOnly: "リモートのみ"
failedToUpload: "アップロードに失敗したで"
cannotUploadBecauseInappropriate: "不適切な内容を含むかもしれへんって判定されたでアップロードできまへん。"
cannotUploadBecauseNoFreeSpace: "ドライブの空き容量が無いでアップロードできまへん。"
beta: "ベータ"
enableAutoSensitive: "自動NSFW判定"
enableAutoSensitiveDescription: "使える時は、機械学習を使って自動でメディアにNSFWフラグを設定するで。この機能をオフにしても、インスタンスによっては自動で設定されることがあるで。"
activeEmailValidationDescription: "ユーザーのメールアドレスのバリデーションを、捨てアドかどうかや実際に通信可能かどうかとかを判定して積極的に行うで。オフにすると単に文字列として正しいかどうかだけチェックするで。"
navbar: "ナビゲーションバー"
shuffle: "シャッフルするで"
account: "アカウント"
move: "移動するで"
_sensitiveMediaDetection:
description: "機械学習を使って自動でセンシティブなメディアを検出して、モデレーションに役立てることができるで。サーバーの負荷が少し増えてまうなあ。"
sensitivity: "検出感度やで"
sensitivityDescription: "感度を低くすると、誤検知(偽陽性)が減るで。感度を高くすると、検知漏れ(偽陰性)が減るで。"
setSensitiveFlagAutomatically: "NSFWフラグを設定するで"
setSensitiveFlagAutomaticallyDescription: "この設定をオフにしても内部的に判定結果は保持されるで。"
_ffVisibility:
public: "公開"
_ad:
back: "戻る"
_gallery:
@@ -1207,8 +1400,6 @@ _notification:
_deck:
alwaysShowMainColumn: "いつもメインカラムを表示"
columnAlign: "カラムの寄せ"
columnMargin: "カラム間のマージン"
columnHeaderHeight: "カラムのヘッダー幅"
addColumn: "カラムを追加"
swapLeft: "左に移動"
swapRight: "右に移動"

View File

@@ -56,6 +56,8 @@ emailNotification: "Ilɣa imayl"
selectAccount: "Fren amiḍan"
accounts: "Imiḍan"
searchByGoogle: "Nadi"
file: "Ifuyla"
account: "Imiḍan"
_email:
_follow:
title: "Yeṭṭafaṛ-ik·em-id"

View File

@@ -60,6 +60,7 @@ smtpUser: "ಬಳಕೆಹೆಸರು"
smtpPass: "ಗುಪ್ತಪದ"
user: "ಬಳಕೆದಾರ"
searchByGoogle: "ಹುಡುಕು"
file: "ಕಡತಗಳು"
_email:
_follow:
title: "ಹಿಂಬಾಲಿಸಿದರು"

View File

@@ -52,6 +52,7 @@ searchUser: "사용자 검색"
reply: "답글"
loadMore: "더 보기"
showMore: "더 보기"
showLess: "닫기"
youGotNewFollower: "새로운 팔로워가 있습니다"
receiveFollowRequest: "새로운 팔로우 요청이 있습니다"
followRequestAccepted: "팔로우가 수락되었습니다"
@@ -203,6 +204,7 @@ done: "완료"
processing: "처리중"
preview: "미리보기"
default: "기본값"
defaultValueIs: "기본값: {value}"
noCustomEmojis: "이모지가 없습니다"
noJobs: "작업이 없습니다"
federating: "연합 중"
@@ -381,6 +383,7 @@ administrator: "관리자"
token: "토큰"
twoStepAuthentication: "2단계 인증"
moderator: "모더레이터"
moderation: "모더레이션"
nUsersMentioned: "{n}명이 언급함"
securityKey: "보안 키"
securityKeyName: "키 이름"
@@ -643,6 +646,8 @@ clip: "클립"
createNew: "새로 만들기"
optional: "옵션"
createNewClip: "새 클립 만들기"
unclip: "클립 해제"
confirmToUnclipAlreadyClippedNote: "이 노트는 이미 \"{name}\" 클립에 포함되어 있습니다. 클립을 해제하시겠습니까?"
public: "공개"
i18nInfo: "Misskey는 자원봉사자들에 의해 다양한 언어로 번역되고 있습니다. {link}에서 번역에 참가할 수 있습니다."
manageAccessTokens: "액세스 토큰 관리"
@@ -845,6 +850,55 @@ failedToFetchAccountInformation: "계정 정보를 가져오지 못했습니다"
rateLimitExceeded: "요청 제한 횟수를 초과하였습니다"
cropImage: "이미지 자르기"
cropImageAsk: "이미지를 자르시겠습니까?"
file: "파일"
recentNHours: "최근 {n}시간"
recentNDays: "최근 {n}일"
noEmailServerWarning: "메일 서버가 설정되어 있지 않습니다."
thereIsUnresolvedAbuseReportWarning: "해결되지 않은 신고가 있습니다."
recommended: "추천"
check: "체크"
driveCapOverrideLabel: "이 유저의 드라이브 용량을 변경"
driveCapOverrideCaption: "0 이하를 지정하면 해제됩니다."
requireAdminForView: "열람하려면 관리자 계정으로 로그인해야 합니다."
isSystemAccount: "시스템에 의해 자동으로 생성되어 관리되는 계정입니다."
typeToConfirm: "계속하시려면 {x} 을 입력하세요"
deleteAccount: "계정 삭제"
document: "문서"
numberOfPageCache: "페이지 캐시 수"
numberOfPageCacheDescription: "숫자가 클 수록 편리성이 높아지지만, 시스템 자원과 메모리를 더 많이 사용합니다."
logoutConfirm: "로그아웃 하시겠습니까?"
lastActiveDate: "마지막 이용"
pleaseSelect: "선택해 주세요"
reverse: "플립"
colored: "색 입히기"
refreshInterval: "업데이트 주기"
label: "라벨"
type: "종류"
speed: "속도"
slow: "느리게"
fast: "빠르게"
sensitiveMediaDetection: "민감한 미디어 탐지"
localOnly: "로컬에만"
remoteOnly: "리모트만"
failedToUpload: "업로드 실패"
cannotUploadBecauseInappropriate: "이 파일은 부적절한 내용을 포함한다고 판단되어 업로드할 수 없습니다."
cannotUploadBecauseNoFreeSpace: "드라이브 용량이 부족하여 업로드할 수 없습니다."
beta: "베타"
enableAutoSensitive: "자동 NSFW 탐지"
enableAutoSensitiveDescription: "이용 가능할 경우 기계학습을 통해 자동으로 미디어 NSFW를 설정합니다. 이 기능을 해제하더라도, 인스턴스 정책에 따라 자동으로 설정될 수 있습니다."
activeEmailValidationDescription: "유저가 입력한 메일 주소가 일회용 메일인지, 실제로 통신할 수 있는 지 엄격하게 검사합니다. 해제할 경우 이메일 형식에 대해서만 검사합니다."
navbar: "네비게이션 바"
shuffle: "셔플"
account: "계정"
move: "이동"
_sensitiveMediaDetection:
description: "기계학습을 통해 자동으로 민감한 미디어를 탐지하여, 모더레이션에 참고할 수 있도록 합니다. 서버의 부하를 약간 증가시킵니다."
sensitivity: "탐지 민감도"
sensitivityDescription: "민감도가 낮을수록 안전한 미디어가 잘못 탐지될 확률이 줄어들며, 높을수록 민감한 미디어가 탐지되지 않을 확률이 줄어듭니다."
setSensitiveFlagAutomatically: "자동으로 NSFW로 설정하기"
setSensitiveFlagAutomaticallyDescription: "이 설정을 해제해도 탐지 결과는 유지됩니다."
analyzeVideos: "동영상도 같이 확인하기"
analyzeVideosDescription: "사진 뿐만 아니라 동영상의 NSFW 여부도 탐지합니다. 서버의 부하를 약간 증가시킵니다."
_emailUnavailable:
used: "이 메일 주소는 사용중입니다"
format: "형식이 올바르지 않습니다"
@@ -970,6 +1024,8 @@ _mfm:
sparkleDescription: "반짝이는 파티클 효과를 추가합니다."
rotate: "회전"
rotateDescription: "지정한 각도로 회전시킵니다."
plain: "평문"
plainDescription: "안에 있는 MFM 구문을 모두 무시하고 평문으로 표시합니다."
_instanceTicker:
none: "보이지 않음"
remote: "리모트 유저에게만 보이기"
@@ -1203,6 +1259,7 @@ _widgets:
photos: "사진"
digitalClock: "디지털 시계"
federation: "연합"
instanceCloud: "인스턴스 구름"
postForm: "글 입력란"
slideshow: "슬라이드 쇼"
button: "버튼"
@@ -1640,9 +1697,8 @@ _notification:
_deck:
alwaysShowMainColumn: "메인 칼럼 항상 표시"
columnAlign: "칼럼 정렬"
columnMargin: "칼럼 간 여백"
columnHeaderHeight: "칼럼 헤더 폭"
addColumn: "칼럼 추가"
configureColumn: "칼럼 설정"
swapLeft: "왼쪽으로 이동"
swapRight: "오른쪽으로 이동"
swapUp: "위로 이동"
@@ -1650,6 +1706,11 @@ _deck:
stackLeft: "왼쪽에 쌓기"
popRight: "오른쪽으로 빼기"
profile: "프로파일"
newProfile: "새 프로파일"
deleteProfile: "프로파일 삭제"
introduction: "칼럼을 조합해서 나만의 인터페이스를 구성해 보아요!"
introduction2: "나중에라도 화면 우측의 + 버튼을 눌러 새 칼럼을 추가할 수 있습니다."
widgetsIntroduction: "칼럼 메뉴의 \"위젯 편집\"에서 위젯을 추가해 주세요"
_columns:
main: "메인"
widgets: "위젯"

View File

@@ -305,6 +305,7 @@ hide: "Verbergen"
searchByGoogle: "Zoeken"
cropImage: "Afbeelding bijsnijden"
cropImageAsk: "Bijsnijdengevraagd"
file: "Bestanden"
_email:
_follow:
title: "volgde jou"

View File

@@ -52,6 +52,7 @@ searchUser: "Wyszukiwanie użytkowników"
reply: "Odpowiedz"
loadMore: "Załaduj więcej"
showMore: "Załaduj więcej"
showLess: "Zamknij"
youGotNewFollower: "Zaobserwował(a) Cię"
receiveFollowRequest: "Otrzymano prośbę o możliwość obserwacji"
followRequestAccepted: "Zaakceptowano prośbę o możliwość obserwacji"
@@ -760,6 +761,11 @@ pubSub: "Konta Pub/Sub"
hide: "Ukryj"
searchByGoogle: "Szukaj"
indefinitely: "Nigdy"
file: "Pliki"
reverse: "Odwróć"
colored: "Kolorowe"
label: "Etykieta"
account: "Konta"
_ffVisibility:
public: "Publikuj"
_ad:
@@ -1406,8 +1412,6 @@ _notification:
_deck:
alwaysShowMainColumn: "Zawsze pokazuj główną kolumnę"
columnAlign: "Wyrównaj kolumny"
columnMargin: "Odstęp między kolumnami"
columnHeaderHeight: "Wysokość nagłówka kolumny"
addColumn: "Dodaj kolumnę"
swapLeft: "Przesuń w lewo"
swapRight: "Przesuń w prawo"

View File

@@ -1,9 +1,9 @@
---
_lang_: "Português"
headlineMisskey: "Rede conectada por notas"
headlineMisskey: "Uma rede ligada por notas"
introMisskey: "Bem-vindo! Misskey é um serviço de microblogue descentralizado de código aberto.\nCria \"notas\" e partilha o que te ocorre com todos à tua volta. 📡\nCom \"reações\" podes também expressar logo o que sentes às notas de todos. 👍\nExploremos um novo mundo! 🚀"
monthAndDay: "{day}/{month}"
search: "Pesquisar"
search: "Buscar"
notifications: "Notificações"
username: "Nome de usuário"
password: "Senha"
@@ -52,6 +52,7 @@ searchUser: "Pesquisar utilizador"
reply: "Responder"
loadMore: "Carregar mais"
showMore: "Ver mais"
showLess: "Fechar"
youGotNewFollower: "Você tem um novo seguidor"
receiveFollowRequest: "Pedido de seguimento recebido"
followRequestAccepted: "Pedido de seguir aceito"
@@ -94,6 +95,7 @@ unfollow: "Deixar de seguir"
followRequestPending: "Pedido de seguimento pendente"
enterEmoji: "Inserir emoji"
renote: "Repostar"
unrenote: "Desmarcar"
renoted: "Repostado"
cantRenote: "Não pode repostar"
cantReRenote: "Não pode repostar este repost"
@@ -106,6 +108,7 @@ sensitive: "Conteúdo sensível"
add: "Adicionar"
reaction: "Reações"
reactionSetting: "Quais reações a mostrar no selecionador de reações"
reactionSettingDescription2: "Arraste para reordenar, clique para excluir, pressione + para adicionar."
rememberNoteVisibility: "Lembrar das configurações de visibilidade de notas"
attachCancel: "Remover anexo"
markAsSensitive: "Marcar como sensível"
@@ -133,35 +136,339 @@ emojiName: "Nome do Emoji"
emojiUrl: "URL do Emoji"
addEmoji: "Adicionar um Emoji"
settingGuide: "Guia de configuração"
cacheRemoteFiles: "Memória transitória de arquivos remotos"
cacheRemoteFilesDescription: "Se você desabilitar essa configuração, os arquivos remotos não serão armazenados em memória transitória e serão vinculados diretamente. Economiza o armazenamento do servidor, mas não gera miniaturas, o que aumenta o tráfego."
flagAsBot: "Marcar conta como robô"
flagAsBotDescription: "Se esta conta for operada por um programa, ative este sinalizador. Quando ativado, serve como um sinalizador para evitar o encadeamento de reações para outros programadores, e o manuseio do sistema do Misskey é adequado para bots."
flagAsCat: "Marcar conta como gato"
flagAsCatDescription: "Ative essa opção para marcar essa conta como gato."
flagShowTimelineReplies: "Mostrar respostas na linha de tempo"
flagShowTimelineRepliesDescription: "Quando ativado, a linha do tempo mostra as respostas às outras notas do utilizador, além da nota do utilizador."
autoAcceptFollowed: "Aprove automaticamente os seguidores dos seguintes utilizadores"
addAccount: "Adicionar Conta"
loginFailed: "Não consegui logar"
showOnRemote: "Exibir remotamente"
general: "Geral"
wallpaper: "Papel de parede"
setWallpaper: "Definir papel de parede"
removeWallpaper: "Remover papel de parede"
searchWith: "Buscar: {q}"
youHaveNoLists: "Não tem nenhuma lista"
followConfirm: "Tem certeza que quer deixar de seguir {name}?"
proxyAccount: "Conta proxy"
proxyAccountDescription: "Uma conta proxy é uma conta que atua como seguidora remota para utilizadores sob determinadas condições. Por exemplo, quando um utilizador lista um utilizador remoto, a atividade não será entregue à instância, a menos que alguém esteja seguindo o utilizador listado, portanto, a conta proxy deve seguir."
host: "hospedeiro"
selectUser: "Selecionar utilizador"
recipient: "Morada"
annotation: "Anotação"
federation: "União"
instances: "Instância"
registeredAt: "Registrado em"
latestRequestSentAt: "Enviar a solicitação mais recente"
latestRequestReceivedAt: "Recebeu a última solicitação"
latestStatus: "Status mais recente"
storageUsage: "Uso de armazenamento"
charts: "gráfico"
perHour: "por hora"
perDay: "por dia"
stopActivityDelivery: "Parar a entrega de atividades"
blockThisInstance: "Bloquear esta instância"
operations: "operar"
software: "Programas"
version: "versão"
metadata: "Metadados"
withNFiles: "{n} Um arquivo"
monitor: "monitor"
jobQueue: "Fila de trabalhos"
cpuAndMemory: "CPU e memória"
network: "rede"
disk: "disco"
instanceInfo: "Informações da instância"
statistics: "Estatisticas"
clearQueue: "Limpar a fila"
clearQueueConfirmTitle: "Quer limpar a fila?"
clearQueueConfirmText: "Postagens não entregues não serão mais entregues. Normalmente você não precisa fazer isso."
clearCachedFiles: "Limpar memória transitória"
clearCachedFilesConfirm: "Tem certeza de que deseja excluir todos os arquivos remotos armazenados em memória transitória?"
blockedInstances: "Instância bloqueada"
blockedInstancesDescription: "Defina os anfitriões das instâncias que deseja bloquear, separados por quebras de linha. Uma instância bloqueada não poderá interagir com esta instância."
muteAndBlock: "Silenciar e bloquear"
mutedUsers: "Silenciar utilizador"
blockedUsers: "Utilizadores bloqueados"
noUsers: "Sem usuários"
editProfile: "Editar Perfil"
noteDeleteConfirm: "Deseja excluir esta nota?"
pinLimitExceeded: "Não consigo mais fixar"
intro: "A instalação do Misskey está completa! Crie uma conta de administrador."
done: "Concluído"
processing: "Em Progresso"
preview: "Pré-visualizar"
default: "Padrão"
noCustomEmojis: "Não há emojis"
noJobs: "Sem trabalho"
federating: "federar"
blocked: "Bloqueado"
suspended: "Cancelar subscrição"
all: "Todos"
subscribing: "Subscrito"
publishing: "Executando"
notResponding: "Sem resposta"
instanceFollowing: "Seguir a instância"
instanceFollowers: "Seguidores da instância"
instanceUsers: "Utilizador da instância"
changePassword: "Mudar senha"
security: "Segurança"
retypedNotMatch: "As entradas não coincidem."
currentPassword: "Palavra-passe atual"
newPassword: "Nova palavra-passe"
newPasswordRetype: "Nova senha (redigite)"
attachFile: "Anexar arquivo"
more: "Mais!"
featured: "Destaques"
usernameOrUserId: "Nome de utilizador ou ID de utilizador"
noSuchUser: "Utilizador não encontrado"
lookup: "Buscando"
announcements: "Notícia"
imageUrl: "URL da imagem"
remove: "Eliminar"
removed: "Foi deletado"
removeAreYouSure: "Deseja excluir \"{x}\"?"
deleteAreYouSure: "Deseja excluir \"{x}\"?"
resetAreYouSure: "Redefinir agora?"
saved: "Salvo"
messaging: "Chat"
upload: "Enviando"
keepOriginalUploading: "Manter a imagem original"
keepOriginalUploadingDescription: "Mantenha a versão original ao carregar a imagem. Quando desligado, a imagem para publicação na web será gerada no navegador no momento do upload."
fromDrive: "\nDa unidade"
fromUrl: "Da URL"
uploadFromUrl: "Carregamento de URL"
uploadFromUrlDescription: "URL do arquivo que você deseja enviar"
uploadFromUrlRequested: "Upload solicitado"
uploadFromUrlMayTakeTime: "Pode levar algum tempo para que o upload seja concluído."
explore: "Explorar"
messageRead: "Lida"
noMoreHistory: "Sem mais história"
startMessaging: "Iniciar conversação"
nUsersRead: "{n} Pessoas leem"
agreeTo: "Eu concordo com {0}"
tos: "Termos de serviço"
start: "começar"
home: "casa"
remoteUserCaution: "As informações estão incompletas porque é um utilizador remoto."
activity: "atividade"
images: "imagem"
birthday: "aniversário"
yearsOld: "{age} anos"
registeredDate: "Data de registro"
location: "Lugar, colocar"
theme: "tema"
themeForLightMode: "Temas usados no modo de luz"
themeForDarkMode: "Temas usados no modo escuro"
light: "Claro"
dark: "Escuro"
lightThemes: "Tema claro"
darkThemes: "Tema escuro"
syncDeviceDarkMode: "Sincronize com o modo escuro do dispositivo"
drive: "Unidades"
fileName: "Nome do Ficheiro"
selectFile: "Selecione os arquivos"
selectFiles: "Selecione os arquivos"
selectFolder: "Selecionar uma pasta"
selectFolders: "Selecionar uma pasta"
renameFile: "Renomear ficheiro"
folderName: "Nome da pasta"
createFolder: "Criar pasta"
renameFolder: "Renomear Pasta"
deleteFolder: "Eliminar Pasta"
addFile: "Adicionar arquivo"
emptyDrive: "A unidade está vazia"
emptyFolder: "A pasta está vazia"
unableToDelete: "Não é possível eliminar"
inputNewFileName: "Por favor, digite um novo nome para a pasta!"
inputNewDescription: "Insira uma nova legenda"
inputNewFolderName: "Por favor, digite um novo nome para a pasta!"
circularReferenceFolder: "A pasta de destino é uma subpasta da pasta que você deseja mover."
hasChildFilesOrFolders: "Esta pasta não está vazia e não pode ser excluída."
copyUrl: "Copiar URL"
rename: "Renomear"
avatar: "Avatar"
banner: "Capa"
nsfw: "Conteúdo sensível"
whenServerDisconnected: "Quando a conexão com o servidor é perdida"
disconnectedFromServer: "Desconectado do servidor"
reload: "Recarregar"
doNothing: "Nenhuma ação adicional"
reloadConfirm: "Quer recarregar?"
watch: "ver"
unwatch: "Não observar"
accept: "Aceitar"
reject: "Rejeitar"
normal: "Normal"
instanceName: "Nome da instância"
instanceDescription: "Descrição da instância"
maintainerName: "Nome do administrador"
maintainerEmail: "E-mail do Administrador:"
tosUrl: "URL dos Termos de Uso"
thisYear: "Este ano"
thisMonth: "Este mês"
today: "Hoje"
dayX: " Dia {day}"
monthX: "mês de {month}"
yearX: "Ano {year}"
pages: "Páginas"
integration: "Integração"
connectService: "Conectar"
disconnectService: "Desconectar"
enableLocalTimeline: "Ativar linha do tempo local"
enableGlobalTimeline: "Ativar linha do tempo global"
disablingTimelinesInfo: "Se você desabilitar essas linhas do tempo, administradores e moderadores ainda poderão usá-las por conveniência."
registration: "Registar"
enableRegistration: "Permitir que qualquer pessoa se registre"
invite: "Convidar"
driveCapacityPerLocalAccount: "Capacidade da unidade por utilizador local"
driveCapacityPerRemoteAccount: "Capacidade da unidade por utilizador remoto"
inMb: "Em megabytes"
iconUrl: "URL da imagem do ícone (favicon, etc.)"
bannerUrl: "URL da imagem do banner"
backgroundImageUrl: "URL da imagem de fundo"
basicInfo: "Informações básicas"
pinnedUsers: "Utilizador fixado"
pinnedUsersDescription: "Descreva os utilizadores que você deseja fixar na página \"Localizar\", etc., separados por quebras de linha."
pinnedPages: "Página fixada"
pinnedPagesDescription: "Descreva o caminho da página que você deseja fixar na página superior da instância, separada por quebras de linha."
pinnedClipId: "ID do clipe a ser fixado"
pinnedNotes: "Post fixado"
hcaptcha: "hCaptcha"
enableHcaptcha: "Ativar hCaptcha"
hcaptchaSiteKey: "Chave do sítio web"
hcaptchaSecretKey: "Chave secreta"
recaptcha: "reCAPTCHA"
enableRecaptcha: "Habilitar reCAPTCHA"
recaptchaSiteKey: "Chave do sítio web"
recaptchaSecretKey: "Chave secreta"
avoidMultiCaptchaConfirm: "O uso de vários captchas pode causar interferência. Deseja desativar outros captchas? Você também pode cancelar e deixar vários captchas ativados."
antennas: "Antenas"
manageAntennas: "Gestão de antena"
name: "Nome"
antennaSource: "Origem de entrada"
antennaKeywords: "Palavras-chave recebidas"
antennaExcludeKeywords: "Palavras-chave negativas"
antennaKeywordsDescription: "Se você separá-lo com um espaço, será uma especificação AND, e se você separá-lo com uma quebra de linha, será uma especificação OR."
notifyAntenna: "Notificar novas notas"
withFileAntenna: "Apenas notas com arquivos anexados"
enableServiceworker: "Ative as notificações push para o seu navegador"
antennaUsersDescription: "Especificar nomes de utilizador separados por quebras de linha"
caseSensitive: "Maiúsculas e minúsculas"
withReplies: "Incluindo resposta"
connectedTo: "Você está conectado à seguinte conta"
notesAndReplies: "Publicações e respostas"
withFiles: "Com arquivo"
silence: "Silenciado"
silenceConfirm: "Quer silenciar?"
unsilence: "Liberar silenciar"
unsilenceConfirm: "Quer liberar o silêncio?"
popularUsers: "Utilizadores populares"
recentlyUpdatedUsers: "Utilizadores postados recentemente"
recentlyRegisteredUsers: "Utilizadores registrados recentemente"
recentlyDiscoveredUsers: "Utilizadores descobertos recentemente"
exploreUsersCount: "Há um utilizador de {count}"
exploreFediverse: "Explorar Fediverse"
popularTags: "Tags populares"
userList: "Listas"
about: "Informações"
aboutMisskey: "Sobre Misskey"
administrator: "Administrador"
token: "Símbolo"
twoStepAuthentication: "Verificação em duas etapas"
moderator: "Moderador"
nUsersMentioned: "Postado por {n} pessoas"
securityKey: "Chave de segurança"
securityKeyName: "Nome chave"
registerSecurityKey: "Registre a chave de segurança"
lastUsed: "Último uso"
unregister: "Cancelar registro"
passwordLessLogin: "Entrar sem senha"
resetPassword: "Redefinir senha"
newPasswordIs: "A nova senha é \"{password}\""
reduceUiAnimation: "Reduzir a animação da interface do utilizador"
share: "Compartilhar"
notFound: "Não encontrado"
notFoundDescription: "Não havia página correspondente ao URL especificado."
uploadFolder: "Destino de upload padrão"
cacheClear: "Excluir memória transitória"
markAsReadAllNotifications: "Marcar todas as notificações como lidas"
markAsReadAllUnreadNotes: "Marcar todas as postagens como lidas"
markAsReadAllTalkMessages: "Marcar todas as conversas como lidas"
help: "Ajuda"
inputMessageHere: "Escrever mensagem aqui"
close: "Fechar"
group: "Grupos"
groups: "Grupos"
createGroup: "Criar grupo"
ownedGroups: "Grupo próprio"
invites: "Convidar"
invitations: "Convidar"
tags: "Etiquetas"
docSource: "Fonte deste documento"
createAccount: "Criar conta"
existingAccount: "Contas existentes"
regenerate: "Gerar novamente"
fontSize: "Tamanho do texto"
noFollowRequests: "Não há aplicação de acompanhamento"
openImageInNewTab: "Abrir a imagem numa nova aba"
dashboard: "Painel de controle"
local: "Local"
remote: "Remoto"
total: "Total"
weekOverWeekChanges: "Em comparação com a semana anterior"
dayOverDayChanges: "Dia anterior"
appearance: "Aparência"
clientSettings: "Configurações do cliente"
accountSettings: "Configurações da conta"
promotion: "Promoção"
promote: "Promover"
numberOfDays: "Dias"
hideThisNote: "Ocultar esta nota"
showFeaturedNotesInTimeline: "Mostrar notas recomendadas na linha do tempo"
objectStorage: "Armazenamento de objetos"
useObjectStorage: "Usar armazenamento de objetos"
objectStorageBaseUrl: "URL base"
objectStorageBaseUrlDesc: "O URL usado para referência. Se você estiver usando um CDN ou Proxy, seu URL, S3:'https: // <bucket> .s3.amazonaws.com', GCS, etc .:'https://storage.googleapis.com/ <bucket>' ."
objectStorageBucket: "Bucket"
objectStorageBucketDesc: "Especifique o nome do bucket do serviço a ser usado."
objectStoragePrefix: "Prefixo"
objectStoragePrefixDesc: "Ele é armazenado neste diretório de prefixo."
objectStorageEndpoint: "Ponto final"
objectStorageEndpointDesc: "Especifique vazio para S3, caso contrário, especifique o ponto final para cada serviço. Especifique como'<host>'ou'<host>: <port>'."
objectStorageRegion: "Região"
objectStorageRegionDesc: "Especifique uma região como 'xx-east-1'. Caso seu serviço não tenha o conceito de região, ele deve estar vazio ou 'us-east-1'."
objectStorageUseSSL: "Usar SSL"
objectStorageUseSSLDesc: "Desative-o se não quiser usar https para conexões de API"
objectStorageUseProxy: "Usar proxy"
objectStorageUseProxyDesc: "Se você não usa proxy para conexão de API, desative-o."
objectStorageSetPublicRead: "Definir 'public-read' ao fazer o upload"
serverLogs: "Registro do servidor"
deleteAll: "Apagar Tudo"
showFixedPostForm: "Exibir o formulário de postagem na parte superior da linha do tempo"
newNoteRecived: "Nova nota recebida"
sounds: "Sons"
listen: "Ouvir"
none: "Nenhum"
showInPage: "Ver na página"
popout: "Sair"
volume: "Volume"
masterVolume: "volume principal"
details: "Detalhes"
output: "Resultado"
smtpHost: "hospedeiro"
smtpUser: "Nome de usuário"
smtpPass: "Senha"
clearCache: "Limpar memória transitória"
info: "Informações"
user: "Usuários"
searchByGoogle: "Pesquisar"
searchByGoogle: "Buscar"
file: "Ficheiros"
_email:
_follow:
title: "Você tem um novo seguidor"
@@ -169,7 +476,7 @@ _mfm:
mention: "Menção"
quote: "Citar"
emoji: "Emoji personalizado"
search: "Pesquisar"
search: "Buscar"
_theme:
keys:
mention: "Menção"
@@ -177,22 +484,33 @@ _theme:
_sfx:
note: "Posts"
notification: "Notificações"
chat: "Chat"
_widgets:
notifications: "Notificações"
timeline: "Timeline"
activity: "atividade"
federation: "União"
jobQueue: "Fila de trabalhos"
_cw:
show: "Carregar mais"
_visibility:
home: "casa"
followers: "Seguidores"
_profile:
name: "Nome"
username: "Nome de usuário"
_exportOrImport:
followingList: "Seguindo"
muteList: "Silenciar"
blockingList: "Bloquear"
userLists: "Listas"
_charts:
federation: "União"
_timelines:
home: "casa"
_pages:
blocks:
image: "imagem"
_button:
_action:
_pushEvent:
@@ -397,8 +715,6 @@ _notification:
_deck:
alwaysShowMainColumn: "Sempre mostrar a coluna principal"
columnAlign: "Alinhar colunas"
columnMargin: "Margem entre colunas"
columnHeaderHeight: "Altura do cabeçalho de coluna"
addColumn: "Adicionar coluna"
swapLeft: "Trocar de posição com a coluna à esquerda"
swapRight: "Trocar de posição com a coluna à direita"

View File

@@ -52,6 +52,7 @@ searchUser: "Caută un utilizator"
reply: "Răspunde"
loadMore: "Incarcă mai mult"
showMore: "Arată mai mult"
showLess: "Închide"
youGotNewFollower: "te-a urmărit"
receiveFollowRequest: "Cerere de urmărire primită"
followRequestAccepted: "Cerere de urmărire acceptată"
@@ -644,6 +645,7 @@ administration: "Gestionare"
middle: "Mediu"
sent: "Trimite"
searchByGoogle: "Caută"
file: "Fișiere"
_email:
_follow:
title: "te-a urmărit"

View File

@@ -52,6 +52,7 @@ searchUser: "Поиск людей"
reply: "Ответить"
loadMore: "Показать еще"
showMore: "Показать еще"
showLess: "Закрыть"
youGotNewFollower: "Новый подписчик"
receiveFollowRequest: "Получен запрос на подписку"
followRequestAccepted: "Запрос на подписку принят"
@@ -203,6 +204,7 @@ done: "Готово"
processing: "Обработка"
preview: "Предпросмотр"
default: "По умолчанию"
defaultValueIs: "По умолчанию: {value}"
noCustomEmojis: "Собственные эмодзи отсутствуют"
noJobs: "Нет заданий"
federating: "Федерируется"
@@ -381,6 +383,7 @@ administrator: "Администратор"
token: "Токен"
twoStepAuthentication: "Двухфакторная аутентификация"
moderator: "Модератор"
moderation: "Модерация"
nUsersMentioned: "Упомянуло пользователей: {n}"
securityKey: "Ключ безопасности"
securityKeyName: "Имя ключа"
@@ -636,7 +639,7 @@ waitingFor: "Ждём, когда {x} ответит"
random: "Случайные"
system: "Система"
switchUi: "Выбор вида"
desktop: "Стол"
desktop: "Компьютер"
clip: "Подборка"
createNew: "Новый документ"
optional: "Необязательно"
@@ -832,6 +835,21 @@ searchByGoogle: "Поиск"
instanceDefaultLightTheme: "Светлая тема по умолчанию"
instanceDefaultDarkTheme: "Темная тема по умолчанию"
indefinitely: "вечно"
file: "Файлы"
recommended: "Рекомендуем"
check: "Проверить"
driveCapOverrideLabel: "Изменение лимита дискового пространства для этого пользователя"
reverse: "Переворот"
colored: "Выделена цветом"
label: "Метка"
localOnly: "Локально"
beta: "Бета"
enableAutoSensitive: "Автоматическое определение NSFW"
enableAutoSensitiveDescription: "Если доступно, используйте машинное обучение для автоматической установки флага NSFW на носителе. Даже если эта функция отключена, она может быть установлена ​​автоматически в зависимости от инстанта."
account: "Учётные записи"
_sensitiveMediaDetection:
description: "Машинное обучение может быть использовано для автоматического обнаружения чувствительных медиа для модерации. Нагрузка на сервер увеличивается незначительно."
setSensitiveFlagAutomatically: "Установить флаг NSFW"
_emailUnavailable:
used: "Уже используется"
format: "Неверный формат"
@@ -1619,9 +1637,8 @@ _notification:
_deck:
alwaysShowMainColumn: "Всегда показывать главную колонку"
columnAlign: "Выравнивание колонок"
columnMargin: "Расстояние между колонками"
columnHeaderHeight: "Высота заголовка колонки"
addColumn: "Добавить колонку"
configureColumn: "Настройки колонок"
swapLeft: "Переставить левее"
swapRight: "Переставить правее"
swapUp: "Переставить выше"

View File

@@ -52,6 +52,7 @@ searchUser: "Hľadať používateľov"
reply: "Odpovedať"
loadMore: "Zobraziť viac"
showMore: "Zobraziť viac"
showLess: "Zavrieť"
youGotNewFollower: "Máte nového sledujúceho"
receiveFollowRequest: "Žiadosť o sledovanie prijatá"
followRequestAccepted: "Žiadosť o sledovanie akceptovaná"
@@ -203,6 +204,7 @@ done: "Hotovo"
processing: "Pracujem..."
preview: "Náhľad"
default: "Predvolené"
defaultValueIs: "Predvolené: {value}"
noCustomEmojis: "Žiadne emoji"
noJobs: "Žiadne úlohy"
federating: "Federácia"
@@ -381,6 +383,7 @@ administrator: "Administrátor"
token: "Token"
twoStepAuthentication: "Dvojfaktorová autentifikácia"
moderator: "Moderátor"
moderation: "Moderovanie"
nUsersMentioned: "{n} používateľov spomenulo"
securityKey: "Bezpečnostný kľúč"
securityKeyName: "Názov kľúča"
@@ -559,6 +562,7 @@ author: "Autor"
leaveConfirm: "Máte neuložené zmeny. Chcete ich zahodiť?"
manage: "Administrácia"
plugins: "Pluginy"
preferencesBackups: "Zálohy nastavení"
deck: "Deck"
useBlurEffectForModal: "Použiť efekt rozmazania na okná"
useFullReactionPicker: "Použiť plnú veľkosť výberu reakcií"
@@ -642,6 +646,8 @@ clip: "Klip"
createNew: "Vytvoriť nový"
optional: "Voliteľné"
createNewClip: "Vytvoriť nový klip"
unclip: "Odopnúť"
confirmToUnclipAlreadyClippedNote: "Táto poznámka je už pripnutá ako \"{name}\". Naozaj ju chcete odopnúť?"
public: "Verejné"
i18nInfo: "Misskey je prekladaný do rôznych jazykov dobrovoľníkmi. Pomôcť môžete na {link}."
manageAccessTokens: "Spravovať prístupové tokeny"
@@ -842,6 +848,54 @@ oneWeek: "1 týždeň"
reflectMayTakeTime: "Zmeny môžu chvíľu trvať kým sa prejavia."
failedToFetchAccountInformation: "Nepodarilo sa načítať informácie o účte."
rateLimitExceeded: "Prekročený limit rýchlosti"
cropImage: "Orezanie obrázku"
cropImageAsk: "Chcete orezať obrázok?"
file: "Súbor/y"
recentNHours: "Posledných {n} hodín"
recentNDays: "Posledných {n} dní"
noEmailServerWarning: "Nie je nastavený emailový server."
thereIsUnresolvedAbuseReportWarning: "Existuje nevyriešené nahlásenie zneužitia."
recommended: "Odporúčané"
driveCapOverrideLabel: "Zmena limitu úložiska pre tohoto používateľa"
driveCapOverrideCaption: "Ak je zadaná hodnota menšia alebo rovná 0, zruší sa."
isSystemAccount: "Tieto účty automaticky vytvoril a spravuje systém."
typeToConfirm: "Ak chcete vykonať túto operáciu, napíšte {x}"
deleteAccount: "Vymazať účet"
document: "Dokument"
numberOfPageCache: "Počet cachí pre stránky"
numberOfPageCacheDescription: "Zvýši rýchlosť ale tiež nároky na pamäť."
logoutConfirm: "Naozaj sa chcete odhlásiť?"
statusbar: "Stavový riadok"
pleaseSelect: "Prosím vyberte"
reverse: "Preklopiť"
colored: "Farebné"
refreshInterval: "Interval obnovenia"
label: "Popisok"
type: "Typ"
speed: "Rýchlosť"
slow: "Pomaly"
fast: "Rýchlo"
sensitiveMediaDetection: "Detekcia citlivých médií."
localOnly: "Iba lokálne"
remoteOnly: "Len vzdialené"
failedToUpload: "Nahrávanie zlyhalo"
cannotUploadBecauseInappropriate: "Nemožno nahrať, pretože pravdepodobne obsahuje nevhodný obsah."
cannotUploadBecauseNoFreeSpace: "Nemožno nahrať kvôli nedostatku voľného úložiska."
beta: "Beta"
enableAutoSensitive: "Automatická detekcia NSFW"
enableAutoSensitiveDescription: "Ak je zapnuté, príznak NSFW sa na médiách automaticky nastaví pomocou strojového učenia. Aj keď je táto funkcia vypnutá, v niektorých prípadoch sa môže nastaviť automaticky."
activeEmailValidationDescription: "Dôkladnejšie overí e-mailovú adresu používateľa tým, že zistí, či ide o vyradenú e-mailovú adresu a či sa s ňou dá skutočne komunikovať. Ak nie je začiarknuté, e-mailová adresa sa kontroluje len ako text."
navbar: "Navigačný panel"
account: "Účty"
move: "Pohyb"
_sensitiveMediaDetection:
description: "Strojové učenie sa použije na automatickú detekciu citlivých médií na účely ich moderovania. Mierne sa zvýši zaťaženie servera."
sensitivity: "Citlivosť detekcie"
sensitivityDescription: "Nižšia citlivosť znižuje počet falošne pozitívnych výsledkov (false positives). Vyššia citlivosť znižuje počet falošne negatívnych výsledkov (false negatives)."
setSensitiveFlagAutomatically: "Nastaviť príznak NSFW"
setSensitiveFlagAutomaticallyDescription: "Aj keď je toto nastavenie vypnuté, výsledok rozhodnutia je interne uložený."
analyzeVideos: "Zapnúť analýzu videa"
analyzeVideosDescription: "Okrem obrázkov zapne detekciu aj pre videá. Zaťaženie servera sa mierne zvýši."
_emailUnavailable:
used: "Táto emailová adresa sa už používa"
format: "Formát emailovej adresy je nesprávny"
@@ -884,6 +938,24 @@ _plugin:
install: "Inštalova pluginy"
installWarn: "Prosím neinštalujte nedôveryhodné pluginy."
manage: "Spravovanie pluginov"
_preferencesBackups:
list: "Vytvorené zálohy"
saveNew: "Uložiť novú"
loadFile: "Nahrať súbor"
apply: "Použiť na toto zariadenie"
save: "Uložiť"
inputName: "Názov zálohy"
cannotSave: "Nedá sa uložiť"
nameAlreadyExists: "Záloha s názvom \"{name}\" už existuje. Zadajte iný názov."
applyConfirm: "Chcete použiť zálohu '{name}' na aktuálne zariadenie? Aktuálne nastavenia zariadenia sa stratia."
saveConfirm: "Chcete prepísať {name}?"
deleteConfirm: "Naozaj chcete odstrániť \"{name}\"?"
renameConfirm: "Chcete zmeniť \"{old}\" na \"{new}\"?"
noBackups: "Nie je k dispozícii žiadna záloha. \"Uložiť novú\" umožňuje uložiť aktuálnu konfiguráciu zariadenia na server."
createdAt: "Dátum vytvorenia: {date} {time}"
updatedAt: "Dátum úpravy: {date} {time}"
cannotLoad: "Nedá sa nahrať"
invalidFile: "Neplatný formát súboru"
_registry:
scope: "Oblasť"
key: "Kľúč"
@@ -967,6 +1039,8 @@ _mfm:
sparkleDescription: "Obsahu dodá trblietajúci efekt."
rotate: "Otáčať"
rotateDescription: "Otočí obsah o určitý uhol."
plain: "Obyčajné"
plainDescription: "Bez akejkoľvej syntaxe"
_instanceTicker:
none: "Nikdy nezobrazovať"
remote: "Zobraziť pre vzdialených používateľov"
@@ -1196,10 +1270,13 @@ _widgets:
trends: "Trendy"
clock: "Hodiny"
rss: "RSS čítačka"
rssTicker: "RSS Ticker"
activity: "Aktivita"
photos: "Fotky"
digitalClock: "Digitálne hodiny"
unixClock: "UNIX čas"
federation: "Federácia"
instanceCloud: "Cloud serverov"
postForm: "Napísať poznámku"
slideshow: "Prezentácia"
button: "Tlačidlo"
@@ -1615,6 +1692,7 @@ _notification:
yourFollowRequestAccepted: "Vaša žiadosť o sledovanie bola prijatá"
youWereInvitedToGroup: "Pozvať do skupiny"
pollEnded: "Výsledky hlasovania sú k dispozícii."
emptyPushNotificationMessage: "Push notifikácie aktualizované"
_types:
all: "Všetky"
follow: "Sledujete"
@@ -1636,9 +1714,8 @@ _notification:
_deck:
alwaysShowMainColumn: "Vždy zobraziť v hlavnom stĺpci"
columnAlign: "Zarovnať stĺpce"
columnMargin: "Rozostup medzi stĺpcami"
columnHeaderHeight: "Výška hlavičky stĺpca"
addColumn: "Pridať stĺpec"
configureColumn: "Nastavenie stĺpcov"
swapLeft: "Vymeniť vľavo"
swapRight: "Vymeniť vpravo"
swapUp: "Vymeniť hore"
@@ -1646,6 +1723,11 @@ _deck:
stackLeft: "Priložiť do ľavého stĺpca"
popRight: "Vybrať napravo"
profile: "Profil"
newProfile: "Nový profil"
deleteProfile: "Odstrániť profil"
introduction: "Kombinujte stĺpce a vytvorte si svoje vlastné rozhranie!"
introduction2: "Stlačením tlačidla + v pravej časti obrazovky môžete kedykoľvek pridať stĺpce."
widgetsIntroduction: "V ponuke stĺpca vyberte možnosť \"Upraviť widget\" a pridajte widget"
_columns:
main: "Hlavný"
widgets: "Widgety"

View File

@@ -203,6 +203,7 @@ done: "Klar"
processing: "Bearbetar..."
preview: "Förhandsvisning"
default: "Standard"
defaultValueIs: "Standard: {value}"
noCustomEmojis: "Det finns ingen emoji"
noJobs: "Det finns inga jobb"
federating: "Federerar"
@@ -247,6 +248,7 @@ smtpPass: "Lösenord"
clearCache: "Rensa cache"
user: "Användare"
searchByGoogle: "Sök"
file: "Filer"
_email:
_follow:
title: "följde dig"

File diff suppressed because it is too large Load Diff

View File

@@ -52,6 +52,7 @@ searchUser: "Пошук користувачів"
reply: "Відповісти"
loadMore: "Показати більше"
showMore: "Показати більше"
showLess: "Закрити"
youGotNewFollower: "Новий підписник"
receiveFollowRequest: "Отримано запит на підписку"
followRequestAccepted: "Підписка прийнята"
@@ -737,6 +738,11 @@ hashtags: "Хештеґ"
hide: "Сховати"
searchByGoogle: "Пошук"
indefinitely: "Ніколи"
file: "Файли"
reverse: "Перевернути"
colored: "Кольоровий"
label: "Назва"
localOnly: "Локально"
_ffVisibility:
public: "Опублікувати"
_ad:
@@ -1434,8 +1440,6 @@ _notification:
_deck:
alwaysShowMainColumn: "Завжди показувати головну колонку"
columnAlign: "Вирівняти стовпці"
columnMargin: "Відступ між стовпцями"
columnHeaderHeight: "Висота заголовку колони"
addColumn: "Додати стовпець"
swapLeft: "Пересунути ліворуч"
swapRight: "Пересунути праворуч"

View File

@@ -52,6 +52,7 @@ searchUser: "Tìm kiếm người dùng"
reply: "Trả lời"
loadMore: "Tải thêm"
showMore: "Xem thêm"
showLess: "Đóng"
youGotNewFollower: "đã theo dõi bạn"
receiveFollowRequest: "Đã yêu cầu theo dõi"
followRequestAccepted: "Đã chấp nhận yêu cầu theo dõi"
@@ -203,6 +204,7 @@ done: "Xong"
processing: "Đang xử lý"
preview: "Xem trước"
default: "Mặc định"
defaultValueIs: "Mặc định: {value}"
noCustomEmojis: "Không có emoji"
noJobs: "Không có công việc"
federating: "Đang liên hợp"
@@ -381,6 +383,7 @@ administrator: "Quản trị viên"
token: "Token"
twoStepAuthentication: "Xác minh 2 bước"
moderator: "Kiểm duyệt viên"
moderation: "Kiểm duyệt"
nUsersMentioned: "Dùng bởi {n} người"
securityKey: "Khóa bảo mật"
securityKeyName: "Tên khoá"
@@ -559,6 +562,7 @@ author: "Tác giả"
leaveConfirm: "Có những thay đổi chưa được lưu. Bạn có muốn bỏ chúng không?"
manage: "Quản lý"
plugins: "Plugin"
preferencesBackups: "Sao lưu thiết lập"
deck: "Deck"
undeck: "Bỏ Deck"
useBlurEffectForModal: "Sử dụng hiệu ứng mờ cho các hộp thoại"
@@ -643,6 +647,8 @@ clip: "Ghim"
createNew: "Tạo mới"
optional: "Không bắt buộc"
createNewClip: "Tạo một ghim mới"
unclip: "Bỏ ghim"
confirmToUnclipAlreadyClippedNote: "Bài đăng này là một phần của \"{name}\" ghim. Bạn có muốn bỏ khỏi ghim?"
public: "Công khai"
i18nInfo: "Misskey đang được các tình nguyện viên dịch sang nhiều thứ tiếng khác nhau. Bạn có thể hỗ trợ tại {link}."
manageAccessTokens: "Tạo mã truy cập"
@@ -843,6 +849,58 @@ oneWeek: "1 tuần"
reflectMayTakeTime: "Có thể mất một thời gian để điều này được áp dụng."
failedToFetchAccountInformation: "Không thể lấy thông tin tài khoản"
rateLimitExceeded: "Giới hạn quá mức"
cropImage: "Cắt hình ảnh"
cropImageAsk: "Bạn có muốn cắt ảnh này?"
file: "Tập tin"
recentNHours: "{n}h trước"
recentNDays: "{n} ngày trước"
noEmailServerWarning: "Chưa đặt máy chủ email."
thereIsUnresolvedAbuseReportWarning: "Có báo cáo chưa xử lí."
recommended: "Được đề xuất"
check: "Kiểm tra"
driveCapOverrideLabel: "Thay đổi dung lượng drive cho người này"
driveCapOverrideCaption: "Đặt dung lượng drive về mặc định bằng cách nhập 0 hoặc số âm."
requireAdminForView: "Bạn phải đăng nhập như là quản trị viên mới xem được."
isSystemAccount: "Đã tạo một tài khoản và tự động vận hành bởi hệ thống."
typeToConfirm: "Nhấn {x} để xác nhận"
deleteAccount: "Xóa tài khoản"
document: "Tài liệu"
numberOfPageCache: "Số lượng trang bộ nhớ đệm"
numberOfPageCacheDescription: "Việc tăng con số này sẽ cải thiện sự thuận tiện cho người dùng nhưng gây ra nhiều áp lực hơn cho máy chủ cũng như sử dụng nhiều bộ nhớ hơn."
logoutConfirm: "Bạn có chắc muốn đăng xuất?"
lastActiveDate: "Lần cuối vào"
statusbar: "Thanh trạng thái"
pleaseSelect: "Chọn một lựa chọn"
reverse: "Lật"
colored: "Với màu"
refreshInterval: "Cập nhật nội bộ"
label: "Nhãn"
type: "Loại"
speed: "Tốc độ"
slow: "Chậm"
fast: "Nhanh"
sensitiveMediaDetection: "Tự động phát hiện NSFW"
localOnly: "Chỉ trên máy chủ"
remoteOnly: "Chỉ máy chủ từ xa"
failedToUpload: "Tải lên thất bại"
cannotUploadBecauseInappropriate: "Không thể tải lên tập tin này vì các phần của tập tin đã được phát hiện có khả năng là NSFW."
cannotUploadBecauseNoFreeSpace: "Tải lên không thành công do thiếu dung lượng Drive."
beta: "Beta"
enableAutoSensitive: "Tự động đánh dấu NSFW"
enableAutoSensitiveDescription: "Cho phép tự động phát hiện và đánh dấu media NSFW thông qua học máy, nếu có thể. Ngay cả khi tùy chọn này bị tắt, nó vẫn có thể được bật trên toàn máy chủ."
activeEmailValidationDescription: "Cho phép xác minh địa chỉ email chặt chẽ hơn, bao gồm việc kiểm tra các địa chỉ dùng một lần và xem nó có thực sự được giao tiếp hay không. Khi bỏ chọn, chỉ định dạng của email được xác minh."
navbar: "Thanh điều hướng"
shuffle: "Xáo trộn"
account: "Tài khoản của bạn"
move: "Di chuyển"
_sensitiveMediaDetection:
description: "Giảm nỗ lực kiểm duyệt máy chủ thông qua việc tự động nhận dạng media NSFW thông qua học máy. Điều này sẽ làm tăng một chút áp lực trên máy chủ."
sensitivity: "Phát hiện nhạy cảm"
sensitivityDescription: "Giảm độ nhạy sẽ dẫn đến ít phát hiện sai hơn (dương tính giả), tăng nó sẽ dẫn đến ít phát hiện sai hơn (âm tính giả)."
setSensitiveFlagAutomatically: "Đánh dấu là NSFW"
setSensitiveFlagAutomaticallyDescription: "Kết quả của phát hiện nội bộ sẽ được giữ lại ngay cả khi tùy chọn này bị tắt."
analyzeVideos: "Bật chuẩn đoán video"
analyzeVideosDescription: "Phân tích video bên cạnh hình ảnh. Điều này sẽ làm tăng một chút áp lực trên máy chủ."
_emailUnavailable:
used: "Địa chỉ email đã được sử dụng"
format: "Địa chỉ email không hợp lệ"
@@ -885,6 +943,24 @@ _plugin:
install: "Cài đặt tiện ích"
installWarn: "Vui lòng không cài đặt những tiện ích đáng ngờ."
manage: "Quản lý plugin"
_preferencesBackups:
list: "Tạo sao lưu"
saveNew: "Lưu bản sao lưu"
loadFile: "Nhập tập tin"
apply: "Áp dụng lên thiết bị này"
save: "Lưu thay đổi"
inputName: "Nhập tên bản sao lưu"
cannotSave: "Không thể lưu"
nameAlreadyExists: "Bản sao lưu \"{name}\" đã tồn tại. Xin nhập tên khác."
applyConfirm: "Bạn có chắc muốn áp dụng bản sao lưu \"{name}\" cho thiết bị này? Thiết lập hiện tại sẽ bị ghi đè."
saveConfirm: "Lưu bản sao lưu {name}?"
deleteConfirm: "Xóa bản sao lưu {name}?"
renameConfirm: "Đổi tên bản sao lưu \"{old}\" thành \"{new}\"?"
noBackups: "Chưa có bản sao lưu. Bạn có thể sao lưu thiết lập trên máy chủ này bằng cách sử dụng \"Tạo sao lưu\"."
createdAt: "Tạo vào: {time} {date}"
updatedAt: "Cập nhật: {time} {date}"
cannotLoad: "Tải thất bại"
invalidFile: "Sai định dạng tập tin"
_registry:
scope: "Phạm vi"
key: "Mã"
@@ -968,6 +1044,8 @@ _mfm:
sparkleDescription: "Làm cho nội dung hiệu ứng hạt lấp lánh."
rotate: "Xoay"
rotateDescription: "Xoay nội dung theo một góc cụ thể."
plain: "Đơn giản"
plainDescription: "Vô hiệu hóa mọi hiệu ứng MFM chứa trong hiệu ứng MFM này."
_instanceTicker:
none: "Không hiển thị"
remote: "Hiện cho người dùng từ máy chủ khác"
@@ -1197,10 +1275,13 @@ _widgets:
trends: "Xu hướng"
clock: "Đồng hồ"
rss: "Trình đọc RSS"
rssTicker: "RSS-Ticker"
activity: "Hoạt động"
photos: "Kho ảnh"
digitalClock: "Đồng hồ số"
unixClock: "Đồng hồ UNIX"
federation: "Liên hợp"
instanceCloud: "Instance cloud"
postForm: "Mẫu đăng"
slideshow: "Trình chiếu"
button: "Nút"
@@ -1638,9 +1719,8 @@ _notification:
_deck:
alwaysShowMainColumn: "Luôn hiện cột chính"
columnAlign: "Căn cột"
columnMargin: "Căn lề giữa các cột"
columnHeaderHeight: "Chiều rộng cột ảnh bìa"
addColumn: "Thêm cột"
configureColumn: "Cài đặt cột"
swapLeft: "Hoán đổi với cột bên trái"
swapRight: "Hoán đổi với cột bên phải"
swapUp: "Hoán đổi với cột trên"
@@ -1648,6 +1728,11 @@ _deck:
stackLeft: "Xếp chồng với cột bên trái"
popRight: "Xếp chồng với cột bên trái"
profile: "Hồ sơ"
newProfile: "Hồ sơ mới"
deleteProfile: "Xóa hồ sơ"
introduction: "Kết hợp các cột để tạo giao diện của riêng bạn!"
introduction2: "Bạn có thể thêm cột bất kỳ lúc nào bằng cách nhấn + ở bên phải màn hình."
widgetsIntroduction: "Chọn \"Sửa widget\" trong menu cột và thêm một widget."
_columns:
main: "Chính"
widgets: "Tiện ích"

View File

@@ -52,6 +52,7 @@ searchUser: "搜索用户"
reply: "回复"
loadMore: "查看更多"
showMore: "查看更多"
showLess: "关闭"
youGotNewFollower: "你有新的关注者"
receiveFollowRequest: "您收到了关注请求"
followRequestAccepted: "您的关注请求被通过了"
@@ -203,6 +204,7 @@ done: "完成"
processing: "正在处理"
preview: "预览"
default: "默认"
defaultValueIs: "默认值: {value}"
noCustomEmojis: "没有自定义表情符号"
noJobs: "没有任务"
federating: "联合中"
@@ -336,7 +338,7 @@ pinnedUsers: "置顶用户"
pinnedUsersDescription: "在「发现」页面中使用换行标记想要置顶的用户。"
pinnedPages: "固定页面"
pinnedPagesDescription: "输入您要固定到实例首页的页面路径,以换行符分隔。"
pinnedClipId: "置顶的签ID"
pinnedClipId: "置顶的便签ID"
pinnedNotes: "已置顶的帖子"
hcaptcha: "hCaptcha"
enableHcaptcha: "启用 hCaptcha"
@@ -381,6 +383,7 @@ administrator: "管理员"
token: "Token (令牌)"
twoStepAuthentication: "两步验证"
moderator: "监察员"
moderation: "管理"
nUsersMentioned: "{n} 被提到"
securityKey: "安全密钥"
securityKeyName: "密钥名称"
@@ -481,13 +484,13 @@ showFeaturedNotesInTimeline: "在时间线上显示热门推荐"
objectStorage: "对象存储"
useObjectStorage: "使用对象存储"
objectStorageBaseUrl: "Base URL"
objectStorageBaseUrlDesc: "URL前缀用于构造URL到对象媒体的引用如果您使用的是CDN或反向代理请指定其URL否则请根据您使用的服务指定可公开访问的地址。例如“https://<bucket>.s3.amazonaws.com”用于AWS S3“https://storage.googleapis.com/<bucket>”用于GCS"
objectStorageBaseUrlDesc: "用于引用的URL。如果您正在使用CDN或反向代理请指定其URL例如S3“https://<bucket>.s3.amazonaws.com”GCS“https://storage.googleapis.com/<bucket>”"
objectStorageBucket: "存储桶"
objectStorageBucketDesc: "请指定使用的对象存储服务的存储桶名称。"
objectStoragePrefix: "前缀"
objectStoragePrefixDesc: "文件将存储在此前缀的目录下。"
objectStorageEndpoint: "端点"
objectStorageEndpointDesc: "如果你希望使用AWS S3请留空。否则请根据你使用的服务来进行设置指定端点形式为“<host>”或“<host>:<port>”。"
objectStorageEndpointDesc: "如果你使用AWS S3请留空。否则请根据你使用的服务商的说明来进行设置,指定端点形式为“<host>”或“<host>:<port>”。"
objectStorageRegion: "可用区"
objectStorageRegionDesc: "指定一个可用区例如“xx-east-1”。 如果您的对象存储服务没有可用区概念请将其留空或填写“us-east-1”。"
objectStorageUseSSL: "使用SSL"
@@ -559,6 +562,7 @@ author: "作者"
leaveConfirm: "存在未保存的更改。要放弃更改吗?"
manage: "管理"
plugins: "插件"
preferencesBackups: "备份设置"
deck: "Deck"
undeck: "取消Deck"
useBlurEffectForModal: "对话框使用模糊效果"
@@ -639,10 +643,12 @@ random: "随机"
system: "系统"
switchUi: "切换界面"
desktop: "桌面"
clip: "签"
clip: "便签"
createNew: "新建"
optional: "可选"
createNewClip: "新建签"
createNewClip: "新建便签"
unclip: "移除便签"
confirmToUnclipAlreadyClippedNote: "本帖已包含在便签\"{name}\"里。您想要将本帖从该便签中移除吗?"
public: "公开"
i18nInfo: "Misskey已经被志愿者们翻译成了各种语言。如果你也有兴趣可以通过{link}帮助翻译。"
manageAccessTokens: "管理 Access Tokens"
@@ -676,7 +682,7 @@ pageLikesCount: "页面点赞次数"
pageLikedCount: "页面被点赞次数"
contact: "联系人"
useSystemFont: "使用系统默认字体"
clips: "签"
clips: "便签"
experimentalFeatures: "实验性功能"
developer: "开发者"
makeExplorable: "使账号可见。"
@@ -842,6 +848,59 @@ oneDay: "1天"
oneWeek: "1周"
reflectMayTakeTime: "可能需要一些时间才能体现出效果。"
failedToFetchAccountInformation: "获取账户信息失败"
rateLimitExceeded: "已超過速率限制"
cropImage: "剪裁图像"
cropImageAsk: "是否要裁剪图像?"
file: "文件"
recentNHours: "最近{n}小时"
recentNDays: "最近{n}天"
noEmailServerWarning: "电子邮件服务器未设置。"
thereIsUnresolvedAbuseReportWarning: "有未解决的报告"
recommended: "推荐"
check: "检查"
driveCapOverrideLabel: "變更此用戶的雲端硬碟容量上限"
driveCapOverrideCaption: "设定为 0 以下则会解除此限制。"
requireAdminForView: "需要使用管理员账户登录才能查看。"
isSystemAccount: "该账号由系统自动创建和管理。"
typeToConfirm: "输入 {x} 以确认操作。"
deleteAccount: "删除账户"
document: "文档"
numberOfPageCache: "缓存页数"
numberOfPageCacheDescription: "设置较高的值会更方便用户,但设备的负载和内存使用量会增加。"
logoutConfirm: "是否确认登出?"
lastActiveDate: "最后活跃时间"
statusbar: "状态栏"
pleaseSelect: "请选择"
reverse: "翻转"
colored: "彩色"
refreshInterval: "刷新间隔"
label: "标签"
type: "类型"
speed: "速度"
slow: "慢"
fast: "快"
sensitiveMediaDetection: "检测到敏感媒体"
localOnly: "仅限本地"
remoteOnly: "仅远程"
failedToUpload: "上传失败"
cannotUploadBecauseInappropriate: "因为可能含有不适宜的内容,无法上传。"
cannotUploadBecauseNoFreeSpace: "因为已无可用空间,无法上传。"
beta: "测试"
enableAutoSensitive: "自动 NSFW 识别"
enableAutoSensitiveDescription: "如果可用,请使用机器学习在媒体上自动设置 NSFW 标志。即使关闭此功能,也可能会根据实例自动设置。"
activeEmailValidationDescription: "积极地验证用户的电子邮件地址,判断它是一次性的电子邮件地址,还是可以实际通信的地址。关闭时,则只检查字符串是否正确。"
navbar: "导航栏"
shuffle: "随机"
account: "账户"
move: "移动"
_sensitiveMediaDetection:
description: "可以使用机器学习技术自动检测敏感媒体,以便进行审核。服务器负载将略微增加。"
sensitivity: "检测敏感度"
sensitivityDescription: "敏感度较低,则误检(假阳性)会减少;敏感度较高,则漏检(假阴性)会减少。"
setSensitiveFlagAutomatically: "自动设置 NSFW 标签"
setSensitiveFlagAutomaticallyDescription: "即使关闭此配置,识别结果也会在内部保存。"
analyzeVideos: "启用对视频的检测"
analyzeVideosDescription: "除了静止图像之外,还对视频进行分析。服务器负载会略微增加。"
_emailUnavailable:
used: "已经被使用过"
format: "无效的格式"
@@ -884,6 +943,24 @@ _plugin:
install: "安装插件"
installWarn: "请不要安装不可信的插件。"
manage: "管理插件..."
_preferencesBackups:
list: "已创建的备份"
saveNew: "另存为"
loadFile: "导入文件"
apply: "应用于本设备"
save: "覆盖存档"
inputName: "请输入备份的名称"
cannotSave: "无法保存"
nameAlreadyExists: "备份名称\"{name}\"已经存在,请指定其他名称。"
applyConfirm: "您是否要将备份\"{name}\"应用到当前设备上?当前设备现有配置将被丢弃。"
saveConfirm: "您确定要覆盖保存 {name} 吗?"
deleteConfirm: "您确定要删除 {name} 吗?"
renameConfirm: "您确定要把“{old}”改为“{new}”吗?"
noBackups: "当前没有备份,“另存为”允许您在服务器上保存当前客户端的配置。"
createdAt: "创建日期:{date} {time}"
updatedAt: "更新日期:{date} {time}"
cannotLoad: "无法加载"
invalidFile: "无效的的文件格式。"
_registry:
scope: "范围"
key: "主要"
@@ -967,6 +1044,8 @@ _mfm:
sparkleDescription: "添加发光粒子效果。"
rotate: "旋转"
rotateDescription: "旋转指定的角度。"
plain: "简洁"
plainDescription: "禁用所有内部语法。"
_instanceTicker:
none: "不显示"
remote: "仅远程用户"
@@ -1196,10 +1275,13 @@ _widgets:
trends: "趋势"
clock: "时钟"
rss: "RSS阅读器"
rssTicker: "RSS Ticker"
activity: "活动"
photos: "照片"
digitalClock: "数字时钟"
unixClock: "UNIX时钟"
federation: "联邦宇宙"
instanceCloud: "实例云"
postForm: "投稿窗口"
slideshow: "幻灯片展示"
button: "按钮"
@@ -1637,16 +1719,20 @@ _notification:
_deck:
alwaysShowMainColumn: "总是显示主列"
columnAlign: "列对齐"
columnMargin: "列间距"
columnHeaderHeight: "列标题高度"
addColumn: "添加列"
configureColumn: "列设置"
swapLeft: "向左移动"
swapRight: "向右移动"
swapUp: "向上移动"
swapDown: "向下移动"
stackLeft: "向左折叠"
popRight: "向右弹出"
profile: "个人资料"
profile: "配置文件"
newProfile: "新建配置文件"
deleteProfile: "删除配置文件"
introduction: "将各列进行组合以创建您自己的界面!"
introduction2: "您可以随时通过屏幕右侧的 + 来添加列"
widgetsIntroduction: "从列菜单中,选择“小工具编辑”来添加小工具"
_columns:
main: "主列"
widgets: "小工具"

View File

@@ -1,7 +1,7 @@
---
_lang_: "繁體中文"
headlineMisskey: "貼文連繫網路"
introMisskey: "歡迎! Misskey是一個開放原始碼且去中心化的社群網路。\n透過「貼文」分享周邊新鮮事並告訴其他人您的想法📡\n透過「情感」功能,對大家的貼文表達情感!👍\n一起來探索這個新的世界吧🚀"
introMisskey: "歡迎! Misskey是一個開放原始碼且去中心化的社群網路。\n透過「貼文」分享周邊新鮮事並告訴其他人您的想法📡\n透過「反應」功能,對大家的貼文表達情感!👍\n一起來探索這個新的世界吧🚀"
monthAndDay: "{month}月 {day}日"
search: "搜尋"
notifications: "通知"
@@ -52,6 +52,7 @@ searchUser: "搜尋使用者"
reply: "回覆"
loadMore: "載入更多"
showMore: "載入更多"
showLess: "關閉"
youGotNewFollower: "您有新的追隨者"
receiveFollowRequest: "您有新的追隨請求"
followRequestAccepted: "追隨請求已接受"
@@ -155,7 +156,7 @@ searchWith: "搜尋: {q}"
youHaveNoLists: "你沒有任何清單"
followConfirm: "你真的要追隨{name}嗎?"
proxyAccount: "代理帳戶"
proxyAccountDescription: "代理帳戶是在某些情況下充當其他伺服器用戶的帳戶。例如,當使用者將一個來自其他伺服器的帳戶放在列表中時,由於沒有其他使用者關注該帳戶,該指令不會傳送到該伺服器上,因此會由代理帳戶關注。"
proxyAccountDescription: "代理帳戶是在某些情況下充當其他伺服器用戶的帳戶。例如,當使用者將一個來自其他伺服器的帳戶放在列表中時,由於沒有其他使用者追蹤該帳戶,該指令不會傳送到該伺服器上,因此會由代理帳戶追蹤。"
host: "主機"
selectUser: "選取使用者"
recipient: "收件人"
@@ -203,6 +204,7 @@ done: "完成"
processing: "處理中"
preview: "預覽"
default: "預設"
defaultValueIs: "預設值:{value}"
noCustomEmojis: "沒有自訂的表情符號"
noJobs: "沒有任務"
federating: "整合搜索中"
@@ -381,6 +383,7 @@ administrator: "管理員"
token: "權杖"
twoStepAuthentication: "兩階段驗證"
moderator: "板主"
moderation: "言論調節"
nUsersMentioned: "提到了{n}"
securityKey: "安全金鑰"
securityKeyName: "金鑰名稱"
@@ -559,6 +562,7 @@ author: "作者"
leaveConfirm: "有未保存的更改。要放棄嗎?"
manage: "管理"
plugins: "外掛"
preferencesBackups: "備份設定檔"
deck: "多欄模式"
undeck: "取消多欄模式"
useBlurEffectForModal: "在模態框使用模糊效果"
@@ -643,6 +647,8 @@ clip: "摘錄"
createNew: "新建"
optional: "可選"
createNewClip: "建立新摘錄"
unclip: "解除摘錄"
confirmToUnclipAlreadyClippedNote: "此貼文已包含在摘錄「{name}」中。 你想將貼文從這個摘錄中排除嗎?"
public: "公開"
i18nInfo: "Misskey已經被志願者們翻譯成各種語言版本如果想要幫忙的話可以進入{link}幫助翻譯。"
manageAccessTokens: "管理存取權杖"
@@ -723,7 +729,7 @@ receiveAnnouncementFromInstance: "接收由本實例發出的電郵通知"
emailNotification: "郵件通知"
publish: "發佈"
inChannelSearch: "頻道内搜尋"
useReactionPickerForContextMenu: "點擊右鍵開啟應工具欄"
useReactionPickerForContextMenu: "點擊右鍵開啟應工具欄"
typingUsers: "{users}輸入中..."
jumpToSpecifiedDate: "跳轉到特定日期"
showingPastTimeline: "顯示過往的時間線"
@@ -806,8 +812,8 @@ unread: "未讀"
filter: "篩選"
controlPanel: "控制台"
manageAccounts: "管理帳戶"
makeReactionsPublic: "將應設為公開"
makeReactionsPublicDescription: "將您做過的應設為公開可見。"
makeReactionsPublic: "將應設為公開"
makeReactionsPublicDescription: "將您做過的應設為公開可見。"
classic: "經典"
muteThread: "將貼文串設為靜音"
unmuteThread: "將貼文串的靜音解除"
@@ -842,6 +848,59 @@ oneDay: "1天"
oneWeek: "1週"
reflectMayTakeTime: "可能需要一些時間才會出現效果。"
failedToFetchAccountInformation: "取得帳戶資訊失敗"
rateLimitExceeded: "已超過速率限制"
cropImage: "圖片裁剪"
cropImageAsk: "要剪裁圖片嗎?"
file: "檔案"
recentNHours: "過去{n}小時"
recentNDays: "過去{n}天"
noEmailServerWarning: "尚未設定電子郵件伺服器。"
thereIsUnresolvedAbuseReportWarning: "有尚未處理的檢舉。"
recommended: "推薦"
check: "檢查"
driveCapOverrideLabel: "更改這個使用者的雲端硬碟容量上限"
driveCapOverrideCaption: "如果指定0以下的值就會被取消。"
requireAdminForView: "必須以管理者帳號登入才可以檢視。"
isSystemAccount: "由系統自動建立與管理的帳號。"
typeToConfirm: "要執行這項操作,請輸入 {x} "
deleteAccount: "刪除帳號"
document: "文件"
numberOfPageCache: "快取頁面數"
numberOfPageCacheDescription: "增加數量會提高便利性,但也會增加負荷與記憶體使用量。"
logoutConfirm: "確定要登出嗎?"
lastActiveDate: "上次使用日期及時間"
statusbar: "狀態列"
pleaseSelect: "請選擇"
reverse: "翻轉"
colored: "彩色"
refreshInterval: "更新間隔"
label: "標籤"
type: "類型"
speed: "速度"
slow: "慢"
fast: "快"
sensitiveMediaDetection: "敏感性媒體的檢測"
localOnly: "僅限本地"
remoteOnly: "僅限遠端"
failedToUpload: "上傳失敗"
cannotUploadBecauseInappropriate: "由於判定可能包含不適當的內容,因此無法上船。"
cannotUploadBecauseNoFreeSpace: "由於雲端硬碟沒有可用空間,因此無法上船>"
beta: "Beta"
enableAutoSensitive: "自動NSFW判定"
enableAutoSensitiveDescription: "如果可用,請利用機器學習在媒體上自動設置 NSFW 旗標。 即使關閉此功能,依實例而定也可能會自動設置。"
activeEmailValidationDescription: "積極地驗證用戶的電子郵件地址,判斷它是否為免洗地址,或者它是否可以通信。 若關閉,則只會檢查字元是否正確。"
navbar: "導覽列"
shuffle: "隨機"
account: "帳戶"
move: "移動 "
_sensitiveMediaDetection:
description: "您可以使用機器學習自動檢測敏感媒體並將其用於審核。 伺服器的負荷會稍微增加。"
sensitivity: "檢測敏感度"
sensitivityDescription: "敏感度低時,誤檢測(偽陽性)會減少。敏感度高時,漏檢(偽陰性)會減少。"
setSensitiveFlagAutomatically: "設定 NSFW 旗標"
setSensitiveFlagAutomaticallyDescription: "即使將此設定關閉,判定結果也會保留在內部。"
analyzeVideos: "啟用影片分析"
analyzeVideosDescription: "除了靜止影像以外,也分析影片。伺服器的負荷會稍微增加。"
_emailUnavailable:
used: "已經在使用中"
format: "格式無效"
@@ -884,6 +943,24 @@ _plugin:
install: "安裝外掛組件"
installWarn: "請不要安裝來源不明的外掛組件。"
manage: "管理外掛"
_preferencesBackups:
list: "已備份的設定檔"
saveNew: "另存新檔"
loadFile: "讀取檔案"
apply: "套用在此裝置"
save: "覆蓋存檔"
inputName: "輸入備份檔名稱"
cannotSave: "無法儲存"
nameAlreadyExists: "備份檔名稱「{name}」已經存在。請指定不同的名稱。"
applyConfirm: "將備份檔「{name}」套用在現在的裝置嗎?現在的裝置設定將會消失。"
saveConfirm: "要覆蓋存檔{name}嗎?"
deleteConfirm: "要刪除{name}嗎?"
renameConfirm: "要將「{old}」變更為「{new}」嗎?"
noBackups: "沒有備份檔。您可以用「另存新檔」將現在的客戶端設定儲存在伺服器上。"
createdAt: "建立日期:{date} {time}"
updatedAt: "更新日期:{date} {time}"
cannotLoad: "無法讀取"
invalidFile: "檔案形式錯誤。"
_registry:
scope: "範圍"
key: "機碼"
@@ -967,6 +1044,8 @@ _mfm:
sparkleDescription: "添加閃閃發光的粒子效果。"
rotate: "旋轉"
rotateDescription: "以指定的角度旋轉。"
plain: "簡潔"
plainDescription: "停用全部的內部語法。"
_instanceTicker:
none: "隱藏"
remote: "向遠端使用者顯示"
@@ -1196,10 +1275,13 @@ _widgets:
trends: "發燒貼文"
clock: "時鐘"
rss: "RSS閱讀器"
rssTicker: "RSS跑馬燈"
activity: "動態"
photos: "照片"
digitalClock: "電子時鐘"
unixClock: "UNIX時間"
federation: "聯邦宇宙"
instanceCloud: "實例雲"
postForm: "發佈窗口"
slideshow: "幻燈片"
button: "按鈕"
@@ -1637,9 +1719,8 @@ _notification:
_deck:
alwaysShowMainColumn: "總是顯示主欄"
columnAlign: "對齊欄位"
columnMargin: "列之間的邊距"
columnHeaderHeight: "欄位標題高度"
addColumn: "新增欄位"
configureColumn: "欄位的設定"
swapLeft: "向左移動"
swapRight: "向右移動"
swapUp: "往上移動"
@@ -1647,6 +1728,11 @@ _deck:
stackLeft: "向左折疊"
popRight: "向右彈出"
profile: "個人檔案"
newProfile: "新建個人檔案"
deleteProfile: "刪除個人檔案"
introduction: "組合欄位來製作屬於自己的介面吧!"
introduction2: "您可以隨時透過按畫面右方的 + 來添加欄位。"
widgetsIntroduction: "請從欄位的選單中,選擇「編輯小工具」來添加小工具"
_columns:
main: "主列"
widgets: "小工具"

View File

@@ -1,6 +1,6 @@
{
"name": "misskey",
"version": "12.111.1",
"version": "12.118.0",
"codename": "indigo",
"repository": {
"type": "git",
@@ -41,10 +41,10 @@
"devDependencies": {
"@types/gulp": "4.0.9",
"@types/gulp-rename": "2.0.1",
"@typescript-eslint/parser": "5.27.1",
"@typescript-eslint/parser": "5.31.0",
"cross-env": "7.0.3",
"cypress": "10.0.3",
"cypress": "10.3.1",
"start-server-and-test": "1.14.0",
"typescript": "4.7.3"
"typescript": "4.7.4"
}
}

View File

@@ -5,6 +5,6 @@
"loader=./test/loader.js"
],
"slow": 1000,
"timeout": 10000,
"timeout": 30000,
"exit": true
}

View File

@@ -0,0 +1,5 @@
Font Awesome Icons
-------------------------
Ⓒ Font Awesome
CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 844 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 772 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 798 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 B

View File

@@ -28,11 +28,11 @@ export class foreignKeyReports1651224615271 {
queryRunner.query(`CREATE INDEX "IDX_315c779174fe8247ab324f036e" ON "drive_file" ("isLink")`),
queryRunner.query(`CREATE INDEX "IDX_f22169eb10657bded6d875ac8f" ON "note" ("channelId")`),
queryRunner.query(`CREATE INDEX "IDX_a9021cc2e1feb5f72d3db6e9f5" ON "abuse_user_report" ("targetUserId")`),
//queryRunner.query(`CREATE INDEX "IDX_a9021cc2e1feb5f72d3db6e9f5" ON "abuse_user_report" ("targetUserId")`),
queryRunner.query(`DELETE FROM "abuse_user_report" WHERE "targetUserId" NOT IN (SELECT "id" FROM "user")`).then(() => {
queryRunner.query(`ALTER TABLE "abuse_user_report" ADD CONSTRAINT "FK_a9021cc2e1feb5f72d3db6e9f5f" FOREIGN KEY ("targetUserId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
}),
//queryRunner.query(`DELETE FROM "abuse_user_report" WHERE "targetUserId" NOT IN (SELECT "id" FROM "user")`).then(() => {
// queryRunner.query(`ALTER TABLE "abuse_user_report" ADD CONSTRAINT "FK_a9021cc2e1feb5f72d3db6e9f5f" FOREIGN KEY ("targetUserId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
//}),
queryRunner.query(`ALTER TABLE "poll" ADD CONSTRAINT "UQ_da851e06d0dfe2ef397d8b1bf1b" UNIQUE ("noteId")`),
queryRunner.query(`ALTER TABLE "user_keypair" ADD CONSTRAINT "UQ_f4853eb41ab722fe05f81cedeb6" UNIQUE ("userId")`),

View File

@@ -0,0 +1,23 @@
export class nsfwDetection1655368940105 {
name = 'nsfwDetection1655368940105'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "drive_file" ADD "forceIsSensitive" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`ALTER TABLE "drive_file" ADD "predictedIsSensitive" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`COMMENT ON COLUMN "drive_file"."predictedIsSensitive" IS 'Whether the DriveFile is NSFW. (predict)'`);
await queryRunner.query(`CREATE TYPE "public"."meta_sensitiveimagedetection_enum" AS ENUM('none', 'all', 'local', 'remote')`);
await queryRunner.query(`ALTER TABLE "meta" ADD "sensitiveImageDetection" "public"."meta_sensitiveimagedetection_enum" NOT NULL DEFAULT 'none'`);
await queryRunner.query(`ALTER TABLE "meta" ADD "forceIsSensitiveWhenPredicted" boolean NOT NULL DEFAULT true`);
await queryRunner.query(`CREATE INDEX "IDX_fc2d74a6d7d8b11292a851d8f8" ON "drive_file" ("predictedIsSensitive") `);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "public"."IDX_fc2d74a6d7d8b11292a851d8f8"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "forceIsSensitiveWhenPredicted"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "sensitiveImageDetection"`);
await queryRunner.query(`DROP TYPE "public"."meta_sensitiveimagedetection_enum"`);
await queryRunner.query(`COMMENT ON COLUMN "drive_file"."predictedIsSensitive" IS 'Whether the DriveFile is NSFW. (predict)'`);
await queryRunner.query(`ALTER TABLE "drive_file" DROP COLUMN "predictedIsSensitive"`);
await queryRunner.query(`ALTER TABLE "drive_file" DROP COLUMN "forceIsSensitive"`);
}
}

View File

@@ -0,0 +1,15 @@
export class nsfwDetection21655371960534 {
name = 'nsfwDetection21655371960534'
async up(queryRunner) {
await queryRunner.query(`CREATE TYPE "public"."meta_sensitiveimagedetectionsensitivity_enum" AS ENUM('medium', 'low', 'high')`);
await queryRunner.query(`ALTER TABLE "meta" ADD "sensitiveImageDetectionSensitivity" "public"."meta_sensitiveimagedetectionsensitivity_enum" NOT NULL DEFAULT 'medium'`);
await queryRunner.query(`ALTER TABLE "meta" ADD "disallowUploadWhenPredictedAsPorn" boolean NOT NULL DEFAULT false`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "disallowUploadWhenPredictedAsPorn"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "sensitiveImageDetectionSensitivity"`);
await queryRunner.query(`DROP TYPE "public"."meta_sensitiveimagedetectionsensitivity_enum"`);
}
}

View File

@@ -0,0 +1,21 @@
export class nsfwDetection31655388169582 {
name = 'nsfwDetection31655388169582'
async up(queryRunner) {
await queryRunner.query(`ALTER TYPE "public"."meta_sensitiveimagedetectionsensitivity_enum" RENAME TO "meta_sensitiveimagedetectionsensitivity_enum_old"`);
await queryRunner.query(`CREATE TYPE "public"."meta_sensitiveimagedetectionsensitivity_enum" AS ENUM('medium', 'low', 'high', 'veryLow', 'veryHigh')`);
await queryRunner.query(`ALTER TABLE "meta" ALTER COLUMN "sensitiveImageDetectionSensitivity" DROP DEFAULT`);
await queryRunner.query(`ALTER TABLE "meta" ALTER COLUMN "sensitiveImageDetectionSensitivity" TYPE "public"."meta_sensitiveimagedetectionsensitivity_enum" USING "sensitiveImageDetectionSensitivity"::"text"::"public"."meta_sensitiveimagedetectionsensitivity_enum"`);
await queryRunner.query(`ALTER TABLE "meta" ALTER COLUMN "sensitiveImageDetectionSensitivity" SET DEFAULT 'medium'`);
await queryRunner.query(`DROP TYPE "public"."meta_sensitiveimagedetectionsensitivity_enum_old"`);
}
async down(queryRunner) {
await queryRunner.query(`CREATE TYPE "public"."meta_sensitiveimagedetectionsensitivity_enum_old" AS ENUM('medium', 'low', 'high')`);
await queryRunner.query(`ALTER TABLE "meta" ALTER COLUMN "sensitiveImageDetectionSensitivity" DROP DEFAULT`);
await queryRunner.query(`ALTER TABLE "meta" ALTER COLUMN "sensitiveImageDetectionSensitivity" TYPE "public"."meta_sensitiveimagedetectionsensitivity_enum_old" USING "sensitiveImageDetectionSensitivity"::"text"::"public"."meta_sensitiveimagedetectionsensitivity_enum_old"`);
await queryRunner.query(`ALTER TABLE "meta" ALTER COLUMN "sensitiveImageDetectionSensitivity" SET DEFAULT 'medium'`);
await queryRunner.query(`DROP TYPE "public"."meta_sensitiveimagedetectionsensitivity_enum"`);
await queryRunner.query(`ALTER TYPE "public"."meta_sensitiveimagedetectionsensitivity_enum_old" RENAME TO "meta_sensitiveimagedetectionsensitivity_enum"`);
}
}

View File

@@ -0,0 +1,25 @@
export class nsfwDetection41655393015659 {
name = 'nsfwDetection41655393015659'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "sensitiveImageDetection"`);
await queryRunner.query(`DROP TYPE "public"."meta_sensitiveimagedetection_enum"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "sensitiveImageDetectionSensitivity"`);
await queryRunner.query(`DROP TYPE "public"."meta_sensitiveimagedetectionsensitivity_enum"`);
await queryRunner.query(`CREATE TYPE "public"."meta_sensitivemediadetection_enum" AS ENUM('none', 'all', 'local', 'remote')`);
await queryRunner.query(`ALTER TABLE "meta" ADD "sensitiveMediaDetection" "public"."meta_sensitivemediadetection_enum" NOT NULL DEFAULT 'none'`);
await queryRunner.query(`CREATE TYPE "public"."meta_sensitivemediadetectionsensitivity_enum" AS ENUM('medium', 'low', 'high', 'veryLow', 'veryHigh')`);
await queryRunner.query(`ALTER TABLE "meta" ADD "sensitiveMediaDetectionSensitivity" "public"."meta_sensitivemediadetectionsensitivity_enum" NOT NULL DEFAULT 'medium'`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "sensitiveMediaDetectionSensitivity"`);
await queryRunner.query(`DROP TYPE "public"."meta_sensitivemediadetectionsensitivity_enum"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "sensitiveMediaDetection"`);
await queryRunner.query(`DROP TYPE "public"."meta_sensitivemediadetection_enum"`);
await queryRunner.query(`CREATE TYPE "public"."meta_sensitiveimagedetectionsensitivity_enum" AS ENUM('medium', 'low', 'high', 'veryLow', 'veryHigh')`);
await queryRunner.query(`ALTER TABLE "meta" ADD "sensitiveImageDetectionSensitivity" "public"."meta_sensitiveimagedetectionsensitivity_enum" NOT NULL DEFAULT 'medium'`);
await queryRunner.query(`CREATE TYPE "public"."meta_sensitiveimagedetection_enum" AS ENUM('none', 'all', 'local', 'remote')`);
await queryRunner.query(`ALTER TABLE "meta" ADD "sensitiveImageDetection" "public"."meta_sensitiveimagedetection_enum" NOT NULL DEFAULT 'none'`);
}
}

View File

@@ -0,0 +1,13 @@
export class driveCapacityOverrideMb1655813815729 {
name = 'driveCapacityOverrideMb1655813815729'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "user" ADD "driveCapacityOverrideMb" integer`);
await queryRunner.query(`COMMENT ON COLUMN "user"."driveCapacityOverrideMb" IS 'Overrides user drive capacity limit'`);
}
async down(queryRunner) {
await queryRunner.query(`COMMENT ON COLUMN "user"."driveCapacityOverrideMb" IS 'Overrides user drive capacity limit'`);
await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "driveCapacityOverrideMb"`);
}
}

View File

@@ -0,0 +1,17 @@
export class userIp1655918165614 {
name = 'userIp1655918165614'
async up(queryRunner) {
await queryRunner.query(`CREATE TABLE "user_ip" ("id" SERIAL NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "ip" character varying(128) NOT NULL, CONSTRAINT "PK_2c44ddfbf7c0464d028dcef325e" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_7f7f1c66f48e9a8e18a33bc515" ON "user_ip" ("userId") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_361b500e06721013c124b7b6c5" ON "user_ip" ("userId", "ip") `);
await queryRunner.query(`ALTER TABLE "user_ip" ADD CONSTRAINT "FK_7f7f1c66f48e9a8e18a33bc5150" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_ip" DROP CONSTRAINT "FK_7f7f1c66f48e9a8e18a33bc5150"`);
await queryRunner.query(`DROP INDEX "public"."IDX_361b500e06721013c124b7b6c5"`);
await queryRunner.query(`DROP INDEX "public"."IDX_7f7f1c66f48e9a8e18a33bc515"`);
await queryRunner.query(`DROP TABLE "user_ip"`);
}
}

View File

@@ -0,0 +1,13 @@
export class fileIp1656122560740 {
name = 'fileIp1656122560740'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "drive_file" ADD "requestHeaders" jsonb DEFAULT '{}'`);
await queryRunner.query(`ALTER TABLE "drive_file" ADD "requestIp" character varying(128)`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "drive_file" DROP COLUMN "requestIp"`);
await queryRunner.query(`ALTER TABLE "drive_file" DROP COLUMN "requestHeaders"`);
}
}

View File

@@ -0,0 +1,33 @@
export class nsfwDetection51656251734807 {
name = 'nsfwDetection51656251734807'
async up(queryRunner) {
await queryRunner.query(`DROP INDEX "public"."IDX_fc2d74a6d7d8b11292a851d8f8"`);
await queryRunner.query(`ALTER TABLE "drive_file" DROP COLUMN "forceIsSensitive"`);
await queryRunner.query(`ALTER TABLE "drive_file" DROP COLUMN "predictedIsSensitive"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "forceIsSensitiveWhenPredicted"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "disallowUploadWhenPredictedAsPorn"`);
await queryRunner.query(`ALTER TABLE "drive_file" ADD "maybeSensitive" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`COMMENT ON COLUMN "drive_file"."maybeSensitive" IS 'Whether the DriveFile is NSFW. (predict)'`);
await queryRunner.query(`ALTER TABLE "drive_file" ADD "maybePorn" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`ALTER TABLE "meta" ADD "setSensitiveFlagAutomatically" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "autoSensitive" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`CREATE INDEX "IDX_3b33dff77bb64b23c88151d23e" ON "drive_file" ("maybeSensitive") `);
await queryRunner.query(`CREATE INDEX "IDX_8bdcd3dd2bddb78014999a16ce" ON "drive_file" ("maybePorn") `);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "public"."IDX_8bdcd3dd2bddb78014999a16ce"`);
await queryRunner.query(`DROP INDEX "public"."IDX_3b33dff77bb64b23c88151d23e"`);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "autoSensitive"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "setSensitiveFlagAutomatically"`);
await queryRunner.query(`ALTER TABLE "drive_file" DROP COLUMN "maybePorn"`);
await queryRunner.query(`COMMENT ON COLUMN "drive_file"."maybeSensitive" IS 'Whether the DriveFile is NSFW. (predict)'`);
await queryRunner.query(`ALTER TABLE "drive_file" DROP COLUMN "maybeSensitive"`);
await queryRunner.query(`ALTER TABLE "meta" ADD "disallowUploadWhenPredictedAsPorn" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`ALTER TABLE "meta" ADD "forceIsSensitiveWhenPredicted" boolean NOT NULL DEFAULT true`);
await queryRunner.query(`ALTER TABLE "drive_file" ADD "predictedIsSensitive" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`ALTER TABLE "drive_file" ADD "forceIsSensitive" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`CREATE INDEX "IDX_fc2d74a6d7d8b11292a851d8f8" ON "drive_file" ("predictedIsSensitive") `);
}
}

View File

@@ -0,0 +1,13 @@
export class ip21656328812281 {
name = 'ip21656328812281'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_ip" DROP CONSTRAINT "FK_7f7f1c66f48e9a8e18a33bc5150"`);
await queryRunner.query(`ALTER TABLE "meta" ADD "enableIpLogging" boolean NOT NULL DEFAULT false`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "enableIpLogging"`);
await queryRunner.query(`ALTER TABLE "user_ip" ADD CONSTRAINT "FK_7f7f1c66f48e9a8e18a33bc5150" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
}
}

View File

@@ -0,0 +1,11 @@
export class nsfwDetection61656408772602 {
name = 'nsfwDetection61656408772602'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" ADD "enableSensitiveMediaDetectionForVideos" boolean NOT NULL DEFAULT false`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "enableSensitiveMediaDetectionForVideos"`);
}
}

View File

@@ -0,0 +1,11 @@
export class userModerationNote1656772790599 {
name = 'userModerationNote1656772790599'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" ADD "moderationNote" character varying(8192) NOT NULL DEFAULT ''`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "moderationNote"`);
}
}

View File

@@ -0,0 +1,11 @@
export class activeEmailValidation1657346559800 {
name = 'activeEmailValidation1657346559800'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" ADD "enableActiveEmailValidation" boolean NOT NULL DEFAULT true`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "enableActiveEmailValidation"`);
}
}

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -13,8 +13,11 @@
"chokidar": "^3.3.1",
"lodash": "^4.17.21"
},
"optionalDependencies": {
"@tensorflow/tfjs-node": "3.19.0"
},
"dependencies": {
"@bull-board/koa": "3.11.1",
"@bull-board/koa": "4.1.1",
"@discordapp/twemoji": "14.0.2",
"@elastic/elasticsearch": "7.11.0",
"@koa/cors": "3.1.0",
@@ -23,38 +26,39 @@
"@peertube/http-signature": "1.6.0",
"@sinonjs/fake-timers": "9.1.2",
"@syuilo/aiscript": "0.11.1",
"abort-controller": "3.0.0",
"ajv": "8.11.0",
"archiver": "5.3.1",
"autobind-decorator": "2.4.0",
"autwh": "0.1.0",
"aws-sdk": "2.1152.0",
"aws-sdk": "2.1185.0",
"bcryptjs": "2.4.3",
"blurhash": "1.1.5",
"bull": "4.8.3",
"bull": "4.8.5",
"cacheable-lookup": "6.0.4",
"cbor": "8.1.0",
"chalk": "5.0.1",
"chalk-template": "0.4.0",
"chokidar": "3.5.3",
"cli-highlight": "2.1.11",
"color-convert": "2.0.1",
"content-disposition": "0.5.4",
"date-fns": "2.28.0",
"date-fns": "2.29.1",
"deep-email-validator": "0.1.21",
"escape-regexp": "0.0.1",
"feed": "4.2.2",
"file-type": "17.1.2",
"file-type": "17.1.4",
"fluent-ffmpeg": "2.1.2",
"got": "12.1.0",
"got": "12.3.0",
"hpagent": "0.1.2",
"ioredis": "4.28.5",
"ip-cidr": "3.0.10",
"is-svg": "4.3.2",
"js-yaml": "4.1.0",
"jsdom": "19.0.0",
"jsdom": "20.0.0",
"json5": "2.2.1",
"json5-loader": "4.0.1",
"jsonld": "6.0.0",
"jsrsasign": "10.5.24",
"jsrsasign": "10.5.26",
"koa": "2.13.4",
"koa-bodyparser": "4.3.0",
"koa-favicon": "2.1.0",
@@ -64,75 +68,72 @@
"koa-send": "5.0.1",
"koa-slow": "2.1.0",
"koa-views": "7.0.2",
"mfm-js": "0.22.1",
"mfm-js": "0.23.0",
"mime-types": "2.1.35",
"misskey-js": "0.0.14",
"mocha": "10.0.0",
"ms": "3.0.0-canary.1",
"multer": "1.4.4",
"nested-property": "4.0.0",
"node-fetch": "3.2.6",
"nodemailer": "6.7.5",
"node-fetch": "3.2.10",
"nodemailer": "6.7.7",
"nsfwjs": "2.4.1",
"os-utils": "0.0.14",
"parse5": "6.0.1",
"parse5": "7.0.0",
"pg": "8.7.3",
"private-ip": "2.3.3",
"probe-image-size": "7.2.3",
"promise-limit": "2.7.0",
"pug": "3.0.2",
"punycode": "2.1.1",
"pureimage": "0.3.8",
"qrcode": "1.5.0",
"pureimage": "0.3.14",
"qrcode": "1.5.1",
"random-seed": "0.3.0",
"ratelimiter": "3.4.1",
"re2": "1.17.4",
"redis": "3.1.2",
"re2": "1.17.7",
"redis-lock": "0.1.4",
"reflect-metadata": "0.1.13",
"rename": "1.0.4",
"require-all": "3.0.0",
"rndstr": "1.0.0",
"rss-parser": "3.12.0",
"s-age": "1.1.2",
"sanitize-html": "2.7.0",
"sanitize-html": "2.7.1",
"semver": "7.3.7",
"sharp": "0.29.3",
"speakeasy": "2.0.0",
"strict-event-emitter-types": "2.0.0",
"stringz": "2.1.0",
"style-loader": "3.3.1",
"summaly": "2.5.1",
"summaly": "2.7.0",
"syslog-pro": "1.0.0",
"systeminformation": "5.11.16",
"systeminformation": "5.12.1",
"tinycolor2": "1.4.2",
"tmp": "0.2.1",
"ts-loader": "9.3.0",
"ts-node": "10.8.1",
"tsc-alias": "1.6.9",
"ts-loader": "9.3.1",
"ts-node": "10.9.1",
"tsc-alias": "1.7.0",
"tsconfig-paths": "4.0.0",
"twemoji-parser": "14.0.0",
"typeorm": "0.3.6",
"typeorm": "0.3.7",
"ulid": "2.3.0",
"unzipper": "0.10.11",
"uuid": "8.3.2",
"web-push": "3.5.0",
"websocket": "1.0.34",
"ws": "8.8.0",
"ws": "8.8.1",
"xev": "3.0.2"
},
"devDependencies": {
"@redocly/openapi-core": "1.0.0-beta.97",
"@types/semver": "7.3.9",
"@redocly/openapi-core": "1.0.0-beta.105",
"@types/bcryptjs": "2.4.2",
"@types/bull": "3.15.8",
"@types/bull": "3.15.9",
"@types/cbor": "6.0.0",
"@types/escape-regexp": "0.0.1",
"@types/fluent-ffmpeg": "2.1.20",
"@types/is-url": "1.2.30",
"@types/js-yaml": "4.0.5",
"@types/jsdom": "16.2.14",
"@types/jsonld": "1.5.6",
"@types/jsrsasign": "10.5.1",
"@types/koa": "2.13.4",
"@types/jsrsasign": "10.5.2",
"@types/koa": "2.13.5",
"@types/koa-bodyparser": "4.3.7",
"@types/koa-cors": "0.0.2",
"@types/koa-favicon": "2.0.21",
@@ -144,11 +145,10 @@
"@types/koa__multer": "2.0.4",
"@types/koa__router": "8.0.11",
"@types/mocha": "9.1.1",
"@types/node": "17.0.41",
"@types/node": "18.6.3",
"@types/node-fetch": "3.0.3",
"@types/nodemailer": "6.4.4",
"@types/oauth": "0.9.1",
"@types/parse5": "6.0.3",
"@types/pug": "2.0.6",
"@types/punycode": "2.1.0",
"@types/qrcode": "1.4.2",
@@ -157,7 +157,8 @@
"@types/redis": "4.0.11",
"@types/rename": "1.0.4",
"@types/sanitize-html": "2.6.2",
"@types/sharp": "0.30.2",
"@types/semver": "7.3.10",
"@types/sharp": "0.30.4",
"@types/sinonjs__fake-timers": "8.1.2",
"@types/speakeasy": "2.0.7",
"@types/tinycolor2": "1.4.3",
@@ -166,12 +167,12 @@
"@types/web-push": "3.3.2",
"@types/websocket": "1.0.5",
"@types/ws": "8.5.3",
"@typescript-eslint/eslint-plugin": "5.27.1",
"@typescript-eslint/parser": "5.27.1",
"typescript": "4.7.3",
"eslint": "8.17.0",
"eslint-plugin-import": "2.26.0",
"@typescript-eslint/eslint-plugin": "5.31.0",
"@typescript-eslint/parser": "5.31.0",
"cross-env": "7.0.3",
"execa": "6.1.0"
"eslint": "8.20.0",
"eslint-plugin-import": "2.26.0",
"execa": "6.1.0",
"typescript": "4.7.4"
}
}

View File

@@ -19,6 +19,7 @@ export type Source = {
redis: {
host: string;
port: number;
family?: number;
pass: string;
db?: number;
prefix?: string;

View File

@@ -68,9 +68,10 @@ import { RegistryItem } from '@/models/entities/registry-item.js';
import { Ad } from '@/models/entities/ad.js';
import { PasswordResetRequest } from '@/models/entities/password-reset-request.js';
import { UserPending } from '@/models/entities/user-pending.js';
import { Webhook } from '@/models/entities/webhook.js';
import { UserIp } from '@/models/entities/user-ip.js';
import { entities as charts } from '@/services/chart/entities.js';
import { Webhook } from '@/models/entities/webhook.js';
import { envOption } from '../env.js';
import { dbLogger } from './logger.js';
import { redisClient } from './redis.js';
@@ -173,6 +174,7 @@ export const entities = [
PasswordResetRequest,
UserPending,
Webhook,
UserIp,
...charts,
];
@@ -192,12 +194,13 @@ export const db = new DataSource({
synchronize: process.env.NODE_ENV === 'test',
dropSchema: process.env.NODE_ENV === 'test',
cache: !config.db.disableCache ? {
type: 'redis',
type: 'ioredis',
options: {
host: config.redis.host,
port: config.redis.port,
family: config.redis.family == null ? 0 : config.redis.family,
password: config.redis.pass,
prefix: `${config.redis.prefix}:query:`,
keyPrefix: `${config.redis.prefix}:query:`,
db: config.redis.db || 0,
},
} : false,
@@ -226,7 +229,7 @@ export async function initDb(force = false) {
export async function resetDb() {
const reset = async () => {
await redisClient.FLUSHDB();
await redisClient.flushdb();
const tables = await db.query(`SELECT relname AS "table"
FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')

View File

@@ -1,16 +1,15 @@
import * as redis from 'redis';
import Redis from 'ioredis';
import config from '@/config/index.js';
export function createConnection() {
return redis.createClient(
config.redis.port,
config.redis.host,
{
password: config.redis.pass,
prefix: config.redis.prefix,
db: config.redis.db || 0,
}
);
return new Redis({
port: config.redis.port,
host: config.redis.host,
family: config.redis.family == null ? 0 : config.redis.family,
password: config.redis.pass,
keyPrefix: `${config.redis.prefix}:`,
db: config.redis.db || 0,
});
}
export const subsdcriber = createConnection();

View File

@@ -1,8 +1,10 @@
import * as parse5 from 'parse5';
import treeAdapter from 'parse5/lib/tree-adapters/default.js';
import { URL } from 'node:url';
import * as parse5 from 'parse5';
import * as TreeAdapter from '../../node_modules/parse5/dist/tree-adapters/default.js';
const urlRegex = /^https?:\/\/[\w\/:%#@$&?!()\[\]~.,=+\-]+/;
const treeAdapter = TreeAdapter.defaultTreeAdapter;
const urlRegex = /^https?:\/\/[\w\/:%#@$&?!()\[\]~.,=+\-]+/;
const urlRegexFull = /^https?:\/\/[\w\/:%#@$&?!()\[\]~.,=+\-]+$/;
export function fromHtml(html: string, hashtagNames?: string[]): string {
@@ -19,7 +21,7 @@ export function fromHtml(html: string, hashtagNames?: string[]): string {
return text.trim();
function getText(node: parse5.Node): string {
function getText(node: TreeAdapter.Node): string {
if (treeAdapter.isTextNode(node)) return node.value;
if (!treeAdapter.isElementNode(node)) return '';
if (node.nodeName === 'br') return '\n';
@@ -31,7 +33,7 @@ export function fromHtml(html: string, hashtagNames?: string[]): string {
return '';
}
function appendChildren(childNodes: parse5.ChildNode[]): void {
function appendChildren(childNodes: TreeAdapter.ChildNode[]): void {
if (childNodes) {
for (const n of childNodes) {
analyze(n);
@@ -39,7 +41,7 @@ export function fromHtml(html: string, hashtagNames?: string[]): string {
}
}
function analyze(node: parse5.Node) {
function analyze(node: TreeAdapter.Node) {
if (treeAdapter.isTextNode(node)) {
text += node.value;
return;
@@ -170,7 +172,7 @@ export function fromHtml(html: string, hashtagNames?: string[]): string {
const t = getText(node);
if (t) {
text += '\n> ';
text += t.split('\n').join(`\n> `);
text += t.split('\n').join('\n> ');
}
break;
}

View File

@@ -145,6 +145,12 @@ export function toHtml(nodes: mfm.MfmNode[] | null, mentionedRemoteUsers: IMenti
a.textContent = node.props.content;
return a;
},
plain(node) {
const el = doc.createElement('span');
appendChildren(node.children, el);
return el;
},
};
appendChildren(nodes, doc.body);

View File

@@ -16,11 +16,13 @@ export async function checkWordMute(note: NoteLike, me: UserLike | null | undefi
if (me && (note.userId === me.id)) return false;
if (mutedWords.length > 0) {
if (note.text == null) return false;
const text = ((note.cw ?? '') + '\n' + (note.text ?? '')).trim();
if (text === '') return false;
const matched = mutedWords.some(filter => {
if (Array.isArray(filter)) {
return filter.every(keyword => note.text!.includes(keyword));
return filter.every(keyword => text.includes(keyword));
} else {
// represents RegExp
const regexp = filter.match(/^\/(.+)\/(.*)$/);
@@ -29,7 +31,7 @@ export async function checkWordMute(note: NoteLike, me: UserLike | null | undefi
if (!regexp) return false;
try {
return new RE2(regexp[1], regexp[2]).test(note.text!);
return new RE2(regexp[1], regexp[2]).test(text);
} catch (err) {
// This should never happen due to input sanitisation.
return false;

View File

@@ -11,9 +11,14 @@ export function createTemp(): Promise<[string, () => void]> {
export function createTempDir(): Promise<[string, () => void]> {
return new Promise<[string, () => void]>((res, rej) => {
tmp.dir((e, path, cleanup) => {
if (e) return rej(e);
res([path, cleanup]);
});
tmp.dir(
{
unsafeCleanup: true,
},
(e, path, cleanup) => {
if (e) return rej(e);
res([path, cleanup]);
}
);
});
}

View File

@@ -7,28 +7,31 @@ import { WriteStream } from 'node:fs';
import * as p from 'pureimage';
import gen from 'random-seed';
const size = 256; // px
const size = 128; // px
const n = 5; // resolution
const margin = (size / n);
const margin = (size / 4);
const colors = [
'#e57373',
'#F06292',
'#BA68C8',
'#9575CD',
'#7986CB',
'#64B5F6',
'#4FC3F7',
'#4DD0E1',
'#4DB6AC',
'#81C784',
'#8BC34A',
'#AFB42B',
'#F57F17',
'#FF5722',
'#795548',
'#455A64',
['#FF512F', '#DD2476'],
['#FF61D2', '#FE9090'],
['#72FFB6', '#10D164'],
['#FD8451', '#FFBD6F'],
['#305170', '#6DFC6B'],
['#00C0FF', '#4218B8'],
['#009245', '#FCEE21'],
['#0100EC', '#FB36F4'],
['#FDABDD', '#374A5A'],
['#38A2D7', '#561139'],
['#121C84', '#8278DA'],
['#5761B2', '#1FC5A8'],
['#FFDB01', '#0E197D'],
['#FF3E9D', '#0E1F40'],
['#766eff', '#00d4ff'],
['#9bff6e', '#00d4ff'],
['#ff6e94', '#00d4ff'],
['#ffa96e', '#00d4ff'],
['#ffa96e', '#ff009d'],
['#ffdd6e', '#ff009d'],
];
const bg = '#e9e9e9';
const actualSize = size - (margin * 2);
const cellSize = actualSize / n;
@@ -42,11 +45,17 @@ export function genIdenticon(seed: string, stream: WriteStream): Promise<void> {
const canvas = p.make(size, size, undefined);
const ctx = canvas.getContext('2d');
const bgColors = colors[rand(colors.length)];
const bg = ctx.createLinearGradient(0, 0, size, size);
bg.addColorStop(0, bgColors[0]);
bg.addColorStop(1, bgColors[1]);
ctx.fillStyle = bg;
ctx.beginPath();
ctx.fillRect(0, 0, size, size);
ctx.fillStyle = colors[rand(colors.length)];
ctx.fillStyle = '#ffffff';
// side bitmap (filled by false)
const side: boolean[][] = new Array(sideN);

View File

@@ -1,12 +1,18 @@
import * as fs from 'node:fs';
import * as crypto from 'node:crypto';
import { join } from 'node:path';
import * as stream from 'node:stream';
import * as util from 'node:util';
import { FSWatcher } from 'chokidar';
import { fileTypeFromFile } from 'file-type';
import FFmpeg from 'fluent-ffmpeg';
import isSvg from 'is-svg';
import probeImageSize from 'probe-image-size';
import { type predictionType } from 'nsfwjs';
import sharp from 'sharp';
import { encode } from 'blurhash';
import { detectSensitive } from '@/services/detect-sensitive.js';
import { createTempDir } from './create-temp.js';
const pipeline = util.promisify(stream.pipeline);
@@ -21,6 +27,8 @@ export type FileInfo = {
height?: number;
orientation?: number;
blurhash?: string;
sensitive: boolean;
porn: boolean;
warnings: string[];
};
@@ -37,7 +45,12 @@ const TYPE_SVG = {
/**
* Get file information
*/
export async function getFileInfo(path: string): Promise<FileInfo> {
export async function getFileInfo(path: string, opts: {
skipSensitiveDetection: boolean;
sensitiveThreshold?: number;
sensitiveThresholdForPorn?: number;
enableSensitiveMediaDetectionForVideos?: boolean;
}): Promise<FileInfo> {
const warnings = [] as string[];
const size = await getFileSize(path);
@@ -58,7 +71,7 @@ export async function getFileInfo(path: string): Promise<FileInfo> {
// うまく判定できない画像は octet-stream にする
if (!imageSize) {
warnings.push(`cannot detect image dimensions`);
warnings.push('cannot detect image dimensions');
type = TYPE_OCTET_STREAM;
} else if (imageSize.wUnits === 'px') {
width = imageSize.width;
@@ -67,7 +80,7 @@ export async function getFileInfo(path: string): Promise<FileInfo> {
// 制限を超えている画像は octet-stream にする
if (imageSize.width > 16383 || imageSize.height > 16383) {
warnings.push(`image dimensions exceeds limits`);
warnings.push('image dimensions exceeds limits');
type = TYPE_OCTET_STREAM;
}
} else {
@@ -84,6 +97,23 @@ export async function getFileInfo(path: string): Promise<FileInfo> {
});
}
let sensitive = false;
let porn = false;
if (!opts.skipSensitiveDetection) {
await detectSensitivity(
path,
type.mime,
opts.sensitiveThreshold ?? 0.5,
opts.sensitiveThresholdForPorn ?? 0.75,
opts.enableSensitiveMediaDetectionForVideos ?? false,
).then(value => {
[sensitive, porn] = value;
}, error => {
warnings.push(`detectSensitivity failed: ${error}`);
});
}
return {
size,
md5,
@@ -92,10 +122,150 @@ export async function getFileInfo(path: string): Promise<FileInfo> {
height,
orientation,
blurhash,
sensitive,
porn,
warnings,
};
}
async function detectSensitivity(source: string, mime: string, sensitiveThreshold: number, sensitiveThresholdForPorn: number, analyzeVideo: boolean): Promise<[sensitive: boolean, porn: boolean]> {
let sensitive = false;
let porn = false;
function judgePrediction(result: readonly predictionType[]): [sensitive: boolean, porn: boolean] {
let sensitive = false;
let porn = false;
if ((result.find(x => x.className === 'Sexy')?.probability ?? 0) > sensitiveThreshold) sensitive = true;
if ((result.find(x => x.className === 'Hentai')?.probability ?? 0) > sensitiveThreshold) sensitive = true;
if ((result.find(x => x.className === 'Porn')?.probability ?? 0) > sensitiveThreshold) sensitive = true;
if ((result.find(x => x.className === 'Porn')?.probability ?? 0) > sensitiveThresholdForPorn) porn = true;
return [sensitive, porn];
}
if (['image/jpeg', 'image/png', 'image/webp'].includes(mime)) {
const result = await detectSensitive(source);
if (result) {
[sensitive, porn] = judgePrediction(result);
}
} else if (analyzeVideo && (mime === 'image/apng' || mime.startsWith('video/'))) {
const [outDir, disposeOutDir] = await createTempDir();
try {
const command = FFmpeg()
.input(source)
.inputOptions([
'-skip_frame', 'nokey', // 可能ならキーフレームのみを取得してほしいとする(そうなるとは限らない)
'-lowres', '3', // 元の画質でデコードする必要はないので 1/8 画質でデコードしてもよいとする(そうなるとは限らない)
])
.noAudio()
.videoFilters([
{
filter: 'select', // フレームのフィルタリング
options: {
e: 'eq(pict_type,PICT_TYPE_I)', // I-Frame のみをフィルタするVP9 とかはデコードしてみないとわからないっぽい)
},
},
{
filter: 'blackframe', // 暗いフレームの検出
options: {
amount: '0', // 暗さに関わらず全てのフレームで測定値を取る
},
},
{
filter: 'metadata',
options: {
mode: 'select', // フレーム選択モード
key: 'lavfi.blackframe.pblack', // フレームにおける暗部の百分率(前のフィルタからのメタデータを参照する)
value: '50',
function: 'less', // 50% 未満のフレームを選択する50% 以上暗部があるフレームだと誤検知を招くかもしれないので)
},
},
{
filter: 'scale',
options: {
w: 299,
h: 299,
},
},
])
.format('image2')
.output(join(outDir, '%d.png'))
.outputOptions(['-vsync', '0']); // 可変フレームレートにすることで穴埋めをさせない
const results: ReturnType<typeof judgePrediction>[] = [];
let frameIndex = 0;
let targetIndex = 0;
let nextIndex = 1;
for await (const path of asyncIterateFrames(outDir, command)) {
try {
const index = frameIndex++;
if (index !== targetIndex) {
continue;
}
targetIndex = nextIndex;
nextIndex += index; // fibonacci sequence によってフレーム数制限を掛ける
const result = await detectSensitive(path);
if (result) {
results.push(judgePrediction(result));
}
} finally {
fs.promises.unlink(path);
}
}
sensitive = results.filter(x => x[0]).length >= Math.ceil(results.length * sensitiveThreshold);
porn = results.filter(x => x[1]).length >= Math.ceil(results.length * sensitiveThresholdForPorn);
} finally {
disposeOutDir();
}
}
return [sensitive, porn];
}
async function* asyncIterateFrames(cwd: string, command: FFmpeg.FfmpegCommand): AsyncGenerator<string, void> {
const watcher = new FSWatcher({
cwd,
disableGlobbing: true,
});
let finished = false;
command.once('end', () => {
finished = true;
watcher.close();
});
command.run();
for (let i = 1; true; i++) { // eslint-disable-line @typescript-eslint/no-unnecessary-condition
const current = `${i}.png`;
const next = `${i + 1}.png`;
const framePath = join(cwd, current);
if (await exists(join(cwd, next))) {
yield framePath;
} else if (!finished) { // eslint-disable-line @typescript-eslint/no-unnecessary-condition
watcher.add(next);
await new Promise<void>((resolve, reject) => {
watcher.on('add', function onAdd(path) {
if (path === next) { // 次フレームの書き出しが始まっているなら、現在フレームの書き出しは終わっている
watcher.unwatch(current);
watcher.off('add', onAdd);
resolve();
}
});
command.once('end', resolve); // 全てのフレームを処理し終わったなら、最終フレームである現在フレームの書き出しは終わっている
command.once('error', reject);
});
yield framePath;
} else if (await exists(framePath)) {
yield framePath;
} else {
return;
}
}
}
function exists(path: string): Promise<boolean> {
return fs.promises.access(path).then(() => true, () => false);
}
/**
* Detect MIME Type and extension
*/

View File

@@ -1,15 +0,0 @@
export function isBlockerUserRelated(note: any, blockerUserIds: Set<string>): boolean {
if (blockerUserIds.has(note.userId)) {
return true;
}
if (note.reply != null && blockerUserIds.has(note.reply.userId)) {
return true;
}
if (note.renote != null && blockerUserIds.has(note.renote.userId)) {
return true;
}
return false;
}

View File

@@ -0,0 +1,8 @@
import { FILE_TYPE_BROWSERSAFE } from '@/const.js';
const dictionary = {
'safe-file': FILE_TYPE_BROWSERSAFE,
'sharp-convertible-image': ['image/jpeg', 'image/png', 'image/gif', 'image/apng', 'image/vnd.mozilla.apng', 'image/webp', 'image/svg+xml'],
};
export const isMimeImage = (mime: string, type: keyof typeof dictionary): boolean => dictionary[type].includes(mime);

View File

@@ -1,15 +0,0 @@
export function isMutedUserRelated(note: any, mutedUserIds: Set<string>): boolean {
if (mutedUserIds.has(note.userId)) {
return true;
}
if (note.reply != null && mutedUserIds.has(note.reply.userId)) {
return true;
}
if (note.renote != null && mutedUserIds.has(note.renote.userId)) {
return true;
}
return false;
}

View File

@@ -0,0 +1,15 @@
export function isUserRelated(note: any, userIds: Set<string>): boolean {
if (userIds.has(note.userId)) {
return true;
}
if (note.reply != null && userIds.has(note.reply.userId)) {
return true;
}
if (note.renote != null && userIds.has(note.renote.userId)) {
return true;
}
return false;
}

View File

@@ -1,7 +1,7 @@
import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
import { id } from '../id.js';
import { User } from './user.js';
import { DriveFolder } from './drive-folder.js';
import { id } from '../id.js';
@Entity()
@Index(['userId', 'folderId', 'id'])
@@ -156,6 +156,19 @@ export class DriveFile {
})
public isSensitive: boolean;
@Index()
@Column('boolean', {
default: false,
comment: 'Whether the DriveFile is NSFW. (predict)',
})
public maybeSensitive: boolean;
@Index()
@Column('boolean', {
default: false,
})
public maybePorn: boolean;
/**
* 外部の(信頼されていない)URLへの直リンクか否か
*/
@@ -165,4 +178,15 @@ export class DriveFile {
comment: 'Whether the DriveFile is direct link to remote server.',
})
public isLink: boolean;
@Column('jsonb', {
default: {},
nullable: true,
})
public requestHeaders: Record<string, string> | null;
@Column('varchar', {
length: 128, nullable: true,
})
public requestIp: string | null;
}

View File

@@ -1,6 +1,6 @@
import { Entity, Column, PrimaryColumn, ManyToOne, JoinColumn } from 'typeorm';
import { User } from './user.js';
import { id } from '../id.js';
import { User } from './user.js';
import { Clip } from './clip.js';
@Entity()
@@ -188,6 +188,28 @@ export class Meta {
})
public recaptchaSecretKey: string | null;
@Column('enum', {
enum: ['none', 'all', 'local', 'remote'],
default: 'none',
})
public sensitiveMediaDetection: 'none' | 'all' | 'local' | 'remote';
@Column('enum', {
enum: ['medium', 'low', 'high', 'veryLow', 'veryHigh'],
default: 'medium',
})
public sensitiveMediaDetectionSensitivity: 'medium' | 'low' | 'high' | 'veryLow' | 'veryHigh';
@Column('boolean', {
default: false,
})
public setSensitiveFlagAutomatically: boolean;
@Column('boolean', {
default: false,
})
public enableSensitiveMediaDetectionForVideos: boolean;
@Column('integer', {
default: 1024,
comment: 'Drive capacity of a local user (MB)',
@@ -427,4 +449,14 @@ export class Meta {
default: true,
})
public objectStorageS3ForcePathStyle: boolean;
@Column('boolean', {
default: false,
})
public enableIpLogging: boolean;
@Column('boolean', {
default: true,
})
public enableActiveEmailValidation: boolean;
}

View File

@@ -0,0 +1,24 @@
import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne, PrimaryGeneratedColumn } from 'typeorm';
import { id } from '../id.js';
import { Note } from './note.js';
import { User } from './user.js';
@Entity()
@Index(['userId', 'ip'], { unique: true })
export class UserIp {
@PrimaryGeneratedColumn()
public id: string;
@Column('timestamp with time zone', {
})
public createdAt: Date;
@Index()
@Column(id())
public userId: User['id'];
@Column('varchar', {
length: 128,
})
public ip: string;
}

View File

@@ -1,8 +1,8 @@
import { Entity, Column, Index, OneToOne, JoinColumn, PrimaryColumn } from 'typeorm';
import { ffVisibility, notificationTypes } from '@/types.js';
import { id } from '../id.js';
import { User } from './user.js';
import { Page } from './page.js';
import { ffVisibility, notificationTypes } from '@/types.js';
// TODO: このテーブルで管理している情報すべてレジストリで管理するようにしても良いかも
// ただ、「emailVerified が true なユーザーを find する」のようなクエリは書けなくなるからウーン
@@ -117,6 +117,11 @@ export class UserProfile {
})
public password: string | null;
@Column('varchar', {
length: 8192, default: '',
})
public moderationNote: string | null;
// TODO: そのうち消す
@Column('jsonb', {
default: {},
@@ -147,6 +152,11 @@ export class UserProfile {
})
public alwaysMarkNsfw: boolean;
@Column('boolean', {
default: false,
})
public autoSensitive: boolean;
@Column('boolean', {
default: false,
})

View File

@@ -218,6 +218,12 @@ export class User {
})
public token: string | null;
@Column('integer', {
nullable: true,
comment: 'Overrides user drive capacity limit',
})
public driveCapacityOverrideMb: number | null;
constructor(data: Partial<User>) {
if (data == null) return;

View File

@@ -65,6 +65,7 @@ import { PasswordResetRequest } from './entities/password-reset-request.js';
import { UserPending } from './entities/user-pending.js';
import { InstanceRepository } from './repositories/instance.js';
import { Webhook } from './entities/webhook.js';
import { UserIp } from './entities/user-ip.js';
export const Announcements = db.getRepository(Announcement);
export const AnnouncementReads = db.getRepository(AnnouncementRead);
@@ -90,6 +91,7 @@ export const UserGroups = (UserGroupRepository);
export const UserGroupJoinings = db.getRepository(UserGroupJoining);
export const UserGroupInvitations = (UserGroupInvitationRepository);
export const UserNotePinings = db.getRepository(UserNotePining);
export const UserIps = db.getRepository(UserIp);
export const UsedUsernames = db.getRepository(UsedUsername);
export const Followings = (FollowingRepository);
export const FollowRequests = (FollowRequestRepository);

View File

@@ -1,11 +1,13 @@
import { db } from '@/db/postgre.js';
import { Instance } from '@/models/entities/instance.js';
import { Packed } from '@/misc/schema.js';
import { fetchMeta } from '@/misc/fetch-meta.js';
export const InstanceRepository = db.getRepository(Instance).extend({
async pack(
instance: Instance,
): Promise<Packed<'FederationInstance'>> {
const meta = await fetchMeta();
return {
id: instance.id,
caughtAt: instance.caughtAt.toISOString(),
@@ -18,6 +20,7 @@ export const InstanceRepository = db.getRepository(Instance).extend({
lastCommunicatedAt: instance.lastCommunicatedAt.toISOString(),
isNotResponding: instance.isNotResponding,
isSuspended: instance.isSuspended,
isBlocked: meta.blockedHosts.includes(instance.host),
softwareName: instance.softwareName,
softwareVersion: instance.softwareVersion,
openRegistrations: instance.openRegistrations,
@@ -26,6 +29,8 @@ export const InstanceRepository = db.getRepository(Instance).extend({
maintainerName: instance.maintainerName,
maintainerEmail: instance.maintainerEmail,
iconUrl: instance.iconUrl,
faviconUrl: instance.faviconUrl,
themeColor: instance.themeColor,
infoUpdatedAt: instance.infoUpdatedAt ? instance.infoUpdatedAt.toISOString() : null,
};
},

View File

@@ -315,6 +315,7 @@ export const UserRepository = db.getRepository(User).extend({
} : undefined) : undefined,
emojis: populateEmojis(user.emojis, user.host),
onlineStatus: this.getOnlineStatus(user),
driveCapacityOverrideMb: user.driveCapacityOverrideMb,
...(opts.detail ? {
url: profile!.url,
@@ -359,6 +360,7 @@ export const UserRepository = db.getRepository(User).extend({
injectFeaturedNote: profile!.injectFeaturedNote,
receiveAnnouncementEmail: profile!.receiveAnnouncementEmail,
alwaysMarkNsfw: profile!.alwaysMarkNsfw,
autoSensitive: profile!.autoSensitive,
carefulBot: profile!.carefulBot,
autoAcceptFollowed: profile!.autoAcceptFollowed,
noCrawle: profile!.noCrawle,

View File

@@ -52,6 +52,10 @@ export const packedFederationInstanceSchema = {
type: 'boolean',
optional: false, nullable: false,
},
isBlocked: {
type: 'boolean',
optional: false, nullable: false,
},
softwareName: {
type: 'string',
optional: false, nullable: true,
@@ -88,6 +92,15 @@ export const packedFederationInstanceSchema = {
optional: false, nullable: true,
format: 'url',
},
faviconUrl: {
type: 'string',
optional: false, nullable: true,
format: 'url',
},
themeColor: {
type: 'string',
optional: false, nullable: true,
},
infoUpdatedAt: {
type: 'string',
optional: false, nullable: true,

View File

@@ -161,19 +161,19 @@ export const packedUserDetailedNotMeOnlySchema = {
type: 'array',
nullable: false, optional: false,
items: {
type: 'object',
nullable: false, optional: false,
properties: {
name: {
type: 'string',
nullable: false, optional: false,
},
value: {
type: 'string',
nullable: false, optional: false,
},
type: 'object',
nullable: false, optional: false,
properties: {
name: {
type: 'string',
nullable: false, optional: false,
},
maxLength: 4,
value: {
type: 'string',
nullable: false, optional: false,
},
},
maxLength: 4,
},
},
followersCount: {
@@ -292,6 +292,10 @@ export const packedMeDetailedOnlySchema = {
type: 'boolean',
nullable: true, optional: false,
},
autoSensitive: {
type: 'boolean',
nullable: true, optional: false,
},
carefulBot: {
type: 'boolean',
nullable: true, optional: false,

View File

@@ -2,6 +2,9 @@ import httpSignature from '@peertube/http-signature';
import { v4 as uuid } from 'uuid';
import config from '@/config/index.js';
import { DriveFile } from '@/models/entities/drive-file.js';
import { IActivity } from '@/remote/activitypub/type.js';
import { Webhook, webhookEventTypes } from '@/models/entities/webhook.js';
import { envOption } from '../env.js';
import processDeliver from './processors/deliver.js';
@@ -12,18 +15,15 @@ import processSystemQueue from './processors/system/index.js';
import processWebhookDeliver from './processors/webhook-deliver.js';
import { endedPollNotification } from './processors/ended-poll-notification.js';
import { queueLogger } from './logger.js';
import { DriveFile } from '@/models/entities/drive-file.js';
import { getJobInfo } from './get-job-info.js';
import { systemQueue, dbQueue, deliverQueue, inboxQueue, objectStorageQueue, endedPollNotificationQueue, webhookDeliverQueue } from './queues.js';
import { ThinUser } from './types.js';
import { IActivity } from '@/remote/activitypub/type.js';
import { Webhook, webhookEventTypes } from '@/models/entities/webhook.js';
function renderError(e: Error): any {
return {
stack: e?.stack,
message: e?.message,
name: e?.name,
stack: e.stack,
message: e.message,
name: e.name,
};
}
@@ -314,6 +314,12 @@ export default function() {
removeOnComplete: true,
});
systemQueue.add('clean', {
}, {
repeat: { cron: '0 0 * * *' },
removeOnComplete: true,
});
systemQueue.add('checkExpiredMutings', {
}, {
repeat: { cron: '*/5 * * * *' },

View File

@@ -6,6 +6,7 @@ export function initialize<T>(name: string, limitPerSec = -1) {
redis: {
port: config.redis.port,
host: config.redis.host,
family: config.redis.family == null ? 0 : config.redis.family,
password: config.redis.pass,
db: config.redis.db || 0,
},

View File

@@ -8,7 +8,7 @@ import { queueLogger } from '../../logger.js';
import { addFile } from '@/services/drive/add-file.js';
import { format as dateFormat } from 'date-fns';
import { Users, Emojis } from '@/models/index.js';
import { } from '@/queue/types.js';
import { } from '@/queue/types.js';
import { createTemp, createTempDir } from '@/misc/create-temp.js';
import { downloadUrl } from '@/misc/download-url.js';
import config from '@/config/index.js';

View File

@@ -0,0 +1,18 @@
import Bull from 'bull';
import { LessThan } from 'typeorm';
import { UserIps } from '@/models/index.js';
import { queueLogger } from '../../logger.js';
const logger = queueLogger.createSubLogger('clean');
export async function clean(job: Bull.Job<Record<string, unknown>>, done: any): Promise<void> {
logger.info('Cleaning...');
UserIps.delete({
createdAt: LessThan(new Date(Date.now() - (1000 * 60 * 60 * 24 * 90))),
});
logger.succ('Cleaned.');
done();
}

View File

@@ -3,12 +3,14 @@ import { tickCharts } from './tick-charts.js';
import { resyncCharts } from './resync-charts.js';
import { cleanCharts } from './clean-charts.js';
import { checkExpiredMutings } from './check-expired-mutings.js';
import { clean } from './clean.js';
const jobs = {
tickCharts,
resyncCharts,
cleanCharts,
checkExpiredMutings,
clean,
} as Record<string, Bull.ProcessCallbackFunction<Record<string, unknown>> | Bull.ProcessPromiseFunction<Record<string, unknown>>>;
export default function(dbQueue: Bull.Queue<Record<string, unknown>>) {

View File

@@ -200,7 +200,7 @@ export async function createNote(value: string | IObject, resolver?: Resolver, s
let text: string | null = null;
if (note.source?.mediaType === 'text/x.misskeymarkdown' && typeof note.source?.content === 'string') {
text = note.source.content;
} else if (typeof note._misskey_content === 'string') {
} else if (typeof note._misskey_content !== 'undefined') {
text = note._misskey_content;
} else if (typeof note.content === 'string') {
text = htmlToMfm(note.content, note.tag);

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