Compare commits

...
Sign in to create a new pull request.

325 commits

Author SHA1 Message Date
4c174910e6 Merge pull request '2025.2.0-yumechinokuni.1' (#53) from develop into master
Some checks failed
Publish Docker image / Build (push) Has been cancelled
Lint / pnpm_install (push) Has been cancelled
Test (backend) / unit (22.11.0) (push) Has been cancelled
Test (production install and build) / production (22.11.0) (push) Has been cancelled
Lint / lint (backend) (push) Has been cancelled
Lint / lint (frontend) (push) Has been cancelled
Lint / lint (frontend-embed) (push) Has been cancelled
Lint / lint (frontend-shared) (push) Has been cancelled
Lint / lint (misskey-bubble-game) (push) Has been cancelled
Lint / lint (misskey-js) (push) Has been cancelled
Lint / lint (misskey-reversi) (push) Has been cancelled
Lint / lint (sw) (push) Has been cancelled
Lint / typecheck (backend) (push) Has been cancelled
Lint / typecheck (misskey-js) (push) Has been cancelled
Lint / typecheck (sw) (push) Has been cancelled
Reviewed-on: #53
2025-02-14 06:22:15 -06:00
38dabb687a
2025.2.0-yumechinokuni.1
Some checks failed
Publish Docker image / Build (push) Has been cancelled
Lint / pnpm_install (push) Has been cancelled
Test (backend) / unit (22.11.0) (push) Has been cancelled
Test (production install and build) / production (22.11.0) (push) Has been cancelled
Publish Docker image / Build (pull_request) Has been cancelled
Lint / pnpm_install (pull_request) Has been cancelled
Test (backend) / unit (22.11.0) (pull_request) Has been cancelled
Test (production install and build) / production (22.11.0) (pull_request) Has been cancelled
Lint / lint (backend) (push) Has been cancelled
Lint / lint (frontend) (push) Has been cancelled
Lint / lint (frontend-embed) (push) Has been cancelled
Lint / lint (frontend-shared) (push) Has been cancelled
Lint / lint (misskey-bubble-game) (push) Has been cancelled
Lint / lint (misskey-js) (push) Has been cancelled
Lint / lint (misskey-reversi) (push) Has been cancelled
Lint / lint (sw) (push) Has been cancelled
Lint / typecheck (backend) (push) Has been cancelled
Lint / typecheck (misskey-js) (push) Has been cancelled
Lint / typecheck (sw) (push) Has been cancelled
Lint / lint (backend) (pull_request) Has been cancelled
Lint / lint (frontend) (pull_request) Has been cancelled
Lint / lint (frontend-embed) (pull_request) Has been cancelled
Lint / lint (frontend-shared) (pull_request) Has been cancelled
Lint / lint (misskey-bubble-game) (pull_request) Has been cancelled
Lint / lint (misskey-js) (pull_request) Has been cancelled
Lint / lint (misskey-reversi) (pull_request) Has been cancelled
Lint / lint (sw) (pull_request) Has been cancelled
Lint / typecheck (backend) (pull_request) Has been cancelled
Lint / typecheck (misskey-js) (pull_request) Has been cancelled
Lint / typecheck (sw) (pull_request) Has been cancelled
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2025-02-14 06:15:35 -06:00
b78fdb15db
Refuse all remote AP redirects
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2025-02-14 06:12:49 -06:00
6f5ca40037
Revert "enhance(backend) : リモートユーザーの照会をオリジナルにリダイレクトするように (#12892) (#14897)"
This reverts commit a4c5ce1413.

Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2025-02-14 05:57:11 -06:00
874cf30432
more readable domain authority check
Some checks are pending
Publish Docker image / Build (push) Waiting to run
Lint / pnpm_install (push) Waiting to run
Lint / lint (backend) (push) Blocked by required conditions
Lint / lint (frontend) (push) Blocked by required conditions
Lint / lint (frontend-embed) (push) Blocked by required conditions
Lint / lint (frontend-shared) (push) Blocked by required conditions
Lint / lint (misskey-bubble-game) (push) Blocked by required conditions
Lint / lint (misskey-js) (push) Blocked by required conditions
Lint / lint (misskey-reversi) (push) Blocked by required conditions
Lint / lint (sw) (push) Blocked by required conditions
Lint / typecheck (backend) (push) Blocked by required conditions
Lint / typecheck (misskey-js) (push) Blocked by required conditions
Lint / typecheck (sw) (push) Blocked by required conditions
Test (backend) / unit (22.11.0) (push) Waiting to run
Test (production install and build) / production (22.11.0) (push) Waiting to run
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2025-02-13 06:47:56 -06:00
03184c2d0c
Merge branch 'upstream-devel' into develop
Some checks failed
Publish Docker image / Build (push) Has been cancelled
Test (production install and build) / production (22.11.0) (push) Has been cancelled
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2025-02-11 15:43:50 -06:00
github-actions[bot]
b7c3630da9 Release: 2025.2.0
Some checks failed
Lint / locale_verify (push) Has been cancelled
API report (misskey.js) / report (pull_request) Has been cancelled
Check the description in CHANGELOG.md / check-changelog (pull_request) Has been cancelled
Check Misskey JS version / Check version (pull_request) Has been cancelled
Check SPDX-License-Identifier / check-spdx-license-id (pull_request) Has been cancelled
Dockle / dockle (pull_request) Has been cancelled
Get api.json from Misskey / get-from-misskey (api-base.json, 22.11.0, ${{ github.base_ref }}) (pull_request) Has been cancelled
Get api.json from Misskey / get-from-misskey (api-head.json, 22.11.0, refs/pull/${{ github.event.number }}/merge) (pull_request) Has been cancelled
Get api.json from Misskey / save-pr-number (pull_request) Has been cancelled
Lint / pnpm_install (pull_request) Has been cancelled
Lint / locale_verify (pull_request) Has been cancelled
Test (backend) / Unit tests (backend) (pull_request) Has been cancelled
Test (backend) / E2E tests (backend) (pull_request) Has been cancelled
Test (federation) / Federation test (pull_request) Has been cancelled
Test (frontend) / Unit tests (frontend) (pull_request) Has been cancelled
Test (frontend) / E2E tests (frontend) (pull_request) Has been cancelled
Test (misskey.js) / Unit tests (misskey.js) (pull_request) Has been cancelled
Test (production install and build) / Production build (pull_request) Has been cancelled
api.json validation / validate-api-json (22.11.0) (pull_request) Has been cancelled
Lint / lint (backend) (pull_request) Has been cancelled
Lint / lint (frontend) (pull_request) Has been cancelled
Lint / lint (frontend-embed) (pull_request) Has been cancelled
Lint / lint (frontend-shared) (pull_request) Has been cancelled
Lint / lint (misskey-bubble-game) (pull_request) Has been cancelled
Lint / lint (misskey-js) (pull_request) Has been cancelled
Lint / lint (misskey-reversi) (pull_request) Has been cancelled
Lint / lint (sw) (pull_request) Has been cancelled
Lint / typecheck (backend) (pull_request) Has been cancelled
Lint / typecheck (misskey-js) (pull_request) Has been cancelled
Lint / typecheck (sw) (pull_request) Has been cancelled
2025-02-05 08:58:41 +00:00
syuilo
0f0e88e4c7
Update CHANGELOG.md 2025-02-05 17:14:40 +09:00
かっこかり
fd880660a3
fix(frontend): デッキのプロファイルが新規作成できない問題を修正 (#15406)
* fix(frontend): デッキのプロファイルが保存できない問題を修正

* Update Changelog

* Update CHANGELOG.md
2025-02-05 08:02:10 +00:00
github-actions[bot]
2f4e2a7cca Bump version to 2025.2.0-beta.1 2025-02-05 04:24:51 +00:00
syuilo
23fc79bf06
New Crowdin updates (#15400)
* New translations ja-jp.yml (Russian)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Korean)

* New translations ja-jp.yml (Portuguese)

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

* New translations ja-jp.yml (English)

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

* New translations ja-jp.yml (French)

* New translations ja-jp.yml (Spanish)

* New translations ja-jp.yml (Arabic)

* New translations ja-jp.yml (Czech)

* New translations ja-jp.yml (German)

* New translations ja-jp.yml (Italian)

* New translations ja-jp.yml (Polish)

* New translations ja-jp.yml (Slovak)

* New translations ja-jp.yml (Ukrainian)

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

* New translations ja-jp.yml (Vietnamese)

* New translations ja-jp.yml (Indonesian)

* New translations ja-jp.yml (Bengali)

* New translations ja-jp.yml (Thai)

* New translations ja-jp.yml (Uzbek)
2025-02-05 13:23:36 +09:00
syuilo
fbc6d0de54
enhance: ページslugに使用可能な文字を限定 (#15395)
* wip

* paramの正規表現で弾くように

* apiWithDialogを使用するように

* Update CHANGELOG.md

---------

Co-authored-by: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com>
2025-02-05 01:39:46 +00:00
syuilo
904da7bad6
Update CHANGELOG.md 2025-02-05 09:55:39 +09:00
syuilo
82d4109339
New translations ja-jp.yml (English) (#15389)
Co-authored-by: おさむのひと <46447427+samunohito@users.noreply.github.com>
2025-02-05 09:30:41 +09:00
syuilo
0c634c9675
Update CHANGELOG.md 2025-02-04 20:33:31 +09:00
lqvp
5840c7a945
fix(frontend): パスキーでパスワードレスログインが出来ない問題を修正 (#15370) 2025-02-04 09:16:41 +00:00
かっこかり
cb48853334
fix(frontend): スラッシュを含むページを閲覧できるように (#15394)
* fix(frontend): スラッシュを含むページを閲覧できるように

* Update Changelog

* fix
2025-02-04 08:40:44 +00:00
かっこかり
495d72ed2a
fix(frontend): MkSparkleが動作しない問題を修正 (#15390)
* fix(frontend): MkSparkleが動作しない問題を修正

* Update Changelog

* fix

* add comments
2025-02-04 05:01:32 +00:00
syuilo
19857632d0
Update CHANGELOG.md 2025-02-04 10:03:51 +09:00
かっこかり
9c70a4e631
fix(build): corepackのバグの回避 (#15387)
* fix: disallow corepack from fetching latest manager version instead use specified version in package.json

* Update Changelog

* fix?

* apply COREPACK_DEFAULT_TO_LATEST: 0 to every github workflows

* Revert "apply COREPACK_DEFAULT_TO_LATEST: 0 to every github workflows"

This reverts commit 67f0dc31adaa04f891f74f5c44a3d4d13a302a03.

* apply COREPACK_DEFAULT_TO_LATEST: 0 to every github workflows (re)

* fix

* fix?

* revert: removing corepack enable

* test: set COREPACK_DEFAULT_TO_LATEST for federation tests

---------

Co-authored-by: Marie <github@yuugi.dev>
Co-authored-by: anatawa12 <anatawa12@icloud.com>
2025-02-03 13:45:59 +00:00
github-actions[bot]
a1be39d94f Bump version to 2025.2.0-beta.0 2025-02-02 05:31:00 +00:00
syuilo
9230ee52a0
New Crowdin updates (#15360)
* New translations ja-jp.yml (Spanish)

* New translations ja-jp.yml (English)

* New translations ja-jp.yml (Italian)

* New translations ja-jp.yml (Italian)

* New translations ja-jp.yml (German)

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

* New translations ja-jp.yml (Korean)

* New translations ja-jp.yml (German)
2025-02-01 16:48:44 +09:00
かっこかり
06f113b226
fix(misskey-js): api extractorの出力をLFに強制 (#15369)
* fix(misskey-js): api extractorの出力をLFに強制

* indent
2025-02-01 05:48:04 +00:00
かっこかり
d4226c6adf
Update SECURITY.md 2025-02-01 13:57:39 +09:00
かっこかり
850d1d0005
fix(frontend): MkDriveFileThumbnail / MkNoteMediaGridの修正 (#15365)
* fix(frontend): MkDriveFileThumbnailのpropsのタイポ修正

* Update Changelog

* fix: MkNoteMediaGridをデータセーバーに対応させる
2025-02-01 04:51:45 +00:00
taichan
28490f3a58
Fix(frontend): ワードミュートがnullの時にもセンシティブミュートが行われるように (#15364)
* Fix(frontend): ワードミュートがnullの時にもセンシティブミュートが行われるように

* Add ChangeLog
2025-02-01 04:48:18 +00:00
かっこかり
ae65aecc0c
refactor(frontend): definePropsを別途インポートしている箇所を除去 (#15375) 2025-02-01 04:47:21 +00:00
github-actions[bot]
89b461a5da Bump version to 2025.2.0-alpha.0 2025-02-01 04:43:33 +00:00
かっこかり
40bfb1be09
fix(backend): お知らせのmetaタグ出力の条件が間違っていたのを修正 (#15377)
* fix(backend): お知らせのmetaタグ出力の条件が間違っていたのを修正

* Update Changelog
2025-02-01 13:36:10 +09:00
Sung Jae Lee
ba9f295ef2
Merge commit from fork
* fix(account): clear token cookie when signout called

* fix: cookie not cleared correctly when logout

Co-authored-by: おさむのひと <46447427+samunohito@users.noreply.github.com>

* feat: clear only token cookie when signout

---------

Co-authored-by: おさむのひと <46447427+samunohito@users.noreply.github.com>
2025-02-01 13:35:42 +09:00
nexryai
77e421029c
Merge commit from fork
* fix(frontend): Improve cookie attributes

* fix(frontend): Delete an old authentication cookie in fetchAccount
2025-02-01 13:33:37 +09:00
github-actions[bot]
f8f17a44d4 [skip ci] Update CHANGELOG.md (prepend template) 2025-01-28 12:29:17 +00:00
github-actions[bot]
87b9016dbe Release: 2025.1.0 2025-01-28 12:29:10 +00:00
かっこかり
2c3a41e4a0
fix(frontend): tabler-iconsが読み込めない問題を修正(暫定的対応) (#15332)
* fix(frontend): update tabler icons

* Update Changelog

* update

* update
2025-01-28 05:46:44 +00:00
かっこかり
6250af2a2c
wip (#15348)
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2025-01-28 01:45:13 +00:00
おさむのひと
8232ea6956
fix(backend): デフォルト起動時のメインプロセスはHTTPサーバモジュールのみ読み込む (#15355) 2025-01-27 13:10:00 +00:00
syuilo
4f31dcfed3
New Crowdin updates (#15350)
* New translations ja-jp.yml (Korean)

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

* New translations ja-jp.yml (English)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Russian)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Korean)

* New translations ja-jp.yml (Portuguese)

* New translations ja-jp.yml (Turkish)

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

* New translations ja-jp.yml (English)

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

* New translations ja-jp.yml (Romanian)

* New translations ja-jp.yml (French)

* New translations ja-jp.yml (Spanish)

* New translations ja-jp.yml (Arabic)

* New translations ja-jp.yml (Czech)

* New translations ja-jp.yml (German)

* New translations ja-jp.yml (Greek)

* New translations ja-jp.yml (Italian)

* New translations ja-jp.yml (Dutch)

* New translations ja-jp.yml (Norwegian)

* New translations ja-jp.yml (Polish)

* New translations ja-jp.yml (Slovak)

* New translations ja-jp.yml (Swedish)

* New translations ja-jp.yml (Ukrainian)

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

* New translations ja-jp.yml (Vietnamese)

* New translations ja-jp.yml (Indonesian)

* New translations ja-jp.yml (Bengali)

* New translations ja-jp.yml (Thai)

* New translations ja-jp.yml (Uzbek)

* New translations ja-jp.yml (Lao)

* New translations ja-jp.yml (Korean (Gyeongsang))

* New translations ja-jp.yml (Korean)

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

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

* New translations ja-jp.yml (Catalan)
2025-01-27 17:59:51 +09:00
Esurio/1673beta
605756d425
fix(frontend): ロール作成画面で設定できるアイコンデコレーションの最大値を16にする (#15352)
* fix(frontend): アイコンデコレーションの17以上の数値が入力された際16にしてAPIリクエストを送信するように

* Update CHANGELOG

---------

Co-authored-by: Esurio <esurio@esurio1673.net>
2025-01-27 00:03:52 +00:00
github-actions[bot]
abb1e4bead Bump version to 2025.1.0-beta.3 2025-01-26 11:52:26 +00:00
かっこかり
297186e492
enhance(frontend): 絵文字管理画面β(ローカル)のUI・UX改善 (#15349)
* enhance(frontend): 絵文字管理画面β(ローカル)のUI・UX改善

* fix

* 🎨

* 表示件数をメニューから変更するように

* 確認ダイアログ

* fix i18n

* needWideArea: trueならwidgetの開閉ボタンを表示しないように

* fix: 検索ウィンドウは一つしか開けないように
2025-01-26 11:10:22 +00:00
かっこかり
791b4500ec
fix(frontend): 画面を閉じる直前にAudioContextを閉じるように (#15080)
* fix(frontend): 画面を閉じる直前にAudioContextを閉じるように

* Update Changelog

* Update CHANGELOG.md

---------

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2025-01-26 06:07:12 +00:00
饺子w (Yumechi)
ef29130057
fix(backend): ノートの閲覧にログイン必須にしてもFeedでノートが表示されてしまう問題を修正 (#15083)
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2025-01-26 06:03:42 +00:00
おさむのひと
f4bca4708e
feat(frontend): リモート絵文字のインポート時に詳細を確認できるように (#15344)
* feat(frontend): リモート絵文字のインポート時に詳細を確認できるように

* 追加対応

* MkInput -> MkKeyValue
2025-01-26 05:59:03 +00:00
syuilo
e94c697aae
New Crowdin updates (#15347)
* New translations ja-jp.yml (Russian)

* New translations ja-jp.yml (German)
2025-01-26 12:26:29 +09:00
かっこかり
8f37fb6713
fix(frontend): クライアント起動時にURLに #pswp がある場合は取り除くように (#15339)
* fix(frontend): クライアント起動時にURLに #pswp がある場合は取り除くように

* Update Changelog
2025-01-25 12:01:11 +00:00
かっこかり
35104d87d5
revert(dev): フロントエンド・バックエンドを分離する開発モードを廃止 (#15284)
* Revert "chore: 開発モードでフロントエンドとバックエンドを独立して起動するようにする(再) (#12593)"

This reverts commit b0039f0946.

* revert dev command

* revert embed dev

* 消しすぎた

* filesをプロキシするように

* fix chromatic ci

* Revert "filesをプロキシするように"

This reverts commit 41be2548ce82ba408588c5f0dee007c97d026e55.

* fix: configのhostnameでサーバーを起動するように

* fix

* lint

* Update Changelog

* fix

---------

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2025-01-25 20:58:39 +09:00
Nanashi.
0a41e36b6d
docs: CONTRIBUTING.mdに「Misskey.jsのAPIの型の生成」のセクションを追加 (#15338)
* docs: 「Misskey.jsのAPIの型の生成」のセクションを追加

* docs: build-misskey-js-with-typesを使う
2025-01-25 10:58:01 +09:00
syuilo
1cd1264ec0
New Crowdin updates (#15288)
* New translations ja-jp.yml (English)

* New translations ja-jp.yml (Catalan)

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

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

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

* New translations ja-jp.yml (Spanish)

* New translations ja-jp.yml (Russian)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Korean)

* New translations ja-jp.yml (Portuguese)

* New translations ja-jp.yml (Turkish)

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

* New translations ja-jp.yml (English)

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

* New translations ja-jp.yml (Romanian)

* New translations ja-jp.yml (French)

* New translations ja-jp.yml (Spanish)

* New translations ja-jp.yml (Arabic)

* New translations ja-jp.yml (Czech)

* New translations ja-jp.yml (German)

* New translations ja-jp.yml (Greek)

* New translations ja-jp.yml (Italian)

* New translations ja-jp.yml (Dutch)

* New translations ja-jp.yml (Norwegian)

* New translations ja-jp.yml (Polish)

* New translations ja-jp.yml (Slovak)

* New translations ja-jp.yml (Swedish)

* New translations ja-jp.yml (Ukrainian)

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

* New translations ja-jp.yml (Vietnamese)

* New translations ja-jp.yml (Indonesian)

* New translations ja-jp.yml (Bengali)

* New translations ja-jp.yml (Thai)

* New translations ja-jp.yml (Uzbek)

* New translations ja-jp.yml (Lao)

* New translations ja-jp.yml (Korean (Gyeongsang))

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

* New translations ja-jp.yml (English)

* New translations ja-jp.yml (Italian)

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

* New translations ja-jp.yml (Italian)

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

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

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

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

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

* New translations ja-jp.yml (German)

* New translations ja-jp.yml (German)

* New translations ja-jp.yml (German)
2025-01-24 15:30:18 +09:00
syuilo
26874df4b6 Update about-misskey.vue 2025-01-23 14:39:17 +09:00
dependabot[bot]
31ccefa050
chore(deps): bump actions/cache from 4.1.0 to 4.2.0 (#15095)
Bumps [actions/cache](https://github.com/actions/cache) from 4.1.0 to 4.2.0.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v4.1.0...v4.2.0)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-21 10:28:34 +09:00
dependabot[bot]
97f0ea0c0a
build(deps): bump actions/setup-node from 4.0.3 to 4.1.0 (#14838)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4.0.3 to 4.1.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4.0.3...v4.1.0)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-21 10:28:26 +09:00
かっこかり
e8b633efec
fix(frontend): Instanceの値が部分的に欠損していると、ローカルサーバーの情報にフォールバックする問題を修正 (#15319) 2025-01-21 10:26:47 +09:00
anatawa12
68175bc38d
enhance(frontend): クエリパラメータでuiを一時的に変更できるように (#15240)
* feat: クエリパラメータでuiを一時的に変更できるように

* docs(changelog): クエリパラメータでuiを一時的に変更できるように

* Update packages/frontend/src/boot/main-boot.ts

Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>

---------

Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>
2025-01-21 01:02:27 +00:00
Takeshi Umeda
d7fdcbc733
fix: 絵文字のライセンスのActivityPub contextを追加 (#15318) 2025-01-21 00:30:39 +00:00
github-actions[bot]
9470641dcd Bump version to 2025.1.0-beta.2 2025-01-20 13:07:15 +00:00
anatawa12
8d7b1f285f
refactor: Refactor Endpoints to improve Developer Experience for adding Endpoints (#15301)
* chore: reorder endpoints to lexicographic code unit order

* refactor: import endpoints in one module and use them for generating EndpointsModule and endpoints
2025-01-20 12:15:23 +00:00
おさむのひと
f9ad127aaf
feat: 新カスタム絵文字管理画面(β)の追加 (#13473)
* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* fix

* fix

* fix

* fix size

* fix register logs

* fix img autosize

* fix row selection

* support delete

* fix border rendering

* fix display:none

* tweak comments

* support choose pc file and drive file

* support directory drag-drop

* fix

* fix comment

* support context menu on data area

* fix autogen

* wip イベント整理

* イベントの整理

* refactor grid

* fix cell re-render bugs

* fix row remove

* fix comment

* fix validation

* fix utils

* list maximum

* add mimetype check

* fix

* fix number cell focus

* fix over 100 file drop

* remove log

* fix patchData

* fix performance

* fix

* support update and delete

* support remote import

* fix layout

* heightやめる

* fix performance

* add list v2 endpoint

* support pagination

* fix api call

* fix no clickable input text

* fix limit

* fix paging

* fix

* fix

* support search

* tweak logs

* tweak cell selection

* fix range select

* block delete

* add comment

* fix

* support import log

* fix dialog

* refactor

* add confirm dialog

* fix name

* fix autogen

* wip

* support image change and highlight row

* add columns

* wip

* support sort

* add role name

* add index to emoji

* refine context menu setting

* support role select

* remove unused buttons

* fix url

* fix MkRoleSelectDialog.vue

* add route

* refine remote page

* enter key search

* fix paste bugs

* fix copy/paste

* fix keyEvent

* fix copy/paste and delete

* fix comment

* fix MkRoleSelectDialog.vue and storybook scenario

* fix MkRoleSelectDialog.vue and storybook scenario

* add MkGrid.stories.impl.ts

* fix

* [wip] add custom-emojis-manager2.stories.impl.ts

* [wip] add custom-emojis-manager2.stories.impl.ts

* wip

* 課題はまだ残っているが、ひとまず完了

* fix validation and register roles

* fix upload

* optimize import

* patch from dev

* i18n

* revert excess fixes

* separate sort order component

* add SPDX

* revert excess fixes

* fix pre test

* fix bugs

* add type column

* fix types

* fix CHANGELOG.md

* fix lit

* lint

* tweak style

* refactor

* fix ci

* autogen

* Update types.ts

* CSS Module化

* fix log

* 縦スクロールを無効化

* MkStickyContainer化

* regenerate locales index.d.ts

* fix

* fix

* テスト

* ランダム値によるUI変更の抑制

* テスト

* tableタグやめる

* fix last-child css

* fix overflow css

* fix endpoint.ts

* tweak css

* 最新への追従とレイアウト微調整

* ソートキーの指定方法を他と合わせた

* fix focus

* fix layout

* v2エンドポイントのルールに対応

* 表示条件などを微調整

* fix MkDataCell.vue

* fix error code

* fix error

* add comment to MkModal.vue

* Update index.d.ts

* fix CHANGELOG.md

* fix color theme

* fix CHANGELOG.md

* fix CHANGELOG.md

* fix center

* fix: テーブルにフォーカスがあり、通常状態であるときはキーイベントの伝搬を止める

* fix: ロール選択用のダイアログにてコンディショナルロールを×ボタンで除外できなかったのを修正

* fix remote list folder

* sticky footers

* chore: fix ci error(just single line-break diff)

* fix loading

* fix like

* comma to space

* fix ci

* fix ci

* removed align-center

---------

Co-authored-by: osamu <46447427+sam-osamu@users.noreply.github.com>
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
Co-authored-by: Sayamame-beans <61457993+Sayamame-beans@users.noreply.github.com>
2025-01-20 11:35:37 +00:00
taichan
b41e78090d
fix(client): MkSubNoteContentに対するnoteの指定が誤っていたので修正 (follow up of misskey-dev/misskey#15306) (#15316) 2025-01-20 18:52:27 +09:00
かっこかり
bb51574762
fix(frontend): 非ログイン時のサーバー概要画面のメニューボタンが押せないことがあるのを修正 (#15305)
* Set visitor dashboard's menu button z-index to 50

* Update Changelog

---------

Co-authored-by: Evan Paterakis <evan@geopjr.dev>
2025-01-19 12:10:07 +00:00
Take-John
dc48c49f95
refactor: WebhookDeliverJobDataのcontentフィールドの型を具体的に (#15310)
* WebhookDeliverJobDataのcontentフィールドの型を具体的に

* typeフィールドの型も変更
2025-01-19 12:08:29 +00:00
taichan
078b7d6cc5
fix(frontend): アンケート(投票)でリモートの絵文字が正しく描画できない問題の修正 (#15306)
* アンケート選択肢にリモート絵文字を表示

* MkSubNoteContentでのリモート絵文字の描画

* Update Changelog

---------

Co-authored-by: kozakura913 <98575220+kozakura913@users.noreply.github.com>
2025-01-19 11:12:35 +00:00
anatawa12
fb2c10551d
ci: remove auto release on un-drafting PR (#15017) 2025-01-19 16:06:16 +09:00
zyoshoka
1ef62e9e33
fix(backend): clone schema before converting to OAS schema to avoid mutation (#15294)
* fix(backend): clone schema before converting to OAS schema to avoid mutation

* Update CHANGELOG.md

* fix: use deepClone
2025-01-18 04:05:33 +00:00
おさむのひと
b16f5a781e
fix(backend): localOnlyなノートの時は配送処理そのものを起動しない (#15020)
* fix(backend): localOnlyなノートの時は配送処理そのものを起動しない

* fix CHANGELOG.md

* fix CHANGELOG.md
2025-01-17 23:35:47 +00:00
かっこかり
f01fc5af5a
fix(frontend): MkInstanceTickerの情報がリアクティブでない問題を修正 (#15123)
* fix(frontend): MkInstanceTickerの情報がリアクティブでない問題を修正

* Update Changelog

---------

Co-authored-by: taichan <40626578+tai-cha@users.noreply.github.com>
2025-01-17 23:28:20 +00:00
FineArchs
85be61d86e
ワードミュートの保存失敗時にAPIエラーが握りつぶされる事があるのを修正 (#15304)
* ワードミュートの保存失敗時にAPIエラーが握りつぶされる事があるのを修正

* Update CHANGELOG.md
2025-01-17 23:05:35 +00:00
果物リン
a328d52008
よくわからないリアクションに関するログが流れっぱなしなのを修正 (#15303) 2025-01-17 10:27:48 +00:00
anatawa12
363bdac39b
ci: improve CI configuration (#15287)
* ci: improve CI configuration

* ci: add name for some jobs
2025-01-16 13:22:32 +09:00
おさむのひと
6396243973
fix: タイムアウトを起こすe2eテストの時間設定を延長 (#15283) 2025-01-15 19:48:37 +09:00
かっこかり
66532333cd
fix(frontend): localeの型を生成 (#15285) 2025-01-15 11:34:40 +09:00
syuilo
002e939003
New Crowdin updates (#15030)
* New translations ja-jp.yml (English)

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

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

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

* New translations ja-jp.yml (Portuguese)

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

* New translations ja-jp.yml (Dutch)

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

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

* New translations ja-jp.yml (Korean)

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

* New translations ja-jp.yml (Italian)

* New translations ja-jp.yml (Italian)

* New translations ja-jp.yml (Korean)

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

* New translations ja-jp.yml (Portuguese)

* New translations ja-jp.yml (Russian)

* New translations ja-jp.yml (Italian)

* New translations ja-jp.yml (Italian)

* New translations ja-jp.yml (Dutch)

* New translations ja-jp.yml (Catalan)

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

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

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

* New translations ja-jp.yml (Italian)

* New translations ja-jp.yml (Russian)

* New translations ja-jp.yml (Dutch)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Romanian)

* New translations ja-jp.yml (French)

* New translations ja-jp.yml (Spanish)

* New translations ja-jp.yml (Arabic)

* New translations ja-jp.yml (Czech)

* New translations ja-jp.yml (German)

* New translations ja-jp.yml (Korean)

* New translations ja-jp.yml (Norwegian)

* New translations ja-jp.yml (Polish)

* New translations ja-jp.yml (Portuguese)

* New translations ja-jp.yml (Slovak)

* New translations ja-jp.yml (Ukrainian)

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

* New translations ja-jp.yml (English)

* New translations ja-jp.yml (Vietnamese)

* New translations ja-jp.yml (Indonesian)

* New translations ja-jp.yml (Bengali)

* New translations ja-jp.yml (Thai)

* New translations ja-jp.yml (Uzbek)

* New translations ja-jp.yml (Lao)

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

* New translations ja-jp.yml (Korean (Gyeongsang))

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

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

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Italian)

* New translations ja-jp.yml (Italian)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Russian)

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

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

* New translations ja-jp.yml (English)

* New translations ja-jp.yml (Catalan)

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

* New translations ja-jp.yml (Portuguese)

* New translations ja-jp.yml (Portuguese)

* New translations ja-jp.yml (Korean)

* New translations ja-jp.yml (Turkish)

* 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 (Russian)

* New translations ja-jp.yml (Catalan)

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

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

* New translations ja-jp.yml (Korean)

* New translations ja-jp.yml (English)

* New translations ja-jp.yml (Spanish)

* New translations ja-jp.yml (Italian)

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

* New translations ja-jp.yml (German)

* New translations ja-jp.yml (German)

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

* New translations ja-jp.yml (Italian)

* New translations ja-jp.yml (Italian)
2025-01-15 00:39:31 +00:00
taichan
9760f3d7c9
enhance(frontend): ワードミュートで引っかかったワードを表示可能にする (#15195)
* feat(frontend): ソフトミュートで引っかかったものを表示できるように

* ソフトワードミュートのミュート文字列表示を切り替え可能に

* Chore(docs): Update CHANGELOG

* Fix: language file

* Fixed by review

* Fix by review

* Fix: reloadAskなおしきれていなかった

* perf: filter -> findに変更して最初の一個のみを表示するように変更

* Revert "perf: filter -> findに変更して最初の一個のみを表示するように変更"

This reverts commit 72ef92f0d62828754702cd00e26ad873adb4652f.
2025-01-14 13:49:59 +00:00
github-actions[bot]
87cdbaea4f Bump version to 2025.1.0-beta.1 2025-01-14 13:28:06 +00:00
github-actions[bot]
1b47e2d4f2 Bump version to 2025.1.0-beta.0 2025-01-14 13:28:00 +00:00
Hong Minhee (洪 民憙)
d018fe58aa
fix(backend): Let MfmService.fromHtml accept ruby (#15117)
This fix makes `MfmService.fromHtml()` method accept `<ruby>` tags
and translate it to MFM's ruby characters syntax (`$[ruby ...]`).

このパッチは`MfmService.fromHtml()`メソッドが`<ruby>`タグをMFMの
読み仮名(ルビ)文法に翻訳する様に修正します。
2025-01-14 13:06:39 +00:00
おさむのひと
f45fd01551
enhance(backend): 絵文字の連合でライセンス欄を相互にやり取りするように (#15182)
* enhance(backend): 絵文字の連合でライセンス欄を相互にやり取りするように

Co-authored-by: Kisaragi Marine <kisaragi.effective@gmail.com>
Co-authored-by: ruruke <123709459+ruruke@users.noreply.github.com>

* fix CHANGELOG.md

---------

Co-authored-by: Kisaragi Marine <kisaragi.effective@gmail.com>
Co-authored-by: ruruke <123709459+ruruke@users.noreply.github.com>
Co-authored-by: taichan <40626578+tai-cha@users.noreply.github.com>
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2025-01-14 12:49:35 +00:00
anatawa12
145c6cf2b5
fix: node.js の punycode モジュールが使用されている場所がある問題 (#15248)
* fix: punycode.js が使用されていない場所がある問題

* fix: use punycode/punycode.js on backend

* fix: use punycode/punycode.es6.js on backend

* fix: d.ts missing declare keyword

* chore: don't use punycode.js on backend

* update pnpm-lock.yaml

* chore: remove punycode.d.ts

* chore: use punycode.js instead of punycode npm package

* chore: bump psl to 1.15.0

* chore: bump nsfwjs to 4.2.0

4.2.1 is not usable because of https://github.com/infinitered/nsfwjs/issues/904

* chore: prevent loading node-fetch from tensorflow

* chore: DOMWindow['document'] => Document

IDK why DOMWindow['document'] fails, but might be related to tsc internal complexity limit

* fix: disable --trace-deprecation

---------

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2025-01-14 12:37:39 +00:00
cannorin
319f7e6a86
feat(misskey-js): allow setting binaryType of WebSocket connection (#15190)
Co-authored-by: cannorin <cannorin@users.noreply.github.com>
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2025-01-14 12:20:24 +00:00
Sayamame-beans
ed43cd87c9
ノートのリンクをリモートのサーバーのURLとしてもコピーできるように (#15091)
* feat(frontend): ノートのリンクをリモートのサーバーのURLとしてコピーできるように

* 出し分けのロジックを1箇所に統一

* docs: CHANGELOGの内容をコミット内容に合わせる

* docs: reverts 11d1b95

per https://github.com/misskey-dev/misskey/pull/13566#discussion_r1589103356

* chore: 調整

* chore: 調整2

---------

Co-authored-by: Kisaragi Marine <kisaragi.effective@gmail.com>
Co-authored-by: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com>
Co-authored-by: Kisaragi <48310258+KisaragiEffective@users.noreply.github.com>
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2025-01-14 12:12:12 +00:00
かっこかり
40f8b5e7f5
enhance(frontend): ユーザーページに「ファイル」タブを新設 (#15130)
* 投稿したファイルの一覧をプロフィールページ内のタブで見れるようにしてみた (Otaku-Social#14)

* ギャラリー(ノート)の取得方法を変更、ページネーションに対応

* ギャラリー(ノート)が動作しない問題を修正

* ギャラリー(ノート)の名称変更

* styles

* GalleryFromPosts -> Files

* fix

* enhance: 既存のファイルコンテナの「もっと見る」をクリックしたらファイルタブに飛べるように

* Update Changelog

* 共通化

* spdx

* その他のメディアがちゃんとプレビューされるように

* fix(frontend): リストがセンシティブ設定を考慮するように

* arrayをsetに変更

* remove unused imports

* 🎨

* 🎨

* 画像以外のファイルのプレビューに対応したのでコメントを削除

* サムネイルをMkDriveFileThumbnailに統一

* v-panelに置き換え

* lint

---------

Co-authored-by: tmorio <morikapusan@morikapu-denki.com>
Co-authored-by: tmorio <20278135+tmorio@users.noreply.github.com>
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2025-01-14 12:05:34 +00:00
おさむのひと
71cecdbcf2
feat(backend): pgroongaに対応(configの構成変更あり) (#14978)
* feat(backend): pgroongaに対応(configの構成変更あり)

* fix CHANGELOG.md

* fix CHANGELOG.md

* add using provider logging

* fix CHANGELOG.md

* Update CHANGELOG.md

---------

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2025-01-14 12:01:01 +00:00
syuilo
6a0a810243
Update CHANGELOG.md 2025-01-14 20:58:31 +09:00
github-actions[bot]
b65b70d489 Bump version to 2025.1.0-alpha.0 2025-01-14 11:57:00 +00:00
かっこかり
da9e05582d
fix(backend): pages/updateのnameの重複チェックはnameプロパティがある時のみ行うように (#15104)
* fix(backend): pagesのnameの重複チェックはnameプロパティがある時のみ行うように

* Update Changelog

---------

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2025-01-14 11:30:49 +00:00
KanariKanaru
9ddf7751db
Enhance: GitHub Actionsでのffmpegインストールの失敗時リトライするように (#15079) 2025-01-14 20:27:44 +09:00
おさむのひと
d2e22f9050
refactor: SystemWebhook/UserWebhookの配信処理呼び出し部分の改善 (#15035)
* UserWebhook側の対処

* SystemWebhook側の対処

* fix test
2025-01-14 11:14:02 +00:00
かっこかり
5445b023e5
enhance: 連合モードにあわせてフロントエンドを変化させるように (#15112)
* enhance(backend): metaにfederation modeに関する情報を公開

* enhance(frontend): 登録画面の注意書きを追加

* enhance(frontend): aboutページ・サーバー情報

* enhance(frontend): サーバー統計

* enhance(frontend): みつけるページ

* enhance(frontend): 検索

* enhance(frontend): ユーザー選択

* enhance(frontend): 設定画面

* enhance(frontend): ウィジェット

* enhance(frontend): リモートで開くオプション

* Update Changelog

* enhance(frontend): ステータスバー

* i18n

---------

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2025-01-14 11:08:54 +00:00
おさむのひと
64501c69a1
feat(frontend): Botプロテクションの設定変更時は実際に検証を通過しないと保存できないようにする (#15151)
* feat(frontend): CAPTCHAの設定変更時は実際に検証を通過しないと保存できないようにする

* なしでも保存できるようにした

* fix CHANGELOG.md

* フォームが増殖するのを修正

* add comment

* add server-side verify

* fix ci

* fix

* fix

* fix i18n

* add current.ts

* fix text

* fix

* regenerate locales

* fix MkFormFooter.vue

---------

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2025-01-14 10:57:58 +00:00
おさむのひと
7fbfc2e046
ApPersonServiceとApNoteServiceのuri <-> url比較を緩和 (#15233)
* wip

* https://github.com/misskey-dev/misskey/issues/15039#issuecomment-2576411861 の反映

Co-authored-by: Kagami Sascha Rosylight <saschanaz@outlook.com>

* fix CHANGELOG.md

* remove inspection

---------

Co-authored-by: Kagami Sascha Rosylight <saschanaz@outlook.com>
2025-01-14 10:47:02 +00:00
taichan
dd6743dda4
Fix(frontend): 削除して編集で引用ありを消せない (#15249)
* Fix(frontend): 削除して編集で引用ありを消せない

* docs(changelog): update CHANGELOG.md

* rename noteToRenote -> renoteTargetNote

with type fix

* Update Changelog

---------

Co-authored-by: Sayamame-beans <61457993+Sayamame-beans@users.noreply.github.com>
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2025-01-14 10:46:57 +00:00
かっこかり
d082a1dd34
fix(frontend/dev): バックエンド経由での開発時にHMRが効かない問題を修正 (#15255) 2025-01-14 10:40:14 +00:00
おさむのひと
759b9f4cf1
feat(backend): config(default.yml)からSQLログ全文を出力するか否かを設定可能に (#15268)
* feature(backend): config(default.yml)からSQLログ全文を出力するか否かを設定可能に

* disableHighlightやめる

* refactor
2025-01-14 10:37:41 +00:00
anatawa12
6820878676
fix: unable to use AiService on arm64 (#15261) 2025-01-14 10:36:35 +00:00
かっこかり
b161601863
fix(frontend): コンポーネントのインポート忘れ (#15274) 2025-01-14 09:35:19 +09:00
かっこかり
d86c77260e
fix(frontend): RSSウィジェットでURLエンコードを二重に行っている問題を修正 (#15272)
* don't double-url-encode rss urls

`url.searchParams.set()` already encodes the values passed!

(this is a partial revert of 0472d43ee9,
the change in `statusbar-rss.vue` was correct)

* Update Changelog

---------

Co-authored-by: dakkar <dakkar@thenautilus.net>
2025-01-14 00:13:57 +00:00
かっこかり
d60c307c4e
refactor/deps(frontend): shikiのdeprecated表現を修正 (#15169)
* fix(frontend): shikiのdeprecated表現を修正

* update aiscript-vscode

* ✌️

* fix

* remove unused imports

* bump aiscript-vscode to 0.1.15
2025-01-11 13:47:15 +00:00
かっこかり
c4192e81ed
enhance(backend): チャートの処理を一つずつ行うことでDBの同時接続とタイムアウトを削減 (#15239)
* sync charts one-at-a-time to reduce database contention and timeouts

* fix merge resolve failure

* Update Changelog

* update changelog

* add comments

---------

Co-authored-by: Hazelnoot <acomputerdog@gmail.com>
2025-01-11 13:43:42 +00:00
おさむのひと
13439e04c4
fix(frontend-embed): 型チェックエラーを修正 (#15216)
* fix(frontend): frontend / frontend-embedにあるtsconfig.jsonのmoduleをES2022にする

* fixed errors

* fixed errors

* fixed errors

* fix(frontend-embed): 型チェックエラーを修正
2025-01-08 12:00:02 +00:00
Rsplwe
bb4457266d
feat(frontend): Do not display blocked instances on the welcome page (#15178) 2025-01-08 10:51:23 +00:00
かっこかり
55713fcd65
fix(backend): apOrHtml Constraintが正しく評価されない問題を修正 (#15213)
* fix(backend/ActivityPubServerService): apOrHtml Constraintが正しく評価されない問題を修正 (MisskeyIO#869)

* Update Changelog

* indent

---------

Co-authored-by: あわわわとーにゅ <17376330+u1-liquid@users.noreply.github.com>
2025-01-08 10:35:09 +00:00
かっこかり
c49a13de65
fix(frontend-embed): localeのバージョンチェックが抜けており起動に失敗することがある問題を修正 (#15212)
* fix(frontend-embed): localeのバージョンチェックが抜けており起動に失敗することがある問題を修正

* Update Changelog
2025-01-08 10:33:43 +00:00
鴇峰 朔華
8652ce7cc0
fix(frontend): 自分以外のノートを消したときに実績を解除しないように修正 (#15071) 2025-01-08 07:58:29 +00:00
taichan
f6808711af
update changelog (#15236) 2025-01-08 16:52:08 +09:00
taichan
d7835313c3
fix(backend): ロックダウンされた期間指定のノートがStreaming経由でLTLに出現するのを修正 (#15200)
* fix(backend): skipHideなときにもロックダウンされたノートのprivate化をするように

* fix linting

* Update packages/backend/src/core/entities/NoteEntityService.ts

* Fix: type error

* Remove unneeded await

* Fix: typo

* Remove skipTreatVisibillity
2025-01-08 05:33:08 +00:00
かっこかり
79b851fe56
Update CHANGELOG.md (書き方をそろえる) 2025-01-07 22:38:43 +09:00
Take-John
bbe80af1dd
Fix: aiscriptディレクトリ内の型エラー解消と単体テスト (#15191)
* AiScript APIの型エラーに対処

* AiScript UI APIのテスト作成

* onInputなどがPromiseを返すように

* AiScript共通APIのテスト作成

* CHANGELOG記載

* 定数のテストをconcurrentに

* vi.mockを使用

* misskeyApiをmisskeyApiUntypedのエイリアスとする

* 期待されるエラーメッセージを修正

* Mk:removeのテスト

* misskeyApiの型を変更
2025-01-07 12:28:48 +00:00
おさむのひと
f7da2bad6f
fix(frontend): frontend / frontend-embedにあるtsconfig.jsonのmoduleをES2022にする (#15215)
* fix(frontend): frontend / frontend-embedにあるtsconfig.jsonのmoduleをES2022にする

* fixed errors

* fixed errors

* fixed errors
2025-01-07 12:23:05 +00:00
Nanashi.
99ba7ebaa2
fix(frontend-shared): nodemonをdevDependenciesに追加 (#15225) 2025-01-07 12:21:05 +00:00
おさむのひと
8ad97e5ede
fix(backend): disableClustering設定時の初期化ロジックを調整 (#15224)
* fix(backend): disableClustering設定時の初期化ロジックを調整

* onlyServer かつ enableCluster な場合、メインプロセスでlistenするとワーカープロセス側のlistenと衝突するため、メインプロセスはforkのみに制限する(listenしない)

* ログの追加

* fix CHANGELOG.md

* fix comment
2025-01-07 12:19:59 +00:00
かっこかり
6c9eea2c0f
[ci skip] Update CHANGELOG.md (書き方を揃える) 2025-01-04 15:55:22 +09:00
かっこかり
4120c9ab10
fix(frontend): アカウント一覧画面で、ユーザー情報の取得に失敗したアカウントが表示されない問題を修正 (#15183)
* fix(frontend): アカウント一覧画面で、ユーザー情報の取得に失敗したアカウントが表示されない問題を修正

* Update Changelog

* 🎨
2025-01-04 06:44:31 +00:00
かっこかり
1fbc129d7b
fix(frontend): ファイルの添付可能数を超えたらノートボタンを押せないように (#15126)
* fix(frontend): ファイルの添付可能数を超えたらノートボタンを押せないように

* Update Changelog

* Update MkPostForm.vue
2025-01-04 06:24:25 +00:00
かっこかり
256560e8ba
enhance(frontend/aiscript): セーブ内容を削除できるMk:removeを追加 (#15158)
* enhance(frontend/aiscript): セーブ内容を削除できる`Mk:remove`を追加

* fix

* Update Changelog
2025-01-04 06:16:58 +00:00
かっこかり
faea401dcc
fix(frontend): ノート検索が使用できない場合でもチャンネルのノート検索欄がでていた問題を修正 (#15082)
* fix(frontend): ノート検索が使用できない場合でもチャンネルのノート検索欄がでていた問題を修正

* Update Changelog

---------

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2025-01-04 06:14:37 +00:00
KanariKanaru
84bf90d1bd
Chore: Docker内のDebianのバージョンを上げる(bookworm) (#15073) 2025-01-04 06:08:52 +00:00
かっこかり
574034a2dd
fix(frontend): MiAuth認可画面で、認可処理に失敗した場合でもコールバックURLに遷移してしまう問題を修正 (#15154)
* feat(MiAuth): アクセストークンの発行に失敗した場合コールバックに遷移しないようにする (MisskeyIO#831)

Cherry-picked from TeamNijimiss/misskey@800359623e

Co-authored-by: nafu-at <satsuki@nafusoft.dev>

* Update Changelog

* Update Changelog

---------

Co-authored-by: あわわわとーにゅ <17376330+u1-liquid@users.noreply.github.com>
Co-authored-by: nafu-at <satsuki@nafusoft.dev>
2025-01-04 06:08:29 +00:00
4ster1sk
020882edcf
fix(backend): アプリ作成方式で作成したトークンの権限を表示するように (#15177) 2025-01-04 06:06:19 +00:00
かっこかり
f4e025170e
fix(frontend/AiScript): Ui:C:selectの値が切り替わらない問題を修正 (#15184)
* fix(frontend/AiScript): Ui:C:selectの値が切り替わらない問題を修正

* Update Changelog
2025-01-04 06:06:03 +00:00
Yuba
79b3d2a711
pg_bigmが利用できるよう、ノートの検索をILIKE演算子でなくLIKE演算子でLOWER()をかけたテキストに対して行うように (#15205)
* Use LIKE-LOWER instead of ILIKE, which pg_bigm doesn't support.

* changelog: Enhance: pg_bigmが利用できるよう、ノートの検索をILIKE演算子でなくLIKE演算子でLOWER()をかけたテキストに対して行うように
2025-01-04 06:03:00 +00:00
かっこかり
6649e58b56
enhance(frontend): ワードミュート・ハードワードミュートの説明を追加 (#15207) 2025-01-04 05:40:41 +00:00
かっこかり
62299588d8
2025 (#15203) 2025-01-04 14:37:14 +09:00
34f35e0bb2
fixup! Remove nsfwjs
Some checks failed
Lint / pnpm_install (push) Successful in 1m40s
Test (production install and build) / production (22.11.0) (push) Successful in 1m6s
Publish Docker image / Build (push) Successful in 3m57s
Lint / lint (backend) (push) Failing after 2m23s
Lint / lint (frontend-embed) (push) Successful in 2m17s
Test (backend) / unit (22.11.0) (push) Failing after 8m28s
Lint / lint (frontend-shared) (push) Successful in 1m54s
Lint / lint (misskey-bubble-game) (push) Successful in 1m54s
Lint / lint (misskey-js) (push) Successful in 2m2s
Lint / lint (misskey-reversi) (push) Successful in 1m53s
Lint / lint (frontend) (push) Failing after 9m5s
Lint / lint (sw) (push) Successful in 2m5s
Lint / typecheck (backend) (push) Failing after 1m28s
Lint / typecheck (misskey-js) (push) Successful in 1m18s
Lint / typecheck (sw) (push) Successful in 1m25s
Lint / pnpm_install (pull_request) Successful in 1m24s
Test (backend) / unit (22.11.0) (pull_request) Failing after 37s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m22s
Publish Docker image / Build (pull_request) Successful in 4m17s
Lint / lint (backend) (pull_request) Failing after 2m24s
Lint / lint (frontend-embed) (pull_request) Successful in 1m56s
Lint / lint (frontend-shared) (pull_request) Successful in 1m52s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m2s
Lint / lint (misskey-js) (pull_request) Successful in 1m58s
Lint / lint (frontend) (pull_request) Failing after 9m15s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m0s
Lint / typecheck (backend) (pull_request) Failing after 1m22s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m19s
Lint / lint (sw) (pull_request) Successful in 2m18s
Lint / typecheck (sw) (pull_request) Successful in 1m44s
2024-12-23 02:37:31 -06:00
81890283f0
Revert check_connect
Some checks failed
Lint / lint (frontend) (push) Blocked by required conditions
Lint / lint (frontend-embed) (push) Blocked by required conditions
Lint / lint (frontend-shared) (push) Blocked by required conditions
Lint / lint (misskey-bubble-game) (push) Blocked by required conditions
Lint / lint (misskey-js) (push) Blocked by required conditions
Lint / lint (misskey-reversi) (push) Blocked by required conditions
Lint / lint (sw) (push) Blocked by required conditions
Lint / typecheck (backend) (push) Blocked by required conditions
Lint / typecheck (misskey-js) (push) Blocked by required conditions
Lint / typecheck (sw) (push) Blocked by required conditions
Lint / pnpm_install (push) Successful in 1m52s
Test (production install and build) / production (22.11.0) (push) Successful in 1m22s
Lint / lint (backend) (push) Has been cancelled
Publish Docker image / Build (push) Has been cancelled
Test (backend) / unit (22.11.0) (push) Has been cancelled
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-12-23 02:32:47 -06:00
fb68389b7e
Remove nsfwjs
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-12-23 02:32:39 -06:00
a83d13c143
Merge branch 'upstream-devel' into develop
Some checks failed
Lint / lint (misskey-bubble-game) (push) Blocked by required conditions
Lint / lint (misskey-js) (push) Blocked by required conditions
Lint / lint (misskey-reversi) (push) Blocked by required conditions
Lint / lint (sw) (push) Blocked by required conditions
Lint / typecheck (backend) (push) Blocked by required conditions
Lint / typecheck (misskey-js) (push) Blocked by required conditions
Lint / typecheck (sw) (push) Blocked by required conditions
Lint / pnpm_install (push) Successful in 2m28s
Test (production install and build) / production (22.11.0) (push) Successful in 1m19s
Publish Docker image / Build (push) Successful in 5m11s
Lint / lint (backend) (push) Failing after 2m42s
Lint / lint (frontend-embed) (push) Successful in 2m3s
Lint / lint (frontend) (push) Has been cancelled
Test (backend) / unit (22.11.0) (push) Has been cancelled
Lint / lint (frontend-shared) (push) Has been cancelled
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-12-23 02:19:47 -06:00
かっこかり
3c81926f71
fix(frontend): serverContextの値を利用する条件が間違っていたのを修正 (#15166)
Some checks failed
Lint / locale_verify (push) Successful in 2m12s
Check Misskey JS version / Check version (pull_request) Successful in 6s
API report (misskey.js) / report (pull_request) Successful in 1m58s
Check the description in CHANGELOG.md / check-changelog (pull_request) Failing after 42s
Check SPDX-License-Identifier / check-spdx-license-id (pull_request) Successful in 22s
Dockle / dockle (pull_request) Failing after 7s
Get api.json from Misskey / save-pr-number (pull_request) Failing after 2s
Get api.json from Misskey / get-from-misskey (api-head.json, 22.11.0, refs/pull/${{ github.event.number }}/merge) (pull_request) Failing after 38s
Lint / pnpm_install (pull_request) Successful in 1m10s
Test (backend) / unit (22.11.0) (pull_request) Failing after 2s
Test (backend) / e2e (22.11.0) (pull_request) Failing after 0s
Test (federation) / test (22.11.0) (pull_request) Failing after 6s
Test (frontend) / vitest (22.11.0) (pull_request) Failing after 6s
Test (frontend) / e2e (chrome, 22.11.0) (pull_request) Failing after 3s
Test (misskey.js) / test (22.11.0) (pull_request) Failing after 2s
Get api.json from Misskey / get-from-misskey (api-base.json, 22.11.0, ${{ github.base_ref }}) (pull_request) Failing after 1m59s
Lint / locale_verify (pull_request) Successful in 1m33s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m31s
Test (backend) / validate-api-json (22.11.0) (pull_request) Successful in 2m51s
Lint / lint (backend) (pull_request) Successful in 3m1s
Lint / lint (frontend-embed) (pull_request) Successful in 2m7s
Lint / lint (frontend-shared) (pull_request) Successful in 2m2s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m0s
Lint / lint (misskey-js) (pull_request) Successful in 2m11s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m2s
Lint / lint (sw) (pull_request) Successful in 2m3s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m11s
Lint / lint (frontend) (pull_request) Successful in 9m41s
Lint / typecheck (backend) (pull_request) Successful in 2m3s
Lint / typecheck (sw) (pull_request) Successful in 1m29s
2024-12-22 13:36:17 +09:00
かっこかり
f123be38b9
enhance(frontend): 照会の際にエラーを表示するように (#15147)
* enhance: 照会の失敗理由を表示するように

* Update Changelog

* fix

* fix test

* lookupErrors-> remoteLookupErrors
2024-12-19 16:05:33 +09:00
かっこかり
0804092426
fix(frontend): serverContextの型エラーを修正 (#15131)
* fix(frontend): serverContextの型エラーを修正

* add comment
2024-12-16 09:03:46 +09:00
かっこかり
3e0fcaeca8
fix(frontend): 絵文字管理画面で絵文字が表示されないことがある問題を修正 (#15128)
* fix(frontend): 絵文字管理画面で絵文字が表示されないことがある問題を修正

* Update Changelog

* optimize
2024-12-16 09:02:38 +09:00
かっこかり
5a2b29a3b4
enhance(frontend): PC画面でチャンネルが複数列で表示されるように (#15129)
* チャンネル一覧の列を最大3列にした (Otaku-Social#13)

* fix

* fix

* fix

* 🎨

* fix

* 🎨

* Update Changelog

* Update Changelog

* 要らない_marginを消す

---------

Co-authored-by: tmorio <morikapusan@morikapu-denki.com>
2024-12-16 08:57:37 +09:00
FineArchs
234d91a884
misskey-js: APIClientにURL末尾の/を除去する処理を追加 (#15132) 2024-12-16 08:55:34 +09:00
54d38f029f
defensive programming before reaction insert
Some checks failed
Lint / pnpm_install (push) Successful in 2m42s
Test (production install and build) / production (22.11.0) (push) Successful in 1m14s
Publish Docker image / Build (push) Successful in 5m18s
Lint / lint (backend) (push) Failing after 2m47s
Lint / lint (frontend-embed) (push) Successful in 1m56s
Test (backend) / unit (22.11.0) (push) Failing after 9m24s
Lint / lint (frontend-shared) (push) Successful in 2m1s
Lint / lint (misskey-bubble-game) (push) Successful in 2m1s
Lint / lint (misskey-js) (push) Successful in 2m5s
Lint / lint (misskey-reversi) (push) Successful in 2m4s
Lint / lint (frontend) (push) Failing after 8m44s
Lint / lint (sw) (push) Successful in 2m10s
Lint / typecheck (misskey-js) (push) Successful in 1m18s
Lint / typecheck (backend) (push) Successful in 1m59s
Lint / typecheck (sw) (push) Successful in 1m15s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-12-10 11:03:07 -06:00
かっこかり
e8bf6285cb
fix(frontend): ノートがログインしているユーザーしか見れない場合にログインをキャンセルした場合その後の動線がなくなる問題を修正 (#15101)
* fix(frontend): ノートがログインしているユーザーしか見れない場合にログインをキャンセルすると一切の処理が停止する問題を修正

* Update Changelog

---------

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2024-12-10 10:42:12 +09:00
かっこかり
074b7b0bee
fix(frontend): 公開範囲がホームのノートの埋め込みウィジェットが読み込まれない問題を修正 (#15102)
* Resolve frontend/backend contradiction for home visibility embeds

This now uses the same check from `packages/frontend/src/scripts/get-note-menu.ts`

* Update Changelog

---------

Co-authored-by: CenTdemeern1 <timo.herngreen@gmail.com>
2024-12-10 10:36:03 +09:00
かっこかり
020c191e2c
fix(frontend): MiAuth認可画面のデザイン修正 (#15106) 2024-12-10 10:29:40 +09:00
8d10b6d846
reduce metric cardinaility
Some checks failed
Lint / pnpm_install (push) Successful in 1m35s
Publish Docker image / Build (push) Successful in 5m1s
Test (production install and build) / production (22.11.0) (push) Successful in 1m28s
Test (backend) / unit (22.11.0) (push) Failing after 15m43s
Lint / lint (backend) (push) Failing after 2m48s
Lint / lint (frontend-embed) (push) Successful in 2m39s
Lint / lint (frontend) (push) Failing after 3m14s
Lint / lint (frontend-shared) (push) Successful in 2m56s
Lint / lint (misskey-bubble-game) (push) Successful in 2m57s
Lint / lint (misskey-js) (push) Successful in 3m7s
Lint / lint (misskey-reversi) (push) Successful in 2m48s
Lint / lint (sw) (push) Failing after 35s
Lint / typecheck (misskey-js) (push) Successful in 1m51s
Lint / typecheck (backend) (push) Successful in 2m34s
Lint / typecheck (sw) (push) Successful in 2m25s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-30 21:28:03 -06:00
syuilo
dac3b1f405 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2024-11-30 13:20:51 +09:00
syuilo
fa271cf84e Update about-misskey.vue 2024-11-30 13:20:49 +09:00
8521487461
fixup! fixup! Add ToS and privacy policy
All checks were successful
Test (production install and build) / production (22.11.0) (push) Successful in 1m10s
Publish Docker image / Build (push) Successful in 4m36s
2024-11-28 01:18:42 -06:00
109080cd26
fixup! Add ToS and privacy policy
Some checks failed
Test (production install and build) / production (22.11.0) (push) Waiting to run
Publish Docker image / Build (push) Has been cancelled
2024-11-28 01:02:53 -06:00
2ecd0dd1de
Add ToS and privacy policy
Some checks failed
Test (production install and build) / production (22.11.0) (push) Successful in 1m14s
Lint / pnpm_install (pull_request) Successful in 1m40s
Publish Docker image / Build (push) Successful in 4m38s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m10s
Publish Docker image / Build (pull_request) Successful in 4m31s
Lint / lint (backend) (pull_request) Failing after 2m14s
Lint / lint (frontend) (pull_request) Failing after 2m40s
Lint / lint (frontend-shared) (pull_request) Successful in 2m33s
Lint / lint (frontend-embed) (pull_request) Successful in 2m54s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m28s
Lint / lint (misskey-js) (pull_request) Successful in 2m19s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m30s
Lint / lint (sw) (pull_request) Successful in 2m20s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m40s
Lint / typecheck (backend) (pull_request) Successful in 2m14s
Lint / typecheck (sw) (pull_request) Successful in 1m42s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-28 00:54:35 -06:00
2775328777
Remove overly-generic misskey-hub signup warning
Some checks failed
Test (production install and build) / production (22.11.0) (push) Successful in 1m28s
Lint / pnpm_install (push) Successful in 1m55s
Lint / lint (backend) (push) Failing after 2m6s
Lint / lint (frontend) (push) Failing after 2m16s
Publish Docker image / Build (push) Successful in 4m44s
Lint / lint (frontend-embed) (push) Successful in 2m19s
Lint / lint (frontend-shared) (push) Successful in 2m22s
Lint / lint (misskey-bubble-game) (push) Successful in 2m8s
Lint / lint (misskey-js) (push) Successful in 2m13s
Lint / lint (sw) (push) Successful in 2m22s
Lint / lint (misskey-reversi) (push) Successful in 2m35s
Lint / typecheck (sw) (push) Successful in 1m17s
Lint / typecheck (backend) (push) Successful in 2m14s
Lint / typecheck (misskey-js) (push) Successful in 1m57s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-27 22:53:39 -06:00
96bba9d47d
Disable needless CSP in dev environment
Some checks failed
Publish Docker image / Build (push) Failing after 0s
Lint / pnpm_install (push) Failing after 0s
Lint / lint (backend) (push) Has been skipped
Lint / lint (frontend) (push) Has been skipped
Lint / lint (frontend-embed) (push) Has been skipped
Lint / lint (frontend-shared) (push) Has been skipped
Lint / lint (misskey-bubble-game) (push) Has been skipped
Lint / lint (misskey-js) (push) Has been skipped
Lint / lint (misskey-reversi) (push) Has been skipped
Lint / lint (sw) (push) Has been skipped
Lint / typecheck (backend) (push) Has been skipped
Lint / typecheck (misskey-js) (push) Has been skipped
Lint / typecheck (sw) (push) Has been skipped
Test (production install and build) / production (22.11.0) (push) Failing after 0s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-27 13:27:17 -06:00
373eca7a19
revert redundant host checks in ApResolver
Some checks failed
Lint / pnpm_install (push) Successful in 1m58s
Test (production install and build) / production (22.11.0) (push) Successful in 1m5s
Publish Docker image / Build (push) Successful in 5m0s
Lint / pnpm_install (pull_request) Successful in 1m11s
Publish Docker image / Build (pull_request) Successful in 4m22s
Test (backend) / unit (22.11.0) (push) Failing after 8m17s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m15s
Test (backend) / unit (22.11.0) (pull_request) Failing after 7m23s
Lint / lint (backend) (push) Failing after 2m24s
Lint / lint (frontend) (push) Failing after 2m13s
Lint / lint (frontend-shared) (push) Successful in 2m23s
Lint / lint (frontend-embed) (push) Successful in 2m26s
Lint / lint (misskey-bubble-game) (push) Successful in 2m16s
Lint / lint (misskey-js) (push) Successful in 2m30s
Lint / lint (misskey-reversi) (push) Successful in 2m29s
Lint / lint (sw) (push) Successful in 2m19s
Lint / typecheck (misskey-js) (push) Successful in 1m23s
Lint / typecheck (backend) (push) Successful in 1m58s
Lint / typecheck (sw) (push) Successful in 1m27s
Lint / lint (backend) (pull_request) Failing after 2m13s
Lint / lint (frontend) (pull_request) Failing after 2m13s
Lint / lint (frontend-embed) (pull_request) Successful in 2m14s
Lint / lint (frontend-shared) (pull_request) Successful in 2m10s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m4s
Lint / lint (misskey-js) (pull_request) Successful in 2m32s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m14s
Lint / lint (sw) (pull_request) Successful in 2m6s
Lint / typecheck (backend) (pull_request) Successful in 2m3s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m28s
Lint / typecheck (sw) (pull_request) Successful in 1m34s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-25 19:44:28 -06:00
github-actions[bot]
8076f78d06 Bump version to 2024.11.1-alpha.0 2024-11-25 22:18:00 +00:00
70d5c713ca
Allow non password protected keys for 2FA only
Some checks failed
Lint / pnpm_install (pull_request) Successful in 1m20s
Publish Docker image / Build (pull_request) Successful in 3m50s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m2s
Lint / pnpm_install (push) Successful in 1m14s
Test (backend) / unit (22.11.0) (pull_request) Failing after 7m19s
Publish Docker image / Build (push) Successful in 4m49s
Test (production install and build) / production (22.11.0) (push) Successful in 1m16s
Test (backend) / unit (22.11.0) (push) Failing after 7m17s
Lint / lint (backend) (pull_request) Failing after 2m21s
Lint / lint (frontend) (pull_request) Failing after 2m14s
Lint / lint (frontend-embed) (pull_request) Successful in 2m24s
Lint / lint (frontend-shared) (pull_request) Successful in 2m16s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m14s
Lint / lint (misskey-js) (pull_request) Successful in 2m11s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m20s
Lint / lint (sw) (pull_request) Successful in 2m6s
Lint / typecheck (backend) (pull_request) Successful in 2m7s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m26s
Lint / typecheck (sw) (pull_request) Successful in 1m30s
Lint / lint (backend) (push) Failing after 2m17s
Lint / lint (frontend) (push) Failing after 2m11s
Lint / lint (frontend-embed) (push) Successful in 2m28s
Lint / lint (frontend-shared) (push) Successful in 2m22s
Lint / lint (misskey-bubble-game) (push) Successful in 2m14s
Lint / lint (misskey-js) (push) Successful in 2m11s
Lint / lint (sw) (push) Successful in 2m41s
Lint / lint (misskey-reversi) (push) Successful in 2m57s
Lint / typecheck (backend) (push) Successful in 2m12s
Lint / typecheck (misskey-js) (push) Successful in 1m31s
Lint / typecheck (sw) (push) Successful in 1m43s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-25 08:38:58 -06:00
f3eeb711a0
test a new initialization
Some checks failed
Lint / pnpm_install (push) Successful in 1m56s
Test (production install and build) / production (22.11.0) (push) Successful in 1m0s
Publish Docker image / Build (push) Successful in 4m0s
Lint / lint (backend) (push) Failing after 2m6s
Lint / lint (frontend) (push) Successful in 2m8s
Lint / lint (frontend-embed) (push) Successful in 1m58s
Lint / lint (frontend-shared) (push) Successful in 1m58s
Test (backend) / unit (22.11.0) (push) Failing after 7m50s
Lint / lint (misskey-bubble-game) (push) Successful in 2m17s
Lint / lint (misskey-js) (push) Successful in 2m28s
Lint / lint (misskey-reversi) (push) Successful in 2m14s
Lint / lint (sw) (push) Successful in 2m27s
Lint / typecheck (misskey-js) (push) Successful in 1m31s
Lint / typecheck (backend) (push) Successful in 2m9s
Lint / typecheck (sw) (push) Successful in 1m18s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-24 15:02:29 -06:00
80f788c38b
fix loading spinner
Some checks failed
Lint / pnpm_install (push) Successful in 2m2s
Test (production install and build) / production (22.11.0) (push) Successful in 1m6s
Publish Docker image / Build (push) Successful in 4m43s
Lint / lint (backend) (push) Successful in 2m23s
Lint / lint (frontend) (push) Successful in 2m16s
Lint / lint (frontend-embed) (push) Successful in 2m16s
Test (backend) / unit (22.11.0) (push) Failing after 7m53s
Lint / lint (frontend-shared) (push) Successful in 2m19s
Lint / lint (misskey-bubble-game) (push) Successful in 2m26s
Lint / lint (misskey-js) (push) Successful in 2m42s
Lint / lint (misskey-reversi) (push) Successful in 2m29s
Lint / lint (sw) (push) Successful in 2m32s
Lint / typecheck (misskey-js) (push) Successful in 1m28s
Lint / typecheck (backend) (push) Successful in 2m6s
Lint / typecheck (sw) (push) Successful in 1m34s
Lint / pnpm_install (pull_request) Successful in 1m34s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m4s
Publish Docker image / Build (pull_request) Successful in 4m43s
Test (backend) / unit (22.11.0) (pull_request) Failing after 7m58s
Lint / lint (backend) (pull_request) Successful in 2m20s
Lint / lint (frontend) (pull_request) Successful in 2m8s
Lint / lint (frontend-embed) (pull_request) Successful in 2m20s
Lint / lint (frontend-shared) (pull_request) Successful in 2m30s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m23s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m24s
Lint / lint (misskey-js) (pull_request) Successful in 2m40s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m21s
Lint / lint (sw) (pull_request) Successful in 2m33s
Lint / typecheck (backend) (pull_request) Successful in 1m58s
Lint / typecheck (sw) (pull_request) Successful in 1m31s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-24 12:39:18 -06:00
1192cffa29
more permissions-policy
Some checks failed
Lint / pnpm_install (push) Successful in 1m46s
Test (production install and build) / production (22.11.0) (push) Successful in 1m2s
Publish Docker image / Build (push) Successful in 4m10s
Lint / lint (backend) (push) Successful in 2m32s
Lint / lint (frontend) (push) Successful in 2m7s
Lint / lint (frontend-embed) (push) Successful in 2m4s
Test (backend) / unit (22.11.0) (push) Failing after 7m50s
Lint / lint (frontend-shared) (push) Successful in 2m18s
Lint / lint (misskey-bubble-game) (push) Successful in 2m17s
Lint / lint (misskey-js) (push) Successful in 2m18s
Lint / lint (misskey-reversi) (push) Successful in 2m7s
Lint / lint (sw) (push) Successful in 2m12s
Lint / typecheck (misskey-js) (push) Successful in 1m27s
Lint / typecheck (backend) (push) Successful in 2m9s
Lint / pnpm_install (pull_request) Successful in 1m28s
Lint / typecheck (sw) (push) Successful in 2m7s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m8s
Publish Docker image / Build (pull_request) Successful in 4m16s
Lint / lint (backend) (pull_request) Successful in 2m17s
Lint / lint (frontend) (pull_request) Successful in 2m13s
Lint / lint (frontend-embed) (pull_request) Successful in 2m5s
Lint / lint (frontend-shared) (pull_request) Successful in 2m8s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m12s
Test (backend) / unit (22.11.0) (pull_request) Failing after 8m10s
Lint / lint (misskey-js) (pull_request) Successful in 2m16s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m29s
Lint / lint (sw) (pull_request) Successful in 2m31s
Lint / typecheck (backend) (pull_request) Successful in 2m5s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m47s
Lint / typecheck (sw) (pull_request) Successful in 2m16s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-24 11:19:45 -06:00
a3a6d2b5ba
2024.11.0-yumechinokuni.8
All checks were successful
Test (production install and build) / production (22.11.0) (push) Successful in 1m12s
Lint / pnpm_install (push) Successful in 1m45s
Publish Docker image / Build (push) Successful in 4m46s
Lint / lint (backend) (push) Successful in 2m10s
Lint / lint (frontend) (push) Successful in 2m15s
Lint / lint (frontend-embed) (push) Successful in 2m15s
Lint / lint (frontend-shared) (push) Successful in 2m13s
Lint / lint (misskey-bubble-game) (push) Successful in 2m4s
Lint / lint (misskey-js) (push) Successful in 2m17s
Lint / lint (misskey-reversi) (push) Successful in 2m13s
Lint / lint (sw) (push) Successful in 2m24s
Lint / typecheck (backend) (push) Successful in 2m0s
Lint / typecheck (misskey-js) (push) Successful in 1m34s
Lint / typecheck (sw) (push) Successful in 1m28s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-24 06:34:58 -06:00
756c8b3ef4
Security: SSRプライバシー方面の改善
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-24 06:34:42 -06:00
c2029ed271
Fix(frontend): SSRでユーザープロフィールが表示されない問題を修正
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-24 06:34:31 -06:00
anatawa12
dd56623cde
fix: unable to upload to local object storage (#15040) 2024-11-24 20:44:59 +09:00
かっこかり
a0e91b5882
fix(backend): 起動前の疎通チェックが機能しなくなっていた問題を修正 (#15043)
* check harder for connectibility

`allSettled` does not throw if a promise is rejected, so
`check_connect` never actually failed

* Update Changelog

---------

Co-authored-by: dakkar <dakkar@thenautilus.net>
2024-11-24 20:43:47 +09:00
かっこかり
eddf6a2319
fix(frontend): サーバードキュメントとMisskey関連リソースとの間にdividerが入らないことがある問題を修正 (#15044)
* fix(frontend): サーバードキュメントとMisskey関連リソースとの間にdividerが入らないことがある問題を修正

* Update Changelog
2024-11-24 15:23:21 +09:00
かっこかり
d176db517f
fix(backend/misskey-js): タイポ修正 (#15046) 2024-11-24 15:23:07 +09:00
82c80a53a6
continue patching transport layer security
Some checks failed
Lint / pnpm_install (push) Successful in 1m47s
Test (production install and build) / production (22.11.0) (push) Successful in 1m0s
Publish Docker image / Build (push) Successful in 4m34s
Lint / lint (backend) (push) Successful in 2m9s
Lint / lint (frontend) (push) Successful in 2m5s
Lint / lint (frontend-embed) (push) Successful in 1m56s
Test (backend) / unit (22.11.0) (push) Failing after 7m47s
Lint / lint (frontend-shared) (push) Successful in 2m5s
Lint / lint (misskey-bubble-game) (push) Successful in 2m4s
Lint / lint (misskey-js) (push) Successful in 2m2s
Lint / lint (misskey-reversi) (push) Successful in 2m3s
Lint / lint (sw) (push) Successful in 2m9s
Lint / typecheck (backend) (push) Successful in 1m47s
Lint / typecheck (misskey-js) (push) Successful in 1m21s
Lint / typecheck (sw) (push) Successful in 1m25s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-23 11:47:11 -06:00
anatawa12
ae1d0b08eb
ci: do not run chromatic on fork repositories (#15041) 2024-11-23 17:42:55 +09:00
おさむのひと
a77ad7a16b
fix(backend): アドレス入力で直接ユーザのプロフィールページを表示した際、前提データが足りず描画に失敗する (#15033)
* fix(backend): アドレス入力で直接ユーザのプロフィールページを表示した際、前提データが足りず描画に失敗する

* fix CHANGELOG.md
2024-11-23 16:45:05 +09:00
かっこかり
00301ed04f
Update CHANGELOG.md (書き方を揃える) 2024-11-23 16:05:10 +09:00
かっこかり
d91a1be562
fix(frontend): 画面サイズが変わった際にnavbarが自動で折りたたまれない問題を修正 (#15042)
* fix(frontend): 画面サイズが変わった際にnavbarが自動で折りたたまれない問題を修正

* Update Changelog

* fix
2024-11-23 15:35:06 +09:00
4b96e03f54
mark URL mismatch as permanent
Some checks failed
Lint / pnpm_install (push) Successful in 1m47s
Test (production install and build) / production (22.11.0) (push) Successful in 1m3s
Publish Docker image / Build (push) Successful in 4m3s
Lint / lint (backend) (push) Successful in 2m18s
Lint / lint (frontend) (push) Successful in 1m58s
Lint / lint (frontend-embed) (push) Successful in 1m57s
Test (backend) / unit (22.11.0) (push) Failing after 7m23s
Lint / lint (frontend-shared) (push) Successful in 2m15s
Lint / lint (misskey-bubble-game) (push) Successful in 1m59s
Lint / lint (misskey-js) (push) Successful in 2m6s
Lint / lint (misskey-reversi) (push) Successful in 2m5s
Lint / lint (sw) (push) Successful in 2m11s
Lint / typecheck (backend) (push) Successful in 1m58s
Lint / typecheck (misskey-js) (push) Successful in 1m25s
Lint / typecheck (sw) (push) Successful in 1m22s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-22 14:50:32 -06:00
syuilo
04b221409c fix(backend): use atomic command to improve security 2024-11-23 04:44:33 +09:00
d591282f5e
2024.11.0-yumechinokuni.7
Some checks failed
Lint / pnpm_install (push) Successful in 1m48s
Test (production install and build) / production (22.11.0) (push) Successful in 1m6s
Publish Docker image / Build (push) Successful in 4m43s
Lint / lint (backend) (push) Successful in 2m4s
Lint / lint (frontend) (push) Successful in 1m56s
Lint / lint (frontend-embed) (push) Successful in 1m58s
Test (backend) / unit (22.11.0) (push) Failing after 7m27s
Lint / lint (frontend-shared) (push) Successful in 2m8s
Lint / lint (misskey-bubble-game) (push) Successful in 2m5s
Lint / lint (misskey-js) (push) Successful in 2m3s
Lint / lint (misskey-reversi) (push) Successful in 1m59s
Lint / lint (sw) (push) Successful in 2m9s
Lint / typecheck (backend) (push) Successful in 1m50s
Lint / typecheck (misskey-js) (push) Successful in 1m35s
Lint / typecheck (sw) (push) Successful in 1m47s
Lint / pnpm_install (pull_request) Successful in 1m21s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 58s
Publish Docker image / Build (pull_request) Successful in 4m25s
Lint / lint (backend) (pull_request) Successful in 2m11s
Lint / lint (frontend) (pull_request) Successful in 1m55s
Lint / lint (frontend-embed) (pull_request) Successful in 1m56s
Lint / lint (frontend-shared) (pull_request) Successful in 1m56s
Test (backend) / unit (22.11.0) (pull_request) Failing after 7m25s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m4s
Lint / lint (misskey-js) (pull_request) Successful in 2m34s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m5s
Lint / lint (sw) (pull_request) Successful in 2m23s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m32s
Lint / typecheck (backend) (pull_request) Successful in 2m12s
Lint / typecheck (sw) (pull_request) Successful in 1m31s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-22 09:55:32 -06:00
FLY_MC
873ef89e42
retry pick pari sw.ts
Some checks failed
Lint / pnpm_install (push) Successful in 1m51s
Test (production install and build) / production (22.11.0) (push) Successful in 1m0s
Publish Docker image / Build (push) Successful in 4m27s
Lint / lint (backend) (push) Successful in 2m22s
Lint / lint (frontend) (push) Successful in 1m56s
Lint / lint (frontend-embed) (push) Successful in 1m59s
Test (backend) / unit (22.11.0) (push) Failing after 7m32s
Lint / lint (frontend-shared) (push) Successful in 2m0s
Lint / lint (misskey-bubble-game) (push) Successful in 2m19s
Lint / lint (misskey-js) (push) Successful in 1m59s
Lint / lint (misskey-reversi) (push) Successful in 2m2s
Lint / lint (sw) (push) Successful in 2m14s
Lint / typecheck (misskey-js) (push) Successful in 1m22s
Lint / typecheck (backend) (push) Successful in 2m5s
Lint / typecheck (sw) (push) Successful in 1m10s
2024-11-22 09:38:18 -06:00
d7a8660952
set connect-src for sw.js
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-22 09:37:41 -06:00
eec5ce1a99
Remove trademarked branding
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-22 09:35:51 -06:00
f7cdb9df70
bump fedivet
Some checks failed
Lint / pnpm_install (push) Successful in 1m35s
Publish Docker image / Build (push) Successful in 3m55s
Test (production install and build) / production (22.11.0) (push) Successful in 1m15s
Lint / lint (backend) (push) Successful in 2m14s
Lint / lint (frontend) (push) Successful in 1m55s
Lint / lint (frontend-embed) (push) Successful in 1m59s
Lint / lint (frontend-shared) (push) Successful in 2m1s
Test (backend) / unit (22.11.0) (push) Failing after 7m56s
Lint / lint (misskey-bubble-game) (push) Successful in 2m12s
Lint / lint (misskey-js) (push) Successful in 2m9s
Lint / lint (misskey-reversi) (push) Successful in 2m12s
Lint / typecheck (backend) (push) Successful in 2m19s
Lint / lint (sw) (push) Successful in 2m33s
Lint / typecheck (misskey-js) (push) Successful in 1m29s
Lint / typecheck (sw) (push) Successful in 1m12s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-22 08:57:48 -06:00
かっこかり
0e90589290
Update CHANGELOG.md (typo) 2024-11-22 21:19:12 +09:00
github-actions[bot]
872cefcfb8 [skip ci] Update CHANGELOG.md (prepend template) 2024-11-22 09:15:37 +00:00
github-actions[bot]
551040ed0f Release: 2024.11.0 2024-11-22 09:15:09 +00:00
syuilo
71bfa85986
New Crowdin updates (#15027)
* New translations ja-jp.yml (Chinese Simplified)

* New translations ja-jp.yml (Chinese Simplified)
2024-11-22 18:01:56 +09:00
かっこかり
f25fc5215b
fix(backend): Inboxのエラーをthrowせずreturnしている問題を修正 (#15022)
* fix exception handling for Like activities

(cherry picked from commit 8f42e8434eaebe3aba5d1980c57f49dd8ad0de91)

* fix exception handling for Announce activities

(cherry picked from commit cfc3ab4b045af0674122fa49176431860176358b)

* fix exception handling for Undo activities

* Update Changelog

---------

Co-authored-by: Hazelnoot <acomputerdog@gmail.com>
2024-11-22 12:14:41 +09:00
anatawa12
1911972ae2
ci: reset prerelease number on release (#15024) 2024-11-22 12:11:45 +09:00
2b1c4b7245
2024.11.0-yumechinokuni.6p2
Some checks failed
Lint / pnpm_install (push) Successful in 1m48s
Test (production install and build) / production (22.11.0) (push) Successful in 1m0s
Publish Docker image / Build (push) Successful in 4m41s
Lint / lint (backend) (push) Successful in 2m7s
Lint / lint (frontend) (push) Successful in 2m6s
Lint / lint (frontend-embed) (push) Successful in 2m5s
Test (backend) / unit (22.11.0) (push) Failing after 7m59s
Lint / lint (frontend-shared) (push) Successful in 2m5s
Lint / lint (misskey-bubble-game) (push) Successful in 2m8s
Lint / lint (misskey-js) (push) Successful in 2m2s
Lint / lint (misskey-reversi) (push) Successful in 2m15s
Lint / lint (sw) (push) Successful in 2m1s
Lint / typecheck (misskey-js) (push) Successful in 1m28s
Lint / typecheck (backend) (push) Successful in 2m6s
Lint / typecheck (sw) (push) Successful in 1m28s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 12:38:16 -06:00
e885beaab9
Revert "Pick pari sw.ts"
Some checks failed
Lint / lint (frontend-shared) (push) Blocked by required conditions
Lint / lint (misskey-bubble-game) (push) Blocked by required conditions
Lint / lint (misskey-js) (push) Blocked by required conditions
Lint / lint (misskey-reversi) (push) Blocked by required conditions
Lint / lint (sw) (push) Blocked by required conditions
Lint / typecheck (backend) (push) Blocked by required conditions
Lint / typecheck (misskey-js) (push) Blocked by required conditions
Lint / typecheck (sw) (push) Blocked by required conditions
Lint / pnpm_install (push) Successful in 1m44s
Test (production install and build) / production (22.11.0) (push) Successful in 56s
Publish Docker image / Build (push) Successful in 4m38s
Lint / lint (backend) (push) Successful in 2m5s
Lint / lint (frontend-embed) (push) Has been cancelled
Lint / lint (frontend) (push) Has been cancelled
Test (backend) / unit (22.11.0) (push) Has been cancelled
This reverts commit 8e508b921c.

Revert "add media proxy to worker-src"

This reverts commit b29f49fefc.
2024-11-21 12:32:43 -06:00
d25fa27c24
add content and tag to ap safelist
Some checks failed
Lint / lint (sw) (push) Blocked by required conditions
Lint / typecheck (backend) (push) Blocked by required conditions
Lint / typecheck (misskey-js) (push) Blocked by required conditions
Lint / typecheck (sw) (push) Blocked by required conditions
Lint / pnpm_install (push) Successful in 1m49s
Test (production install and build) / production (22.11.0) (push) Successful in 1m0s
Publish Docker image / Build (push) Successful in 4m42s
Lint / lint (backend) (push) Successful in 2m5s
Lint / lint (frontend) (push) Successful in 1m52s
Lint / lint (frontend-embed) (push) Successful in 2m3s
Test (backend) / unit (22.11.0) (push) Failing after 8m4s
Lint / lint (misskey-bubble-game) (push) Successful in 1m58s
Lint / lint (frontend-shared) (push) Has been cancelled
Lint / lint (misskey-reversi) (push) Has been cancelled
Lint / lint (misskey-js) (push) Has been cancelled
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 12:23:48 -06:00
7a0067460b Merge pull request 'Merge upstream' (#40) from develop into master
Some checks failed
Lint / pnpm_install (push) Successful in 1m39s
Test (production install and build) / production (22.11.0) (push) Successful in 1m5s
Publish Docker image / Build (push) Successful in 4m56s
Lint / lint (backend) (push) Successful in 2m17s
Lint / lint (frontend) (push) Successful in 2m0s
Lint / lint (frontend-embed) (push) Successful in 1m59s
Lint / lint (frontend-shared) (push) Successful in 1m56s
Lint / lint (misskey-bubble-game) (push) Successful in 2m6s
Test (backend) / unit (22.11.0) (push) Failing after 8m8s
Lint / lint (misskey-reversi) (push) Successful in 2m2s
Lint / lint (misskey-js) (push) Successful in 2m40s
Lint / lint (sw) (push) Successful in 2m0s
Lint / typecheck (misskey-js) (push) Successful in 1m27s
Lint / typecheck (sw) (push) Successful in 1m32s
Lint / typecheck (backend) (push) Successful in 2m18s
Reviewed-on: #40
2024-11-21 11:40:02 -06:00
63a98f3b41
2024.11.0-yumechinokuni.6
Some checks failed
Lint / pnpm_install (pull_request) Successful in 1m30s
Lint / pnpm_install (push) Successful in 1m9s
Publish Docker image / Build (push) Successful in 4m58s
Publish Docker image / Build (pull_request) Successful in 4m6s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m21s
Test (production install and build) / production (22.11.0) (push) Successful in 1m1s
Lint / lint (backend) (pull_request) Successful in 2m1s
Lint / lint (frontend) (pull_request) Successful in 2m19s
Test (backend) / unit (22.11.0) (pull_request) Failing after 7m47s
Test (backend) / unit (22.11.0) (push) Failing after 7m57s
Lint / lint (frontend-shared) (pull_request) Successful in 2m20s
Lint / lint (frontend-embed) (pull_request) Successful in 2m34s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m13s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m25s
Lint / lint (misskey-js) (pull_request) Successful in 2m27s
Lint / lint (sw) (pull_request) Successful in 2m14s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m24s
Lint / typecheck (backend) (pull_request) Successful in 1m56s
Lint / typecheck (sw) (pull_request) Successful in 1m29s
Lint / lint (backend) (push) Successful in 2m12s
Lint / lint (frontend) (push) Successful in 2m8s
Lint / lint (frontend-embed) (push) Successful in 2m6s
Lint / lint (frontend-shared) (push) Successful in 2m7s
Lint / lint (misskey-bubble-game) (push) Successful in 2m8s
Lint / lint (misskey-js) (push) Successful in 2m9s
Lint / lint (misskey-reversi) (push) Failing after 1m37s
Lint / lint (sw) (push) Successful in 2m16s
Lint / typecheck (backend) (push) Successful in 2m4s
Lint / typecheck (misskey-js) (push) Successful in 1m31s
Lint / typecheck (sw) (push) Successful in 1m53s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 11:23:41 -06:00
b29f49fefc
add media proxy to worker-src
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 11:21:45 -06:00
fly_mc
8e508b921c Pick pari sw.ts 2024-11-21 10:58:08 -06:00
9052a02598
fix a mishap during merging upstream
Some checks failed
Lint / lint (backend) (push) Blocked by required conditions
Lint / lint (frontend) (push) Blocked by required conditions
Lint / lint (frontend-embed) (push) Blocked by required conditions
Lint / lint (frontend-shared) (push) Blocked by required conditions
Lint / lint (misskey-bubble-game) (push) Blocked by required conditions
Lint / lint (misskey-js) (push) Blocked by required conditions
Lint / lint (misskey-reversi) (push) Blocked by required conditions
Lint / lint (sw) (push) Blocked by required conditions
Lint / typecheck (backend) (push) Blocked by required conditions
Lint / typecheck (misskey-js) (push) Blocked by required conditions
Lint / typecheck (sw) (push) Blocked by required conditions
Lint / pnpm_install (push) Successful in 1m39s
Test (production install and build) / production (22.11.0) (push) Successful in 1m5s
Publish Docker image / Build (push) Has been cancelled
Test (backend) / unit (22.11.0) (push) Has been cancelled
Lint / pnpm_install (pull_request) Successful in 1m52s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m7s
Publish Docker image / Build (pull_request) Successful in 5m5s
Test (backend) / unit (22.11.0) (pull_request) Failing after 10m20s
Lint / lint (backend) (pull_request) Successful in 2m0s
Lint / lint (frontend) (pull_request) Successful in 2m15s
Lint / lint (frontend-shared) (pull_request) Successful in 2m25s
Lint / lint (frontend-embed) (pull_request) Successful in 2m44s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m16s
Lint / lint (misskey-js) (pull_request) Successful in 2m11s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m14s
Lint / lint (sw) (pull_request) Successful in 2m16s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m27s
Lint / typecheck (backend) (pull_request) Successful in 1m59s
Lint / typecheck (sw) (pull_request) Successful in 1m31s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 10:20:20 -06:00
57c4fef275 Merge branch 'master' into develop 2024-11-21 10:19:57 -06:00
748685e53e
fix handling of private renotes
Some checks failed
Lint / pnpm_install (push) Successful in 1m43s
Publish Docker image / Build (push) Successful in 4m15s
Test (production install and build) / production (22.11.0) (push) Successful in 54s
Lint / lint (backend) (push) Successful in 1m58s
Test (backend) / unit (22.11.0) (push) Failing after 8m4s
Lint / lint (frontend) (push) Successful in 2m35s
Lint / lint (frontend-embed) (push) Successful in 2m15s
Lint / lint (frontend-shared) (push) Successful in 2m14s
Lint / lint (misskey-bubble-game) (push) Successful in 2m17s
Test (backend) / e2e (22.11.0) (push) Failing after 11m49s
Lint / lint (misskey-js) (push) Successful in 2m17s
Lint / lint (misskey-reversi) (push) Successful in 2m30s
Lint / typecheck (backend) (push) Failing after 1m52s
Lint / lint (sw) (push) Successful in 2m32s
Lint / typecheck (misskey-js) (push) Successful in 1m29s
Lint / typecheck (sw) (push) Successful in 1m53s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 10:11:42 -06:00
8212c62663 Merge pull request 'prepare for upstream release' (#39) from incoming into develop
Some checks failed
Lint / pnpm_install (push) Successful in 1m41s
Test (production install and build) / production (22.11.0) (push) Successful in 56s
Publish Docker image / Build (push) Successful in 3m57s
Lint / lint (backend) (push) Successful in 2m12s
Lint / lint (frontend) (push) Successful in 2m4s
Lint / lint (frontend-embed) (push) Successful in 1m54s
Test (backend) / unit (22.11.0) (push) Failing after 7m4s
Lint / lint (frontend-shared) (push) Successful in 2m2s
Lint / lint (misskey-bubble-game) (push) Successful in 2m3s
Lint / lint (misskey-js) (push) Successful in 2m0s
Lint / lint (misskey-reversi) (push) Successful in 1m59s
Lint / lint (sw) (push) Successful in 1m58s
Lint / typecheck (backend) (push) Successful in 1m54s
Lint / typecheck (misskey-js) (push) Successful in 1m16s
Lint / typecheck (sw) (push) Successful in 1m12s
Reviewed-on: #39
2024-11-21 09:04:32 -06:00
8d48909e4f
remove unused httpAgent
All checks were successful
Lint / pnpm_install (push) Successful in 1m31s
Test (production install and build) / production (22.11.0) (push) Successful in 1m18s
Lint / lint (backend) (push) Successful in 1m50s
Publish Docker image / Build (push) Successful in 4m1s
Lint / lint (frontend) (push) Successful in 2m19s
Lint / lint (frontend-embed) (push) Successful in 2m13s
Lint / lint (frontend-shared) (push) Successful in 2m4s
Lint / lint (misskey-bubble-game) (push) Successful in 2m4s
Lint / lint (misskey-js) (push) Successful in 2m6s
Lint / lint (misskey-reversi) (push) Successful in 2m6s
Lint / lint (sw) (push) Successful in 2m8s
Lint / typecheck (misskey-js) (push) Successful in 1m16s
Lint / typecheck (backend) (push) Successful in 2m0s
Lint / typecheck (sw) (push) Successful in 1m23s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 06:19:09 -06:00
5587de26c7
fix sw.js initialization order
Some checks are pending
Publish Docker image / Build (push) Waiting to run
Lint / pnpm_install (push) Waiting to run
Lint / lint (backend) (push) Blocked by required conditions
Lint / lint (frontend) (push) Blocked by required conditions
Lint / lint (frontend-embed) (push) Blocked by required conditions
Lint / lint (frontend-shared) (push) Blocked by required conditions
Lint / lint (misskey-bubble-game) (push) Blocked by required conditions
Lint / lint (misskey-js) (push) Blocked by required conditions
Lint / lint (misskey-reversi) (push) Blocked by required conditions
Lint / lint (sw) (push) Blocked by required conditions
Lint / typecheck (backend) (push) Blocked by required conditions
Lint / typecheck (misskey-js) (push) Blocked by required conditions
Lint / typecheck (sw) (push) Blocked by required conditions
Test (production install and build) / production (22.11.0) (push) Waiting to run
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 06:05:51 -06:00
FLY_MC
9bb310e0d1
pick pari sw.ts 2024-11-21 05:54:22 -06:00
d621657f16
remove e2e testing
Some checks failed
Lint / pnpm_install (pull_request) Successful in 1m7s
Publish Docker image / Build (pull_request) Successful in 4m12s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 56s
Test (backend) / unit (22.11.0) (pull_request) Failing after 8m40s
Lint / lint (backend) (pull_request) Successful in 1m50s
Lint / lint (frontend) (pull_request) Successful in 1m47s
Lint / lint (frontend-embed) (pull_request) Successful in 1m45s
Lint / lint (frontend-shared) (pull_request) Successful in 2m0s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m2s
Lint / lint (misskey-js) (pull_request) Successful in 1m56s
Lint / lint (misskey-reversi) (pull_request) Successful in 1m55s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m13s
Lint / typecheck (backend) (pull_request) Successful in 1m45s
Lint / lint (sw) (pull_request) Successful in 2m13s
Lint / typecheck (sw) (pull_request) Successful in 1m23s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 05:50:15 -06:00
b33a595b67
Merge remote-tracking branch 'upstream/develop' into incoming
Some checks failed
Lint / pnpm_install (pull_request) Successful in 1m31s
Publish Docker image / Build (pull_request) Successful in 4m2s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 55s
Test (backend) / unit (22.11.0) (pull_request) Failing after 6m54s
Test (backend) / e2e (22.11.0) (pull_request) Failing after 10m6s
Lint / lint (backend) (pull_request) Successful in 2m2s
Lint / lint (frontend) (pull_request) Successful in 2m0s
Lint / lint (frontend-embed) (pull_request) Successful in 2m4s
Lint / lint (frontend-shared) (pull_request) Successful in 1m48s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m11s
Lint / lint (misskey-js) (pull_request) Successful in 1m58s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m8s
Lint / lint (sw) (pull_request) Successful in 2m21s
Lint / typecheck (backend) (pull_request) Successful in 1m58s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m22s
Lint / typecheck (sw) (pull_request) Successful in 1m23s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 05:49:44 -06:00
rectcoordsystem
ce08d2c827
Merge commit from fork
* fix(backend): check target IP before sending HTTP request

* fix(backend): allow accessing private IP when testing

* Apply suggestions from code review

Co-authored-by: anatawa12 <anatawa12@icloud.com>

* fix(backend): lint and typecheck

* fix(backend): add isLocalAddressAllowed option to getAgentByUrl and send (HttpRequestService)

* fix(backend): allow fetchSummaryFromProxy, trueMail to access local addresses

---------

Co-authored-by: anatawa12 <anatawa12@icloud.com>
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 05:47:00 -06:00
Julia
a3ad95c058
Merge commit from fork
* Fix poll update spoofing

* fix: Disallow negative poll counts

---------

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 05:42:45 -06:00
syuilo
3b804799c3
New Crowdin updates (#15000)
* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (English)

* New translations ja-jp.yml (Korean)

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

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

* New translations ja-jp.yml (German)

Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 05:40:30 -06:00
Sayamame-beans
323de25075
Fix: リノートミュートが新規投稿通知に対して作用していなかった問題を修正 (#15006)
* fix(backend): renoteMute doesn't work for note notification

* docs(changelog): update changelog

Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 05:40:22 -06:00
syuilo
c427e10f17
perf(frontend): reduce api requests for non-logged-in enviroment (#15001)
* wip

* Update CHANGELOG.md

* wip

Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 05:40:12 -06:00
鴇峰 朔華
329995f4a3
feat: 絵文字のポップアップメニューに編集を追加 (#15004)
* Mod: 絵文字のポップアップメニューに編集を追加

* fix: code styleの修正

* fix: code styleの修正

* fix

Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 05:39:33 -06:00
zawa-ch.
f0a754eaa8
Fix(backend): アカウント削除のモデレーションログが動作していないのを修正 (#14996) (#14997)
* アカウント削除のモデレーションログが動作していないのを修正

* update CHANGELOG

Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 05:39:19 -06:00
Julia
504ead526a
Partial Merge of 5f675201f2
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 05:39:09 -06:00
15e669d943 Merge branch 'master' into develop
Some checks failed
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m2s
Test (backend) / unit (22.11.0) (pull_request) Failing after 6m40s
Publish Docker image / Build (push) Successful in 4m7s
Lint / pnpm_install (push) Successful in 1m26s
Test (backend) / e2e (22.11.0) (pull_request) Failing after 10m10s
Test (production install and build) / production (22.11.0) (push) Successful in 58s
Test (backend) / unit (22.11.0) (push) Failing after 6m18s
Test (backend) / e2e (22.11.0) (push) Failing after 10m19s
Lint / lint (backend) (pull_request) Successful in 2m7s
Lint / lint (frontend) (pull_request) Successful in 2m7s
Lint / lint (frontend-embed) (pull_request) Successful in 2m2s
Lint / lint (frontend-shared) (pull_request) Successful in 2m4s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m2s
Lint / lint (misskey-js) (pull_request) Successful in 2m2s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m3s
Lint / typecheck (backend) (pull_request) Failing after 1m35s
Lint / lint (sw) (pull_request) Successful in 2m6s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m25s
Lint / typecheck (sw) (pull_request) Successful in 1m20s
Lint / lint (backend) (push) Successful in 2m10s
Lint / lint (frontend) (push) Successful in 2m15s
Lint / lint (frontend-embed) (push) Successful in 2m9s
Lint / lint (frontend-shared) (push) Successful in 2m8s
Lint / lint (misskey-bubble-game) (push) Successful in 2m3s
Lint / lint (misskey-js) (push) Successful in 2m6s
Lint / lint (misskey-reversi) (push) Successful in 2m8s
Lint / typecheck (backend) (push) Failing after 1m33s
Lint / lint (sw) (push) Successful in 2m8s
Lint / typecheck (misskey-js) (push) Successful in 1m21s
Lint / typecheck (sw) (push) Successful in 1m18s
2024-11-21 03:51:59 -06:00
e01e82aa65
make sanitization failures permanent
Some checks failed
Lint / pnpm_install (push) Successful in 1m8s
Test (backend) / unit (22.11.0) (push) Failing after 6m45s
Lint / pnpm_install (pull_request) Successful in 1m7s
Publish Docker image / Build (pull_request) Successful in 4m10s
Test (backend) / e2e (22.11.0) (push) Failing after 10m23s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 56s
Test (backend) / unit (22.11.0) (pull_request) Failing after 6m57s
Test (backend) / e2e (22.11.0) (pull_request) Failing after 10m10s
Lint / lint (frontend) (push) Successful in 2m6s
Lint / lint (backend) (push) Successful in 2m33s
Lint / lint (frontend-embed) (push) Successful in 2m6s
Lint / lint (misskey-bubble-game) (push) Successful in 2m6s
Lint / lint (frontend-shared) (push) Successful in 2m17s
Lint / lint (misskey-js) (push) Successful in 2m15s
Lint / typecheck (backend) (push) Failing after 1m25s
Lint / lint (sw) (push) Successful in 2m15s
Lint / lint (misskey-reversi) (push) Successful in 2m18s
Lint / typecheck (misskey-js) (push) Successful in 1m21s
Lint / typecheck (sw) (push) Successful in 1m20s
Lint / lint (backend) (pull_request) Successful in 2m11s
Lint / lint (frontend) (pull_request) Successful in 2m10s
Lint / lint (frontend-embed) (pull_request) Successful in 1m59s
Lint / lint (frontend-shared) (pull_request) Successful in 2m1s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m0s
Lint / lint (misskey-js) (pull_request) Successful in 1m59s
Lint / lint (misskey-reversi) (pull_request) Successful in 1m59s
Lint / typecheck (backend) (pull_request) Failing after 1m28s
Lint / lint (sw) (pull_request) Successful in 2m1s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m34s
Lint / typecheck (sw) (pull_request) Successful in 1m22s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 03:51:28 -06:00
a72ca7dcf4 Merge pull request 'make sanitization failures permanent' (#37) from develop into master
Some checks are pending
Publish Docker image / Build (push) Waiting to run
Lint / pnpm_install (push) Waiting to run
Lint / lint (backend) (push) Blocked by required conditions
Lint / lint (frontend) (push) Blocked by required conditions
Lint / lint (frontend-embed) (push) Blocked by required conditions
Lint / lint (frontend-shared) (push) Blocked by required conditions
Lint / lint (misskey-bubble-game) (push) Blocked by required conditions
Lint / lint (misskey-js) (push) Blocked by required conditions
Lint / lint (misskey-reversi) (push) Blocked by required conditions
Lint / lint (sw) (push) Blocked by required conditions
Lint / typecheck (backend) (push) Blocked by required conditions
Lint / typecheck (misskey-js) (push) Blocked by required conditions
Lint / typecheck (sw) (push) Blocked by required conditions
Test (backend) / unit (22.11.0) (push) Waiting to run
Test (backend) / e2e (22.11.0) (push) Waiting to run
Test (production install and build) / production (22.11.0) (push) Waiting to run
Reviewed-on: #37
2024-11-21 03:47:38 -06:00
599c265530
make sanitization failures permanent
Some checks failed
Lint / lint (backend) (push) Blocked by required conditions
Lint / lint (frontend) (push) Blocked by required conditions
Lint / lint (frontend-embed) (push) Blocked by required conditions
Lint / lint (frontend-shared) (push) Blocked by required conditions
Lint / lint (misskey-bubble-game) (push) Blocked by required conditions
Lint / lint (misskey-js) (push) Blocked by required conditions
Lint / lint (misskey-reversi) (push) Blocked by required conditions
Lint / lint (sw) (push) Blocked by required conditions
Lint / typecheck (backend) (push) Blocked by required conditions
Lint / typecheck (misskey-js) (push) Blocked by required conditions
Lint / typecheck (sw) (push) Blocked by required conditions
Test (backend) / unit (22.11.0) (push) Waiting to run
Test (backend) / e2e (22.11.0) (push) Waiting to run
Test (production install and build) / production (22.11.0) (push) Waiting to run
Lint / pnpm_install (pull_request) Successful in 1m34s
Publish Docker image / Build (pull_request) Successful in 3m57s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 56s
Test (backend) / unit (22.11.0) (pull_request) Failing after 7m3s
Test (backend) / e2e (22.11.0) (pull_request) Failing after 9m56s
Lint / lint (backend) (pull_request) Successful in 2m3s
Lint / lint (frontend-embed) (pull_request) Successful in 2m9s
Lint / lint (frontend) (pull_request) Successful in 2m20s
Lint / lint (frontend-shared) (pull_request) Successful in 2m7s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m13s
Lint / lint (misskey-js) (pull_request) Successful in 2m11s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m13s
Lint / typecheck (backend) (pull_request) Failing after 1m31s
Lint / lint (sw) (pull_request) Successful in 2m15s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m34s
Lint / typecheck (sw) (pull_request) Successful in 1m25s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 03:40:59 -06:00
a97b5921c9 Merge pull request 'reject all non TLSv1.2 AP queries' (#36) from develop into master
Some checks are pending
Publish Docker image / Build (push) Waiting to run
Lint / pnpm_install (push) Waiting to run
Lint / lint (backend) (push) Blocked by required conditions
Lint / lint (frontend) (push) Blocked by required conditions
Lint / lint (frontend-embed) (push) Blocked by required conditions
Lint / lint (frontend-shared) (push) Blocked by required conditions
Lint / lint (misskey-bubble-game) (push) Blocked by required conditions
Lint / lint (misskey-js) (push) Blocked by required conditions
Lint / lint (misskey-reversi) (push) Blocked by required conditions
Lint / lint (sw) (push) Blocked by required conditions
Lint / typecheck (backend) (push) Blocked by required conditions
Lint / typecheck (misskey-js) (push) Blocked by required conditions
Lint / typecheck (sw) (push) Blocked by required conditions
Test (backend) / unit (22.11.0) (push) Waiting to run
Test (backend) / e2e (22.11.0) (push) Waiting to run
Test (production install and build) / production (22.11.0) (push) Waiting to run
Reviewed-on: #36
2024-11-21 03:16:09 -06:00
5b6e8cc110
reject all non TLSv1.2 AP queries
Some checks failed
Lint / lint (backend) (push) Blocked by required conditions
Lint / lint (frontend) (push) Blocked by required conditions
Lint / lint (frontend-embed) (push) Blocked by required conditions
Lint / lint (frontend-shared) (push) Blocked by required conditions
Lint / lint (misskey-bubble-game) (push) Blocked by required conditions
Lint / lint (misskey-js) (push) Blocked by required conditions
Lint / lint (misskey-reversi) (push) Blocked by required conditions
Lint / lint (sw) (push) Blocked by required conditions
Lint / typecheck (backend) (push) Blocked by required conditions
Lint / typecheck (misskey-js) (push) Blocked by required conditions
Lint / typecheck (sw) (push) Blocked by required conditions
Test (backend) / unit (22.11.0) (push) Waiting to run
Test (backend) / e2e (22.11.0) (push) Waiting to run
Test (production install and build) / production (22.11.0) (push) Waiting to run
Lint / pnpm_install (pull_request) Successful in 1m16s
Publish Docker image / Build (pull_request) Successful in 3m50s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 55s
Test (backend) / unit (22.11.0) (pull_request) Failing after 6m38s
Test (backend) / e2e (22.11.0) (pull_request) Failing after 10m0s
Lint / lint (backend) (pull_request) Successful in 2m5s
Lint / lint (frontend) (pull_request) Successful in 2m0s
Lint / lint (frontend-embed) (pull_request) Successful in 1m55s
Lint / lint (frontend-shared) (pull_request) Successful in 1m55s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m1s
Lint / lint (misskey-js) (pull_request) Successful in 2m3s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m3s
Lint / typecheck (backend) (pull_request) Failing after 1m24s
Lint / lint (sw) (pull_request) Successful in 2m8s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m24s
Lint / typecheck (sw) (pull_request) Successful in 1m22s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 03:12:47 -06:00
a2517d3d03 Merge pull request 'normalize all referential AP objects' (#35) from develop into master
Some checks are pending
Publish Docker image / Build (push) Waiting to run
Lint / pnpm_install (push) Waiting to run
Lint / lint (backend) (push) Blocked by required conditions
Lint / lint (frontend) (push) Blocked by required conditions
Lint / lint (frontend-embed) (push) Blocked by required conditions
Lint / lint (frontend-shared) (push) Blocked by required conditions
Lint / lint (misskey-bubble-game) (push) Blocked by required conditions
Lint / lint (misskey-js) (push) Blocked by required conditions
Lint / lint (misskey-reversi) (push) Blocked by required conditions
Lint / lint (sw) (push) Blocked by required conditions
Lint / typecheck (backend) (push) Blocked by required conditions
Lint / typecheck (misskey-js) (push) Blocked by required conditions
Lint / typecheck (sw) (push) Blocked by required conditions
Test (backend) / unit (22.11.0) (push) Waiting to run
Test (backend) / e2e (22.11.0) (push) Waiting to run
Test (production install and build) / production (22.11.0) (push) Waiting to run
Reviewed-on: #35
2024-11-21 02:46:06 -06:00
9b8d02d1c3
type-safe sanitization of AP objects
Some checks failed
Lint / lint (backend) (push) Blocked by required conditions
Lint / lint (frontend) (push) Blocked by required conditions
Lint / lint (frontend-embed) (push) Blocked by required conditions
Lint / lint (frontend-shared) (push) Blocked by required conditions
Lint / lint (misskey-bubble-game) (push) Blocked by required conditions
Lint / lint (misskey-js) (push) Blocked by required conditions
Lint / lint (misskey-reversi) (push) Blocked by required conditions
Lint / lint (sw) (push) Blocked by required conditions
Lint / typecheck (backend) (push) Blocked by required conditions
Lint / typecheck (misskey-js) (push) Blocked by required conditions
Lint / typecheck (sw) (push) Blocked by required conditions
Test (backend) / unit (22.11.0) (push) Waiting to run
Test (backend) / e2e (22.11.0) (push) Waiting to run
Test (production install and build) / production (22.11.0) (push) Waiting to run
Lint / pnpm_install (pull_request) Successful in 1m8s
Publish Docker image / Build (pull_request) Successful in 4m13s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 58s
Test (backend) / unit (22.11.0) (pull_request) Failing after 6m43s
Test (backend) / e2e (22.11.0) (pull_request) Failing after 10m17s
Lint / lint (backend) (pull_request) Successful in 2m20s
Lint / lint (frontend) (pull_request) Successful in 1m58s
Lint / lint (frontend-embed) (pull_request) Successful in 2m23s
Lint / lint (frontend-shared) (pull_request) Successful in 2m8s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 1m56s
Lint / lint (misskey-js) (pull_request) Successful in 2m2s
Lint / lint (misskey-reversi) (pull_request) Successful in 1m58s
Lint / lint (sw) (pull_request) Successful in 1m59s
Lint / typecheck (backend) (pull_request) Successful in 1m57s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m23s
Lint / typecheck (sw) (pull_request) Successful in 1m26s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-21 02:42:46 -06:00
github-actions[bot]
752606fe88 Bump version to 2024.11.0-beta.4 2024-11-21 08:21:54 +00:00
かっこかり
7f0ae038d4
Update CHANGELOG.md 2024-11-21 17:16:06 +09:00
syuilo
9871035597
Update CHANGELOG.md 2024-11-21 15:41:01 +09:00
github-actions[bot]
a21a2c52d7 Bump version to 2024.11.0-alpha.3 2024-11-21 06:27:16 +00:00
かっこかり
c1f19fad1e
fix(backend): fix apResolver (#15010)
* fix(backend): fix apResolver

* fix

* add comments

* tweak comment
2024-11-21 14:36:24 +09:00
かっこかり
3a6c2aa835
fix(backend): fix type error(s) in security fixes (#15009)
* Fix type error in security fixes

(cherry picked from commit fa3cf6c2996741e642955c5e2fca8ad785e83205)

* Fix error in test function calls

(cherry picked from commit 1758f29364eca3cbd13dbb5c84909c93712b3b3b)

* Fix style error

(cherry picked from commit 23c4aa25714af145098baa7edd74c1d217e51c1a)

* Fix another style error

(cherry picked from commit 36af07abe28bec670aaebf9f5af5694bb582c29a)

* Fix `.punyHost` misuse

(cherry picked from commit 6027b516e1c82324d55d6e54d0e17cbd816feb42)

* attempt to fix test: make yaml valid

---------

Co-authored-by: Julia Johannesen <julia@insertdomain.name>
2024-11-21 12:10:02 +09:00
かっこかり
53e827b18c
fix(backend): fix security patches (#15008) 2024-11-21 10:30:30 +09:00
syuilo
0f59adc436 fix ap/show 2024-11-21 09:25:18 +09:00
syuilo
9fdabe3666 fix(backend): use atomic command to improve security
Co-Authored-By: Acid Chicken <root@acid-chicken.com>
2024-11-21 09:22:15 +09:00
rectcoordsystem
090e9392cd
Merge commit from fork
* fix(backend): check target IP before sending HTTP request

* fix(backend): allow accessing private IP when testing

* Apply suggestions from code review

Co-authored-by: anatawa12 <anatawa12@icloud.com>

* fix(backend): lint and typecheck

* fix(backend): add isLocalAddressAllowed option to getAgentByUrl and send (HttpRequestService)

* fix(backend): allow fetchSummaryFromProxy, trueMail to access local addresses

---------

Co-authored-by: anatawa12 <anatawa12@icloud.com>
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2024-11-21 08:27:09 +09:00
Julia
b9cb949eb1
Merge commit from fork
* Fix poll update spoofing

* fix: Disallow negative poll counts

---------

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2024-11-21 08:24:50 +09:00
Julia
5f675201f2
Merge commit from fork
* enhance: Add a few validation fixes from Sharkey

See the original MR on the GitLab instance:
https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/484

Co-Authored-By: Dakkar <dakkar@thenautilus.net>

* fix: primitive 2: acceptance of cross-origin alternate

Co-Authored-By: Laura Hausmann <laura@hausmann.dev>

* fix: primitive 3: validation of non-final url

* fix: primitive 4: missing same-origin identifier validation of collection-wrapped activities

* fix: primitives 5 & 8: reject activities with non
string identifiers

Co-Authored-By: Laura Hausmann <laura@hausmann.dev>

* fix: primitive 6: reject anonymous objects that were fetched by their id

* fix: primitives 9, 10 & 11: http signature validation
doesn't enforce required headers or specify auth header name

Co-Authored-By: Laura Hausmann <laura@hausmann.dev>

* fix: primitive 14: improper validation of outbox, followers, following & shared inbox collections

* fix: code style for primitive 14

* fix: primitive 15: improper same-origin validation for
note uri and url

Co-Authored-By: Laura Hausmann <laura@hausmann.dev>

* fix: primitive 16: improper same-origin validation for user uri and url

* fix: primitive 17: note same-origin identifier validation can be bypassed by wrapping the id in an array

* fix: code style for primitive 17

* fix: check attribution against actor in notes

While this isn't strictly required to fix the exploits at hand, this
mirrors the fix in `ApQuestionService` for GHSA-5h8r-gq97-xv69, as a
preemptive countermeasure.

* fix: primitive 18: `ap/get` bypasses access checks

One might argue that we could make this one actually preform access
checks against the returned activity object, but I feel like that's a
lot more work than just restricting it to administrators, since, to me
at least, it seems more like a debugging tool than anything else.

* fix: primitive 19 & 20: respect blocks and hide more

Ideally, the user property should also be hidden (as leaving it in leaks
information slightly), but given the schema of the note endpoint, I
don't think that would be possible without introducing some kind of
"ghost" user, who is attributed for posts by users who have you blocked.

* fix: primitives 21, 22, and 23: reuse resolver

This also increases the default `recursionLimit` for `Resolver`, as it
theoretically will go higher that it previously would and could possibly
fail on non-malicious collection activities.

* fix: primitives 25-33: proper local instance checks

* revert: fix: primitive 19 & 20

This reverts commit 465a9fe6591de90f78bd3d084e3c01e65dc3cf3c.

---------

Co-authored-by: Dakkar <dakkar@thenautilus.net>
Co-authored-by: Laura Hausmann <laura@hausmann.dev>
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2024-11-21 08:20:09 +09:00
syuilo
1c284c8154
New Crowdin updates (#15000)
* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (English)

* New translations ja-jp.yml (Korean)

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

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

* New translations ja-jp.yml (German)
2024-11-21 08:01:42 +09:00
Sayamame-beans
aa48a0e207
Fix: リノートミュートが新規投稿通知に対して作用していなかった問題を修正 (#15006)
* fix(backend): renoteMute doesn't work for note notification

* docs(changelog): update changelog
2024-11-21 08:00:50 +09:00
syuilo
f0c3a4cc0b
perf(frontend): reduce api requests for non-logged-in enviroment (#15001)
* wip

* Update CHANGELOG.md

* wip
2024-11-21 07:58:34 +09:00
7a7aef71cd
do not use media proxy if emoji is local
Some checks failed
Lint / pnpm_install (push) Successful in 1m33s
Publish Docker image / Build (push) Successful in 3m47s
Test (production install and build) / production (22.11.0) (push) Successful in 58s
Lint / lint (backend) (push) Successful in 1m51s
Test (backend) / unit (22.11.0) (push) Successful in 6m52s
Lint / lint (frontend) (push) Successful in 1m55s
Lint / lint (frontend-embed) (push) Successful in 1m54s
Lint / lint (frontend-shared) (push) Successful in 2m0s
Lint / lint (misskey-bubble-game) (push) Successful in 2m2s
Test (backend) / e2e (22.11.0) (push) Failing after 10m4s
Lint / lint (misskey-js) (push) Successful in 2m7s
Lint / lint (misskey-reversi) (push) Successful in 2m8s
Lint / lint (sw) (push) Successful in 1m59s
Lint / typecheck (misskey-js) (push) Successful in 1m17s
Lint / typecheck (backend) (push) Successful in 2m11s
Lint / typecheck (sw) (push) Successful in 1m19s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-20 13:23:41 -06:00
鴇峰 朔華
4603ab67bb
feat: 絵文字のポップアップメニューに編集を追加 (#15004)
Some checks failed
API report (misskey.js) / report (push) Failing after 6s
Lint / locale_verify (push) Successful in 57s
* Mod: 絵文字のポップアップメニューに編集を追加

* fix: code styleの修正

* fix: code styleの修正

* fix
2024-11-20 20:08:26 +09:00
95d3fb08f4
Prefix all calls to Image and Video Processing service
Some checks failed
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m3s
Test (backend) / unit (22.11.0) (pull_request) Successful in 8m32s
Publish Docker image / Build (push) Successful in 4m37s
Lint / pnpm_install (push) Successful in 1m39s
Test (backend) / e2e (22.11.0) (pull_request) Failing after 11m28s
Test (production install and build) / production (22.11.0) (push) Successful in 1m1s
Lint / lint (backend) (pull_request) Successful in 2m8s
Test (backend) / unit (22.11.0) (push) Successful in 7m57s
Lint / lint (frontend) (pull_request) Successful in 2m13s
Lint / lint (frontend-embed) (pull_request) Successful in 2m18s
Lint / lint (frontend-shared) (pull_request) Successful in 2m19s
Test (backend) / e2e (22.11.0) (push) Failing after 11m35s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m35s
Lint / lint (misskey-js) (pull_request) Successful in 2m20s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m34s
Lint / lint (sw) (pull_request) Successful in 2m36s
Lint / typecheck (backend) (pull_request) Successful in 2m19s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m38s
Lint / typecheck (sw) (pull_request) Successful in 1m50s
Lint / lint (backend) (push) Successful in 2m40s
Lint / lint (frontend) (push) Successful in 2m38s
Lint / lint (frontend-embed) (push) Successful in 2m30s
Lint / lint (frontend-shared) (push) Successful in 2m26s
Lint / lint (misskey-bubble-game) (push) Successful in 2m36s
Lint / lint (misskey-js) (push) Successful in 2m36s
Lint / lint (misskey-reversi) (push) Successful in 2m26s
Lint / lint (sw) (push) Successful in 2m27s
Lint / typecheck (misskey-js) (push) Failing after 36s
Lint / typecheck (backend) (push) Successful in 2m22s
Lint / typecheck (sw) (push) Successful in 1m28s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-20 02:07:13 -06:00
4ba0357d49
fix(backend): Atomically mark remote account deletions
Some checks failed
Lint / pnpm_install (push) Successful in 1m59s
Publish Docker image / Build (push) Successful in 4m56s
Test (production install and build) / production (22.11.0) (push) Successful in 1m2s
Lint / lint (backend) (push) Successful in 2m12s
Test (backend) / unit (22.11.0) (push) Successful in 8m22s
Lint / lint (frontend-embed) (push) Failing after 1m40s
Lint / lint (frontend) (push) Successful in 2m43s
Lint / lint (frontend-shared) (push) Successful in 2m20s
Lint / lint (misskey-bubble-game) (push) Successful in 2m17s
Test (backend) / e2e (22.11.0) (push) Failing after 11m44s
Lint / lint (misskey-js) (push) Successful in 2m28s
Lint / lint (misskey-reversi) (push) Successful in 2m25s
Lint / lint (sw) (push) Successful in 2m26s
Lint / typecheck (misskey-js) (push) Successful in 1m39s
Lint / typecheck (backend) (push) Successful in 2m37s
Lint / typecheck (sw) (push) Successful in 1m45s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-19 23:44:20 -06:00
416d71002a
improve emoji packing
Some checks failed
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m10s
Publish Docker image / Build (pull_request) Successful in 5m10s
Test (backend) / e2e (22.11.0) (pull_request) Successful in 12m39s
Lint / lint (backend) (pull_request) Successful in 2m52s
Lint / lint (frontend-embed) (pull_request) Successful in 2m56s
Lint / lint (frontend) (pull_request) Successful in 3m9s
Lint / lint (frontend-shared) (pull_request) Successful in 2m51s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m51s
Lint / lint (misskey-js) (pull_request) Successful in 2m49s
Lint / lint (misskey-reversi) (pull_request) Successful in 3m0s
Lint / typecheck (backend) (pull_request) Successful in 2m48s
Lint / lint (sw) (pull_request) Successful in 2m50s
Lint / typecheck (misskey-js) (pull_request) Successful in 2m12s
Lint / typecheck (sw) (pull_request) Successful in 2m4s
Lint / pnpm_install (push) Successful in 1m56s
Publish Docker image / Build (push) Successful in 4m28s
Test (production install and build) / production (22.11.0) (push) Successful in 1m2s
Lint / lint (backend) (push) Successful in 2m8s
Test (backend) / unit (22.11.0) (push) Successful in 8m28s
Lint / lint (frontend) (push) Successful in 2m42s
Lint / lint (frontend-embed) (push) Successful in 2m19s
Lint / lint (frontend-shared) (push) Successful in 2m21s
Lint / lint (misskey-bubble-game) (push) Successful in 2m20s
Test (backend) / e2e (22.11.0) (push) Failing after 11m37s
Lint / lint (misskey-js) (push) Successful in 2m30s
Lint / lint (misskey-reversi) (push) Successful in 2m31s
Lint / lint (sw) (push) Successful in 2m28s
Lint / typecheck (misskey-js) (push) Successful in 1m37s
Lint / typecheck (backend) (push) Successful in 2m26s
Lint / typecheck (sw) (push) Successful in 1m52s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-19 10:57:45 -06:00
a236bbb8d4
CSP: allow blob images for cropping avatars
Some checks failed
Test (backend) / unit (22.11.0) (pull_request) Failing after 1m12s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m9s
Lint / pnpm_install (push) Successful in 1m31s
Publish Docker image / Build (push) Successful in 4m56s
Test (backend) / e2e (22.11.0) (pull_request) Successful in 12m9s
Test (production install and build) / production (22.11.0) (push) Successful in 1m7s
Test (backend) / unit (22.11.0) (push) Successful in 8m3s
Test (backend) / e2e (22.11.0) (push) Successful in 12m2s
Lint / lint (frontend) (pull_request) Successful in 2m50s
Lint / lint (backend) (pull_request) Successful in 2m51s
Lint / lint (frontend-embed) (pull_request) Successful in 2m47s
Lint / lint (frontend-shared) (pull_request) Successful in 2m45s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m44s
Lint / lint (misskey-js) (pull_request) Successful in 2m52s
Lint / lint (sw) (pull_request) Successful in 2m45s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m47s
Lint / typecheck (backend) (pull_request) Successful in 2m41s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m45s
Lint / typecheck (sw) (pull_request) Successful in 1m56s
Lint / lint (backend) (push) Successful in 2m43s
Lint / lint (frontend-embed) (push) Successful in 2m41s
Lint / lint (frontend) (push) Successful in 2m53s
Lint / lint (frontend-shared) (push) Successful in 2m46s
Lint / lint (misskey-bubble-game) (push) Successful in 2m44s
Lint / lint (misskey-js) (push) Successful in 2m42s
Lint / lint (misskey-reversi) (push) Successful in 2m33s
Lint / typecheck (backend) (push) Successful in 2m19s
Lint / lint (sw) (push) Successful in 2m44s
Lint / typecheck (misskey-js) (push) Successful in 1m39s
Lint / typecheck (sw) (push) Failing after 1m23s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-19 06:17:23 -06:00
zawa-ch.
763c708253
Fix(backend): アカウント削除のモデレーションログが動作していないのを修正 (#14996) (#14997)
* アカウント削除のモデレーションログが動作していないのを修正

* update CHANGELOG
2024-11-19 21:12:40 +09:00
3d3bfad5d0
fixup! more path sanitization
All checks were successful
Lint / pnpm_install (push) Successful in 1m58s
Publish Docker image / Build (push) Successful in 5m21s
Test (production install and build) / production (22.11.0) (push) Successful in 1m5s
Lint / lint (backend) (push) Successful in 2m14s
Test (backend) / unit (22.11.0) (push) Successful in 9m27s
Lint / lint (frontend) (push) Successful in 2m37s
Lint / lint (frontend-embed) (push) Successful in 2m18s
Lint / lint (frontend-shared) (push) Successful in 2m23s
Lint / lint (misskey-bubble-game) (push) Successful in 2m20s
Test (backend) / e2e (22.11.0) (push) Successful in 12m58s
Lint / lint (misskey-js) (push) Successful in 2m34s
Lint / lint (misskey-reversi) (push) Successful in 2m35s
Lint / lint (sw) (push) Successful in 2m19s
Lint / typecheck (misskey-js) (push) Successful in 1m37s
Lint / typecheck (backend) (push) Successful in 2m29s
Lint / typecheck (sw) (push) Successful in 1m38s
2024-11-19 03:15:48 -06:00
8a26ab9fb5
2024.11.0-yumechinokuni.5
All checks were successful
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m5s
Test (backend) / unit (22.11.0) (pull_request) Successful in 9m8s
Publish Docker image / Build (push) Successful in 4m37s
Lint / pnpm_install (push) Successful in 1m25s
Test (backend) / e2e (22.11.0) (pull_request) Successful in 11m50s
Test (production install and build) / production (22.11.0) (push) Successful in 1m1s
Lint / lint (backend) (pull_request) Successful in 1m56s
Test (backend) / unit (22.11.0) (push) Successful in 8m17s
Lint / lint (frontend) (pull_request) Successful in 2m13s
Lint / lint (frontend-embed) (pull_request) Successful in 2m30s
Lint / lint (frontend-shared) (pull_request) Successful in 2m19s
Test (backend) / e2e (22.11.0) (push) Successful in 12m12s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m39s
Lint / lint (misskey-js) (pull_request) Successful in 2m37s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m25s
Lint / typecheck (backend) (pull_request) Successful in 2m20s
Lint / lint (sw) (pull_request) Successful in 2m37s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m34s
Lint / typecheck (sw) (pull_request) Successful in 1m51s
Lint / lint (backend) (push) Successful in 2m26s
Lint / lint (frontend) (push) Successful in 2m37s
Lint / lint (frontend-embed) (push) Successful in 2m15s
Lint / lint (frontend-shared) (push) Successful in 2m26s
Lint / lint (misskey-bubble-game) (push) Successful in 2m16s
Lint / lint (misskey-js) (push) Successful in 2m22s
Lint / lint (misskey-reversi) (push) Successful in 2m21s
Lint / lint (sw) (push) Successful in 2m22s
Lint / typecheck (backend) (push) Successful in 2m20s
Lint / typecheck (misskey-js) (push) Successful in 1m33s
Lint / typecheck (sw) (push) Successful in 1m34s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-19 01:41:59 -06:00
fe3fd951ed
Merge tag '2024.11.0-alpha.2' into develop
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-19 01:37:57 -06:00
5673f0fff6 Merge pull request 'Sync upstream/develop' (#29) from incoming into develop
Some checks failed
Lint / lint (frontend-embed) (push) Blocked by required conditions
Lint / lint (frontend-shared) (push) Blocked by required conditions
Lint / lint (misskey-bubble-game) (push) Blocked by required conditions
Lint / lint (misskey-js) (push) Blocked by required conditions
Lint / lint (misskey-reversi) (push) Blocked by required conditions
Lint / lint (sw) (push) Blocked by required conditions
Lint / typecheck (backend) (push) Blocked by required conditions
Lint / typecheck (misskey-js) (push) Blocked by required conditions
Lint / typecheck (sw) (push) Blocked by required conditions
Lint / pnpm_install (push) Successful in 2m9s
Publish Docker image / Build (push) Successful in 4m35s
Test (production install and build) / production (22.11.0) (push) Successful in 1m7s
Lint / lint (backend) (push) Successful in 2m15s
Lint / lint (frontend) (push) Has been cancelled
Test (backend) / e2e (22.11.0) (push) Has been cancelled
Test (backend) / unit (22.11.0) (push) Has been cancelled
Reviewed-on: #29
2024-11-19 01:34:05 -06:00
ccf81b9398
filter out duplicate events
All checks were successful
Test (production install and build) / production (22.11.0) (push) Successful in 1m27s
Publish Docker image / Build (push) Successful in 4m45s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-19 01:18:31 -06:00
github-actions[bot]
6c5d3113c6 Bump version to 2024.11.0-alpha.2
All checks were successful
API report (misskey.js) / report (push) Successful in 1m30s
2024-11-19 03:56:50 +00:00
syuilo
968f595606
New Crowdin updates (#14965)
* 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 (Catalan)

* New translations ja-jp.yml (German)

* New translations ja-jp.yml (German)

* New translations ja-jp.yml (German)

* New translations ja-jp.yml (Swedish)

* New translations ja-jp.yml (English)

* New translations ja-jp.yml (Catalan)

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

* New translations ja-jp.yml (Korean)

* New translations ja-jp.yml (German)

* New translations ja-jp.yml (Swedish)

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

* New translations ja-jp.yml (Romanian)

* New translations ja-jp.yml (French)

* New translations ja-jp.yml (Spanish)

* New translations ja-jp.yml (Arabic)

* New translations ja-jp.yml (Czech)

* New translations ja-jp.yml (Italian)

* New translations ja-jp.yml (Dutch)

* New translations ja-jp.yml (Norwegian)

* New translations ja-jp.yml (Polish)

* New translations ja-jp.yml (Portuguese)

* New translations ja-jp.yml (Russian)

* New translations ja-jp.yml (Slovak)

* New translations ja-jp.yml (Turkish)

* New translations ja-jp.yml (Ukrainian)

* New translations ja-jp.yml (Vietnamese)

* New translations ja-jp.yml (Indonesian)

* New translations ja-jp.yml (Bengali)

* New translations ja-jp.yml (Thai)

* New translations ja-jp.yml (Uzbek)

* New translations ja-jp.yml (Lao)

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

* New translations ja-jp.yml (Korean (Gyeongsang))

* 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 (Chinese Simplified)

* New translations ja-jp.yml (German)

* New translations ja-jp.yml (English)

* New translations ja-jp.yml (German)

* New translations ja-jp.yml (German)

* New translations ja-jp.yml (Polish)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Swedish)

* New translations ja-jp.yml (French)

* New translations ja-jp.yml (French)

* New translations ja-jp.yml (French)

* New translations ja-jp.yml (French)

* New translations ja-jp.yml (Swedish)

* New translations ja-jp.yml (Korean)

* New translations ja-jp.yml (Chinese Simplified)
2024-11-19 12:50:04 +09:00
おさむのひと
7b9c884a5d
refactor(backend): SystemWebhookで送信されるペイロードの型を追加 (#14980) 2024-11-19 10:41:39 +09:00
FineArchs
c271534aba
リノートメニューに「リノートの詳細」を追加 (#14985)
* add renote-detail menu

* changelog

* Apply suggestions from code review

Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>

* Update CHANGELOG.md

---------

Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>
2024-11-19 10:34:33 +09:00
饺子w (Yumechi)
e800c0f85a
fix(backend): お知らせ作成時に画像URL入力欄を空欄に変更できないのを修正 (#14990)
* fix(backend): アナウンスメントを作成ときに画像URLを後悔できないのを修正

Signed-off-by: eternal-flame-AD <yume@yumechi.jp>

* Update CHANGELOG.md

Co-authored-by: おさむのひと <46447427+samunohito@users.noreply.github.com>

---------

Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
Co-authored-by: おさむのひと <46447427+samunohito@users.noreply.github.com>
2024-11-19 10:29:42 +09:00
かっこかり
81348f1277
fix(frontend): TypeScriptの型チェック対象ファイルを限定して高速化するように (#14994)
* fix frontend tsconfig includes

* fix frontend-embed tsconfig includes

* fix eslint in frontend / frontend-embed

* Update Changelog

---------

Co-authored-by: Hazelnoot <acomputerdog@gmail.com>
2024-11-19 10:22:47 +09:00
1025d5a4c4 Merge remote-tracking branch 'upstream/develop' into incoming
All checks were successful
Lint / pnpm_install (pull_request) Successful in 1m52s
Publish Docker image / Build (pull_request) Successful in 4m19s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m1s
Lint / lint (backend) (pull_request) Successful in 2m15s
Test (backend) / unit (22.11.0) (pull_request) Successful in 8m24s
Lint / lint (frontend) (pull_request) Successful in 2m40s
Lint / lint (frontend-embed) (pull_request) Successful in 2m15s
Lint / lint (frontend-shared) (pull_request) Successful in 2m16s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m27s
Test (backend) / e2e (22.11.0) (pull_request) Successful in 11m55s
Lint / lint (misskey-js) (pull_request) Successful in 2m39s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m28s
Lint / lint (sw) (pull_request) Successful in 2m26s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m38s
Lint / typecheck (backend) (pull_request) Successful in 2m25s
Lint / typecheck (sw) (pull_request) Successful in 1m40s
2024-11-18 18:44:41 -06:00
f0c0b75285
notifications metrics
All checks were successful
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m9s
Test (backend) / unit (22.11.0) (pull_request) Successful in 9m20s
Publish Docker image / Build (push) Successful in 4m48s
Lint / pnpm_install (push) Successful in 1m42s
Test (backend) / e2e (22.11.0) (pull_request) Successful in 12m21s
Test (production install and build) / production (22.11.0) (push) Successful in 1m4s
Test (backend) / unit (22.11.0) (push) Successful in 9m3s
Lint / lint (backend) (pull_request) Successful in 2m36s
Lint / lint (frontend) (pull_request) Successful in 2m31s
Lint / lint (frontend-embed) (pull_request) Successful in 2m32s
Test (backend) / e2e (22.11.0) (push) Successful in 12m43s
Lint / lint (frontend-shared) (pull_request) Successful in 2m45s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m45s
Lint / lint (misskey-js) (pull_request) Successful in 2m43s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m45s
Lint / lint (sw) (pull_request) Successful in 2m26s
Lint / typecheck (backend) (pull_request) Successful in 2m30s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m58s
Lint / typecheck (sw) (pull_request) Successful in 1m43s
Lint / lint (backend) (push) Successful in 2m44s
Lint / lint (frontend) (push) Successful in 2m36s
Lint / lint (frontend-embed) (push) Successful in 2m24s
Lint / lint (frontend-shared) (push) Successful in 2m45s
Lint / lint (misskey-bubble-game) (push) Successful in 2m34s
Lint / lint (misskey-js) (push) Successful in 2m33s
Lint / lint (misskey-reversi) (push) Successful in 2m30s
Lint / lint (sw) (push) Successful in 2m31s
Lint / typecheck (backend) (push) Successful in 2m25s
Lint / typecheck (misskey-js) (push) Successful in 1m44s
Lint / typecheck (sw) (push) Successful in 1m44s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-18 13:48:45 -06:00
4b6ec86a00
backend: check AP fetch URL
All checks were successful
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m6s
Test (backend) / unit (22.11.0) (pull_request) Successful in 9m5s
Lint / pnpm_install (push) Successful in 1m28s
Publish Docker image / Build (push) Successful in 4m56s
Test (backend) / e2e (22.11.0) (pull_request) Successful in 12m34s
Test (production install and build) / production (22.11.0) (push) Successful in 1m6s
Lint / lint (backend) (pull_request) Successful in 2m18s
Test (backend) / unit (22.11.0) (push) Successful in 8m20s
Lint / lint (frontend) (pull_request) Successful in 2m26s
Lint / lint (frontend-embed) (pull_request) Successful in 2m26s
Lint / lint (frontend-shared) (pull_request) Successful in 2m32s
Test (backend) / e2e (22.11.0) (push) Successful in 12m9s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m46s
Lint / lint (misskey-js) (pull_request) Successful in 2m39s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m30s
Lint / lint (sw) (pull_request) Successful in 2m33s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m42s
Lint / typecheck (backend) (pull_request) Successful in 2m43s
Lint / typecheck (sw) (pull_request) Successful in 1m45s
Lint / lint (backend) (push) Successful in 2m44s
Lint / lint (frontend) (push) Successful in 2m43s
Lint / lint (frontend-embed) (push) Successful in 2m36s
Lint / lint (frontend-shared) (push) Successful in 3m2s
Lint / lint (misskey-bubble-game) (push) Successful in 2m49s
Lint / lint (misskey-js) (push) Successful in 2m48s
Lint / lint (misskey-reversi) (push) Successful in 2m51s
Lint / lint (sw) (push) Successful in 2m50s
Lint / typecheck (backend) (push) Successful in 2m50s
Lint / typecheck (misskey-js) (push) Successful in 2m7s
Lint / typecheck (sw) (push) Successful in 2m22s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-18 12:54:46 -06:00
677a2f0770
update ts model of drive file comment
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-18 11:55:10 -06:00
fly_mc
9899b3cc38 backend: change HASHTAG_RANKING_WINDOW
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-18 11:52:21 -06:00
6fab3e6087
Fix usability issues for queue and inbox error metrics
All checks were successful
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m7s
Test (backend) / unit (22.11.0) (pull_request) Successful in 8m35s
Test (backend) / e2e (22.11.0) (pull_request) Successful in 12m9s
Lint / lint (backend) (pull_request) Successful in 2m47s
Lint / lint (frontend) (pull_request) Successful in 2m39s
Lint / lint (frontend-embed) (pull_request) Successful in 2m40s
Lint / lint (frontend-shared) (pull_request) Successful in 2m38s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m36s
Lint / lint (misskey-js) (pull_request) Successful in 2m37s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m41s
Lint / lint (sw) (pull_request) Successful in 2m43s
Lint / typecheck (backend) (pull_request) Successful in 2m25s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m42s
Lint / typecheck (sw) (pull_request) Successful in 1m34s
Lint / pnpm_install (push) Successful in 2m12s
Publish Docker image / Build (push) Successful in 4m38s
Test (production install and build) / production (22.11.0) (push) Successful in 1m5s
Lint / lint (backend) (push) Successful in 2m19s
Test (backend) / unit (22.11.0) (push) Successful in 9m4s
Lint / lint (frontend) (push) Successful in 2m29s
Lint / lint (frontend-embed) (push) Successful in 2m29s
Lint / lint (frontend-shared) (push) Successful in 2m32s
Lint / lint (misskey-bubble-game) (push) Successful in 2m32s
Test (backend) / e2e (22.11.0) (push) Successful in 12m35s
Lint / lint (misskey-js) (push) Successful in 2m43s
Lint / lint (misskey-reversi) (push) Successful in 2m43s
Lint / lint (sw) (push) Successful in 2m37s
Lint / typecheck (backend) (push) Successful in 2m22s
Lint / typecheck (misskey-js) (push) Successful in 1m43s
Lint / typecheck (sw) (push) Successful in 1m44s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-18 07:12:12 -06:00
31f19bd686
csp: add Bull Dashboard to whitelist
All checks were successful
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m8s
Test (backend) / unit (22.11.0) (pull_request) Successful in 8m31s
Test (backend) / e2e (22.11.0) (pull_request) Successful in 12m13s
Lint / lint (backend) (pull_request) Successful in 2m34s
Lint / lint (frontend) (pull_request) Successful in 2m27s
Lint / lint (frontend-embed) (pull_request) Successful in 2m26s
Lint / lint (frontend-shared) (pull_request) Successful in 2m33s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m34s
Lint / lint (misskey-js) (pull_request) Successful in 2m20s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m33s
Lint / lint (sw) (pull_request) Successful in 2m33s
Lint / typecheck (backend) (pull_request) Successful in 2m26s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m42s
Lint / typecheck (sw) (pull_request) Successful in 1m42s
Lint / pnpm_install (push) Successful in 2m10s
Publish Docker image / Build (push) Successful in 4m41s
Test (production install and build) / production (22.11.0) (push) Successful in 1m6s
Lint / lint (backend) (push) Successful in 2m17s
Test (backend) / unit (22.11.0) (push) Successful in 9m10s
Lint / lint (frontend) (push) Successful in 2m25s
Lint / lint (frontend-embed) (push) Successful in 2m30s
Lint / lint (frontend-shared) (push) Successful in 2m33s
Lint / lint (misskey-bubble-game) (push) Successful in 2m48s
Test (backend) / e2e (22.11.0) (push) Successful in 12m22s
Lint / lint (misskey-js) (push) Successful in 2m44s
Lint / lint (sw) (push) Successful in 2m49s
Lint / lint (misskey-reversi) (push) Successful in 2m51s
Lint / typecheck (backend) (push) Successful in 2m51s
Lint / typecheck (misskey-js) (push) Successful in 1m40s
Lint / typecheck (sw) (push) Successful in 1m52s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-18 03:45:47 -06:00
b78edccd19 Fix permetheus query fingerprinting (#24)
Some checks failed
Publish Docker image / Build (push) Successful in 4m42s
Lint / pnpm_install (push) Successful in 1m27s
Test (production install and build) / production (22.11.0) (push) Successful in 1m6s
Test (backend) / unit (22.11.0) (push) Successful in 8m38s
Test (backend) / e2e (22.11.0) (push) Failing after 11m33s
Lint / lint (backend) (push) Successful in 2m38s
Lint / lint (frontend) (push) Successful in 2m32s
Lint / lint (frontend-embed) (push) Successful in 2m33s
Lint / lint (frontend-shared) (push) Successful in 2m30s
Lint / lint (misskey-bubble-game) (push) Successful in 2m29s
Lint / lint (misskey-js) (push) Successful in 2m28s
Lint / lint (misskey-reversi) (push) Successful in 2m25s
Lint / lint (sw) (push) Successful in 2m27s
Lint / typecheck (backend) (push) Successful in 2m26s
Lint / typecheck (misskey-js) (push) Successful in 1m40s
Lint / typecheck (sw) (push) Successful in 1m44s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>

<!-- ℹ お読みください / README
PRありがとうございます! PRを作成する前に、コントリビューションガイドをご確認ください:
Thank you for your PR! Before creating a PR, please check the contribution guide:
https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md
-->

## What
<!-- このPRで何をしたのか? どう変わるのか? -->
<!-- What did you do with this PR? How will it change things? -->

## Why
<!-- なぜそうするのか? どういう意図なのか? 何が困っているのか? -->
<!-- Why do you do it? What are your intentions? What is the problem? -->

## Additional info (optional)
<!-- テスト観点など -->
<!-- Test perspective, etc -->

## Checklist
- [ ] Read the [contribution guide](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)
- [ ] Test working in a local environment
- [ ] (If needed) Add story of storybook
- [ ] (If needed) Update CHANGELOG.md
- [ ] (If possible) Add tests

Reviewed-on: #24
Co-authored-by: eternal-flame-AD <yume@yumechi.jp>
Co-committed-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-18 03:29:53 -06:00
b805239b39 Merge pull request 'reduce buckets for incoming ap' (#23) from develop into master
All checks were successful
Publish Docker image / Build (push) Successful in 4m33s
Lint / pnpm_install (push) Successful in 1m28s
Test (production install and build) / production (22.11.0) (push) Successful in 1m6s
Test (backend) / unit (22.11.0) (push) Successful in 8m37s
Test (backend) / e2e (22.11.0) (push) Successful in 11m47s
Lint / lint (backend) (push) Successful in 2m43s
Lint / lint (frontend-embed) (push) Successful in 2m33s
Lint / lint (frontend) (push) Successful in 3m1s
Lint / lint (frontend-shared) (push) Successful in 2m28s
Lint / lint (misskey-bubble-game) (push) Successful in 2m45s
Lint / lint (misskey-js) (push) Successful in 2m45s
Lint / lint (misskey-reversi) (push) Successful in 2m43s
Lint / typecheck (misskey-js) (push) Successful in 1m32s
Lint / typecheck (backend) (push) Successful in 2m42s
Lint / lint (sw) (push) Successful in 3m9s
Lint / typecheck (sw) (push) Successful in 1m35s
Reviewed-on: #23
2024-11-17 21:54:18 -06:00
f9167b8b86
reduce buckets for incoming ap
All checks were successful
Test (production install and build) / production (22.11.0) (push) Successful in 1m3s
Test (backend) / unit (22.11.0) (push) Successful in 8m38s
Publish Docker image / Build (pull_request) Successful in 4m25s
Lint / pnpm_install (pull_request) Successful in 1m36s
Test (backend) / e2e (22.11.0) (push) Successful in 11m20s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m2s
Test (backend) / unit (22.11.0) (pull_request) Successful in 8m0s
Test (backend) / e2e (22.11.0) (pull_request) Successful in 11m39s
Lint / lint (backend) (push) Successful in 2m19s
Lint / lint (frontend) (push) Successful in 2m25s
Lint / lint (frontend-shared) (push) Successful in 2m35s
Lint / lint (frontend-embed) (push) Successful in 2m38s
Lint / lint (misskey-bubble-game) (push) Successful in 2m27s
Lint / lint (misskey-js) (push) Successful in 2m43s
Lint / lint (misskey-reversi) (push) Successful in 2m27s
Lint / typecheck (misskey-js) (push) Successful in 1m34s
Lint / lint (sw) (push) Successful in 2m37s
Lint / typecheck (backend) (push) Successful in 2m32s
Lint / typecheck (sw) (push) Successful in 1m48s
Lint / lint (backend) (pull_request) Successful in 3m7s
Lint / lint (frontend) (pull_request) Successful in 2m54s
Lint / lint (frontend-embed) (pull_request) Successful in 2m40s
Lint / lint (frontend-shared) (pull_request) Successful in 2m32s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m43s
Lint / lint (misskey-js) (pull_request) Successful in 2m25s
Lint / lint (sw) (pull_request) Successful in 2m49s
Lint / lint (misskey-reversi) (pull_request) Successful in 3m2s
Lint / typecheck (backend) (pull_request) Successful in 2m17s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m39s
Lint / typecheck (sw) (pull_request) Successful in 1m52s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-17 21:53:54 -06:00
おさむのひと
0df6c79172
enhance(frontend): デッキ表示時にサイドバーを展開・折りたたみできるように (#14983)
* enhance(frontend): デッキ表示時にサイドバーを展開・折りたたみできるように

* wip

* wip

* Update navbar.vue

* ✌️

* Update CHANGELOG.md

* 🎨

---------

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2024-11-18 10:36:51 +09:00
d7080be847 Merge pull request 'prometheus - stage 2 workers' (#22) from develop into master
Some checks failed
Publish Docker image / Build (push) Successful in 4m35s
Lint / pnpm_install (push) Successful in 1m38s
Test (production install and build) / production (22.11.0) (push) Successful in 1m1s
Test (backend) / unit (22.11.0) (push) Successful in 7m45s
Test (backend) / e2e (22.11.0) (push) Successful in 11m38s
Lint / lint (backend) (push) Successful in 2m32s
Lint / lint (frontend-embed) (push) Successful in 2m38s
Lint / lint (frontend) (push) Successful in 2m52s
Lint / lint (misskey-bubble-game) (push) Failing after 1m42s
Lint / lint (frontend-shared) (push) Successful in 2m49s
Lint / lint (misskey-js) (push) Successful in 2m27s
Lint / lint (misskey-reversi) (push) Successful in 2m23s
Lint / lint (sw) (push) Successful in 2m23s
Lint / typecheck (backend) (push) Successful in 2m9s
Lint / typecheck (misskey-js) (push) Successful in 1m32s
Lint / typecheck (sw) (push) Successful in 1m37s
Reviewed-on: #22
2024-11-17 19:07:22 -06:00
935efb5bf2
prometheus - stage 2 workers
Some checks failed
Test (production install and build) / production (22.11.0) (push) Successful in 1m3s
Lint / lint (backend) (push) Successful in 2m21s
Test (backend) / unit (22.11.0) (push) Successful in 8m52s
Lint / lint (frontend) (push) Successful in 2m30s
Lint / lint (frontend-embed) (push) Successful in 2m27s
Lint / lint (misskey-bubble-game) (push) Successful in 2m33s
Lint / lint (frontend-shared) (push) Successful in 2m46s
Test (backend) / e2e (22.11.0) (push) Successful in 11m57s
Lint / lint (misskey-js) (push) Successful in 2m38s
Lint / lint (sw) (push) Successful in 2m47s
Lint / lint (misskey-reversi) (push) Successful in 2m59s
Lint / typecheck (misskey-js) (push) Successful in 1m42s
Lint / typecheck (sw) (push) Successful in 1m54s
Lint / typecheck (backend) (push) Successful in 2m45s
Lint / pnpm_install (pull_request) Successful in 2m11s
Publish Docker image / Build (pull_request) Successful in 4m43s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m2s
Test (backend) / unit (22.11.0) (pull_request) Successful in 8m45s
Test (backend) / e2e (22.11.0) (pull_request) Failing after 11m13s
Lint / lint (backend) (pull_request) Successful in 2m6s
Lint / lint (frontend) (pull_request) Successful in 2m19s
Lint / lint (frontend-embed) (pull_request) Successful in 2m14s
Lint / lint (frontend-shared) (pull_request) Successful in 2m27s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m36s
Lint / lint (misskey-js) (pull_request) Successful in 2m31s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m50s
Lint / lint (sw) (pull_request) Successful in 2m39s
Lint / typecheck (backend) (pull_request) Successful in 2m42s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m41s
Lint / typecheck (sw) (pull_request) Successful in 1m52s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-17 18:47:56 -06:00
c22160aa90 Merge pull request 'more path sanitization' (#21) from develop into master
Some checks failed
Publish Docker image / Build (push) Successful in 4m42s
Lint / pnpm_install (push) Successful in 1m43s
Test (production install and build) / production (22.11.0) (push) Successful in 1m8s
Test (backend) / unit (22.11.0) (push) Successful in 8m22s
Test (backend) / e2e (22.11.0) (push) Failing after 12m4s
Lint / lint (backend) (push) Successful in 2m37s
Lint / lint (frontend) (push) Successful in 2m34s
Lint / lint (frontend-embed) (push) Successful in 2m33s
Lint / lint (frontend-shared) (push) Successful in 2m40s
Lint / lint (misskey-bubble-game) (push) Successful in 2m29s
Lint / lint (misskey-js) (push) Successful in 2m27s
Lint / lint (misskey-reversi) (push) Successful in 2m41s
Lint / lint (sw) (push) Successful in 2m40s
Lint / typecheck (backend) (push) Successful in 2m23s
Lint / typecheck (misskey-js) (push) Successful in 1m35s
Lint / typecheck (sw) (push) Successful in 1m41s
Reviewed-on: #21
2024-11-17 12:58:51 -06:00
3906efa8d5
more path sanitization
All checks were successful
Test (production install and build) / production (22.11.0) (push) Successful in 1m6s
Test (backend) / unit (22.11.0) (push) Successful in 8m54s
Publish Docker image / Build (pull_request) Successful in 4m37s
Lint / pnpm_install (pull_request) Successful in 1m45s
Test (backend) / e2e (22.11.0) (push) Successful in 11m52s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m5s
Test (backend) / unit (22.11.0) (pull_request) Successful in 8m25s
Test (backend) / e2e (22.11.0) (pull_request) Successful in 12m16s
Lint / lint (backend) (push) Successful in 2m19s
Lint / lint (frontend) (push) Successful in 2m26s
Lint / lint (frontend-embed) (push) Successful in 2m27s
Lint / lint (frontend-shared) (push) Successful in 2m19s
Lint / lint (misskey-bubble-game) (push) Successful in 2m28s
Lint / lint (misskey-js) (push) Successful in 2m34s
Lint / lint (misskey-reversi) (push) Successful in 2m32s
Lint / lint (sw) (push) Successful in 2m31s
Lint / typecheck (backend) (push) Successful in 2m29s
Lint / typecheck (misskey-js) (push) Successful in 1m39s
Lint / typecheck (sw) (push) Successful in 1m42s
Lint / lint (backend) (pull_request) Successful in 2m33s
Lint / lint (frontend) (pull_request) Successful in 2m27s
Lint / lint (frontend-embed) (pull_request) Successful in 2m28s
Lint / lint (frontend-shared) (pull_request) Successful in 2m27s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m28s
Lint / lint (misskey-js) (pull_request) Successful in 2m30s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m30s
Lint / lint (sw) (pull_request) Successful in 2m31s
Lint / typecheck (backend) (pull_request) Successful in 2m28s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m39s
Lint / typecheck (sw) (pull_request) Successful in 1m44s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-17 12:57:49 -06:00
577a7e5e96 Merge pull request 'prometheus' (#20) from develop into master
Some checks failed
Lint / pnpm_install (push) Successful in 2m5s
Publish Docker image / Build (push) Successful in 4m52s
Test (production install and build) / production (22.11.0) (push) Successful in 1m13s
Lint / lint (backend) (push) Successful in 2m19s
Test (backend) / unit (22.11.0) (push) Successful in 9m25s
Lint / lint (frontend) (push) Successful in 2m27s
Lint / lint (frontend-embed) (push) Successful in 2m25s
Lint / lint (frontend-shared) (push) Successful in 2m23s
Lint / lint (misskey-bubble-game) (push) Successful in 2m36s
Test (backend) / e2e (22.11.0) (push) Failing after 12m25s
Lint / lint (misskey-js) (push) Successful in 2m35s
Lint / lint (misskey-reversi) (push) Successful in 2m37s
Lint / lint (sw) (push) Successful in 2m48s
Lint / typecheck (backend) (push) Has been cancelled
Lint / typecheck (sw) (push) Has been cancelled
Lint / typecheck (misskey-js) (push) Has been cancelled
Reviewed-on: #20
2024-11-17 12:40:23 -06:00
109d8f8008
don't log metrics for postgres in testing
All checks were successful
Test (production install and build) / production (22.11.0) (push) Successful in 1m53s
Lint / pnpm_install (pull_request) Successful in 1m36s
Publish Docker image / Build (push) Successful in 5m12s
Publish Docker image / Build (pull_request) Successful in 4m28s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m13s
Lint / lint (backend) (pull_request) Successful in 2m47s
Test (backend) / unit (22.11.0) (pull_request) Successful in 8m38s
Lint / lint (frontend-embed) (pull_request) Successful in 2m25s
Test (backend) / e2e (22.11.0) (pull_request) Successful in 11m35s
Lint / lint (frontend-shared) (pull_request) Successful in 2m28s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m37s
Lint / lint (frontend) (pull_request) Successful in 9m50s
Lint / lint (misskey-js) (pull_request) Successful in 2m27s
Lint / lint (sw) (pull_request) Successful in 2m45s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m58s
Lint / typecheck (backend) (pull_request) Successful in 2m42s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m49s
Lint / typecheck (sw) (pull_request) Successful in 1m59s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-17 11:58:15 -06:00
4d44adfaa9
prometheus - stage 1 deployment
Some checks failed
Test (production install and build) / production (22.11.0) (push) Successful in 1m25s
Lint / lint (backend) (push) Successful in 2m7s
Lint / lint (frontend) (push) Successful in 2m11s
Lint / lint (frontend-embed) (push) Successful in 2m9s
Lint / lint (frontend-shared) (push) Successful in 2m19s
Lint / lint (misskey-bubble-game) (push) Successful in 2m21s
Lint / lint (misskey-reversi) (push) Successful in 2m33s
Lint / lint (misskey-js) (push) Successful in 2m44s
Lint / typecheck (misskey-js) (push) Successful in 1m23s
Lint / lint (sw) (push) Successful in 2m21s
Lint / typecheck (backend) (push) Successful in 2m3s
Lint / typecheck (sw) (push) Successful in 1m23s
Lint / pnpm_install (pull_request) Successful in 1m35s
Publish Docker image / Build (pull_request) Successful in 4m59s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m32s
Test (backend) / e2e (22.11.0) (push) Failing after 1m56s
Lint / lint (backend) (pull_request) Successful in 2m0s
Lint / lint (frontend) (pull_request) Successful in 2m16s
Lint / lint (frontend-embed) (pull_request) Successful in 2m3s
Lint / lint (frontend-shared) (pull_request) Successful in 2m9s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m7s
Test (backend) / unit (22.11.0) (push) Failing after 10m2s
Lint / lint (misskey-js) (pull_request) Successful in 2m13s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m16s
Lint / lint (sw) (pull_request) Successful in 2m26s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m29s
Lint / typecheck (backend) (pull_request) Successful in 2m16s
Lint / typecheck (sw) (pull_request) Successful in 1m40s
Test (backend) / e2e (22.11.0) (pull_request) Failing after 2m5s
Test (backend) / unit (22.11.0) (pull_request) Failing after 7m45s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-17 04:44:39 -06:00
syuilo
eed45c7915
Update SECURITY.md 2024-11-17 17:35:27 +09:00
syuilo
42f9586fc6
Update CONTRIBUTING.md 2024-11-17 17:33:50 +09:00
syuilo
032dfc782d
Update CONTRIBUTING.md 2024-11-17 17:33:12 +09:00
syuilo
00b8d0c072
Update CONTRIBUTING.md 2024-11-17 17:32:28 +09:00
syuilo
9aebf0c168
Update CHANGELOG.md 2024-11-17 14:15:38 +09:00
syuilo
a730045bdd
Update CHANGELOG.md 2024-11-17 12:44:44 +09:00
13e50cd8d9
fix(backend): アナウンスメントを作成ときに画像URLを後悔できないのを修正
All checks were successful
Lint / pnpm_install (push) Successful in 2m0s
Publish Docker image / Build (push) Successful in 4m48s
Test (production install and build) / production (22.11.0) (push) Successful in 1m3s
Lint / lint (backend) (push) Successful in 2m9s
Test (backend) / unit (22.11.0) (push) Successful in 8m6s
Lint / lint (frontend) (push) Successful in 2m19s
Lint / lint (frontend-embed) (push) Successful in 2m12s
Lint / lint (frontend-shared) (push) Successful in 2m15s
Lint / lint (misskey-bubble-game) (push) Successful in 2m14s
Test (backend) / e2e (22.11.0) (push) Successful in 11m38s
Lint / lint (misskey-js) (push) Successful in 2m30s
Lint / lint (misskey-reversi) (push) Successful in 2m20s
Lint / lint (sw) (push) Successful in 2m30s
Lint / typecheck (misskey-js) (push) Successful in 1m37s
Lint / typecheck (backend) (push) Successful in 2m11s
Lint / typecheck (sw) (push) Successful in 1m33s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-16 17:37:26 -06:00
a95e3716ff
2024.11.0-yumechinokuni.4p1
Some checks failed
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m24s
Lint / lint (backend) (pull_request) Successful in 2m25s
Lint / lint (frontend) (pull_request) Successful in 2m27s
Test (backend) / unit (22.11.0) (pull_request) Successful in 9m22s
Lint / lint (frontend-embed) (pull_request) Successful in 2m26s
Lint / lint (frontend-shared) (pull_request) Successful in 2m22s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m30s
Lint / lint (misskey-js) (pull_request) Successful in 2m32s
Test (backend) / e2e (22.11.0) (pull_request) Failing after 13m39s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m36s
Lint / lint (sw) (pull_request) Successful in 2m43s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m50s
Lint / typecheck (backend) (pull_request) Successful in 2m42s
Lint / typecheck (sw) (pull_request) Successful in 1m52s
Lint / pnpm_install (push) Successful in 2m18s
Publish Docker image / Build (push) Successful in 5m5s
Test (production install and build) / production (22.11.0) (push) Successful in 1m10s
Lint / lint (backend) (push) Successful in 2m25s
Test (backend) / unit (22.11.0) (push) Successful in 10m20s
Lint / lint (frontend) (push) Successful in 2m36s
Lint / lint (frontend-embed) (push) Successful in 2m40s
Lint / lint (frontend-shared) (push) Successful in 2m39s
Lint / lint (misskey-bubble-game) (push) Successful in 2m38s
Test (backend) / e2e (22.11.0) (push) Successful in 13m53s
Lint / lint (misskey-js) (push) Successful in 2m57s
Lint / lint (misskey-reversi) (push) Successful in 2m40s
Lint / lint (sw) (push) Successful in 2m42s
Lint / typecheck (backend) (push) Successful in 2m38s
Lint / typecheck (misskey-js) (push) Successful in 1m42s
Lint / typecheck (sw) (push) Successful in 1m41s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-16 06:26:06 -06:00
1862b33aba
pgroonga CW search
All checks were successful
Lint / pnpm_install (push) Successful in 2m23s
Publish Docker image / Build (push) Successful in 5m4s
Lint / lint (backend) (push) Successful in 2m29s
Test (backend) / unit (22.11.0) (push) Successful in 9m49s
Lint / lint (frontend) (push) Successful in 2m35s
Lint / lint (frontend-embed) (push) Successful in 2m24s
Lint / lint (frontend-shared) (push) Successful in 2m40s
Lint / lint (misskey-bubble-game) (push) Successful in 2m29s
Lint / lint (misskey-js) (push) Successful in 2m41s
Test (backend) / e2e (22.11.0) (push) Successful in 13m29s
Lint / lint (misskey-reversi) (push) Successful in 2m51s
Lint / typecheck (backend) (push) Successful in 3m4s
Lint / lint (sw) (push) Successful in 3m10s
Lint / typecheck (misskey-js) (push) Successful in 1m46s
Test (production install and build) / production (22.11.0) (push) Successful in 1m24s
Lint / typecheck (sw) (push) Successful in 1m46s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-16 05:50:57 -06:00
syuilo
9614f74bf8 🎨 2024-11-16 20:24:31 +09:00
CDN
b3c2de2b26
fix(backend): fallback sharedInbox to null in ApPersonService (#14970) 2024-11-16 18:53:28 +09:00
syuilo
cf1b7c7064
add warning for open registration (#14963)
* wip

* wip

* Update ja-JP.yml

* Update index.d.ts

* ✌️
2024-11-16 17:22:34 +09:00
syuilo
2e0f3936a8 Update .gitignore 2024-11-16 15:32:51 +09:00
syuilo
459449864c 🎨 2024-11-16 10:16:11 +09:00
a6b90b14b6
set docker db shm_size
Some checks failed
Test (backend) / unit (22.11.0) (pull_request) Successful in 8m19s
Test (backend) / e2e (22.11.0) (pull_request) Successful in 11m15s
Lint / pnpm_install (pull_request) Successful in 1m14s
Lint / lint (backend) (pull_request) Successful in 2m24s
Lint / lint (frontend) (pull_request) Successful in 2m34s
Lint / lint (frontend-embed) (pull_request) Successful in 2m44s
Lint / lint (frontend-shared) (pull_request) Successful in 3m13s
Lint / lint (misskey-js) (pull_request) Successful in 2m49s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 3m1s
Lint / typecheck (backend) (pull_request) Successful in 2m15s
Lint / lint (sw) (pull_request) Successful in 2m47s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m50s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m29s
Lint / typecheck (sw) (pull_request) Successful in 1m25s
Lint / pnpm_install (push) Successful in 1m57s
Publish Docker image / Build (push) Successful in 5m26s
Test (production install and build) / production (22.11.0) (push) Successful in 1m5s
Lint / lint (backend) (push) Successful in 2m16s
Test (backend) / unit (22.11.0) (push) Successful in 9m11s
Lint / lint (frontend) (push) Successful in 2m29s
Lint / lint (frontend-embed) (push) Successful in 2m27s
Lint / lint (frontend-shared) (push) Successful in 2m28s
Lint / lint (misskey-bubble-game) (push) Successful in 2m27s
Test (backend) / e2e (22.11.0) (push) Failing after 12m38s
Lint / lint (misskey-js) (push) Successful in 2m40s
Lint / lint (sw) (push) Successful in 2m45s
Lint / lint (misskey-reversi) (push) Successful in 2m59s
Lint / typecheck (backend) (push) Successful in 2m46s
Lint / typecheck (misskey-js) (push) Successful in 1m46s
Lint / typecheck (sw) (push) Successful in 1m57s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-15 17:16:33 -06:00
c830e9ba0d
Revert "use execa 8.0.1"
Some checks failed
Test (production install and build) / production (22.11.0) (push) Successful in 1m59s
Lint / pnpm_install (push) Successful in 2m22s
Publish Docker image / Build (push) Successful in 5m29s
Lint / lint (backend) (push) Successful in 3m45s
Lint / lint (frontend-embed) (push) Successful in 3m4s
Lint / lint (misskey-bubble-game) (push) Failing after -4s
Lint / lint (misskey-js) (push) Failing after -4s
Lint / lint (misskey-reversi) (push) Failing after -3s
Lint / lint (sw) (push) Failing after 12m56s
Lint / lint (frontend-shared) (push) Failing after 15m37s
Lint / lint (frontend) (push) Failing after 19m30s
Lint / typecheck (misskey-js) (push) Successful in 2m14s
Lint / typecheck (sw) (push) Successful in 2m27s
Lint / typecheck (backend) (push) Successful in 2m53s
This reverts commit eef0c895bc. Cannot
reproduce original issue in question
2024-11-15 15:23:12 -06:00
d3674705a5 Merge remote-tracking branch 'upstream/develop' into develop 2024-11-15 15:22:22 -06:00
18c5d5cd02
add missing devDependencies
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-15 15:17:34 -06:00
237ac7cffc
cleanup metadata
Some checks failed
Test (production install and build) / production (22.11.0) (push) Successful in 1m40s
Lint / pnpm_install (push) Successful in 2m3s
Lint / lint (backend) (push) Successful in 2m27s
Publish Docker image / Build (push) Successful in 5m6s
Lint / lint (frontend) (push) Successful in 3m1s
Lint / lint (frontend-shared) (push) Successful in 2m46s
Lint / lint (misskey-bubble-game) (push) Successful in 2m58s
Lint / lint (frontend-embed) (push) Successful in 3m33s
Lint / lint (misskey-js) (push) Successful in 2m33s
Lint / lint (sw) (push) Successful in 2m36s
Lint / lint (misskey-reversi) (push) Successful in 2m49s
Lint / typecheck (sw) (push) Successful in 1m53s
Lint / typecheck (misskey-js) (push) Successful in 1m48s
Lint / typecheck (backend) (push) Failing after 18m3s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-15 14:37:13 -06:00
0ac3544a5c
Frontend: Stream再接続ロジックdata raceを修正
Some checks failed
Lint / pnpm_install (push) Successful in 1m38s
Test (production install and build) / production (22.11.0) (push) Successful in 1m46s
Lint / lint (backend) (push) Successful in 2m13s
Lint / lint (frontend) (push) Successful in 2m19s
Publish Docker image / Build (push) Successful in 5m14s
Lint / lint (frontend-embed) (push) Successful in 2m23s
Lint / lint (frontend-shared) (push) Successful in 2m42s
Lint / lint (misskey-bubble-game) (push) Successful in 2m30s
Lint / lint (sw) (push) Failing after 1m21s
Lint / lint (misskey-js) (push) Successful in 2m23s
Lint / typecheck (backend) (push) Failing after 54s
Lint / typecheck (sw) (push) Successful in 2m5s
Lint / typecheck (misskey-js) (push) Failing after 12m52s
Lint / lint (misskey-reversi) (push) Failing after 14m42s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-15 05:38:23 -06:00
syuilo
eef0c895bc use execa 8.0.1
#14966
2024-11-15 19:48:31 +09:00
18d5587e5c
Merge tag '2024.11.0-alpha.1' into develop
Some checks failed
Lint / pnpm_install (pull_request) Successful in 1m42s
Publish Docker image / Build (pull_request) Successful in 5m0s
Test (production install and build) / production (22.11.0) (pull_request) Successful in 1m10s
Lint / lint (backend) (pull_request) Successful in 2m21s
Lint / lint (frontend) (pull_request) Successful in 10m7s
Lint / lint (misskey-js) (pull_request) Successful in 2m30s
Lint / lint (sw) (pull_request) Successful in 3m55s
Lint / lint (misskey-reversi) (pull_request) Successful in 3m57s
Lint / typecheck (backend) (pull_request) Successful in 2m20s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m38s
Lint / typecheck (sw) (pull_request) Successful in 1m49s
Lint / lint (frontend-embed) (pull_request) Failing after 15m54s
Test (backend) / unit (22.11.0) (pull_request) Successful in 7m1s
Test (backend) / e2e (22.11.0) (pull_request) Successful in 10m29s
Lint / typecheck (misskey-js) (push) Blocked by required conditions
Lint / typecheck (sw) (push) Blocked by required conditions
Lint / pnpm_install (push) Successful in 2m10s
Publish Docker image / Build (push) Successful in 4m50s
Test (production install and build) / production (22.11.0) (push) Successful in 1m17s
Lint / lint (backend) (push) Successful in 2m10s
Test (backend) / unit (22.11.0) (push) Successful in 8m55s
Lint / lint (frontend) (push) Successful in 2m11s
Lint / lint (frontend-embed) (push) Successful in 2m12s
Lint / lint (frontend-shared) (push) Successful in 2m7s
Lint / lint (misskey-bubble-game) (push) Successful in 2m5s
Test (backend) / e2e (22.11.0) (push) Failing after 11m29s
Lint / lint (misskey-js) (push) Successful in 2m20s
Lint / lint (misskey-reversi) (push) Has been cancelled
Lint / lint (sw) (push) Has been cancelled
Lint / typecheck (backend) (push) Has been cancelled
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-15 04:46:18 -06:00
syuilo
d9d92bcfbf Revert "use nodemon 3.0.2"
This reverts commit ce1f84e5a3.
2024-11-15 19:40:12 +09:00
syuilo
ce1f84e5a3 use nodemon 3.0.2
#14966
2024-11-15 19:33:50 +09:00
github-actions[bot]
cf7df05023 Bump version to 2024.11.0-alpha.1
All checks were successful
API report (misskey.js) / report (push) Successful in 1m16s
2024-11-15 09:06:13 +00:00
syuilo
ee2c017f48 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2024-11-15 18:00:22 +09:00
syuilo
d0cdc0b7a1 chore(frontend): tweak animation style 2024-11-15 18:00:20 +09:00
dependabot[bot]
ac3bf57644
chore(deps): bump codecov/codecov-action from 4 to 5 (#14961)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4 to 5.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-15 17:32:28 +09:00
syuilo
e850462b82
New Crowdin updates (#14859)
* New translations ja-jp.yml (Chinese Simplified)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (English)

* New translations ja-jp.yml (Vietnamese)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Korean)

* New translations ja-jp.yml (Korean)

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

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (Catalan)

* New translations ja-jp.yml (German)

* New translations ja-jp.yml (German)

* New translations ja-jp.yml (English)

* New translations ja-jp.yml (Swedish)

* New translations ja-jp.yml (Swedish)

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

* New translations ja-jp.yml (Chinese Simplified)
2024-11-15 17:31:38 +09:00
かっこかり
c0d1682604
feat: 送信したフォローリクエストを確認できるように (#14856)
* FEAT: Allow users to view pending follow requests they sent

This commit implements the `following/requests/sent` interface firstly
implemented on Firefish, and provides a UI interface to view the pending
follow requests users sent.

* ux: should not show follow requests tab when have no pending sent follow req

* fix default followreq tab

* fix default followreq tab

* restore missing hasPendingReceivedFollowRequest in navbar

* refactor

* use tabler icons

* tweak design

* Revert "ux: should not show follow requests tab when have no pending sent follow req"

This reverts commit e580b92c37f27c2849c6d27e22ca4c47086081bb.

* Update Changelog

* Update Changelog

* change tab titles

---------

Co-authored-by: Lhc_fl <lhcfl@outlook.com>
Co-authored-by: Hazelnoot <acomputerdog@gmail.com>
2024-11-15 17:30:54 +09:00
syuilo
e26e24b610
update deps (#14950)
* update deps

* wip

* Revert "wip"

This reverts commit 393de249fe248ae181221266e0b7828a3ac53152.

* wip

* wip

* wip

* wip
2024-11-15 17:22:00 +09:00
かっこかり
7f8c8f62b1
fix(frontend): スマホで表示した時にipv6だとはみ出てしまうのを修正 (#14960)
* fix(frontend): スマホで表示した時にipv6だとはみ出てしまうのを修正 (MisskeyIO#815)

(cherry picked from commit aec01dd4adda8e975da523c5bea329120e689569)

* Update Changelog

---------

Co-authored-by: sleep-moe <yukikum57@gmail.com>
2024-11-15 09:33:09 +09:00
60eb7e1dc9
admin registration script
All checks were successful
Test (production install and build) / production (20.16.0) (push) Successful in 1m28s
Publish Docker image / Build (push) Successful in 4m51s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-14 12:36:38 -06:00
738877016c Merge pull request 'Relax admin automated account registration' (#16) from relax-account-registration into develop
All checks were successful
Lint / pnpm_install (push) Successful in 1m45s
Publish Docker image / Build (push) Successful in 4m33s
Test (production install and build) / production (20.16.0) (push) Successful in 1m17s
Test (backend) / unit (20.16.0) (push) Successful in 7m58s
Lint / lint (backend) (push) Successful in 2m27s
Lint / lint (frontend) (push) Successful in 2m56s
Lint / lint (frontend-embed) (push) Successful in 2m18s
Test (backend) / e2e (20.16.0) (push) Successful in 11m35s
Lint / lint (frontend-shared) (push) Successful in 2m26s
Lint / lint (misskey-bubble-game) (push) Successful in 2m30s
Lint / lint (misskey-js) (push) Successful in 2m40s
Lint / lint (misskey-reversi) (push) Successful in 2m37s
Lint / lint (sw) (push) Successful in 2m33s
Lint / typecheck (misskey-js) (push) Successful in 1m33s
Lint / typecheck (backend) (push) Successful in 2m23s
Lint / typecheck (sw) (push) Successful in 2m23s
Reviewed-on: #16
2024-11-14 11:39:59 -06:00
0f90b37b62
Add role write:admin:create-account
Some checks failed
Publish Docker image / Build (pull_request) Successful in 4m59s
Test (backend) / unit (20.16.0) (pull_request) Successful in 6m47s
Test (production install and build) / production (20.16.0) (pull_request) Successful in 1m13s
Test (backend) / e2e (20.16.0) (pull_request) Successful in 10m40s
Lint / lint (backend) (pull_request) Has been cancelled
Lint / lint (frontend) (pull_request) Has been cancelled
Lint / pnpm_install (pull_request) Has been cancelled
Lint / lint (frontend-embed) (pull_request) Has been cancelled
Lint / lint (frontend-shared) (pull_request) Has been cancelled
Lint / lint (misskey-bubble-game) (pull_request) Has been cancelled
Lint / lint (misskey-js) (pull_request) Has been cancelled
Lint / lint (misskey-reversi) (pull_request) Has been cancelled
Lint / lint (sw) (pull_request) Has been cancelled
Lint / typecheck (backend) (pull_request) Has been cancelled
Lint / typecheck (misskey-js) (pull_request) Has been cancelled
Lint / typecheck (sw) (pull_request) Has been cancelled
2024-11-14 11:21:27 -06:00
52d0100918 Merge branch 'develop' into relax-account-registration 2024-11-14 09:22:24 -06:00
fd271ea268
Relax admin automated account registration
Some checks failed
Lint / pnpm_install (pull_request) Successful in 1m50s
Publish Docker image / Build (pull_request) Successful in 5m30s
Test (production install and build) / production (20.16.0) (pull_request) Successful in 1m20s
Test (backend) / unit (20.16.0) (pull_request) Successful in 8m21s
Lint / lint (backend) (pull_request) Successful in 2m30s
Lint / lint (frontend) (pull_request) Successful in 2m15s
Lint / lint (frontend-embed) (pull_request) Successful in 2m26s
Lint / lint (frontend-shared) (pull_request) Successful in 2m24s
Test (backend) / e2e (20.16.0) (pull_request) Failing after 12m16s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m31s
Lint / typecheck (backend) (pull_request) Has been cancelled
Lint / lint (misskey-js) (pull_request) Has been cancelled
Lint / typecheck (misskey-js) (pull_request) Has been cancelled
Lint / lint (misskey-reversi) (pull_request) Has been cancelled
Lint / typecheck (sw) (pull_request) Has been cancelled
Lint / lint (sw) (pull_request) Has been cancelled
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-14 09:18:02 -06:00
afac979977
Web security configuration
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-14 08:56:11 -06:00
073c70d42b Merge pull request 'Web security configuration' (#15) from configurable-web-security into develop
All checks were successful
Lint / pnpm_install (push) Successful in 2m5s
Publish Docker image / Build (push) Successful in 5m48s
Test (production install and build) / production (20.16.0) (push) Successful in 1m22s
Test (backend) / unit (20.16.0) (push) Successful in 8m44s
Lint / lint (backend) (push) Successful in 2m31s
Lint / lint (frontend-embed) (push) Successful in 2m28s
Lint / lint (frontend) (push) Successful in 2m57s
Test (backend) / e2e (20.16.0) (push) Successful in 12m23s
Lint / lint (frontend-shared) (push) Successful in 2m34s
Lint / lint (misskey-bubble-game) (push) Successful in 2m37s
Lint / lint (misskey-js) (push) Successful in 2m26s
Lint / lint (sw) (push) Successful in 2m34s
Lint / lint (misskey-reversi) (push) Successful in 2m51s
Lint / typecheck (backend) (push) Successful in 2m11s
Lint / typecheck (misskey-js) (push) Successful in 1m51s
Lint / typecheck (sw) (push) Successful in 2m1s
Reviewed-on: #15
2024-11-14 08:47:00 -06:00
syuilo
4d54101510
update node to 22.11.0 (#14869)
* wip

* Update CHANGELOG.md

* Update CHANGELOG.md
2024-11-13 19:43:36 +09:00
shimmar
2305788ed9
Enhance(frontend): ノート詳細画面にロールのバッジを表示 (#14946)
* enhance(frontend): ノートの詳細画面にロールのバッジを表示(#14058)

* Update CHANGELOG.md
2024-11-13 11:19:54 +09:00
174c3ef096
Web security configuration
All checks were successful
Lint / pnpm_install (pull_request) Successful in 1m59s
Publish Docker image / Build (pull_request) Successful in 4m52s
Test (production install and build) / production (20.16.0) (pull_request) Successful in 1m13s
Test (backend) / unit (20.16.0) (pull_request) Successful in 8m32s
Lint / lint (backend) (pull_request) Successful in 2m25s
Lint / lint (frontend) (pull_request) Successful in 2m22s
Lint / lint (frontend-embed) (pull_request) Successful in 2m9s
Lint / lint (frontend-shared) (pull_request) Successful in 2m19s
Test (backend) / e2e (20.16.0) (pull_request) Successful in 11m53s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m32s
Lint / lint (misskey-js) (pull_request) Successful in 2m34s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m37s
Lint / lint (sw) (pull_request) Successful in 2m15s
Lint / typecheck (backend) (pull_request) Successful in 2m8s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m53s
Lint / typecheck (sw) (pull_request) Successful in 1m53s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-12 02:20:42 -06:00
7748ab5dd0
allow self-embed (previews, etc.)
Some checks failed
Lint / pnpm_install (push) Successful in 1m48s
Publish Docker image / Build (push) Successful in 4m52s
Test (production install and build) / production (20.16.0) (push) Failing after 1m46s
Test (backend) / e2e (20.16.0) (push) Failing after 4m56s
Lint / lint (backend) (push) Failing after 23s
Test (backend) / unit (20.16.0) (push) Successful in 6m48s
Lint / lint (frontend) (push) Failing after 17s
Lint / lint (frontend-embed) (push) Failing after 14s
Lint / lint (frontend-shared) (push) Failing after 22s
Lint / lint (misskey-bubble-game) (push) Failing after 24s
Lint / lint (misskey-js) (push) Failing after 25s
Lint / lint (misskey-reversi) (push) Failing after 25s
Lint / lint (sw) (push) Failing after 24s
Lint / typecheck (backend) (push) Failing after 24s
Lint / typecheck (misskey-js) (push) Failing after 25s
Lint / typecheck (sw) (push) Failing after 24s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-12 00:15:29 -06:00
2419a9f740
fixup! implement CSP, remove commercial supporters from about section
Some checks failed
Publish Docker image / Build (push) Successful in 4m39s
Lint / pnpm_install (push) Successful in 1m36s
Test (production install and build) / production (20.16.0) (push) Successful in 1m12s
Test (backend) / unit (20.16.0) (push) Successful in 6m53s
Test (backend) / e2e (20.16.0) (push) Failing after 12m11s
Lint / lint (backend) (push) Successful in 2m34s
Lint / lint (frontend) (push) Successful in 2m30s
Lint / lint (frontend-embed) (push) Successful in 2m30s
Lint / lint (frontend-shared) (push) Successful in 2m34s
Lint / lint (misskey-bubble-game) (push) Successful in 2m30s
Lint / lint (misskey-js) (push) Successful in 2m25s
Lint / lint (misskey-reversi) (push) Successful in 2m28s
Lint / lint (sw) (push) Successful in 2m31s
Lint / typecheck (backend) (push) Successful in 2m8s
Lint / typecheck (misskey-js) (push) Has been cancelled
Lint / typecheck (sw) (push) Has been cancelled
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-11 21:32:27 -06:00
饺子w (Yumechi)
a11b77a415
fix(backend): Webhook Test一致性 (#14863)
* fix(backend): Webhook Test一致性

Signed-off-by: eternal-flame-AD <yume@yumechi.jp>

* UserWebhookPayload<'followed'> 修正

Signed-off-by: eternal-flame-AD <yume@yumechi.jp>

---------

Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-12 09:51:18 +09:00
3fcea3eeb6
bump version 2024.11.0-yumechinokuni.3
Some checks failed
Test (production install and build) / production (20.16.0) (push) Successful in 1m18s
Test (backend) / unit (20.16.0) (push) Successful in 8m36s
Lint / pnpm_install (pull_request) Successful in 1m13s
Publish Docker image / Build (pull_request) Successful in 4m40s
Test (backend) / e2e (20.16.0) (push) Failing after 11m2s
Test (production install and build) / production (20.16.0) (pull_request) Successful in 1m11s
Lint / lint (backend) (push) Successful in 2m19s
Lint / lint (frontend-embed) (push) Successful in 2m27s
Lint / lint (frontend) (push) Successful in 2m32s
Lint / lint (frontend-shared) (push) Successful in 2m32s
Lint / lint (misskey-bubble-game) (push) Successful in 2m31s
Lint / lint (misskey-js) (push) Successful in 2m15s
Lint / lint (misskey-reversi) (push) Successful in 2m56s
Lint / lint (sw) (push) Successful in 2m53s
Lint / typecheck (backend) (push) Successful in 2m20s
Lint / typecheck (misskey-js) (push) Successful in 1m35s
Lint / typecheck (sw) (push) Successful in 1m49s
Lint / lint (backend) (pull_request) Successful in 2m22s
Lint / lint (frontend) (pull_request) Successful in 2m18s
Lint / lint (frontend-embed) (pull_request) Successful in 2m34s
Lint / lint (frontend-shared) (pull_request) Successful in 2m15s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m16s
Lint / lint (misskey-js) (pull_request) Successful in 2m29s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m16s
Lint / lint (sw) (pull_request) Successful in 2m12s
Lint / typecheck (backend) (pull_request) Successful in 2m7s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m29s
Lint / typecheck (sw) (pull_request) Successful in 1m31s
Test (backend) / unit (20.16.0) (pull_request) Successful in 6m15s
Test (backend) / e2e (20.16.0) (pull_request) Failing after 9m40s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-11 17:10:37 -06:00
67197fbb76
implement CSP, remove commercial supporters from about section
Too much diff don't want to deal with it

Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-11 17:09:11 -06:00
e75d885a2c
enable sourceMap on frontend
All checks were successful
Test (production install and build) / production (20.16.0) (push) Successful in 1m47s
Lint / pnpm_install (push) Successful in 2m5s
Publish Docker image / Build (push) Successful in 4m44s
Lint / lint (frontend) (push) Successful in 2m44s
Lint / lint (backend) (push) Successful in 2m58s
Lint / lint (frontend-embed) (push) Successful in 2m50s
Lint / lint (frontend-shared) (push) Successful in 2m54s
Lint / lint (misskey-bubble-game) (push) Successful in 2m55s
Lint / lint (misskey-reversi) (push) Successful in 2m53s
Lint / lint (misskey-js) (push) Successful in 3m25s
Lint / lint (sw) (push) Successful in 3m7s
Lint / typecheck (misskey-js) (push) Successful in 2m9s
Lint / typecheck (sw) (push) Successful in 2m12s
Lint / typecheck (backend) (push) Successful in 3m19s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-11 02:29:47 -06:00
syuilo
1bc4f400c0 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2024-11-11 16:35:23 +09:00
syuilo
458c72c153 Update about-misskey.vue 2024-11-11 16:35:13 +09:00
77b333dbdb Merge pull request 'more robust recursive folder check' (#12) from folder-recursive into develop
All checks were successful
Lint / pnpm_install (push) Successful in 1m57s
Publish Docker image / Build (push) Successful in 4m50s
Test (production install and build) / production (20.16.0) (push) Successful in 1m10s
Test (backend) / unit (20.16.0) (push) Successful in 7m26s
Lint / lint (backend) (push) Successful in 2m9s
Lint / lint (frontend) (push) Successful in 2m12s
Lint / lint (frontend-embed) (push) Successful in 2m14s
Lint / lint (frontend-shared) (push) Successful in 2m12s
Test (backend) / e2e (20.16.0) (push) Successful in 10m38s
Lint / lint (misskey-bubble-game) (push) Successful in 2m27s
Lint / lint (misskey-js) (push) Successful in 2m22s
Lint / lint (misskey-reversi) (push) Successful in 2m13s
Lint / lint (sw) (push) Successful in 2m31s
Lint / typecheck (misskey-js) (push) Successful in 1m26s
Lint / typecheck (backend) (push) Successful in 2m11s
Lint / typecheck (sw) (push) Successful in 1m28s
Reviewed-on: #12
2024-11-10 18:23:10 -06:00
82f4277673
more robust recursive folder check
All checks were successful
Lint / pnpm_install (pull_request) Successful in 1m51s
Publish Docker image / Build (pull_request) Successful in 4m34s
Test (production install and build) / production (20.16.0) (pull_request) Successful in 1m4s
Lint / lint (backend) (pull_request) Successful in 2m11s
Test (backend) / unit (20.16.0) (pull_request) Successful in 6m58s
Lint / lint (frontend) (pull_request) Successful in 2m20s
Lint / lint (frontend-embed) (pull_request) Successful in 2m23s
Test (backend) / e2e (20.16.0) (pull_request) Successful in 10m29s
Lint / lint (frontend-shared) (pull_request) Successful in 2m23s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m22s
Lint / lint (misskey-js) (pull_request) Successful in 2m13s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m29s
Lint / lint (sw) (pull_request) Successful in 2m28s
Lint / typecheck (backend) (pull_request) Successful in 2m17s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m46s
Lint / typecheck (sw) (pull_request) Successful in 1m48s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-10 17:32:05 -06:00
7a106a390d
add localComments count
Some checks failed
Test (production install and build) / production (20.16.0) (pull_request) Successful in 1m9s
Test (backend) / unit (20.16.0) (pull_request) Successful in 7m47s
Lint / pnpm_install (push) Successful in 1m15s
Publish Docker image / Build (push) Successful in 4m45s
Test (backend) / e2e (20.16.0) (pull_request) Failing after 10m58s
Test (production install and build) / production (20.16.0) (push) Successful in 1m12s
Lint / lint (backend) (pull_request) Successful in 2m12s
Test (backend) / unit (20.16.0) (push) Successful in 7m24s
Lint / lint (frontend) (pull_request) Successful in 2m17s
Lint / lint (frontend-embed) (pull_request) Successful in 2m21s
Lint / lint (frontend-shared) (pull_request) Successful in 2m26s
Test (backend) / e2e (20.16.0) (push) Successful in 10m51s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m43s
Lint / lint (misskey-js) (pull_request) Successful in 2m24s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m28s
Lint / lint (sw) (pull_request) Successful in 2m29s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m29s
Lint / typecheck (backend) (pull_request) Successful in 2m19s
Lint / typecheck (sw) (pull_request) Successful in 1m34s
Lint / lint (backend) (push) Successful in 2m41s
Lint / lint (frontend) (push) Successful in 2m37s
Lint / lint (frontend-embed) (push) Successful in 2m24s
Lint / lint (frontend-shared) (push) Successful in 2m29s
Lint / lint (misskey-js) (push) Successful in 2m26s
Lint / lint (misskey-bubble-game) (push) Successful in 2m54s
Lint / lint (misskey-reversi) (push) Successful in 2m17s
Lint / typecheck (backend) (push) Successful in 2m13s
Lint / lint (sw) (push) Successful in 2m41s
Lint / typecheck (misskey-js) (push) Successful in 1m28s
Lint / typecheck (sw) (push) Successful in 1m32s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-10 14:41:40 -06:00
24b6849ad1 Merge pull request 'restore activeHalfYear and activeMonth' (#10) from develop into master
All checks were successful
Lint / pnpm_install (push) Successful in 1m47s
Publish Docker image / Build (push) Successful in 4m54s
Test (production install and build) / production (20.16.0) (push) Successful in 1m11s
Test (backend) / unit (20.16.0) (push) Successful in 7m17s
Lint / lint (backend) (push) Successful in 2m23s
Lint / lint (frontend) (push) Successful in 2m22s
Lint / lint (frontend-embed) (push) Successful in 2m16s
Lint / lint (frontend-shared) (push) Successful in 2m22s
Test (backend) / e2e (20.16.0) (push) Successful in 10m49s
Lint / lint (misskey-bubble-game) (push) Successful in 2m26s
Lint / lint (misskey-js) (push) Successful in 2m19s
Lint / lint (misskey-reversi) (push) Successful in 2m21s
Lint / lint (sw) (push) Successful in 2m37s
Lint / typecheck (misskey-js) (push) Successful in 1m28s
Lint / typecheck (backend) (push) Successful in 2m13s
Lint / typecheck (sw) (push) Successful in 1m26s
Reviewed-on: #10
2024-11-10 03:34:35 -06:00
6fda31bc88 Merge branch 'master' into develop
All checks were successful
Test (production install and build) / production (20.16.0) (push) Successful in 1m11s
Publish Docker image / Build (push) Successful in 4m39s
Lint / pnpm_install (pull_request) Successful in 1m19s
Publish Docker image / Build (pull_request) Successful in 4m29s
Test (production install and build) / production (20.16.0) (pull_request) Successful in 1m16s
Test (backend) / unit (20.16.0) (pull_request) Successful in 6m57s
Test (backend) / e2e (20.16.0) (pull_request) Successful in 11m3s
Lint / lint (backend) (pull_request) Successful in 2m17s
Lint / lint (frontend) (pull_request) Successful in 2m23s
Lint / lint (frontend-embed) (pull_request) Successful in 2m27s
Lint / lint (frontend-shared) (pull_request) Successful in 2m19s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m33s
Lint / lint (misskey-js) (pull_request) Successful in 2m20s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m30s
Lint / lint (sw) (pull_request) Successful in 2m12s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m25s
Lint / typecheck (backend) (pull_request) Successful in 2m32s
Lint / typecheck (sw) (pull_request) Successful in 1m39s
2024-11-10 02:51:33 -06:00
18a27e3c47
restore activeHalfYear and activeMonth
All checks were successful
Test (production install and build) / production (20.16.0) (push) Successful in 1m12s
Test (backend) / unit (20.16.0) (push) Successful in 7m4s
Lint / lint (backend) (push) Successful in 2m25s
Lint / lint (frontend) (push) Successful in 2m9s
Lint / lint (frontend-embed) (push) Successful in 2m17s
Test (backend) / e2e (20.16.0) (push) Successful in 10m49s
Lint / lint (frontend-shared) (push) Successful in 2m30s
Lint / lint (misskey-bubble-game) (push) Successful in 2m20s
Lint / lint (misskey-js) (push) Successful in 2m26s
Lint / lint (misskey-reversi) (push) Successful in 2m25s
Lint / lint (sw) (push) Successful in 2m23s
Lint / typecheck (misskey-js) (push) Successful in 1m29s
Lint / typecheck (backend) (push) Successful in 2m20s
Lint / typecheck (sw) (push) Successful in 1m47s
Lint / pnpm_install (pull_request) Successful in 1m40s
Publish Docker image / Build (pull_request) Successful in 4m59s
Test (production install and build) / production (20.16.0) (pull_request) Successful in 1m10s
Test (backend) / unit (20.16.0) (pull_request) Successful in 7m8s
Test (backend) / e2e (20.16.0) (pull_request) Successful in 11m6s
Lint / lint (backend) (pull_request) Successful in 2m4s
Lint / lint (frontend) (pull_request) Successful in 2m15s
Lint / lint (frontend-embed) (pull_request) Successful in 2m7s
Lint / lint (frontend-shared) (pull_request) Successful in 2m13s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m8s
Lint / lint (misskey-js) (pull_request) Successful in 2m7s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m11s
Lint / lint (sw) (pull_request) Successful in 2m28s
Lint / typecheck (backend) (pull_request) Successful in 2m19s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m30s
Lint / typecheck (sw) (pull_request) Successful in 1m40s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-10 02:40:32 -06:00
adca3c686e Merge pull request '2024.11.0-yumechinokuni.1' (#9) from develop into master
All checks were successful
Lint / pnpm_install (push) Successful in 1m19s
Publish Docker image / Build (push) Successful in 4m34s
Test (production install and build) / production (20.16.0) (push) Successful in 1m11s
Test (backend) / unit (20.16.0) (push) Successful in 7m22s
Test (backend) / e2e (20.16.0) (push) Successful in 11m17s
Lint / lint (backend) (push) Successful in 2m15s
Lint / lint (frontend) (push) Successful in 2m35s
Lint / lint (frontend-embed) (push) Successful in 2m31s
Lint / lint (frontend-shared) (push) Successful in 2m23s
Lint / lint (misskey-bubble-game) (push) Successful in 2m20s
Lint / lint (misskey-js) (push) Successful in 2m20s
Lint / lint (misskey-reversi) (push) Successful in 2m20s
Lint / lint (sw) (push) Successful in 2m21s
Lint / typecheck (backend) (push) Successful in 2m23s
Lint / typecheck (misskey-js) (push) Successful in 1m30s
Lint / typecheck (sw) (push) Successful in 1m40s
Reviewed-on: #9
2024-11-10 02:06:12 -06:00
94ce0fd414
tag: 2024.11.0-yumechinokuni.1
All checks were successful
Publish Docker image / Build (push) Successful in 4m54s
Lint / pnpm_install (push) Successful in 1m16s
Test (production install and build) / production (20.16.0) (push) Successful in 1m18s
Lint / lint (backend) (push) Successful in 2m52s
Lint / lint (frontend-embed) (push) Successful in 2m23s
Lint / lint (frontend) (push) Successful in 2m49s
Lint / lint (frontend-shared) (push) Successful in 2m16s
Lint / lint (misskey-js) (push) Successful in 2m19s
Lint / lint (misskey-bubble-game) (push) Successful in 2m43s
Lint / lint (misskey-reversi) (push) Successful in 2m22s
Lint / lint (sw) (push) Successful in 2m21s
Lint / typecheck (backend) (push) Successful in 2m31s
Lint / typecheck (misskey-js) (push) Successful in 1m25s
Lint / typecheck (sw) (push) Successful in 1m35s
Lint / pnpm_install (pull_request) Successful in 1m53s
Publish Docker image / Build (pull_request) Successful in 4m54s
Test (production install and build) / production (20.16.0) (pull_request) Successful in 1m18s
Test (backend) / unit (20.16.0) (pull_request) Successful in 7m55s
Test (backend) / e2e (20.16.0) (pull_request) Successful in 11m4s
Lint / lint (backend) (pull_request) Successful in 2m9s
Lint / lint (frontend) (pull_request) Successful in 2m21s
Lint / lint (frontend-embed) (pull_request) Successful in 2m18s
Lint / lint (frontend-shared) (pull_request) Successful in 2m25s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m26s
Lint / lint (misskey-js) (pull_request) Successful in 2m27s
Lint / lint (misskey-reversi) (pull_request) Successful in 2m32s
Lint / lint (sw) (pull_request) Successful in 2m30s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m35s
Lint / typecheck (backend) (pull_request) Successful in 2m17s
Lint / typecheck (sw) (pull_request) Successful in 1m52s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-10 00:55:00 -06:00
39ae9c8f8a Merge remote-tracking branch 'upstream/develop' into develop 2024-11-10 00:50:18 -06:00
48b935e88c Merge pull request 'add git info to build' (#8) from build-git-info into develop
Some checks are pending
Publish Docker image / Build (push) Waiting to run
Lint / pnpm_install (push) Waiting to run
Lint / lint (backend) (push) Blocked by required conditions
Lint / lint (frontend) (push) Blocked by required conditions
Lint / lint (frontend-embed) (push) Blocked by required conditions
Lint / lint (frontend-shared) (push) Blocked by required conditions
Lint / lint (misskey-bubble-game) (push) Blocked by required conditions
Lint / lint (misskey-js) (push) Blocked by required conditions
Lint / lint (misskey-reversi) (push) Blocked by required conditions
Lint / lint (sw) (push) Blocked by required conditions
Lint / typecheck (backend) (push) Blocked by required conditions
Lint / typecheck (misskey-js) (push) Blocked by required conditions
Lint / typecheck (sw) (push) Blocked by required conditions
Test (production install and build) / production (20.16.0) (push) Waiting to run
Test (backend) / unit (20.16.0) (push) Successful in 7m48s
Test (backend) / e2e (20.16.0) (push) Successful in 12m31s
Reviewed-on: #8
2024-11-10 00:49:58 -06:00
8652fd27b9
add git info to build
All checks were successful
Lint / pnpm_install (pull_request) Successful in 1m43s
Publish Docker image / Build (pull_request) Successful in 4m40s
Test (production install and build) / production (20.16.0) (pull_request) Successful in 1m8s
Test (backend) / unit (20.16.0) (pull_request) Successful in 7m13s
Lint / lint (backend) (pull_request) Successful in 2m31s
Lint / lint (frontend) (pull_request) Successful in 2m45s
Lint / lint (frontend-embed) (pull_request) Successful in 2m21s
Lint / lint (frontend-shared) (pull_request) Successful in 2m19s
Test (backend) / e2e (20.16.0) (pull_request) Successful in 11m14s
Lint / lint (misskey-bubble-game) (pull_request) Successful in 2m24s
Lint / lint (misskey-js) (pull_request) Successful in 2m33s
Lint / lint (sw) (pull_request) Successful in 2m39s
Lint / lint (misskey-reversi) (pull_request) Successful in 3m7s
Lint / typecheck (misskey-js) (pull_request) Successful in 1m34s
Lint / typecheck (backend) (pull_request) Successful in 2m38s
Lint / typecheck (sw) (pull_request) Successful in 2m2s
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-11-10 00:41:40 -06:00
dc24536a7c Merge pull request 'more stable ws stream' (#7) from pick/pari-ws-stability into develop
All checks were successful
Lint / pnpm_install (push) Successful in 1m41s
Test (production install and build) / production (20.16.0) (push) Successful in 1m40s
Publish Docker image / Build (push) Successful in 4m27s
Lint / lint (backend) (push) Successful in 2m37s
Lint / lint (frontend) (push) Successful in 2m33s
Lint / lint (frontend-embed) (push) Successful in 2m14s
Lint / lint (frontend-shared) (push) Successful in 2m28s
Lint / lint (misskey-bubble-game) (push) Successful in 2m25s
Lint / lint (misskey-js) (push) Successful in 2m4s
Lint / lint (misskey-reversi) (push) Successful in 2m20s
Lint / lint (sw) (push) Successful in 2m25s
Lint / typecheck (backend) (push) Successful in 2m11s
Lint / typecheck (misskey-js) (push) Successful in 1m49s
Lint / typecheck (sw) (push) Successful in 1m55s
Reviewed-on: #7
2024-11-10 00:21:05 -06:00
syuilo
6bd3ed2074
Update CHANGELOG.md 2024-11-10 15:10:04 +09:00
かっこかり
31e5f0bd09
fix(frontend): メールアドレス登録有効化時の「完了」ダイアログボックスの表示条件を修正 (#14928)
* fix(frontend): メールアドレス登録有効化時の「完了」ダイアログボックスの表示条件を修正

* Update MkSignupDialog.form.vue

* fix condition
2024-11-10 15:08:58 +09:00
6f53315af1 Merge pull request 'try standarize version' (#6) from develop into master
Some checks failed
Lint / pnpm_install (push) Successful in 1m51s
Publish Docker image / Build (push) Successful in 4m35s
Test (production install and build) / production (20.16.0) (push) Successful in 1m17s
Test (backend) / unit (20.16.0) (push) Failing after 7m39s
Lint / lint (backend) (push) Successful in 2m17s
Lint / lint (frontend) (push) Successful in 2m11s
Lint / lint (frontend-embed) (push) Successful in 2m17s
Lint / lint (frontend-shared) (push) Successful in 2m18s
Lint / lint (misskey-bubble-game) (push) Successful in 2m15s
Test (backend) / e2e (20.16.0) (push) Successful in 11m33s
Lint / lint (misskey-js) (push) Successful in 2m23s
Lint / lint (sw) (push) Successful in 2m34s
Lint / lint (misskey-reversi) (push) Successful in 3m5s
Lint / typecheck (backend) (push) Successful in 2m23s
Lint / typecheck (misskey-js) (push) Successful in 1m44s
Lint / typecheck (sw) (push) Successful in 1m55s
Reviewed-on: #6
2024-11-09 06:08:15 -06:00
かっこかり
e0a83e9c9e
Update CHANGELOG.md (書き方を揃える) 2024-11-09 15:57:10 +09:00
かっこかり
1496700b37
Update CHANGELOG.md
たぶんリリースワークフローはこうしないと認識してくれない
2024-11-09 15:51:49 +09:00
syuilo
00cbf9fe80
Update CONTRIBUTING.md 2024-11-09 14:09:02 +09:00
431 changed files with 30653 additions and 17424 deletions

View file

@ -153,6 +153,13 @@ redis:
id: 'aidx' id: 'aidx'
# ┌──────────┐
#───┘ Metrics └──────────────────────────────────────────
#prometheusMetrics:
# enable: false
# scrapeToken: '' # Set non-empty to require a bearer token for scraping
# ┌────────────────┐ # ┌────────────────┐
#───┘ Error tracking └────────────────────────────────────────── #───┘ Error tracking └──────────────────────────────────────────
@ -168,8 +175,8 @@ id: 'aidx'
# options: # options:
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0' # dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
# ┌─────────────────────┐ # ──────────────┐
#───┘ Other configuration └───────────────────────────────────── #──┘ Web Security └─────────────────────────────────────
# Whether disable HSTS # Whether disable HSTS
#disableHsts: true #disableHsts: true
@ -180,6 +187,24 @@ id: 'aidx'
# - https://hstspreload.org/ # - https://hstspreload.org/
#hstsPreload: false #hstsPreload: false
# Enable additional security headers that reduce the risk of XSS attacks or privacy leaks.
# browserSandboxing:
# # Do not send the Referrer header to other domains. The default when browserSandboxing is missing is true.
# strictOriginReferrer: true
# csp:
# # Do not send a CSP header. The default is a strict CSP header that prevents any form of external fetching or execution.
# disable: false
# # Merge additional directives into the CSP header. The default is an empty object.
# # You may want to list your CDN or other trusted domains here.
# # Media proxies are automatically added to the CSP header. This is an exception, things like Sentry will not be automatically added.
# appendDirectives:
# 'script-src':
# - "'unsafe-eval'" # do not use this ... just an example
# - 'https://example.com'
# ┌─────────────────────┐
#───┘ Other configuration └─────────────────────────────────────
# Number of worker processes # Number of worker processes
#clusterLimit: 1 #clusterLimit: 1

View file

@ -114,9 +114,27 @@ redis:
# #prefix: example-prefix # #prefix: example-prefix
# #db: 1 # #db: 1
# ┌─────────────────────────── # ┌───────────────────────────────
#───┘ MeiliSearch configuration └───────────────────────────── #───┘ Fulltext search configuration └─────────────────────────────
# These are the setting items for the full-text search provider.
fulltextSearch:
# You can select the ID generation method.
# - sqlLike (default)
# Use SQL-like search.
# This is a standard feature of PostgreSQL, so no special extensions are required.
# - sqlPgroonga
# Use pgroonga.
# You need to install pgroonga and configure it as a PostgreSQL extension.
# In addition to the above, you need to create a pgroonga index on the text column of the note table.
# see: https://pgroonga.github.io/tutorial/
# - meilisearch
# Use Meilisearch.
# You need to install Meilisearch and configure.
provider: sqlLike
# For Meilisearch settings.
# If you select "meilisearch" for "fulltextSearch.provider", it must be set.
# You can set scope to local (default value) or global # You can set scope to local (default value) or global
# (include notes from remote). # (include notes from remote).
@ -147,6 +165,13 @@ redis:
id: 'aidx' id: 'aidx'
# ┌──────────┐
#───┘ Metrics └──────────────────────────────────────────
#prometheusMetrics:
# enable: false
# scrapeToken: '' # Set non-empty to require a bearer token for scraping
# ┌────────────────┐ # ┌────────────────┐
#───┘ Error tracking └────────────────────────────────────────── #───┘ Error tracking └──────────────────────────────────────────
@ -162,8 +187,8 @@ id: 'aidx'
# options: # options:
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0' # dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
# ┌─────────────────────┐ # ──────────────┐
#───┘ Other configuration └───────────────────────────────────── #──┘ Web Security └─────────────────────────────────────
# Whether disable HSTS # Whether disable HSTS
#disableHsts: true #disableHsts: true
@ -174,6 +199,24 @@ id: 'aidx'
# - https://hstspreload.org/ # - https://hstspreload.org/
#hstsPreload: false #hstsPreload: false
# Enable additional security headers that reduce the risk of XSS attacks or privacy leaks.
# browserSandboxing:
# # Do not send the Referrer header to other domains. The default when browserSandboxing is missing is true.
# strictOriginReferrer: true
# csp:
# # Do not send a CSP header. The default is a strict CSP header that prevents any form of external fetching or execution.
# disable: false
# # Merge additional directives into the CSP header. The default is an empty object.
# # You may want to list your CDN or other trusted domains here.
# # Media proxies are automatically added to the CSP header. This is an exception, things like Sentry will not be automatically added.
# appendDirectives:
# 'script-src':
# - "'unsafe-eval'" # do not use this ... just an example
# - 'https://example.com'
# ┌─────────────────────┐
#───┘ Other configuration └─────────────────────────────────────
# Number of worker processes # Number of worker processes
#clusterLimit: 1 #clusterLimit: 1
@ -225,3 +268,13 @@ signToActivityPubGet: true
# Upload or download file size limits (bytes) # Upload or download file size limits (bytes)
#maxFileSize: 262144000 #maxFileSize: 262144000
# Log settings
# logging:
# sql:
# # Outputs query parameters during SQL execution to the log.
# # default: false
# enableQueryParamLogging: false
# # Disable query truncation. If set to true, the full text of the query will be output to the log.
# # default: false
# disableQueryTruncation: false

View file

@ -196,9 +196,27 @@ redis:
# # You can specify more ioredis options... # # You can specify more ioredis options...
# #username: example-username # #username: example-username
# ┌─────────────────────────── # ┌───────────────────────────────
#───┘ MeiliSearch configuration └───────────────────────────── #───┘ Fulltext search configuration └─────────────────────────────
# These are the setting items for the full-text search provider.
fulltextSearch:
# You can select the ID generation method.
# - sqlLike (default)
# Use SQL-like search.
# This is a standard feature of PostgreSQL, so no special extensions are required.
# - sqlPgroonga
# Use pgroonga.
# You need to install pgroonga and configure it as a PostgreSQL extension.
# In addition to the above, you need to create a pgroonga index on the text column of the note table.
# see: https://pgroonga.github.io/tutorial/
# - meilisearch
# Use Meilisearch.
# You need to install Meilisearch and configure.
provider: sqlLike
# For Meilisearch settings.
# If you select "meilisearch" for "fulltextSearch.provider", it must be set.
# You can set scope to local (default value) or global # You can set scope to local (default value) or global
# (include notes from remote). # (include notes from remote).
@ -229,6 +247,13 @@ redis:
id: 'aidx' id: 'aidx'
# ┌──────────┐
#───┘ Metrics └──────────────────────────────────────────
#prometheusMetrics:
# enable: false
# scrapeToken: '' # Set non-empty to require a bearer token for scraping
# ┌────────────────┐ # ┌────────────────┐
#───┘ Error tracking └────────────────────────────────────────── #───┘ Error tracking └──────────────────────────────────────────
@ -244,8 +269,8 @@ id: 'aidx'
# options: # options:
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0' # dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
# ┌─────────────────────┐ # ──────────────┐
#───┘ Other configuration └───────────────────────────────────── #──┘ Web Security └─────────────────────────────────────
# Whether disable HSTS # Whether disable HSTS
#disableHsts: true #disableHsts: true
@ -256,6 +281,24 @@ id: 'aidx'
# - https://hstspreload.org/ # - https://hstspreload.org/
#hstsPreload: false #hstsPreload: false
# Enable additional security headers that reduce the risk of XSS attacks or privacy leaks.
# browserSandboxing:
# # Do not send the Referrer header to other domains. The default when browserSandboxing is missing is true.
# strictOriginReferrer: true
# csp:
# # Do not send a CSP header. The default is a strict CSP header that prevents any form of external fetching or execution.
# disable: false
# # Merge additional directives into the CSP header. The default is an empty object.
# # You may want to list your CDN or other trusted domains here.
# # Media proxies are automatically added to the CSP header. This is an exception, things like Sentry will not be automatically added.
# appendDirectives:
# 'script-src':
# - "'unsafe-eval'" # do not use this ... just an example
# - 'https://example.com'
# ┌─────────────────────┐
#───┘ Other configuration └─────────────────────────────────────
# Number of worker processes # Number of worker processes
#clusterLimit: 1 #clusterLimit: 1
@ -327,3 +370,13 @@ signToActivityPubGet: true
# PID File of master process # PID File of master process
#pidFile: /tmp/misskey.pid #pidFile: /tmp/misskey.pid
# Log settings
# logging:
# sql:
# # Outputs query parameters during SQL execution to the log.
# # default: false
# enableQueryParamLogging: false
# # Disable query truncation. If set to true, the full text of the query will be output to the log.
# # default: false
# disableQueryTruncation: false

View file

@ -5,7 +5,7 @@
"workspaceFolder": "/workspace", "workspaceFolder": "/workspace",
"features": { "features": {
"ghcr.io/devcontainers/features/node:1": { "ghcr.io/devcontainers/features/node:1": {
"version": "20.16.0" "version": "22.11.0"
}, },
"ghcr.io/devcontainers-contrib/features/corepack:1": {} "ghcr.io/devcontainers-contrib/features/corepack:1": {}
}, },

View file

@ -1,8 +1,10 @@
.autogen .autogen
.github .github
.forgejo
.travis .travis
.vscode .vscode
.config .config
Dockerfile Dockerfile
build/ build/
built/ built/
@ -28,3 +30,5 @@ fluent-emojis/
.idea/ .idea/
packages/*/.vscode/ packages/*/.vscode/
packages/backend/test/compose.yml packages/backend/test/compose.yml
/yume-mods

View file

@ -24,7 +24,7 @@ jobs:
strategy: strategy:
matrix: matrix:
node-version: [20.16.0] node-version: [22.11.0]
services: services:
postgres: postgres:
@ -59,40 +59,40 @@ jobs:
- name: Test - name: Test
run: pnpm --filter backend test-and-coverage run: pnpm --filter backend test-and-coverage
e2e: # e2e:
runs-on: ubuntu-latest # runs-on: ubuntu-latest
#
strategy: # strategy:
matrix: # matrix:
node-version: [20.16.0] # node-version: [22.11.0]
#
services: # services:
postgres: # postgres:
image: l1drm/postgres-pgroonga:alpine-15-znver4 # image: l1drm/postgres-pgroonga:alpine-15-znver4
env: # env:
POSTGRES_DB: test-misskey # POSTGRES_DB: test-misskey
POSTGRES_HOST_AUTH_METHOD: trust # POSTGRES_HOST_AUTH_METHOD: trust
redis: # redis:
image: redis:7 # image: redis:7
#
steps: # steps:
- uses: actions/checkout@v4.1.1 # - uses: actions/checkout@v4.1.1
with: # with:
submodules: true # submodules: true
- name: Install pnpm # - name: Install pnpm
uses: pnpm/action-setup@v4 # uses: pnpm/action-setup@v4
- name: Use Node.js ${{ matrix.node-version }} # - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4.0.4 # uses: actions/setup-node@v4.0.4
with: # with:
node-version: ${{ matrix.node-version }} # node-version: ${{ matrix.node-version }}
cache: 'pnpm' # cache: 'pnpm'
- run: corepack enable # - run: corepack enable
- run: pnpm i --frozen-lockfile # - run: pnpm i --frozen-lockfile
- name: Check pnpm-lock.yaml # - name: Check pnpm-lock.yaml
run: git diff --exit-code pnpm-lock.yaml # run: git diff --exit-code pnpm-lock.yaml
- name: Copy Configure # - name: Copy Configure
run: cp .forgejo/misskey/test.yml .config # run: cp .forgejo/misskey/test.yml .config
- name: Build # - name: Build
run: pnpm build # run: pnpm build
- name: Test # - name: Test
run: pnpm --filter backend test-and-coverage:e2e # run: pnpm --filter backend test-and-coverage:e2e

View file

@ -16,7 +16,7 @@ jobs:
strategy: strategy:
matrix: matrix:
node-version: [20.16.0] node-version: [22.11.0]
steps: steps:
- uses: actions/checkout@v4.1.1 - uses: actions/checkout@v4.1.1

View file

@ -1,97 +0,0 @@
name: 🐛 Bug Report
description: Create a report to help us improve
labels: ["⚠bug?"]
body:
- type: markdown
attributes:
value: |
Thanks for reporting!
First, in order to avoid duplicate Issues, please search to see if the problem you found has already been reported.
Also, If you are NOT owner/admin of server, PLEASE DONT REPORT SERVER SPECIFIC ISSUES TO HERE! (e.g. feature XXX is not working in misskey.example) Please try with another misskey servers, and if your issue is only reproducible with specific server, contact your server's owner/admin first.
- type: textarea
attributes:
label: 💡 Summary
description: Tell us what the bug is
validations:
required: true
- type: textarea
attributes:
label: 🥰 Expected Behavior
description: Tell us what should happen
validations:
required: true
- type: textarea
attributes:
label: 🤬 Actual Behavior
description: |
Tell us what happens instead of the expected behavior.
Please include errors from the developer console and/or server log files if you have access to them.
validations:
required: true
- type: textarea
attributes:
label: 📝 Steps to Reproduce
placeholder: |
1.
2.
3.
validations:
required: false
- type: textarea
attributes:
label: 💻 Frontend Environment
description: |
Tell us where on the platform it happens
DO NOT WRITE "latest". Please provide the specific version.
Examples:
* Model and OS of the device(s): MacBook Pro (14inch, 2021), macOS Ventura 13.4
* Browser: Chrome 113.0.5672.126
* Server URL: misskey.example.com
* Misskey: 2024.x.x
value: |
* Model and OS of the device(s):
* Browser:
* Server URL:
* Misskey:
render: markdown
validations:
required: false
- type: textarea
attributes:
label: 🛰 Backend Environment (for server admin)
description: |
Tell us where on the platform it happens
DO NOT WRITE "latest". Please provide the specific version.
If you are using a managed service, put that after the version.
Examples:
* Installation Method or Hosting Service: docker compose, k8s/docker, systemd, "Misskey install shell script", development environment
* Misskey: 2024.x.x
* Node: 20.x.x
* PostgreSQL: 15.x.x
* Redis: 7.x.x
* OS and Architecture: Ubuntu 24.04.2 LTS aarch64
value: |
* Installation Method or Hosting Service:
* Misskey:
* Node:
* PostgreSQL:
* Redis:
* OS and Architecture:
render: markdown
validations:
required: false
- type: checkboxes
attributes:
label: Do you want to address this bug yourself?
options:
- label: Yes, I will patch the bug myself and send a pull request

View file

@ -1,22 +0,0 @@
name: ✨ Feature Request
description: Suggest an idea for this project
labels: ["✨Feature"]
body:
- type: textarea
attributes:
label: Summary
description: Tell us what the suggestion is
validations:
required: true
- type: textarea
attributes:
label: Purpose
description: Describe the specific problem or need you think this feature will solve, and who it will help.
validations:
required: true
- type: checkboxes
attributes:
label: Do you want to implement this feature yourself?
options:
- label: Yes, I will implement this by myself and send a pull request

View file

@ -1,8 +0,0 @@
contact_links:
- name: 💬 Misskey official Discord
url: https://discord.gg/Wp8gVStHW3
about: Chat freely about Misskey
# 仮
- name: 💬 Start discussion
url: https://github.com/misskey-dev/misskey/discussions
about: The official forum to join conversation and ask question

View file

@ -1,23 +0,0 @@
<!-- お読みください / README
PRありがとうございます PRを作成する前に、コントリビューションガイドをご確認ください:
Thank you for your PR! Before creating a PR, please check the contribution guide:
https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md
-->
## What
<!-- このPRで何をしたのか どう変わるのか? -->
<!-- What did you do with this PR? How will it change things? -->
## Why
<!-- なぜそうするのか? どういう意図なのか? 何が困っているのか? -->
<!-- Why do you do it? What are your intentions? What is the problem? -->
## Additional info (optional)
<!-- テスト観点など -->
<!-- Test perspective, etc -->
## Checklist
- [ ] Read the [contribution guide](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)
- [ ] Test working in a local environment
- [ ] (If needed) Update CHANGELOG.md
- [ ] (If possible) Add tests

View file

@ -1,23 +0,0 @@
<!-- お読みください / README
PRありがとうございます PRを作成する前に、コントリビューションガイドをご確認ください:
Thank you for your PR! Before creating a PR, please check the contribution guide:
https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md
-->
## What
<!-- このPRで何をしたのか どう変わるのか? -->
<!-- What did you do with this PR? How will it change things? -->
## Why
<!-- なぜそうするのか? どういう意図なのか? 何が困っているのか? -->
<!-- Why do you do it? What are your intentions? What is the problem? -->
## Additional info (optional)
<!-- テスト観点など -->
<!-- Test perspective, etc -->
## Checklist
- [ ] Read the [contribution guide](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)
- [ ] Test working in a local environment
- [ ] (If needed) Update CHANGELOG.md
- [ ] (If possible) Add tests

View file

@ -1,20 +0,0 @@
## Summary
This is a release PR.
For more information on the release instructions, please see:
https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md#release
## For reviewers
- CHANGELOGに抜け漏れは無いか
- バージョンの上げ方は適切か
- 他にこのリリースに含めなければならない変更は無いか
- 全体的な変更内容を俯瞰し問題は無いか
- レビューされていないコミットがある場合は、それが問題ないか
- 最終的な動作確認を行い問題は無いか
などを確認し、リリースする準備が整っていると思われる場合は approve してください。
## Checklist
- [ ] package.jsonのバージョンが正しく更新されている
- [ ] CHANGELOGが過不足無く更新されている
- [ ] CIが全て通っている

View file

@ -1,7 +1,7 @@
<!-- お読みください / README <!-- お読みください / README
PRありがとうございます PRを作成する前に、コントリビューションガイドをご確認ください: PRありがとうございます PRを作成する前に、コントリビューションガイドをご確認ください:
Thank you for your PR! Before creating a PR, please check the contribution guide: Thank you for your PR! Before creating a PR, please check the contribution guide:
https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md https://forge.yumechi.jp/yume/yumechi-no-kuni/src/branch/master/CONTRIBUTING.md
--> -->
## What ## What
@ -17,7 +17,7 @@ https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md
<!-- Test perspective, etc --> <!-- Test perspective, etc -->
## Checklist ## Checklist
- [ ] Read the [contribution guide](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md) - [ ] Read the [contribution guide](https://forge.yumechi.jp/yume/yumechi-no-kuni/src/branch/master/CONTRIBUTING.md)
- [ ] Test working in a local environment - [ ] Test working in a local environment
- [ ] (If needed) Add story of storybook - [ ] (If needed) Add story of storybook
- [ ] (If needed) Update CHANGELOG.md - [ ] (If needed) Update CHANGELOG.md

View file

@ -9,6 +9,10 @@ on:
paths: paths:
- packages/misskey-js/** - packages/misskey-js/**
- .github/workflows/api-misskey-js.yml - .github/workflows/api-misskey-js.yml
env:
COREPACK_DEFAULT_TO_LATEST: 0
jobs: jobs:
report: report:
@ -21,7 +25,7 @@ jobs:
- run: corepack enable - run: corepack enable
- name: Setup Node.js - name: Setup Node.js
uses: actions/setup-node@v4.0.4 uses: actions/setup-node@v4.1.0
with: with:
node-version-file: '.node-version' node-version-file: '.node-version'
cache: 'pnpm' cache: 'pnpm'

View file

@ -14,7 +14,7 @@ jobs:
- name: Checkout head - name: Checkout head
uses: actions/checkout@v4.1.1 uses: actions/checkout@v4.1.1
- name: Setup Node.js - name: Setup Node.js
uses: actions/setup-node@v4.0.4 uses: actions/setup-node@v4.1.0
with: with:
node-version-file: '.node-version' node-version-file: '.node-version'

View file

@ -29,7 +29,7 @@ jobs:
- name: setup node - name: setup node
id: setup-node id: setup-node
uses: actions/setup-node@v4.0.4 uses: actions/setup-node@v4.1.0
with: with:
node-version-file: '.node-version' node-version-file: '.node-version'
cache: pnpm cache: pnpm

View file

@ -9,6 +9,10 @@ on:
paths: paths:
- packages/backend/** - packages/backend/**
- .github/workflows/get-api-diff.yml - .github/workflows/get-api-diff.yml
env:
COREPACK_DEFAULT_TO_LATEST: 0
jobs: jobs:
get-from-misskey: get-from-misskey:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -17,7 +21,7 @@ jobs:
strategy: strategy:
matrix: matrix:
node-version: [20.16.0] node-version: [22.11.0]
api-json-name: [api-base.json, api-head.json] api-json-name: [api-base.json, api-head.json]
include: include:
- api-json-name: api-base.json - api-json-name: api-base.json
@ -33,7 +37,7 @@ jobs:
- name: Install pnpm - name: Install pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4.0.4 uses: actions/setup-node@v4.1.0
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
cache: 'pnpm' cache: 'pnpm'

View file

@ -28,6 +28,10 @@ on:
- packages/misskey-reversi/** - packages/misskey-reversi/**
- packages/shared/eslint.config.js - packages/shared/eslint.config.js
- .github/workflows/lint.yml - .github/workflows/lint.yml
env:
COREPACK_DEFAULT_TO_LATEST: 0
jobs: jobs:
pnpm_install: pnpm_install:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -37,7 +41,7 @@ jobs:
fetch-depth: 0 fetch-depth: 0
submodules: true submodules: true
- uses: pnpm/action-setup@v4 - uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4.0.4 - uses: actions/setup-node@v4.1.0
with: with:
node-version-file: '.node-version' node-version-file: '.node-version'
cache: 'pnpm' cache: 'pnpm'
@ -68,14 +72,14 @@ jobs:
fetch-depth: 0 fetch-depth: 0
submodules: true submodules: true
- uses: pnpm/action-setup@v4 - uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4.0.4 - uses: actions/setup-node@v4.1.0
with: with:
node-version-file: '.node-version' node-version-file: '.node-version'
cache: 'pnpm' cache: 'pnpm'
- run: corepack enable - run: corepack enable
- run: pnpm i --frozen-lockfile - run: pnpm i --frozen-lockfile
- name: Restore eslint cache - name: Restore eslint cache
uses: actions/cache@v4.1.0 uses: actions/cache@v4.2.0
with: with:
path: ${{ env.eslint-cache-path }} path: ${{ env.eslint-cache-path }}
key: eslint-${{ env.eslint-cache-version }}-${{ matrix.workspace }}-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ github.ref_name }}-${{ github.sha }} key: eslint-${{ env.eslint-cache-version }}-${{ matrix.workspace }}-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ github.ref_name }}-${{ github.sha }}
@ -98,7 +102,7 @@ jobs:
fetch-depth: 0 fetch-depth: 0
submodules: true submodules: true
- uses: pnpm/action-setup@v4 - uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4.0.4 - uses: actions/setup-node@v4.1.0
with: with:
node-version-file: '.node-version' node-version-file: '.node-version'
cache: 'pnpm' cache: 'pnpm'

View file

@ -9,6 +9,10 @@ on:
paths: paths:
- locales/** - locales/**
- .github/workflows/locale.yml - .github/workflows/locale.yml
env:
COREPACK_DEFAULT_TO_LATEST: 0
jobs: jobs:
locale_verify: locale_verify:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -19,7 +23,7 @@ jobs:
fetch-depth: 0 fetch-depth: 0
submodules: true submodules: true
- uses: pnpm/action-setup@v4 - uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4.0.4 - uses: actions/setup-node@v4.1.0
with: with:
node-version-file: '.node-version' node-version-file: '.node-version'
cache: 'pnpm' cache: 'pnpm'

View file

@ -6,6 +6,9 @@ on:
workflow_dispatch: workflow_dispatch:
env:
COREPACK_DEFAULT_TO_LATEST: 0
jobs: jobs:
publish-misskey-js: publish-misskey-js:
name: Publish misskey-js name: Publish misskey-js
@ -17,7 +20,7 @@ jobs:
strategy: strategy:
matrix: matrix:
node-version: [20.16.0] node-version: [22.11.0]
steps: steps:
- uses: actions/checkout@v4.1.1 - uses: actions/checkout@v4.1.1
@ -26,7 +29,7 @@ jobs:
- name: Install pnpm - name: Install pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4.0.4 uses: actions/setup-node@v4.1.0
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
cache: 'pnpm' cache: 'pnpm'

View file

@ -60,13 +60,13 @@ jobs:
### General ### General
- -
### Client ### Client
- -
### Server ### Server
- -
use_external_app_to_release: ${{ vars.USE_RELEASE_APP == 'true' }} use_external_app_to_release: ${{ vars.USE_RELEASE_APP == 'true' }}
indent: ${{ vars.INDENT }} indent: ${{ vars.INDENT }}
secrets: secrets:
@ -86,6 +86,7 @@ jobs:
draft_prerelease_channel: alpha draft_prerelease_channel: alpha
ready_start_prerelease_channel: beta ready_start_prerelease_channel: beta
prerelease_channel: ${{ inputs.start-rc && 'rc' || '' }} prerelease_channel: ${{ inputs.start-rc && 'rc' || '' }}
reset_number_on_channel_change: true
secrets: secrets:
RELEASE_APP_ID: ${{ secrets.RELEASE_APP_ID }} RELEASE_APP_ID: ${{ secrets.RELEASE_APP_ID }}
RELEASE_APP_PRIVATE_KEY: ${{ secrets.RELEASE_APP_PRIVATE_KEY }} RELEASE_APP_PRIVATE_KEY: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}

View file

@ -1,46 +0,0 @@
name: "Release Manager: release RC when ready for review"
on:
pull_request:
types: [ready_for_review]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
permissions:
contents: write
issues: write
pull-requests: write
jobs:
check:
runs-on: ubuntu-latest
outputs:
head: ${{ steps.get_pr.outputs.head }}
base: ${{ steps.get_pr.outputs.base }}
steps:
- uses: actions/checkout@v4
# PR情報を取得
- name: Get PR
run: |
pr_json=$(gh pr view "$PR_NUMBER" --json isDraft,headRefName,baseRefName)
echo "head=$(echo $pr_json | jq -r '.headRefName')" >> $GITHUB_OUTPUT
echo "base=$(echo $pr_json | jq -r '.baseRefName')" >> $GITHUB_OUTPUT
id: get_pr
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
release:
uses: misskey-dev/release-manager-actions/.github/workflows/create-prerelease.yml@v2
needs: check
if: needs.check.outputs.head == github.event.repository.default_branch && needs.check.outputs.base == vars.STABLE_BRANCH
with:
pr_number: ${{ github.event.pull_request.number }}
user: 'github-actions[bot]'
package_jsons_to_rewrite: ${{ vars.PACKAGE_JSONS_TO_REWRITE }}
use_external_app_to_release: ${{ vars.USE_RELEASE_APP == 'true' }}
indent: ${{ vars.INDENT }}
draft_prerelease_channel: alpha
ready_start_prerelease_channel: beta
secrets:
RELEASE_APP_ID: ${{ secrets.RELEASE_APP_ID }}
RELEASE_APP_PRIVATE_KEY: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}

View file

@ -13,8 +13,13 @@ on:
# This is a waste of chromatic build quota, so we don't run storybook CI on pull requests targets master. # This is a waste of chromatic build quota, so we don't run storybook CI on pull requests targets master.
- master - master
env:
COREPACK_DEFAULT_TO_LATEST: 0
jobs: jobs:
build: build:
# chromatic is not likely to be available for fork repositories, so we disable for fork repositories.
if: github.repository == 'misskey-dev/misskey'
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
@ -41,7 +46,7 @@ jobs:
- name: Install pnpm - name: Install pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Use Node.js 20.x - name: Use Node.js 20.x
uses: actions/setup-node@v4.0.4 uses: actions/setup-node@v4.1.0
with: with:
node-version-file: '.node-version' node-version-file: '.node-version'
cache: 'pnpm' cache: 'pnpm'

View file

@ -10,19 +10,26 @@ on:
# for permissions # for permissions
- packages/misskey-js/** - packages/misskey-js/**
- .github/workflows/test-backend.yml - .github/workflows/test-backend.yml
- .github/misskey/test.yml
pull_request: pull_request:
paths: paths:
- packages/backend/** - packages/backend/**
# for permissions # for permissions
- packages/misskey-js/** - packages/misskey-js/**
- .github/workflows/test-backend.yml - .github/workflows/test-backend.yml
- .github/misskey/test.yml
env:
COREPACK_DEFAULT_TO_LATEST: 0
jobs: jobs:
unit: unit:
name: Unit tests (backend)
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
node-version: [20.16.0] node-version: [22.11.0]
services: services:
postgres: postgres:
@ -44,9 +51,22 @@ jobs:
- name: Install pnpm - name: Install pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Install FFmpeg - name: Install FFmpeg
uses: FedericoCarboni/setup-ffmpeg@v3 run: |
for i in {1..3}; do
echo "Attempt $i: Installing FFmpeg..."
curl -s -L https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz -o ffmpeg.tar.xz && \
tar -xf ffmpeg.tar.xz && \
mv ffmpeg-*-static/ffmpeg /usr/local/bin/ && \
mv ffmpeg-*-static/ffprobe /usr/local/bin/ && \
rm -rf ffmpeg.tar.xz ffmpeg-*-static/ && \
break || sleep 10
if [ $i -eq 3 ]; then
echo "Failed to install FFmpeg after 3 attempts"
exit 1
fi
done
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4.0.4 uses: actions/setup-node@v4.1.0
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
cache: 'pnpm' cache: 'pnpm'
@ -61,17 +81,18 @@ jobs:
- name: Test - name: Test
run: pnpm --filter backend test-and-coverage run: pnpm --filter backend test-and-coverage
- name: Upload to Codecov - name: Upload to Codecov
uses: codecov/codecov-action@v4 uses: codecov/codecov-action@v5
with: with:
token: ${{ secrets.CODECOV_TOKEN }} token: ${{ secrets.CODECOV_TOKEN }}
files: ./packages/backend/coverage/coverage-final.json files: ./packages/backend/coverage/coverage-final.json
e2e: e2e:
name: E2E tests (backend)
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
node-version: [20.16.0] node-version: [22.11.0]
services: services:
postgres: postgres:
@ -93,7 +114,7 @@ jobs:
- name: Install pnpm - name: Install pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4.0.4 uses: actions/setup-node@v4.1.0
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
cache: 'pnpm' cache: 'pnpm'
@ -108,7 +129,7 @@ jobs:
- name: Test - name: Test
run: pnpm --filter backend test-and-coverage:e2e run: pnpm --filter backend test-and-coverage:e2e
- name: Upload to Codecov - name: Upload to Codecov
uses: codecov/codecov-action@v4 uses: codecov/codecov-action@v5
with: with:
token: ${{ secrets.CODECOV_TOKEN }} token: ${{ secrets.CODECOV_TOKEN }}
files: ./packages/backend/coverage/coverage-final.json files: ./packages/backend/coverage/coverage-final.json

View file

@ -15,12 +15,16 @@ on:
- packages/misskey-js/** - packages/misskey-js/**
- .github/workflows/test-federation.yml - .github/workflows/test-federation.yml
env:
COREPACK_DEFAULT_TO_LATEST: 0
jobs: jobs:
test: test:
name: Federation test
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
node-version: [20.16.0] node-version: [22.11.0]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with: with:
@ -28,9 +32,22 @@ jobs:
- name: Install pnpm - name: Install pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Install FFmpeg - name: Install FFmpeg
uses: FedericoCarboni/setup-ffmpeg@v3 run: |
for i in {1..3}; do
echo "Attempt $i: Installing FFmpeg..."
curl -s -L https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz -o ffmpeg.tar.xz && \
tar -xf ffmpeg.tar.xz && \
mv ffmpeg-*-static/ffmpeg /usr/local/bin/ && \
mv ffmpeg-*-static/ffprobe /usr/local/bin/ && \
rm -rf ffmpeg.tar.xz ffmpeg-*-static/ && \
break || sleep 10
if [ $i -eq 3 ]; then
echo "Failed to install FFmpeg after 3 attempts"
exit 1
fi
done
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4.0.3 uses: actions/setup-node@v4.1.0
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
cache: 'pnpm' cache: 'pnpm'

View file

@ -12,6 +12,7 @@ on:
# for e2e # for e2e
- packages/backend/** - packages/backend/**
- .github/workflows/test-frontend.yml - .github/workflows/test-frontend.yml
- .github/misskey/test.yml
pull_request: pull_request:
paths: paths:
- packages/frontend/** - packages/frontend/**
@ -20,13 +21,19 @@ on:
# for e2e # for e2e
- packages/backend/** - packages/backend/**
- .github/workflows/test-frontend.yml - .github/workflows/test-frontend.yml
- .github/misskey/test.yml
env:
COREPACK_DEFAULT_TO_LATEST: 0
jobs: jobs:
vitest: vitest:
name: Unit tests (frontend)
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
node-version: [20.16.0] node-version: [22.11.0]
steps: steps:
- uses: actions/checkout@v4.1.1 - uses: actions/checkout@v4.1.1
@ -35,7 +42,7 @@ jobs:
- name: Install pnpm - name: Install pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4.0.4 uses: actions/setup-node@v4.1.0
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
cache: 'pnpm' cache: 'pnpm'
@ -50,18 +57,19 @@ jobs:
- name: Test - name: Test
run: pnpm --filter frontend test-and-coverage run: pnpm --filter frontend test-and-coverage
- name: Upload Coverage - name: Upload Coverage
uses: codecov/codecov-action@v4 uses: codecov/codecov-action@v5
with: with:
token: ${{ secrets.CODECOV_TOKEN }} token: ${{ secrets.CODECOV_TOKEN }}
files: ./packages/frontend/coverage/coverage-final.json files: ./packages/frontend/coverage/coverage-final.json
e2e: e2e:
name: E2E tests (frontend)
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
node-version: [20.16.0] node-version: [22.11.0]
browser: [chrome] browser: [chrome]
services: services:
@ -90,7 +98,7 @@ jobs:
- name: Install pnpm - name: Install pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4.0.4 uses: actions/setup-node@v4.1.0
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
cache: 'pnpm' cache: 'pnpm'

View file

@ -14,14 +14,19 @@ on:
paths: paths:
- packages/misskey-js/** - packages/misskey-js/**
- .github/workflows/test-misskey-js.yml - .github/workflows/test-misskey-js.yml
env:
COREPACK_DEFAULT_TO_LATEST: 0
jobs: jobs:
test: test:
name: Unit tests (misskey.js)
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
node-version: [20.16.0] node-version: [22.11.0]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/ # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps: steps:
@ -31,7 +36,7 @@ jobs:
- run: corepack enable - run: corepack enable
- name: Setup Node.js ${{ matrix.node-version }} - name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4.0.4 uses: actions/setup-node@v4.1.0
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
cache: 'pnpm' cache: 'pnpm'
@ -51,7 +56,7 @@ jobs:
CI: true CI: true
- name: Upload Coverage - name: Upload Coverage
uses: codecov/codecov-action@v4 uses: codecov/codecov-action@v5
with: with:
token: ${{ secrets.CODECOV_TOKEN }} token: ${{ secrets.CODECOV_TOKEN }}
files: ./packages/misskey-js/coverage/coverage-final.json files: ./packages/misskey-js/coverage/coverage-final.json

View file

@ -9,14 +9,16 @@ on:
env: env:
NODE_ENV: production NODE_ENV: production
COREPACK_DEFAULT_TO_LATEST: 0
jobs: jobs:
production: production:
name: Production build
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
node-version: [20.16.0] node-version: [22.11.0]
steps: steps:
- uses: actions/checkout@v4.1.1 - uses: actions/checkout@v4.1.1
@ -25,7 +27,7 @@ jobs:
- name: Install pnpm - name: Install pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4.0.4 uses: actions/setup-node@v4.1.0
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
cache: 'pnpm' cache: 'pnpm'

View file

@ -1,4 +1,4 @@
name: Test (backend) name: api.json validation
on: on:
push: push:
@ -12,13 +12,17 @@ on:
paths: paths:
- packages/backend/** - packages/backend/**
- .github/workflows/validate-api-json.yml - .github/workflows/validate-api-json.yml
env:
COREPACK_DEFAULT_TO_LATEST: 0
jobs: jobs:
validate-api-json: validate-api-json:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
node-version: [20.16.0] node-version: [22.11.0]
steps: steps:
- uses: actions/checkout@v4.1.1 - uses: actions/checkout@v4.1.1
@ -27,7 +31,7 @@ jobs:
- name: Install pnpm - name: Install pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4.0.4 uses: actions/setup-node@v4.1.0
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
cache: 'pnpm' cache: 'pnpm'

2
.gitignore vendored
View file

@ -68,6 +68,8 @@ misskey-assets
# Vite temporary files # Vite temporary files
vite.config.js.timestamp-* vite.config.js.timestamp-*
vite.config.ts.timestamp-* vite.config.ts.timestamp-*
vite.config.local-dev.js.timestamp-*
vite.config.local-dev.ts.timestamp-*
# blender backups # blender backups
*.blend1 *.blend1

View file

@ -1 +1 @@
20.16.0 22.11.0

View file

@ -1,6 +0,0 @@
build:
misskey:
args:
- NODE_ENV=development
deploy:
- helm upgrade --install misskey chart --set image=${OKTETO_BUILD_MISSKEY_IMAGE} --set url="https://misskey-$(kubectl config view --minify -o jsonpath='{..namespace}').cloud.okteto.net" --set environment=development

View file

@ -1,8 +1,165 @@
## 2024.10.2 ## 2025.2.0-yumechinokuni.1
- Security: Revert miskey-dev/misskey#14897
- Security: AP請求を外部ドメーンにリダイレクトしないように
## 2025.2.0
### General
- Fix: Docker のビルドに失敗する問題を修正
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/883)
### Client
- Fix: パスキーでパスワードレスログインが出来ない問題を修正
- Fix: 一部環境でセンシティブなファイルを含むノートの非表示が効かない問題
- Fix: データセーバー有効時にもユーザーページの「ファイル」タブで画像が読み込まれてしまう問題を修正
- Fix: MFMの `sparkle` エフェクトが正しく表示されない問題を修正
- Fix: ページのURLにスラッシュが含まれている場合にページが正しく表示されない問題を修正
- Fix: デッキのプロファイルが新規作成できない問題を修正
- Fix: セキュリティに関する修正
- ローカライゼーションの更新
- Playが実装されたため、ページ機能の「ソースを見る」は削除されました
### Server
- Enhance: ページのURLに使用可能な文字を限定するように
- Fix: 個別お知らせページのmetaタグ出力の条件が間違っていたのを修正
## 2025.1.0
### Note
- [重要] ート検索プロバイダの追加に伴い、configファイルdefault.ymlなどの構成が少し変わります.
- 新しい設定項目"fulltextSearch.provider"が追加されました. sqlLike, sqlPgroonga, meilisearchのいずれかを設定出来ます.
- すでにMeilisearchをお使いの場合、 **"fulltextSearch.provider"を"meilisearch"に設定する必要** があります.
- 詳細は #14730 および `.config/example.yml` または `.config/docker_example.yml`の'Fulltext search configuration'をご参照願います.
- 【開発者向け】従来の開発モードでHMRが機能しない問題が修正されたため、バックエンド・フロントエンド分離型の開発モードが削除されました。開発環境においてconfigの変更が必要となる可能性があります。
### General
- Feat: カスタム絵文字管理画面をリニューアル #10996
* β版として公開のため、旧画面も引き続き利用可能です
### Client
- Enhance: PC画面でチャンネルが複数列で表示されるように
(Cherry-picked from https://github.com/Otaku-Social/maniakey/pull/13)
- Enhance: 照会に失敗した場合、その理由を表示するように
- Enhance: ワードミュートで検知されたワードを表示できるように
- Enhance: リモートのノートのリンクをコピーできるように
- Enhance: 連合がホワイトリスト化・無効化されているサーバー向けのデザイン修正
- Enhance: AiScriptのセーブデータを明示的に削除する関数`Mk:remove`を追加
- Enhance: ノートの添付ファイルを一覧で遡れる「ファイル」タブを追加
(Based on https://github.com/Otaku-Social/maniakey/pull/14)
- Enhance: AiScriptの拡張API関数において引数の型チェックをより厳格に
- Enhance: クエリパラメータでuiを一時的に変更できるように #15240
- Enhance: リモート絵文字のインポート時に詳細を確認できるように #15336
- Fix: 画面サイズが変わった際にナビゲーションバーが自動で折りたたまれない問題を修正
- Fix: サーバー情報メニューに区切り線が不足していたのを修正
- Fix: ノートがログインしているユーザーしか見れない場合にログインダイアログを閉じるとその後の動線がなくなる問題を修正
- Fix: 公開範囲がホームのノートの埋め込みウィジェットが読み込まれない問題を修正
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/803)
- Fix: 絵文字管理画面で一部の絵文字が表示されない問題を修正
- Fix: プラグイン `register_note_view_interruptor` でノートのサーバー情報の書き換えができない問題を修正
- Fix: Botプロテクションの設定変更時は実際に検証を通過しないと保存できないように( #15137 )
- Fix: ノート検索が使用できない場合でもチャンネルのノート検索欄がでていた問題を修正
- Fix: `Ui:C:select`で値の変更が画面に反映されない問題を修正
- Fix: MiAuth認可画面で、認可処理に失敗した場合でもコールバックURLに遷移してしまう問題を修正
(Cherry-picked from https://github.com/TeamNijimiss/misskey/commit/800359623e41a662551d774de15b0437b6849bb4)
- Fix: ノート作成画面でファイルの添付可能個数を超えてもノートボタンが押せていた問題を修正
- Fix: 「アカウントを管理」画面で、ユーザー情報の取得に失敗したアカウント(削除されたアカウントなど)が表示されない問題を修正
- Fix: MacOSでChrome系ブラウザを使用している場合に、Misskeyを閉じた際に他のタブのオーディオ機能と干渉する問題を修正
- Fix: 言語データのキャッシュ状況によっては、埋め込みウィジェットが正しく起動しない問題を修正
- Fix: 「削除して編集」でノートの引用を解除出来なかった問題を修正( #14476 )
- Fix: RSSウィジェットが正しく表示されない問題を修正
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/857)
- Fix: ワードミュートの保存失敗時にAPIエラーが握りつぶされる事があるのを修正
- Fix: アンケートでリモートの絵文字が正しく描画できない問題の修正
(Cherry-picked from https://github.com/yojo-art/cherrypick/pull/153)
- Fix: 非ログイン時のサーバー概要画面のメニューボタンが押せないことがあるのを修正
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/656)
- Fix: URLにはじめから`#pswp`が含まれている場合に画像ビューワーがブラウザの戻るボタンで閉じられない問題を修正
- Fix: ロール作成画面で設定できるアイコンデコレーションの最大取付個数を16に制限
- Fix: Firefox Nightlyなどでアイコンが読み込めない問題を修正
### Server
- Enhance: pg_bigmが利用できるよう、ートの検索をILIKE演算子でなくLIKE演算子でLOWER()をかけたテキストに対して行うように
- Enhance: ート検索の選択肢としてpgroongaに対応 ( #14730 )
- Enhance: チャート更新時にDBに同時接続しないように
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/830)
- Enhance: config(default.yml)からSQLログ全文を出力するか否かを設定可能に ( #15266 )
- Fix: ユーザーのプロフィール画面をアドレス入力などで直接表示した際に概要タブの描画に失敗する問題の修正( #15032 )
- Fix: 起動前の疎通チェックが機能しなくなっていた問題を修正
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/737)
- Fix: ートの閲覧にログイン必須にしてもFeedでートが表示されてしまう問題を修正
- Fix: 絵文字の連合でライセンス欄を相互にやり取りするように ( #10859, #14109 )
- Fix: ロックダウンされた期間指定のートがStreaming経由でLTLに出現するのを修正 ( #15200 )
- Fix: disableClustering設定時の初期化ロジックを調整( #15223 )
- Fix: URLとURIが異なるエンティティの照会に失敗する問題を修正( #15039 )
- Fix: ActivityPubリクエストかどうかの判定が正しくない問題を修正
(Cherry-picked from https://github.com/MisskeyIO/misskey/pull/869)
- Fix: `/api/pages/update`にて`name`を指定せずにリクエストするとエラーが発生する問題を修正
- Fix: AIセンシティブ判定が arm64 環境で動作しない問題を修正
- Fix: 非Misskey系のソフトウェアからHTML`<ruby>`タグを含むートを受信した場合、MFMの読み仮名ルビ文法に変換して表示
- Fix: 連合OFFで投稿されたートに対する冗長な処理を抑止 ( #15018 )
- Fix: `/api.json`のレスポンスが2回目のリクエスト以降おかしくなる問題を修正
## 2024.11.0-yumechinokuni.8
- Frontend: SSRでユーザープロフィールが表示されない問題を修正
- Security: SSRプライバシー方面の改善
- Security: AP Payloadの検証を強化
## 2024.11.0-yumechinokuni.7
- Misskey Trademark内容をWebUIから削除
- Service Worker キャッシュが正しく動作しない問題を修正
## 2024.11.0-yumechinokuni.6
- Upstream: 2024.11.0-alpha.4 タッグをマージする
- Performance: EmojiのリクエストをProxyでキャッシュするように
- Performance: Service Workerのキャッシュを最適化
- Security: AP Payloadの検証を強化
- Security: Image/Video Processorはドライブ機能だけを使うように
## 2024.11.0-yumechinokuni.5
- Upstream: 2024.11.0-alpha.2 タッグをマージする
- Reliability: Activitypub event deduplication
- DevOps: Prometheus サーバーメトリクス
- Enhance: ハッシュタグランギングを改善
- Enhance: PgroongaのCWサーチ + パフォーマンス改善
## 2024.11.0-yumechinokuni.4
- Upstream: 2024.11.0-alpha.1 タッグをマージする
- DevOps: 管理者アクセストークンがユーザー登録できるようになる (write:admin:create-account)
- Frontend: Stream再接続ロジックdata raceを修正
- Security: CSPにCDNなどの外部ホストはホワイトリストできるように
### 2024.11.0-yumechinokuni.4p1
PgroongaのCWサーチ (github.com/paricafe/misskey#d30db97b59d264450901c1dd86808dcb43875ea9)
### 2024.11.0-yumechinokuni.4p2
- fix(backend): アナウンスメントを作成ときにWebUIフォームの画像URLを後悔できないのを修正 (/admin/announcement/create)
## 2024.11.0-yumechinokuni.3
- Security: CSPの設定を強化
- Fix: flaky testの修正
## 2024.11.0
### Note
- Node.js 20.xは非推奨になりました。Node.js 22.x (LTS)の利用を推奨します。
- なお、Node.js 23.xは対応していません。
- DockerのNode.jsが22.11.0に更新されました
### General ### General
- Feat: コンテンツの表示にログインを必須にできるように - Feat: コンテンツの表示にログインを必須にできるように
- Feat: 過去のノートを非公開化/フォロワーのみ表示可能にできるように - Feat: 過去のノートを非公開化/フォロワーのみ表示可能にできるように
- Enhance: 依存関係の更新
- Enhance: l10nの更新
- Fix: お知らせ作成時に画像URL入力欄を空欄に変更できないのを修正 ( #14976 )
### Client ### Client
- Enhance: Bull DashboardでRelationship Queueの状態も確認できるように - Enhance: Bull DashboardでRelationship Queueの状態も確認できるように
@ -17,20 +174,35 @@
- Enhance: Self-XSS防止用の警告を追加 - Enhance: Self-XSS防止用の警告を追加
- Enhance: カタルーニャ語 (ca-ES) に対応 - Enhance: カタルーニャ語 (ca-ES) に対応
- Enhance: 個別お知らせページではMetaタグを出力するように - Enhance: 個別お知らせページではMetaタグを出力するように
- Enhance: ノート詳細画面にロールのバッジを表示
- Enhance: 過去に送信したフォローリクエストを確認できるように
(Based on https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/663)
- Enhance: サイドバーを簡単に展開・折りたたみできるように ( #14981 )
- Enhance: リノートメニューに「リノートの詳細」を追加
- Enhance: 非ログイン状態でMisskeyを開いた際のパフォーマンスを向上
- Fix: 通知の範囲指定の設定項目が必要ない通知設定でも範囲指定の設定がでている問題を修正 - Fix: 通知の範囲指定の設定項目が必要ない通知設定でも範囲指定の設定がでている問題を修正
- Fix: Turnstileが失敗・期限切れした際にも成功扱いとなってしまう問題を修正 - Fix: Turnstileが失敗・期限切れした際にも成功扱いとなってしまう問題を修正
(Cherry-picked from https://github.com/MisskeyIO/misskey/pull/768) (Cherry-picked from https://github.com/MisskeyIO/misskey/pull/768)
- Fix: デッキのタイムラインカラムで「センシティブなファイルを含むノートを表示」設定が使用できなかった問題を修正 - Fix: デッキのタイムラインカラムで「センシティブなファイルを含むノートを表示」設定が使用できなかった問題を修正
- Fix: Encode RSS urls with escape sequences before fetching allowing query parameters to be used - Fix: Encode RSS urls with escape sequences before fetching allowing query parameters to be used
- Fix: リンク切れを修正 - Fix: リンク切れを修正
= Fix: ノート投稿ボタンにホバー時のスタイルが適用されていないのを修正 - Fix: ノート投稿ボタンにホバー時のスタイルが適用されていないのを修正
(Cherry-picked from https://github.com/taiyme/misskey/pull/305) (Cherry-picked from https://github.com/taiyme/misskey/pull/305)
- Fix: メールアドレス登録有効化時の「完了」ダイアログボックスの表示条件を修正
- Fix: 画面幅が狭い環境でデザインが崩れる問題を修正
(Cherry-picked from https://github.com/MisskeyIO/misskey/pull/815)
- Fix: TypeScriptの型チェック対象ファイルを限定してビルドを高速化するように
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/725)
### Server ### Server
- Enhance: DockerのNode.jsを22.11.0に更新
- Enhance: 起動前の疎通チェックで、DBとメイン以外のRedisの疎通確認も行うように - Enhance: 起動前の疎通チェックで、DBとメイン以外のRedisの疎通確認も行うように
(Based on https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/588) (Based on https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/588)
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/715) (Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/715)
- fix(backend): フォロワーへのメッセージの絵文字をemojisに含めるように - Enhance: リモートユーザーの照会をオリジナルにリダイレクトするように
- Fix: sharedInboxが無いActorに紐づくリモートユーザーを照会できない
- Fix: Aproving request from GtS appears with some delay
- Fix: フォロワーへのメッセージの絵文字をemojisに含めるように
- Fix: Nested proxy requestsを検出した際にブロックするように - Fix: Nested proxy requestsを検出した際にブロックするように
[ghsa-gq5q-c77c-v236](https://github.com/misskey-dev/misskey/security/advisories/ghsa-gq5q-c77c-v236) [ghsa-gq5q-c77c-v236](https://github.com/misskey-dev/misskey/security/advisories/ghsa-gq5q-c77c-v236)
- Fix: 招待コードの発行可能な残り数算出に使用すべきロールポリシーの値が違う問題を修正 - Fix: 招待コードの発行可能な残り数算出に使用すべきロールポリシーの値が違う問題を修正
@ -41,7 +213,6 @@
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/712) (Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/712)
- Fix: FTT無効時にユーザーリストタイムラインが使用できない問題を修正 - Fix: FTT無効時にユーザーリストタイムラインが使用できない問題を修正
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/709) (Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/709)
- Enhance: リモートユーザーの照会をオリジナルにリダイレクトするように
### Misskey.js ### Misskey.js
- Fix: Stream初期化時、別途WebSocketを指定する場合の型定義を修正 - Fix: Stream初期化時、別途WebSocketを指定する場合の型定義を修正

View file

@ -85,6 +85,7 @@ Be willing to comment on the good points and not just the things you want fixed
読んでおくといいやつ 読んでおくといいやつ
- https://blog.lacolaco.net/posts/1e2cf439b3c2/ - https://blog.lacolaco.net/posts/1e2cf439b3c2/
- https://konifar-zatsu.hatenadiary.jp/entry/2024/11/05/192421
### Review perspective ### Review perspective
- Scope - Scope
@ -100,6 +101,22 @@ Be willing to comment on the good points and not just the things you want fixed
- Are there any omissions or gaps? - Are there any omissions or gaps?
- Does it check for anomalies? - Does it check for anomalies?
## Security Advisory
### For reporter
Thank you for your reporting!
If you can also create a patch to fix the vulnerability, please create a PR on the private fork.
> [!note]
> There is a GitHub bug that prevents merging if a PR not following the develop branch of upstream, so please keep follow the develop branch.
### For misskey-dev member
修正PRがdevelopに追従されていないとマージできないので、マージできなかったら
> Could you merge or rebase onto upstream develop branch?
などと伝える。
## Deploy ## Deploy
The `/deploy` command by issue comment can be used to deploy the contents of a PR to the preview environment. The `/deploy` command by issue comment can be used to deploy the contents of a PR to the preview environment.
``` ```
@ -180,25 +197,10 @@ pnpm dev
command. command.
- Server-side source files and automatically builds them if they are modified. Automatically start the server process(es). - Server-side source files and automatically builds them if they are modified. Automatically start the server process(es).
- Vite HMR (just the `vite` command) is available. The behavior may be different from production.
- Service Worker is watched by esbuild. - Service Worker is watched by esbuild.
- The front end can be viewed by accessing `http://localhost:5173`. - Vite HMR (just the `vite` command) is available. The behavior may be different from production.
- The backend listens on the port configured with `port` in .config/default.yml. - Vite runs behind the backend (the backend will proxy Vite at /vite and /embed_vite except for websocket used for HMR).
If you have not changed it from the default, it will be "http://localhost:3000".
If "port" in .config/default.yml is set to something other than 3000, you need to change the proxy settings in packages/frontend/vite.config.local-dev.ts.
### `MK_DEV_PREFER=backend pnpm dev`
pnpm dev has another mode with `MK_DEV_PREFER=backend`.
```
MK_DEV_PREFER=backend pnpm dev
```
- This mode is closer to the production environment than the default mode.
- Vite runs behind the backend (the backend will proxy Vite at /vite).
- You can see Misskey by accessing `http://localhost:3000` (Replace `3000` with the port configured with `port` in .config/default.yml). - You can see Misskey by accessing `http://localhost:3000` (Replace `3000` with the port configured with `port` in .config/default.yml).
- To change the port of Vite, specify with `VITE_PORT` environment variable.
- HMR may not work in some environments such as Windows.
## Testing ## Testing
You can run non-backend tests by executing following commands: You can run non-backend tests by executing following commands:
@ -474,6 +476,11 @@ describe('test', () => {
コード上でMisskeyのドメイン固有の概念には`Mi`をprefixすることで、他のドメインの同様の概念と区別できるほか、名前の衝突を防ぐ。 コード上でMisskeyのドメイン固有の概念には`Mi`をprefixすることで、他のドメインの同様の概念と区別できるほか、名前の衝突を防ぐ。
ただし、文脈上Misskeyのものを指すことが明らかであり、名前の衝突の恐れがない場合は、一時的なローカル変数に限って`Mi`を省略してもよい。 ただし、文脈上Misskeyのものを指すことが明らかであり、名前の衝突の恐れがない場合は、一時的なローカル変数に限って`Mi`を省略してもよい。
### Misskey.jsの型生成
```bash
pnpm build-misskey-js-with-types
```
### How to resolve conflictions occurred at pnpm-lock.yaml? ### How to resolve conflictions occurred at pnpm-lock.yaml?
Just execute `pnpm` to fix it. Just execute `pnpm` to fix it.

View file

@ -1,5 +1,5 @@
Unless otherwise stated this repository is Unless otherwise stated this repository is
Copyright © 2014-2024 syuilo and contributors Copyright © 2014-2025 syuilo and contributors
And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE. And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE.

View file

@ -1,11 +1,13 @@
# syntax = docker/dockerfile:1.4 # syntax = docker/dockerfile:1.4
ARG NODE_VERSION=20.16.0-bullseye ARG NODE_VERSION=22.11.0-bookworm
# build assets & compile TypeScript # build assets & compile TypeScript
FROM --platform=$BUILDPLATFORM node:${NODE_VERSION} AS native-builder FROM --platform=$BUILDPLATFORM node:${NODE_VERSION} AS native-builder
ENV COREPACK_DEFAULT_TO_LATEST=0
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \
rm -f /etc/apt/apt.conf.d/docker-clean \ rm -f /etc/apt/apt.conf.d/docker-clean \
@ -44,6 +46,8 @@ RUN rm -rf .git/
FROM --platform=$TARGETPLATFORM node:${NODE_VERSION} AS target-builder FROM --platform=$TARGETPLATFORM node:${NODE_VERSION} AS target-builder
ENV COREPACK_DEFAULT_TO_LATEST=0
RUN apt-get update \ RUN apt-get update \
&& apt-get install -yqq --no-install-recommends \ && apt-get install -yqq --no-install-recommends \
build-essential build-essential
@ -68,6 +72,7 @@ FROM --platform=$TARGETPLATFORM node:${NODE_VERSION}-slim AS runner
ARG UID="991" ARG UID="991"
ARG GID="991" ARG GID="991"
ENV COREPACK_DEFAULT_TO_LATEST=0
RUN apt-get update \ RUN apt-get update \
&& apt-get install -y --no-install-recommends \ && apt-get install -y --no-install-recommends \

View file

@ -1,49 +1,31 @@
<div align="center"> # ゆめちのくに
<a href="https://misskey-hub.net">
<img src="./assets/title_float.svg" alt="Misskey logo" style="border-radius:50%" width="300"/>
</a>
**🌎 **Misskey** is an open source, federated social media platform that's free forever! 🚀** YumechiNoKuni is a fork of Misskey, with a focus on security, observability and reliability.
[Learn more](https://misskey-hub.net/) [mi.yumechi.jp](https://mi.yumechi.jp) is running this version.
--- [Learn more about Misskey](https://misskey-hub.net/)
<a href="https://misskey-hub.net/servers/"> ## Main differences
<img src="https://custom-icon-badges.herokuapp.com/badge/find_an-instance-acea31?logoColor=acea31&style=for-the-badge&logo=misskey&labelColor=363B40" alt="find an instance"/></a>
<a href="https://misskey-hub.net/docs/for-admin/install/guides/"> ### Unique features
<img src="https://custom-icon-badges.herokuapp.com/badge/create_an-instance-FBD53C?logoColor=FBD53C&style=for-the-badge&logo=server&labelColor=363B40" alt="create an instance"/></a>
<a href="./CONTRIBUTING.md"> - Strict ActivityPub sanitization by whitelisting properties and normalizing all referential properties.
<img src="https://custom-icon-badges.herokuapp.com/badge/become_a-contributor-A371F7?logoColor=A371F7&style=for-the-badge&logo=git-merge&labelColor=363B40" alt="become a contributor"/></a> - Strict Content Security Policy.
- Require TLSv1.2+ over port 443 for all ActivityPub requests.
- Strongly-typed inbox filtering in Rust.
- Reduce needless retries by marking more errors as permanent.
- Detailed prometheus metrics for slow requests, DB queries, AP processing, failed auths, etc.
- Disable unauthenticated media processing and use custom AppArmored media proxy.
- Enable active users in nodeinfo back.
- Advertise Git information over nodeinfo for better observability and easy tracking of the actual code running.
- Logical replication for the database over mTLS.
- More atomic operations in API handlers.
<a href="https://discord.gg/Wp8gVStHW3"> ### Picked from github.com/paricafe/misskey
<img src="https://custom-icon-badges.herokuapp.com/badge/join_the-community-5865F2?logoColor=5865F2&style=for-the-badge&logo=discord&labelColor=363B40" alt="join the community"/></a>
<a href="https://www.patreon.com/syuilo"> - pgroonga full-text search (with modifications).
<img src="https://custom-icon-badges.herokuapp.com/badge/become_a-patron-F96854?logoColor=F96854&style=for-the-badge&logo=patreon&labelColor=363B40" alt="become a patron"/></a> - Better Service Worker caching.
- Better hashtag statistics.
- Better handling of deep recursive AP objects.
</div>
## Thanks
<a href="https://sentry.io/"><img src="https://github.com/misskey-dev/misskey/assets/4439005/98576556-222f-467a-94be-e98dbda1d852" height="30" alt="Sentry" /></a>
Thanks to [Sentry](https://sentry.io/) for providing the error tracking platform that helps us catch unexpected errors.
<a href="https://www.chromatic.com/"><img src="https://user-images.githubusercontent.com/321738/84662277-e3db4f80-af1b-11ea-88f5-91d67a5e59f6.png" height="30" alt="Chromatic" /></a>
Thanks to [Chromatic](https://www.chromatic.com/) for providing the visual testing platform that helps us review UI changes and catch visual regressions.
<a href="https://about.codecov.io/for/open-source/"><img src="https://about.codecov.io/wp-content/themes/codecov/assets/brand/sentry-cobranding/logos/codecov-by-sentry-logo.svg" height="30" alt="Codecov" /></a>
Thanks to [Codecov](https://about.codecov.io/for/open-source/) for providing the code coverage platform that helps us improve our test coverage.
<a href="https://crowdin.com/"><img src="https://user-images.githubusercontent.com/20679825/230709597-1299a011-171a-4294-a91e-355a9b37c672.svg" height="30" alt="Crowdin" /></a>
Thanks to [Crowdin](https://crowdin.com/) for providing the localization platform that helps us translate Misskey into many languages.
<a href="https://hub.docker.com/"><img src="https://user-images.githubusercontent.com/20679825/230148221-f8e73a32-a49b-47c3-9029-9a15c3824f92.png" height="30" alt="Docker" /></a>
Thanks to [Docker](https://hub.docker.com/) for providing the container platform that helps us run Misskey in production.

View file

@ -1,8 +1,17 @@
# Reporting Security Issues # Reporting Security Issues
If you discover a security issue in Misskey, please report it by **[this form](https://github.com/misskey-dev/misskey/security/advisories/new)**. If you discover a security issue in this project, please use the `git blame` command to identify the source of the issue,
if it was introduced by this fork please contact me at secity<at>yumechi.jp.
This will allow us to assess the risk, and make a fix available before we add a For upstream issues please report by **[this form](https://github.com/misskey-dev/misskey/security/advisories/new)**.
bug report to the GitHub repository.
Thanks for helping make Misskey safe for everyone. Thanks for helping make YumechiNoKuni safe for everyone.
> [!note]
> CNA [requires](https://www.cve.org/ResourcesSupport/AllResources/CNARules#section_5-2_Description) that CVEs include a description in English for inclusion in the CVE Catalog.
>
> When creating a security advisory, all content must be written in English (it is acceptable to include a non-English description along with the English one).
## When create a patch
If you can also create a patch to fix the vulnerability, please send a diff file with the report.

View file

@ -64,6 +64,7 @@ services:
restart: always restart: always
image: l1drm/postgres-pgroonga:alpine-15-znver4 image: l1drm/postgres-pgroonga:alpine-15-znver4
user: "${MISSKEY_UID}:${MISSKEY_GID}" user: "${MISSKEY_UID}:${MISSKEY_GID}"
shm_size: 2gb
networks: networks:
- internal_network - internal_network
env_file: env_file:

View file

@ -343,7 +343,6 @@ enableLocalTimeline: "تفعيل الخيط المحلي"
enableGlobalTimeline: "تفعيل الخيط الزمني الشامل" enableGlobalTimeline: "تفعيل الخيط الزمني الشامل"
disablingTimelinesInfo: "سيتمكن المديرون والمشرفون من الوصول إلى كل الخيوط الزمنية حتى وإن لم تفعّل." disablingTimelinesInfo: "سيتمكن المديرون والمشرفون من الوصول إلى كل الخيوط الزمنية حتى وإن لم تفعّل."
registration: "إنشاء حساب" registration: "إنشاء حساب"
enableRegistration: "تفعيل إنشاء الحسابات الجديدة"
invite: "دعوة" invite: "دعوة"
driveCapacityPerLocalAccount: "حصة التخزين لكل مستخدم محلي" driveCapacityPerLocalAccount: "حصة التخزين لكل مستخدم محلي"
driveCapacityPerRemoteAccount: "حصة التخزين لكل مستخدم بعيد" driveCapacityPerRemoteAccount: "حصة التخزين لكل مستخدم بعيد"
@ -1461,9 +1460,6 @@ _pages:
newPage: "أنشئ صفحة جديدة" newPage: "أنشئ صفحة جديدة"
editPage: "عدّل الصفحة" editPage: "عدّل الصفحة"
readPage: "نُشّط عرض المصدر" readPage: "نُشّط عرض المصدر"
created: "نجح إنشاء الصفحة"
updated: "نجح تعديل الصفحة"
deleted: "نجح حذف الصفحة"
pageSetting: "إعدادات الصفحة" pageSetting: "إعدادات الصفحة"
nameAlreadyExists: "رابط الصفحة موجود مسبقًا" nameAlreadyExists: "رابط الصفحة موجود مسبقًا"
invalidNameTitle: "رابط الصفحة ليس صالحًا" invalidNameTitle: "رابط الصفحة ليس صالحًا"
@ -1585,3 +1581,6 @@ _reversi:
_offlineScreen: _offlineScreen:
title: "غير متصل - يتعذر الاتصال بالخادم" title: "غير متصل - يتعذر الاتصال بالخادم"
header: "يتعذر الاتصال بالخادم" header: "يتعذر الاتصال بالخادم"
_remoteLookupErrors:
_noSuchObject:
title: "غير موجود"

View file

@ -339,7 +339,6 @@ enableLocalTimeline: "স্থানীয় টাইমলাইন চাল
enableGlobalTimeline: "গ্লোবাল টাইমলাইন চালু করুন" enableGlobalTimeline: "গ্লোবাল টাইমলাইন চালু করুন"
disablingTimelinesInfo: "আপনি এই টাইমলাইনগুলি বন্ধ করলেও প্রশাসক এবং মডারেটররা এই টাইমলাইনগুলি ব্যাবহার করতে পারবে" disablingTimelinesInfo: "আপনি এই টাইমলাইনগুলি বন্ধ করলেও প্রশাসক এবং মডারেটররা এই টাইমলাইনগুলি ব্যাবহার করতে পারবে"
registration: "নিবন্ধন" registration: "নিবন্ধন"
enableRegistration: "নতুন ব্যাবহারকারী নিবন্ধন চালু করুন"
invite: "আমন্ত্রণ" invite: "আমন্ত্রণ"
driveCapacityPerLocalAccount: "প্রত্যেক স্থানীয় ব্যাবহারকারীর জন্য ড্রাইভের জায়গা" driveCapacityPerLocalAccount: "প্রত্যেক স্থানীয় ব্যাবহারকারীর জন্য ড্রাইভের জায়গা"
driveCapacityPerRemoteAccount: "প্রত্যেক রিমোট ব্যাবহারকারীর জন্য ড্রাইভের জায়গা" driveCapacityPerRemoteAccount: "প্রত্যেক রিমোট ব্যাবহারকারীর জন্য ড্রাইভের জায়গা"
@ -1238,9 +1237,6 @@ _pages:
newPage: "নতুন পৃষ্ঠা বানান" newPage: "নতুন পৃষ্ঠা বানান"
editPage: "পৃষ্ঠাটি সম্পাদনা করুন" editPage: "পৃষ্ঠাটি সম্পাদনা করুন"
readPage: "উৎস দেখছেন" readPage: "উৎস দেখছেন"
created: "পৃষ্ঠা তৈরি করা হয়েছে"
updated: "পৃষ্ঠা সম্পাদনা করা হয়েছে"
deleted: "পৃষ্ঠা মুছে ফেলা হয়েছে"
pageSetting: "পৃষ্ঠার সেটিংস" pageSetting: "পৃষ্ঠার সেটিংস"
nameAlreadyExists: "পৃষ্ঠার URLটি ইতিমধ্যেই ব্যাবহার করা হয়েছে" nameAlreadyExists: "পৃষ্ঠার URLটি ইতিমধ্যেই ব্যাবহার করা হয়েছে"
invalidNameTitle: "পৃষ্ঠার URL অবৈধ" invalidNameTitle: "পৃষ্ঠার URL অবৈধ"
@ -1349,3 +1345,6 @@ _moderationLogTypes:
resetPassword: "পাসওয়ার্ড রিসেট করুন" resetPassword: "পাসওয়ার্ড রিসেট করুন"
_reversi: _reversi:
total: "মোট" total: "মোট"
_remoteLookupErrors:
_noSuchObject:
title: "পাওয়া যায়নি"

View file

@ -5,71 +5,73 @@ introMisskey: "Benvingut! Misskey és un servei de microblogging descentralitzat
poweredByMisskeyDescription: "{name} És un dels serveis (anomenats instàncies de Misskey) que utilitzen la plataforma de codi obert <b>Misskey</b>." poweredByMisskeyDescription: "{name} És un dels serveis (anomenats instàncies de Misskey) que utilitzen la plataforma de codi obert <b>Misskey</b>."
monthAndDay: "{day}/{month}" monthAndDay: "{day}/{month}"
search: "Cercar" search: "Cercar"
reset: "Reiniciar"
notifications: "Notificacions" notifications: "Notificacions"
username: "Nom d'usuari" username: "Nom d'usuari"
password: "Contrasenya" password: "Contrasenya"
initialPasswordForSetup: "Contrasenya inicial per la configuració inicial" initialPasswordForSetup: "Contrasenya inicial per fer la primera configuració "
initialPasswordIsIncorrect: "La contrasenya no és correcta." initialPasswordIsIncorrect: "La contrasenya no és correcta."
initialPasswordForSetupDescription: "Fes servir la contrasenya que has fet servir al fitxer de configuració, si tu mateix has instal·lat Misskey.\nSi fas servir una empresa d'allotjament de Misskey, fes servir la contrasenya que t'han donat.\nSi no has posat cap contrasenya deixar l'espai en blanc." initialPasswordForSetupDescription: "Fes servir la contrasenya que has fet servir al fitxer de configuració, si tu mateix has instal·lat Misskey.\nSi fas servir una empresa d'allotjament de Misskey, fes servir la contrasenya que t'han donat.\nSi no has posat cap contrasenya deixar l'espai en blanc."
forgotPassword: "Contrasenya oblidada" forgotPassword: "Restableix la contrasenya "
fetchingAsApObject: "Cercant en el Fediverse..." fetchingAsApObject: "Cercant al Fediverse..."
ok: "OK" ok: "OK"
gotIt: "Ho he entès!" gotIt: "D'acord "
cancel: "Cancel·lar" cancel: "Cancel·lar"
noThankYou: "No, gràcies" noThankYou: "No, gràcies"
enterUsername: "Introdueix el teu nom d'usuari" enterUsername: "Introdueix el teu nom d'usuari"
renotedBy: "Impulsat per {user}" renotedBy: "Impulsat per {user}"
noNotes: "Cap nota" noNotes: "Cap nota"
noNotifications: "Cap notificació" noNotifications: "Cap notificació"
instance: "Servidor" instance: "Instància "
settings: "Preferències" settings: "Preferències"
notificationSettings: "Paràmetres de notificacions" notificationSettings: "Configurar les notificacions"
basicSettings: "Configuració bàsica" basicSettings: "Configuració bàsica"
otherSettings: "Configuració avançada" otherSettings: "Altres configuracions"
openInWindow: "Obrir en una nova finestra" openInWindow: "Obrir en una finestra nova"
profile: "Perfil" profile: "Perfil"
timeline: "Línia de temps" timeline: "Línia de temps"
noAccountDescription: "Aquest usuari encara no ha escrit la seva biografia." noAccountDescription: "Aquest usuari encara no ha escrit la seva biografia."
login: "Iniciar sessió" login: "Iniciar sessió"
loggingIn: "Identificant-se" loggingIn: "Iniciar la sessió "
logout: "Tancar la sessió" logout: "Tancar la sessió"
signup: "Registrar-se" signup: "Registrar-se"
uploading: "Pujant..." uploading: "Pujant..."
save: "Desa" save: "Desa"
users: "Usuaris" users: "Usuaris"
addUser: "Afegir un usuari" addUser: "Afegir un usuari"
favorite: "Afegir a preferits" favorite: "Afegeix als preferits"
favorites: "Favorits" favorites: "Favorits"
unfavorite: "Eliminar dels preferits" unfavorite: "Eliminar dels preferits"
favorited: "Afegit als preferits." favorited: "Afegit als preferits."
alreadyFavorited: "Ja s'ha afegit als preferits." alreadyFavorited: "Ja s'ha afegit als preferits."
cantFavorite: "No s'ha pogut afegir als preferits." cantFavorite: "No es pot afegir als preferits."
pin: "Fixar al perfil" pin: "Fixa al perfil"
unpin: "Para de fixar del perfil" unpin: "Para de fixar del perfil"
copyContent: "Copiar el contingut" copyContent: "Copia el contingut"
copyLink: "Copiar l'enllaç" copyLink: "Copia l'enllaç"
copyRemoteLink: "Copiar l'enllaç remot"
copyLinkRenote: "Copiar l'enllaç de la renota" copyLinkRenote: "Copiar l'enllaç de la renota"
delete: "Elimina" delete: "Elimina"
deleteAndEdit: "Elimina i edita" deleteAndEdit: "Eliminar i editar"
deleteAndEditConfirm: "Segur que vols eliminar aquesta publicació i editar-la? Perdràs totes les reaccions, impulsos i respostes." deleteAndEditConfirm: "Segur que vols eliminar aquesta publicació i editar-la? Perdràs totes les reaccions, impulsos i respostes."
addToList: "Afegir a una llista" addToList: "Afegir a una llista"
addToAntenna: "Afegir a l'antena" addToAntenna: "Afegir a una antena"
sendMessage: "Enviar un missatge" sendMessage: "Enviar un missatge"
copyRSS: "Copiar RSS" copyRSS: "Copiar RSS"
copyUsername: "Copiar nom d'usuari" copyUsername: "Copiar nom d'usuari"
copyUserId: "Copiar ID d'usuari" copyUserId: "Copiar ID d'usuari"
copyNoteId: "Copiar ID de nota" copyNoteId: "Copiar ID de la nota"
copyFileId: "Copiar ID d'arxiu" copyFileId: "Copiar ID de l'arxiu"
copyFolderId: "Copiar ID de carpeta" copyFolderId: "Copiar ID de la carpeta"
copyProfileUrl: "Copiar URL del perfil" copyProfileUrl: "Copiar adreça URL del perfil"
searchUser: "Cercar un usuari" searchUser: "Cercar un usuari"
searchThisUsersNotes: "Cerca les publicacions de l'usuari" searchThisUsersNotes: "Cercar les publicacions de l'usuari"
reply: "Respondre" reply: "Respon"
loadMore: "Carregar més" loadMore: "Carregar més"
showMore: "Veure més" showMore: "Veure més"
showLess: "Mostra menys" showLess: "Mostrar menys"
youGotNewFollower: "t'ha seguit" youGotNewFollower: "t'ha seguit"
receiveFollowRequest: "Sol·licitud de seguiment rebuda" receiveFollowRequest: "Has rebut una sol·licitud de seguiment"
followRequestAccepted: "Sol·licitud de seguiment acceptada" followRequestAccepted: "Sol·licitud de seguiment acceptada"
mention: "Menció" mention: "Menció"
mentions: "Mencions" mentions: "Mencions"
@ -78,78 +80,78 @@ importAndExport: "Importar / Exportar"
import: "Importar" import: "Importar"
export: "Exporta" export: "Exporta"
files: "Fitxers" files: "Fitxers"
download: "Baixar" download: "Descarregar"
driveFileDeleteConfirm: "Estàs segur que vols suprimir el fitxer \"{name}\"? Les notes associades a aquest fitxer adjunt també se suprimiran." driveFileDeleteConfirm: "Estàs segur que vols suprimir el fitxer \"{name}\"? Les notes associades a aquest fitxer també seran esborrades."
unfollowConfirm: "Estàs segur que vols deixar de seguir {name}?" unfollowConfirm: "Segur que vols deixar de seguir a {name}?"
exportRequested: "Has sol·licitat una exportació. Això pot trigar una estona. S'afegirà a la teva unitat un cop completat." exportRequested: "Has sol·licitat una exportació de dades. Això pot trigar una estona. S'afegirà a la teva unitat de disc un cop estigui completada."
importRequested: "Has sol·licitat una importació. Això pot trigar una estona." importRequested: "Has sol·licitat una importació de dades. Això pot trigar una estona."
lists: "Llistes" lists: "Llistes"
noLists: "No tens cap llista" noLists: "No tens cap llista"
note: "Nota" note: "Nota"
notes: "Notes" notes: "Notes"
following: "Seguint" following: "Segueixes "
followers: "Seguidors" followers: "Seguidors"
followsYou: "Et segueix" followsYou: "Et segueix"
createList: "Crear llista" createList: "Crear llista"
manageLists: "Gestionar les llistes" manageLists: "Gestionar les llistes"
error: "Error" error: "Error"
somethingHappened: "S'ha produït un error" somethingHappened: "S'ha produït un error"
retry: "Torna-ho a intentar" retry: "Torna-ho a provar"
pageLoadError: "S'ha produït un error en carregar la pàgina" pageLoadError: "S'ha produït un error en carregar la pàgina"
pageLoadErrorDescription: "Això normalment es deu a errors de xarxa o a la memòria cau del navegador. Prova d'esborrar la memòria cau i torna-ho a provar després d'esperar una estona." pageLoadErrorDescription: "Això normalment és a causa d'errors a la xarxa o a la memòria cau del navegador. Prova d'esborrar la memòria cau i torna-ho a provar després d'esperar un temps."
serverIsDead: "Aquest servidor no respon. Espera una estona i torna-ho a provar." serverIsDead: "Aquest servidor no respon. Espera una estona i torna-ho a provar."
youShouldUpgradeClient: "Per veure aquesta pàgina, actualitzeu-la per actualitzar el vostre client." youShouldUpgradeClient: "Per veure aquesta pàgina, actualitzeu-la per actualitzar el vostre client."
enterListName: "Introdueix un nom per a la llista" enterListName: "Introdueix un nom per a la llista"
privacy: "Privadesa" privacy: "Privadesa"
makeFollowManuallyApprove: "Les sol·licituds de seguiment requereixen aprovació" makeFollowManuallyApprove: "Les sol·licituds de seguiment requereixen aprovació"
defaultNoteVisibility: "Visibilitat per defecte" defaultNoteVisibility: "Visibilitat per defecte"
follow: "Seguint" follow: "Segueix"
followRequest: "Enviar la sol·licitud de seguiment" followRequest: "Enviar sol·licitud de seguiment"
followRequests: "Sol·licituds de seguiment" followRequests: "Peticions de seguiment"
unfollow: "Deixar de seguir" unfollow: "Deixar de seguir"
followRequestPending: "Sol·licituds de seguiment pendents" followRequestPending: "Sol·licituds de seguiment pendents"
enterEmoji: "Introduir un emoji" enterEmoji: "Introduir un emoji"
renote: "Impulsa" renote: "Impulsar "
unrenote: "Anul·la l'impuls" unrenote: "Anul·la l'impuls"
renoted: "S'ha impulsat" renoted: "S'ha impulsat"
renotedToX: "Impulsat per {name}." renotedToX: "Impulsat per {name}."
cantRenote: "No es pot impulsar aquesta publicació" cantRenote: "No es pot impulsar aquesta publicació"
cantReRenote: "No es pot impulsar l'impuls." cantReRenote: "No es pot impulsar un impuls."
quote: "Cita" quote: "Cita"
inChannelRenote: "Renotar només al Canal" inChannelRenote: "Impulsar només a un canal"
inChannelQuote: "Citar només al Canal" inChannelQuote: "Citar només a un canal"
renoteToChannel: "Impulsa a un canal" renoteToChannel: "Impulsar a un canal"
renoteToOtherChannel: "Impulsa a un altre canal" renoteToOtherChannel: "Impulsar a un altre canal"
pinnedNote: "Nota fixada" pinnedNote: "Nota fixada"
pinned: "Fixar al perfil" pinned: "Fixar al perfil"
you: "Tu" you: "Tu"
clickToShow: "Fes clic per mostrar" clickToShow: "Fes clic per mostrar"
sensitive: "NSFW" sensitive: "Sensible"
add: "Afegir" add: "Afegir"
reaction: "Reaccions" reaction: "Reacció "
reactions: "Reaccions" reactions: "Reaccions"
emojiPicker: "Selecció d'emojis" emojiPicker: "Selector d'emojis"
pinnedEmojisForReactionSettingDescription: "Selecciona l'emoji amb el qual reaccionar" pinnedEmojisForReactionSettingDescription: "Selecciona l'emoji amb qui vols reaccionar"
pinnedEmojisSettingDescription: "Selecciona l'emoji amb el qual reaccionar" pinnedEmojisSettingDescription: "Selecciona quins emojis vols deixar fixats i es mostrin en obrir el selector d'emojis"
emojiPickerDisplay: "Visualitza el selector d'emojis" emojiPickerDisplay: "Mostrar el selector d'emojis"
overwriteFromPinnedEmojisForReaction: "Reemplaça els emojis de la reacció" overwriteFromPinnedEmojisForReaction: "Reemplaça els emojis de la reacció"
overwriteFromPinnedEmojis: "Sobreescriu des dels emojis fixats" overwriteFromPinnedEmojis: "Sobreescriu els emojis fixats al panel de reaccions"
reactionSettingDescription2: "Arrossega per reordenar, fes clic per suprimir, prem \"+\" per afegir." reactionSettingDescription2: "Arrossega per reordenar, fes clic per suprimir, prem \"+\" per afegir."
rememberNoteVisibility: "Recorda la configuració de visibilitat de les notes" rememberNoteVisibility: "Recorda la configuració de visibilitat de les notes"
attachCancel: "Eliminar el fitxer adjunt" attachCancel: "Eliminar el fitxer adjunt"
deleteFile: "Esborrar l'arxiu " deleteFile: "Esborrar l'arxiu "
markAsSensitive: "Marcar com a NSFW" markAsSensitive: "Marcar com a sensible"
unmarkAsSensitive: "Deixar de marcar com a sensible" unmarkAsSensitive: "Deixar de marcar com a sensible"
enterFileName: "Defineix nom del fitxer" enterFileName: "Defineix nom del fitxer"
mute: "Silencia" mute: "Silencia"
unmute: "Deixa de silenciar" unmute: "Deixa de silenciar"
renoteMute: "Silenciar Renotes" renoteMute: "Silenciar impulsos"
renoteUnmute: "Treure el silenci de les renotes" renoteUnmute: "Treure el silenci dels impulsos"
block: "Bloqueja" block: "Bloqueja"
unblock: "Desbloqueja" unblock: "Desbloqueja"
suspend: "Suspèn" suspend: "Suspèn"
unsuspend: "Deixa de suspendre" unsuspend: "Deixa de suspendre"
blockConfirm: "Vols bloquejar?" blockConfirm: "Vols bloquejar-lo?"
unblockConfirm: "Vols desbloquejar-lo?" unblockConfirm: "Vols desbloquejar-lo?"
suspendConfirm: "Estàs segur que vols suspendre aquest compte?" suspendConfirm: "Estàs segur que vols suspendre aquest compte?"
unsuspendConfirm: "Estàs segur que vols treure la suspensió d'aquest compte?" unsuspendConfirm: "Estàs segur que vols treure la suspensió d'aquest compte?"
@ -175,11 +177,11 @@ youCanCleanRemoteFilesCache: "Pots netejar la memòria cau fent clic al botó de
cacheRemoteSensitiveFiles: "Posar a la memòria cau arxius remots sensibles" cacheRemoteSensitiveFiles: "Posar a la memòria cau arxius remots sensibles"
cacheRemoteSensitiveFilesDescription: "Quan aquesta opció és desactiva, els arxius remots sensibles es carregant directament del servidor d'origen sense que es guardin a la memòria cau." cacheRemoteSensitiveFilesDescription: "Quan aquesta opció és desactiva, els arxius remots sensibles es carregant directament del servidor d'origen sense que es guardin a la memòria cau."
flagAsBot: "Marca aquest compte com a bot" flagAsBot: "Marca aquest compte com a bot"
flagAsBotDescription: "Marca aquest compte com a bot" flagAsBotDescription: "Activa aquesta opció si el compte el controla un programa. Si s'activa, actuarà com un senyal per altres desenvolupadors per prevenir cadenes d'interacció sense fi i ajustar els paràmetres interns de Misskey pe tractar el compte com un bot."
flagAsCat: "Marca aquest compte com a gat" flagAsCat: "Marca aquest compte com a gat"
flagAsCatDescription: "Activeu aquesta opció per marcar aquest compte com a gat." flagAsCatDescription: "Activeu aquesta opció per marcar aquest compte com a gat."
flagShowTimelineReplies: "Mostra les respostes a la línia de temps" flagShowTimelineReplies: "Mostra les respostes a la línia de temps"
flagShowTimelineRepliesDescription: "Mostra les respostes a la línia de temps" flagShowTimelineRepliesDescription: "Mostra les respostes dels usuaris a les notes d'altres usuaris a la línia de temps."
autoAcceptFollowed: "Aprova automàticament les sol·licituds de seguiment dels usuaris que segueixes" autoAcceptFollowed: "Aprova automàticament les sol·licituds de seguiment dels usuaris que segueixes"
addAccount: "Afegeix un compte" addAccount: "Afegeix un compte"
reloadAccountsList: "Recarregar la llista de contactes" reloadAccountsList: "Recarregar la llista de contactes"
@ -195,7 +197,7 @@ setWallpaper: "Defineix el fons de pantalla"
removeWallpaper: "Elimina el fons de pantalla" removeWallpaper: "Elimina el fons de pantalla"
searchWith: "Cerca: {q}" searchWith: "Cerca: {q}"
youHaveNoLists: "No tens cap llista" youHaveNoLists: "No tens cap llista"
followConfirm: "Estàs segur que vols deixar de seguir {name}?" followConfirm: "Segur que vols seguir a {name}?"
proxyAccount: "Compte de proxy" proxyAccount: "Compte de proxy"
proxyAccountDescription: "Un compte proxy és un compte que actua com a seguidor remot per als usuaris en determinades condicions. Per exemple, quan un usuari afegeix un usuari remot a la llista, l'activitat de l'usuari remot no es lliurarà al servidor si cap usuari local segueix aquest usuari, de manera que el compte proxy el seguirà." proxyAccountDescription: "Un compte proxy és un compte que actua com a seguidor remot per als usuaris en determinades condicions. Per exemple, quan un usuari afegeix un usuari remot a la llista, l'activitat de l'usuari remot no es lliurarà al servidor si cap usuari local segueix aquest usuari, de manera que el compte proxy el seguirà."
host: "Amfitrió" host: "Amfitrió"
@ -204,7 +206,7 @@ selectUser: "Selecciona usuari/a"
recipient: "Destinatari" recipient: "Destinatari"
annotation: "Comentaris" annotation: "Comentaris"
federation: "Federació" federation: "Federació"
instances: "Servidors" instances: "Instàncies "
registeredAt: "Registrat a" registeredAt: "Registrat a"
latestRequestReceivedAt: "Última petició rebuda" latestRequestReceivedAt: "Última petició rebuda"
latestStatus: "Últim estat" latestStatus: "Últim estat"
@ -213,7 +215,7 @@ charts: "Gràfics"
perHour: "Per hora" perHour: "Per hora"
perDay: "Per dia" perDay: "Per dia"
stopActivityDelivery: "Deixa d'enviar activitats" stopActivityDelivery: "Deixa d'enviar activitats"
blockThisInstance: "Deixa d'enviar activitats" blockThisInstance: "Bloca aquesta instància "
silenceThisInstance: "Silencia aquesta instància " silenceThisInstance: "Silencia aquesta instància "
mediaSilenceThisInstance: "Silenciar els arxius d'aquesta instància " mediaSilenceThisInstance: "Silenciar els arxius d'aquesta instància "
operations: "Accions" operations: "Accions"
@ -222,13 +224,13 @@ version: "Versió"
metadata: "Metadades" metadata: "Metadades"
withNFiles: "{n} fitxer(s)" withNFiles: "{n} fitxer(s)"
monitor: "Monitor" monitor: "Monitor"
jobQueue: "Cua de tasques" jobQueue: "Cua de feines"
cpuAndMemory: "CPU i memòria" cpuAndMemory: "CPU i memòria"
network: "Xarxa" network: "Xarxa"
disk: "Disc" disk: "Disc"
instanceInfo: "Informació del fitxer d'instal·lació" instanceInfo: "Informació del fitxer d'instal·lació"
statistics: "Estadístiques" statistics: "Estadístiques"
clearQueue: "Esborrar la cua" clearQueue: "Esborra la cua de feina"
clearQueueConfirmTitle: "Esteu segur que voleu esborrar la cua?" clearQueueConfirmTitle: "Esteu segur que voleu esborrar la cua?"
clearQueueConfirmText: "Les notes no lliurades que quedin a la cua no es federaran. Normalment aquesta operació no és necessària." clearQueueConfirmText: "Les notes no lliurades que quedin a la cua no es federaran. Normalment aquesta operació no és necessària."
clearCachedFiles: "Esborra la memòria cau" clearCachedFiles: "Esborra la memòria cau"
@ -254,7 +256,7 @@ processing: "S'està processant..."
preview: "Vista prèvia" preview: "Vista prèvia"
default: "Per defecte" default: "Per defecte"
defaultValueIs: "Per defecte: {value}" defaultValueIs: "Per defecte: {value}"
noCustomEmojis: "Cap emoji personalitzat" noCustomEmojis: "No hi ha emojis personalitzats"
noJobs: "No hi ha feines" noJobs: "No hi ha feines"
federating: "Federant" federating: "Federant"
blocked: "Bloquejat" blocked: "Bloquejat"
@ -268,11 +270,11 @@ instanceFollowers: "Seguidors del servidor"
instanceUsers: "Usuaris del servidor" instanceUsers: "Usuaris del servidor"
changePassword: "Canvia la contrasenya" changePassword: "Canvia la contrasenya"
security: "Seguretat" security: "Seguretat"
retypedNotMatch: "L'entrada no coincideix" retypedNotMatch: "Les entrades no coincideix"
currentPassword: "Contrasenya actual" currentPassword: "Contrasenya actual"
newPassword: "Contrasenya nova" newPassword: "Contrasenya nova"
newPasswordRetype: "Contrasenya nou (repeteix-la)" newPasswordRetype: "Contrasenya nova (repeteix-la)"
attachFile: "Adjunta fitxers" attachFile: "Afegeix un arxiu"
more: "Més" more: "Més"
featured: "Destacat" featured: "Destacat"
usernameOrUserId: "Nom o ID d'usuari" usernameOrUserId: "Nom o ID d'usuari"
@ -282,25 +284,25 @@ announcements: "Anuncis"
imageUrl: "URL de la imatge" imageUrl: "URL de la imatge"
remove: "Eliminar" remove: "Eliminar"
removed: "Eliminat" removed: "Eliminat"
removeAreYouSure: "Segur que voleu retirar «{x}»?" removeAreYouSure: "Segur que vols esborrar «{x}»?"
deleteAreYouSure: "Segur que voleu retirar «{x}»?" deleteAreYouSure: "Segur que vols esborrar «{x}»?"
resetAreYouSure: "Segur que voleu restablir-ho?" resetAreYouSure: "Segur que vols restablir-ho?"
areYouSure: "Està segur?" areYouSure: "Estàs segur?"
saved: "S'ha desat" saved: "S'ha desat"
messaging: "Xat" messaging: "Xat"
upload: "Puja" upload: "Puja"
keepOriginalUploading: "Guarda la imatge original" keepOriginalUploading: "Guarda la imatge original"
keepOriginalUploadingDescription: "Guarda la imatge pujada com hi és. Si està apagat, una versió per a la visualització a la xarxa serà generada quan sigui pujada." keepOriginalUploadingDescription: "Guarda la imatge pujada sense modificar. Si està desactivat, es generarà una versió per visualitzar a la web en pujar la imatge."
fromDrive: "Des de la unitat" fromDrive: "Des del Disc"
fromUrl: "Des d'un enllaç" fromUrl: "Des d'un enllaç"
uploadFromUrl: "Carrega des d'un enllaç" uploadFromUrl: "Carrega des d'un enllaç"
uploadFromUrlDescription: "Enllaç del fitxer que vols carregar" uploadFromUrlDescription: "Enllaç del fitxer que vols carregar"
uploadFromUrlRequested: "Càrrega sol·licitada" uploadFromUrlRequested: "Càrrega sol·licitada"
uploadFromUrlMayTakeTime: "La càrrega des de l'enllaç pot prendre un temps" uploadFromUrlMayTakeTime: "La càrrega des de l'enllaç pot trigar un temps"
explore: "Explora" explore: "Explora"
messageRead: "Vist" messageRead: "Vist"
noMoreHistory: "No hi resta més per veure" noMoreHistory: "No hi ha res més per veure"
startMessaging: "Començar a xatejar" startMessaging: "Comença a xatejar"
nUsersRead: "Vist per {n}" nUsersRead: "Vist per {n}"
agreeTo: "Accepto que {0}" agreeTo: "Accepto que {0}"
agree: "Hi estic d'acord" agree: "Hi estic d'acord"
@ -312,7 +314,7 @@ home: "Inici"
remoteUserCaution: "Ja que aquest usuari resideix a una instància remota, la informació mostrada es podria trobar incompleta." remoteUserCaution: "Ja que aquest usuari resideix a una instància remota, la informació mostrada es podria trobar incompleta."
activity: "Activitat" activity: "Activitat"
images: "Imatges" images: "Imatges"
image: "Imatges" image: "Imatge"
birthday: "Aniversari" birthday: "Aniversari"
yearsOld: "{age} anys" yearsOld: "{age} anys"
registeredDate: "Data de registre" registeredDate: "Data de registre"
@ -325,12 +327,12 @@ dark: "Fosc"
lightThemes: "Temes clars" lightThemes: "Temes clars"
darkThemes: "Temes foscos" darkThemes: "Temes foscos"
syncDeviceDarkMode: "Sincronitza el mode fosc amb la configuració del dispositiu" syncDeviceDarkMode: "Sincronitza el mode fosc amb la configuració del dispositiu"
drive: "Unitat" drive: "Disc"
fileName: "Nom del Fitxer" fileName: "Nom del Fitxer"
selectFile: "Selecciona fitxers" selectFile: "Selecciona un fitxer"
selectFiles: "Selecciona fitxers" selectFiles: "Selecciona fitxers"
selectFolder: "Selecció de carpeta" selectFolder: "Selecció de carpeta"
selectFolders: "Selecció de carpeta" selectFolders: "Selecció de carpetes"
fileNotSelected: "Cap fitxer seleccionat" fileNotSelected: "Cap fitxer seleccionat"
renameFile: "Canvia el nom del fitxer" renameFile: "Canvia el nom del fitxer"
folderName: "Nom de la carpeta" folderName: "Nom de la carpeta"
@ -340,11 +342,11 @@ deleteFolder: "Elimina la carpeta"
folder: "Carpeta " folder: "Carpeta "
addFile: "Afegeix un fitxer" addFile: "Afegeix un fitxer"
showFile: "Mostrar fitxer" showFile: "Mostrar fitxer"
emptyDrive: "La teva unitat és buida" emptyDrive: "El teu Disc és buit"
emptyFolder: "La carpeta està buida" emptyFolder: "La carpeta està buida"
unableToDelete: "No es pot eliminar" unableToDelete: "No es pot eliminar"
inputNewFileName: "Introduïu el nom de fitxer nou" inputNewFileName: "Introduïu el nom de fitxer nou"
inputNewDescription: "Inserta una nova llegenda" inputNewDescription: "Escriu el peu de foto."
inputNewFolderName: "Introduïu el nom de la carpeta nova" inputNewFolderName: "Introduïu el nom de la carpeta nova"
circularReferenceFolder: "La carpeta destinatària és una subcarpeta de la carpeta a la qual la desitges moure" circularReferenceFolder: "La carpeta destinatària és una subcarpeta de la carpeta a la qual la desitges moure"
hasChildFilesOrFolders: "No és possible esborrar aquesta carpeta ja que no és buida" hasChildFilesOrFolders: "No és possible esborrar aquesta carpeta ja que no és buida"
@ -359,9 +361,9 @@ reload: "Actualitza"
doNothing: "Ignora" doNothing: "Ignora"
reloadConfirm: "Vols recarregar?" reloadConfirm: "Vols recarregar?"
watch: "Veure" watch: "Veure"
unwatch: "Deixar de veure" unwatch: "Deixa de veure"
accept: "Acceptar" accept: "Acceptar"
reject: "Denegar" reject: "Denega"
normal: "Normal" normal: "Normal"
instanceName: "Nom del servidor" instanceName: "Nom del servidor"
instanceDescription: "Descripció del servidor" instanceDescription: "Descripció del servidor"
@ -382,7 +384,6 @@ enableLocalTimeline: "Activa la línia de temps local"
enableGlobalTimeline: "Activa la línia de temps global" enableGlobalTimeline: "Activa la línia de temps global"
disablingTimelinesInfo: "Fins i tot si aquestes línies de temps són desactivades, els administradors i els moderadors poden continuar visualitzant per conveniència." disablingTimelinesInfo: "Fins i tot si aquestes línies de temps són desactivades, els administradors i els moderadors poden continuar visualitzant per conveniència."
registration: "Registre" registration: "Registre"
enableRegistration: "Permet els registres d'usuaris"
invite: "Convida" invite: "Convida"
driveCapacityPerLocalAccount: "Capacitat del disc per usuaris locals" driveCapacityPerLocalAccount: "Capacitat del disc per usuaris locals"
driveCapacityPerRemoteAccount: "Capacitat del disc per usuaris remots" driveCapacityPerRemoteAccount: "Capacitat del disc per usuaris remots"
@ -393,20 +394,20 @@ basicInfo: "Informació bàsica"
pinnedUsers: "Usuaris fixats" pinnedUsers: "Usuaris fixats"
pinnedUsersDescription: "Llista d'usuaris, separats per salts de línia, que seran fixats a la pestanya \"Explorar\"." pinnedUsersDescription: "Llista d'usuaris, separats per salts de línia, que seran fixats a la pestanya \"Explorar\"."
pinnedPages: "Pàgines fixades" pinnedPages: "Pàgines fixades"
pinnedPagesDescription: "Escriu els camins de les pàgines que vols fixar a la pàgina d'inici d'aquesta instància. Separades per salts de línia." pinnedPagesDescription: "Escriu les adreces de les pàgines que vols fixar a la pàgina d'inici d'aquesta instància. Separades per salts de línia."
pinnedClipId: "ID del retall fixat" pinnedClipId: "ID del retall fixat"
pinnedNotes: "Nota fixada" pinnedNotes: "Nota fixada"
hcaptcha: "hCaptcha" hcaptcha: "hCaptcha"
enableHcaptcha: "Activar hCaptcha" enableHcaptcha: "Activa hCaptcha"
hcaptchaSiteKey: "Clau del lloc" hcaptchaSiteKey: "Clau del lloc"
hcaptchaSecretKey: "Clau secreta" hcaptchaSecretKey: "Clau secreta"
mcaptcha: "mCaptcha" mcaptcha: "mCaptcha"
enableMcaptcha: "Activar mCaptcha" enableMcaptcha: "Activa mCaptcha"
mcaptchaSiteKey: "Clau del lloc" mcaptchaSiteKey: "Clau del lloc"
mcaptchaSecretKey: "Clau secreta" mcaptchaSecretKey: "Clau secreta"
mcaptchaInstanceUrl: "Adreça URL del servidor mCaptcha" mcaptchaInstanceUrl: "Adreça URL del servidor mCaptcha"
recaptcha: "reCAPTCHA" recaptcha: "reCAPTCHA"
enableRecaptcha: "Activar reCAPTCHA" enableRecaptcha: "Activa reCAPTCHA"
recaptchaSiteKey: "Clau del lloc" recaptchaSiteKey: "Clau del lloc"
recaptchaSecretKey: "Clau secreta" recaptchaSecretKey: "Clau secreta"
turnstile: "Turnstile" turnstile: "Turnstile"
@ -448,14 +449,14 @@ aboutMisskey: "Quant a Misskey"
administrator: "Administrador/a" administrator: "Administrador/a"
token: "Codi de verificació" token: "Codi de verificació"
2fa: "Autenticació de doble factor" 2fa: "Autenticació de doble factor"
setupOf2fa: "Configurar l'autenticació de doble factor" setupOf2fa: "Configura l'autenticació de doble factor"
totp: "Aplicació d'autenticació" totp: "Aplicació d'autenticació"
totpDescription: "Escriu una contrasenya d'un sol us fent servir l'aplicació d'autenticació" totpDescription: "Escriu una contrasenya d'un sol us fent servir l'aplicació d'autenticació"
moderator: "Moderador/a" moderator: "Moderador/a"
moderation: "Moderació" moderation: "Moderació"
moderationNote: "Nota de moderació " moderationNote: "Nota de moderació "
moderationNoteDescription: "Pots escriure notes que es compartiran entre els moderadors." moderationNoteDescription: "Pots escriure notes que es compartiran entre els moderadors."
addModerationNote: "Afegir una nota de moderació " addModerationNote: "Afegeix una nota de moderació "
moderationLogs: "Registre de moderació " moderationLogs: "Registre de moderació "
nUsersMentioned: "{n} usuaris mencionats" nUsersMentioned: "{n} usuaris mencionats"
securityKeyAndPasskey: "Clau de seguretat / Clau de pas" securityKeyAndPasskey: "Clau de seguretat / Clau de pas"
@ -471,13 +472,13 @@ reduceUiAnimation: "Redueix les animacions de la interfície"
share: "Comparteix" share: "Comparteix"
notFound: "No s'ha trobat" notFound: "No s'ha trobat"
notFoundDescription: "No es troba cap pàgina que correspongui a aquesta adreça" notFoundDescription: "No es troba cap pàgina que correspongui a aquesta adreça"
uploadFolder: "Carpeta per defecte per pujades" uploadFolder: "Carpeta per defecte on desar els arxius pujats"
markAsReadAllNotifications: "Marca totes les notificacions com a llegides" markAsReadAllNotifications: "Marca totes les notificacions com a llegides"
markAsReadAllUnreadNotes: "Marca-ho tot com a llegit" markAsReadAllUnreadNotes: "Marca-ho tot com a llegit"
markAsReadAllTalkMessages: "Marcar tots els missatges com llegits" markAsReadAllTalkMessages: "Marcar tots els missatges com llegits"
help: "Ajuda" help: "Ajuda"
inputMessageHere: "Escriu aquí el teu missatge " inputMessageHere: "Escriu aquí el teu missatge "
close: "Tancar" close: "Tanca"
invites: "Convida" invites: "Convida"
members: "Membres" members: "Membres"
transfer: "Transferir" transfer: "Transferir"
@ -508,7 +509,7 @@ normalPassword: "Bona contrasenya"
strongPassword: "Contrasenya segura" strongPassword: "Contrasenya segura"
passwordMatched: "Correcte!" passwordMatched: "Correcte!"
passwordNotMatched: "No coincideix" passwordNotMatched: "No coincideix"
signinWith: "Inicia sessió amb amb {x}" signinWith: "Inicia sessió amb {x}"
signinFailed: "Autenticació sense èxit. Intenta-ho un altre cop utilitzant la contrasenya i el nom correctes." signinFailed: "Autenticació sense èxit. Intenta-ho un altre cop utilitzant la contrasenya i el nom correctes."
or: "O" or: "O"
language: "Idioma" language: "Idioma"
@ -538,7 +539,7 @@ mediaListWithOneImageAppearance: "Altura de la llista de fitxers amb una única
limitTo: "Limita a {x}" limitTo: "Limita a {x}"
noFollowRequests: "No tens sol·licituds de seguiment" noFollowRequests: "No tens sol·licituds de seguiment"
openImageInNewTab: "Obre imatges a una nova pestanya" openImageInNewTab: "Obre imatges a una nova pestanya"
dashboard: "Panell de control" dashboard: "Taulell de control"
local: "Local" local: "Local"
remote: "Remot" remote: "Remot"
total: "Total" total: "Total"
@ -574,7 +575,7 @@ serverLogs: "Registres del servidor"
deleteAll: "Elimina-ho tot" deleteAll: "Elimina-ho tot"
showFixedPostForm: "Mostrar el formulari per escriure a l'inici de la línia de temps" showFixedPostForm: "Mostrar el formulari per escriure a l'inici de la línia de temps"
showFixedPostFormInChannel: "Mostrar el formulari d'escriptura al principi de la línia de temps (Canals)" showFixedPostFormInChannel: "Mostrar el formulari d'escriptura al principi de la línia de temps (Canals)"
withRepliesByDefaultForNewlyFollowed: "Inclou les respostes d'usuaris nous seguits a la línia de temps per defecte." withRepliesByDefaultForNewlyFollowed: "Inclou les respostes d'usuaris nous que segueixes a la línia de temps per defecte."
newNoteRecived: "Hi ha publicacions noves" newNoteRecived: "Hi ha publicacions noves"
sounds: "Sons" sounds: "Sons"
sound: "So" sound: "So"
@ -587,11 +588,12 @@ masterVolume: "Volum principal"
notUseSound: "Sense so" notUseSound: "Sense so"
useSoundOnlyWhenActive: "Reproduir sons només quan Misskey estigui actiu" useSoundOnlyWhenActive: "Reproduir sons només quan Misskey estigui actiu"
details: "Detalls" details: "Detalls"
renoteDetails: "Més informació sobre l'impuls "
chooseEmoji: "Tria un emoji" chooseEmoji: "Tria un emoji"
unableToProcess: "L'operació no pot ser completada " unableToProcess: "L'operació no pot ser completada "
recentUsed: "Utilitzat recentment" recentUsed: "Utilitzat recentment"
install: "Instal·lació " install: "Instal·lació "
uninstall: "Desinstal·lar " uninstall: "Desinstal·la"
installedApps: "Aplicacions autoritzades " installedApps: "Aplicacions autoritzades "
nothing: "No hi ha res per veure aquí " nothing: "No hi ha res per veure aquí "
installedDate: "Data d'instal·lació" installedDate: "Data d'instal·lació"
@ -608,13 +610,13 @@ output: "Sortida"
script: "Script" script: "Script"
disablePagesScript: "Desactivar AiScript a les pàgines " disablePagesScript: "Desactivar AiScript a les pàgines "
updateRemoteUser: "Actualitzar la informació de l'usuari remot" updateRemoteUser: "Actualitzar la informació de l'usuari remot"
unsetUserAvatar: "Desactivar l'avatar " unsetUserAvatar: "Desactiva l'avatar "
unsetUserAvatarConfirm: "Segur que vols desactivar l'avatar?" unsetUserAvatarConfirm: "Segur que vols desactivar l'avatar?"
unsetUserBanner: "Desactivar el bàner " unsetUserBanner: "Desactiva el bàner "
unsetUserBannerConfirm: "Segur que vols desactivar el bàner?" unsetUserBannerConfirm: "Segur que vols desactivar el bàner?"
deleteAllFiles: "Esborrar tots els arxius" deleteAllFiles: "Esborra tots els arxius"
deleteAllFilesConfirm: "Segur que vols esborrar tots els arxius?" deleteAllFilesConfirm: "Segur que vols esborrar tots els arxius?"
removeAllFollowing: "Deixar de seguir tots els usuaris seguits" removeAllFollowing: "Deixa de seguir tots els usuaris que segueixes"
removeAllFollowingDescription: "El fet d'executar això, et farà deixar de seguir a tots els usuaris de {host}. Si us plau, executa això si l'amfitrió, per exemple, ja no existeix." removeAllFollowingDescription: "El fet d'executar això, et farà deixar de seguir a tots els usuaris de {host}. Si us plau, executa això si l'amfitrió, per exemple, ja no existeix."
userSuspended: "Aquest usuari ha sigut suspès" userSuspended: "Aquest usuari ha sigut suspès"
userSilenced: "Aquest usuari està sent silenciat" userSilenced: "Aquest usuari està sent silenciat"
@ -645,7 +647,7 @@ expandTweet: "Expandir post"
themeEditor: "Editor de temes" themeEditor: "Editor de temes"
description: "Descripció" description: "Descripció"
describeFile: "Afegir subtitulació" describeFile: "Afegir subtitulació"
enterFileDescription: "Afegeix un títol" enterFileDescription: "Escriu un peu de foto"
author: "Autor" author: "Autor"
leaveConfirm: "Hi ha canvis sense guardar. Els vols descartar?" leaveConfirm: "Hi ha canvis sense guardar. Els vols descartar?"
manage: "Administració" manage: "Administració"
@ -684,11 +686,15 @@ smtpSecure: "Fes servir SSL/TLS per connexions SMTP"
smtpSecureInfo: "Desactiva això quan facis servir connexions STARTTLS" smtpSecureInfo: "Desactiva això quan facis servir connexions STARTTLS"
testEmail: "Prova l'enviament de correu " testEmail: "Prova l'enviament de correu "
wordMute: "Silenciar paraules " wordMute: "Silenciar paraules "
wordMuteDescription: "Minimitza les notes que contenen la paraula o frase especificada. Les notes minimitzades poden visualitzar-se fent clic sobre elles."
hardWordMute: "Silenciar paraules fortes" hardWordMute: "Silenciar paraules fortes"
showMutedWord: "Mostrar paraules silenciades"
hardWordMuteDescription: "Oculta les notes que contenen la paraula o frase especificada. A diferència de Silenciar paraula, la nota quedarà completament oculta a la vista."
regexpError: "Error de l'expressió regular " regexpError: "Error de l'expressió regular "
regexpErrorDescription: "S'ha produït un error a l'expressió regular a la línia {line} de les paraules silenciades {tab}:" regexpErrorDescription: "S'ha produït un error a l'expressió regular a la línia {line} de les paraules silenciades {tab}:"
instanceMute: "Silenciar servidor" instanceMute: "Silenciar servidor"
userSaysSomething: "{name} n'ha dit alguna cosa" userSaysSomething: "{name} n'ha dit alguna cosa"
userSaysSomethingAbout: "{name} està parlant sobre \"{word}\""
makeActive: "Activar" makeActive: "Activar"
display: "Veure" display: "Veure"
copy: "Copiar" copy: "Copiar"
@ -729,7 +735,7 @@ instanceTicker: "Informació de notes de la instància "
waitingFor: "Esperant {x}" waitingFor: "Esperant {x}"
random: "Aleatori " random: "Aleatori "
system: "Sistema" system: "Sistema"
switchUi: "Canviar interfície d'usuari " switchUi: "Canviar la interfície"
desktop: "Escriptori" desktop: "Escriptori"
clip: "Retalls" clip: "Retalls"
createNew: "Crear" createNew: "Crear"
@ -747,7 +753,7 @@ repliesCount: "Nombre de respostes"
renotesCount: "Impulsos fets" renotesCount: "Impulsos fets"
repliedCount: "Nombre de respostes rebudes" repliedCount: "Nombre de respostes rebudes"
renotedCount: "Impulsos rebuts" renotedCount: "Impulsos rebuts"
followingCount: "Nombre de comptes seguits" followingCount: "Nombre de comptes que segueixes"
followersCount: "Nombre de seguidors" followersCount: "Nombre de seguidors"
sentReactionsCount: "Nombre de reaccions enviades" sentReactionsCount: "Nombre de reaccions enviades"
receivedReactionsCount: "Nombre de reaccions rebudes" receivedReactionsCount: "Nombre de reaccions rebudes"
@ -779,7 +785,7 @@ thisIsExperimentalFeature: "Aquesta és una característica experimental. La sev
developer: "Programador" developer: "Programador"
makeExplorable: "Fes que el compte sigui visible a la secció \"Explorar\"" makeExplorable: "Fes que el compte sigui visible a la secció \"Explorar\""
makeExplorableDescription: "Si desactives aquesta opció, el teu compte no sortirà a la secció \"Explorar\"" makeExplorableDescription: "Si desactives aquesta opció, el teu compte no sortirà a la secció \"Explorar\""
showGapBetweenNotesInTimeline: "Mostra una separació entre els articles a la línia de temps" showGapBetweenNotesInTimeline: "Notes separades a la línia de temps"
duplicate: "Duplicat" duplicate: "Duplicat"
left: "Esquerra" left: "Esquerra"
center: "Centre" center: "Centre"
@ -910,7 +916,7 @@ off: "Desactivar"
emailRequiredForSignup: "Demanar correu electrònic per registrar-se " emailRequiredForSignup: "Demanar correu electrònic per registrar-se "
unread: "Sense llegir" unread: "Sense llegir"
filter: "Filtrar" filter: "Filtrar"
controlPanel: "Panel de control" controlPanel: "Taulell de control"
manageAccounts: "Gestionar comptes" manageAccounts: "Gestionar comptes"
makeReactionsPublic: "Reaccions públiques " makeReactionsPublic: "Reaccions públiques "
makeReactionsPublicDescription: "Això fa que totes les teves reaccions siguin visibles públicament " makeReactionsPublicDescription: "Això fa que totes les teves reaccions siguin visibles públicament "
@ -929,7 +935,7 @@ useDrawerReactionPickerForMobile: "Mostrar el selector de reaccions com un calai
welcomeBackWithName: "Benvingut de nou, {name}" welcomeBackWithName: "Benvingut de nou, {name}"
clickToFinishEmailVerification: "Si us plau, fes clic a [{ok}] per completar la verificació per correu electrònic " clickToFinishEmailVerification: "Si us plau, fes clic a [{ok}] per completar la verificació per correu electrònic "
overridedDeviceKind: "Tipus de dispositiu" overridedDeviceKind: "Tipus de dispositiu"
smartphone: "Telèfon intel·ligent" smartphone: "Mòbil "
tablet: "Tauleta" tablet: "Tauleta"
auto: "Automàtic " auto: "Automàtic "
themeColor: "Color del tema" themeColor: "Color del tema"
@ -1010,7 +1016,7 @@ sendPushNotificationReadMessageCaption: "Això pot fer que el teu dispositiu con
windowMaximize: "Maximitzar " windowMaximize: "Maximitzar "
windowMinimize: "Minimitzar" windowMinimize: "Minimitzar"
windowRestore: "Restaurar" windowRestore: "Restaurar"
caption: "Llegenda" caption: "Peu de foto"
loggedInAsBot: "Identificat com a bot" loggedInAsBot: "Identificat com a bot"
tools: "Eines" tools: "Eines"
cannotLoad: "No es pot carregar" cannotLoad: "No es pot carregar"
@ -1133,7 +1139,7 @@ channelArchiveConfirmDescription: "Un Canal arxivat no apareixerà a la llista d
thisChannelArchived: "Aquest Canal ha sigut arxivat." thisChannelArchived: "Aquest Canal ha sigut arxivat."
displayOfNote: "Mostrar notes" displayOfNote: "Mostrar notes"
initialAccountSetting: "Configuració del perfil" initialAccountSetting: "Configuració del perfil"
youFollowing: "Seguit" youFollowing: "Seguint"
preventAiLearning: "Descartar l'ús d'aprenentatge automàtic (IA Generativa)" preventAiLearning: "Descartar l'ús d'aprenentatge automàtic (IA Generativa)"
preventAiLearningDescription: "Demanar els indexadors no fer servir els texts, imatges, etc. en cap conjunt de dades per alimentar l'aprenentatge automàtic (IA Predictiva/ Generativa). Això s'aconsegueix afegint la etiqueta \"noai\" com a resposta HTML al contingut corresponent. Prevenir aquest ús totalment pot ser que no sigui aconseguit, ja que molts indexadors poden obviar aquesta etiqueta." preventAiLearningDescription: "Demanar els indexadors no fer servir els texts, imatges, etc. en cap conjunt de dades per alimentar l'aprenentatge automàtic (IA Predictiva/ Generativa). Això s'aconsegueix afegint la etiqueta \"noai\" com a resposta HTML al contingut corresponent. Prevenir aquest ús totalment pot ser que no sigui aconseguit, ja que molts indexadors poden obviar aquesta etiqueta."
options: "Opcions" options: "Opcions"
@ -1183,8 +1189,8 @@ currentAnnouncements: "Informes actuals"
pastAnnouncements: "Informes passats" pastAnnouncements: "Informes passats"
youHaveUnreadAnnouncements: "Tens informes per llegir." youHaveUnreadAnnouncements: "Tens informes per llegir."
useSecurityKey: "Segueix les instruccions del teu navegador O dispositiu per fer servir el teu passkey." useSecurityKey: "Segueix les instruccions del teu navegador O dispositiu per fer servir el teu passkey."
replies: "Respondre" replies: "Respon"
renotes: "Impulsa" renotes: "Impulsar "
loadReplies: "Mostrar les respostes" loadReplies: "Mostrar les respostes"
loadConversation: "Mostrar la conversació " loadConversation: "Mostrar la conversació "
pinnedList: "Llista fixada" pinnedList: "Llista fixada"
@ -1199,7 +1205,7 @@ showRenotes: "Mostrar impulsos"
edited: "Editat" edited: "Editat"
notificationRecieveConfig: "Paràmetres de notificacions" notificationRecieveConfig: "Paràmetres de notificacions"
mutualFollow: "Seguidor mutu" mutualFollow: "Seguidor mutu"
followingOrFollower: "Seguit o seguidor" followingOrFollower: "Seguint o seguidor"
fileAttachedOnly: "Només notes amb adjunts" fileAttachedOnly: "Només notes amb adjunts"
showRepliesToOthersInTimeline: "Mostrar les respostes a altres a la línia de temps" showRepliesToOthersInTimeline: "Mostrar les respostes a altres a la línia de temps"
hideRepliesToOthersInTimeline: "Amagar les respostes a altres a la línia de temps" hideRepliesToOthersInTimeline: "Amagar les respostes a altres a la línia de temps"
@ -1299,6 +1305,10 @@ yourNameContainsProhibitedWordsDescription: "Si de veritat vols fer servir aques
thisContentsAreMarkedAsSigninRequiredByAuthor: "L'autor requereix l'inici de sessió per poder veure" thisContentsAreMarkedAsSigninRequiredByAuthor: "L'autor requereix l'inici de sessió per poder veure"
lockdown: "Bloquejat" lockdown: "Bloquejat"
pleaseSelectAccount: "Seleccionar un compte" pleaseSelectAccount: "Seleccionar un compte"
availableRoles: "Roles disponibles "
acknowledgeNotesAndEnable: "Activa'l després de comprendre els possibles perills."
federationSpecified: "Aquest servidor treballa amb una federació de llistes blanques. No pot interactuar amb altres servidors que no siguin els especificats per l'administrador."
federationDisabled: "La unió es troba deshabilitada en aquest servidor. No es pot interactuar amb usuaris d'altres servidors."
_accountSettings: _accountSettings:
requireSigninToViewContents: "És obligatori l'inici de sessió per poder veure el contingut" requireSigninToViewContents: "És obligatori l'inici de sessió per poder veure el contingut"
requireSigninToViewContentsDescription1: "Es requereix l'inici de sessió per poder veure totes les notes i el contingut que has creat. Amb això esperem evitar que els rastrejadors recopilin informació." requireSigninToViewContentsDescription1: "Es requereix l'inici de sessió per poder veure totes les notes i el contingut que has creat. Amb això esperem evitar que els rastrejadors recopilin informació."
@ -1455,6 +1465,8 @@ _serverSettings:
reactionsBufferingDescription: "Quan s'activa aquesta opció millora bastant el rendiment en recuperar les línies de temps reduint la càrrega de la base. Com a contrapunt, augmentarà l'ús de memòria de Redís. Desactiva aquesta opció en cas de tenir un servidor amb poca memòria o si tens problemes d'inestabilitat." reactionsBufferingDescription: "Quan s'activa aquesta opció millora bastant el rendiment en recuperar les línies de temps reduint la càrrega de la base. Com a contrapunt, augmentarà l'ús de memòria de Redís. Desactiva aquesta opció en cas de tenir un servidor amb poca memòria o si tens problemes d'inestabilitat."
inquiryUrl: "URL de consulta " inquiryUrl: "URL de consulta "
inquiryUrlDescription: "Escriu adreça URL per al formulari de consulta per al mantenidor del servidor o una pàgina web amb el contacte d'informació." inquiryUrlDescription: "Escriu adreça URL per al formulari de consulta per al mantenidor del servidor o una pàgina web amb el contacte d'informació."
openRegistration: "Registres oberts"
openRegistrationWarning: "Obrir els registres és arriscat. Es recomana obrir-los només si el servidor és monitorat constantment i per respondre immediatament davant qualsevol problema."
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "Si no es detecta activitat per part del moderador durant un període de temps, aquesta opció es desactiva automàticament per evitar el correu brossa." thisSettingWillAutomaticallyOffWhenModeratorsInactive: "Si no es detecta activitat per part del moderador durant un període de temps, aquesta opció es desactiva automàticament per evitar el correu brossa."
_accountMigration: _accountMigration:
moveFrom: "Migrar un altre compte a aquest" moveFrom: "Migrar un altre compte a aquest"
@ -1469,7 +1481,7 @@ _accountMigration:
startMigration: "Migrar" startMigration: "Migrar"
migrationConfirm: "Vols migrar aquest compte a {account}? Una vegada comenci la migració no es podrà parar O fer marxa enrere i no podràs tornar a fer servir aquest compte mai més." migrationConfirm: "Vols migrar aquest compte a {account}? Una vegada comenci la migració no es podrà parar O fer marxa enrere i no podràs tornar a fer servir aquest compte mai més."
movedAndCannotBeUndone: "Aquest compte ha migrat.\nLes migracions no es poden desfer." movedAndCannotBeUndone: "Aquest compte ha migrat.\nLes migracions no es poden desfer."
postMigrationNote: "Aquest compte deixarà de seguir tots els comptes que segueix 24 hores després de germinar la migració.\nEl nombre de seguidors i seguits passarà a ser de zero. Per evitar que els teus seguidors no puguin veure les publicacions marcades com a només seguidors continuaren seguint aquest compte." postMigrationNote: "Aquest compte deixarà de seguir tots els comptes que segueix 24 hores després de terminar la migració.\nEl nombre de seguidors i seguits passarà a ser de zero. Per evitar que els teus seguidors no puguin veure les publicacions marcades com a només seguidors continuaren seguint aquest compte."
movedTo: "Nou compte:" movedTo: "Nou compte:"
_achievements: _achievements:
earnedAt: "Desbloquejat el" earnedAt: "Desbloquejat el"
@ -1828,7 +1840,7 @@ _emailUnavailable:
smtp: "Aquest servidor de correu electrònic no respon" smtp: "Aquest servidor de correu electrònic no respon"
banned: "No pots registrar-te amb aquesta adreça de correu electrònic " banned: "No pots registrar-te amb aquesta adreça de correu electrònic "
_ffVisibility: _ffVisibility:
public: "Publicar" public: "Públic "
followers: "Visible només per a seguidors " followers: "Visible només per a seguidors "
private: "Privat" private: "Privat"
_signup: _signup:
@ -1862,7 +1874,7 @@ _gallery:
unlike: "Ja no m'agrada" unlike: "Ja no m'agrada"
_email: _email:
_follow: _follow:
title: "t'ha seguit" title: "Tens un nou seguidor"
_receiveFollowRequest: _receiveFollowRequest:
title: "Has rebut una sol·licitud de seguiment" title: "Has rebut una sol·licitud de seguiment"
_plugin: _plugin:
@ -1896,7 +1908,7 @@ _registry:
domain: "Domini" domain: "Domini"
createKey: "Crear una clau" createKey: "Crear una clau"
_aboutMisskey: _aboutMisskey:
about: "Misskey és un programa de codi obert desenvolupar per syuilo des de 2014" about: "Misskey és un programa de codi obert desenvolupat des del 2014 per syuilo"
contributors: "Col·laboradors principals" contributors: "Col·laboradors principals"
allContributors: "Tots els col·laboradors " allContributors: "Tots els col·laboradors "
source: "Codi font" source: "Codi font"
@ -2215,7 +2227,7 @@ _widgets:
slideshow: "Presentació" slideshow: "Presentació"
button: "Botó " button: "Botó "
onlineUsers: "Usuaris actius" onlineUsers: "Usuaris actius"
jobQueue: "Cua de tasques" jobQueue: "Cua de feines"
serverMetric: "Mètriques del servidor" serverMetric: "Mètriques del servidor"
aiscript: "Consola AiScript" aiscript: "Consola AiScript"
aiscriptApp: "Aplicació AiScript" aiscriptApp: "Aplicació AiScript"
@ -2295,7 +2307,7 @@ _exportOrImport:
allNotes: "Totes les publicacions" allNotes: "Totes les publicacions"
favoritedNotes: "Notes preferides" favoritedNotes: "Notes preferides"
clips: "Retalls" clips: "Retalls"
followingList: "Seguint" followingList: "Seguint "
muteList: "Silencia" muteList: "Silencia"
blockingList: "Bloqueja" blockingList: "Bloqueja"
userLists: "Llistes" userLists: "Llistes"
@ -2353,9 +2365,6 @@ _pages:
newPage: "pa" newPage: "pa"
editPage: "Editar la pàgina" editPage: "Editar la pàgina"
readPage: "Veure el codi font d'aquesta pàgina" readPage: "Veure el codi font d'aquesta pàgina"
created: "La pàgina ha sigut creada correctament"
updated: "La pàgina s'ha editat correctament"
deleted: "La pàgina s'ha esborrat sense problemes"
pageSetting: "Configuració de la pàgina" pageSetting: "Configuració de la pàgina"
nameAlreadyExists: "L'adreça URL de la pàgina ja existeix" nameAlreadyExists: "L'adreça URL de la pàgina ja existeix"
invalidNameTitle: "L'adreça URL de la pàgina no és vàlida" invalidNameTitle: "L'adreça URL de la pàgina no és vàlida"
@ -2434,7 +2443,7 @@ _notification:
_types: _types:
all: "Tots" all: "Tots"
note: "Notes noves" note: "Notes noves"
follow: "Seguint" follow: "Segueix-me"
mention: "Menció" mention: "Menció"
reply: "Respostes" reply: "Respostes"
renote: "Renotar" renote: "Renotar"
@ -2450,7 +2459,7 @@ _notification:
test: "Prova la notificació" test: "Prova la notificació"
app: "Notificacions d'aplicacions" app: "Notificacions d'aplicacions"
_actions: _actions:
followBack: "t'ha seguit també" followBack: "També et segueix"
reply: "Respondre" reply: "Respondre"
renote: "Renotar" renote: "Renotar"
_deck: _deck:
@ -2717,6 +2726,66 @@ _contextMenu:
app: "Aplicació " app: "Aplicació "
appWithShift: "Aplicació amb la tecla shift" appWithShift: "Aplicació amb la tecla shift"
native: "Interfície del navegador" native: "Interfície del navegador"
_gridComponent:
_error:
requiredValue: "Aquest camp és obligatori"
columnTypeNotSupport: "La validació d'expressions regulars només s'admet per columnes de tipus text."
patternNotMatch: "Aquest valor no coincideix amb {pattern}"
notUnique: "Aquest valor ha de ser únic "
_roleSelectDialog:
notSelected: "No seleccionat"
_customEmojisManager:
_gridCommon:
copySelectionRows: "Copiar línies seleccionades "
copySelectionRanges: "Copiar selecció "
deleteSelectionRows: "Esborrar línies seleccionades"
deleteSelectionRanges: "Esborrar files de la selecció "
searchSettings: "Configuració del cercador"
searchSettingCaption: "Defineix criteris de cerca detallats."
searchLimit: "Nombre de pantalles"
sortOrder: "Ordenar"
registrationLogs: "Registres d'inscripcions "
registrationLogsCaption: "Quan s'actualitzin o s'esborrin emojis es mostrarà un registre. Desapareixeran quan s'actualitzin, s'esborrin, visitis una nova pàgina o la recarreguis."
alertEmojisRegisterFailedDescription: "No s'ha pogut actualitzar o esborrar l'emoji. Si us plau, dona una ullada al registre per més detalls."
_logs:
showSuccessLogSwitch: "Mostrar el registre d'èxit "
failureLogNothing: "No hi ha registres de fallades."
logNothing: "No hi ha registres."
_remote:
selectionRowDetail: "Detall de la línia seleccionada"
importSelectionRows: "Importar les files seleccionades"
importSelectionRangesRows: "Importar les files de la selecció "
importEmojisButton: "Importar els Emojis marcats"
confirmImportEmojisTitle: "Importar Emojis"
confirmImportEmojisDescription: "Importar {count} Emojis d'una adreça remota. Tingues cura de les llicències dels Emojis. Vols importar-los?"
_local:
tabTitleList: "Llistar els Emojis registrats"
tabTitleRegister: "Registre d'Emojis"
_list:
emojisNothing: "No hi ha Emojis registrats"
markAsDeleteTargetRows: "Files seleccionades que s'han d'esborrar "
markAsDeleteTargetRanges: "Selecció de files per la seva eliminació "
alertUpdateEmojisNothingDescription: "No hi ha Emojis actualitzats."
alertDeleteEmojisNothingDescription: "No hi ha Emoji per esborrar."
confirmMovePage: "Vols canviar de pàgina?"
confirmChangeView: "Vols canviar la pantalla?"
confirmUpdateEmojisDescription: "Actualitzar {count} Emojis. Vols executar-ho?"
confirmDeleteEmojisDescription: "Esborrar {count} Emojis marcats. Vols continuar?"
confirmResetDescription: "Es restabliran tots els canvis fets fins ara."
confirmMovePageDesciption: "S'han fet canvis als Emojis d'aquesta pàgina. Si continues navegant sense guardar els canvis, es perdran tots els canvis fets en aquesta pàgina."
dialogSelectRoleTitle: "Buscar Emojis per rol"
_register:
uploadSettingTitle: "Actualitza la configuració "
uploadSettingDescription: "En aquesta pantalla pots configurar el que s'ha de fer quan es puja un Emoji."
directoryToCategoryLabel: "Escriu el nom del directori al camp de \"categoria\""
directoryToCategoryCaption: "Quan arrossegues un directori, escriu el nom del directori al camp categoria."
emojiInputAreaCaption: "Selecciona els Emojis que vols registrar gent servir un dels mètodes."
emojiInputAreaList1: "Arrossega i deixar anar fitxers o directoris dintre del quadrat."
emojiInputAreaList2: "Clica l'enllaç per seleccionar un fitxer des del teu ordinador."
emojiInputAreaList3: "Clica aquest enllaç per seleccionar del Disc"
confirmRegisterEmojisDescription: "Registrar els Emojis de la llista com a nous Emojis personalitzats. Vols continuar? (Per evitar una sobrecàrrega només {count} Emojis es poden registrar d'una sola vegada)"
confirmClearEmojisDescription: "Descartar els canvis i esborrar els Emojis de la llista. Vols continuar?"
confirmUploadEmojisDescription: "Pujar els {count} fitxers que has arrossegat al disc. Vols continuar?"
_embedCodeGen: _embedCodeGen:
title: "Personalitza el codi per incrustar" title: "Personalitza el codi per incrustar"
header: "Mostrar la capçalera" header: "Mostrar la capçalera"
@ -2737,3 +2806,37 @@ _selfXssPrevention:
description1: "Si posa alguna cosa al seu compte, un usuari malintencionat podria segrestar-la o robar-li les dades." description1: "Si posa alguna cosa al seu compte, un usuari malintencionat podria segrestar-la o robar-li les dades."
description2: "Si no entens que estàs fent %cpara ara mateix i tanca la finestra." description2: "Si no entens que estàs fent %cpara ara mateix i tanca la finestra."
description3: "Per obtenir més informació. {link}" description3: "Per obtenir més informació. {link}"
_followRequest:
recieved: "Sol·licituds rebudes"
sent: "Sol·licituds enviades"
_remoteLookupErrors:
_federationNotAllowed:
title: "No es pot establir connexió amb aquest servidor"
description: "És possible que s'hagi desactivat la comunicació amb aquest servidor o que hagi estat bloquejat.\nPosa't en contacte amb l'administrador del servidor."
_uriInvalid:
title: "L'adreça és incorrecte"
description: "Hi ha un problema amb l'adreça introduïda; comprova que no hagis escrit caràcters que no es puguin fer servir."
_requestFailed:
title: "La sol·licitud a fallat"
description: "La comunicació amb aquest servidor a fallat. És possible que l'altre servidor no funcioni. Comprova també que no has posat una adreça no vàlida o inexistent."
_responseInvalid:
title: "La resposta no és correcta "
description: "Hem pogut comunicar-nos amb aquest servidor, però les dades rebudes no són correctes."
_responseInvalidIdHostNotMatch:
description: "El domini de l'adreça introduïda no és el mateix que el domini de l'adreça final obtinguda. Si estàs consultant continguts remots mitjançant servidors tercers, torna a fer la consulta fent servir l'adreça que es pot obtenir en el servidor origen."
_noSuchObject:
title: "No s'ha trobat"
description: "No es pot trobar el recurs sol·licitat, si us plau comprova l'adreça una altra vegada."
_captcha:
verify: "Passar pel CAPTCHA"
testSiteKeyMessage: "Pots comprovar una vista prèvia introduïnt valors de prova per la clau del lloc i la clau secreta. Si vols més informació consulteu la següent pàgina."
_error:
_requestFailed:
title: "Ha fallat la sol·licitud del CAPTCHA"
text: "Si us plau, torna a intentar-ho d'aquí una estona o comprova els ajustos de nou."
_verificationFailed:
title: "Ha fallat la validació CAPTCHA"
text: "Comprova que els ajustos són els correctes."
_unknown:
title: "Error CAPTCHA"
text: "S'ha produït un error inesperat."

View file

@ -348,7 +348,6 @@ enableLocalTimeline: "Povolit lokální čas"
enableGlobalTimeline: "Povolit globální čas" enableGlobalTimeline: "Povolit globální čas"
disablingTimelinesInfo: "Administrátoři a Moderátoři budou mít stálý přístup ke všem časovým osám i přes to že nejsou zapnuté." disablingTimelinesInfo: "Administrátoři a Moderátoři budou mít stálý přístup ke všem časovým osám i přes to že nejsou zapnuté."
registration: "Registrace" registration: "Registrace"
enableRegistration: "Povolit registraci novým uživatelům"
invite: "Pozvat" invite: "Pozvat"
driveCapacityPerLocalAccount: "Kapacita disku na lokálního uživatele" driveCapacityPerLocalAccount: "Kapacita disku na lokálního uživatele"
driveCapacityPerRemoteAccount: "Kapacita disku na vzdáleného uživatele" driveCapacityPerRemoteAccount: "Kapacita disku na vzdáleného uživatele"
@ -1884,9 +1883,6 @@ _pages:
newPage: "Vytvořit novou stránku" newPage: "Vytvořit novou stránku"
editPage: "Upravit stránku" editPage: "Upravit stránku"
readPage: "Prohlížení zdroje této stránky" readPage: "Prohlížení zdroje této stránky"
created: "Stránka byla úspěšně vytvořena"
updated: "Stránka byla úspěšně aktualizována"
deleted: "Stránka byla úspěšně smazána"
pageSetting: "Nastavení stránky" pageSetting: "Nastavení stránky"
nameAlreadyExists: "Zadaná adresa URL stránky již existuje" nameAlreadyExists: "Zadaná adresa URL stránky již existuje"
invalidNameTitle: "Zadaná adresa URL stránky je neplatná" invalidNameTitle: "Zadaná adresa URL stránky je neplatná"
@ -2025,3 +2021,6 @@ _moderationLogTypes:
createInvitation: "Vygenerovat pozvánku" createInvitation: "Vygenerovat pozvánku"
_reversi: _reversi:
total: "Celkem" total: "Celkem"
_remoteLookupErrors:
_noSuchObject:
title: "Nenalezeno"

View file

@ -5,9 +5,13 @@ introMisskey: "Willkommen! Misskey ist eine dezentralisierte Open-Source Microbl
poweredByMisskeyDescription: "{name} ist einer der durch die Open-Source-Plattform <b>Misskey</b> betriebenen Dienste." poweredByMisskeyDescription: "{name} ist einer der durch die Open-Source-Plattform <b>Misskey</b> betriebenen Dienste."
monthAndDay: "{day}.{month}." monthAndDay: "{day}.{month}."
search: "Suchen" search: "Suchen"
reset: "Zurücksetzen"
notifications: "Benachrichtigungen" notifications: "Benachrichtigungen"
username: "Benutzername" username: "Benutzername"
password: "Passwort" password: "Passwort"
initialPasswordForSetup: "Initiales Passwort für die Einrichtung"
initialPasswordIsIncorrect: "Das initiale Passwort für die Einrichtung ist falsch"
initialPasswordForSetupDescription: "Verwende das in der Konfigurationsdatei angegebene Passwort, wenn du Misskey selbst installiert hast.\nWenn du einen Misskey-Hostingdienst o.ä. nutzt, verwende das dort angegebene Kennwort.\nWenn du kein Passwort festgelegt hast, lasse es leer, um fortzufahren."
forgotPassword: "Passwort vergessen" forgotPassword: "Passwort vergessen"
fetchingAsApObject: "Wird aus dem Fediverse angefragt …" fetchingAsApObject: "Wird aus dem Fediverse angefragt …"
ok: "OK" ok: "OK"
@ -45,6 +49,7 @@ pin: "An dein Profil anheften"
unpin: "Von deinem Profil lösen" unpin: "Von deinem Profil lösen"
copyContent: "Inhalt kopieren" copyContent: "Inhalt kopieren"
copyLink: "Link kopieren" copyLink: "Link kopieren"
copyRemoteLink: "Renote-Link kopieren"
copyLinkRenote: "Renote-Link kopieren" copyLinkRenote: "Renote-Link kopieren"
delete: "Löschen" delete: "Löschen"
deleteAndEdit: "Löschen und Bearbeiten" deleteAndEdit: "Löschen und Bearbeiten"
@ -60,6 +65,7 @@ copyFileId: "Datei-ID kopieren"
copyFolderId: "Ordner-ID kopieren" copyFolderId: "Ordner-ID kopieren"
copyProfileUrl: "Profil-URL kopieren" copyProfileUrl: "Profil-URL kopieren"
searchUser: "Nach einem Benutzer suchen" searchUser: "Nach einem Benutzer suchen"
searchThisUsersNotes: "Notizen dieses Benutzers suchen"
reply: "Antworten" reply: "Antworten"
loadMore: "Mehr laden" loadMore: "Mehr laden"
showMore: "Mehr anzeigen" showMore: "Mehr anzeigen"
@ -108,11 +114,14 @@ enterEmoji: "Gib ein Emoji ein"
renote: "Renote" renote: "Renote"
unrenote: "Renote zurücknehmen" unrenote: "Renote zurücknehmen"
renoted: "Renote getätigt." renoted: "Renote getätigt."
renotedToX: "Renoted zu {name}."
cantRenote: "Renote dieses Beitrags nicht möglich." cantRenote: "Renote dieses Beitrags nicht möglich."
cantReRenote: "Renote einer Renote nicht möglich." cantReRenote: "Renote einer Renote nicht möglich."
quote: "Zitieren" quote: "Zitieren"
inChannelRenote: "Kanal-interner Renote" inChannelRenote: "Kanal-interner Renote"
inChannelQuote: "Kanal-internes Zitat" inChannelQuote: "Kanal-internes Zitat"
renoteToChannel: "Renote zu Kanal"
renoteToOtherChannel: "Renote zu anderem Kanal"
pinnedNote: "Angeheftete Notiz" pinnedNote: "Angeheftete Notiz"
pinned: "Angeheftet" pinned: "Angeheftet"
you: "Du" you: "Du"
@ -124,12 +133,13 @@ reactions: "Reaktionen"
emojiPicker: "Emoji auswählen" emojiPicker: "Emoji auswählen"
pinnedEmojisForReactionSettingDescription: "Lege Emojis fest, die angepinnt werden sollen, um sie beim Reagieren als Erstes anzuzeigen." pinnedEmojisForReactionSettingDescription: "Lege Emojis fest, die angepinnt werden sollen, um sie beim Reagieren als Erstes anzuzeigen."
pinnedEmojisSettingDescription: "Lege Emojis fest, die angepinnt werden sollen, um sie in der Emoji-Auswahl als Erstes anzuzeigen" pinnedEmojisSettingDescription: "Lege Emojis fest, die angepinnt werden sollen, um sie in der Emoji-Auswahl als Erstes anzuzeigen"
emojiPickerDisplay: "Anzeige der Emoji-Auswahl"
overwriteFromPinnedEmojisForReaction: "Überschreiben mit den Reaktions-Einstellungen" overwriteFromPinnedEmojisForReaction: "Überschreiben mit den Reaktions-Einstellungen"
overwriteFromPinnedEmojis: "Überschreiben mit den allgemeinen Einstellungen" overwriteFromPinnedEmojis: "Überschreiben mit den allgemeinen Einstellungen"
reactionSettingDescription2: "Ziehe um Anzuordnen, klicke um zu löschen, drücke „+“ um hinzuzufügen" reactionSettingDescription2: "Ziehe um Anzuordnen, klicke um zu löschen, drücke „+“ um hinzuzufügen"
rememberNoteVisibility: "Notizsichtbarkeit merken" rememberNoteVisibility: "Notizsichtbarkeit merken"
attachCancel: "Anhang entfernen" attachCancel: "Anhang entfernen"
deleteFile: "Datei gelöscht" deleteFile: "Datei löschen"
markAsSensitive: "Als sensibel markieren" markAsSensitive: "Als sensibel markieren"
unmarkAsSensitive: "Als nicht sensibel markieren" unmarkAsSensitive: "Als nicht sensibel markieren"
enterFileName: "Dateinamen eingeben" enterFileName: "Dateinamen eingeben"
@ -150,6 +160,7 @@ editList: "Liste bearbeiten"
selectChannel: "Kanal auswählen" selectChannel: "Kanal auswählen"
selectAntenna: "Antenne auswählen" selectAntenna: "Antenne auswählen"
editAntenna: "Antenne bearbeiten" editAntenna: "Antenne bearbeiten"
createAntenna: "Erstelle eine Antenne"
selectWidget: "Widget auswählen" selectWidget: "Widget auswählen"
editWidgets: "Widgets bearbeiten" editWidgets: "Widgets bearbeiten"
editWidgetsExit: "Fertig" editWidgetsExit: "Fertig"
@ -176,6 +187,10 @@ addAccount: "Benutzerkonto hinzufügen"
reloadAccountsList: "Benutzerkontoliste aktualisieren" reloadAccountsList: "Benutzerkontoliste aktualisieren"
loginFailed: "Anmeldung fehlgeschlagen" loginFailed: "Anmeldung fehlgeschlagen"
showOnRemote: "Auf Ursprungsinstanz ansehen" showOnRemote: "Auf Ursprungsinstanz ansehen"
continueOnRemote: "Weiter auf Remote-Server"
chooseServerOnMisskeyHub: "Wähle einen Server aus dem Misskey Hub"
specifyServerHost: "Server-Host auswählen"
inputHostName: "Gib die Domain an"
general: "Allgemein" general: "Allgemein"
wallpaper: "Hintergrund" wallpaper: "Hintergrund"
setWallpaper: "Hintergrund festlegen" setWallpaper: "Hintergrund festlegen"
@ -186,6 +201,7 @@ followConfirm: "Möchtest du {name} wirklich folgen?"
proxyAccount: "Proxy-Benutzerkonto" proxyAccount: "Proxy-Benutzerkonto"
proxyAccountDescription: "Ein Proxy-Konto ist ein Benutzerkonto, das unter bestimmten Bedingungen als Follower für Benutzer fremder Instanzen fungiert. Wenn zum Beispiel ein Benutzer einen Benutzer einer fremden Instanz zu einer Liste hinzufügt, werden die Aktivitäten des entfernten Benutzers nicht an die Instanz übermittelt, wenn kein lokaler Benutzer diesem Benutzer folgt; stattdessen folgt das Proxy-Konto." proxyAccountDescription: "Ein Proxy-Konto ist ein Benutzerkonto, das unter bestimmten Bedingungen als Follower für Benutzer fremder Instanzen fungiert. Wenn zum Beispiel ein Benutzer einen Benutzer einer fremden Instanz zu einer Liste hinzufügt, werden die Aktivitäten des entfernten Benutzers nicht an die Instanz übermittelt, wenn kein lokaler Benutzer diesem Benutzer folgt; stattdessen folgt das Proxy-Konto."
host: "Hostname" host: "Hostname"
selectSelf: "Mich auswählen"
selectUser: "Benutzer auswählen" selectUser: "Benutzer auswählen"
recipient: "Empfänger" recipient: "Empfänger"
annotation: "Anmerkung" annotation: "Anmerkung"
@ -201,6 +217,7 @@ perDay: "Pro Tag"
stopActivityDelivery: "Senden von Aktivitäten einstellen" stopActivityDelivery: "Senden von Aktivitäten einstellen"
blockThisInstance: "Diese Instanz blockieren" blockThisInstance: "Diese Instanz blockieren"
silenceThisInstance: "Instanz stummschalten" silenceThisInstance: "Instanz stummschalten"
mediaSilenceThisInstance: "Medien dieses Servers stummschalten"
operations: "Aktionen" operations: "Aktionen"
software: "Software" software: "Software"
version: "Version" version: "Version"
@ -222,6 +239,10 @@ blockedInstances: "Blockierte Instanzen"
blockedInstancesDescription: "Gib die Hostnamen der Instanzen, welche blockiert werden sollen, durch Zeilenumbrüche getrennt an. Blockierte Instanzen können mit dieser instanz nicht mehr kommunizieren." blockedInstancesDescription: "Gib die Hostnamen der Instanzen, welche blockiert werden sollen, durch Zeilenumbrüche getrennt an. Blockierte Instanzen können mit dieser instanz nicht mehr kommunizieren."
silencedInstances: "Stummgeschaltete Instanzen" silencedInstances: "Stummgeschaltete Instanzen"
silencedInstancesDescription: "Gib die Hostnamen der Instanzen, welche stummgeschaltet werden sollen, durch Zeilenumbrüche getrennt an. Alle Konten dieser Instanzen werden als stummgeschaltet behandelt, können nur noch Follow-Anfragen stellen und wenn nicht gefolgt keine lokalen Konten erwähnen. Blockierte Instanzen sind davon nicht betroffen." silencedInstancesDescription: "Gib die Hostnamen der Instanzen, welche stummgeschaltet werden sollen, durch Zeilenumbrüche getrennt an. Alle Konten dieser Instanzen werden als stummgeschaltet behandelt, können nur noch Follow-Anfragen stellen und wenn nicht gefolgt keine lokalen Konten erwähnen. Blockierte Instanzen sind davon nicht betroffen."
mediaSilencedInstances: "Medien-stummgeschaltete Server"
mediaSilencedInstancesDescription: "Gib pro Zeile die Hostnamen der Server ein, dessen Medien du stummschalten möchtest. Alle Benutzerkonten der aufgeführten Server werden als sensibel behandelt und können keine benutzerdefinierten Emojis verwenden. Gesperrte Server sind davon nicht betroffen."
federationAllowedHosts: "Föderierte Instanzen"
federationAllowedHostsDescription: "Trage die Hostnamen ein mit den du eine Föderation eingehen möchtest. Trenne mit Zeilenumbruch."
muteAndBlock: "Stummschaltungen und Blockierungen" muteAndBlock: "Stummschaltungen und Blockierungen"
mutedUsers: "Stummgeschaltete Benutzer" mutedUsers: "Stummgeschaltete Benutzer"
blockedUsers: "Blockierte Benutzer" blockedUsers: "Blockierte Benutzer"
@ -312,6 +333,7 @@ selectFile: "Datei auswählen"
selectFiles: "Dateien auswählen" selectFiles: "Dateien auswählen"
selectFolder: "Ordner auswählen" selectFolder: "Ordner auswählen"
selectFolders: "Ordner auswählen" selectFolders: "Ordner auswählen"
fileNotSelected: "Keine Datei ausgewählt"
renameFile: "Datei umbenennen" renameFile: "Datei umbenennen"
folderName: "Ordnername" folderName: "Ordnername"
createFolder: "Ordner erstellen" createFolder: "Ordner erstellen"
@ -319,6 +341,7 @@ renameFolder: "Ordner umbenennen"
deleteFolder: "Ordner löschen" deleteFolder: "Ordner löschen"
folder: "Ordner" folder: "Ordner"
addFile: "Datei hinzufügen" addFile: "Datei hinzufügen"
showFile: "Datei anzeigen"
emptyDrive: "Deine Drive ist leer" emptyDrive: "Deine Drive ist leer"
emptyFolder: "Dieser Ordner ist leer" emptyFolder: "Dieser Ordner ist leer"
unableToDelete: "Nicht löschbar" unableToDelete: "Nicht löschbar"
@ -361,7 +384,6 @@ enableLocalTimeline: "Lokale Chronik aktivieren"
enableGlobalTimeline: "Globale Chronik aktivieren" enableGlobalTimeline: "Globale Chronik aktivieren"
disablingTimelinesInfo: "Administratoren und Moderatoren haben immer Zugriff auf alle Chroniken, auch wenn diese deaktiviert sind." disablingTimelinesInfo: "Administratoren und Moderatoren haben immer Zugriff auf alle Chroniken, auch wenn diese deaktiviert sind."
registration: "Registrieren" registration: "Registrieren"
enableRegistration: "Registrierung neuer Benutzer erlauben"
invite: "Einladen" invite: "Einladen"
driveCapacityPerLocalAccount: "Drive-Kapazität pro lokalem Benutzerkonto" driveCapacityPerLocalAccount: "Drive-Kapazität pro lokalem Benutzerkonto"
driveCapacityPerRemoteAccount: "Drive-Kapazität pro Benutzer fremder Instanzen" driveCapacityPerRemoteAccount: "Drive-Kapazität pro Benutzer fremder Instanzen"
@ -399,6 +421,7 @@ name: "Name"
antennaSource: "Antennenquelle" antennaSource: "Antennenquelle"
antennaKeywords: "Zu beobachtende Schlüsselwörter" antennaKeywords: "Zu beobachtende Schlüsselwörter"
antennaExcludeKeywords: "Zu ignorierende Schlüsselwörter" antennaExcludeKeywords: "Zu ignorierende Schlüsselwörter"
antennaExcludeBots: "Bot-Accounts ausschließen"
antennaKeywordsDescription: "Zum Nutzen einer \"UND\"-Verknüpfung Einträge mit Leerzeichen trennen, zum Nutzen einer \"ODER\"-Verknüpfung Einträge mit einem Zeilenumbruch trennen" 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" notifyAntenna: "Über neue Notizen benachrichtigen"
withFileAntenna: "Nur Notizen mit Dateien" withFileAntenna: "Nur Notizen mit Dateien"
@ -432,6 +455,7 @@ totpDescription: "Logge dich via Authentifizierungs-App mit Einmalpasswort ein"
moderator: "Moderator" moderator: "Moderator"
moderation: "Moderation" moderation: "Moderation"
moderationNote: "Moderationsnotiz" moderationNote: "Moderationsnotiz"
moderationNoteDescription: "Trage hier Notizen ein. Diese sind nur für die Moderatoren sichtbar."
addModerationNote: "Moderationsnotiz hinzufügen" addModerationNote: "Moderationsnotiz hinzufügen"
moderationLogs: "Moderationsprotokolle" moderationLogs: "Moderationsprotokolle"
nUsersMentioned: "Von {n} Benutzern erwähnt" nUsersMentioned: "Von {n} Benutzern erwähnt"
@ -466,10 +490,12 @@ retype: "Erneut eingeben"
noteOf: "Notiz von {user}" noteOf: "Notiz von {user}"
quoteAttached: "Zitat" quoteAttached: "Zitat"
quoteQuestion: "Als Zitat anhängen?" quoteQuestion: "Als Zitat anhängen?"
attachAsFileQuestion: "Der Text in der Zwischenablage ist lang. Möchtest du ihn als Textdatei anhängen?"
noMessagesYet: "Noch keine Nachrichten vorhanden" noMessagesYet: "Noch keine Nachrichten vorhanden"
newMessageExists: "Du hast eine neue Nachricht" newMessageExists: "Du hast eine neue Nachricht"
onlyOneFileCanBeAttached: "Es kann pro Nachricht nur eine Datei angehängt werden" onlyOneFileCanBeAttached: "Es kann pro Nachricht nur eine Datei angehängt werden"
signinRequired: "Bitte registriere oder melde dich an, um fortzufahren" signinRequired: "Bitte registriere oder melde dich an, um fortzufahren"
signinOrContinueOnRemote: "Um fortzufahren, gehe zu deiner Instanz oder registriere bzw. melde dich an dieser Instanz an. "
invitations: "Einladungen" invitations: "Einladungen"
invitationCode: "Einladungscode" invitationCode: "Einladungscode"
checking: "Wird überprüft …" checking: "Wird überprüft …"
@ -491,7 +517,12 @@ uiLanguage: "Sprache der Benutzeroberfläche"
aboutX: "Über {x}" aboutX: "Über {x}"
emojiStyle: "Emoji-Stil" emojiStyle: "Emoji-Stil"
native: "Nativ" native: "Nativ"
menuStyle: "Menü Stil"
style: "Stil"
drawer: "App-Übersicht"
popup: "Pop-up"
showNoteActionsOnlyHover: "Notizmenü nur bei Mouseover anzeigen" showNoteActionsOnlyHover: "Notizmenü nur bei Mouseover anzeigen"
showReactionsCount: "Zeige die Anzahl der Reaktionen auf Notizen an"
noHistory: "Kein Verlauf gefunden" noHistory: "Kein Verlauf gefunden"
signinHistory: "Anmeldungsverlauf" signinHistory: "Anmeldungsverlauf"
enableAdvancedMfm: "Erweitertes MFM aktivieren" enableAdvancedMfm: "Erweitertes MFM aktivieren"
@ -557,6 +588,7 @@ masterVolume: "Gesamtlautstärke"
notUseSound: "Gebe kein Ton aus" notUseSound: "Gebe kein Ton aus"
useSoundOnlyWhenActive: "Gebe nur Ton aus, wenn Misskey aktiv ist" useSoundOnlyWhenActive: "Gebe nur Ton aus, wenn Misskey aktiv ist"
details: "Details" details: "Details"
renoteDetails: "Renote Details"
chooseEmoji: "Emoji auswählen" chooseEmoji: "Emoji auswählen"
unableToProcess: "Der Vorgang konnte nicht abgeschlossen werden" unableToProcess: "Der Vorgang konnte nicht abgeschlossen werden"
recentUsed: "Vor kurzem verwendet" recentUsed: "Vor kurzem verwendet"
@ -572,6 +604,8 @@ ascendingOrder: "Aufsteigende Reihenfolge"
descendingOrder: "Absteigende Reihenfolge" descendingOrder: "Absteigende Reihenfolge"
scratchpad: "Testumgebung" scratchpad: "Testumgebung"
scratchpadDescription: "Die Testumgebung bietet einen Bereich für AiScript-Experimente. Dort kannst du AiScript schreiben, ausführen sowie dessen Auswirkungen auf Misskey überprüfen." scratchpadDescription: "Die Testumgebung bietet einen Bereich für AiScript-Experimente. Dort kannst du AiScript schreiben, ausführen sowie dessen Auswirkungen auf Misskey überprüfen."
uiInspector: "UI-Inspektor"
uiInspectorDescription: "Die Liste der UI-Komponenten-Server können im Zwischenspeicher angesehen werden. Die UI-Komponente wird von der Funktion Ui:C: generiert."
output: "Ausgabe" output: "Ausgabe"
script: "Skript" script: "Skript"
disablePagesScript: "AiScript auf Seiten deaktivieren" disablePagesScript: "AiScript auf Seiten deaktivieren"
@ -652,10 +686,15 @@ smtpSecure: "Für SMTP-Verbindungen implizit SSL/TLS verwenden"
smtpSecureInfo: "Schalte dies aus, falls du STARTTLS verwendest." smtpSecureInfo: "Schalte dies aus, falls du STARTTLS verwendest."
testEmail: "Emailversand testen" testEmail: "Emailversand testen"
wordMute: "Wortstummschaltung" wordMute: "Wortstummschaltung"
wordMuteDescription: "Minimiert Notizen, die das angegebene Wort oder den angegebenen Ausdruck enthalten. Minimierte Notizen können angezeigt werden, indem du auf sie klickst."
hardWordMute: "Harte Wortstummschaltung"
showMutedWord: "Stummgeschaltete Wörter anzeigen"
hardWordMuteDescription: "Blendet Notizen aus, die das angegebene Wort oder die angegebene Phrase enthalten. Im Gegensatz zur Wortstummschaltung wird die Notiz vollständig ausgeblendet."
regexpError: "Fehler in einem regulären Ausdruck" regexpError: "Fehler in einem regulären Ausdruck"
regexpErrorDescription: "Im regulären Ausdruck deiner in Zeile {line} von {tab}en Wortstummschaltungen ist ein Fehler aufgetreten:" regexpErrorDescription: "Im regulären Ausdruck deiner in Zeile {line} von {tab}en Wortstummschaltungen ist ein Fehler aufgetreten:"
instanceMute: "Instanzstummschaltungen" instanceMute: "Instanzstummschaltungen"
userSaysSomething: "{name} hat etwas gesagt" userSaysSomething: "{name} hat etwas gesagt"
userSaysSomethingAbout: "{name} sagt etwas über '{word}'"
makeActive: "Aktivieren" makeActive: "Aktivieren"
display: "Anzeigeart" display: "Anzeigeart"
copy: "Kopieren" copy: "Kopieren"
@ -673,6 +712,7 @@ useGlobalSettingDesc: "Ist diese Option aktiviert, werden die Benachrichtigungse
other: "Anderes" other: "Anderes"
regenerateLoginToken: "Anmeldetoken regenerieren" regenerateLoginToken: "Anmeldetoken regenerieren"
regenerateLoginTokenDescription: "Den zur Anmeldung intern verwendeten Token regenerieren. Normalerweise wird dies nicht benötigt. Bei Regeneration werden alle Geräte ausgeloggt." regenerateLoginTokenDescription: "Den zur Anmeldung intern verwendeten Token regenerieren. Normalerweise wird dies nicht benötigt. Bei Regeneration werden alle Geräte ausgeloggt."
theKeywordWhenSearchingForCustomEmoji: "Das ist das Schlagwort beim Suchen von benutzerdefinierten Emojis."
setMultipleBySeparatingWithSpace: "Trenne Elemente durch ein Leerzeichen um mehrere Einstellungen zu kofigurieren." setMultipleBySeparatingWithSpace: "Trenne Elemente durch ein Leerzeichen um mehrere Einstellungen zu kofigurieren."
fileIdOrUrl: "Datei-ID oder URL" fileIdOrUrl: "Datei-ID oder URL"
behavior: "Verhalten" behavior: "Verhalten"
@ -823,6 +863,7 @@ administration: "Verwaltung"
accounts: "Benutzerkonten" accounts: "Benutzerkonten"
switch: "Wechseln" switch: "Wechseln"
noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert." noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert."
noInquiryUrlWarning: "Keine gültige URL."
noBotProtectionWarning: "Schutz vor Bots ist nicht konfiguriert." noBotProtectionWarning: "Schutz vor Bots ist nicht konfiguriert."
configure: "Konfigurieren" configure: "Konfigurieren"
postToGallery: "Neuen Galeriebeitrag erstellen" postToGallery: "Neuen Galeriebeitrag erstellen"
@ -882,9 +923,12 @@ makeReactionsPublicDescription: "Jeder wird die Liste deiner gesendeten Reaktion
classic: "Classic" classic: "Classic"
muteThread: "Thread stummschalten" muteThread: "Thread stummschalten"
unmuteThread: "Threadstummschaltung aufheben" unmuteThread: "Threadstummschaltung aufheben"
followingVisibility: "Sichtbarkeit der Gefolgten"
followersVisibility: "Sichtbarkeit der Folgenden"
continueThread: "Weiteren Threadverlauf anzeigen" continueThread: "Weiteren Threadverlauf anzeigen"
deleteAccountConfirm: "Dein Benutzerkonto wird unwiderruflich gelöscht. Trotzdem fortfahren?" deleteAccountConfirm: "Dein Benutzerkonto wird unwiderruflich gelöscht. Trotzdem fortfahren?"
incorrectPassword: "Falsches Passwort." incorrectPassword: "Falsches Passwort."
incorrectTotp: "Das Einmalpasswort ist falsch oder abgelaufen."
voteConfirm: "Wirklich für „{choice}“ abstimmen?" voteConfirm: "Wirklich für „{choice}“ abstimmen?"
hide: "Inhalt verbergen" hide: "Inhalt verbergen"
useDrawerReactionPickerForMobile: "Auf mobilen Geräten ausfahrbare Reaktionsauswahl anzeigen" useDrawerReactionPickerForMobile: "Auf mobilen Geräten ausfahrbare Reaktionsauswahl anzeigen"
@ -909,6 +953,9 @@ oneHour: "Eine Stunde"
oneDay: "Einen Tag" oneDay: "Einen Tag"
oneWeek: "Eine Woche" oneWeek: "Eine Woche"
oneMonth: "1 Monat" oneMonth: "1 Monat"
threeMonths: "3 Monate"
oneYear: "1 Jahr"
threeDays: "3 Tage"
reflectMayTakeTime: "Es kann etwas dauern, bis sich dies widerspiegelt." reflectMayTakeTime: "Es kann etwas dauern, bis sich dies widerspiegelt."
failedToFetchAccountInformation: "Benutzerkontoinformationen konnten nicht abgefragt werden" failedToFetchAccountInformation: "Benutzerkontoinformationen konnten nicht abgefragt werden"
rateLimitExceeded: "Versuchsanzahl überschritten" rateLimitExceeded: "Versuchsanzahl überschritten"
@ -982,6 +1029,7 @@ neverShow: "Nicht wieder anzeigen"
remindMeLater: "Vielleicht später" remindMeLater: "Vielleicht später"
didYouLikeMisskey: "Gefällt dir Misskey?" didYouLikeMisskey: "Gefällt dir Misskey?"
pleaseDonate: "Misskey ist die kostenlose Software, die von {host} verwendet wird. Wir würden uns über Spenden freuen, damit dessen Entwicklung weitergeführt werden kann!" pleaseDonate: "Misskey ist die kostenlose Software, die von {host} verwendet wird. Wir würden uns über Spenden freuen, damit dessen Entwicklung weitergeführt werden kann!"
correspondingSourceIsAvailable: "Der entsprechende Quellcode ist verfügbar unter {anchor}"
roles: "Rollen" roles: "Rollen"
role: "Rolle" role: "Rolle"
noRole: "Rolle nicht gefunden" noRole: "Rolle nicht gefunden"
@ -1009,6 +1057,7 @@ thisPostMayBeAnnoyingHome: "Zur Startseite schicken"
thisPostMayBeAnnoyingCancel: "Abbrechen" thisPostMayBeAnnoyingCancel: "Abbrechen"
thisPostMayBeAnnoyingIgnore: "Trotzdem schicken" thisPostMayBeAnnoyingIgnore: "Trotzdem schicken"
collapseRenotes: "Bereits gesehene Renotes verkürzt anzeigen" collapseRenotes: "Bereits gesehene Renotes verkürzt anzeigen"
collapseRenotesDescription: "Klappe Notizen ein, auf die du bereits reagiert oder die du renoted hast."
internalServerError: "Serverinterner Fehler" internalServerError: "Serverinterner Fehler"
internalServerErrorDescription: "Im Server ist ein unerwarteter Fehler aufgetreten." internalServerErrorDescription: "Im Server ist ein unerwarteter Fehler aufgetreten."
copyErrorInfo: "Fehlerdetails kopieren" copyErrorInfo: "Fehlerdetails kopieren"
@ -1032,6 +1081,8 @@ resetPasswordConfirm: "Wirklich Passwort zurücksetzen?"
sensitiveWords: "Sensible Wörter" sensitiveWords: "Sensible Wörter"
sensitiveWordsDescription: "Die Notizsichtbarkeit aller Notizen, die diese Wörter enthalten, wird automatisch auf \"Startseite\" gesetzt. Durch Zeilenumbrüche können mehrere konfiguriert werden." sensitiveWordsDescription: "Die Notizsichtbarkeit aller Notizen, die diese Wörter enthalten, wird automatisch auf \"Startseite\" gesetzt. Durch Zeilenumbrüche können mehrere konfiguriert werden."
sensitiveWordsDescription2: "Durch die Verwendung von Leerzeichen können AND-Verknüpfungen angegeben werden und durch das Umgeben von Schrägstrichen können reguläre Ausdrücke verwendet werden." sensitiveWordsDescription2: "Durch die Verwendung von Leerzeichen können AND-Verknüpfungen angegeben werden und durch das Umgeben von Schrägstrichen können reguläre Ausdrücke verwendet werden."
prohibitedWords: "Verbotene Wörter"
prohibitedWordsDescription: "Aktiviert eine Fehlermeldung, wenn versucht wird, eine Notiz zu veröffentlichen, die das/die eingestellte(n) Wort(e) enthält. Mehrere Begriffe können durch Zeilenumbrüche getrennt festgelegt werden."
prohibitedWordsDescription2: "Durch die Verwendung von Leerzeichen können AND-Verknüpfungen angegeben werden und durch das Umgeben von Schrägstrichen können reguläre Ausdrücke verwendet werden." prohibitedWordsDescription2: "Durch die Verwendung von Leerzeichen können AND-Verknüpfungen angegeben werden und durch das Umgeben von Schrägstrichen können reguläre Ausdrücke verwendet werden."
hiddenTags: "Ausgeblendete Hashtags" hiddenTags: "Ausgeblendete Hashtags"
hiddenTagsDescription: "Die hier eingestellten Tags werden nicht mehr in den Trends angezeigt. Mit der Umschalttaste können mehrere ausgewählt werden." hiddenTagsDescription: "Die hier eingestellten Tags werden nicht mehr in den Trends angezeigt. Mit der Umschalttaste können mehrere ausgewählt werden."
@ -1045,12 +1096,15 @@ retryAllQueuesConfirmTitle: "Wirklich erneut versuchen?"
retryAllQueuesConfirmText: "Dies wird zu einer temporären Erhöhung der Serverlast führen." retryAllQueuesConfirmText: "Dies wird zu einer temporären Erhöhung der Serverlast führen."
enableChartsForRemoteUser: "Diagramme für Nutzer fremder Instanzen erstellen" enableChartsForRemoteUser: "Diagramme für Nutzer fremder Instanzen erstellen"
enableChartsForFederatedInstances: "Diagramme für fremde Instanzen erstellen" enableChartsForFederatedInstances: "Diagramme für fremde Instanzen erstellen"
enableStatsForFederatedInstances: "Abruf von Informationen über förderierte Server"
showClipButtonInNoteFooter: "\"Clip\" zum Notizmenu hinzufügen" showClipButtonInNoteFooter: "\"Clip\" zum Notizmenu hinzufügen"
reactionsDisplaySize: "Reaktionsanzeigegröße" reactionsDisplaySize: "Reaktionsanzeigegröße"
limitWidthOfReaction: "Begrenze die Breite der Reaktion und zeige sie verkleinert an" limitWidthOfReaction: "Begrenze die Breite der Reaktion und zeige sie verkleinert an"
noteIdOrUrl: "Notiz-ID oder URL" noteIdOrUrl: "Notiz-ID oder URL"
video: "Video" video: "Video"
videos: "Videos" videos: "Videos"
audio: "Audio"
audioFiles: "Audio"
dataSaver: "Datensparmodus" dataSaver: "Datensparmodus"
accountMigration: "Kontomigration" accountMigration: "Kontomigration"
accountMoved: "Dieser Benutzer ist zu einem neuen Konto migriert:" accountMoved: "Dieser Benutzer ist zu einem neuen Konto migriert:"
@ -1078,6 +1132,8 @@ preservedUsernames: "Reservierte Benutzernamen"
preservedUsernamesDescription: "Gib zu reservierende Benutzernamen durch Zeilenumbrüche getrennt an. Diese werden für die Registrierung gesperrt, können aber von Administratoren zur manuellen Erstellung von Konten verwendet werden. Existierende Konten, die diese Namen bereits verwenden, werden nicht beeinträchtigt." preservedUsernamesDescription: "Gib zu reservierende Benutzernamen durch Zeilenumbrüche getrennt an. Diese werden für die Registrierung gesperrt, können aber von Administratoren zur manuellen Erstellung von Konten verwendet werden. Existierende Konten, die diese Namen bereits verwenden, werden nicht beeinträchtigt."
createNoteFromTheFile: "Notiz für diese Datei schreiben" createNoteFromTheFile: "Notiz für diese Datei schreiben"
archive: "Archivieren" archive: "Archivieren"
archived: "Archiviert"
unarchive: "Dearchivieren"
channelArchiveConfirmTitle: "{name} wirklich archivieren?" channelArchiveConfirmTitle: "{name} wirklich archivieren?"
channelArchiveConfirmDescription: "Ein archivierter Kanal taucht nicht mehr in der Kanalliste oder in Suchergebnissen auf. Zudem können ihm keine Beiträge mehr hinzugefügt werden." channelArchiveConfirmDescription: "Ein archivierter Kanal taucht nicht mehr in der Kanalliste oder in Suchergebnissen auf. Zudem können ihm keine Beiträge mehr hinzugefügt werden."
thisChannelArchived: "Dieser Kanal wurde archiviert." thisChannelArchived: "Dieser Kanal wurde archiviert."
@ -1088,6 +1144,9 @@ preventAiLearning: "Verwendung in machinellem Lernen (Generative bzw. Prediktive
preventAiLearningDescription: "Fordert Crawler auf, gepostetes Text- oder Bildmaterial usw. nicht in Datensätzen für maschinelles Lernen (Generative bzw. Prediktive AI/KI) zu verwenden. Dies wird durch das Hinzufügen einer \"noai\"-Flag in der HTML-Antwort des jeweiligen Inhalts erreicht. Da diese Flag jedoch ignoriert werden kann, ist eine vollständige Verhinderung hierdurch nicht möglich." preventAiLearningDescription: "Fordert Crawler auf, gepostetes Text- oder Bildmaterial usw. nicht in Datensätzen für maschinelles Lernen (Generative bzw. Prediktive AI/KI) zu verwenden. Dies wird durch das Hinzufügen einer \"noai\"-Flag in der HTML-Antwort des jeweiligen Inhalts erreicht. Da diese Flag jedoch ignoriert werden kann, ist eine vollständige Verhinderung hierdurch nicht möglich."
options: "Optionen" options: "Optionen"
specifyUser: "Spezifischer Benutzer" specifyUser: "Spezifischer Benutzer"
lookupConfirm: "Zustimmen?"
openTagPageConfirm: "Hashtag Seite wirklich öffnen?"
specifyHost: "Host"
failedToPreviewUrl: "Vorschau nicht anzeigbar" failedToPreviewUrl: "Vorschau nicht anzeigbar"
update: "Aktualisieren" update: "Aktualisieren"
rolesThatCanBeUsedThisEmojiAsReaction: "Rollen, die dieses Emoji als Reaktion verwenden können" rolesThatCanBeUsedThisEmojiAsReaction: "Rollen, die dieses Emoji als Reaktion verwenden können"
@ -1146,6 +1205,7 @@ showRenotes: "Renotes anzeigen"
edited: "Bearbeitet" edited: "Bearbeitet"
notificationRecieveConfig: "Benachrichtigungseinstellungen" notificationRecieveConfig: "Benachrichtigungseinstellungen"
mutualFollow: "Gegenseitig gefolgt" mutualFollow: "Gegenseitig gefolgt"
followingOrFollower: "Follow oder Follower"
fileAttachedOnly: "Nur Notizen mit Dateien" fileAttachedOnly: "Nur Notizen mit Dateien"
showRepliesToOthersInTimeline: "Antworten in Chronik anzeigen" showRepliesToOthersInTimeline: "Antworten in Chronik anzeigen"
hideRepliesToOthersInTimeline: "Antworten nicht in Chronik anzeigen" hideRepliesToOthersInTimeline: "Antworten nicht in Chronik anzeigen"
@ -1155,6 +1215,12 @@ confirmShowRepliesAll: "Dies ist eine unwiderrufliche Aktion. Wirklich Antworten
confirmHideRepliesAll: "Dies ist eine unwiderrufliche Aktion. Wirklich Antworten von allen momentan gefolgten Benutzern nicht in der Chronik anzeigen?" confirmHideRepliesAll: "Dies ist eine unwiderrufliche Aktion. Wirklich Antworten von allen momentan gefolgten Benutzern nicht in der Chronik anzeigen?"
externalServices: "Externe Dienste" externalServices: "Externe Dienste"
sourceCode: "Quellcode" sourceCode: "Quellcode"
sourceCodeIsNotYetProvided: "Der Quellcode ist noch nicht verfügbar. Kontaktiere den Administrator, um das Problem zu lösen."
repositoryUrl: "Repository URL"
repositoryUrlDescription: "Solltest du Misskey so wie es ist verwenden (im unveränderten Quellcode), gebe Folgendes an:\nhttps://github.com/misskey-dev/misskey"
repositoryUrlOrTarballRequired: "Wenn du kein Repository veröffentlicht hast, musst du stattdessen einen Tarball bereitstellen. Siehe .config/example.yml für weitere Informationen."
feedback: "Feedback"
feedbackUrl: "Feedback-Website"
impressum: "Impressum" impressum: "Impressum"
impressumUrl: "Impressums-URL" impressumUrl: "Impressums-URL"
impressumDescription: "In manchen Ländern, wie Deutschland und dessen Umgebung, ist die Angabe von Betreiberinformationen (ein Impressum) bei kommerziellem Betrieb zwingend." impressumDescription: "In manchen Ländern, wie Deutschland und dessen Umgebung, ist die Angabe von Betreiberinformationen (ein Impressum) bei kommerziellem Betrieb zwingend."
@ -1164,6 +1230,7 @@ tosAndPrivacyPolicy: "Nutzungsbedingungen und Datenschutzerklärung"
avatarDecorations: "Profilbilddekoration" avatarDecorations: "Profilbilddekoration"
attach: "Anbringen" attach: "Anbringen"
detach: "Entfernen" detach: "Entfernen"
detachAll: "Alles Entfernen"
angle: "Winkel" angle: "Winkel"
flip: "Umdrehen" flip: "Umdrehen"
showAvatarDecorations: "Profilbilddekoration anzeigen" showAvatarDecorations: "Profilbilddekoration anzeigen"
@ -1176,15 +1243,105 @@ signupPendingError: "Beim Überprüfen der Mailadresse ist etwas schiefgelaufen.
cwNotationRequired: "Ist \"Inhaltswarnung verwenden\" aktiviert, muss eine Beschreibung gegeben werden." cwNotationRequired: "Ist \"Inhaltswarnung verwenden\" aktiviert, muss eine Beschreibung gegeben werden."
doReaction: "Reagieren" doReaction: "Reagieren"
code: "Code" code: "Code"
reloadRequiredToApplySettings: "Eine Aktualisierung ist erforderlich, um die Einstellungen zu übernehmen."
remainingN: "Verbleibend: {n}"
overwriteContentConfirm: "Bist du sicher, dass du den aktuellen Inhalt überschreiben willst?"
seasonalScreenEffect: "Saisonaler Bildschirmeffekt"
decorate: "Dekorieren" decorate: "Dekorieren"
addMfmFunction: "MFM hinzufügen" addMfmFunction: "MFM hinzufügen"
enableQuickAddMfmFunction: "Erweiterte MFM-Auswahl anzeigen"
bubbleGame: "Bubble Game"
sfx: "Soundeffekte" sfx: "Soundeffekte"
soundWillBePlayed: "Es wird Ton wiedergegeben"
showReplay: "Wiederholung anzeigen"
replay: "Aufzeichnen"
replaying: "Aufzeichnung"
endReplay: "Aufzeichnung verlassen"
copyReplayData: "Aufzeichnung kopieren"
ranking: "Rangliste"
lastNDays: "Letzten {n} Tage" lastNDays: "Letzten {n} Tage"
backToTitle: "Zurück zum Startbildschirm"
hemisphere: "Hemisphäre"
withSensitive: "Zeige \"sensitive Inhalte\" an"
userSaysSomethingSensitive: "{name} sagt etwas mit sensiblem Inhalt."
enableHorizontalSwipe: "Wischen, um zwischen Tabs zu wechseln"
loading: "Laden"
surrender: "Abbrechen" surrender: "Abbrechen"
gameRetry: "Erneut versuchen"
notUsePleaseLeaveBlank: "Leer lassen, wenn nicht verwendet"
useTotp: "Gib das Einmalpasswort ein"
useBackupCode: "Verwende die Backup-Codes"
launchApp: "Starte die App"
useNativeUIForVideoAudioPlayer: "Browser-Benutzeroberfläche für die Video- und Audiowiedergabe verwenden"
keepOriginalFilename: "Ursprünglichen Dateinamen beibehalten"
keepOriginalFilenameDescription: "Wenn diese Einstellung deaktiviert ist, wird der Dateiname beim Hochladen automatisch durch eine zufällige Zeichenfolge ersetzt."
noDescription: "Keine Beschreibung vorhanden"
alwaysConfirmFollow: "Folgen immer bestätigen"
inquiry: "Kontakt"
tryAgain: "Bitte später erneut versuchen"
confirmWhenRevealingSensitiveMedia: "Das Anzeigen von sensiblen Medien bestätigen"
sensitiveMediaRevealConfirm: "Es könnte sich um sensible Medien handeln. Möchtest du sie anzeigen?"
createdLists: "Erstellte Listen"
createdAntennas: "Erstellte Antennen"
fromX: "Von {x}"
genEmbedCode: "Einbettungscode generieren"
noteOfThisUser: "Notizen dieses Benutzers"
clipNoteLimitExceeded: "Zu diesem Clip können keine weiteren Notizen hinzugefügt werden."
performance: "Leistung"
modified: "Bearbeitet"
discard: "Verwerfen"
thereAreNChanges: "Es gibt {n} Änderung(en)"
signinWithPasskey: "Mit Passkey anmelden"
unknownWebAuthnKey: "Unbekannter Passkey"
passkeyVerificationFailed: "Die Passkey-Verifizierung ist fehlgeschlagen."
passkeyVerificationSucceededButPasswordlessLoginDisabled: "Die Verifizierung des Passkeys war erfolgreich, aber die passwortlose Anmeldung ist deaktiviert."
messageToFollower: "Nachricht an die Follower"
target: "Speicherort"
testCaptchaWarning: "Diese Funktion ist für CAPTCHA-Testzwecke gedacht.\n<strong>Nicht in einer Produktivumgebung verwenden.</strong>"
prohibitedWordsForNameOfUser: "Verbotene Begriffe für Benutzernamen"
prohibitedWordsForNameOfUserDescription: "Wenn eine Zeichenfolge aus dieser Liste im Namen eines Benutzers enthalten ist, wird der Benutzername abgelehnt. Benutzer mit Moderatorenrechten sind von dieser Einschränkung nicht betroffen."
yourNameContainsProhibitedWords: "Dein Name enthält einen verbotenen Begriff"
yourNameContainsProhibitedWordsDescription: "Der Name enthält eine verbotene Zeichenfolge. Wende dich an deinen Serveradministrator, wenn du diesen Namen verwenden möchtest."
thisContentsAreMarkedAsSigninRequiredByAuthor: "Logge dich ein, um weitere Inhalte von diesem Nutzer zu sehen."
lockdown: "Sperren"
pleaseSelectAccount: "Bitte Konto auswählen"
availableRoles: "Verfügbare Rollen"
federationSpecified: "Dieser Server arbeitet mit Whitelist-Föderation. Er kann nicht mit anderen als den vom Administrator angegebenen Servern interagieren."
federationDisabled: "Föderation ist auf diesem Server deaktiviert. Es ist nicht möglich, mit Benutzern auf anderen Servern zu interagieren."
_accountSettings:
requireSigninToViewContents: "Anmeldung erfordern, um Inhalte anzuzeigen"
requireSigninToViewContentsDescription1: "Erfordere eine Anmeldung, um alle Notizen und andere Inhalte anzuzeigen, die du erstellt hast. Dadurch wird verhindert, dass Crawler deine Informationen sammeln."
requireSigninToViewContentsDescription2: "Der Inhalt wird nicht in URL-Vorschauen (OGP), eingebettet in Webseiten oder auf Servern, die keine Zitate unterstützen, angezeigt."
requireSigninToViewContentsDescription3: "Diese Einschränkungen gelten möglicherweise nicht für föderierte Inhalte von anderen Servern."
makeNotesFollowersOnlyBefore: "Macht frühere Notizen nur für Follower sichtbar"
makeNotesHiddenBefore: "Frühere Notizen privat machen"
makeNotesHiddenBeforeDescription: ""
mayNotEffectForFederatedNotes: "Dies hat möglicherweise keine Auswirkungen auf Notizen, die an andere Server föderiert werden."
notesOlderThanSpecifiedDateAndTime: "Notizen vor einem bestimmtem Datum und Uhrzeit"
_abuseUserReport:
forward: "Weiterleiten"
forwardDescription: "Leite die Meldung an einen entfernten Server als anonymes Systemkonto weiter."
resolve: "lösen"
accept: "Akzeptieren"
reject: "Ablehnen"
_delivery: _delivery:
stop: "Gesperrt" stop: "Gesperrt"
_type: _type:
none: "Wird veröffentlicht" none: "Wird veröffentlicht"
manuallySuspended: "Manuell gesperrt"
_bubbleGame:
howToPlay: "Wie man spielt"
hold: "Halten"
_score:
score: "Spielstand"
scoreYen: "Verdienter Geldbetrag"
highScore: "Höchstpunktzahl"
maxChain: "Maximale Anzahl an Verkettungen"
yen: "{yen} Yen"
_howToPlay:
section1: "Passe die Position an und lasse das Objekt in das Spielfeld fallen."
section2: "Wenn sich zwei Objekte der gleichen Art berühren, verwandeln sie sich in ein anderes Objekt und du bekommst Punkte."
section3: "Das Spiel ist vorbei, wenn die Objekte aus dem Spielfeld herausragen. Versuche eine hohe Punktzahl zu erreichen, indem du die Objekte miteinander verschmelzt, ohne dass das Spielfeld überläuft!"
_announcement: _announcement:
forExistingUsers: "Nur für existierende Nutzer" forExistingUsers: "Nur für existierende Nutzer"
forExistingUsersDescription: "Ist diese Option aktiviert, wird diese Ankündigung nur Nutzern angezeigt, die zum Zeitpunkt der Ankündigung bereits registriert sind. Ist sie deaktiviert, wird sie auch Nutzern, die sich nach dessen Veröffentlichung registrieren, angezeigt." forExistingUsersDescription: "Ist diese Option aktiviert, wird diese Ankündigung nur Nutzern angezeigt, die zum Zeitpunkt der Ankündigung bereits registriert sind. Ist sie deaktiviert, wird sie auch Nutzern, die sich nach dessen Veröffentlichung registrieren, angezeigt."
@ -1228,8 +1385,18 @@ _initialTutorial:
reply: "Klicke auf diesen Button, um auf eine Nachricht zu antworten. Es ist auch möglich, auf Antworten zu antworten und die Unterhaltung wie einen Thread fortzusetzen." reply: "Klicke auf diesen Button, um auf eine Nachricht zu antworten. Es ist auch möglich, auf Antworten zu antworten und die Unterhaltung wie einen Thread fortzusetzen."
_reaction: _reaction:
title: "Was sind Reaktionen?" title: "Was sind Reaktionen?"
description: "Auf Notizen kann mit verschiedenen Emojis reagiert werden. Reaktionen ermöglichen es dir, Nuancen auszudrücken, die mit einem einfachen „Gefällt mir“ vielleicht nicht ausgedrückt werden können."
letsTryReacting: "Reaktionen können durch Klicken auf die Schaltfläche „+“ in der Notiz hinzugefügt werden. Versuche, auf diese Beispielnotiz zu reagieren!"
reactToContinue: "Füge eine Reaktion hinzu, um fortzufahren." reactToContinue: "Füge eine Reaktion hinzu, um fortzufahren."
reactNotification: "Du erhältst Echtzeit-Benachrichtigungen, wenn jemand auf deine Notiz reagiert." reactNotification: "Du erhältst Echtzeit-Benachrichtigungen, wenn jemand auf deine Notiz reagiert."
reactDone: "Du kannst eine Reaktion zurücknehmen, indem du auf den '-' Button drückst."
_timeline:
title: "So funktionieren die Chroniken"
home: "Du kannst Beiträge von den Konten sehen, denen du folgst."
local: "Du kannst Beiträge aller Benutzer auf diesem Server sehen."
social: "Notizen von der Startseite und der lokalen Chronik werden angezeigt."
global: "Du kannst Notizen von allen föderierten Servern sehen."
description2: "Du kannst jederzeit am oberen Rand des Bildschirms zwischen den jeweiligen Chroniken wechseln."
_postNote: _postNote:
_visibility: _visibility:
description: "Du kannst einschränken, wer deine Notiz sehen kann." description: "Du kannst einschränken, wer deine Notiz sehen kann."
@ -1237,8 +1404,16 @@ _initialTutorial:
doNotSendConfidencialOnDirect1: "Sei vorsichtig, wenn du sensible Informationen verschickst!" doNotSendConfidencialOnDirect1: "Sei vorsichtig, wenn du sensible Informationen verschickst!"
_cw: _cw:
title: "Inhaltswarnung" title: "Inhaltswarnung"
_exampleNote:
note: "Ich hatte gerade einen Donut mit Schokoladenüberzug 🍩😋"
_howToMakeAttachmentsSensitive:
tryThisFile: "Versuche, das angehängte Bild als sensibel zu markieren!"
method: "Um einen Anhang als sensibel zu kennzeichnen, klicke auf das Vorschaubild der Datei, um das Menü zu öffnen, und klicke auf „Als sensibel markieren“."
sensitiveSucceeded: "Wenn du Dateien anhängst, stelle bitte die Sensibilität entsprechend der Serverrichtlinien ein."
doItToContinue: "Markiere die angehängte Datei als sensibel, um fortzufahren."
_done: _done:
title: "Du hast das Tutorial abgeschlossen! 🎉" title: "Du hast das Tutorial abgeschlossen! 🎉"
description: "Die hier beschriebenen Funktionen sind nur ein kleiner Teil dessen, was Misskey zu bieten hat; um mehr darüber zu erfahren, wie du Misskey benutzen kannst, besuche bitte {link}."
_timelineDescription: _timelineDescription:
local: "In der lokalen Chronik siehst du Notizen von allen Benutzern auf diesem Server." local: "In der lokalen Chronik siehst du Notizen von allen Benutzern auf diesem Server."
global: "In der globalen Chronik siehst du Notizen von allen föderierten Servern." global: "In der globalen Chronik siehst du Notizen von allen föderierten Servern."
@ -1256,6 +1431,8 @@ _serverSettings:
fanoutTimelineDescription: "Ist diese Option aktiviert, kann eine erhebliche Verbesserung im Abrufen von Chroniken und eine Reduzierung der Datenbankbelastung erzielt werden, im Gegenzug zu einer Steigerung in der Speichernutzung von Redis. Bei geringem Serverspeicher oder Serverinstabilität kann diese Option deaktiviert werden." fanoutTimelineDescription: "Ist diese Option aktiviert, kann eine erhebliche Verbesserung im Abrufen von Chroniken und eine Reduzierung der Datenbankbelastung erzielt werden, im Gegenzug zu einer Steigerung in der Speichernutzung von Redis. Bei geringem Serverspeicher oder Serverinstabilität kann diese Option deaktiviert werden."
fanoutTimelineDbFallback: "Auf die Datenbank zurückfallen" fanoutTimelineDbFallback: "Auf die Datenbank zurückfallen"
fanoutTimelineDbFallbackDescription: "Ist diese Option aktiviert, wird die Chronik auf zusätzliche Abfragen in der Datenbank zurückgreifen, wenn sich die Chronik nicht im Cache befindet. Eine Deaktivierung führt zu geringerer Serverlast, aber schränkt den Zeitraum der abrufbaren Chronik ein. " fanoutTimelineDbFallbackDescription: "Ist diese Option aktiviert, wird die Chronik auf zusätzliche Abfragen in der Datenbank zurückgreifen, wenn sich die Chronik nicht im Cache befindet. Eine Deaktivierung führt zu geringerer Serverlast, aber schränkt den Zeitraum der abrufbaren Chronik ein. "
openRegistrationWarning: "Das Aktivieren von Registrierungen ist riskant. Es wird empfohlen, sie nur dann zu aktivieren, wenn der Server ständig überwacht wird und im Falle eines Problems sofort reagiert werden kann."
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "Wenn über einen bestimmten Zeitraum keine Moderatorenaktivität festgestellt wird, wird diese Einstellung automatisch deaktiviert, um Spam zu verhindern."
_accountMigration: _accountMigration:
moveFrom: "Von einem anderen Konto zu diesem migrieren" moveFrom: "Von einem anderen Konto zu diesem migrieren"
moveFromSub: "Alias für ein anderes Konto erstellen" moveFromSub: "Alias für ein anderes Konto erstellen"
@ -1514,7 +1691,12 @@ _achievements:
title: "Testüberfluss" title: "Testüberfluss"
description: "Betätige den Benachrichtigungstest mehrfach innerhalb einer extrem kurzen Zeitspanne" description: "Betätige den Benachrichtigungstest mehrfach innerhalb einer extrem kurzen Zeitspanne"
_tutorialCompleted: _tutorialCompleted:
title: "Misskey Grundkurs-Diplom"
description: "Tutorial abgeschlossen" description: "Tutorial abgeschlossen"
_bubbleGameExplodingHead:
title: "🤯"
_bubbleGameDoubleExplodingHead:
title: "Doppel🤯"
_role: _role:
new: "Rolle erstellen" new: "Rolle erstellen"
edit: "Rolle bearbeiten" edit: "Rolle bearbeiten"
@ -1555,6 +1737,7 @@ _role:
gtlAvailable: "Kann auf die globale Chronik zugreifen" gtlAvailable: "Kann auf die globale Chronik zugreifen"
ltlAvailable: "Kann auf die lokale Chronik zugreifen" ltlAvailable: "Kann auf die lokale Chronik zugreifen"
canPublicNote: "Kann öffentliche Notizen erstellen" canPublicNote: "Kann öffentliche Notizen erstellen"
mentionMax: "Maximale Anzahl von Erwähnungen in einer Notiz"
canInvite: "Erstellung von Einladungscodes für diese Instanz" canInvite: "Erstellung von Einladungscodes für diese Instanz"
inviteLimit: "Maximalanzahl an Einladungen" inviteLimit: "Maximalanzahl an Einladungen"
inviteLimitCycle: "Zyklus des Einladungslimits" inviteLimitCycle: "Zyklus des Einladungslimits"
@ -1577,9 +1760,12 @@ _role:
canSearchNotes: "Nutzung der Notizsuchfunktion" canSearchNotes: "Nutzung der Notizsuchfunktion"
canUseTranslator: "Verwendung des Übersetzers" canUseTranslator: "Verwendung des Übersetzers"
avatarDecorationLimit: "Maximale Anzahl an Profilbilddekorationen, die angebracht werden können" avatarDecorationLimit: "Maximale Anzahl an Profilbilddekorationen, die angebracht werden können"
canImportAntennas: "Importieren von Antennen erlauben"
_condition: _condition:
isLocal: "Lokaler Benutzer" isLocal: "Lokaler Benutzer"
isRemote: "Benutzer fremder Instanz" isRemote: "Benutzer fremder Instanz"
isCat: "Katzen-Benutzer"
isBot: "Bot-Benutzer"
createdLessThan: "Kontoerstellung liegt weniger als X zurück" createdLessThan: "Kontoerstellung liegt weniger als X zurück"
createdMoreThan: "Kontoerstellung liegt mehr als X zurück" createdMoreThan: "Kontoerstellung liegt mehr als X zurück"
followersLessThanOrEq: "Hat X oder weniger Follower" followersLessThanOrEq: "Hat X oder weniger Follower"
@ -1707,6 +1893,7 @@ _channel:
notesCount: "{n} Notizen" notesCount: "{n} Notizen"
nameAndDescription: "Name und Beschreibung" nameAndDescription: "Name und Beschreibung"
nameOnly: "Nur Name" nameOnly: "Nur Name"
allowRenoteToExternal: "Renotes und Zitierungen außerhalb des Kanals erlauben"
_menuDisplay: _menuDisplay:
sideFull: "Seitlich" sideFull: "Seitlich"
sideIcon: "Seitlich (Icons)" sideIcon: "Seitlich (Icons)"
@ -1795,6 +1982,13 @@ _sfx:
note: "Notizen" note: "Notizen"
noteMy: "Meine Notizen" noteMy: "Meine Notizen"
notification: "Benachrichtigungen" notification: "Benachrichtigungen"
reaction: "Auswählen einer Reaktion"
_soundSettings:
driveFile: "Audiodatei aus dem Drive verwenden"
driveFileWarn: "Wähle eine Audiodatei aus dem Drive"
driveFileTypeWarn: "Diese Datei wird nicht unterstützt"
driveFileTypeWarnDescription: "Bitte wähle eine Audiodatei"
driveFileDurationWarn: "Audio zu lang."
_ago: _ago:
future: "Zukunft" future: "Zukunft"
justNow: "Gerade eben" justNow: "Gerade eben"
@ -1876,6 +2070,33 @@ _permissions:
"write:flash": "Deine Plays bearbeiten oder löschen" "write:flash": "Deine Plays bearbeiten oder löschen"
"read:flash-likes": "Liste der Plays, die mir gefallen, lesen" "read:flash-likes": "Liste der Plays, die mir gefallen, lesen"
"write:flash-likes": "Liste der Plays, die mir gefallen, bearbeiten" "write:flash-likes": "Liste der Plays, die mir gefallen, bearbeiten"
"write:admin:delete-account": "Benutzerkonto löschen"
"write:admin:delete-all-files-of-a-user": "Alle Dateien eines Benutzers löschen"
"read:admin:index-stats": "Statistiken zu Datenbankindizes einsehen"
"read:admin:table-stats": "Statistiken zu Datenbanktabellen einsehen"
"read:admin:user-ips": "IP-Adressen von Benutzern anzeigen"
"read:admin:meta": "Metadaten der Instanz einsehen"
"write:admin:reset-password": "Benutzerpasswort zurücksetzen"
"write:admin:send-email": "E-Mail versenden"
"read:admin:server-info": "Serverinformationen anzeigen"
"read:admin:show-moderation-log": "Moderationsprotokoll einsehen"
"read:admin:show-user": "Private Benutzerinformationen einsehen"
"write:admin:roles": "Rollen verwalten"
"read:admin:roles": "Rollen anzeigen"
"write:admin:relays": "Relays verwalten"
"read:admin:relays": "Relays anzeigen"
"write:admin:invite-codes": "Einladungscodes verwalten"
"read:admin:invite-codes": "Einladungscodes anzeigen"
"write:admin:announcements": "Ankündigungen verwalten"
"read:admin:announcements": "Ankündigungen einsehen"
"write:admin:avatar-decorations": "Kann Avatar-Dekorationen verwalten"
"read:admin:avatar-decorations": "Avatar-Dekorationen ansehen"
"write:admin:account": "Benutzerkonten verwalten"
"read:admin:account": "Benutzerkonten anzeigen"
"write:admin:emoji": "Emojis verwalten"
"read:admin:emoji": "Emojis anzeigen"
"write:admin:queue": "Job-Warteschlange verwalten"
"read:admin:queue": "Job-Warteschlange anzeigen"
_auth: _auth:
shareAccessTitle: "Verteilung von App-Berechtigungen" shareAccessTitle: "Verteilung von App-Berechtigungen"
shareAccess: "Möchtest du „{name}“ authorisieren, auf dieses Benutzerkonto zugreifen zu können?" shareAccess: "Möchtest du „{name}“ authorisieren, auf dieses Benutzerkonto zugreifen zu können?"
@ -1993,6 +2214,8 @@ _profile:
changeAvatar: "Profilbild ändern" changeAvatar: "Profilbild ändern"
changeBanner: "Banner ändern" changeBanner: "Banner ändern"
verifiedLinkDescription: "Gibst du hier eine URL ein, die einen Link zu deinem Profile enthält, wird neben diesem Feld ein Icon zur Besitzbestätigung angezeigt." verifiedLinkDescription: "Gibst du hier eine URL ein, die einen Link zu deinem Profile enthält, wird neben diesem Feld ein Icon zur Besitzbestätigung angezeigt."
avatarDecorationMax: "Du kannst bis zu {max} Dekorationen hinzufügen."
followedMessageDescription: "Du kannst eine kurze Nachricht festlegen, die dem Empfänger angezeigt wird, wenn er dir folgt."
_exportOrImport: _exportOrImport:
allNotes: "Alle Notizen" allNotes: "Alle Notizen"
favoritedNotes: "Als Favorit markierte Notizen" favoritedNotes: "Als Favorit markierte Notizen"
@ -2054,9 +2277,6 @@ _pages:
newPage: "Seite erstellen" newPage: "Seite erstellen"
editPage: "Seite bearbeiten" editPage: "Seite bearbeiten"
readPage: "Quelltextansicht" readPage: "Quelltextansicht"
created: "Seite erfolgreich erstellt"
updated: "Seite erfolgreich aktualisiert"
deleted: "Seite erfolgreich gelöscht"
pageSetting: "Seiteneinstellungen" pageSetting: "Seiteneinstellungen"
nameAlreadyExists: "Die angegebene Seiten-URL existiert bereits" nameAlreadyExists: "Die angegebene Seiten-URL existiert bereits"
invalidNameTitle: "Die angegebene Seiten-URL ist ungültig" invalidNameTitle: "Die angegebene Seiten-URL ist ungültig"
@ -2115,6 +2335,7 @@ _notification:
pollEnded: "Umfrageergebnisse sind verfügbar" pollEnded: "Umfrageergebnisse sind verfügbar"
newNote: "Neue Notiz" newNote: "Neue Notiz"
unreadAntennaNote: "Antenne {name}" unreadAntennaNote: "Antenne {name}"
roleAssigned: "Rolle zugewiesen"
emptyPushNotificationMessage: "Push-Benachrichtigungen wurden aktualisiert" emptyPushNotificationMessage: "Push-Benachrichtigungen wurden aktualisiert"
achievementEarned: "Errungenschaft freigeschaltet" achievementEarned: "Errungenschaft freigeschaltet"
testNotification: "Testbenachrichtigung" testNotification: "Testbenachrichtigung"
@ -2124,6 +2345,7 @@ _notification:
reactedBySomeUsers: "{n} Benutzer haben eine Reaktion geschickt" reactedBySomeUsers: "{n} Benutzer haben eine Reaktion geschickt"
renotedBySomeUsers: "Renote von {n} Benutzern" renotedBySomeUsers: "Renote von {n} Benutzern"
followedBySomeUsers: "Von {n} Benutzern gefolgt" followedBySomeUsers: "Von {n} Benutzern gefolgt"
login: "Neue Anmeldung erfolgt"
_types: _types:
all: "Alle" all: "Alle"
note: "Neue Notizen" note: "Neue Notizen"
@ -2136,6 +2358,7 @@ _notification:
pollEnded: "Ende von Umfragen" pollEnded: "Ende von Umfragen"
receiveFollowRequest: "Erhaltene Follow-Anfragen" receiveFollowRequest: "Erhaltene Follow-Anfragen"
followRequestAccepted: "Akzeptierte Follow-Anfragen" followRequestAccepted: "Akzeptierte Follow-Anfragen"
roleAssigned: "Rolle zugewiesen"
achievementEarned: "Errungenschaft freigeschaltet" achievementEarned: "Errungenschaft freigeschaltet"
login: "Anmelden" login: "Anmelden"
app: "Benachrichtigungen von Apps" app: "Benachrichtigungen von Apps"
@ -2187,6 +2410,7 @@ _webhookSettings:
createWebhook: "Webhook erstellen" createWebhook: "Webhook erstellen"
name: "Name" name: "Name"
secret: "Secret" secret: "Secret"
trigger: "Auslöser"
active: "Aktiviert" active: "Aktiviert"
_events: _events:
follow: "Wenn du jemandem folgst" follow: "Wenn du jemandem folgst"
@ -2198,8 +2422,10 @@ _webhookSettings:
mention: "Wenn du erwähnt wirst" mention: "Wenn du erwähnt wirst"
_abuseReport: _abuseReport:
_notificationRecipient: _notificationRecipient:
createRecipient: "Meldungsempfänger hinzufügen"
_recipientType: _recipientType:
mail: "Email" mail: "Email"
keywords: "Schlüsselwort"
_moderationLogTypes: _moderationLogTypes:
createRole: "Rolle erstellt" createRole: "Rolle erstellt"
deleteRole: "Rolle gelöscht" deleteRole: "Rolle gelöscht"
@ -2234,6 +2460,13 @@ _moderationLogTypes:
createAvatarDecoration: "Profilbilddekoration erstellt" createAvatarDecoration: "Profilbilddekoration erstellt"
updateAvatarDecoration: "Profilbilddekoration aktualisiert" updateAvatarDecoration: "Profilbilddekoration aktualisiert"
deleteAvatarDecoration: "Profilbilddekoration gelöscht" deleteAvatarDecoration: "Profilbilddekoration gelöscht"
unsetUserAvatar: "Profilbild zurückgesetzt"
unsetUserBanner: "Profilbanner zurückgesetzt"
createSystemWebhook: "System-Webhook erstellt"
updateSystemWebhook: "System-Webhook aktualisiert"
deleteSystemWebhook: "System-Webhook gelöscht"
deletePage: "Seite gelöscht"
deleteGalleryPost: "Galeriebeitrag gelöscht"
_fileViewer: _fileViewer:
title: "Dateiinformationen" title: "Dateiinformationen"
type: "Dateityp" type: "Dateityp"
@ -2283,9 +2516,60 @@ _externalResourceInstaller:
_themeInstallFailed: _themeInstallFailed:
title: "Das Farbschema konnte nicht installiert werden" title: "Das Farbschema konnte nicht installiert werden"
description: "Während der Installation des Farbschemas ist ein Problem aufgetreten. Bitte versuche es erneut. Detaillierte Fehlerinformationen können über die Javascript-Konsole abgerufen werden." description: "Während der Installation des Farbschemas ist ein Problem aufgetreten. Bitte versuche es erneut. Detaillierte Fehlerinformationen können über die Javascript-Konsole abgerufen werden."
_hemisphere:
N: "Nördliche Erdhalbkugel"
S: "Südliche Erdhalbkugel"
caption: "Wird in einigen Client-Einstellungen zur Bestimmung der Jahreszeit verwendet."
_reversi: _reversi:
blackOrWhite: "Schwarz/Weiß" blackOrWhite: "Schwarz/Weiß"
rules: "Regeln" rules: "Regeln"
black: "Schwarz" black: "Schwarz"
white: "Weiß" white: "Weiß"
total: "Gesamt" total: "Gesamt"
_offlineScreen:
title: "Offline - keine Verbindung zum Server möglich"
header: "Verbindung zum Server nicht möglich"
_urlPreviewSetting:
title: "Einstellungen der URL-Vorschau"
enable: "URL-Vorschau aktivieren"
timeout: "Zeitüberschreitung beim Abrufen der Vorschau (ms)"
timeoutDescription: "Übersteigt die für die Vorschau benötigte Zeit diesen Wert, wird keine Vorschau generiert."
maximumContentLength: "Maximale Content-Length (Bytes)"
maximumContentLengthDescription: "Wenn die Content-Length diesen Wert überschreitet, wird keine Vorschau erzeugt."
requireContentLength: "Vorschau nur generieren, wenn Content-Length verfügbar ist"
requireContentLengthDescription: "Wenn der Server keine Content-Length zurückgibt, wird keine Vorschau erzeugt."
userAgent: "User-Agent"
_mediaControls:
playbackRate: "Wiedergabegeschwindigkeit"
_contextMenu:
title: "Kontextmenü"
app: "Anwendung"
_gridComponent:
_error:
requiredValue: "Dieser Wert ist ein Pflichtfeld"
_embedCodeGen:
title: "Einbettungscode anpassen"
header: "Kopfzeile anzeigen"
autoload: "Automatisch mehr laden (veraltet)"
maxHeight: "Maximale Höhe"
maxHeightDescription: "Der Wert 0 deaktiviert die Einstellung der maximalen Höhe. Gib einen Wert an, um zu verhindern, dass das Widget weiterhin vertikal vergrößert wird."
maxHeightWarn: "Die Begrenzung der maximalen Höhe ist deaktiviert (0). Wenn dies nicht beabsichtigt war, setze die maximale Höhe auf einen Wert fest."
applyToPreview: "Auf die Vorschau anwenden"
generateCode: "Einbettungscode generieren"
codeGenerated: "Der Code wurde generiert"
codeGeneratedDescription: "Füge den generierten Code in deine Website ein, um den Inhalt einzubetten."
_selfXssPrevention:
warning: "WARNUNG"
title: "„Füge in diesen Bereich etwas ein“ ist eine Betrugsmasche."
description1: "Wenn du hier etwas einfügst, könnte ein böswilliger Benutzer dein Konto übernehmen oder deine persönlichen Daten stehlen."
description3: "Weitere Informationen findest du hier. {link}"
_remoteLookupErrors:
_federationNotAllowed:
title: "Kommunikation mit diesem Server nicht möglich"
description: "Möglicherweise wurde die Kommunikation mit diesem Server deaktiviert oder dieser Server ist blockiert.\nWende dich bitte an den Serveradministrator."
_uriInvalid:
title: "URI ist fehlerhaft"
description: "Es gibt ein Problem mit der von dir eingegebenen URI. Bitte prüfe, ob du Zeichen eingegeben hast, die in der URI nicht verwendet werden können."
_noSuchObject:
title: "Nicht gefunden"
description: "Die angeforderte Ressource konnte nicht gefunden werden, bitte überprüfe die URI erneut."

View file

@ -5,6 +5,7 @@ introMisskey: "Welcome! Misskey is an open source, decentralized microblogging s
poweredByMisskeyDescription: "{name} is one of the services powered by the open source platform <b>Misskey</b> (referred to as a \"Misskey instance\")." poweredByMisskeyDescription: "{name} is one of the services powered by the open source platform <b>Misskey</b> (referred to as a \"Misskey instance\")."
monthAndDay: "{month}/{day}" monthAndDay: "{month}/{day}"
search: "Search" search: "Search"
reset: "Reset"
notifications: "Notifications" notifications: "Notifications"
username: "Username" username: "Username"
password: "Password" password: "Password"
@ -48,6 +49,7 @@ pin: "Pin to profile"
unpin: "Unpin from profile" unpin: "Unpin from profile"
copyContent: "Copy contents" copyContent: "Copy contents"
copyLink: "Copy link" copyLink: "Copy link"
copyRemoteLink: "Copy remote link"
copyLinkRenote: "Copy renote link" copyLinkRenote: "Copy renote link"
delete: "Delete" delete: "Delete"
deleteAndEdit: "Delete and edit" deleteAndEdit: "Delete and edit"
@ -331,6 +333,7 @@ selectFile: "Select a file"
selectFiles: "Select files" selectFiles: "Select files"
selectFolder: "Select a folder" selectFolder: "Select a folder"
selectFolders: "Select folders" selectFolders: "Select folders"
fileNotSelected: "No file selected"
renameFile: "Rename file" renameFile: "Rename file"
folderName: "Folder name" folderName: "Folder name"
createFolder: "Create a folder" createFolder: "Create a folder"
@ -381,7 +384,6 @@ enableLocalTimeline: "Enable local timeline"
enableGlobalTimeline: "Enable global timeline" enableGlobalTimeline: "Enable global timeline"
disablingTimelinesInfo: "Adminstrators and Moderators will always have access to all timelines, even if they are not enabled." disablingTimelinesInfo: "Adminstrators and Moderators will always have access to all timelines, even if they are not enabled."
registration: "Register" registration: "Register"
enableRegistration: "Enable new user registration"
invite: "Invite" invite: "Invite"
driveCapacityPerLocalAccount: "Drive capacity per local user" driveCapacityPerLocalAccount: "Drive capacity per local user"
driveCapacityPerRemoteAccount: "Drive capacity per remote user" driveCapacityPerRemoteAccount: "Drive capacity per remote user"
@ -586,6 +588,7 @@ masterVolume: "Master volume"
notUseSound: "Disable sound" notUseSound: "Disable sound"
useSoundOnlyWhenActive: "Output sounds only if Misskey is active." useSoundOnlyWhenActive: "Output sounds only if Misskey is active."
details: "Details" details: "Details"
renoteDetails: "Renote details"
chooseEmoji: "Select an emoji" chooseEmoji: "Select an emoji"
unableToProcess: "The operation could not be completed" unableToProcess: "The operation could not be completed"
recentUsed: "Recently used" recentUsed: "Recently used"
@ -683,11 +686,15 @@ smtpSecure: "Use implicit SSL/TLS for SMTP connections"
smtpSecureInfo: "Turn this off when using STARTTLS" smtpSecureInfo: "Turn this off when using STARTTLS"
testEmail: "Test email delivery" testEmail: "Test email delivery"
wordMute: "Word mute" wordMute: "Word mute"
wordMuteDescription: "Minimize notes that contain the specified word or phrase. Minimized notes can be displayed by clicking on them."
hardWordMute: "Hard word mute" hardWordMute: "Hard word mute"
showMutedWord: "Show muted words"
hardWordMuteDescription: "Hide notes that contain the specified word or phrase. Unlike word mute, the note will be completely hidden from view."
regexpError: "Regular Expression error" regexpError: "Regular Expression error"
regexpErrorDescription: "An error occurred in the regular expression on line {line} of your {tab} word mutes:" regexpErrorDescription: "An error occurred in the regular expression on line {line} of your {tab} word mutes:"
instanceMute: "Instance Mutes" instanceMute: "Instance Mutes"
userSaysSomething: "{name} said something" userSaysSomething: "{name} said something"
userSaysSomethingAbout: "{name} said something about \"{word}\""
makeActive: "Activate" makeActive: "Activate"
display: "Display" display: "Display"
copy: "Copy" copy: "Copy"
@ -1298,6 +1305,10 @@ yourNameContainsProhibitedWordsDescription: "If you wish to use this name, pleas
thisContentsAreMarkedAsSigninRequiredByAuthor: "Set by the author to require login to view" thisContentsAreMarkedAsSigninRequiredByAuthor: "Set by the author to require login to view"
lockdown: "Lockdown" lockdown: "Lockdown"
pleaseSelectAccount: "Select an account" pleaseSelectAccount: "Select an account"
availableRoles: "Available roles"
acknowledgeNotesAndEnable: "Turn on after understanding the precautions."
federationSpecified: "This server is operated in a whitelist federation. Interacting with servers other than those designated by the administrator is not allowed."
federationDisabled: "Federation is disabled on this server. You cannot interact with users on other servers."
_accountSettings: _accountSettings:
requireSigninToViewContents: "Require sign-in to view contents" requireSigninToViewContents: "Require sign-in to view contents"
requireSigninToViewContentsDescription1: "Require login to view all notes and other content you have created. This will have the effect of preventing crawlers from collecting your information." requireSigninToViewContentsDescription1: "Require login to view all notes and other content you have created. This will have the effect of preventing crawlers from collecting your information."
@ -1307,7 +1318,7 @@ _accountSettings:
makeNotesFollowersOnlyBeforeDescription: "While this feature is enabled, only followers can see notes past the set date and time or have been visible for a set time. When it is deactivated, the note publication status will also be restored." makeNotesFollowersOnlyBeforeDescription: "While this feature is enabled, only followers can see notes past the set date and time or have been visible for a set time. When it is deactivated, the note publication status will also be restored."
makeNotesHiddenBefore: "Make past notes private" makeNotesHiddenBefore: "Make past notes private"
makeNotesHiddenBeforeDescription: "While this feature is enabled, notes that are past the set date and time or have been visible only to you. When it is deactivated, the note publication status will also be restored." makeNotesHiddenBeforeDescription: "While this feature is enabled, notes that are past the set date and time or have been visible only to you. When it is deactivated, the note publication status will also be restored."
mayNotEffectForFederatedNotes: "Notes federated to a remote server may not be effective." mayNotEffectForFederatedNotes: "Notes federated to a remote server may not be affected."
notesHavePassedSpecifiedPeriod: "Note that the specified time has passed" notesHavePassedSpecifiedPeriod: "Note that the specified time has passed"
notesOlderThanSpecifiedDateAndTime: "Notes before the specified date and time" notesOlderThanSpecifiedDateAndTime: "Notes before the specified date and time"
_abuseUserReport: _abuseUserReport:
@ -1454,6 +1465,8 @@ _serverSettings:
reactionsBufferingDescription: "When enabled, performance during reaction creation will be greatly improved, reducing the load on the database. However, Redis memory usage will increase." reactionsBufferingDescription: "When enabled, performance during reaction creation will be greatly improved, reducing the load on the database. However, Redis memory usage will increase."
inquiryUrl: "Inquiry URL" inquiryUrl: "Inquiry URL"
inquiryUrlDescription: "Specify a URL for the inquiry form to the server maintainer or a web page for the contact information." inquiryUrlDescription: "Specify a URL for the inquiry form to the server maintainer or a web page for the contact information."
openRegistration: "Make the account creation open"
openRegistrationWarning: "Opening registration carries risks. It is recommended to only enable it if you have a system in place to continuously monitor the server and respond immediately in case of any issues."
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "If no moderator activity is detected for a while, this setting will be automatically turned off to prevent spam." thisSettingWillAutomaticallyOffWhenModeratorsInactive: "If no moderator activity is detected for a while, this setting will be automatically turned off to prevent spam."
_accountMigration: _accountMigration:
moveFrom: "Migrate another account to this one" moveFrom: "Migrate another account to this one"
@ -2119,6 +2132,7 @@ _permissions:
"read:flash-likes": "View list of liked Plays" "read:flash-likes": "View list of liked Plays"
"write:flash-likes": "Edit list of liked Plays" "write:flash-likes": "Edit list of liked Plays"
"read:admin:abuse-user-reports": "View user reports" "read:admin:abuse-user-reports": "View user reports"
"write:admin:create-account": "Create user account"
"write:admin:delete-account": "Delete user account" "write:admin:delete-account": "Delete user account"
"write:admin:delete-all-files-of-a-user": "Delete all files of a user" "write:admin:delete-all-files-of-a-user": "Delete all files of a user"
"read:admin:index-stats": "View database index stats" "read:admin:index-stats": "View database index stats"
@ -2223,7 +2237,7 @@ _widgets:
_userList: _userList:
chooseList: "Select a list" chooseList: "Select a list"
clicker: "Clicker" clicker: "Clicker"
birthdayFollowings: "Users who celebrate their birthday today" birthdayFollowings: "Today's Birthdays"
_cw: _cw:
hide: "Hide" hide: "Hide"
show: "Show content" show: "Show content"
@ -2352,9 +2366,6 @@ _pages:
newPage: "Create a new Page" newPage: "Create a new Page"
editPage: "Edit this Page" editPage: "Edit this Page"
readPage: "Viewing this Page's source" readPage: "Viewing this Page's source"
created: "Page successfully created"
updated: "Page successfully edited"
deleted: "Page successfully deleted"
pageSetting: "Page settings" pageSetting: "Page settings"
nameAlreadyExists: "The specified Page URL already exists" nameAlreadyExists: "The specified Page URL already exists"
invalidNameTitle: "The specified Page URL is invalid" invalidNameTitle: "The specified Page URL is invalid"
@ -2716,6 +2727,66 @@ _contextMenu:
app: "Application" app: "Application"
appWithShift: "Application with shift key" appWithShift: "Application with shift key"
native: "Native" native: "Native"
_gridComponent:
_error:
requiredValue: "This value is required"
columnTypeNotSupport: "Validation with regular expression is supported only for type:text columns."
patternNotMatch: "This value doesn't match the pattern in {pattern}"
notUnique: "This value must be unique"
_roleSelectDialog:
notSelected: "Not selected"
_customEmojisManager:
_gridCommon:
copySelectionRows: "Copy selected rows"
copySelectionRanges: "Copy selected ranges"
deleteSelectionRows: "Delete selected rows"
deleteSelectionRanges: "Delete rows in the selection"
searchSettings: "Search settings"
searchSettingCaption: "Set detailed search criteria."
searchLimit: ""
sortOrder: "Sort order"
registrationLogs: "Registration log"
registrationLogsCaption: "Logs will be displayed when updating or deleting Emojis. They will disappear after updating or deleting them, moving to a new page, or reloading."
alertEmojisRegisterFailedDescription: "Failed to update or delete Emojis. Please check the registration log for details."
_logs:
showSuccessLogSwitch: "Show success log"
failureLogNothing: "There is no failure log."
logNothing: "There is no log."
_remote:
selectionRowDetail: "Selected row's detail"
importSelectionRows: "Import selected rows"
importSelectionRangesRows: "Import rows in the selection"
importEmojisButton: "Import checked Emojis"
confirmImportEmojisTitle: "Import Emojis"
confirmImportEmojisDescription: "Import {count} Emoji(s) received from the remote server. Please pay close attention to the license of the Emoji. Are you sure to continue?"
_local:
tabTitleList: "List of registered Emojis"
tabTitleRegister: "Emoji registration"
_list:
emojisNothing: "There are no registered Emojis."
markAsDeleteTargetRows: "Mark selected rows as a target to delete"
markAsDeleteTargetRanges: "Mark rows in the selection as a target to delete"
alertUpdateEmojisNothingDescription: "There are no updated Emojis."
alertDeleteEmojisNothingDescription: "There are no Emojis to be deleted."
confirmMovePage: ""
confirmChangeView: ""
confirmUpdateEmojisDescription: "Update {count} Emoji(s). Are you sure to continue?"
confirmDeleteEmojisDescription: "Delete checked {count} Emoji(s). Are you sure to continue?"
confirmResetDescription: ""
confirmMovePageDesciption: "Changes have been made to the Emojis on this page.\nIf you leave the page without saving, all changes made on this page will be discarded."
dialogSelectRoleTitle: "Search by roll set in Emojis"
_register:
uploadSettingTitle: "Upload settings"
uploadSettingDescription: "On this screen, you can configure the behavior when uploading Emojis."
directoryToCategoryLabel: "Enter the directory name in the \"category\" field"
directoryToCategoryCaption: "When you drag and drop a directory, enter the directory name in the \"category\" field."
emojiInputAreaCaption: "Select the Emojis you wish to register using one of the methods."
emojiInputAreaList1: "Drag and drop image files or a directory into this frame"
emojiInputAreaList2: "Click this link to select from your computer"
emojiInputAreaList3: "Click this link to select from the drive"
confirmRegisterEmojisDescription: "Register the Emojis from the list as new custom Emojis. Are you sure to continue? (To avoid overload, only {count} Emoji(s) can be registered in a single operation)"
confirmClearEmojisDescription: "Discard the edits and clear the Emojis from the list. Are you sure to continue?"
confirmUploadEmojisDescription: "Upload the dragged and dropped {count} file(s) to the drive. Are you sure to continue?"
_embedCodeGen: _embedCodeGen:
title: "Customize embed code" title: "Customize embed code"
header: "Show header" header: "Show header"
@ -2730,3 +2801,43 @@ _embedCodeGen:
generateCode: "Generate embed code" generateCode: "Generate embed code"
codeGenerated: "The code has been generated" codeGenerated: "The code has been generated"
codeGeneratedDescription: "Paste the generated code into your website to embed the content." codeGeneratedDescription: "Paste the generated code into your website to embed the content."
_selfXssPrevention:
warning: "WARNING"
title: "\"Paste something on this screen\" is all a scam."
description1: "If you paste something here, a malicious user could hijack your account or steal your personal information."
description2: "If you do not understand exactly what you are trying to paste, %cstop working right now and close this window."
description3: "For more information, please refer to this. {link}"
_followRequest:
recieved: "Received application"
sent: "Sent application"
_remoteLookupErrors:
_federationNotAllowed:
title: "Unable to communicate with this server"
description: "Communication with this server may have been disabled or this server may be blocked.\nPlease contact the server administrator."
_uriInvalid:
title: "URI is invalid"
description: "There is a problem with the URI you entered. Please check if you entered characters that cannot be used in the URI."
_requestFailed:
title: "Request failed"
description: "Communication with this server failed. The server may be down. Also, please make sure that you have not entered an invalid or nonexistent URI."
_responseInvalid:
title: "Response is invalid"
description: "It could communicate with this server, but the data obtained was incorrect."
_responseInvalidIdHostNotMatch:
description: "The domain of the entered URI differs from the domain of the final obtained URI. If you are looking up remote content through a third-party server, please look up again using a URI that can be obtained from the origin server."
_noSuchObject:
title: "Not found"
description: "The requested resource was not found, please recheck the URI."
_captcha:
verify: "Please verify the CAPTCHA"
testSiteKeyMessage: "You can check the preview by entering the test values for the site and secret keys.\nPlease see the following page for details."
_error:
_requestFailed:
title: "Failed to request CAPTCHA"
text: "Please run it after a while or check the settings again."
_verificationFailed:
title: "Failed to validate CAPTCHA"
text: "Please check again if the settings are correct."
_unknown:
title: "CAPTCHA error"
text: "An unexpected error occurred."

View file

@ -5,11 +5,13 @@ introMisskey: "¡Bienvenido/a! Misskey es un servicio de microblogging descentra
poweredByMisskeyDescription: "{name} es uno de los servicios (también llamado instancia) que usa la plataforma de código abierto <b>Misskey</b>" poweredByMisskeyDescription: "{name} es uno de los servicios (también llamado instancia) que usa la plataforma de código abierto <b>Misskey</b>"
monthAndDay: "{day}/{month}" monthAndDay: "{day}/{month}"
search: "Buscar" search: "Buscar"
reset: "Reiniciar"
notifications: "Notificaciones" notifications: "Notificaciones"
username: "Nombre de usuario" username: "Nombre de usuario"
password: "Contraseña" password: "Contraseña"
initialPasswordForSetup: "Contraseña para iniciar la inicialización" initialPasswordForSetup: "Contraseña para iniciar la inicialización"
initialPasswordIsIncorrect: "La contraseña para iniciar la configuración inicial es incorrecta." initialPasswordIsIncorrect: "La contraseña para iniciar la configuración inicial es incorrecta."
initialPasswordForSetupDescription: "Si ha instalado Misskey usted mismo, utilice la contraseña introducida en el archivo de configuración.\nSi utiliza un servicio de alojamiento de Misskey o similar, utilice la contraseña proporcionada.\nSi no ha establecido una contraseña, déjela en blanco para continuar."
forgotPassword: "Olvidé mi contraseña" forgotPassword: "Olvidé mi contraseña"
fetchingAsApObject: "Buscando en el fediverso" fetchingAsApObject: "Buscando en el fediverso"
ok: "OK" ok: "OK"
@ -47,6 +49,7 @@ pin: "Fijar al perfil"
unpin: "Desfijar" unpin: "Desfijar"
copyContent: "Copiar contenido" copyContent: "Copiar contenido"
copyLink: "Copiar enlace" copyLink: "Copiar enlace"
copyRemoteLink: "Copiar enlace remoto"
copyLinkRenote: "Copiar enlace de renota" copyLinkRenote: "Copiar enlace de renota"
delete: "Borrar" delete: "Borrar"
deleteAndEdit: "Borrar y editar" deleteAndEdit: "Borrar y editar"
@ -198,6 +201,7 @@ followConfirm: "¿Desea seguir a {name}?"
proxyAccount: "Cuenta proxy" proxyAccount: "Cuenta proxy"
proxyAccountDescription: "Una cuenta proxy es una cuenta que actúa como un seguidor remoto de un usuario bajo ciertas condiciones. Por ejemplo, cuando un usuario añade un usuario remoto a una lista, si ningún usuario local sigue al usuario agregado a la lista, la instancia no puede obtener su actividad. Así que la cuenta proxy sigue al usuario añadido a la lista" proxyAccountDescription: "Una cuenta proxy es una cuenta que actúa como un seguidor remoto de un usuario bajo ciertas condiciones. Por ejemplo, cuando un usuario añade un usuario remoto a una lista, si ningún usuario local sigue al usuario agregado a la lista, la instancia no puede obtener su actividad. Así que la cuenta proxy sigue al usuario añadido a la lista"
host: "Host" host: "Host"
selectSelf: "Elígete a ti mismo"
selectUser: "Elegir usuario" selectUser: "Elegir usuario"
recipient: "Recipiente" recipient: "Recipiente"
annotation: "Anotación" annotation: "Anotación"
@ -213,6 +217,7 @@ perDay: "por día"
stopActivityDelivery: "Dejar de enviar actividades" stopActivityDelivery: "Dejar de enviar actividades"
blockThisInstance: "Bloquear instancia" blockThisInstance: "Bloquear instancia"
silenceThisInstance: "Silenciar esta instancia" silenceThisInstance: "Silenciar esta instancia"
mediaSilenceThisInstance: "Silencia la Multimedia(Imágenes,videos...) para este servidor"
operations: "Operaciones" operations: "Operaciones"
software: "Software" software: "Software"
version: "Versión" version: "Versión"
@ -234,6 +239,10 @@ blockedInstances: "Instancias bloqueadas"
blockedInstancesDescription: "Seleccione los hosts de las instancias que desea bloquear, separadas por una linea nueva. Las instancias bloqueadas no podrán comunicarse con esta instancia." blockedInstancesDescription: "Seleccione los hosts de las instancias que desea bloquear, separadas por una linea nueva. Las instancias bloqueadas no podrán comunicarse con esta instancia."
silencedInstances: "Instancias silenciadas" silencedInstances: "Instancias silenciadas"
silencedInstancesDescription: "Listar los hostname de las instancias que quieres silenciar. Todas las cuentas de las instancias listadas serán tratadas como silenciadas, solo podrán hacer peticiones de seguimiento, y no podrán mencionar cuentas locales si no las siguen. Esto no afecta a las instancias bloqueadas." silencedInstancesDescription: "Listar los hostname de las instancias que quieres silenciar. Todas las cuentas de las instancias listadas serán tratadas como silenciadas, solo podrán hacer peticiones de seguimiento, y no podrán mencionar cuentas locales si no las siguen. Esto no afecta a las instancias bloqueadas."
mediaSilencedInstances: "Servidores silenciados (Multimedia)"
mediaSilencedInstancesDescription: "Listar las instancias que quieres silenciar. Todas las cuentas de las instancias listadas serán tratadas como silenciadas, solo podrán hacer peticiones de seguimiento, y no podrán mencionar cuentas locales si no las siguen. Esto no afecta a las instancias bloqueadas."
federationAllowedHosts: "Servidores federados"
federationAllowedHostsDescription: "Establezca los nombres de los servidores que pueden federarse, separados por una nueva línea."
muteAndBlock: "Silenciar y bloquear" muteAndBlock: "Silenciar y bloquear"
mutedUsers: "Usuarios silenciados" mutedUsers: "Usuarios silenciados"
blockedUsers: "Usuarios bloqueados" blockedUsers: "Usuarios bloqueados"
@ -324,6 +333,7 @@ selectFile: "Elegir archivo"
selectFiles: "Elegir archivos" selectFiles: "Elegir archivos"
selectFolder: "Seleccione una carpeta" selectFolder: "Seleccione una carpeta"
selectFolders: "Seleccione carpetas" selectFolders: "Seleccione carpetas"
fileNotSelected: "Archivo no seleccionado."
renameFile: "Renombrar archivo" renameFile: "Renombrar archivo"
folderName: "Nombre de la carpeta" folderName: "Nombre de la carpeta"
createFolder: "Crear carpeta" createFolder: "Crear carpeta"
@ -331,6 +341,7 @@ renameFolder: "Renombrar carpeta"
deleteFolder: "Borrar carpeta" deleteFolder: "Borrar carpeta"
folder: "Carpeta" folder: "Carpeta"
addFile: "Agregar archivo" addFile: "Agregar archivo"
showFile: "Examinar archivos"
emptyDrive: "El drive está vacío" emptyDrive: "El drive está vacío"
emptyFolder: "La carpeta está vacía" emptyFolder: "La carpeta está vacía"
unableToDelete: "No se puede borrar" unableToDelete: "No se puede borrar"
@ -373,7 +384,6 @@ enableLocalTimeline: "Habilitar linea de tiempo local"
enableGlobalTimeline: "Habilitar linea de tiempo global" enableGlobalTimeline: "Habilitar linea de tiempo global"
disablingTimelinesInfo: "Aunque se desactiven estas lineas de tiempo, por conveniencia el administrador y los moderadores pueden seguir usándolos" disablingTimelinesInfo: "Aunque se desactiven estas lineas de tiempo, por conveniencia el administrador y los moderadores pueden seguir usándolos"
registration: "Registro" registration: "Registro"
enableRegistration: "Permitir nuevos registros"
invite: "Invitar" invite: "Invitar"
driveCapacityPerLocalAccount: "Capacidad del drive por usuario local" driveCapacityPerLocalAccount: "Capacidad del drive por usuario local"
driveCapacityPerRemoteAccount: "Capacidad del drive por usuario remoto" driveCapacityPerRemoteAccount: "Capacidad del drive por usuario remoto"
@ -445,6 +455,7 @@ totpDescription: "Ingresa una contaseña de un sólo uso usando la aplicación a
moderator: "Moderador" moderator: "Moderador"
moderation: "Moderación" moderation: "Moderación"
moderationNote: "Nota de moderación" moderationNote: "Nota de moderación"
moderationNoteDescription: "Puedes rellenar notas que solo se comparten entre moderadores."
addModerationNote: "Añadir nota de moderación" addModerationNote: "Añadir nota de moderación"
moderationLogs: "Log de moderación" moderationLogs: "Log de moderación"
nUsersMentioned: "{n} usuarios mencionados" nUsersMentioned: "{n} usuarios mencionados"
@ -479,10 +490,12 @@ retype: "Ingrese de nuevo"
noteOf: "Notas de {user}" noteOf: "Notas de {user}"
quoteAttached: "Cita añadida" quoteAttached: "Cita añadida"
quoteQuestion: "¿Quiere añadir una cita?" quoteQuestion: "¿Quiere añadir una cita?"
attachAsFileQuestion: "El texto del portapapeles es demasiado grande ¿Desea adjuntarlo como archivo de texto?"
noMessagesYet: "Aún no hay chat" noMessagesYet: "Aún no hay chat"
newMessageExists: "Tienes un mensaje nuevo" newMessageExists: "Tienes un mensaje nuevo"
onlyOneFileCanBeAttached: "Solo se puede añadir un archivo al mensaje" onlyOneFileCanBeAttached: "Solo se puede añadir un archivo al mensaje"
signinRequired: "Iniciar sesión" signinRequired: "Iniciar sesión"
signinOrContinueOnRemote: "Para continuar, tendrá que ir a su servidor o registrarse e iniciar sesión en este servidor"
invitations: "Invitar" invitations: "Invitar"
invitationCode: "Código de invitación" invitationCode: "Código de invitación"
checking: "Comprobando" checking: "Comprobando"
@ -506,6 +519,8 @@ emojiStyle: "Estilo de emoji"
native: "Nativo" native: "Nativo"
menuStyle: "Diseño del menú" menuStyle: "Diseño del menú"
style: "Diseño" style: "Diseño"
drawer: "Cajón de Aplicaciones"
popup: "Ventana emergente"
showNoteActionsOnlyHover: "Mostrar acciones de la nota sólo al pasar el cursor" showNoteActionsOnlyHover: "Mostrar acciones de la nota sólo al pasar el cursor"
showReactionsCount: "Mostrar el número de reacciones en las notas" showReactionsCount: "Mostrar el número de reacciones en las notas"
noHistory: "No hay datos en el historial" noHistory: "No hay datos en el historial"
@ -573,6 +588,7 @@ masterVolume: "Volumen principal"
notUseSound: "Sin sonido" notUseSound: "Sin sonido"
useSoundOnlyWhenActive: "Sonar solo cuando Misskey esté activo" useSoundOnlyWhenActive: "Sonar solo cuando Misskey esté activo"
details: "Detalles" details: "Detalles"
renoteDetails: "Detalles(Renota)"
chooseEmoji: "Elije un emoji" chooseEmoji: "Elije un emoji"
unableToProcess: "La operación no se puede llevar a cabo" unableToProcess: "La operación no se puede llevar a cabo"
recentUsed: "Usado recientemente" recentUsed: "Usado recientemente"
@ -588,6 +604,7 @@ ascendingOrder: "Ascendente"
descendingOrder: "Descendente" descendingOrder: "Descendente"
scratchpad: "Scratch pad" scratchpad: "Scratch pad"
scratchpadDescription: "Scratchpad proporciona un entorno experimental para AiScript. Puede escribir, ejecutar y verificar los resultados que interactúan con Misskey." scratchpadDescription: "Scratchpad proporciona un entorno experimental para AiScript. Puede escribir, ejecutar y verificar los resultados que interactúan con Misskey."
uiInspector: "Inspector de UI"
output: "Salida" output: "Salida"
script: "Script" script: "Script"
disablePagesScript: "Deshabilitar AiScript en Páginas" disablePagesScript: "Deshabilitar AiScript en Páginas"
@ -668,7 +685,10 @@ smtpSecure: "Usar SSL/TLS implícito en la conexión SMTP"
smtpSecureInfo: "Apagar cuando se use STARTTLS" smtpSecureInfo: "Apagar cuando se use STARTTLS"
testEmail: "Prueba de envío" testEmail: "Prueba de envío"
wordMute: "Silenciar palabras" wordMute: "Silenciar palabras"
wordMuteDescription: "Minimiza las notas que contienen la palabra o frase especificada. Las notas minimizadas pueden visualizarse haciendo clic sobre ellas."
hardWordMute: "Filtro de palabra fuerte" hardWordMute: "Filtro de palabra fuerte"
showMutedWord: "Mostrar palabras silenciadas."
hardWordMuteDescription: "Oculta las notas que contienen la palabra o frase especificada. A diferencia de Silenciar palabra, la nota quedará completamente oculta a la vista."
regexpError: "Error de la expresión regular" 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}" regexpErrorDescription: "Ocurrió un error en la expresión regular en la linea {line} de las palabras muteadas {tab}"
instanceMute: "Instancias silenciadas" instanceMute: "Instancias silenciadas"
@ -1118,6 +1138,8 @@ preventAiLearning: "Rechazar el uso en el Aprendizaje de Máquinas. (IA Generati
preventAiLearningDescription: "Pedirle a las arañas (crawlers) no usar los textos publicados o imágenes en el aprendizaje automático (IA Predictiva / Generativa). Ésto se logra añadiendo una marca respuesta HTML con la cadena \"noai\" al cantenido. Una prevención total no podría lograrse sólo usando ésta marca, ya que puede ser simplemente ignorada." preventAiLearningDescription: "Pedirle a las arañas (crawlers) no usar los textos publicados o imágenes en el aprendizaje automático (IA Predictiva / Generativa). Ésto se logra añadiendo una marca respuesta HTML con la cadena \"noai\" al cantenido. Una prevención total no podría lograrse sólo usando ésta marca, ya que puede ser simplemente ignorada."
options: "Opción" options: "Opción"
specifyUser: "Especificar usuario" specifyUser: "Especificar usuario"
lookupConfirm: "¿Quiere informarse?"
specifyHost: "Especificar Host"
failedToPreviewUrl: "No se pudo generar la vista previa" failedToPreviewUrl: "No se pudo generar la vista previa"
update: "Actualizar" update: "Actualizar"
rolesThatCanBeUsedThisEmojiAsReaction: "Roles que pueden usar este emoji como reacción" rolesThatCanBeUsedThisEmojiAsReaction: "Roles que pueden usar este emoji como reacción"
@ -1252,6 +1274,11 @@ tryAgain: "Por favor , inténtalo de nuevo"
performance: "Rendimiento" performance: "Rendimiento"
unknownWebAuthnKey: "Esto no se ha registrado llave maestra." unknownWebAuthnKey: "Esto no se ha registrado llave maestra."
messageToFollower: "Mensaje a seguidores" messageToFollower: "Mensaje a seguidores"
federationSpecified: "Este servidor opera en una federación de listas blancas. No puede interactuar con otros servidores que no sean los especificados por el administrador."
federationDisabled: "La federación está desactivada en este servidor. No puede interactuar con usuarios de otros servidores"
_accountSettings:
requireSigninToViewContents: "Se requiere iniciar sesión para ver el contenido"
requireSigninToViewContentsDescription1: "Requiere iniciar sesión para ver todas las notas y otros contenidos que hayas creado. Se espera que esto evite que los rastreadores recopilen información."
_abuseUserReport: _abuseUserReport:
accept: "Acepte" accept: "Acepte"
reject: "repudio" reject: "repudio"
@ -2267,9 +2294,6 @@ _pages:
newPage: "Crear página" newPage: "Crear página"
editPage: "Editar página" editPage: "Editar página"
readPage: "Viendo la fuente" readPage: "Viendo la fuente"
created: "La página fue creada"
updated: "La página fue actualizada"
deleted: "La página borrada"
pageSetting: "Configurar página" pageSetting: "Configurar página"
nameAlreadyExists: "La URL de la página especificada ya existe" nameAlreadyExists: "La URL de la página especificada ya existe"
invalidNameTitle: "URL inválida" invalidNameTitle: "URL inválida"
@ -2536,3 +2560,6 @@ _mediaControls:
pip: "Picture in Picture" pip: "Picture in Picture"
playbackRate: "Velocidad de reproducción" playbackRate: "Velocidad de reproducción"
loop: "Reproducción en bucle" loop: "Reproducción en bucle"
_remoteLookupErrors:
_noSuchObject:
title: "No se encuentra"

View file

@ -8,6 +8,9 @@ search: "Rechercher"
notifications: "Notifications" notifications: "Notifications"
username: "Nom dutilisateur·rice" username: "Nom dutilisateur·rice"
password: "Mot de passe" password: "Mot de passe"
initialPasswordForSetup: "Mot de passe initial pour la configuration"
initialPasswordIsIncorrect: "Mot de passe initial pour la configuration est incorrecte"
initialPasswordForSetupDescription: "Utilisez le mot de passe que vous avez entré pour le fichier de configuration si vous avez installé Misskey vous-même.\nSi vous utilisez un service d'hébergement Misskey, utilisez le mot de passe fourni.\nSi vous n'avez pas défini de mot de passe, laissez le champ vide pour continuer."
forgotPassword: "Mot de passe oublié" forgotPassword: "Mot de passe oublié"
fetchingAsApObject: "Récupération depuis le fédiverse …" fetchingAsApObject: "Récupération depuis le fédiverse …"
ok: "OK" ok: "OK"
@ -60,6 +63,7 @@ copyFileId: "Copier l'identifiant du fichier"
copyFolderId: "Copier l'identifiant du dossier" copyFolderId: "Copier l'identifiant du dossier"
copyProfileUrl: "Copier l'URL du profil" copyProfileUrl: "Copier l'URL du profil"
searchUser: "Chercher un·e utilisateur·rice" searchUser: "Chercher un·e utilisateur·rice"
searchThisUsersNotes: "Cherchez les notes de cet·te utilisateur·rice"
reply: "Répondre" reply: "Répondre"
loadMore: "Afficher plus …" loadMore: "Afficher plus …"
showMore: "Voir plus" showMore: "Voir plus"
@ -108,6 +112,7 @@ enterEmoji: "Insérer un émoji"
renote: "Renoter" renote: "Renoter"
unrenote: "Annuler la Renote" unrenote: "Annuler la Renote"
renoted: "Renoté !" renoted: "Renoté !"
renotedToX: "Renoté en {name}"
cantRenote: "Ce message ne peut pas être renoté." cantRenote: "Ce message ne peut pas être renoté."
cantReRenote: "Impossible de renoter une Renote." cantReRenote: "Impossible de renoter une Renote."
quote: "Citer" quote: "Citer"
@ -151,6 +156,7 @@ editList: "Modifier la liste"
selectChannel: "Sélectionner un canal" selectChannel: "Sélectionner un canal"
selectAntenna: "Sélectionner une antenne" selectAntenna: "Sélectionner une antenne"
editAntenna: "Modifier l'antenne" editAntenna: "Modifier l'antenne"
createAntenna: "Créer une antenne"
selectWidget: "Sélectionner un widget" selectWidget: "Sélectionner un widget"
editWidgets: "Modifier les widgets" editWidgets: "Modifier les widgets"
editWidgetsExit: "Valider les modifications" editWidgetsExit: "Valider les modifications"
@ -177,6 +183,7 @@ addAccount: "Ajouter un compte"
reloadAccountsList: "Rafraichir la liste des comptes" reloadAccountsList: "Rafraichir la liste des comptes"
loginFailed: "Échec de la connexion" loginFailed: "Échec de la connexion"
showOnRemote: "Voir sur linstance distante" showOnRemote: "Voir sur linstance distante"
continueOnRemote: "Continuer sur l'instance distante"
general: "Général" general: "Général"
wallpaper: "Fond décran" wallpaper: "Fond décran"
setWallpaper: "Définir le fond décran" setWallpaper: "Définir le fond décran"
@ -187,6 +194,7 @@ followConfirm: "Êtes-vous sûr·e de vouloir suivre {name} ?"
proxyAccount: "Compte proxy" proxyAccount: "Compte proxy"
proxyAccountDescription: "Un compte proxy se comporte, dans certaines conditions, comme un·e abonné·e distant·e pour les utilisateurs d'autres instances. Par exemple, quand un·e utilisateur·rice ajoute un·e utilisateur·rice distant·e à une liste, ses notes ne seront pas visibles sur l'instance si personne ne suit cet·te utilisateur·rice. Le compte proxy va donc suivre cet·te utilisateur·rice pour que ses notes soient acheminées." proxyAccountDescription: "Un compte proxy se comporte, dans certaines conditions, comme un·e abonné·e distant·e pour les utilisateurs d'autres instances. Par exemple, quand un·e utilisateur·rice ajoute un·e utilisateur·rice distant·e à une liste, ses notes ne seront pas visibles sur l'instance si personne ne suit cet·te utilisateur·rice. Le compte proxy va donc suivre cet·te utilisateur·rice pour que ses notes soient acheminées."
host: "Serveur distant" host: "Serveur distant"
selectSelf: "Sélectionner manuellement"
selectUser: "Sélectionner un·e utilisateur·rice" selectUser: "Sélectionner un·e utilisateur·rice"
recipient: "Destinataire" recipient: "Destinataire"
annotation: "Commentaires" annotation: "Commentaires"
@ -320,6 +328,7 @@ renameFolder: "Renommer le dossier"
deleteFolder: "Supprimer le dossier" deleteFolder: "Supprimer le dossier"
folder: "Dossier" folder: "Dossier"
addFile: "Ajouter un fichier" addFile: "Ajouter un fichier"
showFile: "Voir les fichiers"
emptyDrive: "Le Disque est vide" emptyDrive: "Le Disque est vide"
emptyFolder: "Le dossier est vide" emptyFolder: "Le dossier est vide"
unableToDelete: "Suppression impossible" unableToDelete: "Suppression impossible"
@ -362,7 +371,6 @@ enableLocalTimeline: "Activer le fil local"
enableGlobalTimeline: "Activer le fil global" enableGlobalTimeline: "Activer le fil global"
disablingTimelinesInfo: "Même si vous désactivez ces fils, les administrateur·rice·s et les modérateur·rice·s pourront toujours y accéder." disablingTimelinesInfo: "Même si vous désactivez ces fils, les administrateur·rice·s et les modérateur·rice·s pourront toujours y accéder."
registration: "Sinscrire" registration: "Sinscrire"
enableRegistration: "Autoriser les nouvelles inscriptions"
invite: "Inviter" invite: "Inviter"
driveCapacityPerLocalAccount: "Capacité de stockage du Disque par utilisateur local" driveCapacityPerLocalAccount: "Capacité de stockage du Disque par utilisateur local"
driveCapacityPerRemoteAccount: "Capacité de stockage du Disque par utilisateur distant" driveCapacityPerRemoteAccount: "Capacité de stockage du Disque par utilisateur distant"
@ -430,10 +438,11 @@ token: "Jeton"
2fa: "Authentification à deux facteurs" 2fa: "Authentification à deux facteurs"
setupOf2fa: "Configuration de lauthentification à deux facteurs" setupOf2fa: "Configuration de lauthentification à deux facteurs"
totp: "Application d'authentification" totp: "Application d'authentification"
totpDescription: "Entrez un mot de passe à usage unique à l'aide d'une application d'authentification" totpDescription: "Entrer un mot de passe à usage unique à l'aide d'une application d'authentification"
moderator: "Modérateur·rice·s" moderator: "Modérateur·rice·s"
moderation: "Modérations" moderation: "Modérations"
moderationNote: "Note de modération" moderationNote: "Note de modération"
moderationNoteDescription: "Vous pouvez remplir des notes qui seront partagés seulement entre modérateurs."
addModerationNote: "Ajouter une note de modération" addModerationNote: "Ajouter une note de modération"
moderationLogs: "Journal de modération" moderationLogs: "Journal de modération"
nUsersMentioned: "{n} utilisateur·rice·s mentionné·e·s" nUsersMentioned: "{n} utilisateur·rice·s mentionné·e·s"
@ -493,6 +502,10 @@ uiLanguage: "Langue daffichage de linterface"
aboutX: "À propos de {x}" aboutX: "À propos de {x}"
emojiStyle: "Style des émojis" emojiStyle: "Style des émojis"
native: "Natif" native: "Natif"
menuStyle: "Style du menu"
style: "Style"
drawer: "Sélecteur"
popup: "Pop-up"
showNoteActionsOnlyHover: "Afficher les actions de note uniquement au survol" showNoteActionsOnlyHover: "Afficher les actions de note uniquement au survol"
showReactionsCount: "Afficher le nombre de réactions des notes" showReactionsCount: "Afficher le nombre de réactions des notes"
noHistory: "Pas d'historique" noHistory: "Pas d'historique"
@ -575,6 +588,7 @@ ascendingOrder: "Ascendant"
descendingOrder: "Descendant" descendingOrder: "Descendant"
scratchpad: "ScratchPad" scratchpad: "ScratchPad"
scratchpadDescription: "ScratchPad fournit un environnement expérimental pour AiScript. Vous pouvez vérifier la rédaction de votre code, sa bonne exécution et le résultat de son interaction avec Misskey." scratchpadDescription: "ScratchPad fournit un environnement expérimental pour AiScript. Vous pouvez vérifier la rédaction de votre code, sa bonne exécution et le résultat de son interaction avec Misskey."
uiInspector: "Inspecteur UI"
output: "Sortie" output: "Sortie"
script: "Script" script: "Script"
disablePagesScript: "Désactiver AiScript sur les Pages" disablePagesScript: "Désactiver AiScript sur les Pages"
@ -618,7 +632,7 @@ description: "Description"
describeFile: "Ajouter une description d'image" describeFile: "Ajouter une description d'image"
enterFileDescription: "Saisissez une description" enterFileDescription: "Saisissez une description"
author: "Auteur·rice" author: "Auteur·rice"
leaveConfirm: "Vous avez des modifications non-sauvegardées. Voulez-vous les ignorer ?" leaveConfirm: "Vous avez des modifications non sauvegardées. Voulez-vous les ignorer ?"
manage: "Gestion" manage: "Gestion"
plugins: "Extensions" plugins: "Extensions"
preferencesBackups: "Sauvegarder les paramètres" preferencesBackups: "Sauvegarder les paramètres"
@ -828,6 +842,7 @@ administration: "Gestion"
accounts: "Comptes" accounts: "Comptes"
switch: "Remplacer" switch: "Remplacer"
noMaintainerInformationWarning: "Informations administrateur non configurées." noMaintainerInformationWarning: "Informations administrateur non configurées."
noInquiryUrlWarning: "L'URL demandé n'est pas définie"
noBotProtectionWarning: "La protection contre les bots n'est pas configurée." noBotProtectionWarning: "La protection contre les bots n'est pas configurée."
configure: "Configurer" configure: "Configurer"
postToGallery: "Publier dans la galerie" postToGallery: "Publier dans la galerie"
@ -892,6 +907,7 @@ followersVisibility: "Visibilité des abonnés"
continueThread: "Afficher la suite du fil" continueThread: "Afficher la suite du fil"
deleteAccountConfirm: "Votre compte sera supprimé. Êtes vous certain ?" deleteAccountConfirm: "Votre compte sera supprimé. Êtes vous certain ?"
incorrectPassword: "Le mot de passe est incorrect." incorrectPassword: "Le mot de passe est incorrect."
incorrectTotp: "Le mot de passe à usage unique est incorrect ou a expiré."
voteConfirm: "Confirmez-vous votre vote pour « {choice} » ?" voteConfirm: "Confirmez-vous votre vote pour « {choice} » ?"
hide: "Masquer" hide: "Masquer"
useDrawerReactionPickerForMobile: "Afficher le sélecteur de réactions en tant que panneau sur mobile" useDrawerReactionPickerForMobile: "Afficher le sélecteur de réactions en tant que panneau sur mobile"
@ -916,6 +932,9 @@ oneHour: "1 heure"
oneDay: "1 jour" oneDay: "1 jour"
oneWeek: "1 semaine" oneWeek: "1 semaine"
oneMonth: "Un mois" oneMonth: "Un mois"
threeMonths: "3 mois"
oneYear: "1 an"
threeDays: "3 jours"
reflectMayTakeTime: "Cela peut prendre un certain temps avant que cela ne se termine." reflectMayTakeTime: "Cela peut prendre un certain temps avant que cela ne se termine."
failedToFetchAccountInformation: "Impossible de récupérer les informations du compte." failedToFetchAccountInformation: "Impossible de récupérer les informations du compte."
rateLimitExceeded: "Limite de taux dépassée" rateLimitExceeded: "Limite de taux dépassée"
@ -923,7 +942,7 @@ cropImage: "Recadrer l'image"
cropImageAsk: "Voulez-vous recadrer cette image ?" cropImageAsk: "Voulez-vous recadrer cette image ?"
cropYes: "Rogner" cropYes: "Rogner"
cropNo: "Utiliser en l'état" cropNo: "Utiliser en l'état"
file: "Fichiers" file: "Fichier"
recentNHours: "Dernières {n} heures" recentNHours: "Dernières {n} heures"
recentNDays: "Derniers {n} jours" recentNDays: "Derniers {n} jours"
noEmailServerWarning: "Serveur de courrier non configuré." noEmailServerWarning: "Serveur de courrier non configuré."
@ -1055,6 +1074,7 @@ retryAllQueuesConfirmTitle: "Vraiment réessayer ?"
retryAllQueuesConfirmText: "Cela peut augmenter temporairement la charge du serveur." retryAllQueuesConfirmText: "Cela peut augmenter temporairement la charge du serveur."
enableChartsForRemoteUser: "Générer les graphiques pour les utilisateurs distants" enableChartsForRemoteUser: "Générer les graphiques pour les utilisateurs distants"
enableChartsForFederatedInstances: "Générer les graphiques pour les instances distantes" enableChartsForFederatedInstances: "Générer les graphiques pour les instances distantes"
enableStatsForFederatedInstances: "Recevoir les statistiques des instances distantes"
showClipButtonInNoteFooter: "Ajouter « Clip » au menu d'action de la note" showClipButtonInNoteFooter: "Ajouter « Clip » au menu d'action de la note"
reactionsDisplaySize: "Taille de l'affichage des réactions" reactionsDisplaySize: "Taille de l'affichage des réactions"
limitWidthOfReaction: "Limiter la largeur maximale des réactions et les afficher en taille réduite" limitWidthOfReaction: "Limiter la largeur maximale des réactions et les afficher en taille réduite"
@ -1102,6 +1122,8 @@ preventAiLearning: "Refuser l'usage dans l'apprentissage automatique d'IA géné
preventAiLearningDescription: "Demander aux robots d'indexation de ne pas utiliser le contenu publié, tel que les notes et les images, dans l'apprentissage automatique d'IA générative. Cela est réalisé en incluant le drapeau « noai » dans la réponse HTML. Une prévention complète n'est toutefois pas possible, car il est au robot d'indexation de respecter cette demande." preventAiLearningDescription: "Demander aux robots d'indexation de ne pas utiliser le contenu publié, tel que les notes et les images, dans l'apprentissage automatique d'IA générative. Cela est réalisé en incluant le drapeau « noai » dans la réponse HTML. Une prévention complète n'est toutefois pas possible, car il est au robot d'indexation de respecter cette demande."
options: "Options" options: "Options"
specifyUser: "Spécifier l'utilisateur·rice" specifyUser: "Spécifier l'utilisateur·rice"
openTagPageConfirm: "Ouvrir une page d'hashtags ?"
specifyHost: "Spécifier un serveur distant"
failedToPreviewUrl: "Aperçu d'URL échoué" failedToPreviewUrl: "Aperçu d'URL échoué"
update: "Mettre à jour" update: "Mettre à jour"
rolesThatCanBeUsedThisEmojiAsReaction: "Rôles qui peuvent utiliser cet émoji comme réaction" rolesThatCanBeUsedThisEmojiAsReaction: "Rôles qui peuvent utiliser cet émoji comme réaction"
@ -1222,13 +1244,55 @@ enableHorizontalSwipe: "Glisser pour changer d'onglet"
loading: "Chargement en cours" loading: "Chargement en cours"
surrender: "Annuler" surrender: "Annuler"
gameRetry: "Réessayer" gameRetry: "Réessayer"
notUsePleaseLeaveBlank: "Laisser vide si non utilisé"
useTotp: "Entrer un mot de passe à usage unique"
useBackupCode: "Utiliser le codes de secours"
launchApp: "Lancer l'app" launchApp: "Lancer l'app"
useNativeUIForVideoAudioPlayer: "Lire les vidéos et audios en utilisant l'UI du navigateur"
keepOriginalFilename: "Garder le nom original du fichier"
keepOriginalFilenameDescription: "Si vous désactivez ce paramètre, les noms de fichiers seront automatiquement remplacés par des noms aléatoires lorsque vous téléchargerez des fichiers."
noDescription: "Il n'y a pas de description"
alwaysConfirmFollow: "Confirmer lors d'un abonnement"
inquiry: "Contact" inquiry: "Contact"
tryAgain: "Veuillez réessayer plus tard"
confirmWhenRevealingSensitiveMedia: "Confirmer pour révéler du contenu sensible"
sensitiveMediaRevealConfirm: "Ceci pourrait être du contenu sensible. Voulez-vous l'afficher ?"
createdLists: "Listes créées"
createdAntennas: "Antennes créées"
fromX: "De {x}"
genEmbedCode: "Générer le code d'intégration"
noteOfThisUser: "Notes de cet·te utilisateur·rice"
clipNoteLimitExceeded: "Aucune note supplémentaire ne peut être ajoutée à ce clip."
performance: "Performance"
modified: "Modifié"
discard: "Annuler"
thereAreNChanges: "Il y a {n} modification(s)"
signinWithPasskey: "Se connecter avec une clé d'accès"
unknownWebAuthnKey: "Clé d'accès inconnue."
passkeyVerificationFailed: "La vérification de la clé d'accès a échoué."
passkeyVerificationSucceededButPasswordlessLoginDisabled: "La vérification de la clé d'accès a réussi, mais la connexion sans mot de passe est désactivée."
messageToFollower: "Message aux abonné·es"
target: "Destinataire"
prohibitedWordsForNameOfUser: "Mots interdits pour les noms d'utilisateur·rices"
lockdown: "Verrouiller"
pleaseSelectAccount: "Sélectionner un compte"
availableRoles: "Rôles disponibles"
_abuseUserReport:
forward: "Transférer"
forwardDescription: "Transférer le signalement vers une instance distante en tant qu'anonyme."
resolve: "Résoudre"
accept: "Accepter"
reject: "Rejeter"
resolveTutorial: "Si le signalement est légitime dans son contenu, sélectionnez « Accepter » pour marquer le cas comme résolu par l'affirmative.\nSi le contenu du rapport n'est pas légitime, sélectionnez « Rejeter » pour marquer le cas comme résolu par la négative."
_delivery: _delivery:
status: "Statut de la diffusion" status: "Statut de la diffusion"
stop: "Suspendu·e" stop: "Suspendu·e"
resume: "Reprendre"
_type: _type:
none: "Publié" none: "Publié"
manuallySuspended: "Suspendre manuellement"
goneSuspended: "L'instance est suspendue en raison de la suppression de ce dernier"
autoSuspendedForNotResponding: "L'instance est suspendue car elle ne répond pas"
_bubbleGame: _bubbleGame:
howToPlay: "Comment jouer" howToPlay: "Comment jouer"
hold: "Réserver" hold: "Réserver"
@ -1239,6 +1303,7 @@ _bubbleGame:
maxChain: "Nombre maximum de chaînes" maxChain: "Nombre maximum de chaînes"
yen: "{yen} yens" yen: "{yen} yens"
estimatedQty: "{qty} pièces" estimatedQty: "{qty} pièces"
scoreSweets: "{onigiriQtyWithUnit} Onigiri(s)"
_announcement: _announcement:
forExistingUsers: "Pour les utilisateurs existants seulement" forExistingUsers: "Pour les utilisateurs existants seulement"
needConfirmationToRead: "Exiger la confirmation de la lecture" needConfirmationToRead: "Exiger la confirmation de la lecture"
@ -1258,6 +1323,7 @@ _initialAccountSetting:
profileSetting: "Paramètres du profil" profileSetting: "Paramètres du profil"
privacySetting: "Paramètres de confidentialité" privacySetting: "Paramètres de confidentialité"
initialAccountSettingCompleted: "Configuration du profil terminée avec succès !" initialAccountSettingCompleted: "Configuration du profil terminée avec succès !"
haveFun: "Profitez de {name} !"
youCanContinueTutorial: "Vous pouvez procéder au tutoriel sur l'utilisation de {name}(Misskey) ou vous arrêter ici et commencer à l'utiliser immédiatement." youCanContinueTutorial: "Vous pouvez procéder au tutoriel sur l'utilisation de {name}(Misskey) ou vous arrêter ici et commencer à l'utiliser immédiatement."
startTutorial: "Démarrer le tutoriel" startTutorial: "Démarrer le tutoriel"
skipAreYouSure: "Désirez-vous ignorer la configuration du profil ?" skipAreYouSure: "Désirez-vous ignorer la configuration du profil ?"
@ -1351,18 +1417,60 @@ _achievements:
flavor: "Passez un bon moment avec Misskey !" flavor: "Passez un bon moment avec Misskey !"
_notes10: _notes10:
title: "Quelques notes" title: "Quelques notes"
description: "Poster 10 notes"
_notes100: _notes100:
title: "Beaucoup de notes" title: "Beaucoup de notes"
description: "Poster 100 notes"
_notes500:
title: "Couvert de notes"
description: "Poster 500 notes"
_notes1000:
title: "Une montagne de notes"
description: "Poster 1000 notes"
_notes5000:
title: "Débordement de notes"
description: "Poster 5 000 notes"
_notes10000:
title: "Super note"
description: "Poster 10 000 notes"
_notes20000:
title: "Encore... plus... de... notes..."
description: "Poster 20 000 notes"
_notes30000:
title: "Notes notes notes !"
description: "Poster 30 000 notes"
_notes40000:
title: "Usine de notes"
description: "Poster 40 000 notes"
_notes50000:
title: "Planète des notes"
description: "Poster 50 000 notes"
_notes60000:
title: "Quasar de note"
description: "Poster 50 000 notes"
_notes70000:
title: "Trou noir de notes"
description: "Poster 70 000 notes"
_notes80000:
title: "Galaxie de notes"
description: "Poster 80 000 notes"
_notes90000:
title: "Univers de notes"
description: "Poster 90 000 notes"
_notes100000: _notes100000:
title: "ALL YOUR NOTE ARE BELONG TO US" title: "ALL YOUR NOTE ARE BELONG TO US"
description: "Poster 100 000 notes"
flavor: "Avez-vous tant de choses à dire ?"
_login3: _login3:
title: "Débutant " title: "Débutant I"
description: "Se connecter pour un total de 3 jours" description: "Se connecter pour un total de 3 jours"
flavor: "Dès maintenant, appelez-moi Misskeynaute"
_login7: _login7:
title: "Débutant Ⅱ" title: "Débutant II"
description: "Se connecter pour un total de 7 jours" description: "Se connecter pour un total de 7 jours"
flavor: "On s'habitue ?"
_login15: _login15:
title: "Débutant Ⅲ" title: "Débutant III"
description: "Se connecter pour un total de 15 jours" description: "Se connecter pour un total de 15 jours"
_login30: _login30:
title: "Misskeynaute I" title: "Misskeynaute I"
@ -1386,6 +1494,7 @@ _achievements:
_login500: _login500:
title: "Expert I" title: "Expert I"
description: "Se connecter pour un total de 500 jours" description: "Se connecter pour un total de 500 jours"
flavor: "Non, mes amis, j'aime les notes"
_login600: _login600:
title: "Expert II" title: "Expert II"
description: "Se connecter pour un total de 600 jours" description: "Se connecter pour un total de 600 jours"
@ -1393,11 +1502,18 @@ _achievements:
title: "Expert III" title: "Expert III"
description: "Se connecter pour un total de 700 jours" description: "Se connecter pour un total de 700 jours"
_login800: _login800:
title: "Maître des notes I"
description: "Se connecter pour un total de 800 jours" description: "Se connecter pour un total de 800 jours"
_login900: _login900:
title: "Maître des notes II"
description: "Se connecter pour un total de 900 jours" description: "Se connecter pour un total de 900 jours"
_login1000: _login1000:
title: "Maître des notes III"
description: "Se connecter pour un total de 1 000 jours"
flavor: "Merci d'utiliser Misskey !" flavor: "Merci d'utiliser Misskey !"
_noteClipped1:
title: "Je... dois... clip..."
description: "Ajouter sa première note aux clips"
_profileFilled: _profileFilled:
title: "Bien préparé" title: "Bien préparé"
description: "Configuration de votre profil" description: "Configuration de votre profil"
@ -1456,21 +1572,31 @@ _achievements:
_driveFolderCircularReference: _driveFolderCircularReference:
title: "Référence circulaire" title: "Référence circulaire"
_setNameToSyuilo: _setNameToSyuilo:
title: "Complexe de dieu"
description: "Vous avez spécifié « syuilo » comme nom" description: "Vous avez spécifié « syuilo » comme nom"
_passedSinceAccountCreated1: _passedSinceAccountCreated1:
title: "Premier anniversaire" title: "Premier anniversaire"
description: "Un an est passé depuis la création du compte"
_passedSinceAccountCreated2: _passedSinceAccountCreated2:
title: "Second anniversaire" title: "Second anniversaire"
description: "Deux ans sont passés depuis la création du compte"
_passedSinceAccountCreated3: _passedSinceAccountCreated3:
title: "3ème anniversaire" title: "3ème anniversaire"
description: "Trois ans sont passés depuis la création du compte"
_loggedInOnBirthday: _loggedInOnBirthday:
title: "Joyeux Anniversaire !" title: "Joyeux Anniversaire !"
description: "Vous vous êtes connecté à la date de votre anniversaire" description: "Vous vous êtes connecté à la date de votre anniversaire"
_loggedInOnNewYearsDay: _loggedInOnNewYearsDay:
title: "Bonne année !" title: "Bonne année !"
description: "Vous vous êtes connecté le premier jour de l'année"
flavor: "Merci pour le soutient continue sur cette instance."
_cookieClicked: _cookieClicked:
title: "Jeu de clic sur des cookies"
description: "Cliqué sur un cookie"
flavor: "Attendez une minute, vous êtes sur le mauvais site web ?" flavor: "Attendez une minute, vous êtes sur le mauvais site web ?"
_brainDiver: _brainDiver:
title: "Brain Diver"
description: "Poster le lien sur Brain Diver"
flavor: "Misskey-Misskey La-Tu-Ma" flavor: "Misskey-Misskey La-Tu-Ma"
_smashTestNotificationButton: _smashTestNotificationButton:
title: "Débordement de tests" title: "Débordement de tests"
@ -1478,6 +1604,11 @@ _achievements:
_tutorialCompleted: _tutorialCompleted:
title: "Diplôme de la course élémentaire de Misskey" title: "Diplôme de la course élémentaire de Misskey"
description: "Terminer le tutoriel" description: "Terminer le tutoriel"
_bubbleGameExplodingHead:
title: "🤯"
description: "Le plus gros objet du jeu de bulles"
_bubbleGameDoubleExplodingHead:
title: "Double🤯"
_role: _role:
new: "Nouveau rôle" new: "Nouveau rôle"
edit: "Modifier le rôle" edit: "Modifier le rôle"
@ -1508,9 +1639,11 @@ _role:
canManageCustomEmojis: "Gestion des émojis personnalisés" canManageCustomEmojis: "Gestion des émojis personnalisés"
canManageAvatarDecorations: "Gestion des décorations d'avatar" canManageAvatarDecorations: "Gestion des décorations d'avatar"
driveCapacity: "Capacité de stockage du Disque" driveCapacity: "Capacité de stockage du Disque"
antennaMax: "Nombre maximum d'antennes"
wordMuteMax: "Nombre maximal de caractères dans le filtre de mots" wordMuteMax: "Nombre maximal de caractères dans le filtre de mots"
canUseTranslator: "Usage de la fonctionnalité de traduction" canUseTranslator: "Usage de la fonctionnalité de traduction"
avatarDecorationLimit: "Nombre maximal de décorations d'avatar" avatarDecorationLimit: "Nombre maximal de décorations d'avatar"
canImportAntennas: "Autoriser l'importation d'antennes"
_sensitiveMediaDetection: _sensitiveMediaDetection:
description: "L'apprentissage automatique peut être utilisé pour détecter automatiquement les médias sensibles à modérer. La sollicitation des serveurs augmente légèrement." description: "L'apprentissage automatique peut être utilisé pour détecter automatiquement les médias sensibles à modérer. La sollicitation des serveurs augmente légèrement."
sensitivity: "Sensibilité de la détection" sensitivity: "Sensibilité de la détection"
@ -1793,6 +1926,29 @@ _permissions:
"write:gallery": "Éditer la galerie" "write:gallery": "Éditer la galerie"
"read:gallery-likes": "Voir les mentions « J'aime » dans la galerie" "read:gallery-likes": "Voir les mentions « J'aime » dans la galerie"
"write:gallery-likes": "Gérer les mentions « J'aime » dans la galerie" "write:gallery-likes": "Gérer les mentions « J'aime » dans la galerie"
"read:flash": "Voir le Play"
"write:flash": "Modifier le Play"
"read:flash-likes": "Lire vos mentions j'aime des Play"
"write:flash-likes": "Modifier vos mentions j'aime des Play"
"read:admin:abuse-user-reports": "Voir les utilisateurs signalés"
"write:admin:delete-account": "Supprimer le compte d'utilisateur"
"write:admin:delete-all-files-of-a-user": "Supprimer tous les fichiers d'un utilisateur"
"read:admin:index-stats": "Voir les statistiques sur les index de base de données"
"read:admin:table-stats": "Voir les statistiques sur les index de base de données"
"read:admin:user-ips": "Voir l'adresse IP de l'utilisateur"
"read:admin:meta": "Voir les métadonnées de l'instance"
"write:admin:reset-password": "Réinitialiser le mot de passe de l'utilisateur"
"write:admin:resolve-abuse-user-report": "Résoudre le signalement d'un utilisateur"
"write:admin:send-email": "Envoyer un mail"
"read:admin:server-info": "Voir les informations de l'instance"
"read:admin:show-moderation-log": "Voir les logs de modération"
"read:admin:show-user": "Voir les informations privées de l'utilisateur"
"write:admin:suspend-user": "Suspendre l'utilisateur"
"write:admin:unset-user-avatar": "Retirer l'avatar de l'utilisateur"
"write:admin:unset-user-banner": "Retirer la bannière de l'utilisateur"
"write:admin:unsuspend-user": "Lever la suspension d'un utilisateur"
"write:admin:meta": "Gérer les métadonnées de l'instance"
"write:admin:roles": "Gérer les rôles"
_auth: _auth:
shareAccess: "Autoriser \"{name}\" à accéder à votre compte ?" shareAccess: "Autoriser \"{name}\" à accéder à votre compte ?"
shareAccessAsk: "Voulez-vous vraiment autoriser cette application à accéder à votre compte?" shareAccessAsk: "Voulez-vous vraiment autoriser cette application à accéder à votre compte?"
@ -1944,7 +2100,16 @@ _timelines:
social: "Social" social: "Social"
global: "Global" global: "Global"
_play: _play:
new: "Créer un Play"
edit: "Modifier un Play"
created: "Play créé"
updated: "Play édité"
deleted: "Play supprimé"
pageSetting: "Configuration du Play"
editThisPage: "Modifier ce Play"
viewSource: "Afficher la source" viewSource: "Afficher la source"
my: "Mes Play"
liked: "Play aimés"
featured: "Populaire" featured: "Populaire"
title: "Titre" title: "Titre"
script: "Script" script: "Script"
@ -1953,9 +2118,6 @@ _pages:
newPage: "Créer une page" newPage: "Créer une page"
editPage: "Modifier une page" editPage: "Modifier une page"
readPage: "Affichage de la source en cours" readPage: "Affichage de la source en cours"
created: "La page a été créée !"
updated: "La page a été mise à jour !"
deleted: "La page a été supprimée"
pageSetting: "Paramètres de la Page" pageSetting: "Paramètres de la Page"
nameAlreadyExists: "L'URL de page spécifiée existe déjà" nameAlreadyExists: "L'URL de page spécifiée existe déjà"
invalidNameTitle: "L'URL de page spécifiée nest pas valide" invalidNameTitle: "L'URL de page spécifiée nest pas valide"
@ -2018,10 +2180,13 @@ _notification:
achievementEarned: "Accomplissement déverrouillé" achievementEarned: "Accomplissement déverrouillé"
testNotification: "Tester la notification" testNotification: "Tester la notification"
reactedBySomeUsers: "{n} utilisateur·rice·s ont réagi" reactedBySomeUsers: "{n} utilisateur·rice·s ont réagi"
likedBySomeUsers: "{n} utilisateurs ont aimé votre note"
renotedBySomeUsers: "{n} utilisateur·rice·s ont renoté" renotedBySomeUsers: "{n} utilisateur·rice·s ont renoté"
followedBySomeUsers: "{n} utilisateur·rice·s se sont abonné·e·s à vous" followedBySomeUsers: "{n} utilisateur·rice·s se sont abonné·e·s à vous"
login: "Quelqu'un s'est connecté"
_types: _types:
all: "Toutes" all: "Toutes"
note: "Nouvelles notes"
follow: "Nouvel·le abonné·e" follow: "Nouvel·le abonné·e"
mention: "Mentions" mention: "Mentions"
reply: "Réponses" reply: "Réponses"
@ -2071,11 +2236,14 @@ _drivecleaner:
orderByCreatedAtAsc: "Date d'ajout ascendante" orderByCreatedAtAsc: "Date d'ajout ascendante"
_webhookSettings: _webhookSettings:
name: "Nom" name: "Nom"
secret: "Secret"
trigger: "Activateur"
active: "Activé" active: "Activé"
_abuseReport: _abuseReport:
_notificationRecipient: _notificationRecipient:
_recipientType: _recipientType:
mail: "E-mail " mail: "E-mail "
keywords: "Mots clés "
_moderationLogTypes: _moderationLogTypes:
createRole: "Rôle créé" createRole: "Rôle créé"
deleteRole: "Rôle supprimé" deleteRole: "Rôle supprimé"
@ -2112,6 +2280,7 @@ _moderationLogTypes:
deleteAvatarDecoration: "Décoration d'avatar supprimée" deleteAvatarDecoration: "Décoration d'avatar supprimée"
unsetUserAvatar: "Supprimer l'avatar de l'utilisateur·rice" unsetUserAvatar: "Supprimer l'avatar de l'utilisateur·rice"
unsetUserBanner: "Supprimer la bannière de l'utilisateur·rice" unsetUserBanner: "Supprimer la bannière de l'utilisateur·rice"
deleteFlash: "Supprimer le Play"
_fileViewer: _fileViewer:
title: "Détails du fichier" title: "Détails du fichier"
type: "Type du fichier" type: "Type du fichier"
@ -2175,5 +2344,23 @@ _dataSaver:
title: "Mise en évidence du code" title: "Mise en évidence du code"
description: "Si la notation de mise en évidence du code est utilisée, par exemple dans la MFM, elle ne sera pas chargée tant qu'elle n'aura pas été tapée. La mise en évidence du code nécessite le chargement du fichier de définition de chaque langue à mettre en évidence, mais comme ces fichiers ne sont plus chargés automatiquement, on peut s'attendre à une réduction du trafic de données." description: "Si la notation de mise en évidence du code est utilisée, par exemple dans la MFM, elle ne sera pas chargée tant qu'elle n'aura pas été tapée. La mise en évidence du code nécessite le chargement du fichier de définition de chaque langue à mettre en évidence, mais comme ces fichiers ne sont plus chargés automatiquement, on peut s'attendre à une réduction du trafic de données."
_reversi: _reversi:
reversi: "Reversi"
blackIs: "{name} joue les noirs"
rules: "Règles"
waitingBoth: "Préparez-vous" waitingBoth: "Préparez-vous"
myTurn: "Cest votre tour"
turnOf: "C'est le tour de {name}"
pastTurnOf: "Tour de {name}"
surrender: "Se rendre"
surrendered: "Par abandon"
total: "Total" total: "Total"
playing: "En cours"
lookingForPlayer: "Recherche d'adversaire"
_mediaControls:
playbackRate: "Vitesse de lecture"
_embedCodeGen:
title: "Personnaliser le code d'intégration"
generateCode: "Générer le code d'intégration"
_remoteLookupErrors:
_noSuchObject:
title: "Non trouvé"

View file

@ -375,7 +375,6 @@ enableLocalTimeline: "Nyalakan lini masa lokal"
enableGlobalTimeline: "Nyalakan lini masa global" enableGlobalTimeline: "Nyalakan lini masa global"
disablingTimelinesInfo: "Admin dan Moderator akan selalu memiliki akses ke semua lini masa meskipun lini masa tersebut tidak diaktifkan." disablingTimelinesInfo: "Admin dan Moderator akan selalu memiliki akses ke semua lini masa meskipun lini masa tersebut tidak diaktifkan."
registration: "Pendaftaran" registration: "Pendaftaran"
enableRegistration: "Nyalakan pendaftaran pengguna baru"
invite: "Undang" invite: "Undang"
driveCapacityPerLocalAccount: "Kapasitas drive per pengguna lokal" driveCapacityPerLocalAccount: "Kapasitas drive per pengguna lokal"
driveCapacityPerRemoteAccount: "Kapasitas drive per pengguna remote" driveCapacityPerRemoteAccount: "Kapasitas drive per pengguna remote"
@ -2286,9 +2285,6 @@ _pages:
newPage: "Buat halaman baru" newPage: "Buat halaman baru"
editPage: "Sunting halaman" editPage: "Sunting halaman"
readPage: "Lihat sumber kode aktif" readPage: "Lihat sumber kode aktif"
created: "Halaman berhasil dibuat"
updated: "Halaman berhasil diperbaharui!"
deleted: "Halaman telah dihapus"
pageSetting: "Pengaturan Halaman" pageSetting: "Pengaturan Halaman"
nameAlreadyExists: "URL Halaman yang ditentukan sudah ada" nameAlreadyExists: "URL Halaman yang ditentukan sudah ada"
invalidNameTitle: "URL Halaman yang ditentukan tidak valid" invalidNameTitle: "URL Halaman yang ditentukan tidak valid"
@ -2611,3 +2607,6 @@ _mediaControls:
pip: "Gambar dalam Gambar" pip: "Gambar dalam Gambar"
playbackRate: "Kecepatan Pemutaran" playbackRate: "Kecepatan Pemutaran"
loop: "Ulangi Pemutaran" loop: "Ulangi Pemutaran"
_remoteLookupErrors:
_noSuchObject:
title: "Tidak dapat ditemukan"

403
locales/index.d.ts vendored
View file

@ -36,6 +36,10 @@ export interface Locale extends ILocale {
* *
*/ */
"search": string; "search": string;
/**
*
*/
"reset": string;
/** /**
* *
*/ */
@ -210,6 +214,10 @@ export interface Locale extends ILocale {
* *
*/ */
"copyLink": string; "copyLink": string;
/**
*
*/
"copyRemoteLink": string;
/** /**
* *
*/ */
@ -1546,10 +1554,6 @@ export interface Locale extends ILocale {
* *
*/ */
"registration": string; "registration": string;
/**
*
*/
"enableRegistration": string;
/** /**
* *
*/ */
@ -2366,6 +2370,10 @@ export interface Locale extends ILocale {
* *
*/ */
"details": string; "details": string;
/**
*
*/
"renoteDetails": string;
/** /**
* *
*/ */
@ -2754,10 +2762,22 @@ export interface Locale extends ILocale {
* *
*/ */
"wordMute": string; "wordMute": string;
/**
*
*/
"wordMuteDescription": string;
/** /**
* *
*/ */
"hardWordMute": string; "hardWordMute": string;
/**
*
*/
"showMutedWord": string;
/**
*
*/
"hardWordMuteDescription": string;
/** /**
* *
*/ */
@ -2774,6 +2794,10 @@ export interface Locale extends ILocale {
* {name} * {name}
*/ */
"userSaysSomething": ParameterizedString<"name">; "userSaysSomething": ParameterizedString<"name">;
/**
* {name}{word}
*/
"userSaysSomethingAbout": ParameterizedString<"name" | "word">;
/** /**
* *
*/ */
@ -4171,7 +4195,7 @@ export interface Locale extends ILocale {
*/ */
"invalidParamError": string; "invalidParamError": string;
/** /**
* *
*/ */
"invalidParamErrorDescription": string; "invalidParamErrorDescription": string;
/** /**
@ -5218,6 +5242,18 @@ export interface Locale extends ILocale {
* *
*/ */
"availableRoles": string; "availableRoles": string;
/**
*
*/
"acknowledgeNotesAndEnable": string;
/**
*
*/
"federationSpecified": string;
/**
*
*/
"federationDisabled": string;
"_accountSettings": { "_accountSettings": {
/** /**
* *
@ -5794,6 +5830,14 @@ export interface Locale extends ILocale {
* URLやWebページのURLを指定します * URLやWebページのURLを指定します
*/ */
"inquiryUrlDescription": string; "inquiryUrlDescription": string;
/**
*
*/
"openRegistration": string;
/**
*
*/
"openRegistrationWarning": string;
/** /**
* *
*/ */
@ -8238,6 +8282,10 @@ export interface Locale extends ILocale {
* *
*/ */
"read:admin:abuse-user-reports": string; "read:admin:abuse-user-reports": string;
/**
*
*/
"write:admin:create-account": string;
/** /**
* *
*/ */
@ -9136,18 +9184,6 @@ export interface Locale extends ILocale {
* *
*/ */
"readPage": string; "readPage": string;
/**
*
*/
"created": string;
/**
*
*/
"updated": string;
/**
*
*/
"deleted": string;
/** /**
* *
*/ */
@ -10503,6 +10539,227 @@ export interface Locale extends ILocale {
*/ */
"native": string; "native": string;
}; };
"_gridComponent": {
"_error": {
/**
*
*/
"requiredValue": string;
/**
* 正規表現によるバリデーションはtype:textのカラムのみサポートします
*/
"columnTypeNotSupport": string;
/**
* {pattern}
*/
"patternNotMatch": ParameterizedString<"pattern">;
/**
*
*/
"notUnique": string;
};
};
"_roleSelectDialog": {
/**
*
*/
"notSelected": string;
};
"_customEmojisManager": {
"_gridCommon": {
/**
*
*/
"copySelectionRows": string;
/**
*
*/
"copySelectionRanges": string;
/**
*
*/
"deleteSelectionRows": string;
/**
*
*/
"deleteSelectionRanges": string;
/**
*
*/
"searchSettings": string;
/**
*
*/
"searchSettingCaption": string;
/**
*
*/
"searchLimit": string;
/**
*
*/
"sortOrder": string;
/**
*
*/
"registrationLogs": string;
/**
*
*/
"registrationLogsCaption": string;
/**
*
*/
"alertEmojisRegisterFailedDescription": string;
};
"_logs": {
/**
*
*/
"showSuccessLogSwitch": string;
/**
*
*/
"failureLogNothing": string;
/**
*
*/
"logNothing": string;
};
"_remote": {
/**
*
*/
"selectionRowDetail": string;
/**
*
*/
"importSelectionRows": string;
/**
*
*/
"importSelectionRangesRows": string;
/**
*
*/
"importEmojisButton": string;
/**
*
*/
"confirmImportEmojisTitle": string;
/**
* {count}
*/
"confirmImportEmojisDescription": ParameterizedString<"count">;
};
"_local": {
/**
*
*/
"tabTitleList": string;
/**
*
*/
"tabTitleRegister": string;
"_list": {
/**
*
*/
"emojisNothing": string;
/**
*
*/
"markAsDeleteTargetRows": string;
/**
*
*/
"markAsDeleteTargetRanges": string;
/**
*
*/
"alertUpdateEmojisNothingDescription": string;
/**
*
*/
"alertDeleteEmojisNothingDescription": string;
/**
*
*/
"confirmMovePage": string;
/**
*
*/
"confirmChangeView": string;
/**
* {count}
*/
"confirmUpdateEmojisDescription": ParameterizedString<"count">;
/**
* {count}
*/
"confirmDeleteEmojisDescription": ParameterizedString<"count">;
/**
*
*/
"confirmResetDescription": string;
/**
*
*
*/
"confirmMovePageDesciption": string;
/**
*
*/
"dialogSelectRoleTitle": string;
};
"_register": {
/**
*
*/
"uploadSettingTitle": string;
/**
*
*/
"uploadSettingDescription": string;
/**
* "category"
*/
"directoryToCategoryLabel": string;
/**
* "category"
*/
"directoryToCategoryCaption": string;
/**
*
*/
"emojiInputAreaCaption": string;
/**
*
*/
"emojiInputAreaList1": string;
/**
* PCから選択する
*/
"emojiInputAreaList2": string;
/**
*
*/
"emojiInputAreaList3": string;
/**
* {count}
*/
"confirmRegisterEmojisDescription": ParameterizedString<"count">;
/**
*
*/
"confirmClearEmojisDescription": string;
/**
* {count}
*/
"confirmUploadEmojisDescription": ParameterizedString<"count">;
};
};
};
"_embedCodeGen": { "_embedCodeGen": {
/** /**
* *
@ -10579,6 +10836,118 @@ export interface Locale extends ILocale {
*/ */
"description3": ParameterizedString<"link">; "description3": ParameterizedString<"link">;
}; };
"_followRequest": {
/**
*
*/
"recieved": string;
/**
*
*/
"sent": string;
};
"_remoteLookupErrors": {
"_federationNotAllowed": {
/**
*
*/
"title": string;
/**
*
*
*/
"description": string;
};
"_uriInvalid": {
/**
* URIが不正です
*/
"title": string;
/**
* URIに問題がありますURIに使用できない文字を入力していないか確認してください
*/
"description": string;
};
"_requestFailed": {
/**
*
*/
"title": string;
/**
* URIや存在しないURIを入力していないか確認してください
*/
"description": string;
};
"_responseInvalid": {
/**
*
*/
"title": string;
/**
*
*/
"description": string;
};
"_responseInvalidIdHostNotMatch": {
/**
* URIのドメインと最終的に得られたURIのドメインとが異なりますURIを使用して照会し直してください
*/
"description": string;
};
"_noSuchObject": {
/**
*
*/
"title": string;
/**
* URIをもう一度お確かめください
*/
"description": string;
};
};
"_captcha": {
/**
* CAPTCHAを通過してください
*/
"verify": string;
/**
*
*
*/
"testSiteKeyMessage": string;
"_error": {
"_requestFailed": {
/**
* CAPTCHAのリクエストに失敗しました
*/
"title": string;
/**
*
*/
"text": string;
};
"_verificationFailed": {
/**
* CAPTCHAの検証に失敗しました
*/
"title": string;
/**
*
*/
"text": string;
};
"_unknown": {
/**
* CAPTCHAエラー
*/
"title": string;
/**
*
*/
"text": string;
};
};
};
} }
declare const locales: { declare const locales: {
[lang: string]: Locale; [lang: string]: Locale;

View file

@ -5,6 +5,7 @@ introMisskey: "Eccoci! Misskey è un servizio di microblogging decentralizzato,
poweredByMisskeyDescription: "{name} è uno dei servizi (chiamati istanze) che utilizzano la piattaforma open source <b>Misskey</b>." poweredByMisskeyDescription: "{name} è uno dei servizi (chiamati istanze) che utilizzano la piattaforma open source <b>Misskey</b>."
monthAndDay: "{day}/{month}" monthAndDay: "{day}/{month}"
search: "Cerca" search: "Cerca"
reset: "Ripristinare"
notifications: "Notifiche" notifications: "Notifiche"
username: "Nome utente" username: "Nome utente"
password: "Password" password: "Password"
@ -48,6 +49,7 @@ pin: "Fissa sul profilo"
unpin: "Non fissare sul profilo" unpin: "Non fissare sul profilo"
copyContent: "Copia il contenuto" copyContent: "Copia il contenuto"
copyLink: "Copia il link" copyLink: "Copia il link"
copyRemoteLink: "Copia link remoto"
copyLinkRenote: "Copia collegamento alla Rinota" copyLinkRenote: "Copia collegamento alla Rinota"
delete: "Elimina" delete: "Elimina"
deleteAndEdit: "Elimina e modifica" deleteAndEdit: "Elimina e modifica"
@ -56,7 +58,7 @@ addToList: "Aggiungi alla lista"
addToAntenna: "Aggiungi all'antenna" addToAntenna: "Aggiungi all'antenna"
sendMessage: "Invia messaggio" sendMessage: "Invia messaggio"
copyRSS: "Copia RSS" copyRSS: "Copia RSS"
copyUsername: "Copia nome utente" copyUsername: "Copia indirizzo del profilo"
copyUserId: "Copia ID del profilo" copyUserId: "Copia ID del profilo"
copyNoteId: "Copia ID della Nota" copyNoteId: "Copia ID della Nota"
copyFileId: "Copia ID del file" copyFileId: "Copia ID del file"
@ -105,7 +107,7 @@ makeFollowManuallyApprove: "Approva i follower manualmente"
defaultNoteVisibility: "Privacy predefinita delle note" defaultNoteVisibility: "Privacy predefinita delle note"
follow: "Segui" follow: "Segui"
followRequest: "Richiesta di follow" followRequest: "Richiesta di follow"
followRequests: "Richieste di follow" followRequests: "Relazioni"
unfollow: "Togli Following" unfollow: "Togli Following"
followRequestPending: "Richiesta in approvazione" followRequestPending: "Richiesta in approvazione"
enterEmoji: "Inserisci emoji" enterEmoji: "Inserisci emoji"
@ -382,7 +384,6 @@ enableLocalTimeline: "Abilita la timeline locale"
enableGlobalTimeline: "Abilita la timeline federata" enableGlobalTimeline: "Abilita la timeline federata"
disablingTimelinesInfo: "Anche disabilitandole, gli Amministratori e i Moderatori potranno comunque accedervi." disablingTimelinesInfo: "Anche disabilitandole, gli Amministratori e i Moderatori potranno comunque accedervi."
registration: "Iscriviti" registration: "Iscriviti"
enableRegistration: "Consenti a chiunque di registrarsi"
invite: "Invita" invite: "Invita"
driveCapacityPerLocalAccount: "Capienza del Drive per profilo locale" driveCapacityPerLocalAccount: "Capienza del Drive per profilo locale"
driveCapacityPerRemoteAccount: "Capienza del Drive per profilo remoto" driveCapacityPerRemoteAccount: "Capienza del Drive per profilo remoto"
@ -441,7 +442,7 @@ recentlyRegisteredUsers: "Profili iscritti di recente"
recentlyDiscoveredUsers: "Profili scoperti di recente" recentlyDiscoveredUsers: "Profili scoperti di recente"
exploreUsersCount: "Ci sono {count} profili" exploreUsersCount: "Ci sono {count} profili"
exploreFediverse: "Esplora il Fediverso" exploreFediverse: "Esplora il Fediverso"
popularTags: "Tag di tendenza" popularTags: "Hashtag popolari"
userList: "Liste" userList: "Liste"
about: "Informazioni" about: "Informazioni"
aboutMisskey: "Informazioni di Misskey" aboutMisskey: "Informazioni di Misskey"
@ -536,7 +537,7 @@ regenerate: "Generare di nuovo"
fontSize: "Dimensione carattere" fontSize: "Dimensione carattere"
mediaListWithOneImageAppearance: "Altezza dell'elenco media con una sola immagine " mediaListWithOneImageAppearance: "Altezza dell'elenco media con una sola immagine "
limitTo: "Limita a {x}" limitTo: "Limita a {x}"
noFollowRequests: "Non hai alcuna richiesta di follow" noFollowRequests: "Non ci sono richieste di relazione"
openImageInNewTab: "Apri le immagini in un nuovo tab" openImageInNewTab: "Apri le immagini in un nuovo tab"
dashboard: "Pannello di controllo" dashboard: "Pannello di controllo"
local: "Locale" local: "Locale"
@ -552,8 +553,8 @@ promote: "Pubblicizza"
numberOfDays: "Numero di giorni" numberOfDays: "Numero di giorni"
hideThisNote: "Nasconda la nota" hideThisNote: "Nasconda la nota"
showFeaturedNotesInTimeline: "Mostrare le note di tendenza nella tua timeline" showFeaturedNotesInTimeline: "Mostrare le note di tendenza nella tua timeline"
objectStorage: "Stoccaggio oggetti" objectStorage: "Storage S3"
useObjectStorage: "Utilizza stoccaggio oggetti" useObjectStorage: "Utilizza lo storage S3 in cloud"
objectStorageBaseUrl: "Base URL" objectStorageBaseUrl: "Base URL"
objectStorageBaseUrlDesc: "URL di riferimento. In caso di utilizzo di proxy o CDN l'URL è 'https://<bucket>.s3.amazonaws.com' per S3, 'https://storage.googleapis.com/<bucket>' per GCS eccetera. " objectStorageBaseUrlDesc: "URL di riferimento. In caso di utilizzo di proxy o CDN l'URL è 'https://<bucket>.s3.amazonaws.com' per S3, 'https://storage.googleapis.com/<bucket>' per GCS eccetera. "
objectStorageBucket: "Bucket" objectStorageBucket: "Bucket"
@ -587,6 +588,7 @@ masterVolume: "Volume principale"
notUseSound: "Non emettere suoni" notUseSound: "Non emettere suoni"
useSoundOnlyWhenActive: "Emetti suoni solo quando Misskey è in attività" useSoundOnlyWhenActive: "Emetti suoni solo quando Misskey è in attività"
details: "Dettagli" details: "Dettagli"
renoteDetails: "Dettagli della Rinota"
chooseEmoji: "Scegli emoji" chooseEmoji: "Scegli emoji"
unableToProcess: "Impossibile compiere l'operazione" unableToProcess: "Impossibile compiere l'operazione"
recentUsed: "Usato di recente" recentUsed: "Usato di recente"
@ -684,11 +686,15 @@ smtpSecure: "Usare SSL/TLS implicito per le connessioni SMTP"
smtpSecureInfo: "Disabilitare quando è attivo STARTTLS." smtpSecureInfo: "Disabilitare quando è attivo STARTTLS."
testEmail: "Verifica il funzionamento" testEmail: "Verifica il funzionamento"
wordMute: "Filtri parole" wordMute: "Filtri parole"
wordMuteDescription: "Contrae le Note con la parola o la frase specificata. Permette di espandere le Note, cliccandole."
hardWordMute: "Filtro parole forte" hardWordMute: "Filtro parole forte"
showMutedWord: "Elenca le parole silenziate"
hardWordMuteDescription: "Nasconde le Note con la parola o la frase specificata. A differenza delle parole silenziate, la Nota non verrà federata."
regexpError: "errore regex" regexpError: "errore regex"
regexpErrorDescription: "Si è verificato un errore nell'espressione regolare alla riga {line} della parola muta {tab}:" regexpErrorDescription: "Si è verificato un errore nell'espressione regolare alla riga {line} della parola muta {tab}:"
instanceMute: "Silenziare l'istanza" instanceMute: "Silenziare l'istanza"
userSaysSomething: "{name} ha detto qualcosa" userSaysSomething: "{name} ha detto qualcosa"
userSaysSomethingAbout: "{name} ha Notato a riguardo di \"{word}\""
makeActive: "Attiva" makeActive: "Attiva"
display: "Visualizza" display: "Visualizza"
copy: "Copia" copy: "Copia"
@ -700,7 +706,7 @@ database: "Base dati"
channel: "Canale" channel: "Canale"
create: "Crea" create: "Crea"
notificationSetting: "Impostazioni notifiche" notificationSetting: "Impostazioni notifiche"
notificationSettingDesc: "Seleziona il tipo di notifiche da visualizzare." notificationSettingDesc: "Scegli quali notifiche mostrare."
useGlobalSetting: "Usa impostazioni generali" useGlobalSetting: "Usa impostazioni generali"
useGlobalSettingDesc: "Quando attiva, verranno utilizzate le impostazioni notifiche del profilo. Altrimenti si possono segliere impostazioni personalizzate." useGlobalSettingDesc: "Quando attiva, verranno utilizzate le impostazioni notifiche del profilo. Altrimenti si possono segliere impostazioni personalizzate."
other: "Eccetera" other: "Eccetera"
@ -907,7 +913,7 @@ itsOn: "Abilitato"
itsOff: "Disabilitato" itsOff: "Disabilitato"
on: "Acceso" on: "Acceso"
off: "Spento" off: "Spento"
emailRequiredForSignup: "L'ndirizzo e-mail è obbligatorio per registrarsi" emailRequiredForSignup: "L'indirizzo e-mail è obbligatorio per registrarsi"
unread: "Non lette" unread: "Non lette"
filter: "Filtri" filter: "Filtri"
controlPanel: "Pannello di controllo" controlPanel: "Pannello di controllo"
@ -970,7 +976,7 @@ requireAdminForView: "Per visualizzarli, è necessario aver effettuato l'accesso
isSystemAccount: "Questi profili vengono creati e gestiti automaticamente dal sistema" isSystemAccount: "Questi profili vengono creati e gestiti automaticamente dal sistema"
typeToConfirm: "Digita {x} per continuare" typeToConfirm: "Digita {x} per continuare"
deleteAccount: "Eliminazione profilo" deleteAccount: "Eliminazione profilo"
document: "Documento" document: "Documentazione"
numberOfPageCache: "Numero di pagine cache" numberOfPageCache: "Numero di pagine cache"
numberOfPageCacheDescription: "Aumenta l'usabilità, ma aumenta anche il carico e l'utilizzo della memoria." numberOfPageCacheDescription: "Aumenta l'usabilità, ma aumenta anche il carico e l'utilizzo della memoria."
logoutConfirm: "Vuoi davvero uscire da Misskey? " logoutConfirm: "Vuoi davvero uscire da Misskey? "
@ -1106,7 +1112,7 @@ accountMovedShort: "Questo profilo è stato migrato"
operationForbidden: "Operazione non consentita" operationForbidden: "Operazione non consentita"
forceShowAds: "Mostra sempre i banner" forceShowAds: "Mostra sempre i banner"
addMemo: "Aggiungi Memo" addMemo: "Aggiungi Memo"
editMemo: "Modifica Memo" editMemo: "Modifica il promemoria"
reactionsList: "Chi ha reagito?" reactionsList: "Chi ha reagito?"
renotesList: "Chi ha Rinotato?" renotesList: "Chi ha Rinotato?"
notificationDisplay: "Stile delle notifiche" notificationDisplay: "Stile delle notifiche"
@ -1140,7 +1146,7 @@ options: "Opzioni del ruolo"
specifyUser: "Profilo specifico" specifyUser: "Profilo specifico"
lookupConfirm: "Vuoi davvero richiedere informazioni?" lookupConfirm: "Vuoi davvero richiedere informazioni?"
openTagPageConfirm: "Vuoi davvero aprire la pagina dell'hashtag?" openTagPageConfirm: "Vuoi davvero aprire la pagina dell'hashtag?"
specifyHost: "Specifica l'host" specifyHost: "Host specifici"
failedToPreviewUrl: "Anteprima non disponibile" failedToPreviewUrl: "Anteprima non disponibile"
update: "Aggiorna" update: "Aggiorna"
rolesThatCanBeUsedThisEmojiAsReaction: "Ruoli che possono usare questa emoji come reazione" rolesThatCanBeUsedThisEmojiAsReaction: "Ruoli che possono usare questa emoji come reazione"
@ -1240,7 +1246,7 @@ code: "Codice"
reloadRequiredToApplySettings: "Per applicare le impostazioni, occorre ricaricare." reloadRequiredToApplySettings: "Per applicare le impostazioni, occorre ricaricare."
remainingN: "Rimangono: {n}" remainingN: "Rimangono: {n}"
overwriteContentConfirm: "Vuoi davvero sostituire l'attuale contenuto?" overwriteContentConfirm: "Vuoi davvero sostituire l'attuale contenuto?"
seasonalScreenEffect: "Schermate in base alla stagione" seasonalScreenEffect: "Abilita gli effetti speciali stagionali"
decorate: "Decora" decorate: "Decora"
addMfmFunction: "Aggiungi decorazioni" addMfmFunction: "Aggiungi decorazioni"
enableQuickAddMfmFunction: "Attiva il selettore di funzioni MFM" enableQuickAddMfmFunction: "Attiva il selettore di funzioni MFM"
@ -1299,6 +1305,10 @@ yourNameContainsProhibitedWordsDescription: "Se desideri comunque utilizzare que
thisContentsAreMarkedAsSigninRequiredByAuthor: "L'autore richiede di iscriversi per vedere il contenuto" thisContentsAreMarkedAsSigninRequiredByAuthor: "L'autore richiede di iscriversi per vedere il contenuto"
lockdown: "Isolamento" lockdown: "Isolamento"
pleaseSelectAccount: "Per favore, seleziona un profilo" pleaseSelectAccount: "Per favore, seleziona un profilo"
availableRoles: "Ruoli disponibili"
acknowledgeNotesAndEnable: "Attivare dopo averne compreso il comportamento."
federationSpecified: "Questo server è federato solo con istanze specifiche del Fediverso. Puoi interagire solo con quelle scelte dall'amministrazione."
federationDisabled: "Questo server ha la federazione disabilitata. Non puoi interagire con profili provenienti da altri server."
_accountSettings: _accountSettings:
requireSigninToViewContents: "Per vedere il contenuto, è necessaria l'iscrizione" requireSigninToViewContents: "Per vedere il contenuto, è necessaria l'iscrizione"
requireSigninToViewContentsDescription1: "Richiedere l'iscrizione per visualizzare tutte le Note e gli altri contenuti che hai creato. Probabilmente l'effetto è impedire la raccolta di informazioni da parte dei bot crawler." requireSigninToViewContentsDescription1: "Richiedere l'iscrizione per visualizzare tutte le Note e gli altri contenuti che hai creato. Probabilmente l'effetto è impedire la raccolta di informazioni da parte dei bot crawler."
@ -1455,6 +1465,8 @@ _serverSettings:
reactionsBufferingDescription: "Attivando questa opzione, puoi migliorare significativamente le prestazioni durante la creazione delle reazioni e ridurre il carico sul database. Tuttavia, aumenterà l'impiego di memoria Redis." reactionsBufferingDescription: "Attivando questa opzione, puoi migliorare significativamente le prestazioni durante la creazione delle reazioni e ridurre il carico sul database. Tuttavia, aumenterà l'impiego di memoria Redis."
inquiryUrl: "URL di contatto" inquiryUrl: "URL di contatto"
inquiryUrlDescription: "Specificare l'URL al modulo di contatto, oppure le informazioni con i dati di contatto dell'amministrazione." inquiryUrlDescription: "Specificare l'URL al modulo di contatto, oppure le informazioni con i dati di contatto dell'amministrazione."
openRegistration: "Registrazioni aperte"
openRegistrationWarning: "Lapertura della registrazione comporta dei rischi. Ti consigliamo di attivarla solo se hai predisposto il monitoraggio continuo del tuo server e puoi rispondere immediatamente se si verifica un problema."
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "Per prevenire SPAM, questa impostazione verrà disattivata automaticamente, se non si rileva alcuna attività di moderazione durante un certo periodo di tempo." thisSettingWillAutomaticallyOffWhenModeratorsInactive: "Per prevenire SPAM, questa impostazione verrà disattivata automaticamente, se non si rileva alcuna attività di moderazione durante un certo periodo di tempo."
_accountMigration: _accountMigration:
moveFrom: "Migra un altro profilo dentro a questo" moveFrom: "Migra un altro profilo dentro a questo"
@ -1921,10 +1933,10 @@ _serverDisconnectedBehavior:
quiet: "Visualizza avviso in modo discreto" quiet: "Visualizza avviso in modo discreto"
_channel: _channel:
create: "Nuovo canale" create: "Nuovo canale"
edit: "Gerisci canale" edit: "Modifica il canale"
setBanner: "Scegli intestazione" setBanner: "Scegli intestazione"
removeBanner: "Rimuovi intestazione" removeBanner: "Rimuovi intestazione"
featured: "Di tendenza" featured: "Popolari nel canale"
owned: "I miei canali" owned: "I miei canali"
following: "Following" following: "Following"
usersCount: "{n} partecipanti" usersCount: "{n} partecipanti"
@ -1949,7 +1961,7 @@ _instanceMute:
_theme: _theme:
explore: "Esplora temi" explore: "Esplora temi"
install: "Installa un tema" install: "Installa un tema"
manage: "Gestione temi" manage: "Gestione dei temi"
code: "Codice tema" code: "Codice tema"
description: "Descrizione" description: "Descrizione"
installed: "{name} è installato" installed: "{name} è installato"
@ -2096,12 +2108,12 @@ _permissions:
"read:messaging": "Visualizzare la chat" "read:messaging": "Visualizzare la chat"
"write:messaging": "Gestire la chat" "write:messaging": "Gestire la chat"
"read:mutes": "Vedi i profili silenziati" "read:mutes": "Vedi i profili silenziati"
"write:mutes": "Gestisci i profili silenziati" "write:mutes": "Gestione dei profili silenziati"
"write:notes": "Creare / Eliminare note" "write:notes": "Creare / Eliminare note"
"read:notifications": "Visualizzare notifiche" "read:notifications": "Visualizzare notifiche"
"write:notifications": "Gestire notifiche" "write:notifications": "Gestione delle notifiche"
"read:reactions": "Vedi reazioni" "read:reactions": "Vedi reazioni"
"write:reactions": "Gerisci reazioni" "write:reactions": "Gestione delle reazioni"
"write:votes": "Votare" "write:votes": "Votare"
"read:pages": "Visualizzare pagine" "read:pages": "Visualizzare pagine"
"write:pages": "Gestire pagine" "write:pages": "Gestire pagine"
@ -2110,7 +2122,7 @@ _permissions:
"read:user-groups": "Vedere i gruppi di utenti" "read:user-groups": "Vedere i gruppi di utenti"
"write:user-groups": "Gestire i gruppi di utenti" "write:user-groups": "Gestire i gruppi di utenti"
"read:channels": "Visualizza canali" "read:channels": "Visualizza canali"
"write:channels": "Gerisci canali" "write:channels": "Gestione dei canali"
"read:gallery": "Visualizza la galleria." "read:gallery": "Visualizza la galleria."
"write:gallery": "Gestione della galleria" "write:gallery": "Gestione della galleria"
"read:gallery-likes": "Visualizza i contenuti della galleria." "read:gallery-likes": "Visualizza i contenuti della galleria."
@ -2201,7 +2213,7 @@ _widgets:
notifications: "Notifiche" notifications: "Notifiche"
timeline: "Timeline" timeline: "Timeline"
calendar: "Calendario" calendar: "Calendario"
trends: "Di tendenza" trends: "Hashtag popolari"
clock: "Orologio" clock: "Orologio"
rss: "Lettura RSS" rss: "Lettura RSS"
rssTicker: "Nastro RSS" rssTicker: "Nastro RSS"
@ -2353,9 +2365,6 @@ _pages:
newPage: "Crea pagina" newPage: "Crea pagina"
editPage: "Modifica pagina" editPage: "Modifica pagina"
readPage: "Visualizzando fonte " readPage: "Visualizzando fonte "
created: "Pagina creata!"
updated: "Pagina aggiornata con successo!"
deleted: "Pagina eliminata"
pageSetting: "Impostazioni pagina" pageSetting: "Impostazioni pagina"
nameAlreadyExists: "Esiste già una pagina con lo stesso URL." nameAlreadyExists: "Esiste già una pagina con lo stesso URL."
invalidNameTitle: "L'URL di pagina definito non è valido" invalidNameTitle: "L'URL di pagina definito non è valido"
@ -2441,13 +2450,13 @@ _notification:
quote: "Cita" quote: "Cita"
reaction: "Reazioni" reaction: "Reazioni"
pollEnded: "Sondaggio chiuso." pollEnded: "Sondaggio chiuso."
receiveFollowRequest: "Richiesta di follow ricevuta" receiveFollowRequest: "Richieste di follow in arrivo"
followRequestAccepted: "Richiesta di follow accettata" followRequestAccepted: "Richieste di follow accettate"
roleAssigned: "Ruolo concesso" roleAssigned: "Ruolo concesso"
achievementEarned: "Risultato raggiunto" achievementEarned: "Risultato raggiunto"
exportCompleted: "Esportazione completata" exportCompleted: "Esportazione completata"
login: "Accedi" login: "Accessi"
test: "Prova la notifica" test: "Notifiche di test"
app: "Notifiche da applicazioni" app: "Notifiche da applicazioni"
_actions: _actions:
followBack: "Following ricambiato" followBack: "Following ricambiato"
@ -2717,6 +2726,66 @@ _contextMenu:
app: "Applicazione" app: "Applicazione"
appWithShift: "Applicazione Shift+Tasto" appWithShift: "Applicazione Shift+Tasto"
native: "Interfaccia utente del browser" native: "Interfaccia utente del browser"
_gridComponent:
_error:
requiredValue: "Campo obbligatorio"
columnTypeNotSupport: "Solo le colonne type:text permettono la convalida delle Espresioni Regolari"
patternNotMatch: "Il valore non coincide con {pattern}"
notUnique: "Il valore deve essere univoco"
_roleSelectDialog:
notSelected: "Niente selezioato"
_customEmojisManager:
_gridCommon:
copySelectionRows: "Copia le righe selezionate"
copySelectionRanges: "Copia l'intervallo selezionato"
deleteSelectionRows: "Elimina le righe selezionate"
deleteSelectionRanges: "Elimina le righe nell'intervallo selezionato"
searchSettings: "Impostazioni di ricerca"
searchSettingCaption: "Imposta condizioni di ricerca dettagliate."
searchLimit: "Risultati visualizzati"
sortOrder: "Ordine"
registrationLogs: "Storico della registrazione"
registrationLogsCaption: "Lo storico verrà visualizzato in base alla attività sulle emoji. Scompare quando si esegue un'operazione di aggiornamento/eliminazione o si modifica/ricarica la pagina."
alertEmojisRegisterFailedDescription: "Attenzione, è impossibile modificare la emoji. Si prega di controllare lo storico per ulteriori dettagli."
_logs:
showSuccessLogSwitch: "Mostra le azioni a buon fine"
failureLogNothing: "Non ci sono errori nello storico delle emoji"
logNothing: "Lo storico è vuoto."
_remote:
selectionRowDetail: "Dettagli della riga selezionata"
importSelectionRows: "Importa le righe selezionate"
importSelectionRangesRows: "Importa le righe nell'intervallo selezionato"
importEmojisButton: "Importa le emoji selezionate"
confirmImportEmojisTitle: "Importazione emoji"
confirmImportEmojisDescription: "Importazione di {count} emoji ricevute da remoto. Si prega di prestare molta attenzione al tipo di licenza delle emoji. Vuoi confermare?"
_local:
tabTitleList: "Elenco delle emoji registrate"
tabTitleRegister: "Registrazione emoji"
_list:
emojisNothing: "Non ci sono emoji registrate."
markAsDeleteTargetRows: "Selezionare le righe come eliminabili"
markAsDeleteTargetRanges: "Selezionare le righe nell'intervallo come eliminabili"
alertUpdateEmojisNothingDescription: "Non ci sono emoji aggiornate."
alertDeleteEmojisNothingDescription: "Non ci sono emoji da eliminare."
confirmMovePage: "Vuoi davvero spostare la pagina?"
confirmChangeView: "Vuoi davvero cambiare la vista?"
confirmUpdateEmojisDescription: "Aggiornamento di {count} emoji. Vuoi davvero continuare?"
confirmDeleteEmojisDescription: "Eliminazione delle {count} emoji selezionate. Vuoi davvero continuare?"
confirmResetDescription: "Verranno ripristinate tutte le modifiche apportate finora."
confirmMovePageDesciption: "Sono state modificate le emoji in questa pagina.\nUscendo senza salvare, tutte le modifiche verranno ignorate."
dialogSelectRoleTitle: "Cerca emoji per ruolo"
_register:
uploadSettingTitle: "Caricamento impostazioni"
uploadSettingDescription: "Questa schermata ti permette di scegliere il comportamento durante il caricamento delle emoji."
directoryToCategoryLabel: "Inseriscile in una cartella omonima alla categoria"
directoryToCategoryCaption: "Crea il campo categoria in base alla cartella."
emojiInputAreaCaption: "Seleziona l'emoji da registrare utilizzando uno dei metodi."
emojiInputAreaList1: "Trascina una immagine o una cartella in quest'area"
emojiInputAreaList2: "Clicca per scegliere file dal tuo dispositivo"
emojiInputAreaList3: "Clicca per selezionare dal Drive"
confirmRegisterEmojisDescription: "Registrazione delle emoji elencate come nuove emoji personalizzate. Vuoi davvero procedere? (Per evitare sovraccarichi, puoi registrare al massimo {count} emoji per volta)"
confirmClearEmojisDescription: "Annullare le modifiche e cancella le emoji nell'elenco. Confermi?"
confirmUploadEmojisDescription: "Caricamento sul Drive di {count} file locali. Vuoi davvero procedere?"
_embedCodeGen: _embedCodeGen:
title: "Personalizza il codice di incorporamento" title: "Personalizza il codice di incorporamento"
header: "Mostra la testata" header: "Mostra la testata"
@ -2737,3 +2806,37 @@ _selfXssPrevention:
description1: "Incollando qualcosa qui, malintenzionati potrebbero prendere il controllo del tuo profilo o rubare i tuoi dati personali." description1: "Incollando qualcosa qui, malintenzionati potrebbero prendere il controllo del tuo profilo o rubare i tuoi dati personali."
description2: "Se non sai esattamente cosa stai facendo, %c smetti subito e chiudi questa finestra." description2: "Se non sai esattamente cosa stai facendo, %c smetti subito e chiudi questa finestra."
description3: "Per favore, controlla questo collegamento per avere maggiori dettagli. {link}" description3: "Per favore, controlla questo collegamento per avere maggiori dettagli. {link}"
_followRequest:
recieved: "Ricezione richiesta di Follow"
sent: "Richiesta di Follow, inviata"
_remoteLookupErrors:
_federationNotAllowed:
title: "Server irraggiungibile"
description: "La comunicazione con questo server potrebbe essere disattivata. Hai bloccato il server? Oppure potrebbero averlo bloccato gli amministratori. Contattali per ulteriori informazioni."
_uriInvalid:
title: "URL non valido"
description: "Controlla che l'indirizzo sia valido e sia privo di caratteri non validi."
_requestFailed:
title: "Richiesta fallita"
description: "La comunicazione col server non è riuscita. Potrebbe essere inattivo. Assicurati anche che la URL sia valida."
_responseInvalid:
title: "Risposta non valida"
description: "La comunicazione col server è andata a buon fine, ma abbiamo ricevuto dati non validi."
_responseInvalidIdHostNotMatch:
description: "L'indirizzo immesso non coincide con la URL finale. Interrogando i server per un contenuto remoto, assicurarsi di utilizzare la URL finale e non quella di un server intermedio."
_noSuchObject:
title: "Non trovato"
description: "La risorsa richiesta non è stata trovata. Verificare nuovamente la URL."
_captcha:
verify: "Per favore, controlla la verifica CAPTCHA"
testSiteKeyMessage: "Puoi provare l'anteprima inserendo valori di test, sia per la chiave del sito che per la chiave segreta.\nSi prega di controllare la pagina qui sotto per i dettagli."
_error:
_requestFailed:
title: "Errore durante la richiesta del CAPTCHA"
text: "Riprova più tardi o controlla nuovamente le impostazioni."
_verificationFailed:
title: "Convalida CAPTCHA non riuscita"
text: "Si prega di verificare nuovamente se le impostazioni sono corrette."
_unknown:
title: "Errore CAPTCHA"
text: "Si è verificato un errore imprevisto."

View file

@ -5,6 +5,7 @@ introMisskey: "ようこそMisskeyは、オープンソースの分散型マ
poweredByMisskeyDescription: "{name}は、オープンソースのプラットフォーム<b>Misskey</b>のサーバーのひとつです。" poweredByMisskeyDescription: "{name}は、オープンソースのプラットフォーム<b>Misskey</b>のサーバーのひとつです。"
monthAndDay: "{month}月 {day}日" monthAndDay: "{month}月 {day}日"
search: "検索" search: "検索"
reset: "リセット"
notifications: "通知" notifications: "通知"
username: "ユーザー名" username: "ユーザー名"
password: "パスワード" password: "パスワード"
@ -48,6 +49,7 @@ pin: "ピン留め"
unpin: "ピン留め解除" unpin: "ピン留め解除"
copyContent: "内容をコピー" copyContent: "内容をコピー"
copyLink: "リンクをコピー" copyLink: "リンクをコピー"
copyRemoteLink: "リモートのリンクをコピー"
copyLinkRenote: "リノートのリンクをコピー" copyLinkRenote: "リノートのリンクをコピー"
delete: "削除" delete: "削除"
deleteAndEdit: "削除して編集" deleteAndEdit: "削除して編集"
@ -382,7 +384,6 @@ enableLocalTimeline: "ローカルタイムラインを有効にする"
enableGlobalTimeline: "グローバルタイムラインを有効にする" enableGlobalTimeline: "グローバルタイムラインを有効にする"
disablingTimelinesInfo: "これらのタイムラインを無効化しても、利便性のため管理者およびモデレーターは引き続き利用することができます。" disablingTimelinesInfo: "これらのタイムラインを無効化しても、利便性のため管理者およびモデレーターは引き続き利用することができます。"
registration: "登録" registration: "登録"
enableRegistration: "誰でも新規登録できるようにする"
invite: "招待" invite: "招待"
driveCapacityPerLocalAccount: "ローカルユーザーひとりあたりのドライブ容量" driveCapacityPerLocalAccount: "ローカルユーザーひとりあたりのドライブ容量"
driveCapacityPerRemoteAccount: "リモートユーザーひとりあたりのドライブ容量" driveCapacityPerRemoteAccount: "リモートユーザーひとりあたりのドライブ容量"
@ -587,6 +588,7 @@ masterVolume: "マスター音量"
notUseSound: "サウンドを出力しない" notUseSound: "サウンドを出力しない"
useSoundOnlyWhenActive: "Misskeyがアクティブな時のみサウンドを出力する" useSoundOnlyWhenActive: "Misskeyがアクティブな時のみサウンドを出力する"
details: "詳細" details: "詳細"
renoteDetails: "リノートの詳細"
chooseEmoji: "絵文字を選択" chooseEmoji: "絵文字を選択"
unableToProcess: "操作を完了できません" unableToProcess: "操作を完了できません"
recentUsed: "最近使用" recentUsed: "最近使用"
@ -684,11 +686,15 @@ smtpSecure: "SMTP 接続に暗黙的なSSL/TLSを使用する"
smtpSecureInfo: "STARTTLS使用時はオフにします。" smtpSecureInfo: "STARTTLS使用時はオフにします。"
testEmail: "配信テスト" testEmail: "配信テスト"
wordMute: "ワードミュート" wordMute: "ワードミュート"
wordMuteDescription: "指定した語句を含むノートを最小化します。最小化されたノートをクリックすることで表示することができます。"
hardWordMute: "ハードワードミュート" hardWordMute: "ハードワードミュート"
showMutedWord: "ミュートされたワードを表示"
hardWordMuteDescription: "指定した語句を含むノートを隠します。ワードミュートとは異なり、ノートは完全に表示されなくなります。"
regexpError: "正規表現エラー" regexpError: "正規表現エラー"
regexpErrorDescription: "{tab}ワードミュートの{line}行目の正規表現にエラーが発生しました:" regexpErrorDescription: "{tab}ワードミュートの{line}行目の正規表現にエラーが発生しました:"
instanceMute: "サーバーミュート" instanceMute: "サーバーミュート"
userSaysSomething: "{name}が何かを言いました" userSaysSomething: "{name}が何かを言いました"
userSaysSomethingAbout: "{name}が「{word}」について何かを言いました"
makeActive: "アクティブにする" makeActive: "アクティブにする"
display: "表示" display: "表示"
copy: "コピー" copy: "コピー"
@ -1038,7 +1044,7 @@ youCannotCreateAnymore: "これ以上作成することはできません。"
cannotPerformTemporary: "一時的に利用できません" cannotPerformTemporary: "一時的に利用できません"
cannotPerformTemporaryDescription: "操作回数が制限を超過するため一時的に利用できません。しばらく時間を置いてから再度お試しください。" cannotPerformTemporaryDescription: "操作回数が制限を超過するため一時的に利用できません。しばらく時間を置いてから再度お試しください。"
invalidParamError: "パラメータエラー" invalidParamError: "パラメータエラー"
invalidParamErrorDescription: "リクエストパラメータに問題があります。通常これはバグですが、入力した文字数が多すぎる等の可能性もあります。" invalidParamErrorDescription: "リクエストパラメータに問題があります。通常これはバグですが、入力した文字数が多すぎる・許可されていない文字を入力している等の可能性もあります。"
permissionDeniedError: "操作が拒否されました" permissionDeniedError: "操作が拒否されました"
permissionDeniedErrorDescription: "このアカウントにはこの操作を行うための権限がありません。" permissionDeniedErrorDescription: "このアカウントにはこの操作を行うための権限がありません。"
preset: "プリセット" preset: "プリセット"
@ -1300,6 +1306,9 @@ thisContentsAreMarkedAsSigninRequiredByAuthor: "投稿者により、表示に
lockdown: "ロックダウン" lockdown: "ロックダウン"
pleaseSelectAccount: "アカウントを選択してください" pleaseSelectAccount: "アカウントを選択してください"
availableRoles: "利用可能なロール" availableRoles: "利用可能なロール"
acknowledgeNotesAndEnable: "注意事項を理解した上でオンにします。"
federationSpecified: "このサーバーはホワイトリスト連合で運用されています。管理者が指定したサーバー以外とやり取りすることはできません。"
federationDisabled: "このサーバーは連合が無効化されています。他のサーバーのユーザーとやり取りすることはできません。"
_accountSettings: _accountSettings:
requireSigninToViewContents: "コンテンツの表示にログインを必須にする" requireSigninToViewContents: "コンテンツの表示にログインを必須にする"
@ -1466,6 +1475,8 @@ _serverSettings:
reactionsBufferingDescription: "有効にすると、リアクション作成時のパフォーマンスが大幅に向上し、データベースへの負荷を軽減することが可能です。ただし、Redisのメモリ使用量は増加します。" reactionsBufferingDescription: "有効にすると、リアクション作成時のパフォーマンスが大幅に向上し、データベースへの負荷を軽減することが可能です。ただし、Redisのメモリ使用量は増加します。"
inquiryUrl: "問い合わせ先URL" inquiryUrl: "問い合わせ先URL"
inquiryUrlDescription: "サーバー運営者へのお問い合わせフォームのURLや、運営者の連絡先等が記載されたWebページのURLを指定します。" inquiryUrlDescription: "サーバー運営者へのお問い合わせフォームのURLや、運営者の連絡先等が記載されたWebページのURLを指定します。"
openRegistration: "アカウントの作成をオープンにする"
openRegistrationWarning: "登録を開放することはリスクが伴います。サーバーを常に監視し、トラブルが発生した際にすぐに対応できる体制がある場合のみオンにすることを推奨します。"
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "一定期間モデレーターのアクティビティが検出されなかった場合、スパム防止のためこの設定は自動でオフになります。" thisSettingWillAutomaticallyOffWhenModeratorsInactive: "一定期間モデレーターのアクティビティが検出されなかった場合、スパム防止のためこの設定は自動でオフになります。"
_accountMigration: _accountMigration:
@ -2163,6 +2174,7 @@ _permissions:
"read:flash-likes": "Playのいいねを見る" "read:flash-likes": "Playのいいねを見る"
"write:flash-likes": "Playのいいねを操作する" "write:flash-likes": "Playのいいねを操作する"
"read:admin:abuse-user-reports": "ユーザーからの通報を見る" "read:admin:abuse-user-reports": "ユーザーからの通報を見る"
"write:admin:create-account": "ユーザーアカウントを作成する"
"write:admin:delete-account": "ユーザーアカウントを削除する" "write:admin:delete-account": "ユーザーアカウントを削除する"
"write:admin:delete-all-files-of-a-user": "ユーザーのすべてのファイルを削除する" "write:admin:delete-all-files-of-a-user": "ユーザーのすべてのファイルを削除する"
"read:admin:index-stats": "データベースインデックスに関する情報を見る" "read:admin:index-stats": "データベースインデックスに関する情報を見る"
@ -2411,9 +2423,6 @@ _pages:
newPage: "ページの作成" newPage: "ページの作成"
editPage: "ページの編集" editPage: "ページの編集"
readPage: "ソースを表示中" readPage: "ソースを表示中"
created: "ページを作成しました"
updated: "ページを更新しました"
deleted: "ページを削除しました"
pageSetting: "ページ設定" pageSetting: "ページ設定"
nameAlreadyExists: "指定されたページURLは既に存在しています" nameAlreadyExists: "指定されたページURLは既に存在しています"
invalidNameTitle: "不正なページURLです" invalidNameTitle: "不正なページURLです"
@ -2798,6 +2807,69 @@ _contextMenu:
appWithShift: "Shiftキーでアプリケーション" appWithShift: "Shiftキーでアプリケーション"
native: "ブラウザのUI" native: "ブラウザのUI"
_gridComponent:
_error:
requiredValue: "この値は必須項目です"
columnTypeNotSupport: "正規表現によるバリデーションはtype:textのカラムのみサポートします。"
patternNotMatch: "この値は{pattern}のパターンに一致しません"
notUnique: "この値は一意である必要があります"
_roleSelectDialog:
notSelected: "選択されていません"
_customEmojisManager:
_gridCommon:
copySelectionRows: "選択行をコピー"
copySelectionRanges: "選択範囲をコピー"
deleteSelectionRows: "選択行を削除"
deleteSelectionRanges: "選択範囲の値をクリア"
searchSettings: "検索設定"
searchSettingCaption: "検索条件を詳細に設定します。"
searchLimit: "表示件数"
sortOrder: "並び順"
registrationLogs: "登録ログ"
registrationLogsCaption: "絵文字更新・削除時のログが表示されます。更新・削除操作を行ったり、ページを遷移・リロードすると消えます。"
alertEmojisRegisterFailedDescription: "絵文字の更新・削除に失敗しました。詳細は登録ログをご確認ください。"
_logs:
showSuccessLogSwitch: "成功ログを表示"
failureLogNothing: "失敗ログはありません。"
logNothing: "ログはありません。"
_remote:
selectionRowDetail: "選択行の詳細"
importSelectionRows: "選択行をインポート"
importSelectionRangesRows: "選択範囲の行をインポート"
importEmojisButton: "チェックされた絵文字をインポート"
confirmImportEmojisTitle: "絵文字のインポート"
confirmImportEmojisDescription: "リモートから受信した{count}個の絵文字のインポートを行います。絵文字のライセンスに十分な注意を払ってください。実行しますか?"
_local:
tabTitleList: "登録済み絵文字一覧"
tabTitleRegister: "絵文字の登録"
_list:
emojisNothing: "登録された絵文字はありません。"
markAsDeleteTargetRows: "選択行を削除対象にする"
markAsDeleteTargetRanges: "選択範囲の行を削除対象にする"
alertUpdateEmojisNothingDescription: "変更された絵文字はありません。"
alertDeleteEmojisNothingDescription: "削除対象の絵文字はありません。"
confirmMovePage: "ページを移動しますか?"
confirmChangeView: "表示を変更しますか?"
confirmUpdateEmojisDescription: "{count}個の絵文字を更新します。実行しますか?"
confirmDeleteEmojisDescription: "チェックがつけられた{count}個の絵文字を削除します。実行しますか?"
confirmResetDescription: "今までに加えた変更がすべてリセットされます。"
confirmMovePageDesciption: "このページの絵文字に変更が加えられています。\n保存せずにこのままページを移動すると、このページで加えた変更はすべて破棄されます。"
dialogSelectRoleTitle: "絵文字に設定されたロールで検索"
_register:
uploadSettingTitle: "アップロード設定"
uploadSettingDescription: "この画面で絵文字アップロードを行う際の動作を設定できます。"
directoryToCategoryLabel: "ディレクトリ名を\"category\"に入力する"
directoryToCategoryCaption: "ディレクトリをドラッグ・ドロップした時に、ディレクトリ名を\"category\"に入力します。"
emojiInputAreaCaption: "いずれかの方法で登録する絵文字を選択してください。"
emojiInputAreaList1: "この枠に画像ファイルまたはディレクトリをドラッグ&ドロップ"
emojiInputAreaList2: "このリンクをクリックしてPCから選択する"
emojiInputAreaList3: "このリンクをクリックしてドライブから選択する"
confirmRegisterEmojisDescription: "リストに表示されている絵文字を新たなカスタム絵文字として登録します。よろしいですか?(負荷を避けるため、一度の操作で登録可能な絵文字は{count}件までです)"
confirmClearEmojisDescription: "編集内容を破棄し、リストに表示されている絵文字をクリアします。よろしいですか?"
confirmUploadEmojisDescription: "ドラッグ&ドロップされた{count}個のファイルをドライブにアップロードします。実行しますか?"
_embedCodeGen: _embedCodeGen:
title: "埋め込みコードをカスタマイズ" title: "埋め込みコードをカスタマイズ"
header: "ヘッダーを表示" header: "ヘッダーを表示"
@ -2819,3 +2891,40 @@ _selfXssPrevention:
description1: "ここに何かを貼り付けると、悪意のあるユーザーにアカウントを乗っ取られたり、個人情報を盗まれたりする可能性があります。" description1: "ここに何かを貼り付けると、悪意のあるユーザーにアカウントを乗っ取られたり、個人情報を盗まれたりする可能性があります。"
description2: "貼り付けようとしているものが何なのかを正確に理解していない場合は、%c今すぐ作業を中止してこのウィンドウを閉じてください。" description2: "貼り付けようとしているものが何なのかを正確に理解していない場合は、%c今すぐ作業を中止してこのウィンドウを閉じてください。"
description3: "詳しくはこちらをご確認ください。 {link}" description3: "詳しくはこちらをご確認ください。 {link}"
_followRequest:
recieved: "受け取った申請"
sent: "送った申請"
_remoteLookupErrors:
_federationNotAllowed:
title: "このサーバーとは通信できません"
description: "このサーバーとの通信が無効化されているか、このサーバーをブロックしている・ブロックされている可能性があります。\nサーバー管理者にお問い合わせください。"
_uriInvalid:
title: "URIが不正です"
description: "入力されたURIに問題があります。URIに使用できない文字を入力していないか確認してください。"
_requestFailed:
title: "リクエストに失敗しました"
description: "このサーバーとの通信に失敗しました。相手サーバーがダウンしている可能性があります。また、不正なURIや存在しないURIを入力していないか確認してください。"
_responseInvalid:
title: "レスポンスが不正です"
description: "このサーバーと通信することはできましたが、得られたデータが不正なものでした。"
_responseInvalidIdHostNotMatch:
description: "入力されたURIのドメインと最終的に得られたURIのドメインとが異なります。第三者のサーバーを介してリモートのコンテンツを照会している場合は、発信元のサーバーで取得できるURIを使用して照会し直してください。"
_noSuchObject:
title: "見つかりません"
description: "要求されたリソースは見つかりませんでした。URIをもう一度お確かめください。"
_captcha:
verify: "CAPTCHAを通過してください"
testSiteKeyMessage: "サイトキーとシークレットキーにテスト用の値を入力することでプレビューを確認できます。\n詳細は下記ページをご確認ください。"
_error:
_requestFailed:
title: "CAPTCHAのリクエストに失敗しました"
text: "しばらく後に実行するか、設定をもう一度ご確認ください。"
_verificationFailed:
title: "CAPTCHAの検証に失敗しました"
text: "設定が正しいかどうかもう一度確認ください。"
_unknown:
title: "CAPTCHAエラー"
text: "想定外のエラーが発生しました。"

View file

@ -15,7 +15,7 @@ forgotPassword: "パスワード忘れたん?"
fetchingAsApObject: "今ちと連合に照会しとるで" fetchingAsApObject: "今ちと連合に照会しとるで"
ok: "ええで" ok: "ええで"
gotIt: "ほい" gotIt: "ほい"
cancel: "やめとく" cancel: "やめ"
noThankYou: "やめとく" noThankYou: "やめとく"
enterUsername: "ユーザー名を入れてや" enterUsername: "ユーザー名を入れてや"
renotedBy: "{user}がリノートしたで" renotedBy: "{user}がリノートしたで"
@ -26,7 +26,7 @@ settings: "設定"
notificationSettings: "通知の設定" notificationSettings: "通知の設定"
basicSettings: "基本設定" basicSettings: "基本設定"
otherSettings: "ほかの設定" otherSettings: "ほかの設定"
openInWindow: "ウィンドウで開く" openInWindow: "ウィンドウで開く"
profile: "プロフィール" profile: "プロフィール"
timeline: "タイムライン" timeline: "タイムライン"
noAccountDescription: "自己紹介食ってもた" noAccountDescription: "自己紹介食ってもた"
@ -45,7 +45,7 @@ favorited: "お気に入りに入れたで。"
alreadyFavorited: "もうお気に入りに入れとるがな。" alreadyFavorited: "もうお気に入りに入れとるがな。"
cantFavorite: "アカン、お気に入りに入れれんかったわ。" cantFavorite: "アカン、お気に入りに入れれんかったわ。"
pin: "ピン留めしとく" pin: "ピン留めしとく"
unpin: "やっぱピン留めせん" unpin: "ピン留めやめる"
copyContent: "内容をコピー" copyContent: "内容をコピー"
copyLink: "リンクをコピー" copyLink: "リンクをコピー"
copyLinkRenote: "リノートのリンクをコピーするで?" copyLinkRenote: "リノートのリンクをコピーするで?"
@ -63,7 +63,7 @@ copyFileId: "ファイルIDをコピー"
copyFolderId: "フォルダーIDをコピー" copyFolderId: "フォルダーIDをコピー"
copyProfileUrl: "プロフィールURLをコピー" copyProfileUrl: "プロフィールURLをコピー"
searchUser: "ユーザーを探す" searchUser: "ユーザーを探す"
searchThisUsersNotes: "ユーザーのノートを検索" searchThisUsersNotes: "ユーザーのノートを探す"
reply: "返事" reply: "返事"
loadMore: "まだまだあるで!" loadMore: "まだまだあるで!"
showMore: "まだまだあるで!" showMore: "まだまだあるで!"
@ -138,8 +138,8 @@ reactionSettingDescription2: "ドラッグで並び替え、クリックで削
rememberNoteVisibility: "公開範囲覚えといて" rememberNoteVisibility: "公開範囲覚えといて"
attachCancel: "のっけるのやめる" attachCancel: "のっけるのやめる"
deleteFile: "ファイルをほかす" deleteFile: "ファイルをほかす"
markAsSensitive: "ちょっとこれはアカン" markAsSensitive: "ちょっと見せられへんわ"
unmarkAsSensitive: "そこまでアカンことないやろ" unmarkAsSensitive: "別にええんじゃね?"
enterFileName: "ファイル名を入れてや" enterFileName: "ファイル名を入れてや"
mute: "ミュート" mute: "ミュート"
unmute: "ミュートやめたる" unmute: "ミュートやめたる"
@ -152,13 +152,13 @@ unsuspend: "溶かす"
blockConfirm: "ブロックしてもええんか?" blockConfirm: "ブロックしてもええんか?"
unblockConfirm: "ブロックやめたるってほんまか?" unblockConfirm: "ブロックやめたるってほんまか?"
suspendConfirm: "凍結してしもうてええか?" suspendConfirm: "凍結してしもうてええか?"
unsuspendConfirm: "解凍するけどええか?" unsuspendConfirm: "溶かしたるけどええか?"
selectList: "リストを選ぶ" selectList: "リストを選ぶ"
editList: "リストいじる" editList: "リストいじる"
selectChannel: "チャンネルを選ぶ" selectChannel: "チャンネルを選ぶ"
selectAntenna: "アンテナを選ぶ" selectAntenna: "アンテナを選ぶ"
editAntenna: "アンテナいじる" editAntenna: "アンテナいじる"
createAntenna: "アンテナを作" createAntenna: "アンテナを作"
selectWidget: "ウィジェットを選ぶ" selectWidget: "ウィジェットを選ぶ"
editWidgets: "ウィジェットをいじる" editWidgets: "ウィジェットをいじる"
editWidgetsExit: "いじるのをやめる" editWidgetsExit: "いじるのをやめる"
@ -172,12 +172,12 @@ settingGuide: "ええ感じの設定"
cacheRemoteFiles: "リモートのファイルをキャッシュする" cacheRemoteFiles: "リモートのファイルをキャッシュする"
cacheRemoteFilesDescription: "この設定を入れとったら、リモートのファイルを端から端までこのサーバーのキャッシュん中突っ込むようになるで。画像映し出すんがめっちゃ速うなるけど、サーバーの容量をやたらと食うようになるで。リモートの人がどんだけ長くキャッシュを持っとくかはドライブ容量の制限で決めとくで。制限を超えたら古いのから順々に消してって、かわりにリンクになるで。この設定を切ったら、リモートのファイルは最初っからリンクとして扱うことにするけど、画像のサムネ作るのとかみんなのプライバシー守るために、default.ymlのproxyRemoteFilesをtrueにしといたほうがええよ。" cacheRemoteFilesDescription: "この設定を入れとったら、リモートのファイルを端から端までこのサーバーのキャッシュん中突っ込むようになるで。画像映し出すんがめっちゃ速うなるけど、サーバーの容量をやたらと食うようになるで。リモートの人がどんだけ長くキャッシュを持っとくかはドライブ容量の制限で決めとくで。制限を超えたら古いのから順々に消してって、かわりにリンクになるで。この設定を切ったら、リモートのファイルは最初っからリンクとして扱うことにするけど、画像のサムネ作るのとかみんなのプライバシー守るために、default.ymlのproxyRemoteFilesをtrueにしといたほうがええよ。"
youCanCleanRemoteFilesCache: "ファイル管理にある🗑️ボタンでキャッシュ全部ほかすで。" youCanCleanRemoteFilesCache: "ファイル管理にある🗑️ボタンでキャッシュ全部ほかすで。"
cacheRemoteSensitiveFiles: "リモートのきわどいファイルをキャッシュに突っ込む" cacheRemoteSensitiveFiles: "リモートのきわどいファイルをキャッシュする"
cacheRemoteSensitiveFilesDescription: "この設定を切ると、リモートのきわどいファイルはキャッシュせず直でリンクするようになるで。" cacheRemoteSensitiveFilesDescription: "この設定を切ると、リモートのきわどいファイルはキャッシュせず直でリンクするようになるで。"
flagAsBot: "Botにするで" flagAsBot: "Botにするで"
flagAsBotDescription: "もしこのアカウントをプログラム使うて運用するんやったら、このフラグをオンにしてや。オンにすれば、反応がバーッて連鎖せんように開発者が使うたり、Misskeyのシステム上での扱いがBotに合ったもんになるからな。" flagAsBotDescription: "もしこのアカウントをプログラム使うて運用するんやったら、このフラグをオンにしてや。オンにすれば、反応がバーッて連鎖せんように開発者が使うたり、Misskeyのシステム上での扱いがBotに合ったもんになるからな。"
flagAsCat: "猫や。かわええな。" flagAsCat: "猫や。かわええな。"
flagAsCatDescription: "ネコになりたいんならこれつけとき。" flagAsCatDescription: "になりたいんならこれつけとき。"
flagShowTimelineReplies: "タイムラインにノートへの返信を表示するで" flagShowTimelineReplies: "タイムラインにノートへの返信を表示するで"
flagShowTimelineRepliesDescription: "オンにしたら、タイムラインにユーザーのノートの他にもそのユーザーの他のノートへの返信を表示するで。" flagShowTimelineRepliesDescription: "オンにしたら、タイムラインにユーザーのノートの他にもそのユーザーの他のノートへの返信を表示するで。"
autoAcceptFollowed: "フォローしとるユーザーからのフォローリクエストを勝手に許可しとく" autoAcceptFollowed: "フォローしとるユーザーからのフォローリクエストを勝手に許可しとく"
@ -186,9 +186,9 @@ reloadAccountsList: "アカウントリストの情報を更新"
loginFailed: "ログインに失敗してもうた…" loginFailed: "ログインに失敗してもうた…"
showOnRemote: "リモートで見る" showOnRemote: "リモートで見る"
continueOnRemote: "リモートで続行" continueOnRemote: "リモートで続行"
chooseServerOnMisskeyHub: "Misskey Hubからサーバーを選" chooseServerOnMisskeyHub: "Misskey Hubからサーバーを選"
specifyServerHost: "サーバーのドメインを直接指定" specifyServerHost: "サーバーのドメインを直接指定"
inputHostName: "ドメインを入力せえや" inputHostName: "ドメインを入力してや"
general: "全般" general: "全般"
wallpaper: "壁紙" wallpaper: "壁紙"
setWallpaper: "壁紙を設定" setWallpaper: "壁紙を設定"
@ -382,7 +382,6 @@ enableLocalTimeline: "ローカルタイムラインを使えるようにする
enableGlobalTimeline: "グローバルタイムラインを使えるようにするわ" enableGlobalTimeline: "グローバルタイムラインを使えるようにするわ"
disablingTimelinesInfo: "ここらへんのタイムラインを使えんようにしてしもても、管理者とモデレーターは使えるままになってるで、そうやなかったら不便やからな。" disablingTimelinesInfo: "ここらへんのタイムラインを使えんようにしてしもても、管理者とモデレーターは使えるままになってるで、そうやなかったら不便やからな。"
registration: "登録" registration: "登録"
enableRegistration: "一見さんでも誰でもいらっしゃ~い"
invite: "来てや" invite: "来てや"
driveCapacityPerLocalAccount: "ローカルユーザーはんひとりあたりのドライブ容量" driveCapacityPerLocalAccount: "ローカルユーザーはんひとりあたりのドライブ容量"
driveCapacityPerRemoteAccount: "リモートユーザーはんひとりあたりのドライブ容量" driveCapacityPerRemoteAccount: "リモートユーザーはんひとりあたりのドライブ容量"
@ -587,6 +586,7 @@ masterVolume: "全体のやかましさ"
notUseSound: "音出さへん" notUseSound: "音出さへん"
useSoundOnlyWhenActive: "Misskeyがアクティブなときだけ音出す" useSoundOnlyWhenActive: "Misskeyがアクティブなときだけ音出す"
details: "もっと" details: "もっと"
renoteDetails: "リノートの詳細"
chooseEmoji: "絵文字を選ぶ" chooseEmoji: "絵文字を選ぶ"
unableToProcess: "なんか奥の方で詰まってもうた" unableToProcess: "なんか奥の方で詰まってもうた"
recentUsed: "最近使ったやつ" recentUsed: "最近使ったやつ"
@ -947,6 +947,9 @@ oneHour: "1時間"
oneDay: "1日" oneDay: "1日"
oneWeek: "1週間" oneWeek: "1週間"
oneMonth: "1ヶ月" oneMonth: "1ヶ月"
threeMonths: "3ヶ月"
oneYear: "1年"
threeDays: "3日"
reflectMayTakeTime: "反映されるまで時間がかかることがあるで" reflectMayTakeTime: "反映されるまで時間がかかることがあるで"
failedToFetchAccountInformation: "アカウントの取得に失敗したみたいや…" failedToFetchAccountInformation: "アカウントの取得に失敗したみたいや…"
rateLimitExceeded: "レート制限が超えたみたいやで" rateLimitExceeded: "レート制限が超えたみたいやで"
@ -1293,6 +1296,23 @@ prohibitedWordsForNameOfUser: "禁止ワード(ユーザー名)"
prohibitedWordsForNameOfUserDescription: "このリストの中にある文字列がユーザー名に入っとったら、その名前に変更できひんようになるで。モデレーター権限があるユーザーは除外や。" prohibitedWordsForNameOfUserDescription: "このリストの中にある文字列がユーザー名に入っとったら、その名前に変更できひんようになるで。モデレーター権限があるユーザーは除外や。"
yourNameContainsProhibitedWords: "その名前は禁止した文字列が含まれとるで" yourNameContainsProhibitedWords: "その名前は禁止した文字列が含まれとるで"
yourNameContainsProhibitedWordsDescription: "その名前は禁止した文字列が含まれとるわ。どうしてもって言うなら、サーバー管理者に言うしかないで。" yourNameContainsProhibitedWordsDescription: "その名前は禁止した文字列が含まれとるわ。どうしてもって言うなら、サーバー管理者に言うしかないで。"
thisContentsAreMarkedAsSigninRequiredByAuthor: "投稿者が、表示にログインが要るって設定してるで"
lockdown: "ロックダウン"
pleaseSelectAccount: "アカウント選んでや"
availableRoles: "使えるロール"
acknowledgeNotesAndEnable: "注意事項をわかった上でオンにする。"
_accountSettings:
requireSigninToViewContents: "ログインしてもらってからコンテンツ見てもらう"
requireSigninToViewContentsDescription1: "あなたが作成した全部のノートとかのコンテンツを見れるようにするのにログインがいるようにするで。クローラーにいろいろ収集されるんを防げるかもしれん。"
requireSigninToViewContentsDescription2: "URLプレビュー(OGP)、Webページへの埋め込み、ートの引用に対応してないサーバーからの表示ができんくなるで。"
requireSigninToViewContentsDescription3: "リモートサーバーに連合されたコンテンツは、これらの制限が適用されんかもしれんで。"
makeNotesFollowersOnlyBefore: "昔のノートをフォロワーだけに見てもらう"
makeNotesFollowersOnlyBeforeDescription: "この機能が有効になってる間は、設定された日時より前、それか設定された時間が経ったノートがフォロワーのみ見れるようになるで。無効に戻すと、ノートの公開状態も戻るで。"
makeNotesHiddenBefore: "昔のノートを見れんようにする"
makeNotesHiddenBeforeDescription: "この機能が有効になってる間は、設定された日時より前、それか設定された時間が経ったノートがフォロワーのみ見れるようになるで。無効に戻すと、ノートの公開状態も戻るで。"
mayNotEffectForFederatedNotes: "リモートサーバーに連合されたノートには効果が及ばんかもしれん。"
notesHavePassedSpecifiedPeriod: "決めた時間が経ったノート"
notesOlderThanSpecifiedDateAndTime: "決めた日時より前のノート"
_abuseUserReport: _abuseUserReport:
forward: "転送" forward: "転送"
forwardDescription: "匿名のシステムアカウントってことにして、リモートサーバーに通報を転送するで。" forwardDescription: "匿名のシステムアカウントってことにして、リモートサーバーに通報を転送するで。"
@ -1437,6 +1457,8 @@ _serverSettings:
reactionsBufferingDescription: "有効にしたら、リアクション作るときのパフォーマンスがすっごい上がって、データベースへの負荷が減るで。代わりに、Redisのメモリ使用は増えるで。" reactionsBufferingDescription: "有効にしたら、リアクション作るときのパフォーマンスがすっごい上がって、データベースへの負荷が減るで。代わりに、Redisのメモリ使用は増えるで。"
inquiryUrl: "問い合わせ先URL" inquiryUrl: "問い合わせ先URL"
inquiryUrlDescription: "サーバー運営者へのお問い合わせフォームのURLや、運営者の連絡先等が記載されたWebページのURLを指定するで。" inquiryUrlDescription: "サーバー運営者へのお問い合わせフォームのURLや、運営者の連絡先等が記載されたWebページのURLを指定するで。"
openRegistration: "アカウントの作成をオープンにする"
openRegistrationWarning: "登録を解放するのはリスクが伴うで。サーバーをいっつも監視して、なんか起きたらすぐに対応できるんやったら、オンにしてもええと思う。"
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "一定期間モデレーターがおらんかったら、スパムを防ぐためにこの設定は勝手に切られるで。" thisSettingWillAutomaticallyOffWhenModeratorsInactive: "一定期間モデレーターがおらんかったら、スパムを防ぐためにこの設定は勝手に切られるで。"
_accountMigration: _accountMigration:
moveFrom: "別のアカウントからこのアカウントに引っ越す" moveFrom: "別のアカウントからこのアカウントに引っ越す"
@ -2157,8 +2179,11 @@ _auth:
permissionAsk: "このアプリは次の権限を要求しとるで" permissionAsk: "このアプリは次の権限を要求しとるで"
pleaseGoBack: "アプリケーションに戻ってええよ" pleaseGoBack: "アプリケーションに戻ってええよ"
callback: "アプリケーションに戻っとるで" callback: "アプリケーションに戻っとるで"
accepted: "アクセスを許可したで"
denied: "アクセスを拒否ったで" denied: "アクセスを拒否ったで"
scopeUser: "以下のユーザーとしていじってるで"
pleaseLogin: "アプリにアクセスさせるんやったら、ログインしてや。" pleaseLogin: "アプリにアクセスさせるんやったら、ログインしてや。"
byClickingYouWillBeRedirectedToThisUrl: "アクセスを許したら、自動で下のURLに遷移するで"
_antennaSources: _antennaSources:
all: "みんなのノート" all: "みんなのノート"
homeTimeline: "フォローしとるユーザーのノート" homeTimeline: "フォローしとるユーザーのノート"
@ -2332,9 +2357,6 @@ _pages:
newPage: "ページを作る" newPage: "ページを作る"
editPage: "ページの編集" editPage: "ページの編集"
readPage: "ソースを表示中" readPage: "ソースを表示中"
created: "ページを作成したで"
updated: "ページを更新したで"
deleted: "ページを削除したで"
pageSetting: "ページ設定" pageSetting: "ページ設定"
nameAlreadyExists: "指定されたページURLはもうあるみたいや" nameAlreadyExists: "指定されたページURLはもうあるみたいや"
invalidNameTitle: "正しくないページURLみたいやで" invalidNameTitle: "正しくないページURLみたいやで"
@ -2710,3 +2732,30 @@ _embedCodeGen:
generateCode: "埋め込みコード作る" generateCode: "埋め込みコード作る"
codeGenerated: "コード作ったで" codeGenerated: "コード作ったで"
codeGeneratedDescription: "作ったコードはウェブサイトに貼っつけて使ってや。" codeGeneratedDescription: "作ったコードはウェブサイトに貼っつけて使ってや。"
_selfXssPrevention:
warning: "警告"
title: "「この画面になんか貼り付けろ」は全部詐欺やで。"
description1: "ここになんかはつっつけると、悪いユーザーにアカウント乗っ取られたり、個人情報盗まれたりするかもやで"
description2: "はっつけようとしてるものがなんなんかわからんのやったら、%c今すぐ作業やめてウィンドウを閉じて。"
description3: "詳しくはこれを見て。{link}"
_followRequest:
recieved: "もらった申請"
sent: "送った申請"
_remoteLookupErrors:
_federationNotAllowed:
title: "このサーバーと通信できん"
description: "このサーバーとの通信は無効化されてるか、このサーバーをブロックしてるんか、ブロックされてるかもしれん。\nサーバー管理者に問い合わせてや。"
_uriInvalid:
title: "URIがおかしいで"
description: "入力されたURIに問題があるで。URIに使えん文字を入れてないから確かめて。"
_requestFailed:
title: "リクエスト失敗してもうたで"
description: "このサーバーとの通信に失敗してもうたわ。相手サーバーがダウンしてるかもしれん。あと、おかしいURIとか、ありえんURIを入れてないか確かめて。"
_responseInvalid:
title: "レスポンスがおかしいで"
description: "このサーバーと通信することはできたけど、もらったデータがおかしかったで。"
_responseInvalidIdHostNotMatch:
description: "入力されたURIのドメインと最終的に得られたURIのドメインとが違うで。第三者のサーバーを介してリモートのコンテンツを照会してるんやったら、発信元のサーバーで取得できるURIを使って照会し直して。"
_noSuchObject:
title: "見つからへんね"
description: "求められたリソースが見つからんかったで。URIをもっかい確かめてや。"

View file

@ -356,7 +356,6 @@ enableLocalTimeline: "로컬 타임라인 키기"
enableGlobalTimeline: "글로벌 타임라인 키기" enableGlobalTimeline: "글로벌 타임라인 키기"
disablingTimelinesInfo: "요 타임라인얼 꺼도 간리자하고 중재자넌 고대로 설 수 잇십니다." disablingTimelinesInfo: "요 타임라인얼 꺼도 간리자하고 중재자넌 고대로 설 수 잇십니다."
registration: "맨걸기" registration: "맨걸기"
enableRegistration: "누라도 새로 맨걸 수 잇거로 하기"
invite: "초대하기" invite: "초대하기"
driveCapacityPerLocalAccount: "로컬 사용자 하나마중 드라이브 커기" driveCapacityPerLocalAccount: "로컬 사용자 하나마중 드라이브 커기"
driveCapacityPerRemoteAccount: "웬겍 사용자 하나마중 드라이브 커기" driveCapacityPerRemoteAccount: "웬겍 사용자 하나마중 드라이브 커기"
@ -841,3 +840,6 @@ _reversi:
black: "꺼멍" black: "꺼멍"
white: "허영" white: "허영"
total: "합게" total: "합게"
_remoteLookupErrors:
_noSuchObject:
title: "몬 찾앗십니다"

View file

@ -5,6 +5,7 @@ introMisskey: "환영합니다! Misskey는 오픈 소스 분산형 마이크로
poweredByMisskeyDescription: "{name} 서버는 오픈소스 플랫폼 <b>Misskey</b>의 서버 가운데 하나입니다." poweredByMisskeyDescription: "{name} 서버는 오픈소스 플랫폼 <b>Misskey</b>의 서버 가운데 하나입니다."
monthAndDay: "{month}월 {day}일" monthAndDay: "{month}월 {day}일"
search: "검색" search: "검색"
reset: "초기화"
notifications: "알림" notifications: "알림"
username: "유저명" username: "유저명"
password: "비밀번호" password: "비밀번호"
@ -42,12 +43,13 @@ favorite: "즐겨찾기"
favorites: "즐겨찾기" favorites: "즐겨찾기"
unfavorite: "즐겨찾기에서 제거" unfavorite: "즐겨찾기에서 제거"
favorited: "즐겨찾기에 등록했습니다." favorited: "즐겨찾기에 등록했습니다."
alreadyFavorited: "이미 즐겨찾기에 등록습니다." alreadyFavorited: "이미 즐겨찾기에 등록되어 있습니다."
cantFavorite: "즐겨찾기에 등록하지 못했습니다." cantFavorite: "즐겨찾기에 등록하지 못했습니다."
pin: "프로필에 고정" pin: "프로필에 고정"
unpin: "프로필에서 고정 해제" unpin: "프로필에서 고정 해제"
copyContent: "내용 복사" copyContent: "내용 복사"
copyLink: "링크 복사" copyLink: "링크 복사"
copyRemoteLink: "리모트 서버의 링크로 복사하기"
copyLinkRenote: "리노트 링크 복사" copyLinkRenote: "리노트 링크 복사"
delete: "삭제" delete: "삭제"
deleteAndEdit: "삭제 후 편집" deleteAndEdit: "삭제 후 편집"
@ -382,7 +384,6 @@ enableLocalTimeline: "로컬 타임라인 활성화"
enableGlobalTimeline: "글로벌 타임라인 활성화" enableGlobalTimeline: "글로벌 타임라인 활성화"
disablingTimelinesInfo: "특정 타임라인을 비활성화하더라도 관리자 및 모더레이터는 계속 사용할 수 있습니다." disablingTimelinesInfo: "특정 타임라인을 비활성화하더라도 관리자 및 모더레이터는 계속 사용할 수 있습니다."
registration: "등록" registration: "등록"
enableRegistration: "신규 회원가입을 활성화"
invite: "초대" invite: "초대"
driveCapacityPerLocalAccount: "로컬 유저 한 명당 드라이브 용량" driveCapacityPerLocalAccount: "로컬 유저 한 명당 드라이브 용량"
driveCapacityPerRemoteAccount: "원격 사용자별 드라이브 용량" driveCapacityPerRemoteAccount: "원격 사용자별 드라이브 용량"
@ -587,6 +588,7 @@ masterVolume: "마스터 볼륨"
notUseSound: "음소거 하기" notUseSound: "음소거 하기"
useSoundOnlyWhenActive: "Misskey를 활성화한 때에만 소리를 출력하기" useSoundOnlyWhenActive: "Misskey를 활성화한 때에만 소리를 출력하기"
details: "자세히" details: "자세히"
renoteDetails: "리노트 상세 내용"
chooseEmoji: "이모지 선택" chooseEmoji: "이모지 선택"
unableToProcess: "작업을 완료할 수 없습니다" unableToProcess: "작업을 완료할 수 없습니다"
recentUsed: "최근 사용" recentUsed: "최근 사용"
@ -684,11 +686,15 @@ smtpSecure: "SMTP 연결에 Implicit SSL/TTS 사용"
smtpSecureInfo: "STARTTLS 사용 시에는 해제합니다." smtpSecureInfo: "STARTTLS 사용 시에는 해제합니다."
testEmail: "이메일 전송 테스트" testEmail: "이메일 전송 테스트"
wordMute: "단어 뮤트" wordMute: "단어 뮤트"
wordMuteDescription: "정해진 단어가 포함된 노트를 최소화 한 상태로 표시합니다. 최소화 된 노트는 클릭해서 표시할 수 있습니다."
hardWordMute: "하드 단어 뮤트" hardWordMute: "하드 단어 뮤트"
showMutedWord: "뮤트한 단어를 표시하기"
hardWordMuteDescription: "정한 단어가 들어간 노트를 숨깁니다. 단어 뮤트와 차이점은 노트가 아예 보이지 않습니다."
regexpError: "정규 표현식 오류" regexpError: "정규 표현식 오류"
regexpErrorDescription: "{tab}단어 뮤트 {line}행의 정규 표현식에 오류가 발생했습니다:" regexpErrorDescription: "{tab}단어 뮤트 {line}행의 정규 표현식에 오류가 발생했습니다:"
instanceMute: "서버 뮤트" instanceMute: "서버 뮤트"
userSaysSomething: "{name}님이 무언가를 말했습니다" userSaysSomething: "{name}님이 무언가를 말했습니다"
userSaysSomethingAbout: "{name}님이 \"{word}\"를 언급했습니다."
makeActive: "활성화" makeActive: "활성화"
display: "보기" display: "보기"
copy: "복사" copy: "복사"
@ -947,6 +953,9 @@ oneHour: "1시간"
oneDay: "1일" oneDay: "1일"
oneWeek: "일주일" oneWeek: "일주일"
oneMonth: "1개월" oneMonth: "1개월"
threeMonths: "3개월"
oneYear: "1년"
threeDays: "3일"
reflectMayTakeTime: "반영되기까지 시간이 걸릴 수 있습니다." reflectMayTakeTime: "반영되기까지 시간이 걸릴 수 있습니다."
failedToFetchAccountInformation: "계정 정보를 가져오지 못했습니다" failedToFetchAccountInformation: "계정 정보를 가져오지 못했습니다"
rateLimitExceeded: "요청 제한 횟수를 초과하였습니다" rateLimitExceeded: "요청 제한 횟수를 초과하였습니다"
@ -1254,7 +1263,7 @@ lastNDays: "최근 {n}일"
backToTitle: "타이틀로 가기" backToTitle: "타이틀로 가기"
hemisphere: "거주 지역" hemisphere: "거주 지역"
withSensitive: "민감한 파일이 포함된 노트 보기" withSensitive: "민감한 파일이 포함된 노트 보기"
userSaysSomethingSensitive: "{name} 같은 민감한 파일이 포함된 글" userSaysSomethingSensitive: "{name}의 민감한 파일이 포함된 게시물"
enableHorizontalSwipe: "스와이프하여 탭 전환" enableHorizontalSwipe: "스와이프하여 탭 전환"
loading: "불러오는 중" loading: "불러오는 중"
surrender: "그만두기" surrender: "그만두기"
@ -1274,7 +1283,7 @@ confirmWhenRevealingSensitiveMedia: "민감한 미디어를 열 때 두 번 확
sensitiveMediaRevealConfirm: "민감한 미디어입니다. 표시할까요?" sensitiveMediaRevealConfirm: "민감한 미디어입니다. 표시할까요?"
createdLists: "만든 리스트" createdLists: "만든 리스트"
createdAntennas: "만든 안테나" createdAntennas: "만든 안테나"
fromX: "{x}부터" fromX: "{x}에서"
genEmbedCode: "임베디드 코드 만들기" genEmbedCode: "임베디드 코드 만들기"
noteOfThisUser: "이 유저의 노트 목록" noteOfThisUser: "이 유저의 노트 목록"
clipNoteLimitExceeded: "더 이상 이 클립에 노트를 추가 할 수 없습니다." clipNoteLimitExceeded: "더 이상 이 클립에 노트를 추가 할 수 없습니다."
@ -1286,13 +1295,32 @@ signinWithPasskey: "패스키로 로그인"
unknownWebAuthnKey: "등록되지 않은 패스키입니다." unknownWebAuthnKey: "등록되지 않은 패스키입니다."
passkeyVerificationFailed: "패스키 검증을 실패했습니다." passkeyVerificationFailed: "패스키 검증을 실패했습니다."
passkeyVerificationSucceededButPasswordlessLoginDisabled: "패스키를 검증했으나, 비밀번호 없이 로그인하기가 꺼져 있습니다." passkeyVerificationSucceededButPasswordlessLoginDisabled: "패스키를 검증했으나, 비밀번호 없이 로그인하기가 꺼져 있습니다."
messageToFollower: "팔로워에 보낼 메시지" messageToFollower: "팔로워에 보낼 메시지"
target: "대상" target: "대상"
testCaptchaWarning: "CAPTCHA를 테스트하기 위한 기능입니다. <strong>실제 환경에서는 사용하지 마세요.</strong>" testCaptchaWarning: "CAPTCHA를 테스트하기 위한 기능입니다. <strong>실제 환경에서는 사용하지 마세요.</strong>"
prohibitedWordsForNameOfUser: "금지 단어 (사용자 이름)" prohibitedWordsForNameOfUser: "금지 단어 (사용자 이름)"
prohibitedWordsForNameOfUserDescription: "이 목록에 포함되는 키워드가 사용자 이름에 있는 경우, 일반 사용자는 이름을 바꿀 수 없습니다. 모더레이터 권한을 가진 사용자는 제한 대상에서 제외됩니다." prohibitedWordsForNameOfUserDescription: "이 목록에 포함되는 키워드가 사용자 이름에 있는 경우, 일반 사용자는 이름을 바꿀 수 없습니다. 모더레이터 권한을 가진 사용자는 제한 대상에서 제외됩니다."
yourNameContainsProhibitedWords: "바꾸려는 이름에 금지된 키워드가 포함되어 있습니다." yourNameContainsProhibitedWords: "바꾸려는 이름에 금지된 키워드가 포함되어 있습니다."
yourNameContainsProhibitedWordsDescription: "이름에 금지된 키워드가 있습니다. 이름을 사용해야 하는 경우, 서버 관리자에 문의하세요." yourNameContainsProhibitedWordsDescription: "이름에 금지된 키워드가 있습니다. 이름을 사용해야 하는 경우, 서버 관리자에 문의하세요."
thisContentsAreMarkedAsSigninRequiredByAuthor: "게시자에 의해 로그인해야 볼 수 있도록 설정되어 있습니다."
lockdown: "잠금"
pleaseSelectAccount: "계정을 선택해주세요."
availableRoles: "사용 가능한 역할"
acknowledgeNotesAndEnable: "활성화 하기 전에 주의 사항을 확인했습니다."
federationSpecified: "이 서버는 화이트 리스트 제도로 운영 중 입니다. 정해진 리모트 서버가 아닌 경우 연합되지 않습니다."
federationDisabled: "이 서버는 연합을 하지 않고 있습니다. 리모트 서버 유저와 통신을 할 수 없습니다."
_accountSettings:
requireSigninToViewContents: "콘텐츠 열람을 위해 로그인을 필수로 설정하기"
requireSigninToViewContentsDescription1: "자신이 작성한 모든 노트 등의 콘텐츠를 보기 위해 로그인을 필수로 설정합니다. 크롤러가 정보 수집하는 것을 방지하는 효과를 기대할 수 있습니다."
requireSigninToViewContentsDescription2: "URL 미리보기(OGP), 웹페이지에 삽입, 노트 인용을 지원하지 않는 서버에서 볼 수 없게 됩니다."
requireSigninToViewContentsDescription3: "원격 서버에 연합된 콘텐츠에는 이러한 제한이 적용되지 않을 수 있습니다."
makeNotesFollowersOnlyBefore: "과거 노트는 팔로워만 볼 수 있도록 설정하기"
makeNotesFollowersOnlyBeforeDescription: "이 기능이 활성화되어 있는 동안, 설정된 날짜 및 시간보다 과거 또는 설정된 시간이 지난 노트는 팔로워만 볼 수 있게 됩니다. 비활성화하면 노트의 공개 상태도 원래대로 돌아갑니다."
makeNotesHiddenBefore: "과거 노트 비공개로 전환하기"
makeNotesHiddenBeforeDescription: "이 기능이 활성화되어 있는 동안 설정한 날짜 및 시간보다 과거 또는 설정한 시간이 지난 노트는 본인만 볼 수 있게(비공개로 전환) 됩니다. 비활성화하면 노트의 공개 상태도 원래대로 돌아갑니다."
mayNotEffectForFederatedNotes: "원격 서버에 연합된 노트에는 효과가 없을 수도 있습니다."
notesHavePassedSpecifiedPeriod: "지정한 시간이 경과된 노트"
notesOlderThanSpecifiedDateAndTime: "지정된 날짜 및 시간 이전의 노트"
_abuseUserReport: _abuseUserReport:
forward: "전달" forward: "전달"
forwardDescription: "익명 시스템 계정을 사용하여 리모트 서버에 신고 내용을 전달할 수 있습니다." forwardDescription: "익명 시스템 계정을 사용하여 리모트 서버에 신고 내용을 전달할 수 있습니다."
@ -1437,6 +1465,8 @@ _serverSettings:
reactionsBufferingDescription: "활성화 한 경우, 리액션 작성 퍼포먼스가 대폭 향상되어 DB의 부하를 줄일 수 있으나, Redis의 메모리 사용량이 많아집니다." reactionsBufferingDescription: "활성화 한 경우, 리액션 작성 퍼포먼스가 대폭 향상되어 DB의 부하를 줄일 수 있으나, Redis의 메모리 사용량이 많아집니다."
inquiryUrl: "문의처 URL" inquiryUrl: "문의처 URL"
inquiryUrlDescription: "서버 운영자에게 보내는 문의 양식의 URL이나 운영자의 연락처 등이 적힌 웹 페이지의 URL을 설정합니다." inquiryUrlDescription: "서버 운영자에게 보내는 문의 양식의 URL이나 운영자의 연락처 등이 적힌 웹 페이지의 URL을 설정합니다."
openRegistration: "회원 가입을 활성화 하기"
openRegistrationWarning: "회원 가입을 개방하는 것은 리스크가 따릅니다. 서버를 항상 감시할 수 있고, 문제가 발생했을 때 바로 대응할 수 있는 상태에서만 활성화 하는 것을 권장합니다."
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "일정 기간동안 모더레이터의 활동이 감지되지 않는 경우, 스팸 방지를 위해 이 설정은 자동으로 꺼집니다." thisSettingWillAutomaticallyOffWhenModeratorsInactive: "일정 기간동안 모더레이터의 활동이 감지되지 않는 경우, 스팸 방지를 위해 이 설정은 자동으로 꺼집니다."
_accountMigration: _accountMigration:
moveFrom: "다른 계정에서 이 계정으로 이사" moveFrom: "다른 계정에서 이 계정으로 이사"
@ -2157,8 +2187,11 @@ _auth:
permissionAsk: "이 앱은 다음의 권한을 요청합니다" permissionAsk: "이 앱은 다음의 권한을 요청합니다"
pleaseGoBack: "앱으로 돌아가서 시도해 주세요" pleaseGoBack: "앱으로 돌아가서 시도해 주세요"
callback: "앱으로 돌아갑니다" callback: "앱으로 돌아갑니다"
accepted: "접근 권한이 부여되었습니다."
denied: "접근이 거부되었습니다" denied: "접근이 거부되었습니다"
scopeUser: "다음 사용자로 활동하고 있습니다."
pleaseLogin: "어플리케이션의 접근을 허가하려면 로그인하십시오." pleaseLogin: "어플리케이션의 접근을 허가하려면 로그인하십시오."
byClickingYouWillBeRedirectedToThisUrl: "접근을 허용하면 자동으로 다음 URL로 이동합니다."
_antennaSources: _antennaSources:
all: "모든 노트" all: "모든 노트"
homeTimeline: "팔로우중인 유저의 노트" homeTimeline: "팔로우중인 유저의 노트"
@ -2332,9 +2365,6 @@ _pages:
newPage: "페이지 만들기" newPage: "페이지 만들기"
editPage: "페이지 수정" editPage: "페이지 수정"
readPage: "소스 표시 중" readPage: "소스 표시 중"
created: "페이지를 만들었습니다"
updated: "페이지를 수정했습니다"
deleted: "페이지가 삭제되었습니다"
pageSetting: "페이지 설정" pageSetting: "페이지 설정"
nameAlreadyExists: "지정한 페이지 URL이 이미 존재합니다" nameAlreadyExists: "지정한 페이지 URL이 이미 존재합니다"
invalidNameTitle: "유효하지 않은 페이지 URL입니다" invalidNameTitle: "유효하지 않은 페이지 URL입니다"
@ -2489,7 +2519,7 @@ _webhookSettings:
reaction: "누군가 내 노트에 리액션했을 때" reaction: "누군가 내 노트에 리액션했을 때"
mention: "누군가 나를 멘션했을 때" mention: "누군가 나를 멘션했을 때"
_systemEvents: _systemEvents:
abuseReport: "유저" abuseReport: "유저로부터 신고를 받았을 때"
abuseReportResolved: "받은 신고를 처리했을 때" abuseReportResolved: "받은 신고를 처리했을 때"
userCreated: "유저가 생성되었을 때" userCreated: "유저가 생성되었을 때"
inactiveModeratorsWarning: "모더레이터가 일정 기간동안 활동하지 않은 경우" inactiveModeratorsWarning: "모더레이터가 일정 기간동안 활동하지 않은 경우"
@ -2696,6 +2726,66 @@ _contextMenu:
app: "애플리케이션" app: "애플리케이션"
appWithShift: "Shift 키로 애플리케이션" appWithShift: "Shift 키로 애플리케이션"
native: "브라우저의 UI" native: "브라우저의 UI"
_gridComponent:
_error:
requiredValue: "이 값은 필수 항목입니다."
columnTypeNotSupport: "정규표현 규칙이 type:text인 칼럼만 지원합니다."
patternNotMatch: "이 값은 {pattern} 패턴과 일치하지 않습니다."
notUnique: "이 값은 다른 값과 중복되지 않아야 합니다."
_roleSelectDialog:
notSelected: "선택하지 않았습니다."
_customEmojisManager:
_gridCommon:
copySelectionRows: "선택한 행을 복사하기"
copySelectionRanges: "선택범위를 복사하기"
deleteSelectionRows: "선택한 행을 삭제"
deleteSelectionRanges: "선택한 행을 삭제"
searchSettings: "검색 설정"
searchSettingCaption: "고급 검색을 설정합니다."
searchLimit: "표시 건수"
sortOrder: "정렬 순서"
registrationLogs: "등록 로그"
registrationLogsCaption: "이모지를 갱신하거나 삭제할 때 로그가 표시됩니다. 갱신 또는 삭제하거나, 페이지 이동, 새로 고침하면 삭제됩니다."
alertEmojisRegisterFailedDescription: "이모지를 갱신 또는 삭제하지 못했습니다. 자세한 내용은 등록 로그를 확인해주세요."
_logs:
showSuccessLogSwitch: "성공 로그를 표시"
failureLogNothing: "실패 로그가 없습니다."
logNothing: "로그가 없습니다."
_remote:
selectionRowDetail: "선택 행 (상세)"
importSelectionRows: "선택 행을 가져오기"
importSelectionRangesRows: "선택한 범위 안의 행을 가져오기"
importEmojisButton: "선택한 이모지를 가져오기"
confirmImportEmojisTitle: "이모지 가져오기"
confirmImportEmojisDescription: "리모트 서버에서 받아온 이모지 {count}개를 이 서버로 가져옵니다. 이모지의 저작권, 라이선스를 확실히 확인하셨다면 실행해주세요."
_local:
tabTitleList: "등록한 이모지 리스트"
tabTitleRegister: "이모지 등록"
_list:
emojisNothing: "등록한 이모지가 없습니다."
markAsDeleteTargetRows: "선택한 행을 삭제할 대상으로 하기"
markAsDeleteTargetRanges: "선택한 범위의 행을 삭제 대상으로 하기"
alertUpdateEmojisNothingDescription: "변경할 이모지가 없습니다."
alertDeleteEmojisNothingDescription: "삭제 대상의 이모지는 없습니다."
confirmMovePage: "페이지를 이동할까요?"
confirmChangeView: "표시를 바꿀까요?"
confirmUpdateEmojisDescription: "{count}개의 이모지를 갱신합니다. 실행할까요?"
confirmDeleteEmojisDescription: "선택한 이모지 {count}개를 삭제합니다. 실행할까요?"
confirmResetDescription: "지금까지 했던 변경 내용이 모두 초기화됩니다."
confirmMovePageDesciption: "이 페이지의 이모지에 변경이 있습니다.\n저장하지 않은 상태로 페이지를 이동하면, 이 페이지에서 바꾼 변경 내용이 모두 지워집니다."
dialogSelectRoleTitle: "이모지에 설정된 역할을 검색"
_register:
uploadSettingTitle: "업로드 설정"
uploadSettingDescription: "여기서 이모지를 업로드 할 때의 동작을 설정할 수 있습니다."
directoryToCategoryLabel: "디렉토리 이름을 \"category\"로 입력하기"
directoryToCategoryCaption: "디렉토리를 드래그 앤 드롭한 경우, 디렉토리 이름을 \"category\"로 입력합니다."
emojiInputAreaCaption: "이모지를 등록할 방법을 선택해주세요."
emojiInputAreaList1: "이 틀 안에 이미지 파일 또는 디렉토리를 끌어서 가져오기"
emojiInputAreaList2: "이 링크를 클릭해서 PC에서 선택하기"
emojiInputAreaList3: "이 링크를 클릭해서 드라이브에서 선택하기"
confirmRegisterEmojisDescription: "리스트에 표시되어진 이모지를 새로운 커스텀 이모지로 등록합니다. 실행할까요? (부하를 피하기 위해, 한 번에 등록할 수 있는 이모지는 {count}건까지 입니다.)"
confirmClearEmojisDescription: "편집 내용을 지우고, 목록에 표시되어진 이모지를 지웁니다. 실행할까요?"
confirmUploadEmojisDescription: "드래그 앤 드롭한 {count}개의 파일을 드라이브에 업로드 합니다. 실행할까요?"
_embedCodeGen: _embedCodeGen:
title: "임베디드 코드를 커스터마이즈" title: "임베디드 코드를 커스터마이즈"
header: "해더를 표시" header: "해더를 표시"
@ -2710,3 +2800,43 @@ _embedCodeGen:
generateCode: "임베디드 코드를 만들기" generateCode: "임베디드 코드를 만들기"
codeGenerated: "코드를 만들었습니다." codeGenerated: "코드를 만들었습니다."
codeGeneratedDescription: "만들어진 코드를 웹 사이트에 붙여서 사용하세요." codeGeneratedDescription: "만들어진 코드를 웹 사이트에 붙여서 사용하세요."
_selfXssPrevention:
warning: "경고"
title: "“이 화면에 뭔가를 붙여넣어라\"는 것은 모두 사기입니다."
description1: "여기에 무언가를 붙여넣으면 악의적인 사용자에게 계정을 탈취당하거나 개인정보를 도용당할 수 있습니다."
description2: "붙여 넣으려는 항목이 무엇인지 정확히 이해하지 못하는 경우, %c지금 바로 작업을 중단하고 이 창을 닫으십시오."
description3: "자세한 내용은 여기를 확인해 주세요. {link}"
_followRequest:
recieved: "받은 신청"
sent: "보낸 신청"
_remoteLookupErrors:
_federationNotAllowed:
title: "이 서버와 통신할 수 없음"
description: "이 서버와의 통신이 비활성화 되었거나, 이 서버를 차단 중이거나 서버에게 차단되었을 수 있습니다.\n서버 관리자에게 문의하세요."
_uriInvalid:
title: "URI가 잘못되었습니다."
description: "입력한 URI에 문제가 있습니다. URI에 쓸 수 없는 문자를 넣었는지 확인해보세요."
_requestFailed:
title: "요청을 실패했습니다."
description: "해당 서버와 통신을 실패했습니다. 상대방 서버에 접속 불가능한 상태일 수도 있습니다. 또는 잘못된 URI 또는 없는 URI를 입력했는지 확인해보세요."
_responseInvalid:
title: "유효하지 않은 반응입니다."
description: "이 서버와 통신할 수 있지만, 데이터가 올바르지 않습니다."
_responseInvalidIdHostNotMatch:
description: "입력된 URI과 실제 URI가 다릅니다. 제 3자 서버를 통한 리모트 컨텐츠를 조회하는 경우, 원래 서버 측에서 받아올 수 있는 URI를 사용하여 조회하시길 바랍니다."
_noSuchObject:
title: "찾을 수 없습니다"
description: "요구된 리소스를 찾을 수 없습니다. URI를 다시 한 번 확인해보세요."
_captcha:
verify: "CAPTCHA를 먼저 해결하세요."
testSiteKeyMessage: "사이트 키와 비밀 키에 테스트용 값을 입력하여 미리보기를 확인할 수 있습니다.\n자세한 내용은 아래 페이지를 확인해보세요."
_error:
_requestFailed:
title: "CAPTCHA 요구에 실패했습니다."
text: "잠시 후에 다시 실행하거나, 설정을 다시 한 번 확인해보세요."
_verificationFailed:
title: "CAPTCHA 검증을 실패했습니다."
text: "설정이 올바른지 다시 한 번 확인해보세요."
_unknown:
title: "CAPTCHA 에러"
text: "알 수 없는 에러가 발생했습니다."

View file

@ -299,7 +299,6 @@ enableLocalTimeline: "ເປີດໃຊ້ທາມລາຍທ້ອງຖິ
enableGlobalTimeline: "ເປີດໃຊ້ທາມລາຍທົ່ວໂລກ" enableGlobalTimeline: "ເປີດໃຊ້ທາມລາຍທົ່ວໂລກ"
disablingTimelinesInfo: "ຜູ້ດູແລລະບບແລະຜູ້ຄວບຄຸມຈະສາມາດເຂົ້າເຖີງໄທມ໌ໄລນ໌ທັ້ງເບີດ ເຖີງວ່າຈະບໍ່ໄດ້ເປີດໃຊ້ງານກໍ່ຕາມ" disablingTimelinesInfo: "ຜູ້ດູແລລະບບແລະຜູ້ຄວບຄຸມຈະສາມາດເຂົ້າເຖີງໄທມ໌ໄລນ໌ທັ້ງເບີດ ເຖີງວ່າຈະບໍ່ໄດ້ເປີດໃຊ້ງານກໍ່ຕາມ"
registration: "ລົງທະບຽນ" registration: "ລົງທະບຽນ"
enableRegistration: "ເປີດໃຊ້ການລົງທະບຽນຜູ້ໃຊ້ໃໝ່"
invite: "ເຊີນ" invite: "ເຊີນ"
driveCapacityPerLocalAccount: "ຄວາມຈຸຂອງ drive ຕໍ່ຜູ້ໃຊ້ທ້ອງຖິ່ນ" driveCapacityPerLocalAccount: "ຄວາມຈຸຂອງ drive ຕໍ່ຜູ້ໃຊ້ທ້ອງຖິ່ນ"
driveCapacityPerRemoteAccount: "ຄວາມຈຸຂອງ drive ຕໍ່ຜູ້ໃຊ້ໄລຍະໄກ" driveCapacityPerRemoteAccount: "ຄວາມຈຸຂອງ drive ຕໍ່ຜູ້ໃຊ້ໄລຍະໄກ"
@ -475,3 +474,6 @@ _abuseReport:
mail: "ອີເມວ" mail: "ອີເມວ"
_moderationLogTypes: _moderationLogTypes:
suspend: "ລະງັບ" suspend: "ລະງັບ"
_remoteLookupErrors:
_noSuchObject:
title: "ບໍ່ພົບ"

View file

@ -8,6 +8,9 @@ search: "Zoeken"
notifications: "Meldingen" notifications: "Meldingen"
username: "Gebruikersnaam" username: "Gebruikersnaam"
password: "Wachtwoord" password: "Wachtwoord"
initialPasswordForSetup: "Initiële wachtwoord voor configuratie"
initialPasswordIsIncorrect: "Initiële wachtwoord voor configuratie is onjuist"
initialPasswordForSetupDescription: "Gebruik het initiële wachtwoord uit de configuratie, als je Misskey zelf hebt geïnstalleerd.\nAls je een Misskey hosting provider gebruikt, gebruik dan het gegeven wachtwoord.\nAls je geen wachtwoord hebt gezet, laat het dan leeg om verder te gaan."
forgotPassword: "Wachtwoord vergeten" forgotPassword: "Wachtwoord vergeten"
fetchingAsApObject: "Ophalen vanuit de Fediverse" fetchingAsApObject: "Ophalen vanuit de Fediverse"
ok: "Ok" ok: "Ok"
@ -108,9 +111,12 @@ enterEmoji: "Voer een emoji in"
renote: "Herdelen" renote: "Herdelen"
unrenote: "Stop herdelen" unrenote: "Stop herdelen"
renoted: "Herdeeld" renoted: "Herdeeld"
renotedToX: "Renoted naar {name}"
cantRenote: "Dit bericht kan niet worden herdeeld" cantRenote: "Dit bericht kan niet worden herdeeld"
cantReRenote: "Een herdeling kan niet worden herdeeld" cantReRenote: "Een herdeling kan niet worden herdeeld"
quote: "Quote" quote: "Quote"
renoteToChannel: "Renote naar kanaal"
renoteToOtherChannel: "Renote naar ander kanaal"
pinnedNote: "Vastgemaakte notitie" pinnedNote: "Vastgemaakte notitie"
pinned: "Vastmaken aan profielpagina" pinned: "Vastmaken aan profielpagina"
you: "Jij" you: "Jij"
@ -119,6 +125,10 @@ sensitive: "NSFW"
add: "Toevoegen" add: "Toevoegen"
reaction: "Reacties" reaction: "Reacties"
reactions: "Reacties" reactions: "Reacties"
emojiPicker: "Emoji kiezer"
pinnedEmojisForReactionSettingDescription: "Kies de emojis die als eerste getoond worden tijdens het reageren"
pinnedEmojisSettingDescription: "Kies de emojis die als eerste getoond worden tijdens het reageren"
emojiPickerDisplay: "Emoji kiezer weergave"
reactionSettingDescription2: "Sleep om opnieuw te ordenen, Klik om te verwijderen, Druk op \"+\" om toe te voegen" reactionSettingDescription2: "Sleep om opnieuw te ordenen, Klik om te verwijderen, Druk op \"+\" om toe te voegen"
rememberNoteVisibility: "Vergeet niet de notitie zichtbaarheidsinstellingen" rememberNoteVisibility: "Vergeet niet de notitie zichtbaarheidsinstellingen"
attachCancel: "Verwijder bijlage" attachCancel: "Verwijder bijlage"
@ -140,7 +150,7 @@ selectAntenna: "Kies een antenne"
selectWidget: "Kies een widget" selectWidget: "Kies een widget"
editWidgets: "Bewerk widgets" editWidgets: "Bewerk widgets"
editWidgetsExit: "Klaar" editWidgetsExit: "Klaar"
customEmojis: "Maatwerk emoji" customEmojis: "Eigen emoji"
emoji: "Emoji" emoji: "Emoji"
emojis: "Emoji" emojis: "Emoji"
emojiName: "Naam emoji" emojiName: "Naam emoji"
@ -333,7 +343,6 @@ enableLocalTimeline: "Inschakelen lokale tijdlijn"
enableGlobalTimeline: "Inschakelen globale tijdlijn " enableGlobalTimeline: "Inschakelen globale tijdlijn "
disablingTimelinesInfo: "Beheerders en moderators hebben altijd toegang tot alle tijdlijnen, ook als ze niet actief zijn." disablingTimelinesInfo: "Beheerders en moderators hebben altijd toegang tot alle tijdlijnen, ook als ze niet actief zijn."
registration: "Registreren" registration: "Registreren"
enableRegistration: "Inschakelen registratie nieuwe gebruikers "
invite: "Uitnodigen" invite: "Uitnodigen"
driveCapacityPerLocalAccount: "Opslagruimte per lokale gebruiker" driveCapacityPerLocalAccount: "Opslagruimte per lokale gebruiker"
driveCapacityPerRemoteAccount: "Opslagruimte per externe gebruiker" driveCapacityPerRemoteAccount: "Opslagruimte per externe gebruiker"
@ -404,7 +413,31 @@ help: "Help"
inputMessageHere: "Voer hier je bericht in" inputMessageHere: "Voer hier je bericht in"
close: "Sluiten" close: "Sluiten"
invites: "Uitnodigen" invites: "Uitnodigen"
members: "Leden"
transfer: "Overdracht"
title: "Titel"
text: "Tekst"
enable: "Inschakelen"
next: "Volgende"
retype: "Opnieuw invoeren"
noteOf: "Notitie van {user}"
quoteAttached: "Citaat"
quoteQuestion: "Toevoegen als citaat?"
invitations: "Uitnodigen" invitations: "Uitnodigen"
dashboard: "Overzicht"
local: "Lokaal"
remote: "Remote"
total: "Totaal"
weekOverWeekChanges: "Wijzigingen sinds vorige week"
dayOverDayChanges: "Dagelijkse wijzigingen"
appearance: "Weergave"
clientSettings: "Clientinstellingen"
accountSettings: "Accountinstellingen"
promotion: "Promotie"
promote: "Promoot"
numberOfDays: "Aantal dagen"
hideThisNote: "Verberg deze notitie"
showFeaturedNotesInTimeline: "Laat featured notities in tijdlijn zien"
sound: "Geluid" sound: "Geluid"
smtpHost: "Server" smtpHost: "Server"
smtpUser: "Gebruikersnaam" smtpUser: "Gebruikersnaam"
@ -502,3 +535,8 @@ _webhookSettings:
_moderationLogTypes: _moderationLogTypes:
suspend: "Opschorten" suspend: "Opschorten"
resetPassword: "Wachtwoord terugzetten" resetPassword: "Wachtwoord terugzetten"
_reversi:
total: "Totaal"
_remoteLookupErrors:
_noSuchObject:
title: "Niet gevonden"

View file

@ -260,7 +260,6 @@ enableLocalTimeline: "Aktiver lokal tidslinje"
enableGlobalTimeline: "Aktiver global tidslinje" enableGlobalTimeline: "Aktiver global tidslinje"
disablingTimelinesInfo: "Administratorer og Moderatorer vil alltid ha tilgang til alle tidslinjer, selv om de ikke er aktivert." disablingTimelinesInfo: "Administratorer og Moderatorer vil alltid ha tilgang til alle tidslinjer, selv om de ikke er aktivert."
registration: "Registrer" registration: "Registrer"
enableRegistration: "Aktiver registrering av nye brukere"
invite: "Inviter" invite: "Inviter"
basicInfo: "Grunnleggende informasjon" basicInfo: "Grunnleggende informasjon"
pinnedUsers: "Festede brukrere" pinnedUsers: "Festede brukrere"
@ -728,3 +727,6 @@ _abuseReport:
mail: "E-post" mail: "E-post"
_moderationLogTypes: _moderationLogTypes:
suspend: "Suspender" suspend: "Suspender"
_remoteLookupErrors:
_noSuchObject:
title: "Ikke funnet"

View file

@ -362,7 +362,6 @@ enableLocalTimeline: "Włącz lokalną oś czasu"
enableGlobalTimeline: "Włącz globalną oś czasu" enableGlobalTimeline: "Włącz globalną oś czasu"
disablingTimelinesInfo: "Administratorzy i moderatorzy będą zawsze mieć dostęp do wszystkich osi czasu, nawet gdy są one wyłączone." disablingTimelinesInfo: "Administratorzy i moderatorzy będą zawsze mieć dostęp do wszystkich osi czasu, nawet gdy są one wyłączone."
registration: "Zarejestruj się" registration: "Zarejestruj się"
enableRegistration: "Włącz rejestrację nowych użytkowników"
invite: "Zaproś" invite: "Zaproś"
driveCapacityPerLocalAccount: "Powierzchnia dyskowa na lokalnego użytkownika" driveCapacityPerLocalAccount: "Powierzchnia dyskowa na lokalnego użytkownika"
driveCapacityPerRemoteAccount: "Powierzchnia dyskowa na zdalnego użytkownika" driveCapacityPerRemoteAccount: "Powierzchnia dyskowa na zdalnego użytkownika"
@ -492,6 +491,10 @@ uiLanguage: "Język wyświetlania UI"
aboutX: "O {x}" aboutX: "O {x}"
emojiStyle: "Styl emoji" emojiStyle: "Styl emoji"
native: "Natywny" native: "Natywny"
menuStyle: "Styl Menu"
style: "Styl"
drawer: "Schowek"
popup: "Wyskakujące okienka"
showNoteActionsOnlyHover: "Pokazuj akcje notatek tylko po najechaniu myszką" showNoteActionsOnlyHover: "Pokazuj akcje notatek tylko po najechaniu myszką"
showReactionsCount: "Wyświetl liczbę reakcji na notatkę" showReactionsCount: "Wyświetl liczbę reakcji na notatkę"
noHistory: "Brak historii" noHistory: "Brak historii"
@ -574,6 +577,7 @@ ascendingOrder: "Rosnąco"
descendingOrder: "Malejąco" descendingOrder: "Malejąco"
scratchpad: "Brudnopis" scratchpad: "Brudnopis"
scratchpadDescription: "Brudnopis zawiera eksperymentalne środowisko dla AiScript. Możesz pisać, wykonywać i sprawdzać wyniki w interakcji z Misskey." scratchpadDescription: "Brudnopis zawiera eksperymentalne środowisko dla AiScript. Możesz pisać, wykonywać i sprawdzać wyniki w interakcji z Misskey."
uiInspector: "Inspektor UI"
output: "Wyjście" output: "Wyjście"
script: "Skrypt" script: "Skrypt"
disablePagesScript: "Wyłącz AiScript na Stronach" disablePagesScript: "Wyłącz AiScript na Stronach"
@ -654,6 +658,7 @@ smtpSecure: "Użyj niejawnego SSL/TLS dla połączeń SMTP"
smtpSecureInfo: "Wyłącz, jeżeli używasz STARTTLS" smtpSecureInfo: "Wyłącz, jeżeli używasz STARTTLS"
testEmail: "Przetestuj dostarczanie wiadomości e-mail" testEmail: "Przetestuj dostarczanie wiadomości e-mail"
wordMute: "Wyciszenie słowa" wordMute: "Wyciszenie słowa"
hardWordMute: "Wyciszaj przekleństwa"
regexpError: "Błąd wyrażenia regularnego" regexpError: "Błąd wyrażenia regularnego"
regexpErrorDescription: "Wystąpił błąd w wyrażeniu regularnym w linii {line} twoich {tab} wyciszeń:" regexpErrorDescription: "Wystąpił błąd w wyrażeniu regularnym w linii {line} twoich {tab} wyciszeń:"
instanceMute: "Wyciszone instancje" instanceMute: "Wyciszone instancje"
@ -826,6 +831,7 @@ administration: "Zarządzanie"
accounts: "Konta" accounts: "Konta"
switch: "Przełącz" switch: "Przełącz"
noMaintainerInformationWarning: "Informacje o administratorze nie są skonfigurowane." noMaintainerInformationWarning: "Informacje o administratorze nie są skonfigurowane."
noInquiryUrlWarning: "Adres URL zapytania nie został ustawiony"
noBotProtectionWarning: "Zabezpieczenie przed botami nie jest skonfigurowane." noBotProtectionWarning: "Zabezpieczenie przed botami nie jest skonfigurowane."
configure: "Skonfiguruj" configure: "Skonfiguruj"
postToGallery: "Opublikuj w galerii" postToGallery: "Opublikuj w galerii"
@ -890,6 +896,7 @@ followersVisibility: "Widoczność obserwujących"
continueThread: "Pokaż kontynuację wątku" continueThread: "Pokaż kontynuację wątku"
deleteAccountConfirm: "Spowoduje to nieodwracalne usunięcie Twojego konta. Kontynuować?" deleteAccountConfirm: "Spowoduje to nieodwracalne usunięcie Twojego konta. Kontynuować?"
incorrectPassword: "Nieprawidłowe hasło." incorrectPassword: "Nieprawidłowe hasło."
incorrectTotp: "Hasło pojedynczego użytku jest nie poprawne, lub straciło ważność"
voteConfirm: "Potwierdzić swój głos na \"{choice}\"?" voteConfirm: "Potwierdzić swój głos na \"{choice}\"?"
hide: "Ukryj" hide: "Ukryj"
useDrawerReactionPickerForMobile: "Wyświetlaj wybornik reakcji jako szufladę na urządzeniach mobilnych" useDrawerReactionPickerForMobile: "Wyświetlaj wybornik reakcji jako szufladę na urządzeniach mobilnych"
@ -914,6 +921,10 @@ oneHour: "1 godzina"
oneDay: "1 dzień" oneDay: "1 dzień"
oneWeek: "1 tydzień" oneWeek: "1 tydzień"
oneMonth: "jeden miesiąc" oneMonth: "jeden miesiąc"
threeMonths: "3 miesiące"
oneYear: "Rok"
threeDays: "3 dni"
reflectMayTakeTime: "Może minąć trochę czasu, zanim będzie to uwzględnione"
failedToFetchAccountInformation: "Nie udało się uzyskać informacji o koncie" failedToFetchAccountInformation: "Nie udało się uzyskać informacji o koncie"
rateLimitExceeded: "Limit szybkości przekroczony" rateLimitExceeded: "Limit szybkości przekroczony"
cropImage: "Przytnij obraz" cropImage: "Przytnij obraz"
@ -924,9 +935,11 @@ file: "Pliki"
recentNHours: "W ciągu ostatnich {n} godzin" recentNHours: "W ciągu ostatnich {n} godzin"
recentNDays: "W ciągu ostatnich {n} dni" recentNDays: "W ciągu ostatnich {n} dni"
noEmailServerWarning: "Serwer Email nie jest skonfigurowany" noEmailServerWarning: "Serwer Email nie jest skonfigurowany"
thereIsUnresolvedAbuseReportWarning: "Istnieją niewyjaśnione raporty"
recommended: "Zalecane" recommended: "Zalecane"
check: "Zweryfikuj" check: "Zweryfikuj"
driveCapOverrideLabel: "Zmień limit pojemności dysku użytkownika" driveCapOverrideLabel: "Zmień limit pojemności dysku użytkownika"
driveCapOverrideCaption: "Resetuje pojemność do wartości domyślnej, przez wpisanie wartości 0 lub niższej"
requireAdminForView: "Aby to zobaczyć, musisz być administratorem" requireAdminForView: "Aby to zobaczyć, musisz być administratorem"
isSystemAccount: "To jest konto stworzone i zarządzane przez system" isSystemAccount: "To jest konto stworzone i zarządzane przez system"
typeToConfirm: "Wprowadź {x}, aby potwierdzić" typeToConfirm: "Wprowadź {x}, aby potwierdzić"
@ -995,17 +1008,29 @@ unassign: "Cofnij przydzielenie"
color: "Kolor" color: "Kolor"
manageCustomEmojis: "Zarządzaj niestandardowymi Emoji" manageCustomEmojis: "Zarządzaj niestandardowymi Emoji"
manageAvatarDecorations: "Zarządzaj dekoracjami awatara" manageAvatarDecorations: "Zarządzaj dekoracjami awatara"
youCannotCreateAnymore: "Limit kreacji został przekroczony"
cannotPerformTemporary: "Opcja tymczasowo niedostępna"
cannotPerformTemporaryDescription: "Ta akcja nie może zostać wykonana, z powodu przekroczenia limitu wykonań. Prosimy poczekać chwilę i spróbować ponownie"
invalidParamError: "Błąd parametrów" invalidParamError: "Błąd parametrów"
invalidParamErrorDescription: "Wartości, które zostały podane są niepoprawne. Zwykle jest to spowodowane bugiem, lecz również może być to spowodowane przekroczeniem limitu wartości, lub podobnym problemem"
permissionDeniedError: "Odrzucono operacje" permissionDeniedError: "Odrzucono operacje"
permissionDeniedErrorDescription: "Konto nie posiada uprawnień" permissionDeniedErrorDescription: "Konto nie posiada uprawnień"
preset: "Konfiguracja" preset: "Konfiguracja"
selectFromPresets: "Wybierz konfiguracje" selectFromPresets: "Wybierz konfiguracje"
achievements: "Osiągnięcia" achievements: "Osiągnięcia"
gotInvalidResponseError: "Niepoprawna odpowiedź serwera"
gotInvalidResponseErrorDescription: "Wystąpił problem z Twoim połączeniem z Internetem, lub z serwerem. {Spróbuj ponownie} wkrótce."
thisPostMayBeAnnoying: "Ten wpis może obrażać pozostałych użytkowników"
thisPostMayBeAnnoyingHome: "Opublikuj na domowej osi czasu"
thisPostMayBeAnnoyingCancel: "Odrzuć" thisPostMayBeAnnoyingCancel: "Odrzuć"
thisPostMayBeAnnoyingIgnore: "Zignoruj i wyślij"
collapseRenotes: "Zwiń wpisy, które już zobaczyłeś"
collapseRenotesDescription: "Zwiń wpisy, na które już zareagowałeś lub udostępniłeś"
internalServerError: "Wewnętrzny błąd serwera" internalServerError: "Wewnętrzny błąd serwera"
internalServerErrorDescription: "Niespodziewany błąd po stronie serwera" internalServerErrorDescription: "Niespodziewany błąd po stronie serwera"
copyErrorInfo: "Kopiuj informacje o błędzie" copyErrorInfo: "Kopiuj informacje o błędzie"
joinThisServer: "Dołącz do chaty" joinThisServer: "Dołącz do chaty"
exploreOtherServers: "Szukaj innej instancji"
disableFederationOk: "Wyłącz federacje" disableFederationOk: "Wyłącz federacje"
invitationRequiredToRegister: "Ten serwer wymaga zaproszenia. Tylko osoby z zaproszeniem mogą się zarejestrować" invitationRequiredToRegister: "Ten serwer wymaga zaproszenia. Tylko osoby z zaproszeniem mogą się zarejestrować"
emailNotSupported: "Wysyłanie wiadomości E-mail nie jest obsługiwane na tym serwerze" emailNotSupported: "Wysyłanie wiadomości E-mail nie jest obsługiwane na tym serwerze"
@ -1434,9 +1459,6 @@ _pages:
newPage: "Utwórz stronę" newPage: "Utwórz stronę"
editPage: "Edytuj tę stronę" editPage: "Edytuj tę stronę"
readPage: "Aktywowano widok źródła" readPage: "Aktywowano widok źródła"
created: "Pomyślnie utworzono stronę!"
updated: "Pomyślnie zaktualizowano stronę!"
deleted: "Strona została usunięta"
pageSetting: "Ustawienia strony" pageSetting: "Ustawienia strony"
nameAlreadyExists: "Określony adres URL strony już istnieje" nameAlreadyExists: "Określony adres URL strony już istnieje"
invalidNameTitle: "Podany adres URL strony jest nieprawidłowy" invalidNameTitle: "Podany adres URL strony jest nieprawidłowy"
@ -1558,3 +1580,6 @@ _moderationLogTypes:
resetPassword: "Zresetuj hasło" resetPassword: "Zresetuj hasło"
_reversi: _reversi:
total: "Łącznie" total: "Łącznie"
_remoteLookupErrors:
_noSuchObject:
title: "Nie znaleziono"

View file

@ -8,6 +8,9 @@ search: "Pesquisar"
notifications: "Notificações" notifications: "Notificações"
username: "Nome de usuário" username: "Nome de usuário"
password: "Senha" password: "Senha"
initialPasswordForSetup: "Senha para a configuração inicial"
initialPasswordIsIncorrect: "Senha para configuração inicial está incorreta"
initialPasswordForSetupDescription: "Use a senha configurada no arquivo de configuração se você instalou o Misskey manualmente.\nSe você estiver utilizando um serviço de hospedagem, utilize a senha fornecida.\nSe uma senha não foi configurada, deixe em branco e continue."
forgotPassword: "Esqueci-me da senha" forgotPassword: "Esqueci-me da senha"
fetchingAsApObject: "Buscando no Fediverso..." fetchingAsApObject: "Buscando no Fediverso..."
ok: "OK" ok: "OK"
@ -196,7 +199,7 @@ followConfirm: "Tem certeza que quer seguir {name}?"
proxyAccount: "Conta proxy" proxyAccount: "Conta proxy"
proxyAccountDescription: "Uma conta de proxy é uma conta que assume o acompanhamento remoto de um usuário sob certas condições específicas. Por exemplo, quando um usuário inclui um usuário remoto em uma lista, mas ninguém na lista está seguindo o usuário remoto, a atividade não é entregue ao servidor. Nesse caso, a conta de proxy entra em ação para seguir o usuário remoto em vez disso." proxyAccountDescription: "Uma conta de proxy é uma conta que assume o acompanhamento remoto de um usuário sob certas condições específicas. Por exemplo, quando um usuário inclui um usuário remoto em uma lista, mas ninguém na lista está seguindo o usuário remoto, a atividade não é entregue ao servidor. Nesse caso, a conta de proxy entra em ação para seguir o usuário remoto em vez disso."
host: "Host" host: "Host"
selectSelf: "Escolher manualmente" selectSelf: "Selecionar a mim"
selectUser: "Selecionar usuário" selectUser: "Selecionar usuário"
recipient: "Destinatário" recipient: "Destinatário"
annotation: "Anotação" annotation: "Anotação"
@ -236,6 +239,8 @@ silencedInstances: "Instâncias silenciadas"
silencedInstancesDescription: "Liste o nome de hospedagem dos servidores que você deseja silenciar, separados por linha. Todas as contas desses servidores serão silenciada e poderão enviar solicitações para seguir, mas não poderão mencionar usuários locais sem segui-los. Isso não afetará servidores bloqueados." silencedInstancesDescription: "Liste o nome de hospedagem dos servidores que você deseja silenciar, separados por linha. Todas as contas desses servidores serão silenciada e poderão enviar solicitações para seguir, mas não poderão mencionar usuários locais sem segui-los. Isso não afetará servidores bloqueados."
mediaSilencedInstances: "Instâncias com mídia silenciadas" mediaSilencedInstances: "Instâncias com mídia silenciadas"
mediaSilencedInstancesDescription: "Liste o nome de hospedagem dos servidores cuja mídia você deseja silenciar, separados por linha. Todas as contas desses servidores serão consideradas sensíveis e não poderão utilizar emojis personalizados. Isso não afetará servidores bloqueados." mediaSilencedInstancesDescription: "Liste o nome de hospedagem dos servidores cuja mídia você deseja silenciar, separados por linha. Todas as contas desses servidores serão consideradas sensíveis e não poderão utilizar emojis personalizados. Isso não afetará servidores bloqueados."
federationAllowedHosts: "Servidores com federação permitida"
federationAllowedHostsDescription: "Especifique o endereço dos servidores em que deseja permitir a federação separados por linha."
muteAndBlock: "Silenciar e bloquear" muteAndBlock: "Silenciar e bloquear"
mutedUsers: "Usuários silenciados" mutedUsers: "Usuários silenciados"
blockedUsers: "Usuários bloqueados" blockedUsers: "Usuários bloqueados"
@ -334,6 +339,7 @@ renameFolder: "Renomear Pasta"
deleteFolder: "Excluir pasta" deleteFolder: "Excluir pasta"
folder: "Pasta" folder: "Pasta"
addFile: "Adicionar arquivo" addFile: "Adicionar arquivo"
showFile: "Mostrar arquivos"
emptyDrive: "O drive está vazio" emptyDrive: "O drive está vazio"
emptyFolder: "A pasta está vazia" emptyFolder: "A pasta está vazia"
unableToDelete: "Não é possível excluir" unableToDelete: "Não é possível excluir"
@ -376,7 +382,6 @@ enableLocalTimeline: "Ativar linha do tempo local"
enableGlobalTimeline: "Ativar linha do tempo global" 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." disablingTimelinesInfo: "Se você desabilitar essas linhas do tempo, administradores e moderadores ainda poderão usá-las por conveniência."
registration: "Registar" registration: "Registar"
enableRegistration: "Permitir que qualquer pessoa se registre"
invite: "Convidar" invite: "Convidar"
driveCapacityPerLocalAccount: "Capacidade do drive por usuário local" driveCapacityPerLocalAccount: "Capacidade do drive por usuário local"
driveCapacityPerRemoteAccount: "Capacidade do drive por usuário remoto" driveCapacityPerRemoteAccount: "Capacidade do drive por usuário remoto"
@ -448,6 +453,7 @@ totpDescription: "Digite a senha de uso único informado pelo aplicativo autenti
moderator: "Moderador" moderator: "Moderador"
moderation: "Moderação" moderation: "Moderação"
moderationNote: "Nota de moderação" moderationNote: "Nota de moderação"
moderationNoteDescription: "Você pode preencher notas que serão compartilhadas apenas com moderadores."
addModerationNote: "Adicionar nota de moderação" addModerationNote: "Adicionar nota de moderação"
moderationLogs: "Logs de moderação" moderationLogs: "Logs de moderação"
nUsersMentioned: "Postado por {n} pessoas" nUsersMentioned: "Postado por {n} pessoas"
@ -509,6 +515,10 @@ uiLanguage: "Idioma de exibição da interface "
aboutX: "Sobre {x}" aboutX: "Sobre {x}"
emojiStyle: "Estilo de emojis" emojiStyle: "Estilo de emojis"
native: "Nativo" native: "Nativo"
menuStyle: "Estilo do menu"
style: "Estilo"
drawer: "Gaveta"
popup: "Pop-up"
showNoteActionsOnlyHover: "Exibir as ações da nota somente ao passar o cursor sobre ela" showNoteActionsOnlyHover: "Exibir as ações da nota somente ao passar o cursor sobre ela"
showReactionsCount: "Ver o número de reações nas notas" showReactionsCount: "Ver o número de reações nas notas"
noHistory: "Ainda não há histórico" noHistory: "Ainda não há histórico"
@ -576,6 +586,7 @@ masterVolume: "volume principal"
notUseSound: "Desabilitar som" notUseSound: "Desabilitar som"
useSoundOnlyWhenActive: "Apenas reproduzir sons quando Misskey estiver aberto." useSoundOnlyWhenActive: "Apenas reproduzir sons quando Misskey estiver aberto."
details: "Detalhes" details: "Detalhes"
renoteDetails: "Detalhes da repostagem"
chooseEmoji: "Selecione um emoji" chooseEmoji: "Selecione um emoji"
unableToProcess: "Não é possível concluir a operação" unableToProcess: "Não é possível concluir a operação"
recentUsed: "Usado recentemente" recentUsed: "Usado recentemente"
@ -591,6 +602,8 @@ ascendingOrder: "Ascendente"
descendingOrder: "Descendente" descendingOrder: "Descendente"
scratchpad: "Bloco de rascunho" scratchpad: "Bloco de rascunho"
scratchpadDescription: "O Bloco de rascunho fornece um ambiente experimental para AiScript. Permite escrever, executar e verificar os resultados do código para interagir com o Misskey." scratchpadDescription: "O Bloco de rascunho fornece um ambiente experimental para AiScript. Permite escrever, executar e verificar os resultados do código para interagir com o Misskey."
uiInspector: "Inspecionador de interface"
uiInspectorDescription: "Você pode ver a lista de servidores de componentes de interface na memória. Componentes da interface serão gerados pela função Ui:C:."
output: "Resultado" output: "Resultado"
script: "Script" script: "Script"
disablePagesScript: "Desabilitar scripts nas páginas" disablePagesScript: "Desabilitar scripts nas páginas"
@ -671,7 +684,7 @@ smtpSecure: "Use SSL/TLS implícito para conexões SMTP"
smtpSecureInfo: "Desative esta opção ao utilizar STARTTLS." smtpSecureInfo: "Desative esta opção ao utilizar STARTTLS."
testEmail: "Testar envio de e-mail" testEmail: "Testar envio de e-mail"
wordMute: "Silenciar palavras" wordMute: "Silenciar palavras"
hardWordMute: "SIlenciamento pesado de palavra" hardWordMute: "Silenciar palavras (esconder posts)"
regexpError: "Erro na expressão regular" regexpError: "Erro na expressão regular"
regexpErrorDescription: "Ocorreu um erro na expressão regular na linha {line} da palavra mutada {tab}:" regexpErrorDescription: "Ocorreu um erro na expressão regular na linha {line} da palavra mutada {tab}:"
instanceMute: "Instâncias silenciadas" instanceMute: "Instâncias silenciadas"
@ -909,6 +922,7 @@ followersVisibility: "Visibilidade dos seguidores"
continueThread: "Ver mais desta conversa" continueThread: "Ver mais desta conversa"
deleteAccountConfirm: "Deseja realmente excluir a conta?" deleteAccountConfirm: "Deseja realmente excluir a conta?"
incorrectPassword: "Senha inválida." incorrectPassword: "Senha inválida."
incorrectTotp: "A senha de uso único está incorreta ou expirou."
voteConfirm: "Deseja confirmar o seu voto em \"{choice}\"?" voteConfirm: "Deseja confirmar o seu voto em \"{choice}\"?"
hide: "Ocultar" hide: "Ocultar"
useDrawerReactionPickerForMobile: "Mostrar em formato de gaveta" useDrawerReactionPickerForMobile: "Mostrar em formato de gaveta"
@ -933,6 +947,9 @@ oneHour: "1 hora"
oneDay: "1 dia" oneDay: "1 dia"
oneWeek: "1 semana" oneWeek: "1 semana"
oneMonth: "1 mês" oneMonth: "1 mês"
threeMonths: "3 meses"
oneYear: "1 ano"
threeDays: "3 dias"
reflectMayTakeTime: "As mudanças podem demorar a aparecer." reflectMayTakeTime: "As mudanças podem demorar a aparecer."
failedToFetchAccountInformation: "Não foi possível obter informações da conta" failedToFetchAccountInformation: "Não foi possível obter informações da conta"
rateLimitExceeded: "Taxa limite excedido" rateLimitExceeded: "Taxa limite excedido"
@ -1073,6 +1090,7 @@ retryAllQueuesConfirmTitle: "Gostaria de tentar novamente agora?"
retryAllQueuesConfirmText: "Isso irá temporariamente aumentar a carga do servidor." retryAllQueuesConfirmText: "Isso irá temporariamente aumentar a carga do servidor."
enableChartsForRemoteUser: "Gerar gráficos estatísticos de usuários remotos" enableChartsForRemoteUser: "Gerar gráficos estatísticos de usuários remotos"
enableChartsForFederatedInstances: "Gerar gráficos estatísticos de instâncias remotas" enableChartsForFederatedInstances: "Gerar gráficos estatísticos de instâncias remotas"
enableStatsForFederatedInstances: "Receber estatísticas de servidores remotos"
showClipButtonInNoteFooter: "Adicionar \"Clip\" ao menu de ação de notas" showClipButtonInNoteFooter: "Adicionar \"Clip\" ao menu de ação de notas"
reactionsDisplaySize: "Tamanho de exibição das reações" reactionsDisplaySize: "Tamanho de exibição das reações"
limitWidthOfReaction: "Limita o comprimento máximo de reações e as exibe em tamanho reduzido" limitWidthOfReaction: "Limita o comprimento máximo de reações e as exibe em tamanho reduzido"
@ -1259,7 +1277,49 @@ confirmWhenRevealingSensitiveMedia: "Confirmar ao revelar mídia sensível"
sensitiveMediaRevealConfirm: "Essa mídia pode ser sensível. Deseja revelá-la?" sensitiveMediaRevealConfirm: "Essa mídia pode ser sensível. Deseja revelá-la?"
createdLists: "Listas criadas" createdLists: "Listas criadas"
createdAntennas: "Antenas criadas" createdAntennas: "Antenas criadas"
fromX: "De {x}"
genEmbedCode: "Gerar código de embed"
noteOfThisUser: "Notas por este usuário"
clipNoteLimitExceeded: "Não é possível adicionar mais notas ao clipe." clipNoteLimitExceeded: "Não é possível adicionar mais notas ao clipe."
performance: "Desempenho"
modified: "Modificado"
discard: "Descartar"
thereAreNChanges: "Há {n} mudança(s)"
signinWithPasskey: "Entrar com Passkey"
unknownWebAuthnKey: "Passkey desconhecida"
passkeyVerificationFailed: "A verificação com Passkey falhou."
passkeyVerificationSucceededButPasswordlessLoginDisabled: "A verificação com Passkey teve êxito, mas a entrada sem senha está desabilitada."
messageToFollower: "Mensagem aos seguidores"
target: "Alvo"
testCaptchaWarning: "Essa função é utilizada apenas para testar CAPTCHA. <strong>Não a use num ambiente de produção.</strong>"
prohibitedWordsForNameOfUser: "Palavras proibidas para nomes de usuário"
prohibitedWordsForNameOfUserDescription: "Se quaisquer palavras dessa lista forem incluídas no nome de usuário, seu uso será negado. Usuários com privilégios de moderador não serão afetados pela restrição."
yourNameContainsProhibitedWords: "O seu nome possui palavras proibidas"
yourNameContainsProhibitedWordsDescription: "Se você deseja utilizar esse nome, entre em contato com o administrador do servidor."
thisContentsAreMarkedAsSigninRequiredByAuthor: "O autor exige que você esteja cadastrado para ver"
lockdown: "Lockdown"
pleaseSelectAccount: "Selecione uma conta"
availableRoles: "Cargos disponíveis"
acknowledgeNotesAndEnable: "Ative após compreender as precauções."
_accountSettings:
requireSigninToViewContents: "Exigir cadastro para ver o conteúdo"
requireSigninToViewContentsDescription1: "Exigir cadastro para ver todas as notas e outro conteúdo que você criou. Isso previne 'crawlers' de coletar os seus dados."
requireSigninToViewContentsDescription2: "Conteúdo não será exibido nas prévias de URL (OGP), incorporado em outras páginas web ou em servidores que não têm suporte a citações."
requireSigninToViewContentsDescription3: "Essas restrições podem não ser aplicadas a conteúdo federado de outros servidores."
makeNotesFollowersOnlyBefore: "Tornar notas passadas visíveis apenas para seguidores."
makeNotesFollowersOnlyBeforeDescription: "Com essa função ativada, apenas seguidores podem ver as notas anteriores à data e hora marcadas. Se isso for desativado, o status de publicação da nota será reestabelecido."
makeNotesHiddenBefore: "Tornar notas passadas privadas"
makeNotesHiddenBeforeDescription: "Com essa função ativada, apenas você poderá ver as notas anteriores à data e hora marcadas. Se isso for desativado, o status de publicação da nota será reestabelecido."
mayNotEffectForFederatedNotes: "Notas federadas a servidores remotos podem não ser afetadas."
notesHavePassedSpecifiedPeriod: "Notas que duraram um tempo específico."
notesOlderThanSpecifiedDateAndTime: "Notas antes do tempo específico."
_abuseUserReport:
forward: "Encaminhar"
forwardDescription: "Encaminhar a denúncia ao servidor remoto como uma conta anônima do sistema."
resolve: "Resolver"
accept: "Aceitar"
reject: "Rejeitar"
resolveTutorial: "Se a denúncia for legítima em conteúdo, selecione \"Aceitar\" para marcar o caso como resolvido afirmativamente.\nSe a denúncia for ilegítima em conteúdo, selecione \"Rejeitar\" para marcar o caso como resolvido negativamente."
_delivery: _delivery:
status: "Estado de entrega" status: "Estado de entrega"
stop: "Suspenso" stop: "Suspenso"
@ -1394,8 +1454,12 @@ _serverSettings:
fanoutTimelineDescription: "Melhora significativamente a performance do retorno da linha do tempo e reduz o impacto no banco de dados quando habilitado. Em contrapartida, o uso de memória do Redis aumentará. Considere desabilitar em casos de baixa disponibilidade de memória ou instabilidade do servidor." fanoutTimelineDescription: "Melhora significativamente a performance do retorno da linha do tempo e reduz o impacto no banco de dados quando habilitado. Em contrapartida, o uso de memória do Redis aumentará. Considere desabilitar em casos de baixa disponibilidade de memória ou instabilidade do servidor."
fanoutTimelineDbFallback: "\"Fallback\" ao banco de dados" fanoutTimelineDbFallback: "\"Fallback\" ao banco de dados"
fanoutTimelineDbFallbackDescription: "Quando habilitado, a linha do tempo irá recuar ao banco de dados caso consultas adicionais sejam feitas e ela não estiver em cache. Quando desabilitado, o impacto no servidor será reduzido ao eliminar o recuo, mas limita a quantidade de linhas do tempo que podem ser recebidas." fanoutTimelineDbFallbackDescription: "Quando habilitado, a linha do tempo irá recuar ao banco de dados caso consultas adicionais sejam feitas e ela não estiver em cache. Quando desabilitado, o impacto no servidor será reduzido ao eliminar o recuo, mas limita a quantidade de linhas do tempo que podem ser recebidas."
reactionsBufferingDescription: "Quando ativado, o desempenho durante a criação de uma reação será melhorado substancialmente, reduzindo a carga do banco de dados. Porém, a o uso de memória do Redis irá aumentar."
inquiryUrl: "URL de inquérito" inquiryUrl: "URL de inquérito"
inquiryUrlDescription: "Especifique um URL para um formulário de inquérito para a administração ou uma página web com informações de contato." inquiryUrlDescription: "Especifique um URL para um formulário de inquérito para a administração ou uma página web com informações de contato."
openRegistration: "Abrir a criação de contas"
openRegistrationWarning: "Abrir cadastros contém riscos. É recomendado apenas habilitá-los se houver um sistema de monitoramento contínuo e resolução imediata de problemas."
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "Se nenhuma atividade da moderação for detectada por um tempo, essa configuração será desativada para prevenir spam."
_accountMigration: _accountMigration:
moveFrom: "Migrar outra conta para essa" moveFrom: "Migrar outra conta para essa"
moveFromSub: "Criar um 'alias' a outra conta" moveFromSub: "Criar um 'alias' a outra conta"
@ -1727,6 +1791,11 @@ _role:
canSearchNotes: "Permitir a busca de notas" canSearchNotes: "Permitir a busca de notas"
canUseTranslator: "Uso do tradutor" canUseTranslator: "Uso do tradutor"
avatarDecorationLimit: "Número máximo de decorações de avatar que podem ser aplicadas" avatarDecorationLimit: "Número máximo de decorações de avatar que podem ser aplicadas"
canImportAntennas: "Permitir importação de antenas"
canImportBlocking: "Permitir importação de bloqueios"
canImportFollowing: "Permitir importação de usuários seguidos"
canImportMuting: "Permitir importação de silenciamentos"
canImportUserLists: "Permitir importação de listas"
_condition: _condition:
roleAssignedTo: "Atribuído a cargos manuais" roleAssignedTo: "Atribuído a cargos manuais"
isLocal: "Usuário local" isLocal: "Usuário local"
@ -2110,8 +2179,11 @@ _auth:
permissionAsk: "O aplicativo solicita as seguintes permissões" permissionAsk: "O aplicativo solicita as seguintes permissões"
pleaseGoBack: "Por favor, volte ao aplicativo" pleaseGoBack: "Por favor, volte ao aplicativo"
callback: "Retornando ao aplicativo" callback: "Retornando ao aplicativo"
accepted: "Acesso permitido"
denied: "Acesso negado" denied: "Acesso negado"
scopeUser: "Operar como o usuário a seguir"
pleaseLogin: "Por favor, entre para autorizar aplicativos." pleaseLogin: "Por favor, entre para autorizar aplicativos."
byClickingYouWillBeRedirectedToThisUrl: "Quando o acesso for permitido, você será redirecionado para o seguinte endereço"
_antennaSources: _antennaSources:
all: "Todas as notas" all: "Todas as notas"
homeTimeline: "Notas de usuários seguidos" homeTimeline: "Notas de usuários seguidos"
@ -2220,6 +2292,9 @@ _profile:
changeBanner: "Mudar banner" changeBanner: "Mudar banner"
verifiedLinkDescription: "Ao inserir um URL que contém um link para essa conta, um ícone de verificação será exibido ao lado do campo" verifiedLinkDescription: "Ao inserir um URL que contém um link para essa conta, um ícone de verificação será exibido ao lado do campo"
avatarDecorationMax: "Você pode adicionar até {max} decorações." avatarDecorationMax: "Você pode adicionar até {max} decorações."
followedMessage: "Mensagem exibida quando alguém segue você"
followedMessageDescription: "Você pode definir uma curta mensagem que será exibida aos usuários que seguirem você."
followedMessageDescriptionForLockedAccount: "Se você aceita pedidos de seguidor manualmente, isso será exibido quando você aceitá-los."
_exportOrImport: _exportOrImport:
allNotes: "Todas as notas" allNotes: "Todas as notas"
favoritedNotes: "Notas nos favoritos" favoritedNotes: "Notas nos favoritos"
@ -2282,9 +2357,6 @@ _pages:
newPage: "Criar uma Página" newPage: "Criar uma Página"
editPage: "Editar essa Página" editPage: "Editar essa Página"
readPage: "Ver a fonte dessa Página" readPage: "Ver a fonte dessa Página"
created: "Página criada com sucesso"
updated: "Página atualizada com sucesso"
deleted: "Página excluída com sucesso"
pageSetting: "Configurações da página" pageSetting: "Configurações da página"
nameAlreadyExists: "O URL de Página especificado já existe" nameAlreadyExists: "O URL de Página especificado já existe"
invalidNameTitle: "O URL de Página especificado é inválido" invalidNameTitle: "O URL de Página especificado é inválido"
@ -2358,6 +2430,8 @@ _notification:
renotedBySomeUsers: "{n} usuários repostaram a nota" renotedBySomeUsers: "{n} usuários repostaram a nota"
followedBySomeUsers: "{n} usuários te seguiram" followedBySomeUsers: "{n} usuários te seguiram"
flushNotification: "Limpar notificações" flushNotification: "Limpar notificações"
exportOfXCompleted: "Exportação de {x} foi concluída"
login: "Alguém entrou na conta"
_types: _types:
all: "Todas" all: "Todas"
note: "Novas notas" note: "Novas notas"
@ -2372,7 +2446,9 @@ _notification:
followRequestAccepted: "Aceitou pedidos de seguidor" followRequestAccepted: "Aceitou pedidos de seguidor"
roleAssigned: "Cargo dado" roleAssigned: "Cargo dado"
achievementEarned: "Conquista desbloqueada" achievementEarned: "Conquista desbloqueada"
exportCompleted: "A exportação foi concluída"
login: "Iniciar sessão" login: "Iniciar sessão"
test: "Notificação teste"
app: "Notificações de aplicativos conectados" app: "Notificações de aplicativos conectados"
_actions: _actions:
followBack: "te seguiu de volta" followBack: "te seguiu de volta"
@ -2438,7 +2514,10 @@ _webhookSettings:
abuseReport: "Quando receber um relatório de abuso" abuseReport: "Quando receber um relatório de abuso"
abuseReportResolved: "Quando relatórios de abuso forem resolvidos " abuseReportResolved: "Quando relatórios de abuso forem resolvidos "
userCreated: "Quando um usuário é criado" userCreated: "Quando um usuário é criado"
inactiveModeratorsWarning: "Quando moderadores estiverem inativos por um tempo"
inactiveModeratorsInvitationOnlyChanged: "Quando um moderador está inativo por um tempo e os cadastros passam a exigir convites"
deleteConfirm: "Você tem certeza de que deseja excluir o Webhook?" deleteConfirm: "Você tem certeza de que deseja excluir o Webhook?"
testRemarks: "Clique no botão à direita do interruptor para enviar um Webhook de teste com dados fictícios."
_abuseReport: _abuseReport:
_notificationRecipient: _notificationRecipient:
createRecipient: "Adicionar destinatário para relatórios de abuso" createRecipient: "Adicionar destinatário para relatórios de abuso"
@ -2482,6 +2561,8 @@ _moderationLogTypes:
markSensitiveDriveFile: "Arquivo marcado como sensível" markSensitiveDriveFile: "Arquivo marcado como sensível"
unmarkSensitiveDriveFile: "Arquivo desmarcado como sensível" unmarkSensitiveDriveFile: "Arquivo desmarcado como sensível"
resolveAbuseReport: "Relatório resolvido" resolveAbuseReport: "Relatório resolvido"
forwardAbuseReport: "Denúncia encaminhada"
updateAbuseReportNote: "Nota de moderação da denúncia atualizada"
createInvitation: "Convite gerado" createInvitation: "Convite gerado"
createAd: "Propaganda criada" createAd: "Propaganda criada"
deleteAd: "Propaganda excluída" deleteAd: "Propaganda excluída"
@ -2637,3 +2718,44 @@ _contextMenu:
app: "Aplicativo" app: "Aplicativo"
appWithShift: "Aplicativo com a tecla shift" appWithShift: "Aplicativo com a tecla shift"
native: "Nativo" native: "Nativo"
_embedCodeGen:
title: "Personalizar código do embed"
header: "Exibir cabeçalho"
autoload: "Carregar mais automaticamente (obsoleto)"
maxHeight: "Altura máxima"
maxHeightDescription: "Colocar em 0 desabilita a altura máxima. Especifique um valor para prevenir uma expansão vertical contínua."
maxHeightWarn: "O limite de altura máxima está desabilitado (0). Se isso não for intencional, insira um valor para a altura máxima."
previewIsNotActual: "A exibição difere do embed original porque ela excede o tamanho da tela de prévia."
rounded: "Tornar arredondado"
border: "Adicionar uma borda ao quadro externo"
applyToPreview: "Aplicar para a prévia"
generateCode: "Gerar código de embed"
codeGenerated: "O código foi gerado"
codeGeneratedDescription: "Coloque o código no seu website para incorporar o conteúdo."
_selfXssPrevention:
warning: "AVISO"
title: "\"Cole algo nessa tela\" é uma fraude"
description1: "Se você colar algo aqui, um usuário malicioso pode sabotar a sua conta ou roubar informações pessoais."
description2: "Se você não entender exatamente o que está colando, %cpare agora e feche essa janela."
description3: "Para mais informação, clique no link. {link}"
_followRequest:
recieved: "Aplicação recebida"
sent: "Aplicação enviada"
_remoteLookupErrors:
_federationNotAllowed:
title: "Não foi possível se comunicar com o servidor"
description: "Comunicação com esse servidor pode ter sido desabilitada ou o servidor pode ter sido bloqueado.\nPor favor, entre em contato com o administrador do servidor."
_uriInvalid:
title: "Endereço inválido"
description: "Há um problema com o endereço inserido. Por favor, confira se você não inseriu caracteres inválidos."
_requestFailed:
title: "Solicitação falhou"
description: "Comunicação com esse servidor falhou. O servidor pode estar inativo. Além disso, confira se você não inseriu um endereço inválido ou inexistente."
_responseInvalid:
title: "Resposta inválida"
description: "Foi possível comunicar com o servidor, porém os dados obtidos foram incorretos."
_responseInvalidIdHostNotMatch:
description: "O domínio do endereço inserido difere do domínio do endereço final. Se você estiver pesquisando por um servidor de terceiros, tente buscar novamente com um endereço que pode ser obtido através do servidor original."
_noSuchObject:
title: "Não encontrado"
description: "O recurso solicitado não foi encontrado, confira o endereço."

View file

@ -341,7 +341,6 @@ enableLocalTimeline: "Activează cronologia locală"
enableGlobalTimeline: "Activeaza cronologia globală" enableGlobalTimeline: "Activeaza cronologia globală"
disablingTimelinesInfo: "Administratorii și Moderatorii vor avea mereu access la toate cronologiile, chiar dacă nu sunt activate." disablingTimelinesInfo: "Administratorii și Moderatorii vor avea mereu access la toate cronologiile, chiar dacă nu sunt activate."
registration: "Inregistrare" registration: "Inregistrare"
enableRegistration: "Activează înregistrările pentru utilizatori noi"
invite: "Invită" invite: "Invită"
driveCapacityPerLocalAccount: "Capacitatea Drive-ului per utilizator local" driveCapacityPerLocalAccount: "Capacitatea Drive-ului per utilizator local"
driveCapacityPerRemoteAccount: "Capacitatea Drive-ului per utilizator extern" driveCapacityPerRemoteAccount: "Capacitatea Drive-ului per utilizator extern"
@ -734,3 +733,6 @@ _moderationLogTypes:
resetPassword: "Resetează parola" resetPassword: "Resetează parola"
_reversi: _reversi:
total: "Total" total: "Total"
_remoteLookupErrors:
_noSuchObject:
title: "Nu a fost găsit"

View file

@ -18,7 +18,7 @@ gotIt: "Ясно!"
cancel: "Отмена" cancel: "Отмена"
noThankYou: "Нет, спасибо" noThankYou: "Нет, спасибо"
enterUsername: "Введите имя пользователя" enterUsername: "Введите имя пользователя"
renotedBy: "{user} репостнул(а)" renotedBy: "{user} делает репост"
noNotes: "Нет ни одной заметки" noNotes: "Нет ни одной заметки"
noNotifications: "Нет уведомлений" noNotifications: "Нет уведомлений"
instance: "Экземпляр" instance: "Экземпляр"
@ -377,7 +377,6 @@ enableLocalTimeline: "Включить локальную ленту"
enableGlobalTimeline: "Включить глобальную ленту" enableGlobalTimeline: "Включить глобальную ленту"
disablingTimelinesInfo: "У администраторов и модераторов есть доступ ко всем лентам, даже если они отключены." disablingTimelinesInfo: "У администраторов и модераторов есть доступ ко всем лентам, даже если они отключены."
registration: "Регистрация" registration: "Регистрация"
enableRegistration: "Разрешить регистрацию"
invite: "Пригласить" invite: "Пригласить"
driveCapacityPerLocalAccount: "Объём Диска на одного локального пользователя" driveCapacityPerLocalAccount: "Объём Диска на одного локального пользователя"
driveCapacityPerRemoteAccount: "Объём Диска на одного пользователя с другого экземпляра" driveCapacityPerRemoteAccount: "Объём Диска на одного пользователя с другого экземпляра"
@ -1064,7 +1063,7 @@ hiddenTags: "Скрытые хештеги"
notesSearchNotAvailable: "Поиск заметок недоступен" notesSearchNotAvailable: "Поиск заметок недоступен"
license: "Лицензия" license: "Лицензия"
unfavoriteConfirm: "Удалить избранное?" unfavoriteConfirm: "Удалить избранное?"
myClips: "Мои клипы" myClips: "Мои подборки"
drivecleaner: "Очиститель дисков" drivecleaner: "Очиститель дисков"
retryAllQueuesNow: "Повторить все очереди сейчас" retryAllQueuesNow: "Повторить все очереди сейчас"
retryAllQueuesConfirmTitle: "Хотите попробовать ещё раз?" retryAllQueuesConfirmTitle: "Хотите попробовать ещё раз?"
@ -1106,16 +1105,18 @@ preservedUsernames: "Зарезервированные имена пользо
preservedUsernamesDescription: "Перечислите зарезервированные имена пользователей, отделяя их строками. Они станут недоступны при создании учётной записи. Это ограничение не применяется при создании учётной записи администраторами. Также, уже существующие учётные записи останутся без изменений." preservedUsernamesDescription: "Перечислите зарезервированные имена пользователей, отделяя их строками. Они станут недоступны при создании учётной записи. Это ограничение не применяется при создании учётной записи администраторами. Также, уже существующие учётные записи останутся без изменений."
createNoteFromTheFile: "Создать заметку из этого файла" createNoteFromTheFile: "Создать заметку из этого файла"
archive: "Архив" archive: "Архив"
unarchive: "Разархивировать"
channelArchiveConfirmTitle: "Переместить {name} в архив?" channelArchiveConfirmTitle: "Переместить {name} в архив?"
channelArchiveConfirmDescription: "Архивированные каналы перестанут отображаться в списке каналов или результатах поиска. В них также нельзя будет добавлять новые записи." channelArchiveConfirmDescription: "Архивированные каналы перестанут отображаться в списке каналов или результатах поиска. В них также нельзя будет добавлять новые записи."
thisChannelArchived: "Этот канал находится в архиве." thisChannelArchived: "Этот канал находится в архиве."
displayOfNote: "Отображение заметок" displayOfNote: "Отображение заметок"
initialAccountSetting: "Настройка профиля" initialAccountSetting: "Настройка профиля"
youFollowing: "Подписки" youFollowing: "Вы подписаны"
preventAiLearning: "Отказаться от использования в машинном обучении (Генеративный ИИ)" preventAiLearning: "Отказаться от использования в машинном обучении (Генеративный ИИ)"
preventAiLearningDescription: "Запросить краулеров не использовать опубликованный текст или изображения и т.д. для машинного обучения (Прогнозирующий / Генеративный ИИ) датасетов. Это достигается путём добавления \"noai\" HTTP-заголовка в ответ на соответствующий контент. Полного предотвращения через этот заголовок не избежать, так как он может быть просто проигнорирован." preventAiLearningDescription: "Запросить краулеров не использовать опубликованный текст или изображения и т.д. для машинного обучения (Прогнозирующий / Генеративный ИИ) датасетов. Это достигается путём добавления \"noai\" HTTP-заголовка в ответ на соответствующий контент. Полного предотвращения через этот заголовок не избежать, так как он может быть просто проигнорирован."
options: "Настройки ролей" options: "Настройки ролей"
specifyUser: "Указанный пользователь" specifyUser: "Указанный пользователь"
lookupConfirm: "Хотите узнать?"
openTagPageConfirm: "Открыть страницу этого хештега?" openTagPageConfirm: "Открыть страницу этого хештега?"
specifyHost: "Указать сайт" specifyHost: "Указать сайт"
failedToPreviewUrl: "Предварительный просмотр недоступен" failedToPreviewUrl: "Предварительный просмотр недоступен"
@ -1179,6 +1180,7 @@ keepOriginalFilename: "Сохранять исходное имя файла"
keepOriginalFilenameDescription: "Если вы выключите данную настройку, имена файлов будут автоматически заменены случайной строкой при загрузке." keepOriginalFilenameDescription: "Если вы выключите данную настройку, имена файлов будут автоматически заменены случайной строкой при загрузке."
alwaysConfirmFollow: "Всегда подтверждать подписку" alwaysConfirmFollow: "Всегда подтверждать подписку"
inquiry: "Связаться" inquiry: "Связаться"
messageToFollower: "Сообщение подписчикам"
_delivery: _delivery:
stop: "Заморожено" stop: "Заморожено"
_type: _type:
@ -1505,6 +1507,7 @@ _role:
rateLimitFactor: "Ограничение активности" rateLimitFactor: "Ограничение активности"
descriptionOfRateLimitFactor: "Меньшее значение — слабые ограничения, большее — сильные" descriptionOfRateLimitFactor: "Меньшее значение — слабые ограничения, большее — сильные"
canHideAds: "Может скрыть рекламу" canHideAds: "Может скрыть рекламу"
canImportFollowing: "Можно импортировать подписчиков"
_condition: _condition:
isLocal: "Местный" isLocal: "Местный"
isRemote: "Неместный" isRemote: "Неместный"
@ -1973,9 +1976,6 @@ _pages:
newPage: "Создать страницу" newPage: "Создать страницу"
editPage: "Править страницу" editPage: "Править страницу"
readPage: "Читать страницу" readPage: "Читать страницу"
created: "Страница успешно создана."
updated: "Страница успешно обновлена."
deleted: "Страница успешно удалена."
pageSetting: "Настройки страницы" pageSetting: "Настройки страницы"
nameAlreadyExists: "Указанный адрес страницы уже существует." nameAlreadyExists: "Указанный адрес страницы уже существует."
invalidNameTitle: "Указанный адрес страницы недопустим." invalidNameTitle: "Указанный адрес страницы недопустим."
@ -2144,3 +2144,6 @@ _hemisphere:
caption: "Используется для некоторых настроек клиента для определения сезона." caption: "Используется для некоторых настроек клиента для определения сезона."
_reversi: _reversi:
total: "Всего" total: "Всего"
_remoteLookupErrors:
_noSuchObject:
title: "Не найдено"

View file

@ -331,7 +331,6 @@ enableLocalTimeline: "Povoliť lokálnu časovú os"
enableGlobalTimeline: "Povoliť globálnu časovú os" enableGlobalTimeline: "Povoliť globálnu časovú os"
disablingTimelinesInfo: "Administrátori a moderátori majú vždy prístup ku všetkým časovým osiam, aj keď sú vypnuté." disablingTimelinesInfo: "Administrátori a moderátori majú vždy prístup ku všetkým časovým osiam, aj keď sú vypnuté."
registration: "Registrácia" registration: "Registrácia"
enableRegistration: "Povoliť registráciu nových používateľov"
invite: "Pozvať" invite: "Pozvať"
driveCapacityPerLocalAccount: "Kapacita disku pre používateľa" driveCapacityPerLocalAccount: "Kapacita disku pre používateľa"
driveCapacityPerRemoteAccount: "Kapacita disku pre vzdialeného používateľa" driveCapacityPerRemoteAccount: "Kapacita disku pre vzdialeného používateľa"
@ -1333,9 +1332,6 @@ _pages:
newPage: "Vytvoriť novú stránku" newPage: "Vytvoriť novú stránku"
editPage: "Upraviť túto stránku" editPage: "Upraviť túto stránku"
readPage: "Zobrazenie zdroja aktívne" readPage: "Zobrazenie zdroja aktívne"
created: "Stránka úspešne vytvorená"
updated: "Stránka úspešne upravená"
deleted: "Stránka úspešne odstránená"
pageSetting: "Nastavenia stránky" pageSetting: "Nastavenia stránky"
nameAlreadyExists: "Zadaná URL stránku už existuje" nameAlreadyExists: "Zadaná URL stránku už existuje"
invalidNameTitle: "Zadaná URL stránku je nesprávna" invalidNameTitle: "Zadaná URL stránku je nesprávna"
@ -1450,3 +1446,6 @@ _moderationLogTypes:
resetPassword: "Resetovať heslo" resetPassword: "Resetovať heslo"
_reversi: _reversi:
total: "Celkom" total: "Celkom"
_remoteLookupErrors:
_noSuchObject:
title: "Nenájdené"

View file

@ -333,7 +333,6 @@ disconnectService: "Koppla från"
enableLocalTimeline: "Aktivera lokal tidslinje" enableLocalTimeline: "Aktivera lokal tidslinje"
enableGlobalTimeline: "Aktivera global tidslinje" enableGlobalTimeline: "Aktivera global tidslinje"
registration: "Registrera" registration: "Registrera"
enableRegistration: "Aktivera registrering av nya användare"
invite: "Inbjudan" invite: "Inbjudan"
inMb: "I megabyte" inMb: "I megabyte"
bannerUrl: "URL till banner-bilden" bannerUrl: "URL till banner-bilden"
@ -385,6 +384,7 @@ passwordLessLoginDescription: "Tillåter lösenordsfri inloggning med endast en
resetPassword: "Återställ Lösenord" resetPassword: "Återställ Lösenord"
newPasswordIs: "Det nya lösenordet är \"{password}\"" newPasswordIs: "Det nya lösenordet är \"{password}\""
share: "Dela" share: "Dela"
markAsReadAllTalkMessages: "Markera alla meddelanden som lästa"
help: "Hjälp" help: "Hjälp"
close: "Stäng" close: "Stäng"
invites: "Inbjudan" invites: "Inbjudan"
@ -393,12 +393,15 @@ transfer: "Överför"
text: "Text" text: "Text"
enable: "Aktivera" enable: "Aktivera"
next: "Nästa" next: "Nästa"
retype: "Ange igen"
noMessagesYet: "Inga meddelanden än"
invitations: "Inbjudan" invitations: "Inbjudan"
invitationCode: "Inbjudningskod" invitationCode: "Inbjudningskod"
available: "Tillgängligt" available: "Tillgängligt"
weakPassword: "Svagt Lösenord" weakPassword: "Svagt Lösenord"
normalPassword: "Medel Lösenord" normalPassword: "Medel Lösenord"
strongPassword: "Starkt Lösenord" strongPassword: "Starkt Lösenord"
signinWith: "Logga in med {x}"
signinFailed: "Kan inte logga in. Det angivna användarnamnet eller lösenordet är felaktigt." signinFailed: "Kan inte logga in. Det angivna användarnamnet eller lösenordet är felaktigt."
or: "eller" or: "eller"
language: "Språk" language: "Språk"
@ -410,70 +413,124 @@ existingAccount: "Existerande konto"
regenerate: "Regenerera" regenerate: "Regenerera"
fontSize: "Textstorlek" fontSize: "Textstorlek"
openImageInNewTab: "Öppna bild i ny flik" openImageInNewTab: "Öppna bild i ny flik"
appearance: "Utseende"
clientSettings: "Klientinställningar" clientSettings: "Klientinställningar"
accountSettings: "Kontoinställningar" accountSettings: "Kontoinställningar"
numberOfDays: "Antal dagar" numberOfDays: "Antal dagar"
objectStorageUseSSL: "Använd SSL"
serverLogs: "Serverloggar"
deleteAll: "Radera alla" deleteAll: "Radera alla"
sounds: "Ljud" sounds: "Ljud"
sound: "Ljud" sound: "Ljud"
listen: "Lyssna" listen: "Lyssna"
none: "Ingen" none: "Ingen"
volume: "Volym" volume: "Volym"
notUseSound: "Inaktivera ljud"
chooseEmoji: "Välj en emoji" chooseEmoji: "Välj en emoji"
recentUsed: "Senast använd" recentUsed: "Senast använd"
install: "Installera" install: "Installera"
uninstall: "Avinstallera" uninstall: "Avinstallera"
deleteAllFiles: "Radera alla filer"
deleteAllFilesConfirm: "Är du säker på att du vill radera alla filer?"
menu: "Meny" menu: "Meny"
addItem: "Lägg till objekt"
serviceworkerInfo: "Måste vara aktiverad för pushnotiser." serviceworkerInfo: "Måste vara aktiverad för pushnotiser."
enableInfiniteScroll: "Ladda mer automatiskt" enableInfiniteScroll: "Ladda mer automatiskt"
enablePlayer: "Öppna videospelare" enablePlayer: "Öppna videospelare"
description: "Beskrivning"
permission: "Behörigheter" permission: "Behörigheter"
enableAll: "Aktivera alla" enableAll: "Aktivera alla"
disableAll: "Inaktivera alla"
edit: "Ändra" edit: "Ändra"
enableEmail: "Aktivera epost-utskick" enableEmail: "Aktivera epost-utskick"
email: "E-post" email: "E-post"
emailAddress: "E-postadress"
smtpHost: "Värd" smtpHost: "Värd"
smtpUser: "Användarnamn" smtpUser: "Användarnamn"
smtpPass: "Lösenord" smtpPass: "Lösenord"
emptyToDisableSmtpAuth: "Lämna användarnamn och lösenord tomt för att avaktivera SMTP verifiering" emptyToDisableSmtpAuth: "Lämna användarnamn och lösenord tomt för att avaktivera SMTP verifiering"
makeActive: "Aktivera"
copy: "Kopiera"
overview: "Översikt"
logs: "Logg" logs: "Logg"
database: "Databas"
channel: "kanal" channel: "kanal"
create: "Skapa" create: "Skapa"
other: "Mer" other: "Mer"
abuseReports: "Rapporter"
reportAbuse: "Rapporter"
reportAbuseOf: "Rapportera {name}"
abuseReported: "Din rapport har skickats. Tack så mycket."
send: "Skicka" send: "Skicka"
openInNewTab: "Öppna i ny flik" openInNewTab: "Öppna i ny flik"
createNew: "Skapa ny" createNew: "Skapa ny"
private: "Privat"
i18nInfo: "Misskey översätts till många olika språk av volontärer. Du kan hjälpa till med översättningen på {link}." i18nInfo: "Misskey översätts till många olika språk av volontärer. Du kan hjälpa till med översättningen på {link}."
accountInfo: "Kontoinformation" accountInfo: "Kontoinformation"
followersCount: "Antal följare"
yes: "Ja"
no: "Nej"
clips: "Klipp" clips: "Klipp"
duplicate: "Duplicera" duplicate: "Duplicera"
reloadToApplySetting: "Inställningen tillämpas efter sidan laddas om. Vill du göra det nu?" reloadToApplySetting: "Inställningen tillämpas efter sidan laddas om. Vill du göra det nu?"
clearCache: "Rensa cache" clearCache: "Rensa cache"
onlineUsersCount: "{n} användare är online" onlineUsersCount: "{n} användare är online"
nUsers: "{n} användare"
nNotes: "{n} Noter" nNotes: "{n} Noter"
backgroundColor: "Bakgrundsbild" backgroundColor: "Bakgrundsbild"
textColor: "Text" textColor: "Text"
saveAs: "Spara som..."
saveConfirm: "Spara ändringar?"
youAreRunningUpToDateClient: "Klienten du använder är uppdaterat." youAreRunningUpToDateClient: "Klienten du använder är uppdaterat."
newVersionOfClientAvailable: "Ny version av klienten är tillgänglig." newVersionOfClientAvailable: "Ny version av klienten är tillgänglig."
editCode: "Redigera kod"
publish: "Publicera" publish: "Publicera"
typingUsers: "{users} skriver" typingUsers: "{users} skriver"
goBack: "Tillbaka"
addDescription: "Lägg till beskrivning"
info: "Om" info: "Om"
online: "Online"
active: "Aktiv"
offline: "Offline"
enabled: "Aktiverad" enabled: "Aktiverad"
quickAction: "Snabbåtgärder"
user: "Användare" user: "Användare"
gallery: "Galleri"
popularPosts: "Populära inlägg"
customCssWarn: "Den här inställningen borde bara ändrats av en som har rätta kunskaper. Om du ställer in det här fel så kan klienten sluta fungera rätt." customCssWarn: "Den här inställningen borde bara ändrats av en som har rätta kunskaper. Om du ställer in det här fel så kan klienten sluta fungera rätt."
global: "Global" global: "Global"
squareAvatars: "Visa fyrkantiga profilbilder" squareAvatars: "Visa fyrkantiga profilbilder"
sent: "Skicka" sent: "Skicka"
searchResult: "Sökresultat"
learnMore: "Läs mer"
misskeyUpdated: "Misskey har uppdaterats!" misskeyUpdated: "Misskey har uppdaterats!"
translate: "Översätt"
controlPanel: "Kontrollpanel"
manageAccounts: "Hantera konton"
incorrectPassword: "Fel lösenord." incorrectPassword: "Fel lösenord."
hide: "Dölj"
welcomeBackWithName: "Välkommen tillbaka, {name}" welcomeBackWithName: "Välkommen tillbaka, {name}"
clickToFinishEmailVerification: "Tryck på [{ok}] för att slutföra bekräftelsen på e-postadressen." clickToFinishEmailVerification: "Tryck på [{ok}] för att slutföra bekräftelsen på e-postadressen."
size: "Storlek"
searchByGoogle: "Sök" searchByGoogle: "Sök"
indefinitely: "Aldrig"
tenMinutes: "10 minuter"
oneHour: "En timme"
oneDay: "En dag"
oneWeek: "En vecka"
oneMonth: "En månad"
threeMonths: "3 månader"
oneYear: "1 år"
threeDays: "3 dagar"
file: "Filer" file: "Filer"
deleteAccount: "Radera konto"
label: "Etikett"
cannotUploadBecauseNoFreeSpace: "Kan inte ladda upp filen för att det finns inget lagringsutrymme kvar." cannotUploadBecauseNoFreeSpace: "Kan inte ladda upp filen för att det finns inget lagringsutrymme kvar."
cannotUploadBecauseExceedsFileSizeLimit: "Kan inte ladda upp filen för att den är större än filstorleksgränsen." cannotUploadBecauseExceedsFileSizeLimit: "Kan inte ladda upp filen för att den är större än filstorleksgränsen."
beta: "Beta"
enableAutoSensitive: "Automatisk NSFW markering" enableAutoSensitive: "Automatisk NSFW markering"
enableAutoSensitiveDescription: "Tillåter automatiskt detektering och marketing av NSFW media genom Maskininlärning när möjligt. Även om denna inställningen är avaktiverad, kan det vara aktiverat på hela instansen." enableAutoSensitiveDescription: "Tillåter automatiskt detektering och marketing av NSFW media genom Maskininlärning när möjligt. Även om denna inställningen är avaktiverad, kan det vara aktiverat på hela instansen."
move: "Flytta"
pushNotification: "Pushnotiser" pushNotification: "Pushnotiser"
subscribePushNotification: "Aktivera pushnotiser" subscribePushNotification: "Aktivera pushnotiser"
unsubscribePushNotification: "Avaktivera pushnotiser" unsubscribePushNotification: "Avaktivera pushnotiser"
@ -482,38 +539,86 @@ pushNotificationNotSupported: "Din webbläsare eller instans har inte stöd för
windowMaximize: "Maximera" windowMaximize: "Maximera"
windowMinimize: "Minimera" windowMinimize: "Minimera"
windowRestore: "Återställ" windowRestore: "Återställ"
tools: "Verktyg"
like: "Gilla"
pleaseDonate: "Misskey är en gratis programvara som används på {host}. Donera gärna för att göra utvecklingen ständigt, tack!" pleaseDonate: "Misskey är en gratis programvara som används på {host}. Donera gärna för att göra utvecklingen ständigt, tack!"
roles: "Roll"
role: "Roll"
color: "Färg"
resetPasswordConfirm: "Återställ verkligen ditt lösenord?" resetPasswordConfirm: "Återställ verkligen ditt lösenord?"
dataSaver: "Databesparing" dataSaver: "Databesparing"
icon: "Profilbild" icon: "Profilbild"
forYou: "För dig"
replies: "Svara" replies: "Svara"
renotes: "Omnotera" renotes: "Omnotera"
loadReplies: "Visa svar"
loadConversation: "Visa konversation"
authentication: "Autentisering"
sourceCode: "Källkod"
doReaction: "Lägg till reaktion"
code: "Kod"
gameRetry: "Försök igen"
inquiry: "Kontakt"
tryAgain: "Försök igen senare"
signinWithPasskey: "Logga in med nyckel"
unknownWebAuthnKey: "Okänd nyckel"
_delivery: _delivery:
stop: "Suspenderad" stop: "Suspenderad"
_type: _type:
none: "Publiceras" none: "Publiceras"
_initialAccountSetting:
profileSetting: "Profilinställningar"
_initialTutorial:
_reaction:
title: "Vad är reaktioner?"
_achievements: _achievements:
_types: _types:
_open3windows: _open3windows:
title: "Flera Fönster" title: "Flera Fönster"
description: "Ha minst 3 fönster öppna samtidigt" description: "Ha minst 3 fönster öppna samtidigt"
_role:
edit: "Redigera roll"
_ffVisibility: _ffVisibility:
public: "Publicera" public: "Publicera"
private: "Privat"
_accountDelete:
accountDelete: "Radera konto"
_ad:
back: "Tillbaka"
_gallery:
like: "Gilla"
_email: _email:
_follow: _follow:
title: "följde dig" title: "följde dig"
_aboutMisskey:
source: "Källkod"
projectMembers: "Projektmedlemmar"
_channel: _channel:
setBanner: "Välj banner" setBanner: "Välj banner"
removeBanner: "Ta bort banner" removeBanner: "Ta bort banner"
nameAndDescription: "Namn och beskrivning"
_menuDisplay:
hide: "Dölj"
_theme: _theme:
description: "Beskrivning"
color: "Färg"
keys: keys:
mention: "Nämn" mention: "Nämn"
renote: "Omnotera" renote: "Omnotera"
_sfx: _sfx:
note: "Noter" note: "Noter"
notification: "Notifikationer" notification: "Notifikationer"
_ago:
justNow: "Just nu"
_2fa: _2fa:
step3Title: "Ange en autentiseringskod"
renewTOTPCancel: "Nej tack" renewTOTPCancel: "Nej tack"
_permissions:
"read:reactions": "Visa dina reaktioner"
"write:reactions": "Redigera dina reaktioner"
"write:admin:delete-account": "Radera användarkonto"
"write:admin:roles": "Hantera roller"
"read:admin:roles": "Visa roller"
_antennaSources: _antennaSources:
all: "Alla noter" all: "Alla noter"
homeTimeline: "Noter från följda användare" homeTimeline: "Noter från följda användare"
@ -530,13 +635,19 @@ _widgets:
_userList: _userList:
chooseList: "Välj lista" chooseList: "Välj lista"
_cw: _cw:
hide: "Dölj"
show: "Ladda mer" show: "Ladda mer"
chars: "{count} tecken"
files: "{count} fil(er)"
_poll:
infinite: "Aldrig"
_visibility: _visibility:
home: "Hem" home: "Hem"
followers: "Följare" followers: "Följare"
_profile: _profile:
name: "Namn" name: "Namn"
username: "Användarnamn" username: "Användarnamn"
metadataLabel: "Etikett"
changeAvatar: "Ändra profilbild" changeAvatar: "Ändra profilbild"
changeBanner: "Ändra banner" changeBanner: "Ändra banner"
_exportOrImport: _exportOrImport:
@ -547,9 +658,12 @@ _exportOrImport:
userLists: "Listor" userLists: "Listor"
_charts: _charts:
federation: "Federation" federation: "Federation"
activeUsers: "Aktiva användare"
_timelines: _timelines:
home: "Hem" home: "Hem"
global: "Global" global: "Global"
_play:
summary: "Beskrivning"
_pages: _pages:
blocks: blocks:
image: "Bilder" image: "Bilder"
@ -567,6 +681,8 @@ _notification:
reply: "Svara" reply: "Svara"
renote: "Omnotera" renote: "Omnotera"
_deck: _deck:
addColumn: "Lägg till kolumn"
deleteProfile: "Radera profil"
_columns: _columns:
notifications: "Notifikationer" notifications: "Notifikationer"
tl: "Tidslinje" tl: "Tidslinje"
@ -584,3 +700,10 @@ _abuseReport:
_moderationLogTypes: _moderationLogTypes:
suspend: "Suspendera" suspend: "Suspendera"
resetPassword: "Återställ Lösenord" resetPassword: "Återställ Lösenord"
_reversi:
blackOrWhite: "Svart/Vit"
rules: "Regler"
black: "Svart"
white: "Vit"
_selfXssPrevention:
warning: "VARNING"

View file

@ -382,7 +382,6 @@ enableLocalTimeline: "เปิดใช้งานไทม์ไลน์ท
enableGlobalTimeline: "เปิดใช้งานไทม์ไลน์ทั่วโลก" enableGlobalTimeline: "เปิดใช้งานไทม์ไลน์ทั่วโลก"
disablingTimelinesInfo: "ผู้ดูแลระบบและผู้ควบคุมจะสามารถเข้าถึงไทม์ไลน์ทั้งหมด ถึงแม้ว่าจะไม่ได้เปิดใช้งานก็ตาม" disablingTimelinesInfo: "ผู้ดูแลระบบและผู้ควบคุมจะสามารถเข้าถึงไทม์ไลน์ทั้งหมด ถึงแม้ว่าจะไม่ได้เปิดใช้งานก็ตาม"
registration: "ลงทะเบียน" registration: "ลงทะเบียน"
enableRegistration: "เปิดใช้งานการลงทะเบียนผู้ใช้ใหม่"
invite: "คำเชิญ" invite: "คำเชิญ"
driveCapacityPerLocalAccount: "ความจุของไดรฟ์ต่อผู้ใช้ท้องถิ่น" driveCapacityPerLocalAccount: "ความจุของไดรฟ์ต่อผู้ใช้ท้องถิ่น"
driveCapacityPerRemoteAccount: "ความจุของไดรฟ์ต่อผู้ใช้ระยะไกล" driveCapacityPerRemoteAccount: "ความจุของไดรฟ์ต่อผู้ใช้ระยะไกล"
@ -2332,9 +2331,6 @@ _pages:
newPage: "สร้างหน้าเพจใหม่" newPage: "สร้างหน้าเพจใหม่"
editPage: "แก้ไขหน้าเพจ" editPage: "แก้ไขหน้าเพจ"
readPage: "กำลังดูแหล่งที่มาของเพจนี้" readPage: "กำลังดูแหล่งที่มาของเพจนี้"
created: "สร้างหน้าเพจสำเร็จเรียบร้อยแล้ว"
updated: "แก้ไขหน้าเพจสำเร็จเรียบร้อยแล้ว"
deleted: "ลบหน้าเพจสำเร็จเรียบร้อยแล้ว"
pageSetting: "การตั้งค่าหน้าเพจ" pageSetting: "การตั้งค่าหน้าเพจ"
nameAlreadyExists: "URL ของหน้าที่ระบุนั้นมีอยู่แล้ว" nameAlreadyExists: "URL ของหน้าที่ระบุนั้นมีอยู่แล้ว"
invalidNameTitle: "URL ของหน้าที่ระบุนั้นไม่ถูกต้อง" invalidNameTitle: "URL ของหน้าที่ระบุนั้นไม่ถูกต้อง"
@ -2710,3 +2706,6 @@ _embedCodeGen:
generateCode: "สร้างโค้ดสำหรับการฝัง" generateCode: "สร้างโค้ดสำหรับการฝัง"
codeGenerated: "รหัสถูกสร้างขึ้นแล้ว" codeGenerated: "รหัสถูกสร้างขึ้นแล้ว"
codeGeneratedDescription: "นำโค้ดที่สร้างแล้วไปวางในเว็บไซต์ของคุณเพื่อฝังเนื้อหา" codeGeneratedDescription: "นำโค้ดที่สร้างแล้วไปวางในเว็บไซต์ของคุณเพื่อฝังเนื้อหา"
_remoteLookupErrors:
_noSuchObject:
title: "ไม่พบหน้าที่ต้องการ"

View file

@ -8,6 +8,7 @@ search: "Arama"
notifications: "Bildirim" notifications: "Bildirim"
username: "Kullanıcı Adı" username: "Kullanıcı Adı"
password: "Şifre" password: "Şifre"
initialPasswordForSetup: ""
forgotPassword: "şifremi unuttum" forgotPassword: "şifremi unuttum"
fetchingAsApObject: "從聯邦宇宙取得中..." fetchingAsApObject: "從聯邦宇宙取得中..."
ok: "TAMAM" ok: "TAMAM"
@ -344,7 +345,6 @@ today: "Bugün"
monthX: "{month} ay" monthX: "{month} ay"
pages: "Sayfalar" pages: "Sayfalar"
integration: "Entegrasyon" integration: "Entegrasyon"
enableRegistration: "Kayıtlara izin ver"
basicInfo: "Temel bilgiler" basicInfo: "Temel bilgiler"
pinnedUsers: "Sabitlenmiş kullanıcılar" pinnedUsers: "Sabitlenmiş kullanıcılar"
pinnedNotes: "Sabitlenen" pinnedNotes: "Sabitlenen"

View file

@ -334,7 +334,6 @@ enableLocalTimeline: "Увімкнути локальну стрічку"
enableGlobalTimeline: "Увімкнути глобальну стрічку" enableGlobalTimeline: "Увімкнути глобальну стрічку"
disablingTimelinesInfo: "Адміністратори та модератори завжди мають доступ до всіх стрічок, навіть якщо вони вимкнуті." disablingTimelinesInfo: "Адміністратори та модератори завжди мають доступ до всіх стрічок, навіть якщо вони вимкнуті."
registration: "Реєстрація" registration: "Реєстрація"
enableRegistration: "Дозволити реєстрацію"
invite: "Запросити" invite: "Запросити"
driveCapacityPerLocalAccount: "Об'єм диска на одного локального користувача" driveCapacityPerLocalAccount: "Об'єм диска на одного локального користувача"
driveCapacityPerRemoteAccount: "Об'єм диска на одного віддаленого користувача" driveCapacityPerRemoteAccount: "Об'єм диска на одного віддаленого користувача"
@ -1514,9 +1513,6 @@ _pages:
newPage: "Створити сторінку" newPage: "Створити сторінку"
editPage: "Редагувати сторінку" editPage: "Редагувати сторінку"
readPage: "Перегляд вихідного коду" readPage: "Перегляд вихідного коду"
created: "Сторінка успішно створена."
updated: "Сторінка успішно оновлена."
deleted: "Сторінку видалено"
pageSetting: "Налаштування сторінки" pageSetting: "Налаштування сторінки"
nameAlreadyExists: "Вказана адреса сторінки вже існує." nameAlreadyExists: "Вказана адреса сторінки вже існує."
invalidNameTitle: "Вказана адреса сторінки неприпустима." invalidNameTitle: "Вказана адреса сторінки неприпустима."
@ -1625,3 +1621,6 @@ _moderationLogTypes:
resetPassword: "Скинути пароль" resetPassword: "Скинути пароль"
_reversi: _reversi:
total: "Всього" total: "Всього"
_remoteLookupErrors:
_noSuchObject:
title: "Не знайдено"

View file

@ -349,7 +349,6 @@ enableLocalTimeline: "Mahalliy vaqt mintaqasini yoqing"
enableGlobalTimeline: "Global vaqt mintaqasini yoqing" enableGlobalTimeline: "Global vaqt mintaqasini yoqing"
disablingTimelinesInfo: "Administratorlar va Moderatorlar har doim barcha vaqt jadvallariga kirish huquqiga ega bo'ladilar, hatto ular yoqilmagan bo'lsa ham." disablingTimelinesInfo: "Administratorlar va Moderatorlar har doim barcha vaqt jadvallariga kirish huquqiga ega bo'ladilar, hatto ular yoqilmagan bo'lsa ham."
registration: "Ro'yxatdan o'tish" registration: "Ro'yxatdan o'tish"
enableRegistration: "Ro'yxatdan o'tishni yoqing"
invite: "Taklif qilish" invite: "Taklif qilish"
driveCapacityPerLocalAccount: "Har bir mahalliy foydalanuvchi uchun disk maydoni" driveCapacityPerLocalAccount: "Har bir mahalliy foydalanuvchi uchun disk maydoni"
driveCapacityPerRemoteAccount: "Har bir masofaviy foydalanuvchi uchun disk maydoni" driveCapacityPerRemoteAccount: "Har bir masofaviy foydalanuvchi uchun disk maydoni"
@ -1005,9 +1004,6 @@ _play:
_pages: _pages:
newPage: "Yangi Sahifa yaratish" newPage: "Yangi Sahifa yaratish"
editPage: "Ushbu Sahifani tahrirlash" editPage: "Ushbu Sahifani tahrirlash"
created: "Sahifa muvaffaqiyatli yaratildi"
updated: "Sahifa muvaffaqiyatli tahrirlandi"
deleted: "Sahifa muvaffaqiyatli o'chirildi"
pageSetting: "Sahifa sozlamalari" pageSetting: "Sahifa sozlamalari"
nameAlreadyExists: "Ko'rsatilgan Sahifa URL'i allaqachon mavjud" nameAlreadyExists: "Ko'rsatilgan Sahifa URL'i allaqachon mavjud"
invalidNameTitle: "Ko'rsatilgan Sahifa URL'i yaroqsiz" invalidNameTitle: "Ko'rsatilgan Sahifa URL'i yaroqsiz"
@ -1095,3 +1091,6 @@ _moderationLogTypes:
resetPassword: "Parolni tiklash" resetPassword: "Parolni tiklash"
_reversi: _reversi:
total: "Jami" total: "Jami"
_remoteLookupErrors:
_noSuchObject:
title: "Topilmadi"

View file

@ -8,6 +8,9 @@ search: "Tìm kiếm"
notifications: "Thông báo" notifications: "Thông báo"
username: "Tên người dùng" username: "Tên người dùng"
password: "Mật khẩu" password: "Mật khẩu"
initialPasswordForSetup: "Mật khẩu ban đầu để thiết lập"
initialPasswordIsIncorrect: "Mật khẩu ban đầu đã nhập sai"
initialPasswordForSetupDescription: "Nếu bạn tự cài đặt Misskey, hãy sử dụng mật khẩu ban đầu của bạn đã nhập trong tệp cấu hình.\nNếu bạn đang sử dụng dịch vụ nào đó giống như dịch vụ lưu trữ của Misskey, hãy sử dụng mật khẩu ban đầu được cung cấp.\nNếu bạn chưa đặt mật khẩu ban đầu, vui lòng để trống và tiếp tục."
forgotPassword: "Quên mật khẩu" forgotPassword: "Quên mật khẩu"
fetchingAsApObject: "Đang nạp dữ liệu từ Fediverse..." fetchingAsApObject: "Đang nạp dữ liệu từ Fediverse..."
ok: "Đồng ý" ok: "Đồng ý"
@ -354,7 +357,6 @@ enableLocalTimeline: "Bật bảng tin máy chủ"
enableGlobalTimeline: "Bật bảng tin liên hợp" enableGlobalTimeline: "Bật bảng tin liên hợp"
disablingTimelinesInfo: "Quản trị viên và Kiểm duyệt viên luôn có quyền truy cập mọi bảng tin, kể cả khi chúng không được bật." disablingTimelinesInfo: "Quản trị viên và Kiểm duyệt viên luôn có quyền truy cập mọi bảng tin, kể cả khi chúng không được bật."
registration: "Đăng ký" registration: "Đăng ký"
enableRegistration: "Cho phép đăng ký mới"
invite: "Mời" invite: "Mời"
driveCapacityPerLocalAccount: "Dung lượng ổ đĩa tối đa cho mỗi người dùng" driveCapacityPerLocalAccount: "Dung lượng ổ đĩa tối đa cho mỗi người dùng"
driveCapacityPerRemoteAccount: "Dung lượng ổ đĩa tối đa cho mỗi người dùng từ xa" driveCapacityPerRemoteAccount: "Dung lượng ổ đĩa tối đa cho mỗi người dùng từ xa"
@ -1800,9 +1802,6 @@ _pages:
newPage: "Tạo Trang mới" newPage: "Tạo Trang mới"
editPage: "Sửa Trang này" editPage: "Sửa Trang này"
readPage: "Xem mã nguồn Trang này" readPage: "Xem mã nguồn Trang này"
created: "Trang đã được tạo thành công"
updated: "Trang đã được cập nhật thành công"
deleted: "Trang đã được xóa thành công"
pageSetting: "Cài đặt trang" pageSetting: "Cài đặt trang"
nameAlreadyExists: "URL Trang đã tồn tại" nameAlreadyExists: "URL Trang đã tồn tại"
invalidNameTitle: "URL Trang không hợp lệ" invalidNameTitle: "URL Trang không hợp lệ"
@ -1928,3 +1927,6 @@ _moderationLogTypes:
createInvitation: "Tạo lời mời" createInvitation: "Tạo lời mời"
_reversi: _reversi:
total: "Tổng cộng" total: "Tổng cộng"
_remoteLookupErrors:
_noSuchObject:
title: "Không tìm thấy"

View file

@ -5,6 +5,7 @@ introMisskey: "欢迎Misskey是一个开源的、去中心化的“微博客
poweredByMisskeyDescription: "{name} 是开源平台 <b>Misskey</b> 的服务器之一。" poweredByMisskeyDescription: "{name} 是开源平台 <b>Misskey</b> 的服务器之一。"
monthAndDay: "{month}月 {day}日" monthAndDay: "{month}月 {day}日"
search: "搜索" search: "搜索"
reset: "重置"
notifications: "通知" notifications: "通知"
username: "用户名" username: "用户名"
password: "密码" password: "密码"
@ -48,6 +49,7 @@ pin: "置顶"
unpin: "取消置顶" unpin: "取消置顶"
copyContent: "复制内容" copyContent: "复制内容"
copyLink: "复制链接" copyLink: "复制链接"
copyRemoteLink: "复制远程链接"
copyLinkRenote: "复制转帖链接" copyLinkRenote: "复制转帖链接"
delete: "删除" delete: "删除"
deleteAndEdit: "删除并编辑" deleteAndEdit: "删除并编辑"
@ -107,7 +109,7 @@ follow: "关注"
followRequest: "关注申请" followRequest: "关注申请"
followRequests: "关注申请" followRequests: "关注申请"
unfollow: "取消关注" unfollow: "取消关注"
followRequestPending: "关注请求批准" followRequestPending: "关注请求批准"
enterEmoji: "输入表情符号" enterEmoji: "输入表情符号"
renote: "转发" renote: "转发"
unrenote: "取消转发" unrenote: "取消转发"
@ -136,21 +138,21 @@ overwriteFromPinnedEmojisForReaction: "从「置顶(回应)」设置覆盖"
overwriteFromPinnedEmojis: "从全局设置覆盖" overwriteFromPinnedEmojis: "从全局设置覆盖"
reactionSettingDescription2: "拖动重新排序,单击删除,点击 + 添加。" reactionSettingDescription2: "拖动重新排序,单击删除,点击 + 添加。"
rememberNoteVisibility: "保存上次设置的可见性" rememberNoteVisibility: "保存上次设置的可见性"
attachCancel: "删除附件" attachCancel: "取消添加附件"
deleteFile: "删除文件" deleteFile: "删除文件"
markAsSensitive: "标记为敏感内容" markAsSensitive: "标记为敏感内容"
unmarkAsSensitive: "取消标记为敏感内容" unmarkAsSensitive: "取消标记为敏感内容"
enterFileName: "输入文件名" enterFileName: "输入文件名"
mute: "屏蔽" mute: "屏蔽"
unmute: "解除静音" unmute: "取消隐藏"
renoteMute: "屏蔽转帖" renoteMute: "隐藏转帖"
renoteUnmute: "解除屏蔽转帖" renoteUnmute: "解除隐藏转帖"
block: "拉黑" block: "屏蔽"
unblock: "取消拉黑" unblock: "取消屏蔽"
suspend: "冻结" suspend: "冻结"
unsuspend: "解除冻结" unsuspend: "解除冻结"
blockConfirm: "确定要拉黑吗?" blockConfirm: "确定要屏蔽吗?"
unblockConfirm: "确定要解除拉黑吗?" unblockConfirm: "确定要取消屏蔽吗?"
suspendConfirm: "要冻结吗?" suspendConfirm: "要冻结吗?"
unsuspendConfirm: "要解除冻结吗?" unsuspendConfirm: "要解除冻结吗?"
selectList: "选择列表" selectList: "选择列表"
@ -195,7 +197,7 @@ setWallpaper: "设置壁纸"
removeWallpaper: "移除壁纸" removeWallpaper: "移除壁纸"
searchWith: "搜索:{q}" searchWith: "搜索:{q}"
youHaveNoLists: "列表为空" youHaveNoLists: "列表为空"
followConfirm: "确定要关注 {name} 吗?" followConfirm: "确定要关注 {name} 吗?"
proxyAccount: "代理账户" proxyAccount: "代理账户"
proxyAccountDescription: "代理账户是在某些情况下替代用户进行远程关注用的账户。 例如说,当用户将一位远程用户放入一个列表中时,如果本地服务器上没有任何人关注这位远程用户,则这位远程用户的账户活动将不会被送到本地服务器上。作为替代,此时将使用代理账户进行关注。" proxyAccountDescription: "代理账户是在某些情况下替代用户进行远程关注用的账户。 例如说,当用户将一位远程用户放入一个列表中时,如果本地服务器上没有任何人关注这位远程用户,则这位远程用户的账户活动将不会被送到本地服务器上。作为替代,此时将使用代理账户进行关注。"
host: "主机名" host: "主机名"
@ -213,7 +215,7 @@ charts: "图表"
perHour: "每小时" perHour: "每小时"
perDay: "每天" perDay: "每天"
stopActivityDelivery: "停止发送活动" stopActivityDelivery: "停止发送活动"
blockThisInstance: "封锁此服务器" blockThisInstance: "屏蔽此服务器"
silenceThisInstance: "静音此服务器" silenceThisInstance: "静音此服务器"
mediaSilenceThisInstance: "隐藏此服务器的媒体文件" mediaSilenceThisInstance: "隐藏此服务器的媒体文件"
operations: "操作" operations: "操作"
@ -229,24 +231,24 @@ disk: "存储"
instanceInfo: "服务器信息" instanceInfo: "服务器信息"
statistics: "统计" statistics: "统计"
clearQueue: "清除队列" clearQueue: "清除队列"
clearQueueConfirmTitle: "确定清除队列?" clearQueueConfirmTitle: "确定清除队列"
clearQueueConfirmText: "未送达的帖子将不会被投递。 通常无需执行此操作。" clearQueueConfirmText: "未送达的帖子将不会被投递。 通常无需执行此操作。"
clearCachedFiles: "清除缓存" clearCachedFiles: "清除缓存"
clearCachedFilesConfirm: "确定要清除所有缓存的远程文件" clearCachedFilesConfirm: "确定要清除所有缓存的远程文件"
blockedInstances: "被封锁的服务器" blockedInstances: "被屏蔽的服务器"
blockedInstancesDescription: "设定要封锁的服务器,以换行分隔。被封锁的服务器将无法与本服务器进行交换通讯。子域名也同样会被封锁。" blockedInstancesDescription: "设定要屏蔽的服务器,以换行分隔。被屏蔽的服务器将无法与本服务器进行交换通讯。子域名也同样会被屏蔽。"
silencedInstances: "被静音的服务器" silencedInstances: "被静音的服务器"
silencedInstancesDescription: "设置要静音的服务器,以换行分隔。被静音的服务器内所有的账户将默认处于「静音」状态,仅能发送关注请求,并且在未关注状态下无法提及本地账户。被阻止的实例不受影响。" silencedInstancesDescription: "设置要静音的服务器,以换行分隔。被静音的服务器内所有的账户将默认处于「静音」状态,仅能发送关注请求,并且在未关注状态下无法提及本地账户。被阻止的实例不受影响。"
mediaSilencedInstances: "已隐藏媒体文件的服务器" mediaSilencedInstances: "已隐藏媒体文件的服务器"
mediaSilencedInstancesDescription: "设置要隐藏媒体文件的服务器,以换行分隔。被设置为隐藏媒体文件服务器内所有账号的文件均按照「敏感内容」处理,且将无法使用自定义表情符号。被阻止的实例不受影响。" mediaSilencedInstancesDescription: "设置要隐藏媒体文件的服务器,以换行分隔。被设置为隐藏媒体文件服务器内所有账号的文件均按照「敏感内容」处理,且将无法使用自定义表情符号。被阻止的实例不受影响。"
federationAllowedHosts: "允许联合的服务器" federationAllowedHosts: "允许联合的服务器"
federationAllowedHostsDescription: "设定允许联合的服务器,以换行分隔。" federationAllowedHostsDescription: "设定允许联合的服务器,以换行分隔。"
muteAndBlock: "静音/拉黑" muteAndBlock: "隐藏和屏蔽"
mutedUsers: "已静音用户" mutedUsers: "已隐藏用户"
blockedUsers: "已拉黑的用户" blockedUsers: "已屏蔽的用户"
noUsers: "无用户" noUsers: "无用户"
editProfile: "编辑资料" editProfile: "编辑资料"
noteDeleteConfirm: "要删除该帖子吗?" noteDeleteConfirm: "确定要删除该帖子吗?"
pinLimitExceeded: "无法置顶更多了" pinLimitExceeded: "无法置顶更多了"
intro: "Misskey 的部署结束啦!创建管理员账号吧!" intro: "Misskey 的部署结束啦!创建管理员账号吧!"
done: "完成" done: "完成"
@ -257,7 +259,7 @@ defaultValueIs: "默认值: {value}"
noCustomEmojis: "没有自定义表情符号" noCustomEmojis: "没有自定义表情符号"
noJobs: "没有任务" noJobs: "没有任务"
federating: "联合中" federating: "联合中"
blocked: "已拉黑" blocked: "已屏蔽"
suspended: "停止投递" suspended: "停止投递"
all: "全部" all: "全部"
subscribing: "已订阅" subscribing: "已订阅"
@ -382,7 +384,6 @@ enableLocalTimeline: "启用本地时间线"
enableGlobalTimeline: "启用全局时间线" enableGlobalTimeline: "启用全局时间线"
disablingTimelinesInfo: "即使时间线功能被禁用,出于方便,管理员和监察员也可以继续使用。" disablingTimelinesInfo: "即使时间线功能被禁用,出于方便,管理员和监察员也可以继续使用。"
registration: "注册" registration: "注册"
enableRegistration: "允许任何人注册"
invite: "邀请" invite: "邀请"
driveCapacityPerLocalAccount: "每个用户的网盘容量" driveCapacityPerLocalAccount: "每个用户的网盘容量"
driveCapacityPerRemoteAccount: "每个远程用户的网盘容量" driveCapacityPerRemoteAccount: "每个远程用户的网盘容量"
@ -567,7 +568,7 @@ objectStorageRegionDesc: "指定一个可用区例如“xx-east-1”。 如
objectStorageUseSSL: "使用 SSL" objectStorageUseSSL: "使用 SSL"
objectStorageUseSSLDesc: "如果不使用 https 进行 API 连接,请关闭。" objectStorageUseSSLDesc: "如果不使用 https 进行 API 连接,请关闭。"
objectStorageUseProxy: "使用代理" objectStorageUseProxy: "使用代理"
objectStorageUseProxyDesc: "如果不使用代理进行 API 连接,请将其关闭。" objectStorageUseProxyDesc: "如果不使用代理进行 API 连接,请关闭。"
objectStorageSetPublicRead: "上传时设置为 public-read" objectStorageSetPublicRead: "上传时设置为 public-read"
s3ForcePathStyleDesc: "启用 s3ForcePathStyle 会强制将存储桶名称指定为 URL 中路径的一部分,而不是主机名。使用自托管 Minio 等时可能需要启用。" s3ForcePathStyleDesc: "启用 s3ForcePathStyle 会强制将存储桶名称指定为 URL 中路径的一部分,而不是主机名。使用自托管 Minio 等时可能需要启用。"
serverLogs: "服务器日志" serverLogs: "服务器日志"
@ -587,6 +588,7 @@ masterVolume: "主音量"
notUseSound: "静音" notUseSound: "静音"
useSoundOnlyWhenActive: "仅在 Misskey 活跃时输出声音" useSoundOnlyWhenActive: "仅在 Misskey 活跃时输出声音"
details: "详情" details: "详情"
renoteDetails: "转帖详情"
chooseEmoji: "选择表情符号" chooseEmoji: "选择表情符号"
unableToProcess: "操作无法完成" unableToProcess: "操作无法完成"
recentUsed: "最近使用" recentUsed: "最近使用"
@ -603,7 +605,7 @@ descendingOrder: "降序"
scratchpad: "AiScript 控制台" scratchpad: "AiScript 控制台"
scratchpadDescription: "AiScript 控制台为 AiScript 提供了实验环境。您可以编写代码与 Misskey 交互,运行并查看结果。" scratchpadDescription: "AiScript 控制台为 AiScript 提供了实验环境。您可以编写代码与 Misskey 交互,运行并查看结果。"
uiInspector: "UI 检查器" uiInspector: "UI 检查器"
uiInspectorDescription: "查看所有内存中由 UI 组件生成出的实例。UI 组件由 UI:C 系列函数所生成。" uiInspectorDescription: "查看内存中所有由 UI 组件生成出的实例。UI 组件由 UI:C 系列函数所生成。"
output: "输出" output: "输出"
script: "脚本" script: "脚本"
disablePagesScript: "禁用页面脚本" disablePagesScript: "禁用页面脚本"
@ -683,12 +685,16 @@ emptyToDisableSmtpAuth: "用户名和密码留空可以禁用 SMTP 验证"
smtpSecure: "在 SMTP 连接中使用隐式 SSL / TLS" smtpSecure: "在 SMTP 连接中使用隐式 SSL / TLS"
smtpSecureInfo: "使用 STARTTLS 时关闭。" smtpSecureInfo: "使用 STARTTLS 时关闭。"
testEmail: "邮件发送测试" testEmail: "邮件发送测试"
wordMute: "文字屏蔽" wordMute: "隐藏关键词"
hardWordMute: "屏蔽关键词" wordMuteDescription: "折叠包含指定关键词的帖子。被折叠的帖子可单击展开。"
hardWordMute: "隐藏硬关键词"
showMutedWord: "显示已隐藏的关键词"
hardWordMuteDescription: "隐藏包含指定关键词的帖子。与隐藏关键词不同,帖子将完全不会显示。"
regexpError: "正则表达式错误" regexpError: "正则表达式错误"
regexpErrorDescription: "{tab} 屏蔽文字的第 {line} 行的正则表达式有错误:" regexpErrorDescription: "{tab} 隐藏文字的第 {line} 行的正则表达式有错误:"
instanceMute: "被屏蔽的服务器" instanceMute: "已隐藏的服务器"
userSaysSomething: "{name} 说了什么,但是被屏蔽词过滤了" userSaysSomething: "{name} 说了什么,但是被屏蔽词过滤了"
userSaysSomethingAbout: "{name} 说了关于「{word}」的什么"
makeActive: "启用" makeActive: "启用"
display: "显示" display: "显示"
copy: "复制" copy: "复制"
@ -759,7 +765,7 @@ driveFilesCount: "网盘的文件数"
driveUsage: "网盘的空间用量" driveUsage: "网盘的空间用量"
noCrawle: "要求搜索引擎不索引该用户" noCrawle: "要求搜索引擎不索引该用户"
noCrawleDescription: "要求搜索引擎不要收录(索引)您的用户页面,帖子,页面等。" noCrawleDescription: "要求搜索引擎不要收录(索引)您的用户页面,帖子,页面等。"
lockedAccountInfo: "即使启用该功能,只要您不将帖子可见范围设置为“仅关注者”,任何人都还是可以看到您的帖子。" lockedAccountInfo: "即使启用该功能,只要帖子可见范围不是「仅关注者」,任何人都可以看到您的帖子。"
alwaysMarkSensitive: "默认将媒体文件标记为敏感内容" alwaysMarkSensitive: "默认将媒体文件标记为敏感内容"
loadRawImages: "添加附件图像的缩略图时使用原始图像质量" loadRawImages: "添加附件图像的缩略图时使用原始图像质量"
disableShowingAnimatedImages: "不播放动画" disableShowingAnimatedImages: "不播放动画"
@ -846,7 +852,7 @@ active: "活动"
offline: "离线" offline: "离线"
notRecommended: "不推荐" notRecommended: "不推荐"
botProtection: "Bot防御" botProtection: "Bot防御"
instanceBlocking: "被阻拦的服务器" instanceBlocking: "屏蔽/静音的服务器"
selectAccount: "选择账户" selectAccount: "选择账户"
switchAccount: "切换账户" switchAccount: "切换账户"
enabled: "已启用" enabled: "已启用"
@ -856,9 +862,9 @@ user: "用户"
administration: "管理" administration: "管理"
accounts: "账户" accounts: "账户"
switch: "切换" switch: "切换"
noMaintainerInformationWarning: "管理员信息未设置。" noMaintainerInformationWarning: "尚未设置管理员信息。"
noInquiryUrlWarning: "尚未设置联络地址。" noInquiryUrlWarning: "尚未设置联络地址。"
noBotProtectionWarning: "Bot 防御未设置。" noBotProtectionWarning: "尚未设置 Bot 防御。"
configure: "设置" configure: "设置"
postToGallery: "发送到图库" postToGallery: "发送到图库"
postToHashtag: "投稿到这个标签" postToHashtag: "投稿到这个标签"
@ -874,11 +880,11 @@ priority: "优先级"
high: "高" high: "高"
middle: "中" middle: "中"
low: "低" low: "低"
emailNotConfiguredWarning: "电子邮件地址未设置。" emailNotConfiguredWarning: "尚未设置电子邮件地址。"
ratio: "比率" ratio: "比率"
previewNoteText: "预览文本" previewNoteText: "预览文本"
customCss: "自定义 CSS" customCss: "自定义 CSS"
customCssWarn: "这些设置必须有相关的基础知识,不当的配置可能导致客户端无法正常使用" customCssWarn: "这些设置必须有相关的基础知识,不当的配置可能导致客户端无法正常使用"
global: "全局" global: "全局"
squareAvatars: "显示方形头像图标" squareAvatars: "显示方形头像图标"
sent: "发送" sent: "发送"
@ -915,8 +921,8 @@ manageAccounts: "管理账户"
makeReactionsPublic: "将回应设置为公开" makeReactionsPublic: "将回应设置为公开"
makeReactionsPublicDescription: "将您发表过的回应设置成公开可见。" makeReactionsPublicDescription: "将您发表过的回应设置成公开可见。"
classic: "经典" classic: "经典"
muteThread: "屏蔽帖子列表" muteThread: "隐藏帖子列表"
unmuteThread: "取消屏蔽帖子列表" unmuteThread: "取消隐藏帖子列表"
followingVisibility: "关注的人的公开范围" followingVisibility: "关注的人的公开范围"
followersVisibility: "关注者的公开范围" followersVisibility: "关注者的公开范围"
continueThread: "查看更多帖子" continueThread: "查看更多帖子"
@ -939,7 +945,7 @@ searchByGoogle: "Google"
instanceDefaultLightTheme: "服务器默认浅色主题" instanceDefaultLightTheme: "服务器默认浅色主题"
instanceDefaultDarkTheme: "服务器默认深色主题" instanceDefaultDarkTheme: "服务器默认深色主题"
instanceDefaultThemeDescription: "以对象格式输入主题代码" instanceDefaultThemeDescription: "以对象格式输入主题代码"
mutePeriod: "屏蔽期限" mutePeriod: "隐藏期限"
period: "截止时间" period: "截止时间"
indefinitely: "永久" indefinitely: "永久"
tenMinutes: "10 分钟" tenMinutes: "10 分钟"
@ -1057,7 +1063,7 @@ internalServerErrorDescription: "内部服务器发生了预期外的错误"
copyErrorInfo: "复制错误信息" copyErrorInfo: "复制错误信息"
joinThisServer: "在本服务器上注册" joinThisServer: "在本服务器上注册"
exploreOtherServers: "探索其他服务器" exploreOtherServers: "探索其他服务器"
letsLookAtTimeline: "时间线" letsLookAtTimeline: "看看时间线"
disableFederationConfirm: "确定要禁用联合?" disableFederationConfirm: "确定要禁用联合?"
disableFederationConfirmWarn: "禁用联合不会将帖子设为私有。在大多数情况下,不需要禁用联合。" disableFederationConfirmWarn: "禁用联合不会将帖子设为私有。在大多数情况下,不需要禁用联合。"
disableFederationOk: "联合禁用" disableFederationOk: "联合禁用"
@ -1076,7 +1082,7 @@ sensitiveWords: "敏感词"
sensitiveWordsDescription: "包含这些词的帖子将只在首页可见。可用换行来设定多个词。" sensitiveWordsDescription: "包含这些词的帖子将只在首页可见。可用换行来设定多个词。"
sensitiveWordsDescription2: "AND 条件用空格分隔,正则表达式用斜线包裹。" sensitiveWordsDescription2: "AND 条件用空格分隔,正则表达式用斜线包裹。"
prohibitedWords: "禁用词" prohibitedWords: "禁用词"
prohibitedWordsDescription: "发布包含设定词汇的帖子时将出错。可用换行设定多个关键字" prohibitedWordsDescription: "发布包含设定词汇的帖子时将出错。可用换行设定多个关键字"
prohibitedWordsDescription2: "AND 条件用空格分隔,正则表达式用斜线包裹。" prohibitedWordsDescription2: "AND 条件用空格分隔,正则表达式用斜线包裹。"
hiddenTags: "隐藏标签" hiddenTags: "隐藏标签"
hiddenTagsDescription: "设定的标签将不会在时间线上显示。可使用换行来设置多个标签。" hiddenTagsDescription: "设定的标签将不会在时间线上显示。可使用换行来设置多个标签。"
@ -1119,7 +1125,7 @@ vertical: "纵向"
horizontal: "横向" horizontal: "横向"
position: "位置" position: "位置"
serverRules: "服务器规则" serverRules: "服务器规则"
pleaseConfirmBelowBeforeSignup: "在这个服务器上注册账号前,请确认以下信息。" pleaseConfirmBelowBeforeSignup: "如果要在此服务器上注册,需要确认并同意以下内容。"
pleaseAgreeAllToContinue: "必须全部勾选「同意」才能够继续。" pleaseAgreeAllToContinue: "必须全部勾选「同意」才能够继续。"
continue: "继续" continue: "继续"
preservedUsernames: "保留的用户名" preservedUsernames: "保留的用户名"
@ -1159,10 +1165,10 @@ turnOffToImprovePerformance: "关闭该选项可以提高性能。"
createInviteCode: "生成邀请码" createInviteCode: "生成邀请码"
createWithOptions: "使用选项来创建" createWithOptions: "使用选项来创建"
createCount: "发行数" createCount: "发行数"
inviteCodeCreated: "已创建邀请码" inviteCodeCreated: "已生成邀请码"
inviteLimitExceeded: "可供发行的邀请码已达上限。" inviteLimitExceeded: "可供生成的邀请码已达上限。"
createLimitRemaining: "可供发行的邀请码:剩余{limit}个" createLimitRemaining: "可供生成的邀请码:剩余 {limit} 个"
inviteLimitResetCycle: "可以在{time}内发行最多{limit}个邀请码。" inviteLimitResetCycle: "可以在 {time} 内生成最多 {limit} 个邀请码。"
expirationDate: "有效日期" expirationDate: "有效日期"
noExpirationDate: "不设置有效日期" noExpirationDate: "不设置有效日期"
inviteCodeUsedAt: "邀请码被使用的日期和时间" inviteCodeUsedAt: "邀请码被使用的日期和时间"
@ -1299,6 +1305,10 @@ yourNameContainsProhibitedWordsDescription: "用户名内含有违禁词。若
thisContentsAreMarkedAsSigninRequiredByAuthor: "根据发帖者的设定,需要登录才能显示" thisContentsAreMarkedAsSigninRequiredByAuthor: "根据发帖者的设定,需要登录才能显示"
lockdown: "锁定" lockdown: "锁定"
pleaseSelectAccount: "请选择帐户" pleaseSelectAccount: "请选择帐户"
availableRoles: "可用角色"
acknowledgeNotesAndEnable: "理解注意事项后再开启。"
federationSpecified: "此服务器已开启联合白名单。只能与管理员指定的服务器通信。"
federationDisabled: "此服务器已禁用联合。无法与其它服务器上的用户通信。"
_accountSettings: _accountSettings:
requireSigninToViewContents: "需要登录才能显示内容" requireSigninToViewContents: "需要登录才能显示内容"
requireSigninToViewContentsDescription1: "您发布的所有帖子将变成需要登入后才会显示。有望防止爬虫收集各种信息。" requireSigninToViewContentsDescription1: "您发布的所有帖子将变成需要登入后才会显示。有望防止爬虫收集各种信息。"
@ -1317,7 +1327,7 @@ _abuseUserReport:
resolve: "解决" resolve: "解决"
accept: "确认" accept: "确认"
reject: "拒绝" reject: "拒绝"
resolveTutorial: "如果举报内容有理且已解决,选择「确认」将案件以肯定的态度标记为已解决。\n如果举报内容站不住脚,选择「拒绝」将案件以否定的态度标记为已解决。" resolveTutorial: "如果认可举报并已解决,选择「确认」将案件以肯定的态度标记为已解决。\n如果不认可举报,选择「拒绝」将案件以否定的态度标记为已解决。"
_delivery: _delivery:
status: "投递状态" status: "投递状态"
stop: "停止投递" stop: "停止投递"
@ -1426,8 +1436,8 @@ _initialTutorial:
description: "对于服务器方针所要求要求的,又或者不适合直接展示的附件,请添加「敏感」标记。\n" description: "对于服务器方针所要求要求的,又或者不适合直接展示的附件,请添加「敏感」标记。\n"
tryThisFile: "试试看,将附加到此窗口的图像标注为敏感!" tryThisFile: "试试看,将附加到此窗口的图像标注为敏感!"
_exampleNote: _exampleNote:
note: "拆纳豆包装时出错了…" note: "拆纳豆包装时失手了…"
method: "要标注附件为敏感内容,请单击该文件以打开菜单,然后单击“标记为敏感内容”。" method: "要标注附件为敏感内容,请单击该文件以打开菜单,然后单击「标记为敏感内容」。"
sensitiveSucceeded: "附加文件时,请遵循服务器的条款来设置正确敏感设定。\n" sensitiveSucceeded: "附加文件时,请遵循服务器的条款来设置正确敏感设定。\n"
doItToContinue: "将图像标记为敏感后才能够继续" doItToContinue: "将图像标记为敏感后才能够继续"
_done: _done:
@ -1455,6 +1465,8 @@ _serverSettings:
reactionsBufferingDescription: "开启时可显著提高发送回应时的性能,及减轻数据库负荷。但 Redis 的内存用量会相应增加。" reactionsBufferingDescription: "开启时可显著提高发送回应时的性能,及减轻数据库负荷。但 Redis 的内存用量会相应增加。"
inquiryUrl: "联络地址" inquiryUrl: "联络地址"
inquiryUrlDescription: "用来指定诸如向服务运营商咨询的论坛地址,或记载了运营商联系方式之类的网页地址。" inquiryUrlDescription: "用来指定诸如向服务运营商咨询的论坛地址,或记载了运营商联系方式之类的网页地址。"
openRegistration: "开放注册"
openRegistrationWarning: "开放注册有风险。建议仅当能够持续监控服务器并在出现问题时能够立即响应时才打开它。"
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "若在一段时间内没有检测到管理活动,为防止垃圾信息,此设定将自动关闭。" thisSettingWillAutomaticallyOffWhenModeratorsInactive: "若在一段时间内没有检测到管理活动,为防止垃圾信息,此设定将自动关闭。"
_accountMigration: _accountMigration:
moveFrom: "从别的账号迁移到此账户" moveFrom: "从别的账号迁移到此账户"
@ -1464,7 +1476,7 @@ _accountMigration:
moveTo: "把这个账户迁移到新的账户" moveTo: "把这个账户迁移到新的账户"
moveToLabel: "迁移后的账户" moveToLabel: "迁移后的账户"
moveCannotBeUndone: "一旦迁移账户,就无法撤销。" moveCannotBeUndone: "一旦迁移账户,就无法撤销。"
moveAccountDescription: "\n迁移到新帐户。\n ・现有的关注者自动关注新帐户\n ・此帐户的所有关注者都将被删除\n ・您将无法再使用此帐户发帖。\n关注者迁移是自动的但关注中迁移必须手动完成。请在迁移前在此帐户上导出关注列表并在迁移后立即在目标帐户上执行导入。\n屏蔽列表也是如此,因此您必须手动迁移它。\n此描述适用于该服务器Misskey v13.12.0 或更高版本)。其他 ActivityPub 软件(例如 Mastodon的行为可能有所不同。" moveAccountDescription: "\n迁移到新帐户。\n ・现有的关注者自动关注新帐户\n ・此帐户的所有关注者都将被删除\n ・您将无法再使用此帐户发帖。\n关注者迁移是自动的但关注中迁移必须手动完成。请在迁移前在此帐户上导出关注列表并在迁移后立即在目标帐户上执行导入。\n列表、隐藏、屏蔽也是如此,因此您必须手动迁移它。\n此描述适用于该服务器Misskey v13.12.0 或更高版本)。其他 ActivityPub 软件(例如 Mastodon的行为可能有所不同。"
moveAccountHowTo: "要进行账户迁移,请现在目标账户中为此账户建立一个别名。\n建立别名后请像这样输入目标账户@username@server.example.com" moveAccountHowTo: "要进行账户迁移,请现在目标账户中为此账户建立一个别名。\n建立别名后请像这样输入目标账户@username@server.example.com"
startMigration: "迁移" startMigration: "迁移"
migrationConfirm: "确定要把此账户迁移到 {account} 吗?一旦确定后,此操作无法取消,此账户也无法以原来的状态使用。\n同时请确认迁移后的账户已创造别名。" migrationConfirm: "确定要把此账户迁移到 {account} 吗?一旦确定后,此操作无法取消,此账户也无法以原来的状态使用。\n同时请确认迁移后的账户已创造别名。"
@ -1684,7 +1696,7 @@ _achievements:
title: "超高校级的幸运" title: "超高校级的幸运"
description: "每 10 秒有 0.005% 的概率自动获得" description: "每 10 秒有 0.005% 的概率自动获得"
_setNameToSyuilo: _setNameToSyuilo:
title: "像神一样呐" title: "上帝情结"
description: "将名称设定为 syuilo" description: "将名称设定为 syuilo"
_passedSinceAccountCreated1: _passedSinceAccountCreated1:
title: "一周年" title: "一周年"
@ -1703,9 +1715,9 @@ _achievements:
description: "在元旦登入" description: "在元旦登入"
flavor: "今年也请对本服务器多多指教!" flavor: "今年也请对本服务器多多指教!"
_cookieClicked: _cookieClicked:
title: "点击饼干小游戏" title: "饼干点点乐"
description: "点击了饼干" description: "点击了饼干"
flavor: "用错软件了?" flavor: "穿越了?"
_brainDiver: _brainDiver:
title: "Brain Diver" title: "Brain Diver"
description: "发布了包含 Brain Diver 链接的帖子" description: "发布了包含 Brain Diver 链接的帖子"
@ -1775,7 +1787,7 @@ _role:
canUpdateBioMedia: "可以更新头像和横幅" canUpdateBioMedia: "可以更新头像和横幅"
pinMax: "帖子置顶数量限制" pinMax: "帖子置顶数量限制"
antennaMax: "可创建的最大天线数量" antennaMax: "可创建的最大天线数量"
wordMuteMax: "屏蔽词的字数限制" wordMuteMax: "隐藏词的字数限制"
webhookMax: "Webhook 创建数量限制" webhookMax: "Webhook 创建数量限制"
clipMax: "便签创建数量限制" clipMax: "便签创建数量限制"
noteEachClipsMax: "单个便签内的贴文数量限制" noteEachClipsMax: "单个便签内的贴文数量限制"
@ -1788,9 +1800,9 @@ _role:
canUseTranslator: "使用翻译功能" canUseTranslator: "使用翻译功能"
avatarDecorationLimit: "可添加头像挂件的最大个数" avatarDecorationLimit: "可添加头像挂件的最大个数"
canImportAntennas: "允许导入天线" canImportAntennas: "允许导入天线"
canImportBlocking: "允许导入拉黑列表" canImportBlocking: "允许导入屏蔽列表"
canImportFollowing: "允许导入关注列表" canImportFollowing: "允许导入关注列表"
canImportMuting: "允许导入屏蔽列表" canImportMuting: "允许导入隐藏列表"
canImportUserLists: "允许导入用户列表" canImportUserLists: "允许导入用户列表"
_condition: _condition:
roleAssignedTo: "已分配给手动角色" roleAssignedTo: "已分配给手动角色"
@ -1938,14 +1950,14 @@ _menuDisplay:
top: "顶部" top: "顶部"
hide: "隐藏" hide: "隐藏"
_wordMute: _wordMute:
muteWords: "禁用词" muteWords: "要隐藏的词"
muteWordsDescription: "AND 条件用空格分隔OR 条件用换行符分隔。" muteWordsDescription: "AND 条件用空格分隔OR 条件用换行符分隔。"
muteWordsDescription2: "正则表达式用斜线包裹" muteWordsDescription2: "正则表达式用斜线包裹"
_instanceMute: _instanceMute:
instanceMuteDescription: "屏蔽服务器中的所有帖子和转帖,包括这些服务器上的用户回复。" instanceMuteDescription: "隐藏服务器中的所有帖子和转帖,包括这些服务器上的用户回复。"
instanceMuteDescription2: "一行一个" instanceMuteDescription2: "一行一个"
title: "隐藏服务器已设置的帖子。" title: "下面实例中的帖子将被隐藏。"
heading: "屏蔽服务器" heading: "已隐藏的服务器"
_theme: _theme:
explore: "寻找主题" explore: "寻找主题"
install: "安装主题" install: "安装主题"
@ -2065,12 +2077,12 @@ _2fa:
step4: "从现在开始,任何登录操作都将要求您提供动态口令。" step4: "从现在开始,任何登录操作都将要求您提供动态口令。"
securityKeyNotSupported: "您的浏览器不支持安全密钥。" securityKeyNotSupported: "您的浏览器不支持安全密钥。"
registerTOTPBeforeKey: "要注册安全密钥或 Passkey请先设置验证器。" registerTOTPBeforeKey: "要注册安全密钥或 Passkey请先设置验证器。"
securityKeyInfo: "注册兼容 WebAuthn 的密钥,例如支持 FIDO2 的硬件安全密钥、设备上的生物识别功能、PIN 以及 Passkey 等。" securityKeyInfo: "注册兼容 WebAuthn 的密钥,例如支持 FIDO2 的硬件安全密钥、设备上的生物识别功能、PIN 以及 Passkey 等。"
registerSecurityKey: "注册安全密钥或 Passkey" registerSecurityKey: "注册安全密钥或 Passkey"
securityKeyName: "输入密钥名称" securityKeyName: "输入密钥名称"
tapSecurityKey: "请按照浏览器说明操作来注册安全密钥或 Passkey。" tapSecurityKey: "请按照浏览器说明操作来注册安全密钥或 Passkey。"
removeKey: "删除安全密钥" removeKey: "删除安全密钥"
removeKeyConfirm: "确定要删除 {name} 吗?" removeKeyConfirm: "确定要删除 {name} 吗?"
whyTOTPOnlyRenew: "当注册了安全密钥时,无法取消使用验证器。" whyTOTPOnlyRenew: "当注册了安全密钥时,无法取消使用验证器。"
renewTOTP: "重置验证器" renewTOTP: "重置验证器"
renewTOTPConfirm: "当前验证器的验证码及备用代码已失效" renewTOTPConfirm: "当前验证器的验证码及备用代码已失效"
@ -2085,8 +2097,8 @@ _2fa:
_permissions: _permissions:
"read:account": "查看账户信息" "read:account": "查看账户信息"
"write:account": "更改帐户信息" "write:account": "更改帐户信息"
"read:blocks": "查看黑名单" "read:blocks": "查看屏蔽列表"
"write:blocks": "编辑黑名单" "write:blocks": "编辑屏蔽列表"
"read:drive": "查看网盘" "read:drive": "查看网盘"
"write:drive": "管理网盘文件" "write:drive": "管理网盘文件"
"read:favorites": "查看收藏夹" "read:favorites": "查看收藏夹"
@ -2095,8 +2107,8 @@ _permissions:
"write:following": "关注/取消关注" "write:following": "关注/取消关注"
"read:messaging": "查看消息" "read:messaging": "查看消息"
"write:messaging": "撰写或删除消息" "write:messaging": "撰写或删除消息"
"read:mutes": "查看屏蔽列表" "read:mutes": "查看隐藏列表"
"write:mutes": "编辑屏蔽列表" "write:mutes": "编辑隐藏列表"
"write:notes": "撰写或删除帖子" "write:notes": "撰写或删除帖子"
"read:notifications": "查看通知" "read:notifications": "查看通知"
"write:notifications": "管理通知" "write:notifications": "管理通知"
@ -2278,7 +2290,7 @@ _profile:
name: "昵称" name: "昵称"
username: "用户名" username: "用户名"
description: "个人简介" description: "个人简介"
youCanIncludeHashtags: "你可以在个人简介中包含一些#标签。" youCanIncludeHashtags: "可以在个人简介中包含 #标签。"
metadata: "附加信息" metadata: "附加信息"
metadataEdit: "附加信息编辑" metadataEdit: "附加信息编辑"
metadataDescription: "最多可以在个人资料中以表格形式显示四条其他信息。" metadataDescription: "最多可以在个人资料中以表格形式显示四条其他信息。"
@ -2296,8 +2308,8 @@ _exportOrImport:
favoritedNotes: "收藏的帖子" favoritedNotes: "收藏的帖子"
clips: "便签" clips: "便签"
followingList: "关注中" followingList: "关注中"
muteList: "屏蔽" muteList: "隐藏"
blockingList: "拉黑" blockingList: "屏蔽"
userLists: "列表" userLists: "列表"
excludeMutingUsers: "排除屏蔽用户" excludeMutingUsers: "排除屏蔽用户"
excludeInactiveUsers: "排除不活跃用户" excludeInactiveUsers: "排除不活跃用户"
@ -2353,9 +2365,6 @@ _pages:
newPage: "创建页面" newPage: "创建页面"
editPage: "编辑页面" editPage: "编辑页面"
readPage: "查看页面" readPage: "查看页面"
created: "页面已创建"
updated: "页面已更新"
deleted: "该页面已被删除"
pageSetting: "页面设置" pageSetting: "页面设置"
nameAlreadyExists: "该页面 URL 已存在" nameAlreadyExists: "该页面 URL 已存在"
invalidNameTitle: "无效的页面 URL" invalidNameTitle: "无效的页面 URL"
@ -2382,7 +2391,7 @@ _pages:
fontSansSerif: "无衬线字体" fontSansSerif: "无衬线字体"
eyeCatchingImageSet: "设置封面图片" eyeCatchingImageSet: "设置封面图片"
eyeCatchingImageRemove: "删除封面图片" eyeCatchingImageRemove: "删除封面图片"
chooseBlock: "添加块" chooseBlock: "添加内容块"
enterSectionTitle: "输入会话标题" enterSectionTitle: "输入会话标题"
selectType: "选择类型" selectType: "选择类型"
contentBlocks: "内容" contentBlocks: "内容"
@ -2394,8 +2403,8 @@ _pages:
section: "章节" section: "章节"
image: "图片" image: "图片"
button: "按钮" button: "按钮"
dynamic: "动态块" dynamic: "动态内容块"
dynamicDescription: "这个块已经废弃。以后请使用{play}。" dynamicDescription: "这个内容块已经废弃。以后请使用{play}。"
note: "嵌入的帖子" note: "嵌入的帖子"
_note: _note:
id: "帖子 ID" id: "帖子 ID"
@ -2429,7 +2438,7 @@ _notification:
renotedBySomeUsers: "{n} 人转发了" renotedBySomeUsers: "{n} 人转发了"
followedBySomeUsers: "被 {n} 人关注" followedBySomeUsers: "被 {n} 人关注"
flushNotification: "重置通知历史" flushNotification: "重置通知历史"
exportOfXCompleted: "已完成 {x} 导出" exportOfXCompleted: "已完成 {x} 导出"
login: "有新的登录" login: "有新的登录"
_types: _types:
all: "全部" all: "全部"
@ -2717,6 +2726,66 @@ _contextMenu:
app: "应用" app: "应用"
appWithShift: "Shift 键应用" appWithShift: "Shift 键应用"
native: "浏览器的用户界面" native: "浏览器的用户界面"
_gridComponent:
_error:
requiredValue: "此值为必填项"
columnTypeNotSupport: "正则表达式验证仅支持 type:text 列。"
patternNotMatch: "此值与 {pattern} 的模式不一致"
notUnique: "此值必须唯一"
_roleSelectDialog:
notSelected: "未选中"
_customEmojisManager:
_gridCommon:
copySelectionRows: "复制所选行"
copySelectionRanges: "复制所选范围"
deleteSelectionRows: "删除所选行"
deleteSelectionRanges: "删除所选范围的行"
searchSettings: "搜索设置"
searchSettingCaption: "设置详细的搜索条件。"
searchLimit: "显示项目数"
sortOrder: "排序方式"
registrationLogs: "注册日志"
registrationLogsCaption: "将显示更新和删除表情符号的日志。执行更新或删除操作,又或者更改或重新加载页面时会消失。"
alertEmojisRegisterFailedDescription: "更新或删除表情符号失败。详情请确认注册日志。"
_logs:
showSuccessLogSwitch: "显示成功日志"
failureLogNothing: "没有失败日志。"
logNothing: "没有日志"
_remote:
selectionRowDetail: "所选行的详细信息"
importSelectionRows: "导入所选行"
importSelectionRangesRows: "导入所选范围的行"
importEmojisButton: "导入已选择的表情符号"
confirmImportEmojisTitle: "导入表情符号"
confirmImportEmojisDescription: "是否导入从远程服务器接收的 {count} 个表情符号?请密切关注表情符号的许可协议。"
_local:
tabTitleList: "已注册的表情符号列表"
tabTitleRegister: "注册表情符号"
_list:
emojisNothing: "没有已注册的表情符号。"
markAsDeleteTargetRows: "将所选行标记为删除对象"
markAsDeleteTargetRanges: "将所选范围的行标记为删除对象"
alertUpdateEmojisNothingDescription: "没有已更改的表情符号。"
alertDeleteEmojisNothingDescription: "没有被标记为删除对象的表情符号。"
confirmMovePage: "要离开此页吗?"
confirmChangeView: "要更改显示吗?"
confirmUpdateEmojisDescription: "要更新 {count} 个表情符号吗?"
confirmDeleteEmojisDescription: "要删除已选择的 {count} 个表情符号吗?"
confirmResetDescription: "至今为止所做的所有修改都将被重置。"
confirmMovePageDesciption: "此页面上的表情符号已更改。\n若不保存就离开此页此页面上所有的更改都将丢失。"
dialogSelectRoleTitle: "按角色搜索表情符号"
_register:
uploadSettingTitle: "上传设置"
uploadSettingDescription: "可以在此页面设置上传表情符号时的行为。"
directoryToCategoryLabel: "目录名请输入「category」"
directoryToCategoryCaption: "拖放目录时目录名请输入「category」"
emojiInputAreaCaption: "请使用其中一种方法选择要注册的表情符号。"
emojiInputAreaList1: "在此区域内拖放图像文件或者目录"
emojiInputAreaList2: "单击此链接以从电脑中选择"
emojiInputAreaList3: "单击此链接以从网盘中选择"
confirmRegisterEmojisDescription: "要将列表内显示的表情符号替换为新的自定义表情符号吗?(为降低服务器负载,一次操作最多只能注册 {count} 个表情符号)"
confirmClearEmojisDescription: "要放弃编辑并将列表内表示的表情符号清空吗?"
confirmUploadEmojisDescription: "要将拖放的 {count} 个文件上传到网盘上吗?"
_embedCodeGen: _embedCodeGen:
title: "自定义嵌入代码" title: "自定义嵌入代码"
header: "显示标题" header: "显示标题"
@ -2737,3 +2806,37 @@ _selfXssPrevention:
description1: "如果在此处粘贴了什么,恶意用户可能会接管账户或者盗取个人资料。" description1: "如果在此处粘贴了什么,恶意用户可能会接管账户或者盗取个人资料。"
description2: "如果不能完全理解将要粘贴的内容,%c 请立即停止操作并关闭这个窗口。" description2: "如果不能完全理解将要粘贴的内容,%c 请立即停止操作并关闭这个窗口。"
description3: "详情请看这里。{link}" description3: "详情请看这里。{link}"
_followRequest:
recieved: "已收到申请"
sent: "已发送申请"
_remoteLookupErrors:
_federationNotAllowed:
title: "无法与此服务器通信"
description: "与此服务器的通信可能被禁用,又或者是屏蔽了此服务器或被此服务器屏蔽了。\n请联系服务器的管理者。"
_uriInvalid:
title: "URI 有误"
description: "输入的 URI 有问题。请确认是否输入了 URI 中无法使用的字符。"
_requestFailed:
title: "请求失败"
description: "与该服务器的通信失败。对面服务器可能不可用。另外,请确认是否输入了无效或不存在的 URI。"
_responseInvalid:
title: "响应无效"
description: "成功与此服务器通信,但返回的数据无效。"
_responseInvalidIdHostNotMatch:
description: "输入 URI 的域名和最终取得的 URI 的域名不同。如果是通过第三方服务器获取远程内容,请使用可以从原始服务器获取内容的 URI 再试一次。"
_noSuchObject:
title: "未找到"
description: "未找到请求的资源。请再次检查 URI。"
_captcha:
verify: "请通过 CAPTCHA 验证"
testSiteKeyMessage: "输入测试用的网站密钥及私密密钥后可以生成预览并检查,\n详情请看以下页面。"
_error:
_requestFailed:
title: "请求 CAPTCHA 失败"
text: "请稍后再试,又或者再检查一次设置。"
_verificationFailed:
title: "验证 CAPTCHA 失败"
text: "请再次确认设置是否正确。"
_unknown:
title: "CAPTCHA 错误"
text: "发生意外错误。"

View file

@ -5,11 +5,12 @@ introMisskey: "歡迎Misskey 是一個開放原始碼且去中心化的社群
poweredByMisskeyDescription: "{name}是開放原始碼平臺 <b>Misskey</b> 的伺服器之一。" poweredByMisskeyDescription: "{name}是開放原始碼平臺 <b>Misskey</b> 的伺服器之一。"
monthAndDay: "{month} 月 {day} 日" monthAndDay: "{month} 月 {day} 日"
search: "搜尋" search: "搜尋"
reset: "重設"
notifications: "通知" notifications: "通知"
username: "使用者名稱" username: "使用者名稱"
password: "密碼" password: "密碼"
initialPasswordForSetup: "初始設定的密碼" initialPasswordForSetup: "啟動初始設定的密碼"
initialPasswordIsIncorrect: "初始設定的密碼錯誤。" initialPasswordIsIncorrect: "啟動初始設定的密碼錯誤。"
initialPasswordForSetupDescription: "如果您自己安裝了 Misskey請使用您在設定檔中輸入的密碼。\n如果您使用 Misskey 的託管服務之類的服務,請使用提供的密碼。\n如果您尚未設定密碼請將其留空並繼續。" initialPasswordForSetupDescription: "如果您自己安裝了 Misskey請使用您在設定檔中輸入的密碼。\n如果您使用 Misskey 的託管服務之類的服務,請使用提供的密碼。\n如果您尚未設定密碼請將其留空並繼續。"
forgotPassword: "忘記密碼" forgotPassword: "忘記密碼"
fetchingAsApObject: "從聯邦宇宙取得中..." fetchingAsApObject: "從聯邦宇宙取得中..."
@ -48,6 +49,7 @@ pin: "置頂"
unpin: "取消置頂" unpin: "取消置頂"
copyContent: "複製內容" copyContent: "複製內容"
copyLink: "複製連結" copyLink: "複製連結"
copyRemoteLink: "複製遠端的連結"
copyLinkRenote: "複製轉發的連結" copyLinkRenote: "複製轉發的連結"
delete: "刪除" delete: "刪除"
deleteAndEdit: "刪除並編輯" deleteAndEdit: "刪除並編輯"
@ -230,7 +232,7 @@ instanceInfo: "伺服器資訊"
statistics: "統計" statistics: "統計"
clearQueue: "清除佇列" clearQueue: "清除佇列"
clearQueueConfirmTitle: "確定要清除佇列嗎?" clearQueueConfirmTitle: "確定要清除佇列嗎?"
clearQueueConfirmText: "未發佈的貼文將不會發佈。您通常不需要確認。" clearQueueConfirmText: "未成功發佈的貼文將不會再嘗試發佈。通常不需要進行這項操作。"
clearCachedFiles: "清除快取資料" clearCachedFiles: "清除快取資料"
clearCachedFilesConfirm: "確定要清除所有遠端暫存資料嗎?" clearCachedFilesConfirm: "確定要清除所有遠端暫存資料嗎?"
blockedInstances: "已封鎖的伺服器" blockedInstances: "已封鎖的伺服器"
@ -291,8 +293,8 @@ messaging: "聊天"
upload: "上傳" upload: "上傳"
keepOriginalUploading: "保留原圖" keepOriginalUploading: "保留原圖"
keepOriginalUploadingDescription: "上傳圖片時保留原始圖片。關閉時,瀏覽器會在上傳時生成適用於網路傳送的版本。" keepOriginalUploadingDescription: "上傳圖片時保留原始圖片。關閉時,瀏覽器會在上傳時生成適用於網路傳送的版本。"
fromDrive: "從雲端空間" fromDrive: "從雲端空間中選擇"
fromUrl: "從 URL" fromUrl: "從 URL 上傳"
uploadFromUrl: "從網址上傳" uploadFromUrl: "從網址上傳"
uploadFromUrlDescription: "您要上傳的檔案網址" uploadFromUrlDescription: "您要上傳的檔案網址"
uploadFromUrlRequested: "已請求上傳" uploadFromUrlRequested: "已請求上傳"
@ -324,7 +326,7 @@ light: "淺色"
dark: "深色" dark: "深色"
lightThemes: "淺色佈景主題" lightThemes: "淺色佈景主題"
darkThemes: "深色佈景主題" darkThemes: "深色佈景主題"
syncDeviceDarkMode: "與設備的深色模式同步" syncDeviceDarkMode: "與裝置的深色模式同步"
drive: "雲端硬碟" drive: "雲端硬碟"
fileName: "檔案名稱" fileName: "檔案名稱"
selectFile: "選擇檔案" selectFile: "選擇檔案"
@ -382,7 +384,6 @@ enableLocalTimeline: "啟用本地時間軸"
enableGlobalTimeline: "啟用全域時間軸" enableGlobalTimeline: "啟用全域時間軸"
disablingTimelinesInfo: "為了方便,即使您關閉了時間軸功能,管理員和審查員仍可以繼續使用。" disablingTimelinesInfo: "為了方便,即使您關閉了時間軸功能,管理員和審查員仍可以繼續使用。"
registration: "註冊" registration: "註冊"
enableRegistration: "開放新使用者註冊"
invite: "邀請" invite: "邀請"
driveCapacityPerLocalAccount: "每個本地使用者的雲端硬碟容量" driveCapacityPerLocalAccount: "每個本地使用者的雲端硬碟容量"
driveCapacityPerRemoteAccount: "每個非本地用戶的雲端空間大小" driveCapacityPerRemoteAccount: "每個非本地用戶的雲端空間大小"
@ -587,6 +588,7 @@ masterVolume: "主音量"
notUseSound: "關閉音效" notUseSound: "關閉音效"
useSoundOnlyWhenActive: "瀏覽器在前景運作時Misskey 才會發出音效" useSoundOnlyWhenActive: "瀏覽器在前景運作時Misskey 才會發出音效"
details: "詳細資訊" details: "詳細資訊"
renoteDetails: "轉發貼文的細節"
chooseEmoji: "選擇您的表情符號" chooseEmoji: "選擇您的表情符號"
unableToProcess: "操作無法完成" unableToProcess: "操作無法完成"
recentUsed: "最近使用" recentUsed: "最近使用"
@ -684,11 +686,15 @@ smtpSecure: "在 SMTP 連接中使用隱式 SSL/TLS"
smtpSecureInfo: "使用 STARTTLS 時關閉。" smtpSecureInfo: "使用 STARTTLS 時關閉。"
testEmail: "測試郵件發送" testEmail: "測試郵件發送"
wordMute: "被靜音的文字" wordMute: "被靜音的文字"
wordMuteDescription: "將包含指定語句的貼文最小化。 點擊最小化的貼文即可顯示。"
hardWordMute: "硬文字靜音" hardWordMute: "硬文字靜音"
showMutedWord: "顯示靜音字"
hardWordMuteDescription: "隱藏含有指定語句的貼文。 與詞彙靜音不同的是,貼文將完全隱藏不見。"
regexpError: "正規表達式錯誤" regexpError: "正規表達式錯誤"
regexpErrorDescription: "{tab} 靜音文字的第 {line} 行的正規表達式有錯誤:" regexpErrorDescription: "{tab} 靜音文字的第 {line} 行的正規表達式有錯誤:"
instanceMute: "被靜音的實例" instanceMute: "被靜音的實例"
userSaysSomething: "{name}說了什麼" userSaysSomething: "{name}說了什麼"
userSaysSomethingAbout: "{name} 說了一些關於「{word}」的話"
makeActive: "啟用" makeActive: "啟用"
display: "檢視" display: "檢視"
copy: "複製" copy: "複製"
@ -764,7 +770,7 @@ alwaysMarkSensitive: "預設標記檔案為敏感內容"
loadRawImages: "以原始圖檔顯示附件圖檔的縮圖" loadRawImages: "以原始圖檔顯示附件圖檔的縮圖"
disableShowingAnimatedImages: "不播放動態圖檔" disableShowingAnimatedImages: "不播放動態圖檔"
highlightSensitiveMedia: "強調敏感標記" highlightSensitiveMedia: "強調敏感標記"
verificationEmailSent: "已發送驗證電子郵件。請點擊進入電子郵件中的鏈接完成驗證。" verificationEmailSent: "已發送驗證電子郵件。請點擊進入電子郵件中的連結以完成驗證。"
notSet: "未設定" notSet: "未設定"
emailVerified: "已成功驗證您的電子郵件地址" emailVerified: "已成功驗證您的電子郵件地址"
noteFavoritesCount: "我的最愛貼文的數目" noteFavoritesCount: "我的最愛貼文的數目"
@ -821,7 +827,7 @@ apply: "套用"
receiveAnnouncementFromInstance: "接收來自伺服器的通知" receiveAnnouncementFromInstance: "接收來自伺服器的通知"
emailNotification: "郵件通知" emailNotification: "郵件通知"
publish: "發布" publish: "發布"
inChannelSearch: "頻道搜尋" inChannelSearch: "頻道搜尋"
useReactionPickerForContextMenu: "點擊右鍵開啟反應選擇器" useReactionPickerForContextMenu: "點擊右鍵開啟反應選擇器"
typingUsers: "{users}輸入中" typingUsers: "{users}輸入中"
jumpToSpecifiedDate: "跳轉到特定日期" jumpToSpecifiedDate: "跳轉到特定日期"
@ -925,7 +931,7 @@ incorrectPassword: "密碼錯誤。"
incorrectTotp: "一次性密碼錯誤,或者已過期。" incorrectTotp: "一次性密碼錯誤,或者已過期。"
voteConfirm: "確定投給「{choice}」?" voteConfirm: "確定投給「{choice}」?"
hide: "隱藏" hide: "隱藏"
useDrawerReactionPickerForMobile: "在移動設備上使用抽屜顯示" useDrawerReactionPickerForMobile: "在行動裝置上使用抽屜顯示"
welcomeBackWithName: "歡迎回來,{name}" welcomeBackWithName: "歡迎回來,{name}"
clickToFinishEmailVerification: "點擊 [{ok}] 完成電子郵件地址認證。" clickToFinishEmailVerification: "點擊 [{ok}] 完成電子郵件地址認證。"
overridedDeviceKind: "裝置類型" overridedDeviceKind: "裝置類型"
@ -1006,7 +1012,7 @@ unsubscribePushNotification: "停用推播通知"
pushNotificationAlreadySubscribed: "推播通知啟用中" pushNotificationAlreadySubscribed: "推播通知啟用中"
pushNotificationNotSupported: "瀏覽器或伺服器不支援推播通知" pushNotificationNotSupported: "瀏覽器或伺服器不支援推播通知"
sendPushNotificationReadMessage: "如果已閱讀通知與訊息,就刪除推播通知" sendPushNotificationReadMessage: "如果已閱讀通知與訊息,就刪除推播通知"
sendPushNotificationReadMessageCaption: "「{emptyPushNotificationMessage}」通知將立刻顯示。可能會更消耗裝置電池。" sendPushNotificationReadMessageCaption: "可能會導致裝置的電池消耗量增加。"
windowMaximize: "最大化" windowMaximize: "最大化"
windowMinimize: "最小化" windowMinimize: "最小化"
windowRestore: "復原" windowRestore: "復原"
@ -1119,7 +1125,7 @@ vertical: "直向"
horizontal: "橫向" horizontal: "橫向"
position: "位置" position: "位置"
serverRules: "伺服器規則" serverRules: "伺服器規則"
pleaseConfirmBelowBeforeSignup: "在本伺服器註冊之前,請確認下列事項。" pleaseConfirmBelowBeforeSignup: "在本伺服器註冊之前,必須確認並同意以下內容。"
pleaseAgreeAllToContinue: "必須全部勾選「同意」才能繼續。" pleaseAgreeAllToContinue: "必須全部勾選「同意」才能繼續。"
continue: "繼續" continue: "繼續"
preservedUsernames: "保留的使用者名稱" preservedUsernames: "保留的使用者名稱"
@ -1175,20 +1181,20 @@ used: "已使用"
expired: "過期" expired: "過期"
doYouAgree: "你同意嗎?" doYouAgree: "你同意嗎?"
beSureToReadThisAsItIsImportant: "重要,請務必閱讀。" beSureToReadThisAsItIsImportant: "重要,請務必閱讀。"
iHaveReadXCarefullyAndAgree: "我已仔細閱讀並同意「{x}」的容。" iHaveReadXCarefullyAndAgree: "我已仔細閱讀並同意「{x}」的容。"
dialog: "對話方塊" dialog: "對話方塊"
icon: "圖示" icon: "圖示"
forYou: "給您" forYou: "給您"
currentAnnouncements: "最新公告" currentAnnouncements: "最新公告"
pastAnnouncements: "歷史公告" pastAnnouncements: "歷史公告"
youHaveUnreadAnnouncements: "有未讀的公告。" youHaveUnreadAnnouncements: "有未讀的公告。"
useSecurityKey: "請按照瀏覽器或設備上的說明使用安全金鑰或 Passkey。" useSecurityKey: "請按照瀏覽器或裝置上的說明來使用安全金鑰或 Passkey。"
replies: "回覆" replies: "回覆"
renotes: "轉發" renotes: "轉發"
loadReplies: "閱覽回覆" loadReplies: "閱覽回覆"
loadConversation: "閱覽對話" loadConversation: "閱覽對話"
pinnedList: "已置頂的清單" pinnedList: "已置頂的清單"
keepScreenOn: "保持設備螢幕開啟" keepScreenOn: "保持裝置螢幕開啟"
verifiedLink: "已驗證連結" verifiedLink: "已驗證連結"
notifyNotes: "開啟貼文通知" notifyNotes: "開啟貼文通知"
unnotifyNotes: "關閉貼文通知" unnotifyNotes: "關閉貼文通知"
@ -1243,7 +1249,7 @@ overwriteContentConfirm: "確定要覆蓋目前的內容嗎?"
seasonalScreenEffect: "隨季節變換畫面的呈現" seasonalScreenEffect: "隨季節變換畫面的呈現"
decorate: "設置頭像裝飾" decorate: "設置頭像裝飾"
addMfmFunction: "插入 MFM 功能語法" addMfmFunction: "插入 MFM 功能語法"
enableQuickAddMfmFunction: "顯示高級 MFM 選擇器" enableQuickAddMfmFunction: "顯示進階 MFM 選擇器"
bubbleGame: "氣泡遊戲" bubbleGame: "氣泡遊戲"
sfx: "音效" sfx: "音效"
soundWillBePlayed: "將播放音效" soundWillBePlayed: "將播放音效"
@ -1270,7 +1276,7 @@ useNativeUIForVideoAudioPlayer: "使用瀏覽器的 UI 播放影片與音訊"
keepOriginalFilename: "保留原始檔名" keepOriginalFilename: "保留原始檔名"
keepOriginalFilenameDescription: "如果關閉此設置,上傳時檔案名稱會自動替換為隨機字串。" keepOriginalFilenameDescription: "如果關閉此設置,上傳時檔案名稱會自動替換為隨機字串。"
noDescription: "沒有說明文字" noDescription: "沒有說明文字"
alwaysConfirmFollow: "隨時總是確認" alwaysConfirmFollow: "隨時總是確認"
inquiry: "聯絡我們" inquiry: "聯絡我們"
tryAgain: "請再試一次。" tryAgain: "請再試一次。"
confirmWhenRevealingSensitiveMedia: "要顯示敏感媒體時需確認" confirmWhenRevealingSensitiveMedia: "要顯示敏感媒體時需確認"
@ -1299,6 +1305,10 @@ yourNameContainsProhibitedWordsDescription: "名稱中包含禁止使用的字
thisContentsAreMarkedAsSigninRequiredByAuthor: "作者將其設定為需要登入才能顯示。" thisContentsAreMarkedAsSigninRequiredByAuthor: "作者將其設定為需要登入才能顯示。"
lockdown: "鎖定" lockdown: "鎖定"
pleaseSelectAccount: "請選擇帳戶" pleaseSelectAccount: "請選擇帳戶"
availableRoles: "可用角色"
acknowledgeNotesAndEnable: "了解注意事項後再開啟。"
federationSpecified: "此伺服器以白名單聯邦的方式運作。除了管理員指定的伺服器外,它無法與其他伺服器互動。"
federationDisabled: "此伺服器未開啟站台聯邦。無法與其他伺服器上的使用者互動。"
_accountSettings: _accountSettings:
requireSigninToViewContents: "須登入以顯示內容" requireSigninToViewContents: "須登入以顯示內容"
requireSigninToViewContentsDescription1: "必須登入才會顯示您建立的貼文等內容。可望有效防止資訊被爬蟲蒐集。" requireSigninToViewContentsDescription1: "必須登入才會顯示您建立的貼文等內容。可望有效防止資訊被爬蟲蒐集。"
@ -1364,7 +1374,7 @@ _initialAccountSetting:
theseSettingsCanEditLater: "這裡的設定可以在之後變更。" theseSettingsCanEditLater: "這裡的設定可以在之後變更。"
youCanEditMoreSettingsInSettingsPageLater: "除此之外,還可以在「設定」頁面進行各種設定。之後請確認看看。" youCanEditMoreSettingsInSettingsPageLater: "除此之外,還可以在「設定」頁面進行各種設定。之後請確認看看。"
followUsers: "為了構築時間軸,試著追隨您感興趣的使用者吧。" followUsers: "為了構築時間軸,試著追隨您感興趣的使用者吧。"
pushNotificationDescription: "啟用推送通知,就可以在設備上接收{name}的通知。" pushNotificationDescription: "啟用推送通知後,就可以在裝置上接收來自{name}的通知了。"
initialAccountSettingCompleted: "初始設定完成了!" initialAccountSettingCompleted: "初始設定完成了!"
haveFun: "盡情享受{name}吧!" haveFun: "盡情享受{name}吧!"
youCanContinueTutorial: "您可以繼續學習如何使用{name}(Misskey),也可以就此打住,立即開始使用。" youCanContinueTutorial: "您可以繼續學習如何使用{name}(Misskey),也可以就此打住,立即開始使用。"
@ -1384,12 +1394,12 @@ _initialTutorial:
description: "在Misskey上發布的內容稱為「貼文」。貼文在時間軸上按時間順序排列並即時更新。" description: "在Misskey上發布的內容稱為「貼文」。貼文在時間軸上按時間順序排列並即時更新。"
reply: "您可以回覆貼文,並像討論串一樣繼續對話。" reply: "您可以回覆貼文,並像討論串一樣繼續對話。"
renote: "您可以將此貼文分享到自己的時間軸。您也可以在引用時添加文字。" renote: "您可以將此貼文分享到自己的時間軸。您也可以在引用時添加文字。"
reaction: "您可以加反應。詳細資訊將在下一頁進行說明。" reaction: "您可以反應。詳細資訊將在下一頁進行說明。"
menu: "可執行各種操作,如查看貼文詳細資訊和複製連結。" menu: "可執行各種操作,如查看貼文詳細資訊和複製連結。"
_reaction: _reaction:
title: "什麼是反應?" title: "什麼是反應?"
description: "您可以在貼文中添加「反應」。您可以使用反應輕鬆隨意地表達「最愛/大心」所無法傳達的細微差別。" description: "您可以在貼文中加上「反應」。有些用「最愛/大心」無法傳達的感想,可以用反應輕鬆地表達出來。"
letsTryReacting: "可以透過點擊貼文上的「+」按鈕來添加反應。請嘗試在此範例貼文添加反應!" letsTryReacting: "按一下貼文上的「+」按鈕即可加入反應。試著對此範例貼文加上反應!"
reactToContinue: "添加反應以繼續教學課程。" reactToContinue: "添加反應以繼續教學課程。"
reactNotification: "當有人對您的貼文做出反應時會即時接收到通知。" reactNotification: "當有人對您的貼文做出反應時會即時接收到通知。"
reactDone: "按下「-」按鈕可以取消反應。" reactDone: "按下「-」按鈕可以取消反應。"
@ -1455,6 +1465,8 @@ _serverSettings:
reactionsBufferingDescription: "啟用時,可以顯著提高建立反應時的效能並減少資料庫的負載。 但是Redis 記憶體使用量會增加。" reactionsBufferingDescription: "啟用時,可以顯著提高建立反應時的效能並減少資料庫的負載。 但是Redis 記憶體使用量會增加。"
inquiryUrl: "聯絡表單網址" inquiryUrl: "聯絡表單網址"
inquiryUrlDescription: "指定伺服器運營者的聯絡表單網址,或包含運營者聯絡資訊網頁的網址。" inquiryUrlDescription: "指定伺服器運營者的聯絡表單網址,或包含運營者聯絡資訊網頁的網址。"
openRegistration: "允許建立帳戶"
openRegistrationWarning: "開放註冊伴隨著風險。 建議只有在伺服器受到持續監控,並準備好在出現問題時能立即處理的情況下才開放註冊。"
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "為了防止 spam如果一段期間內沒有偵測到審查員的活動此設定將自動關閉。" thisSettingWillAutomaticallyOffWhenModeratorsInactive: "為了防止 spam如果一段期間內沒有偵測到審查員的活動此設定將自動關閉。"
_accountMigration: _accountMigration:
moveFrom: "從其他帳戶遷移到這個帳戶" moveFrom: "從其他帳戶遷移到這個帳戶"
@ -1469,7 +1481,7 @@ _accountMigration:
startMigration: "遷移" startMigration: "遷移"
migrationConfirm: "確定要將這個帳戶遷移至 {account} 嗎?一旦遷移就無法撤銷,也就無法以原來的狀態使用這個帳戶。\n另外請確認在要遷移到的帳戶已經建立了一個別名。" migrationConfirm: "確定要將這個帳戶遷移至 {account} 嗎?一旦遷移就無法撤銷,也就無法以原來的狀態使用這個帳戶。\n另外請確認在要遷移到的帳戶已經建立了一個別名。"
movedAndCannotBeUndone: "帳戶已遷移。\n遷移無法撤消。" movedAndCannotBeUndone: "帳戶已遷移。\n遷移無法撤消。"
postMigrationNote: "取消追蹤此帳戶將在遷移操作後 24 小時執行。\n 此帳戶有 0 個關注者/關注者。 您的關注者仍然可以看到此帳戶的關注者帖子,因為您不會被取消關注。" postMigrationNote: "將在完成遷移後的 24 小時取消追隨所有帳號。\n此帳戶的追隨中/追隨者人數將歸零。由於不會解除粉絲對您的追隨,因此他們仍然可以繼續閱覽此帳戶僅對追隨者公開的貼文。"
movedTo: "要遷移到的帳戶:" movedTo: "要遷移到的帳戶:"
_achievements: _achievements:
earnedAt: "獲得日期" earnedAt: "獲得日期"
@ -1789,7 +1801,7 @@ _role:
avatarDecorationLimit: "頭像裝飾的最大設置量" avatarDecorationLimit: "頭像裝飾的最大設置量"
canImportAntennas: "允許匯入天線" canImportAntennas: "允許匯入天線"
canImportBlocking: "允許匯入封鎖名單" canImportBlocking: "允許匯入封鎖名單"
canImportFollowing: "允許匯入隨名單" canImportFollowing: "允許匯入隨名單"
canImportMuting: "允許匯入靜音名單" canImportMuting: "允許匯入靜音名單"
canImportUserLists: "允許匯入清單" canImportUserLists: "允許匯入清單"
_condition: _condition:
@ -2065,7 +2077,7 @@ _2fa:
step4: "從現在開始,任何登入操作都將要求您提供權杖。" step4: "從現在開始,任何登入操作都將要求您提供權杖。"
securityKeyNotSupported: "您的瀏覽器不支援安全金鑰。" securityKeyNotSupported: "您的瀏覽器不支援安全金鑰。"
registerTOTPBeforeKey: "如要註冊安全金鑰或 Passkey請先設定驗證應用程式。" registerTOTPBeforeKey: "如要註冊安全金鑰或 Passkey請先設定驗證應用程式。"
securityKeyInfo: "您可以設定使用支援 FIDO2 的硬體安全鎖、終端設備的指紋認證,或者 PIN 碼來登入。" securityKeyInfo: "您可以設定使用支援 FIDO2 的硬體安全金鑰以及裝置上的生物辨識、PIN 碼和密碼等來登入。"
registerSecurityKey: "註冊安全金鑰或 Passkey" registerSecurityKey: "註冊安全金鑰或 Passkey"
securityKeyName: "輸入金鑰名稱" securityKeyName: "輸入金鑰名稱"
tapSecurityKey: "按照瀏覽器的說明註冊安全金鑰或 Passkey。" tapSecurityKey: "按照瀏覽器的說明註冊安全金鑰或 Passkey。"
@ -2283,7 +2295,7 @@ _profile:
metadataEdit: "編輯附加資訊" metadataEdit: "編輯附加資訊"
metadataDescription: "可以在個人資料中以表格形式顯示其他資訊。" metadataDescription: "可以在個人資料中以表格形式顯示其他資訊。"
metadataLabel: "標籤" metadataLabel: "標籤"
metadataContent: "容" metadataContent: "容"
changeAvatar: "更換大頭貼" changeAvatar: "更換大頭貼"
changeBanner: "變更橫幅圖像" changeBanner: "變更橫幅圖像"
verifiedLinkDescription: "如果輸入包含您個人資料的網站 URL欄位旁邊將出現驗證圖示。" verifiedLinkDescription: "如果輸入包含您個人資料的網站 URL欄位旁邊將出現驗證圖示。"
@ -2353,9 +2365,6 @@ _pages:
newPage: "建立頁面" newPage: "建立頁面"
editPage: "編輯頁面" editPage: "編輯頁面"
readPage: "正在檢視原始碼" readPage: "正在檢視原始碼"
created: "頁面已建立"
updated: "頁面已更新"
deleted: "頁面已被刪除"
pageSetting: "頁面設定" pageSetting: "頁面設定"
nameAlreadyExists: "該頁面 URL 已存在" nameAlreadyExists: "該頁面 URL 已存在"
invalidNameTitle: "無效的頁面 URL" invalidNameTitle: "無效的頁面 URL"
@ -2623,7 +2632,7 @@ _externalResourceInstaller:
description: "已取得資料但解析 AiScript 時發生錯誤,導致無法載入。請聯絡外掛作者。請檢查 Javascript 控制台以取得錯誤詳細資訊。" description: "已取得資料但解析 AiScript 時發生錯誤,導致無法載入。請聯絡外掛作者。請檢查 Javascript 控制台以取得錯誤詳細資訊。"
_pluginInstallFailed: _pluginInstallFailed:
title: "外掛安裝失敗" title: "外掛安裝失敗"
description: "安裝插件時出現問題。請再試一次。請參閱 Javascript 控制台以取得錯誤詳細資訊。" description: "安裝外掛時出現問題。請再試一次。可參閱 Javascript 控制台以取得錯誤詳細資訊。"
_themeParseFailed: _themeParseFailed:
title: "佈景主題解析錯誤" title: "佈景主題解析錯誤"
description: "已取得資料但解析佈景主題時發生錯誤,導致無法載入。請聯絡佈景主題的作者。請檢查 Javascript 控制台以取得錯誤詳細資訊。" description: "已取得資料但解析佈景主題時發生錯誤,導致無法載入。請聯絡佈景主題的作者。請檢查 Javascript 控制台以取得錯誤詳細資訊。"
@ -2642,7 +2651,7 @@ _dataSaver:
description: "將不再自動載入網址預覽縮圖。" description: "將不再自動載入網址預覽縮圖。"
_code: _code:
title: "程式碼突出顯示" title: "程式碼突出顯示"
description: "如果使用了 MFM 的程式碼突顯標記,則在點擊之前不會載入。程式碼突顯要求加載每種程式語言的突顯定義檔案,但由於這些檔案不再自動載入,因此有望減少資料流量。" description: "如果使用了程式碼突顯語法(如 MFM則在點擊之前不會被載入。由於需要為對應的程式語言下載突顯定義檔案因此關閉自動載入有助於減少資料流量。"
_hemisphere: _hemisphere:
N: "北半球" N: "北半球"
S: "南半球" S: "南半球"
@ -2717,6 +2726,66 @@ _contextMenu:
app: "應用程式" app: "應用程式"
appWithShift: "Shift 鍵應用程式" appWithShift: "Shift 鍵應用程式"
native: "瀏覽器的使用者介面" native: "瀏覽器的使用者介面"
_gridComponent:
_error:
requiredValue: "此值為必填欄位"
columnTypeNotSupport: "正規表達式驗證僅支援 type:text 的欄位。"
patternNotMatch: "此值不符合 {pattern} 中的樣式。"
notUnique: "此值必須是唯一的"
_roleSelectDialog:
notSelected: "未選擇"
_customEmojisManager:
_gridCommon:
copySelectionRows: "複製選取的行"
copySelectionRanges: "複製選取的範圍"
deleteSelectionRows: "刪除所選的行"
deleteSelectionRanges: "刪除選取範圍的行"
searchSettings: "搜尋設定"
searchSettingCaption: "詳細設定搜尋條件。"
searchLimit: "顯示的數量"
sortOrder: "排序"
registrationLogs: "登錄日誌"
registrationLogsCaption: "會顯示更新或刪除表情符號時的日誌。進行更新或刪除操作,或切換頁面、重新載入後,日誌將會消失。"
alertEmojisRegisterFailedDescription: "更新或刪除表情符號失敗。詳情請查看登錄日誌。"
_logs:
showSuccessLogSwitch: "顯示成功日誌"
failureLogNothing: "沒有失敗的日誌。"
logNothing: "沒有日誌。"
_remote:
selectionRowDetail: "選取行的詳細資訊"
importSelectionRows: "匯入選取的行"
importSelectionRangesRows: "匯入選取範圍的行"
importEmojisButton: "匯入勾選的表情符號"
confirmImportEmojisTitle: "匯入表情符號"
confirmImportEmojisDescription: "將從遠端接收的{count}個表情符號進行匯入。請務必注意表情符號的授權。是否執行此操作?"
_local:
tabTitleList: "已登錄的表情符號列表"
tabTitleRegister: "登錄表情符號"
_list:
emojisNothing: "沒有登錄的表情符號。"
markAsDeleteTargetRows: "將選取的行設為刪除對象"
markAsDeleteTargetRanges: "將選取範圍的行設為刪除對象\n"
alertUpdateEmojisNothingDescription: "沒有選取需要變更的表情符號。"
alertDeleteEmojisNothingDescription: "沒有選取需要刪除的表情符號。"
confirmMovePage: "要移動到其他頁面嗎?"
confirmChangeView: "要更改顯示方式嗎?"
confirmUpdateEmojisDescription: "將更新{count}個表情符號。是否執行此操作?"
confirmDeleteEmojisDescription: "將刪除勾選的{count}個表情符號。是否執行此操作?"
confirmResetDescription: "目前所做的所有變更都會重設。"
confirmMovePageDesciption: "此頁面的表情符號已被更改。 \n若未儲存就直接離開此頁面則在此頁面進行的所有更改將會被捨棄。"
dialogSelectRoleTitle: "根據表情符號設定的角色進行搜尋"
_register:
uploadSettingTitle: "上傳設定"
uploadSettingDescription: "您可以在此畫面設定表情符號上傳時的操作。"
directoryToCategoryLabel: "在「類別」欄位中輸入目錄名稱"
directoryToCategoryCaption: "拖放目錄時,請在「類別」欄位中輸入目錄名稱。"
emojiInputAreaCaption: "以下列其中一種方式選擇您想要註冊的表情符號"
emojiInputAreaList1: "將圖片檔案或目錄拖放到此框中"
emojiInputAreaList2: "點擊此連結從電腦中選擇"
emojiInputAreaList3: "點擊此連結從雲端硬碟中選擇"
confirmRegisterEmojisDescription: "將列表中顯示的表情符號登錄為新的自定表情符號。是否確定?(為避免過高負荷,每次操作最多可登錄{count}個表情符號)"
confirmClearEmojisDescription: "放棄編輯內容並清除列表中顯示的表情符號。是否確定?"
confirmUploadEmojisDescription: "將拖放的{count}個檔案上傳到雲端硬碟。是否執行此操作?"
_embedCodeGen: _embedCodeGen:
title: "自訂嵌入程式碼" title: "自訂嵌入程式碼"
header: "檢視標頭 " header: "檢視標頭 "
@ -2737,3 +2806,37 @@ _selfXssPrevention:
description1: "如果您在此處貼上任何內容,惡意使用者可能會接管您的帳戶或竊取您的個人資訊。" description1: "如果您在此處貼上任何內容,惡意使用者可能會接管您的帳戶或竊取您的個人資訊。"
description2: "如果您不確切知道要貼上的內容,%c 請立即停止工作並關閉此視窗。" description2: "如果您不確切知道要貼上的內容,%c 請立即停止工作並關閉此視窗。"
description3: "細節請看這裡。{link}" description3: "細節請看這裡。{link}"
_followRequest:
recieved: "收到的請求"
sent: "送出的請求"
_remoteLookupErrors:
_federationNotAllowed:
title: "無法與這個伺服器通訊"
description: "與此伺服器的通訊可能被停用、或封鎖了該伺服器,或被該伺服器封鎖。\n請聯繫您的伺服器管理員。"
_uriInvalid:
title: "URI 不正確"
description: "輸入的 URI 有問題。請檢查是否輸入了 URI 中不能使用的字元。"
_requestFailed:
title: "請求失敗"
description: "與此伺服器的通訊失敗。可能是對方伺服器斷線。 此外,請檢查是否輸入了不正確或不存在的 URI。"
_responseInvalid:
title: "回應不正確"
description: "雖然能夠與這個伺服器通訊,但是取得的資料不正確。"
_responseInvalidIdHostNotMatch:
description: "輸入的 URI 的網域與最終取得的 URI 的網域不同。 如果您是透過第三方伺服器查詢遠端內容,請使用可在原始伺服器上取得的 URI 再次查詢。"
_noSuchObject:
title: "查無項目"
description: "無法找到所要求的資源,請再次檢查 URI。"
_captcha:
verify: "請通過 CAPTCHA 驗證"
testSiteKeyMessage: "可以輸入網站金鑰和秘密金鑰的測試值來檢查預覽。\n詳細資訊請參閱以下頁面。"
_error:
_requestFailed:
title: "CAPTCHA 請求失敗"
text: "請過一段時間後再執行,或再次檢查設定。"
_verificationFailed:
title: "CAPTCHA 驗證失敗"
text: "請再次檢查設定是否正確。"
_unknown:
title: "CAPTCHA 錯誤"
text: "發生了意外的錯誤。"

View file

@ -1,10 +1,10 @@
{ {
"name": "misskey", "name": "misskey",
"version": "2024.11.0-yumechinokuni.0", "version": "2025.2.0-yumechinokuni.1",
"codename": "nasubi", "codename": "nasubi",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://github.com/misskey-dev/misskey.git" "url": "https://forge.yumechi.jp/yume.yumechi-no-kuni.git"
}, },
"packageManager": "pnpm@9.6.0", "packageManager": "pnpm@9.6.0",
"workspaces": [ "workspaces": [
@ -24,15 +24,15 @@
"build": "pnpm build-pre && pnpm -r build && pnpm build-assets", "build": "pnpm build-pre && pnpm -r build && pnpm build-assets",
"build-storybook": "pnpm --filter frontend build-storybook", "build-storybook": "pnpm --filter frontend build-storybook",
"build-misskey-js-with-types": "pnpm build-pre && pnpm --filter backend... --filter=!misskey-js build && pnpm --filter backend generate-api-json --no-build && ncp packages/backend/built/api.json packages/misskey-js/generator/api.json && pnpm --filter misskey-js update-autogen-code && pnpm --filter misskey-js build && pnpm --filter misskey-js api", "build-misskey-js-with-types": "pnpm build-pre && pnpm --filter backend... --filter=!misskey-js build && pnpm --filter backend generate-api-json --no-build && ncp packages/backend/built/api.json packages/misskey-js/generator/api.json && pnpm --filter misskey-js update-autogen-code && pnpm --filter misskey-js build && pnpm --filter misskey-js api",
"start": "pnpm check:connect && cd packages/backend && node ./built/boot/entry.js", "start": "pnpm check:connect && cd packages/backend && cross-env RUN_MODE=web node ./built/boot/entry.js",
"start:test": "cd packages/backend && cross-env NODE_ENV=test node ./built/boot/entry.js", "start:test": "cd packages/backend && cross-env NODE_ENV=test RUN_MODE=test node ./built/boot/entry.js",
"init": "pnpm migrate", "init": "pnpm migrate",
"migrate": "cd packages/backend && pnpm migrate", "migrate": "cd packages/backend && pnpm migrate",
"revert": "cd packages/backend && pnpm revert", "revert": "cd packages/backend && pnpm revert",
"check:connect": "cd packages/backend && pnpm check:connect", "check:connect": "cd packages/backend && pnpm check:connect",
"migrateandstart": "pnpm migrate && pnpm start", "migrateandstart": "pnpm migrate && pnpm start",
"watch": "pnpm dev", "watch": "pnpm dev",
"dev": "node scripts/dev.mjs", "dev": "cross-env RUN_MODE=dev node scripts/dev.mjs",
"lint": "pnpm -r lint", "lint": "pnpm -r lint",
"cy:open": "pnpm cypress open --browser --e2e --config-file=cypress.config.ts", "cy:open": "pnpm cypress open --browser --e2e --config-file=cypress.config.ts",
"cy:run": "pnpm cypress run", "cy:run": "pnpm cypress run",
@ -51,31 +51,28 @@
"lodash": "4.17.21" "lodash": "4.17.21"
}, },
"dependencies": { "dependencies": {
"cross-env": "7.0.3",
"cssnano": "6.1.2", "cssnano": "6.1.2",
"execa": "8.0.1", "esbuild": "0.24.0",
"execa": "9.5.1",
"fast-glob": "3.3.2", "fast-glob": "3.3.2",
"glob": "11.0.0",
"ignore-walk": "6.0.5", "ignore-walk": "6.0.5",
"js-yaml": "4.1.0", "js-yaml": "4.1.0",
"postcss": "8.4.47", "postcss": "8.4.49",
"tar": "6.2.1", "tar": "6.2.1",
"terser": "5.33.0", "terser": "5.36.0",
"typescript": "5.6.2", "typescript": "5.6.3"
"esbuild": "0.23.1",
"glob": "11.0.0"
}, },
"devDependencies": { "devDependencies": {
"@misskey-dev/eslint-plugin": "2.0.3", "@misskey-dev/eslint-plugin": "2.0.3",
"@types/node": "20.14.12", "@types/node": "22.9.0",
"@typescript-eslint/eslint-plugin": "7.17.0", "@typescript-eslint/eslint-plugin": "7.17.0",
"@typescript-eslint/parser": "7.17.0", "@typescript-eslint/parser": "7.17.0",
"cross-env": "7.0.3", "cypress": "13.15.2",
"cypress": "13.14.2", "eslint": "9.14.0",
"eslint": "9.8.0", "globals": "15.12.0",
"globals": "15.9.0",
"ncp": "2.0.0", "ncp": "2.0.0",
"start-server-and-test": "2.0.8" "start-server-and-test": "2.0.8"
},
"optionalDependencies": {
"@tensorflow/tfjs-core": "4.4.0"
} }
} }

View file

@ -0,0 +1,18 @@
/*
* SPDX-FileCopyrightText: syuilo and misskey-project
* SPDX-License-Identifier: AGPL-3.0-only
*/
export class OptimizeEmojiIndex1709126576000 {
name = 'OptimizeEmojiIndex1709126576000'
async up(queryRunner) {
await queryRunner.query(`CREATE INDEX "IDX_EMOJI_ROLE_IDS" ON "emoji" using gin ("roleIdsThatCanBeUsedThisEmojiAsReaction")`)
await queryRunner.query(`CREATE INDEX "IDX_EMOJI_CATEGORY" ON "emoji" ("category")`)
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "IDX_EMOJI_CATEGORY"`)
await queryRunner.query(`DROP INDEX "IDX_EMOJI_ROLE_IDS"`)
}
}

View file

@ -0,0 +1,22 @@
/*
* SPDX-FileCopyrightText: hazelnoot and other Sharkey contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
export class IncreaseCharacterLimits1731757142918 {
name = 'IncreaseCharacterLimits1731757142918'
async up(queryRunner) {
await queryRunner.query(`DROP INDEX IF EXISTS "IDX_7cc8d9b0ee7861b4e5dc86ad85"`);
await queryRunner.query(`ALTER TABLE "drive_file" ALTER COLUMN "comment" TYPE varchar(32768)`);
await queryRunner.query(`ALTER TABLE "note" ALTER COLUMN "cw" TYPE text`);
await queryRunner.query(`CREATE INDEX "IDX_7cc8d9b0ee7861b4e5dc86ad85" ON "note" USING "pgroonga" ("cw")`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "note" ALTER COLUMN "cw" TYPE varchar(512)`);
await queryRunner.query(`ALTER TABLE "drive_file" ALTER COLUMN "comment" TYPE varchar(8192)`);
await queryRunner.query(`DROP INDEX "IDX_7cc8d9b0ee7861b4e5dc86ad85"`);
await queryRunner.query(`CREATE INDEX "IDX_7cc8d9b0ee7861b4e5dc86ad85" ON "note" USING "pgroonga" ("cw" pgroonga_varchar_full_text_search_ops)`);
}
}

View file

@ -0,0 +1,16 @@
/*
* SPDX-FileCopyrightText: syuilo and misskey-project and yumechi
* SPDX-License-Identifier: AGPL-3.0-only
*/
export class IndexUserDeleted1732071810971 {
name = 'IndexUserDeleted1732071810971'
async up(queryRunner) {
await queryRunner.query(`CREATE INDEX IF NOT EXISTS "IDX_199b79e682bdc5ba946f491686" ON "user" ("isDeleted")`);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX IF EXISTS "IDX_199b79e682bdc5ba946f491686"`);
}
}

View file

@ -48,8 +48,6 @@
"@swc/core-win32-arm64-msvc": "1.3.56", "@swc/core-win32-arm64-msvc": "1.3.56",
"@swc/core-win32-ia32-msvc": "1.3.56", "@swc/core-win32-ia32-msvc": "1.3.56",
"@swc/core-win32-x64-msvc": "1.3.56", "@swc/core-win32-x64-msvc": "1.3.56",
"@tensorflow/tfjs": "4.4.0",
"@tensorflow/tfjs-node": "4.4.0",
"bufferutil": "4.0.7", "bufferutil": "4.0.7",
"slacc-android-arm-eabi": "0.0.10", "slacc-android-arm-eabi": "0.0.10",
"slacc-android-arm64": "0.0.10", "slacc-android-arm64": "0.0.10",
@ -69,32 +67,32 @@
"dependencies": { "dependencies": {
"@aws-sdk/client-s3": "3.620.0", "@aws-sdk/client-s3": "3.620.0",
"@aws-sdk/lib-storage": "3.620.0", "@aws-sdk/lib-storage": "3.620.0",
"@bull-board/api": "6.0.0", "@bull-board/api": "6.5.0",
"@bull-board/fastify": "6.0.0", "@bull-board/fastify": "6.5.0",
"@bull-board/ui": "6.0.0", "@bull-board/ui": "6.5.0",
"@discordapp/twemoji": "15.1.0", "@discordapp/twemoji": "15.1.0",
"@fastify/accepts": "5.0.1", "@fastify/accepts": "5.0.1",
"@fastify/cookie": "10.0.1", "@fastify/cookie": "11.0.1",
"@fastify/cors": "10.0.1", "@fastify/cors": "10.0.1",
"@fastify/express": "4.0.1", "@fastify/express": "4.0.1",
"@fastify/http-proxy": "10.0.0", "@fastify/http-proxy": "10.0.1",
"@fastify/multipart": "9.0.1", "@fastify/multipart": "9.0.1",
"@fastify/static": "8.0.1", "@fastify/static": "8.0.2",
"@fastify/view": "10.0.1", "@fastify/view": "10.0.1",
"@misskey-dev/sharp-read-bmp": "1.2.0", "@misskey-dev/sharp-read-bmp": "1.2.0",
"@misskey-dev/summaly": "5.1.0", "@misskey-dev/summaly": "5.1.0",
"@napi-rs/canvas": "0.1.56", "@napi-rs/canvas": "0.1.56",
"@nestjs/common": "10.4.4", "@nestjs/common": "10.4.7",
"@nestjs/core": "10.4.4", "@nestjs/core": "10.4.7",
"@nestjs/testing": "10.4.4", "@nestjs/testing": "10.4.7",
"@peertube/http-signature": "1.7.0", "@peertube/http-signature": "1.7.0",
"@sentry/node": "8.20.0", "@sentry/node": "8.38.0",
"@sentry/profiling-node": "8.20.0", "@sentry/profiling-node": "8.38.0",
"@simplewebauthn/server": "10.0.1", "@simplewebauthn/server": "10.0.1",
"@sinonjs/fake-timers": "11.2.2", "@sinonjs/fake-timers": "11.2.2",
"@smithy/node-http-handler": "2.5.0", "@smithy/node-http-handler": "2.5.0",
"@swc/cli": "0.3.12", "@swc/cli": "0.3.12",
"@swc/core": "1.6.6", "@swc/core": "1.9.2",
"@twemoji/parser": "15.1.1", "@twemoji/parser": "15.1.1",
"accepts": "1.3.8", "accepts": "1.3.8",
"ajv": "8.17.1", "ajv": "8.17.1",
@ -103,7 +101,7 @@
"bcryptjs": "2.4.3", "bcryptjs": "2.4.3",
"blurhash": "2.0.5", "blurhash": "2.0.5",
"body-parser": "1.20.3", "body-parser": "1.20.3",
"bullmq": "5.15.0", "bullmq": "5.26.1",
"cacheable-lookup": "7.0.0", "cacheable-lookup": "7.0.0",
"cbor": "9.0.2", "cbor": "9.0.2",
"chalk": "5.3.0", "chalk": "5.3.0",
@ -117,11 +115,11 @@
"fastify": "5.0.0", "fastify": "5.0.0",
"fastify-raw-body": "5.0.0", "fastify-raw-body": "5.0.0",
"feed": "4.2.2", "feed": "4.2.2",
"file-type": "19.5.0", "file-type": "19.6.0",
"fluent-ffmpeg": "2.1.3", "fluent-ffmpeg": "2.1.3",
"form-data": "4.0.0", "form-data": "4.0.1",
"got": "14.4.2", "got": "14.4.4",
"happy-dom": "15.7.4", "happy-dom": "15.11.4",
"hpagent": "1.2.0", "hpagent": "1.2.0",
"htmlescape": "1.1.1", "htmlescape": "1.1.1",
"http-link-header": "1.1.3", "http-link-header": "1.1.3",
@ -134,31 +132,30 @@
"json5": "2.2.3", "json5": "2.2.3",
"jsonld": "8.3.2", "jsonld": "8.3.2",
"jsrsasign": "11.1.0", "jsrsasign": "11.1.0",
"meilisearch": "0.42.0",
"juice": "11.0.0", "juice": "11.0.0",
"meilisearch": "0.45.0",
"mfm-js": "0.24.0", "mfm-js": "0.24.0",
"microformats-parser": "2.0.2", "microformats-parser": "2.0.2",
"mime-types": "2.1.35", "mime-types": "2.1.35",
"misskey-js": "workspace:*", "misskey-js": "workspace:*",
"misskey-reversi": "workspace:*", "misskey-reversi": "workspace:*",
"ms": "3.0.0-canary.1", "ms": "3.0.0-canary.1",
"nanoid": "5.0.7", "nanoid": "5.0.8",
"nested-property": "4.0.0", "nested-property": "4.0.0",
"node-fetch": "3.3.2", "node-fetch": "3.3.2",
"nodemailer": "6.9.15", "nodemailer": "6.9.16",
"nsfwjs": "2.4.2",
"oauth": "0.10.0", "oauth": "0.10.0",
"oauth2orize": "1.12.0", "oauth2orize": "1.12.0",
"oauth2orize-pkce": "0.1.2", "oauth2orize-pkce": "0.1.2",
"os-utils": "0.0.14", "os-utils": "0.0.14",
"otpauth": "9.3.4", "otpauth": "9.3.4",
"parse5": "7.1.2", "parse5": "7.2.1",
"pg": "8.13.0", "pg": "8.13.1",
"pkce-challenge": "4.1.0", "pkce-challenge": "4.1.0",
"probe-image-size": "7.2.3", "probe-image-size": "7.2.3",
"prom-client": "^15.1.3",
"promise-limit": "2.7.0", "promise-limit": "2.7.0",
"pug": "3.0.3", "pug": "3.0.3",
"punycode": "2.3.1",
"qrcode": "1.5.4", "qrcode": "1.5.4",
"random-seed": "0.3.0", "random-seed": "0.3.0",
"ratelimiter": "3.4.1", "ratelimiter": "3.4.1",
@ -180,7 +177,7 @@
"tsc-alias": "1.8.10", "tsc-alias": "1.8.10",
"tsconfig-paths": "4.2.0", "tsconfig-paths": "4.2.0",
"typeorm": "0.3.20", "typeorm": "0.3.20",
"typescript": "5.6.2", "typescript": "5.6.3",
"ulid": "2.3.0", "ulid": "2.3.0",
"vary": "1.1.2", "vary": "1.1.2",
"web-push": "3.6.7", "web-push": "3.6.7",
@ -189,33 +186,32 @@
}, },
"devDependencies": { "devDependencies": {
"@jest/globals": "29.7.0", "@jest/globals": "29.7.0",
"@nestjs/platform-express": "10.4.4", "@nestjs/platform-express": "10.4.7",
"@simplewebauthn/types": "10.0.0", "@simplewebauthn/types": "10.0.0",
"@swc/jest": "0.2.36", "@swc/jest": "0.2.37",
"@types/accepts": "1.3.7", "@types/accepts": "1.3.7",
"@types/archiver": "6.0.2", "@types/archiver": "6.0.3",
"@types/bcryptjs": "2.4.6", "@types/bcryptjs": "2.4.6",
"@types/body-parser": "1.19.5", "@types/body-parser": "1.19.5",
"@types/color-convert": "2.0.4", "@types/color-convert": "2.0.4",
"@types/content-disposition": "0.5.8", "@types/content-disposition": "0.5.8",
"@types/fluent-ffmpeg": "2.1.26", "@types/fluent-ffmpeg": "2.1.27",
"@types/htmlescape": "1.1.3", "@types/htmlescape": "1.1.3",
"@types/http-link-header": "1.0.7", "@types/http-link-header": "1.0.7",
"@types/jest": "29.5.13", "@types/jest": "29.5.14",
"@types/js-yaml": "4.0.9", "@types/js-yaml": "4.0.9",
"@types/jsdom": "21.1.7", "@types/jsdom": "21.1.7",
"@types/jsonld": "1.5.15", "@types/jsonld": "1.5.15",
"@types/jsrsasign": "10.5.14", "@types/jsrsasign": "10.5.14",
"@types/mime-types": "2.1.4", "@types/mime-types": "2.1.4",
"@types/ms": "0.7.34", "@types/ms": "0.7.34",
"@types/node": "20.14.12", "@types/node": "22.9.0",
"@types/nodemailer": "6.4.16", "@types/nodemailer": "6.4.16",
"@types/oauth": "0.9.5", "@types/oauth": "0.9.6",
"@types/oauth2orize": "1.11.5", "@types/oauth2orize": "1.11.5",
"@types/oauth2orize-pkce": "0.1.2", "@types/oauth2orize-pkce": "0.1.2",
"@types/pg": "8.11.10", "@types/pg": "8.11.10",
"@types/pug": "2.0.10", "@types/pug": "2.0.10",
"@types/punycode": "2.1.4",
"@types/qrcode": "1.5.5", "@types/qrcode": "1.5.5",
"@types/random-seed": "0.3.5", "@types/random-seed": "0.3.5",
"@types/ratelimiter": "3.4.6", "@types/ratelimiter": "3.4.6",
@ -227,14 +223,14 @@
"@types/tinycolor2": "1.4.6", "@types/tinycolor2": "1.4.6",
"@types/tmp": "0.2.6", "@types/tmp": "0.2.6",
"@types/vary": "1.1.3", "@types/vary": "1.1.3",
"@types/web-push": "3.6.3", "@types/web-push": "3.6.4",
"@types/ws": "8.5.12", "@types/ws": "8.5.13",
"@typescript-eslint/eslint-plugin": "7.17.0", "@typescript-eslint/eslint-plugin": "7.17.0",
"@typescript-eslint/parser": "7.17.0", "@typescript-eslint/parser": "7.17.0",
"aws-sdk-client-mock": "4.0.1", "aws-sdk-client-mock": "4.0.1",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"eslint-plugin-import": "2.30.0", "eslint-plugin-import": "2.30.0",
"execa": "9.4.0", "execa": "9.5.1",
"fkill": "9.0.0", "fkill": "9.0.0",
"jest": "29.7.0", "jest": "29.7.0",
"jest-mock": "29.7.0", "jest-mock": "29.7.0",

View file

@ -22,6 +22,7 @@ async function connectToRedis(redisOptions) {
lazyConnect: true, lazyConnect: true,
reconnectOnError: false, reconnectOnError: false,
showFriendlyErrorStack: true, showFriendlyErrorStack: true,
connectTimeout: 10000,
}); });
redis.on('error', e => reject(e)); redis.on('error', e => reject(e));
@ -50,7 +51,9 @@ const promises = Array
])) ]))
.map(connectToRedis) .map(connectToRedis)
.concat([ .concat([
connectToPostgres() connectToPostgres().then(() => { console.log('Connected to PostgreSQL.'); }),
]); ]);
await Promise.allSettled(promises); await Promise.allSettled(promises);
process.exit(0);

View file

@ -7,14 +7,14 @@ import { Global, Inject, Module } from '@nestjs/common';
import * as Redis from 'ioredis'; import * as Redis from 'ioredis';
import { DataSource } from 'typeorm'; import { DataSource } from 'typeorm';
import { MeiliSearch } from 'meilisearch'; import { MeiliSearch } from 'meilisearch';
import { MiMeta } from '@/models/Meta.js';
import { DI } from './di-symbols.js'; import { DI } from './di-symbols.js';
import { Config, loadConfig } from './config.js'; import { Config, loadConfig } from './config.js';
import { createPostgresDataSource } from './postgres.js'; import { createPostgresDataSource } from './postgres.js';
import { RepositoryModule } from './models/RepositoryModule.js'; import { RepositoryModule } from './models/RepositoryModule.js';
import { allSettled } from './misc/promise-tracker.js'; import { allSettled } from './misc/promise-tracker.js';
import type { Provider, OnApplicationShutdown } from '@nestjs/common';
import { MiMeta } from '@/models/Meta.js';
import { GlobalEvents } from './core/GlobalEventService.js'; import { GlobalEvents } from './core/GlobalEventService.js';
import type { Provider, OnApplicationShutdown } from '@nestjs/common';
const $config: Provider = { const $config: Provider = {
provide: DI.config, provide: DI.config,
@ -24,7 +24,7 @@ const $config: Provider = {
const $db: Provider = { const $db: Provider = {
provide: DI.db, provide: DI.db,
useFactory: async (config) => { useFactory: async (config) => {
const db = createPostgresDataSource(config); const db = createPostgresDataSource(config, true);
return await db.initialize(); return await db.initialize();
}, },
inject: [DI.config], inject: [DI.config],
@ -33,7 +33,11 @@ const $db: Provider = {
const $meilisearch: Provider = { const $meilisearch: Provider = {
provide: DI.meilisearch, provide: DI.meilisearch,
useFactory: (config: Config) => { useFactory: (config: Config) => {
if (config.meilisearch) { if (config.fulltextSearch?.provider === 'meilisearch') {
if (!config.meilisearch) {
throw new Error('MeiliSearch is enabled but no configuration is provided');
}
return new MeiliSearch({ return new MeiliSearch({
host: `${config.meilisearch.ssl ? 'https' : 'http'}://${config.meilisearch.host}:${config.meilisearch.port}`, host: `${config.meilisearch.ssl ? 'https' : 'http'}://${config.meilisearch.host}:${config.meilisearch.port}`,
apiKey: config.meilisearch.apiKey, apiKey: config.meilisearch.apiKey,

View file

@ -4,6 +4,7 @@
*/ */
import { NestFactory } from '@nestjs/core'; import { NestFactory } from '@nestjs/core';
import * as prom from 'prom-client';
import { ChartManagementService } from '@/core/chart/ChartManagementService.js'; import { ChartManagementService } from '@/core/chart/ChartManagementService.js';
import { QueueProcessorService } from '@/queue/QueueProcessorService.js'; import { QueueProcessorService } from '@/queue/QueueProcessorService.js';
import { NestLogger } from '@/NestLogger.js'; import { NestLogger } from '@/NestLogger.js';
@ -12,8 +13,9 @@ import { QueueStatsService } from '@/daemons/QueueStatsService.js';
import { ServerStatsService } from '@/daemons/ServerStatsService.js'; import { ServerStatsService } from '@/daemons/ServerStatsService.js';
import { ServerService } from '@/server/ServerService.js'; import { ServerService } from '@/server/ServerService.js';
import { MainModule } from '@/MainModule.js'; import { MainModule } from '@/MainModule.js';
import { MetricsService } from '@/server/api/MetricsService.js';
export async function server() { export async function server(workerRegistry?: prom.AggregatorRegistry<prom.PrometheusContentType>) {
const app = await NestFactory.createApplicationContext(MainModule, { const app = await NestFactory.createApplicationContext(MainModule, {
logger: new NestLogger(), logger: new NestLogger(),
}); });
@ -22,6 +24,9 @@ export async function server() {
await serverService.launch(); await serverService.launch();
if (process.env.NODE_ENV !== 'test') { if (process.env.NODE_ENV !== 'test') {
if (workerRegistry) {
app.get(MetricsService).setWorkerRegistry(workerRegistry);
}
app.get(ChartManagementService).start(); app.get(ChartManagementService).start();
app.get(QueueStatsService).start(); app.get(QueueStatsService).start();
app.get(ServerStatsService).start(); app.get(ServerStatsService).start();

View file

@ -8,6 +8,7 @@
*/ */
import cluster from 'node:cluster'; import cluster from 'node:cluster';
import * as prom from 'prom-client';
import { EventEmitter } from 'node:events'; import { EventEmitter } from 'node:events';
import chalk from 'chalk'; import chalk from 'chalk';
import Xev from 'xev'; import Xev from 'xev';
@ -17,6 +18,15 @@ import { masterMain } from './master.js';
import { workerMain } from './worker.js'; import { workerMain } from './worker.js';
import { readyRef } from './ready.js'; import { readyRef } from './ready.js';
const workerRegistry = new prom.AggregatorRegistry<prom.PrometheusContentType>();
prom.collectDefaultMetrics({
labels: {
cluster_type: `${cluster.isPrimary ? 'master' : 'worker'}`,
worker_id: cluster.worker?.id.toString() || 'none'
}
});
import 'reflect-metadata'; import 'reflect-metadata';
process.title = `Misskey (${cluster.isPrimary ? 'master' : 'worker'})`; process.title = `Misskey (${cluster.isPrimary ? 'master' : 'worker'})`;
@ -68,16 +78,22 @@ process.on('exit', code => {
//#endregion //#endregion
if (cluster.isPrimary || envOption.disableClustering) { if (!envOption.disableClustering) {
await masterMain();
if (cluster.isPrimary) { if (cluster.isPrimary) {
logger.info(`Start main process... pid: ${process.pid}`);
await masterMain();
ev.mount(); ev.mount();
} else if (cluster.isWorker) {
logger.info(`Start worker process... pid: ${process.pid}`);
await workerMain();
} else {
throw new Error('Unknown process type');
} }
} } else {
// 非clusterの場合はMasterのみが起動するため、Workerの処理は行わない(cluster.isWorker === trueの状態でこのブロックに来ることはない)
if (cluster.isWorker || envOption.disableClustering) { logger.info(`Start main process... pid: ${process.pid}`);
await workerMain(); await masterMain();
ev.mount();
} }
readyRef.value = true; readyRef.value = true;

View file

@ -7,6 +7,7 @@ import * as fs from 'node:fs';
import { fileURLToPath } from 'node:url'; import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path'; import { dirname } from 'node:path';
import * as os from 'node:os'; import * as os from 'node:os';
import * as prom from 'prom-client';
import cluster from 'node:cluster'; import cluster from 'node:cluster';
import chalk from 'chalk'; import chalk from 'chalk';
import chalkTemplate from 'chalk-template'; import chalkTemplate from 'chalk-template';
@ -18,6 +19,7 @@ import type { Config } from '@/config.js';
import { showMachineInfo } from '@/misc/show-machine-info.js'; import { showMachineInfo } from '@/misc/show-machine-info.js';
import { envOption } from '@/env.js'; import { envOption } from '@/env.js';
import { jobQueue, server } from './common.js'; import { jobQueue, server } from './common.js';
import { metricGauge } from '@/server/api/MetricsService.js';
const _filename = fileURLToPath(import.meta.url); const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename); const _dirname = dirname(_filename);
@ -29,6 +31,24 @@ const bootLogger = logger.createSubLogger('boot', 'magenta');
const themeColor = chalk.hex('#86b300'); const themeColor = chalk.hex('#86b300');
const mBuildInfo = metricGauge({
name: 'misskey_build_info',
help: 'Misskey build information',
labelNames: ['gitCommit', 'gitDescribe', 'node_version']
});
mBuildInfo?.set({
gitCommit: meta.gitCommit || 'unknown',
gitDescribe: meta.gitDescribe || 'unknown',
node_version: process.version
}, 1);
const mStartupTime = metricGauge({
name: 'misskey_startup_time',
help: 'Misskey startup time',
labelNames: ['pid']
});
function greet() { function greet() {
if (!envOption.quiet) { if (!envOption.quiet) {
//#region Misskey logo //#region Misskey logo
@ -54,7 +74,7 @@ function greet() {
/** /**
* Init master process * Init master process
*/ */
export async function masterMain() { export async function masterMain(workerRegistry?: prom.AggregatorRegistry<prom.PrometheusContentType>) {
let config!: Config; let config!: Config;
// initialize app // initialize app
@ -64,6 +84,7 @@ export async function masterMain() {
await showMachineInfo(bootLogger); await showMachineInfo(bootLogger);
showNodejsVersion(); showNodejsVersion();
config = loadConfigBoot(); config = loadConfigBoot();
//await connectDb(); //await connectDb();
if (config.pidFile) fs.writeFileSync(config.pidFile, process.pid.toString()); if (config.pidFile) fs.writeFileSync(config.pidFile, process.pid.toString());
} catch (e) { } catch (e) {
@ -91,13 +112,15 @@ export async function masterMain() {
}); });
} }
mStartupTime?.set({ pid: process.pid }, Date.now());
if (envOption.disableClustering) { if (envOption.disableClustering) {
if (envOption.onlyServer) { if (envOption.onlyServer) {
await server(); await server(workerRegistry);
} else if (envOption.onlyQueue) { } else if (envOption.onlyQueue) {
await jobQueue(); await jobQueue();
} else { } else {
await server(); await server(workerRegistry);
await jobQueue(); await jobQueue();
} }
} else { } else {
@ -105,8 +128,9 @@ export async function masterMain() {
// nop // nop
} else if (envOption.onlyQueue) { } else if (envOption.onlyQueue) {
// nop // nop
await jobQueue();
} else { } else {
await server(); await server(workerRegistry);
} }
await spawnWorkers(config.clusterLimit); await spawnWorkers(config.clusterLimit);

View file

@ -4,6 +4,7 @@
*/ */
import cluster from 'node:cluster'; import cluster from 'node:cluster';
import { collectDefaultMetrics, AggregatorRegistry, RegistryContentType } from 'prom-client';
import * as Sentry from '@sentry/node'; import * as Sentry from '@sentry/node';
import { nodeProfilingIntegration } from '@sentry/profiling-node'; import { nodeProfilingIntegration } from '@sentry/profiling-node';
import { envOption } from '@/env.js'; import { envOption } from '@/env.js';

View file

@ -9,6 +9,7 @@ import { dirname, resolve } from 'node:path';
import * as yaml from 'js-yaml'; import * as yaml from 'js-yaml';
import * as Sentry from '@sentry/node'; import * as Sentry from '@sentry/node';
import type { RedisOptions } from 'ioredis'; import type { RedisOptions } from 'ioredis';
import { type CSPHashed, hashResource, hashSourceFile } from './server/csp.js';
type RedisOptionsSource = Partial<RedisOptions> & { type RedisOptionsSource = Partial<RedisOptions> & {
host: string; host: string;
@ -19,6 +20,18 @@ type RedisOptionsSource = Partial<RedisOptions> & {
prefix?: string; prefix?: string;
}; };
type BrowserSandboxing = {
// send Referrer-Policy: strict-origin
strictOriginReferrer?: boolean;
csp?: {
disable?: boolean;
appendDirectives?: {
[directive: string]: string | string[];
}
};
};
/** /**
* *
*/ */
@ -51,6 +64,9 @@ type Source = {
redisForJobQueue?: RedisOptionsSource; redisForJobQueue?: RedisOptionsSource;
redisForTimelines?: RedisOptionsSource; redisForTimelines?: RedisOptionsSource;
redisForReactions?: RedisOptionsSource; redisForReactions?: RedisOptionsSource;
fulltextSearch?: {
provider?: FulltextSearchProvider;
};
meilisearch?: { meilisearch?: {
host: string; host: string;
port: string; port: string;
@ -59,11 +75,16 @@ type Source = {
index: string; index: string;
scope?: 'local' | 'global' | string[]; scope?: 'local' | 'global' | string[];
}; };
prometheusMetrics?: { enable: boolean, scrapeToken?: string };
sentryForBackend?: { options: Partial<Sentry.NodeOptions>; enableNodeProfiling: boolean; }; sentryForBackend?: { options: Partial<Sentry.NodeOptions>; enableNodeProfiling: boolean; };
sentryForFrontend?: { options: Partial<Sentry.NodeOptions> }; sentryForFrontend?: { options: Partial<Sentry.NodeOptions> };
publishTarballInsteadOfProvideRepositoryUrl?: boolean; publishTarballInsteadOfProvideRepositoryUrl?: boolean;
browserSandboxing?: BrowserSandboxing;
setupPassword?: string; setupPassword?: string;
proxy?: string; proxy?: string;
@ -100,6 +121,13 @@ type Source = {
perUserNotificationsMaxCount?: number; perUserNotificationsMaxCount?: number;
deactivateAntennaThreshold?: number; deactivateAntennaThreshold?: number;
pidFile: string; pidFile: string;
logging?: {
sql?: {
disableQueryTruncation? : boolean,
enableQueryParamLogging? : boolean,
}
}
}; };
export type Config = { export type Config = {
@ -126,6 +154,9 @@ export type Config = {
user: string; user: string;
pass: string; pass: string;
}[] | undefined; }[] | undefined;
fulltextSearch?: {
provider?: FulltextSearchProvider;
};
meilisearch: { meilisearch: {
host: string; host: string;
port: string; port: string;
@ -153,8 +184,20 @@ export type Config = {
inboxJobMaxAttempts: number | undefined; inboxJobMaxAttempts: number | undefined;
proxyRemoteFiles: boolean | undefined; proxyRemoteFiles: boolean | undefined;
signToActivityPubGet: boolean | undefined; signToActivityPubGet: boolean | undefined;
logging?: {
sql?: {
disableQueryTruncation? : boolean,
enableQueryParamLogging? : boolean,
}
}
browserSandboxing: BrowserSandboxing;
cspPrerenderedContent: Map<string, CSPHashed>;
version: string; version: string;
gitDescribe: string;
gitCommit: string;
publishTarballInsteadOfProvideRepositoryUrl: boolean; publishTarballInsteadOfProvideRepositoryUrl: boolean;
setupPassword: string | undefined; setupPassword: string | undefined;
host: string; host: string;
@ -178,14 +221,20 @@ export type Config = {
redisForJobQueue: RedisOptions & RedisOptionsSource; redisForJobQueue: RedisOptions & RedisOptionsSource;
redisForTimelines: RedisOptions & RedisOptionsSource; redisForTimelines: RedisOptions & RedisOptionsSource;
redisForReactions: RedisOptions & RedisOptionsSource; redisForReactions: RedisOptions & RedisOptionsSource;
prometheusMetrics : { enable: boolean, scrapeToken?: string } | undefined;
sentryForBackend: { options: Partial<Sentry.NodeOptions>; enableNodeProfiling: boolean; } | undefined; sentryForBackend: { options: Partial<Sentry.NodeOptions>; enableNodeProfiling: boolean; } | undefined;
sentryForFrontend: { options: Partial<Sentry.NodeOptions> } | undefined; sentryForFrontend: { options: Partial<Sentry.NodeOptions> } | undefined;
perChannelMaxNoteCacheCount: number; perChannelMaxNoteCacheCount: number;
perUserNotificationsMaxCount: number; perUserNotificationsMaxCount: number;
deactivateAntennaThreshold: number; deactivateAntennaThreshold: number;
pidFile: string; pidFile: string;
}; };
export type FulltextSearchProvider = 'sqlLike' | 'sqlPgroonga' | 'meilisearch';
const _filename = fileURLToPath(import.meta.url); const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename); const _dirname = dirname(_filename);
@ -218,7 +267,7 @@ export function loadConfig(): Config {
const config = yaml.load(fs.readFileSync(path, 'utf-8')) as Source; const config = yaml.load(fs.readFileSync(path, 'utf-8')) as Source;
const url = tryCreateUrl(config.url ?? process.env.MISSKEY_URL ?? ''); const url = tryCreateUrl(config.url ?? process.env.MISSKEY_URL ?? '');
const version = meta.version; const { version, gitDescribe, gitCommit } = meta;
const host = url.host; const host = url.host;
const hostname = url.hostname; const hostname = url.hostname;
const scheme = url.protocol.replace(/:$/, ''); const scheme = url.protocol.replace(/:$/, '');
@ -233,9 +282,21 @@ export function loadConfig(): Config {
: null; : null;
const internalMediaProxy = `${scheme}://${host}/proxy`; const internalMediaProxy = `${scheme}://${host}/proxy`;
const redis = convertRedisOptions(config.redis, host); const redis = convertRedisOptions(config.redis, host);
const htmlScriptPrelude = `var VERSION = ${JSON.stringify(version)}; var CLIENT_ENTRY = ${JSON.stringify(frontendManifest['src/_boot_.ts'].file)};`;
const htmlEmbedScriptPrelude = `var VERSION = ${JSON.stringify(version)}; var CLIENT_ENTRY = ${JSON.stringify(frontendEmbedManifest['src/boot.ts'].file)};`;
const cspPrerenderedContent = new Map([
['.prelude.js', hashResource(htmlScriptPrelude)],
['.prelude.embed.js', hashResource(htmlEmbedScriptPrelude)],
...['boot.js', 'style.css', 'style.embed.css', 'boot.embed.js',
'bios.css', 'bios.js', 'cli.css', 'cli.js', 'error.css'
].map((file) => [file, hashSourceFile(`${_dirname}/server/web/${file}`)] as [string, CSPHashed]),
]);
return { return {
version, version,
gitCommit,
gitDescribe,
browserSandboxing: config.browserSandboxing ?? { strictOriginReferrer: true },
publishTarballInsteadOfProvideRepositoryUrl: !!config.publishTarballInsteadOfProvideRepositoryUrl, publishTarballInsteadOfProvideRepositoryUrl: !!config.publishTarballInsteadOfProvideRepositoryUrl,
setupPassword: config.setupPassword, setupPassword: config.setupPassword,
url: url.origin, url: url.origin,
@ -244,6 +305,7 @@ export function loadConfig(): Config {
chmodSocket: config.chmodSocket, chmodSocket: config.chmodSocket,
disableHsts: config.disableHsts, disableHsts: config.disableHsts,
hstsPreload: config.hstsPreload ?? false, hstsPreload: config.hstsPreload ?? false,
cspPrerenderedContent,
host, host,
hostname, hostname,
scheme, scheme,
@ -255,12 +317,14 @@ export function loadConfig(): Config {
db: { ...config.db, db: dbDb, user: dbUser, pass: dbPass }, db: { ...config.db, db: dbDb, user: dbUser, pass: dbPass },
dbReplications: config.dbReplications, dbReplications: config.dbReplications,
dbSlaves: config.dbSlaves, dbSlaves: config.dbSlaves,
fulltextSearch: config.fulltextSearch,
meilisearch: config.meilisearch, meilisearch: config.meilisearch,
redis, redis,
redisForPubsub: config.redisForPubsub ? convertRedisOptions(config.redisForPubsub, host) : redis, redisForPubsub: config.redisForPubsub ? convertRedisOptions(config.redisForPubsub, host) : redis,
redisForJobQueue: config.redisForJobQueue ? convertRedisOptions(config.redisForJobQueue, host) : redis, redisForJobQueue: config.redisForJobQueue ? convertRedisOptions(config.redisForJobQueue, host) : redis,
redisForTimelines: config.redisForTimelines ? convertRedisOptions(config.redisForTimelines, host) : redis, redisForTimelines: config.redisForTimelines ? convertRedisOptions(config.redisForTimelines, host) : redis,
redisForReactions: config.redisForReactions ? convertRedisOptions(config.redisForReactions, host) : redis, redisForReactions: config.redisForReactions ? convertRedisOptions(config.redisForReactions, host) : redis,
prometheusMetrics: config.prometheusMetrics,
sentryForBackend: config.sentryForBackend, sentryForBackend: config.sentryForBackend,
sentryForFrontend: config.sentryForFrontend, sentryForFrontend: config.sentryForFrontend,
id: config.id, id: config.id,
@ -296,6 +360,7 @@ export function loadConfig(): Config {
perUserNotificationsMaxCount: config.perUserNotificationsMaxCount ?? 500, perUserNotificationsMaxCount: config.perUserNotificationsMaxCount ?? 500,
deactivateAntennaThreshold: config.deactivateAntennaThreshold ?? (1000 * 60 * 60 * 24 * 7), deactivateAntennaThreshold: config.deactivateAntennaThreshold ?? (1000 * 60 * 60 * 24 * 7),
pidFile: config.pidFile, pidFile: config.pidFile,
logging: config.logging,
}; };
} }

View file

@ -26,6 +26,18 @@ export const DB_MAX_NOTE_TEXT_LENGTH = 8192;
export const DB_MAX_IMAGE_COMMENT_LENGTH = 512; export const DB_MAX_IMAGE_COMMENT_LENGTH = 512;
//#endregion //#endregion
export const FILE_TYPE_IMAGE = [
'image/png',
'image/gif',
'image/jpeg',
'image/webp',
'image/avif',
'image/apng',
'image/bmp',
'image/tiff',
'image/x-icon',
];
// ブラウザで直接表示することを許可するファイルの種類のリスト // ブラウザで直接表示することを許可するファイルの種類のリスト
// ここに含まれないものは application/octet-stream としてレスポンスされる // ここに含まれないものは application/octet-stream としてレスポンスされる
// SVGはXSSを生むので許可しない // SVGはXSSを生むので許可しない

View file

@ -154,28 +154,28 @@ export class AbuseReportNotificationService implements OnApplicationShutdown {
const convertedReports = abuseReports.map(it => { const convertedReports = abuseReports.map(it => {
return { return {
...it, ...it,
reporter: usersMap.get(it.reporterId), reporter: usersMap.get(it.reporterId) ?? null,
targetUser: usersMap.get(it.targetUserId), targetUser: usersMap.get(it.targetUserId) ?? null,
assignee: it.assigneeId ? usersMap.get(it.assigneeId) : null, assignee: it.assigneeId ? (usersMap.get(it.assigneeId) ?? null) : null,
}; };
}); });
const recipientWebhookIds = await this.fetchWebhookRecipients() const inactiveRecipients = await this.fetchWebhookRecipients()
.then(it => it .then(it => it.filter(it => !it.isActive));
.filter(it => it.isActive && it.systemWebhookId && it.method === 'webhook') const withoutWebhookIds = inactiveRecipients
.map(it => it.systemWebhookId) .map(it => it.systemWebhookId)
.filter(x => x != null)); .filter(x => x != null);
for (const webhookId of recipientWebhookIds) { return Promise.all(
await Promise.all( convertedReports.map(it => {
convertedReports.map(it => { return this.systemWebhookService.enqueueSystemWebhook(
return this.systemWebhookService.enqueueSystemWebhook( type,
webhookId, it,
type, {
it, excludes: withoutWebhookIds,
); },
}), );
); }),
} );
} }
/** /**

View file

@ -1,72 +0,0 @@
/*
* SPDX-FileCopyrightText: syuilo and misskey-project
* SPDX-License-Identifier: AGPL-3.0-only
*/
import * as fs from 'node:fs';
import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';
import { Injectable } from '@nestjs/common';
import * as nsfw from 'nsfwjs';
import si from 'systeminformation';
import { Mutex } from 'async-mutex';
import { bindThis } from '@/decorators.js';
const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename);
const REQUIRED_CPU_FLAGS = ['avx2', 'fma'];
let isSupportedCpu: undefined | boolean = undefined;
@Injectable()
export class AiService {
private model: nsfw.NSFWJS;
private modelLoadMutex: Mutex = new Mutex();
constructor(
) {
}
@bindThis
public async detectSensitive(path: string): Promise<nsfw.predictionType[] | null> {
try {
if (isSupportedCpu === undefined) {
const cpuFlags = await this.getCpuFlags();
isSupportedCpu = REQUIRED_CPU_FLAGS.every(required => cpuFlags.includes(required));
}
if (!isSupportedCpu) {
console.error('This CPU cannot use TensorFlow.');
return null;
}
const tf = await import('@tensorflow/tfjs-node');
if (this.model == null) {
await this.modelLoadMutex.runExclusive(async () => {
if (this.model == null) {
this.model = await nsfw.load(`file://${_dirname}/../../nsfw-model/`, { size: 299 });
}
});
}
const buffer = await fs.promises.readFile(path);
const image = await tf.node.decodeImage(buffer, 3) as any;
try {
const predictions = await this.model.classify(image);
return predictions;
} finally {
image.dispose();
}
} catch (err) {
console.error(err);
return null;
}
}
@bindThis
private async getCpuFlags(): Promise<string[]> {
const str = await si.cpuFlags();
return str.split(/\s+/);
}
}

View file

@ -72,7 +72,7 @@ export class AnnouncementService {
updatedAt: null, updatedAt: null,
title: values.title, title: values.title,
text: values.text, text: values.text,
imageUrl: values.imageUrl, imageUrl: values.imageUrl || null,
icon: values.icon, icon: values.icon,
display: values.display, display: values.display,
forExistingUsers: values.forExistingUsers, forExistingUsers: values.forExistingUsers,

View file

@ -6,6 +6,65 @@
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { HttpRequestService } from '@/core/HttpRequestService.js'; import { HttpRequestService } from '@/core/HttpRequestService.js';
import { bindThis } from '@/decorators.js'; import { bindThis } from '@/decorators.js';
import { MetaService } from '@/core/MetaService.js';
import { MiMeta } from '@/models/Meta.js';
import Logger from '@/logger.js';
import { LoggerService } from './LoggerService.js';
export const supportedCaptchaProviders = ['none', 'hcaptcha', 'mcaptcha', 'recaptcha', 'turnstile', 'testcaptcha'] as const;
export type CaptchaProvider = typeof supportedCaptchaProviders[number];
export const captchaErrorCodes = {
invalidProvider: Symbol('invalidProvider'),
invalidParameters: Symbol('invalidParameters'),
noResponseProvided: Symbol('noResponseProvided'),
requestFailed: Symbol('requestFailed'),
verificationFailed: Symbol('verificationFailed'),
unknown: Symbol('unknown'),
} as const;
export type CaptchaErrorCode = typeof captchaErrorCodes[keyof typeof captchaErrorCodes];
export type CaptchaSetting = {
provider: CaptchaProvider;
hcaptcha: {
siteKey: string | null;
secretKey: string | null;
}
mcaptcha: {
siteKey: string | null;
secretKey: string | null;
instanceUrl: string | null;
}
recaptcha: {
siteKey: string | null;
secretKey: string | null;
}
turnstile: {
siteKey: string | null;
secretKey: string | null;
}
}
export class CaptchaError extends Error {
public readonly code: CaptchaErrorCode;
public readonly cause?: unknown;
constructor(code: CaptchaErrorCode, message: string, cause?: unknown) {
super(message);
this.code = code;
this.cause = cause;
this.name = 'CaptchaError';
}
}
export type CaptchaSaveSuccess = {
success: true;
}
export type CaptchaSaveFailure = {
success: false;
error: CaptchaError;
}
export type CaptchaSaveResult = CaptchaSaveSuccess | CaptchaSaveFailure;
type CaptchaResponse = { type CaptchaResponse = {
success: boolean; success: boolean;
@ -14,9 +73,14 @@ type CaptchaResponse = {
@Injectable() @Injectable()
export class CaptchaService { export class CaptchaService {
private readonly logger: Logger;
constructor( constructor(
private httpRequestService: HttpRequestService, private httpRequestService: HttpRequestService,
private metaService: MetaService,
loggerService: LoggerService,
) { ) {
this.logger = loggerService.getLogger('captcha');
} }
@bindThis @bindThis
@ -44,32 +108,32 @@ export class CaptchaService {
@bindThis @bindThis
public async verifyRecaptcha(secret: string, response: string | null | undefined): Promise<void> { public async verifyRecaptcha(secret: string, response: string | null | undefined): Promise<void> {
if (response == null) { if (response == null) {
throw new Error('recaptcha-failed: no response provided'); throw new CaptchaError(captchaErrorCodes.noResponseProvided, 'recaptcha-failed: no response provided');
} }
const result = await this.getCaptchaResponse('https://www.recaptcha.net/recaptcha/api/siteverify', secret, response).catch(err => { const result = await this.getCaptchaResponse('https://www.recaptcha.net/recaptcha/api/siteverify', secret, response).catch(err => {
throw new Error(`recaptcha-request-failed: ${err}`); throw new CaptchaError(captchaErrorCodes.requestFailed, `recaptcha-request-failed: ${err}`);
}); });
if (result.success !== true) { if (result.success !== true) {
const errorCodes = result['error-codes'] ? result['error-codes'].join(', ') : ''; const errorCodes = result['error-codes'] ? result['error-codes'].join(', ') : '';
throw new Error(`recaptcha-failed: ${errorCodes}`); throw new CaptchaError(captchaErrorCodes.verificationFailed, `recaptcha-failed: ${errorCodes}`);
} }
} }
@bindThis @bindThis
public async verifyHcaptcha(secret: string, response: string | null | undefined): Promise<void> { public async verifyHcaptcha(secret: string, response: string | null | undefined): Promise<void> {
if (response == null) { if (response == null) {
throw new Error('hcaptcha-failed: no response provided'); throw new CaptchaError(captchaErrorCodes.noResponseProvided, 'hcaptcha-failed: no response provided');
} }
const result = await this.getCaptchaResponse('https://hcaptcha.com/siteverify', secret, response).catch(err => { const result = await this.getCaptchaResponse('https://hcaptcha.com/siteverify', secret, response).catch(err => {
throw new Error(`hcaptcha-request-failed: ${err}`); throw new CaptchaError(captchaErrorCodes.requestFailed, `hcaptcha-request-failed: ${err}`);
}); });
if (result.success !== true) { if (result.success !== true) {
const errorCodes = result['error-codes'] ? result['error-codes'].join(', ') : ''; const errorCodes = result['error-codes'] ? result['error-codes'].join(', ') : '';
throw new Error(`hcaptcha-failed: ${errorCodes}`); throw new CaptchaError(captchaErrorCodes.verificationFailed, `hcaptcha-failed: ${errorCodes}`);
} }
} }
@ -77,7 +141,7 @@ export class CaptchaService {
@bindThis @bindThis
public async verifyMcaptcha(secret: string, siteKey: string, instanceHost: string, response: string | null | undefined): Promise<void> { public async verifyMcaptcha(secret: string, siteKey: string, instanceHost: string, response: string | null | undefined): Promise<void> {
if (response == null) { if (response == null) {
throw new Error('mcaptcha-failed: no response provided'); throw new CaptchaError(captchaErrorCodes.noResponseProvided, 'mcaptcha-failed: no response provided');
} }
const endpointUrl = new URL('/api/v1/pow/siteverify', instanceHost); const endpointUrl = new URL('/api/v1/pow/siteverify', instanceHost);
@ -91,46 +155,251 @@ export class CaptchaService {
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
}, },
}); }, { throwErrorWhenResponseNotOk: false });
if (result.status !== 200) { if (result.status !== 200) {
throw new Error('mcaptcha-failed: mcaptcha didn\'t return 200 OK'); throw new CaptchaError(captchaErrorCodes.requestFailed, 'mcaptcha-failed: mcaptcha didn\'t return 200 OK');
} }
const resp = (await result.json()) as { valid: boolean }; const resp = (await result.json()) as { valid: boolean };
if (!resp.valid) { if (!resp.valid) {
throw new Error('mcaptcha-request-failed'); throw new CaptchaError(captchaErrorCodes.verificationFailed, 'mcaptcha-request-failed');
} }
} }
@bindThis @bindThis
public async verifyTurnstile(secret: string, response: string | null | undefined): Promise<void> { public async verifyTurnstile(secret: string, response: string | null | undefined): Promise<void> {
if (response == null) { if (response == null) {
throw new Error('turnstile-failed: no response provided'); throw new CaptchaError(captchaErrorCodes.noResponseProvided, 'turnstile-failed: no response provided');
} }
const result = await this.getCaptchaResponse('https://challenges.cloudflare.com/turnstile/v0/siteverify', secret, response).catch(err => { const result = await this.getCaptchaResponse('https://challenges.cloudflare.com/turnstile/v0/siteverify', secret, response).catch(err => {
throw new Error(`turnstile-request-failed: ${err}`); throw new CaptchaError(captchaErrorCodes.requestFailed, `turnstile-request-failed: ${err}`);
}); });
if (result.success !== true) { if (result.success !== true) {
const errorCodes = result['error-codes'] ? result['error-codes'].join(', ') : ''; const errorCodes = result['error-codes'] ? result['error-codes'].join(', ') : '';
throw new Error(`turnstile-failed: ${errorCodes}`); throw new CaptchaError(captchaErrorCodes.verificationFailed, `turnstile-failed: ${errorCodes}`);
} }
} }
@bindThis @bindThis
public async verifyTestcaptcha(response: string | null | undefined): Promise<void> { public async verifyTestcaptcha(response: string | null | undefined): Promise<void> {
if (response == null) { if (response == null) {
throw new Error('testcaptcha-failed: no response provided'); throw new CaptchaError(captchaErrorCodes.noResponseProvided, 'testcaptcha-failed: no response provided');
} }
const success = response === 'testcaptcha-passed'; const success = response === 'testcaptcha-passed';
if (!success) { if (!success) {
throw new Error('testcaptcha-failed'); throw new CaptchaError(captchaErrorCodes.verificationFailed, 'testcaptcha-failed');
} }
} }
@bindThis
public async get(): Promise<CaptchaSetting> {
const meta = await this.metaService.fetch(true);
let provider: CaptchaProvider;
switch (true) {
case meta.enableHcaptcha: {
provider = 'hcaptcha';
break;
}
case meta.enableMcaptcha: {
provider = 'mcaptcha';
break;
}
case meta.enableRecaptcha: {
provider = 'recaptcha';
break;
}
case meta.enableTurnstile: {
provider = 'turnstile';
break;
}
case meta.enableTestcaptcha: {
provider = 'testcaptcha';
break;
}
default: {
provider = 'none';
break;
}
}
return {
provider: provider,
hcaptcha: {
siteKey: meta.hcaptchaSiteKey,
secretKey: meta.hcaptchaSecretKey,
},
mcaptcha: {
siteKey: meta.mcaptchaSitekey,
secretKey: meta.mcaptchaSecretKey,
instanceUrl: meta.mcaptchaInstanceUrl,
},
recaptcha: {
siteKey: meta.recaptchaSiteKey,
secretKey: meta.recaptchaSecretKey,
},
turnstile: {
siteKey: meta.turnstileSiteKey,
secretKey: meta.turnstileSecretKey,
},
};
}
/**
* captchaの設定を更新します. captchaからの戻り値を検証しpassした場合のみ設定を更新します.
* captchaプロバイダの検証関数に委譲します.
*
* @param provider captchaのプロバイダ
* @param params
* @param params.sitekey hcaptcha, recaptcha, turnstile, mcaptchaの場合に指定するsitekey.
* @param params.secret hcaptcha, recaptcha, turnstile, mcaptchaの場合に指定するsecret.
* @param params.instanceUrl mcaptchaの場合に指定するインスタンスのURL.
* @param params.captchaResult captchaプロバイダからの戻り値. 使
* @see verifyHcaptcha
* @see verifyMcaptcha
* @see verifyRecaptcha
* @see verifyTurnstile
* @see verifyTestcaptcha
*/
@bindThis
public async save(
provider: CaptchaProvider,
params?: {
sitekey?: string | null;
secret?: string | null;
instanceUrl?: string | null;
captchaResult?: string | null;
},
): Promise<CaptchaSaveResult> {
if (!supportedCaptchaProviders.includes(provider)) {
return {
success: false,
error: new CaptchaError(captchaErrorCodes.invalidProvider, `Invalid captcha provider: ${provider}`),
};
}
const operation = {
none: async () => {
await this.updateMeta(provider, params);
},
hcaptcha: async () => {
if (!params?.secret || !params.captchaResult) {
throw new CaptchaError(captchaErrorCodes.invalidParameters, 'hcaptcha-failed: secret and captureResult are required');
}
await this.verifyHcaptcha(params.secret, params.captchaResult);
await this.updateMeta(provider, params);
},
mcaptcha: async () => {
if (!params?.secret || !params.sitekey || !params.instanceUrl || !params.captchaResult) {
throw new CaptchaError(captchaErrorCodes.invalidParameters, 'mcaptcha-failed: secret, sitekey, instanceUrl and captureResult are required');
}
await this.verifyMcaptcha(params.secret, params.sitekey, params.instanceUrl, params.captchaResult);
await this.updateMeta(provider, params);
},
recaptcha: async () => {
if (!params?.secret || !params.captchaResult) {
throw new CaptchaError(captchaErrorCodes.invalidParameters, 'recaptcha-failed: secret and captureResult are required');
}
await this.verifyRecaptcha(params.secret, params.captchaResult);
await this.updateMeta(provider, params);
},
turnstile: async () => {
if (!params?.secret || !params.captchaResult) {
throw new CaptchaError(captchaErrorCodes.invalidParameters, 'turnstile-failed: secret and captureResult are required');
}
await this.verifyTurnstile(params.secret, params.captchaResult);
await this.updateMeta(provider, params);
},
testcaptcha: async () => {
if (!params?.captchaResult) {
throw new CaptchaError(captchaErrorCodes.invalidParameters, 'turnstile-failed: captureResult are required');
}
await this.verifyTestcaptcha(params.captchaResult);
await this.updateMeta(provider, params);
},
}[provider];
return operation()
.then(() => ({ success: true }) as CaptchaSaveSuccess)
.catch(err => {
this.logger.info(err);
const error = err instanceof CaptchaError
? err
: new CaptchaError(captchaErrorCodes.unknown, `unknown error: ${err}`);
return {
success: false,
error,
};
});
}
@bindThis
private async updateMeta(
provider: CaptchaProvider,
params?: {
sitekey?: string | null;
secret?: string | null;
instanceUrl?: string | null;
},
) {
const metaPartial: Partial<
Pick<
MiMeta,
('enableHcaptcha' | 'hcaptchaSiteKey' | 'hcaptchaSecretKey') |
('enableMcaptcha' | 'mcaptchaSitekey' | 'mcaptchaSecretKey' | 'mcaptchaInstanceUrl') |
('enableRecaptcha' | 'recaptchaSiteKey' | 'recaptchaSecretKey') |
('enableTurnstile' | 'turnstileSiteKey' | 'turnstileSecretKey') |
('enableTestcaptcha')
>
> = {
enableHcaptcha: provider === 'hcaptcha',
enableMcaptcha: provider === 'mcaptcha',
enableRecaptcha: provider === 'recaptcha',
enableTurnstile: provider === 'turnstile',
enableTestcaptcha: provider === 'testcaptcha',
};
const updateIfNotUndefined = <K extends keyof typeof metaPartial>(key: K, value: typeof metaPartial[K]) => {
if (value !== undefined) {
metaPartial[key] = value;
}
};
switch (provider) {
case 'hcaptcha': {
updateIfNotUndefined('hcaptchaSiteKey', params?.sitekey);
updateIfNotUndefined('hcaptchaSecretKey', params?.secret);
break;
}
case 'mcaptcha': {
updateIfNotUndefined('mcaptchaSitekey', params?.sitekey);
updateIfNotUndefined('mcaptchaSecretKey', params?.secret);
updateIfNotUndefined('mcaptchaInstanceUrl', params?.instanceUrl);
break;
}
case 'recaptcha': {
updateIfNotUndefined('recaptchaSiteKey', params?.sitekey);
updateIfNotUndefined('recaptchaSecretKey', params?.secret);
break;
}
case 'turnstile': {
updateIfNotUndefined('turnstileSiteKey', params?.sitekey);
updateIfNotUndefined('turnstileSecretKey', params?.secret);
break;
}
}
await this.metaService.update(metaPartial);
}
} }

View file

@ -17,7 +17,6 @@ import { WebhookTestService } from '@/core/WebhookTestService.js';
import { FlashService } from '@/core/FlashService.js'; import { FlashService } from '@/core/FlashService.js';
import { AccountMoveService } from './AccountMoveService.js'; import { AccountMoveService } from './AccountMoveService.js';
import { AccountUpdateService } from './AccountUpdateService.js'; import { AccountUpdateService } from './AccountUpdateService.js';
import { AiService } from './AiService.js';
import { AnnouncementService } from './AnnouncementService.js'; import { AnnouncementService } from './AnnouncementService.js';
import { AntennaService } from './AntennaService.js'; import { AntennaService } from './AntennaService.js';
import { AppLockService } from './AppLockService.js'; import { AppLockService } from './AppLockService.js';
@ -36,7 +35,7 @@ import { GlobalEventService } from './GlobalEventService.js';
import { HashtagService } from './HashtagService.js'; import { HashtagService } from './HashtagService.js';
import { HttpRequestService } from './HttpRequestService.js'; import { HttpRequestService } from './HttpRequestService.js';
import { IdService } from './IdService.js'; import { IdService } from './IdService.js';
import { ImageProcessingService } from './ImageProcessingService.js'; import { __YUME_PRIVATE_ImageProcessingService } from './ImageProcessingService.js';
import { InstanceActorService } from './InstanceActorService.js'; import { InstanceActorService } from './InstanceActorService.js';
import { InternalStorageService } from './InternalStorageService.js'; import { InternalStorageService } from './InternalStorageService.js';
import { MetaService } from './MetaService.js'; import { MetaService } from './MetaService.js';
@ -67,7 +66,7 @@ import { UserMutingService } from './UserMutingService.js';
import { UserRenoteMutingService } from './UserRenoteMutingService.js'; import { UserRenoteMutingService } from './UserRenoteMutingService.js';
import { UserSuspendService } from './UserSuspendService.js'; import { UserSuspendService } from './UserSuspendService.js';
import { UserAuthService } from './UserAuthService.js'; import { UserAuthService } from './UserAuthService.js';
import { VideoProcessingService } from './VideoProcessingService.js'; import { __YUME_PRIVATE_VideoProcessingService } from './VideoProcessingService.js';
import { UserWebhookService } from './UserWebhookService.js'; import { UserWebhookService } from './UserWebhookService.js';
import { ProxyAccountService } from './ProxyAccountService.js'; import { ProxyAccountService } from './ProxyAccountService.js';
import { UtilityService } from './UtilityService.js'; import { UtilityService } from './UtilityService.js';
@ -160,7 +159,6 @@ const $AbuseReportService: Provider = { provide: 'AbuseReportService', useExisti
const $AbuseReportNotificationService: Provider = { provide: 'AbuseReportNotificationService', useExisting: AbuseReportNotificationService }; const $AbuseReportNotificationService: Provider = { provide: 'AbuseReportNotificationService', useExisting: AbuseReportNotificationService };
const $AccountMoveService: Provider = { provide: 'AccountMoveService', useExisting: AccountMoveService }; const $AccountMoveService: Provider = { provide: 'AccountMoveService', useExisting: AccountMoveService };
const $AccountUpdateService: Provider = { provide: 'AccountUpdateService', useExisting: AccountUpdateService }; const $AccountUpdateService: Provider = { provide: 'AccountUpdateService', useExisting: AccountUpdateService };
const $AiService: Provider = { provide: 'AiService', useExisting: AiService };
const $AnnouncementService: Provider = { provide: 'AnnouncementService', useExisting: AnnouncementService }; const $AnnouncementService: Provider = { provide: 'AnnouncementService', useExisting: AnnouncementService };
const $AntennaService: Provider = { provide: 'AntennaService', useExisting: AntennaService }; const $AntennaService: Provider = { provide: 'AntennaService', useExisting: AntennaService };
const $AppLockService: Provider = { provide: 'AppLockService', useExisting: AppLockService }; const $AppLockService: Provider = { provide: 'AppLockService', useExisting: AppLockService };
@ -179,7 +177,7 @@ const $GlobalEventService: Provider = { provide: 'GlobalEventService', useExisti
const $HashtagService: Provider = { provide: 'HashtagService', useExisting: HashtagService }; const $HashtagService: Provider = { provide: 'HashtagService', useExisting: HashtagService };
const $HttpRequestService: Provider = { provide: 'HttpRequestService', useExisting: HttpRequestService }; const $HttpRequestService: Provider = { provide: 'HttpRequestService', useExisting: HttpRequestService };
const $IdService: Provider = { provide: 'IdService', useExisting: IdService }; const $IdService: Provider = { provide: 'IdService', useExisting: IdService };
const $ImageProcessingService: Provider = { provide: 'ImageProcessingService', useExisting: ImageProcessingService }; const $ImageProcessingService: Provider = { provide: '__YUME_PRIVATE_ImageProcessingService', useExisting: __YUME_PRIVATE_ImageProcessingService };
const $InstanceActorService: Provider = { provide: 'InstanceActorService', useExisting: InstanceActorService }; const $InstanceActorService: Provider = { provide: 'InstanceActorService', useExisting: InstanceActorService };
const $InternalStorageService: Provider = { provide: 'InternalStorageService', useExisting: InternalStorageService }; const $InternalStorageService: Provider = { provide: 'InternalStorageService', useExisting: InternalStorageService };
const $MetaService: Provider = { provide: 'MetaService', useExisting: MetaService }; const $MetaService: Provider = { provide: 'MetaService', useExisting: MetaService };
@ -212,7 +210,7 @@ const $UserRenoteMutingService: Provider = { provide: 'UserRenoteMutingService',
const $UserSearchService: Provider = { provide: 'UserSearchService', useExisting: UserSearchService }; const $UserSearchService: Provider = { provide: 'UserSearchService', useExisting: UserSearchService };
const $UserSuspendService: Provider = { provide: 'UserSuspendService', useExisting: UserSuspendService }; const $UserSuspendService: Provider = { provide: 'UserSuspendService', useExisting: UserSuspendService };
const $UserAuthService: Provider = { provide: 'UserAuthService', useExisting: UserAuthService }; const $UserAuthService: Provider = { provide: 'UserAuthService', useExisting: UserAuthService };
const $VideoProcessingService: Provider = { provide: 'VideoProcessingService', useExisting: VideoProcessingService }; const $VideoProcessingService: Provider = { provide: '__YUME_PRIVATE_VideoProcessingService', useExisting: __YUME_PRIVATE_VideoProcessingService };
const $UserWebhookService: Provider = { provide: 'UserWebhookService', useExisting: UserWebhookService }; const $UserWebhookService: Provider = { provide: 'UserWebhookService', useExisting: UserWebhookService };
const $SystemWebhookService: Provider = { provide: 'SystemWebhookService', useExisting: SystemWebhookService }; const $SystemWebhookService: Provider = { provide: 'SystemWebhookService', useExisting: SystemWebhookService };
const $WebhookTestService: Provider = { provide: 'WebhookTestService', useExisting: WebhookTestService }; const $WebhookTestService: Provider = { provide: 'WebhookTestService', useExisting: WebhookTestService };
@ -311,7 +309,6 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
AbuseReportNotificationService, AbuseReportNotificationService,
AccountMoveService, AccountMoveService,
AccountUpdateService, AccountUpdateService,
AiService,
AnnouncementService, AnnouncementService,
AntennaService, AntennaService,
AppLockService, AppLockService,
@ -330,7 +327,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
HashtagService, HashtagService,
HttpRequestService, HttpRequestService,
IdService, IdService,
ImageProcessingService, __YUME_PRIVATE_ImageProcessingService,
InstanceActorService, InstanceActorService,
InternalStorageService, InternalStorageService,
MetaService, MetaService,
@ -363,7 +360,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
UserSearchService, UserSearchService,
UserSuspendService, UserSuspendService,
UserAuthService, UserAuthService,
VideoProcessingService, __YUME_PRIVATE_VideoProcessingService,
UserWebhookService, UserWebhookService,
SystemWebhookService, SystemWebhookService,
WebhookTestService, WebhookTestService,
@ -458,7 +455,6 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
$AbuseReportNotificationService, $AbuseReportNotificationService,
$AccountMoveService, $AccountMoveService,
$AccountUpdateService, $AccountUpdateService,
$AiService,
$AnnouncementService, $AnnouncementService,
$AntennaService, $AntennaService,
$AppLockService, $AppLockService,
@ -606,7 +602,6 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
AbuseReportNotificationService, AbuseReportNotificationService,
AccountMoveService, AccountMoveService,
AccountUpdateService, AccountUpdateService,
AiService,
AnnouncementService, AnnouncementService,
AntennaService, AntennaService,
AppLockService, AppLockService,
@ -625,7 +620,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
HashtagService, HashtagService,
HttpRequestService, HttpRequestService,
IdService, IdService,
ImageProcessingService, __YUME_PRIVATE_ImageProcessingService,
InstanceActorService, InstanceActorService,
InternalStorageService, InternalStorageService,
MetaService, MetaService,
@ -658,7 +653,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
UserSearchService, UserSearchService,
UserSuspendService, UserSuspendService,
UserAuthService, UserAuthService,
VideoProcessingService, __YUME_PRIVATE_VideoProcessingService,
UserWebhookService, UserWebhookService,
SystemWebhookService, SystemWebhookService,
WebhookTestService, WebhookTestService,
@ -752,7 +747,6 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
$AbuseReportNotificationService, $AbuseReportNotificationService,
$AccountMoveService, $AccountMoveService,
$AccountUpdateService, $AccountUpdateService,
$AiService,
$AnnouncementService, $AnnouncementService,
$AntennaService, $AntennaService,
$AppLockService, $AppLockService,

View file

@ -4,24 +4,59 @@
*/ */
import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common'; import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common';
import { In, IsNull } from 'typeorm';
import * as Redis from 'ioredis'; import * as Redis from 'ioredis';
import { DI } from '@/di-symbols.js'; import { In, IsNull } from 'typeorm';
import { IdService } from '@/core/IdService.js';
import { EmojiEntityService } from '@/core/entities/EmojiEntityService.js'; import { EmojiEntityService } from '@/core/entities/EmojiEntityService.js';
import { GlobalEventService } from '@/core/GlobalEventService.js'; import { GlobalEventService } from '@/core/GlobalEventService.js';
import type { MiDriveFile } from '@/models/DriveFile.js'; import { IdService } from '@/core/IdService.js';
import type { MiEmoji } from '@/models/Emoji.js';
import type { EmojisRepository, MiRole, MiUser } from '@/models/_.js';
import { bindThis } from '@/decorators.js';
import { MemoryKVCache, RedisSingleCache } from '@/misc/cache.js';
import { UtilityService } from '@/core/UtilityService.js';
import { query } from '@/misc/prelude/url.js';
import type { Serialized } from '@/types.js';
import { ModerationLogService } from '@/core/ModerationLogService.js'; import { ModerationLogService } from '@/core/ModerationLogService.js';
import { UtilityService } from '@/core/UtilityService.js';
import { bindThis } from '@/decorators.js';
import { DI } from '@/di-symbols.js';
import { MemoryKVCache, RedisSingleCache } from '@/misc/cache.js';
import { sqlLikeEscape } from '@/misc/sql-like-escape.js';
import type { EmojisRepository, MiRole, MiUser } from '@/models/_.js';
import type { MiEmoji } from '@/models/Emoji.js';
import type { Serialized } from '@/types.js';
const parseEmojiStrRegexp = /^([-\w]+)(?:@([\w.-]+))?$/; const parseEmojiStrRegexp = /^([-\w]+)(?:@([\w.-]+))?$/;
export const fetchEmojisHostTypes = [
'local',
'remote',
'all',
] as const;
export type FetchEmojisHostTypes = typeof fetchEmojisHostTypes[number];
export const fetchEmojisSortKeys = [
'+id',
'-id',
'+updatedAt',
'-updatedAt',
'+name',
'-name',
'+host',
'-host',
'+uri',
'-uri',
'+publicUrl',
'-publicUrl',
'+type',
'-type',
'+aliases',
'-aliases',
'+category',
'-category',
'+license',
'-license',
'+isSensitive',
'-isSensitive',
'+localOnly',
'-localOnly',
'+roleIdsThatCanBeUsedThisEmojiAsReaction',
'-roleIdsThatCanBeUsedThisEmojiAsReaction',
] as const;
export type FetchEmojisSortKeys = typeof fetchEmojisSortKeys[number];
@Injectable() @Injectable()
export class CustomEmojiService implements OnApplicationShutdown { export class CustomEmojiService implements OnApplicationShutdown {
private emojisCache: MemoryKVCache<MiEmoji | null>; private emojisCache: MemoryKVCache<MiEmoji | null>;
@ -30,10 +65,8 @@ export class CustomEmojiService implements OnApplicationShutdown {
constructor( constructor(
@Inject(DI.redis) @Inject(DI.redis)
private redisClient: Redis.Redis, private redisClient: Redis.Redis,
@Inject(DI.emojisRepository) @Inject(DI.emojisRepository)
private emojisRepository: EmojisRepository, private emojisRepository: EmojisRepository,
private utilityService: UtilityService, private utilityService: UtilityService,
private idService: IdService, private idService: IdService,
private emojiEntityService: EmojiEntityService, private emojiEntityService: EmojiEntityService,
@ -58,7 +91,9 @@ export class CustomEmojiService implements OnApplicationShutdown {
@bindThis @bindThis
public async add(data: { public async add(data: {
driveFile: MiDriveFile; originalUrl: string;
publicUrl: string;
fileType: string;
name: string; name: string;
category: string | null; category: string | null;
aliases: string[]; aliases: string[];
@ -75,9 +110,9 @@ export class CustomEmojiService implements OnApplicationShutdown {
category: data.category, category: data.category,
host: data.host, host: data.host,
aliases: data.aliases, aliases: data.aliases,
originalUrl: data.driveFile.url, originalUrl: data.originalUrl,
publicUrl: data.driveFile.webpublicUrl ?? data.driveFile.url, publicUrl: data.publicUrl,
type: data.driveFile.webpublicType ?? data.driveFile.type, type: data.fileType,
license: data.license, license: data.license,
isSensitive: data.isSensitive, isSensitive: data.isSensitive,
localOnly: data.localOnly, localOnly: data.localOnly,
@ -105,8 +140,10 @@ export class CustomEmojiService implements OnApplicationShutdown {
@bindThis @bindThis
public async update(data: ( public async update(data: (
{ id: MiEmoji['id'], name?: string; } | { name: string; id?: MiEmoji['id'], } { id: MiEmoji['id'], name?: string; } | { name: string; id?: MiEmoji['id'], }
) & { ) & {
driveFile?: MiDriveFile; originalUrl?: string;
publicUrl?: string;
fileType?: string;
category?: string | null; category?: string | null;
aliases?: string[]; aliases?: string[];
license?: string | null; license?: string | null;
@ -139,9 +176,9 @@ export class CustomEmojiService implements OnApplicationShutdown {
license: data.license, license: data.license,
isSensitive: data.isSensitive, isSensitive: data.isSensitive,
localOnly: data.localOnly, localOnly: data.localOnly,
originalUrl: data.driveFile != null ? data.driveFile.url : undefined, originalUrl: data.originalUrl,
publicUrl: data.driveFile != null ? (data.driveFile.webpublicUrl ?? data.driveFile.url) : undefined, publicUrl: data.publicUrl,
type: data.driveFile != null ? (data.driveFile.webpublicType ?? data.driveFile.type) : undefined, type: data.fileType,
roleIdsThatCanBeUsedThisEmojiAsReaction: data.roleIdsThatCanBeUsedThisEmojiAsReaction ?? undefined, roleIdsThatCanBeUsedThisEmojiAsReaction: data.roleIdsThatCanBeUsedThisEmojiAsReaction ?? undefined,
}); });
@ -308,7 +345,7 @@ export class CustomEmojiService implements OnApplicationShutdown {
@bindThis @bindThis
private normalizeHost(src: string | undefined, noteUserHost: string | null): string | null { private normalizeHost(src: string | undefined, noteUserHost: string | null): string | null {
// クエリに使うホスト // クエリに使うホスト
let host = src === '.' ? null // .はローカルホスト (ここがマッチするのはリアクションのみ) let host = src === '.' ? null // .はローカルホスト (ここがマッチするのはリアクションのみ)
: src === undefined ? noteUserHost // ノートなどでホスト省略表記の場合はローカルホスト (ここがリアクションにマッチすることはない) : src === undefined ? noteUserHost // ノートなどでホスト省略表記の場合はローカルホスト (ここがリアクションにマッチすることはない)
: this.utilityService.isSelfHost(src) ? null // 自ホスト指定 : this.utilityService.isSelfHost(src) ? null // 自ホスト指定
@ -414,6 +451,151 @@ export class CustomEmojiService implements OnApplicationShutdown {
return this.emojisRepository.findOneBy({ name, host: IsNull() }); return this.emojisRepository.findOneBy({ name, host: IsNull() });
} }
@bindThis
public async fetchEmojis(
params?: {
query?: {
updatedAtFrom?: string;
updatedAtTo?: string;
name?: string;
host?: string;
uri?: string;
publicUrl?: string;
type?: string;
aliases?: string;
category?: string;
license?: string;
isSensitive?: boolean;
localOnly?: boolean;
hostType?: FetchEmojisHostTypes;
roleIds?: string[];
},
sinceId?: string;
untilId?: string;
},
opts?: {
limit?: number;
page?: number;
sortKeys?: FetchEmojisSortKeys[]
},
) {
function multipleWordsToQuery(words: string) {
return words.split(/\s/).filter(x => x.length > 0).map(x => `%${sqlLikeEscape(x)}%`);
}
const builder = this.emojisRepository.createQueryBuilder('emoji');
if (params?.query) {
const q = params.query;
if (q.updatedAtFrom) {
// noIndexScan
builder.andWhere('CAST(emoji.updatedAt AS DATE) >= :updateAtFrom', { updateAtFrom: q.updatedAtFrom });
}
if (q.updatedAtTo) {
// noIndexScan
builder.andWhere('CAST(emoji.updatedAt AS DATE) <= :updateAtTo', { updateAtTo: q.updatedAtTo });
}
if (q.name) {
builder.andWhere('emoji.name ~~ ANY(ARRAY[:...name])', { name: multipleWordsToQuery(q.name) });
}
switch (true) {
case q.hostType === 'local': {
builder.andWhere('emoji.host IS NULL');
break;
}
case q.hostType === 'remote': {
if (q.host) {
// noIndexScan
builder.andWhere('emoji.host ~~ ANY(ARRAY[:...host])', { host: multipleWordsToQuery(q.host) });
} else {
builder.andWhere('emoji.host IS NOT NULL');
}
break;
}
}
if (q.uri) {
// noIndexScan
builder.andWhere('emoji.uri ~~ ANY(ARRAY[:...uri])', { uri: multipleWordsToQuery(q.uri) });
}
if (q.publicUrl) {
// noIndexScan
builder.andWhere('emoji.publicUrl ~~ ANY(ARRAY[:...publicUrl])', { publicUrl: multipleWordsToQuery(q.publicUrl) });
}
if (q.type) {
// noIndexScan
builder.andWhere('emoji.type ~~ ANY(ARRAY[:...type])', { type: multipleWordsToQuery(q.type) });
}
if (q.aliases) {
// noIndexScan
const subQueryBuilder = builder.subQuery()
.select('COUNT(0)', 'count')
.from(
sq2 => sq2
.select('unnest(subEmoji.aliases)', 'alias')
.addSelect('subEmoji.id', 'id')
.from('emoji', 'subEmoji'),
'aliasTable',
)
.where('"emoji"."id" = "aliasTable"."id"')
.andWhere('"aliasTable"."alias" ~~ ANY(ARRAY[:...aliases])', { aliases: multipleWordsToQuery(q.aliases) });
builder.andWhere(`(${subQueryBuilder.getQuery()}) > 0`);
}
if (q.category) {
builder.andWhere('emoji.category ~~ ANY(ARRAY[:...category])', { category: multipleWordsToQuery(q.category) });
}
if (q.license) {
// noIndexScan
builder.andWhere('emoji.license ~~ ANY(ARRAY[:...license])', { license: multipleWordsToQuery(q.license) });
}
if (q.isSensitive != null) {
// noIndexScan
builder.andWhere('emoji.isSensitive = :isSensitive', { isSensitive: q.isSensitive });
}
if (q.localOnly != null) {
// noIndexScan
builder.andWhere('emoji.localOnly = :localOnly', { localOnly: q.localOnly });
}
if (q.roleIds && q.roleIds.length > 0) {
builder.andWhere('emoji.roleIdsThatCanBeUsedThisEmojiAsReaction && ARRAY[:...roleIds]::VARCHAR[]', { roleIds: q.roleIds });
}
}
if (params?.sinceId) {
builder.andWhere('emoji.id > :sinceId', { sinceId: params.sinceId });
}
if (params?.untilId) {
builder.andWhere('emoji.id < :untilId', { untilId: params.untilId });
}
if (opts?.sortKeys && opts.sortKeys.length > 0) {
for (const sortKey of opts.sortKeys) {
const direction = sortKey.startsWith('-') ? 'DESC' : 'ASC';
const key = sortKey.replace(/^[+-]/, '');
builder.addOrderBy(`emoji.${key}`, direction);
}
} else {
builder.addOrderBy('emoji.id', 'DESC');
}
const limit = opts?.limit ?? 10;
if (opts?.page) {
builder.skip((opts.page - 1) * limit);
}
builder.take(limit);
const [emojis, count] = await builder.getManyAndCount();
return {
emojis,
count: (count > limit ? emojis.length : count),
allCount: count,
allPages: Math.ceil(count / limit),
};
}
@bindThis @bindThis
public dispose(): void { public dispose(): void {
this.emojisCache.dispose(); this.emojisCache.dispose();

View file

@ -47,6 +47,10 @@ export class DeleteAccountService {
}); });
} }
if (!(await this.usersRepository.update({ id: user.id, isDeleted: false }, { isDeleted: true })).affected) {
return;
}
// 物理削除する前にDelete activityを送信する // 物理削除する前にDelete activityを送信する
if (this.userEntityService.isLocalUser(user)) { if (this.userEntityService.isLocalUser(user)) {
// 知り得る全SharedInboxにDelete配信 // 知り得る全SharedInboxにDelete配信

View file

@ -6,7 +6,6 @@
import * as fs from 'node:fs'; import * as fs from 'node:fs';
import * as stream from 'node:stream/promises'; import * as stream from 'node:stream/promises';
import { Inject, Injectable } from '@nestjs/common'; import { Inject, Injectable } from '@nestjs/common';
import ipaddr from 'ipaddr.js';
import chalk from 'chalk'; import chalk from 'chalk';
import got, * as Got from 'got'; import got, * as Got from 'got';
import { parse } from 'content-disposition'; import { parse } from 'content-disposition';
@ -45,6 +44,14 @@ export class DownloadService {
const maxSize = this.config.maxFileSize; const maxSize = this.config.maxFileSize;
const urlObj = new URL(url); const urlObj = new URL(url);
if (urlObj.protocol && urlObj.protocol !== 'https:') {
throw new Error(`Unsupported protocol: ${urlObj.protocol}, only HTTPS is supported`);
}
urlObj.protocol = 'https:';
if (urlObj.port && urlObj.port !== '443') {
throw new Error(`Unsupported port: ${urlObj.port}, only 443 is supported`);
}
let filename = urlObj.pathname.split('/').pop() ?? 'untitled'; let filename = urlObj.pathname.split('/').pop() ?? 'untitled';
const req = got.stream(url, { const req = got.stream(url, {
@ -61,7 +68,6 @@ export class DownloadService {
request: operationTimeout, // whole operation timeout request: operationTimeout, // whole operation timeout
}, },
agent: { agent: {
http: this.httpRequestService.httpAgent,
https: this.httpRequestService.httpsAgent, https: this.httpRequestService.httpsAgent,
}, },
http2: false, // default http2: false, // default
@ -70,13 +76,6 @@ export class DownloadService {
}, },
enableUnixSockets: false, enableUnixSockets: false,
}).on('response', (res: Got.Response) => { }).on('response', (res: Got.Response) => {
if ((process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'test') && !this.config.proxy && res.ip) {
if (this.isPrivateIp(res.ip)) {
this.logger.warn(`Blocked address: ${res.ip}`);
req.destroy();
}
}
const contentLength = res.headers['content-length']; const contentLength = res.headers['content-length'];
if (contentLength != null) { if (contentLength != null) {
const size = Number(contentLength); const size = Number(contentLength);
@ -139,18 +138,4 @@ export class DownloadService {
cleanup(); cleanup();
} }
} }
@bindThis
private isPrivateIp(ip: string): boolean {
const parsedIp = ipaddr.parse(ip);
for (const net of this.config.allowedPrivateNetworks ?? []) {
const cidr = ipaddr.parseCIDR(net);
if (cidr[0].kind() === parsedIp.kind() && parsedIp.match(ipaddr.parseCIDR(net))) {
return false;
}
}
return parsedIp.range() !== 'unicast';
}
} }

View file

@ -22,8 +22,8 @@ import { FILE_TYPE_BROWSERSAFE } from '@/const.js';
import { IdentifiableError } from '@/misc/identifiable-error.js'; import { IdentifiableError } from '@/misc/identifiable-error.js';
import { contentDisposition } from '@/misc/content-disposition.js'; import { contentDisposition } from '@/misc/content-disposition.js';
import { GlobalEventService } from '@/core/GlobalEventService.js'; import { GlobalEventService } from '@/core/GlobalEventService.js';
import { VideoProcessingService } from '@/core/VideoProcessingService.js'; import { __YUME_PRIVATE_VideoProcessingService } from '@/core/VideoProcessingService.js';
import { ImageProcessingService } from '@/core/ImageProcessingService.js'; import { __YUME_PRIVATE_ImageProcessingService } from '@/core/ImageProcessingService.js';
import type { IImage } from '@/core/ImageProcessingService.js'; import type { IImage } from '@/core/ImageProcessingService.js';
import { QueueService } from '@/core/QueueService.js'; import { QueueService } from '@/core/QueueService.js';
import type { MiDriveFolder } from '@/models/DriveFolder.js'; import type { MiDriveFolder } from '@/models/DriveFolder.js';
@ -87,9 +87,9 @@ type UploadFromUrlArgs = {
@Injectable() @Injectable()
export class DriveService { export class DriveService {
public static NoSuchFolderError = class extends Error {}; public static NoSuchFolderError = class extends Error { };
public static InvalidFileNameError = class extends Error {}; public static InvalidFileNameError = class extends Error { };
public static CannotUnmarkSensitiveError = class extends Error {}; public static CannotUnmarkSensitiveError = class extends Error { };
private registerLogger: Logger; private registerLogger: Logger;
private downloaderLogger: Logger; private downloaderLogger: Logger;
private deleteLogger: Logger; private deleteLogger: Logger;
@ -120,8 +120,8 @@ export class DriveService {
private downloadService: DownloadService, private downloadService: DownloadService,
private internalStorageService: InternalStorageService, private internalStorageService: InternalStorageService,
private s3Service: S3Service, private s3Service: S3Service,
private imageProcessingService: ImageProcessingService, private privateImageProcessingService: __YUME_PRIVATE_ImageProcessingService,
private videoProcessingService: VideoProcessingService, private privateVideoProcessingService: __YUME_PRIVATE_VideoProcessingService,
private globalEventService: GlobalEventService, private globalEventService: GlobalEventService,
private queueService: QueueService, private queueService: QueueService,
private roleService: RoleService, private roleService: RoleService,
@ -147,11 +147,11 @@ export class DriveService {
*/ */
@bindThis @bindThis
private async save(file: MiDriveFile, path: string, name: string, type: string, hash: string, size: number): Promise<MiDriveFile> { private async save(file: MiDriveFile, path: string, name: string, type: string, hash: string, size: number): Promise<MiDriveFile> {
// thunbnail, webpublic を必要なら生成 // thunbnail, webpublic を必要なら生成
const alts = await this.generateAlts(path, type, !file.uri); const alts = await this.generateAlts(path, type, !file.uri);
if (this.meta.useObjectStorage) { if (this.meta.useObjectStorage) {
//#region ObjectStorage params //#region ObjectStorage params
let [ext] = (name.match(/\.([a-zA-Z0-9_-]+)$/) ?? ['']); let [ext] = (name.match(/\.([a-zA-Z0-9_-]+)$/) ?? ['']);
if (ext === '') { if (ext === '') {
@ -170,11 +170,11 @@ export class DriveService {
} }
const baseUrl = this.meta.objectStorageBaseUrl const baseUrl = this.meta.objectStorageBaseUrl
?? `${ this.meta.objectStorageUseSSL ? 'https' : 'http' }://${ this.meta.objectStorageEndpoint }${ this.meta.objectStoragePort ? `:${this.meta.objectStoragePort}` : '' }/${ this.meta.objectStorageBucket }`; ?? `${this.meta.objectStorageUseSSL ? 'https' : 'http'}://${this.meta.objectStorageEndpoint}${this.meta.objectStoragePort ? `:${this.meta.objectStoragePort}` : ''}/${this.meta.objectStorageBucket}`;
// for original // for original
const key = `${this.meta.objectStoragePrefix}/${randomUUID()}${ext}`; const key = `${this.meta.objectStoragePrefix}/${randomUUID()}${ext}`;
const url = `${ baseUrl }/${ key }`; const url = `${baseUrl}/${key}`;
// for alts // for alts
let webpublicKey: string | null = null; let webpublicKey: string | null = null;
@ -191,7 +191,7 @@ export class DriveService {
if (alts.webpublic) { if (alts.webpublic) {
webpublicKey = `${this.meta.objectStoragePrefix}/webpublic-${randomUUID()}.${alts.webpublic.ext}`; webpublicKey = `${this.meta.objectStoragePrefix}/webpublic-${randomUUID()}.${alts.webpublic.ext}`;
webpublicUrl = `${ baseUrl }/${ webpublicKey }`; webpublicUrl = `${baseUrl}/${webpublicKey}`;
this.registerLogger.info(`uploading webpublic: ${webpublicKey}`); this.registerLogger.info(`uploading webpublic: ${webpublicKey}`);
uploads.push(this.upload(webpublicKey, alts.webpublic.data, alts.webpublic.type, alts.webpublic.ext, name)); uploads.push(this.upload(webpublicKey, alts.webpublic.data, alts.webpublic.type, alts.webpublic.ext, name));
@ -199,7 +199,7 @@ export class DriveService {
if (alts.thumbnail) { if (alts.thumbnail) {
thumbnailKey = `${this.meta.objectStoragePrefix}/thumbnail-${randomUUID()}.${alts.thumbnail.ext}`; thumbnailKey = `${this.meta.objectStoragePrefix}/thumbnail-${randomUUID()}.${alts.thumbnail.ext}`;
thumbnailUrl = `${ baseUrl }/${ thumbnailKey }`; thumbnailUrl = `${baseUrl}/${thumbnailKey}`;
this.registerLogger.info(`uploading thumbnail: ${thumbnailKey}`); this.registerLogger.info(`uploading thumbnail: ${thumbnailKey}`);
uploads.push(this.upload(thumbnailKey, alts.thumbnail.data, alts.thumbnail.type, alts.thumbnail.ext, `${name}.thumbnail`)); uploads.push(this.upload(thumbnailKey, alts.thumbnail.data, alts.thumbnail.type, alts.thumbnail.ext, `${name}.thumbnail`));
@ -277,7 +277,7 @@ export class DriveService {
} }
try { try {
const thumbnail = await this.videoProcessingService.generateVideoThumbnail(path); const thumbnail = await this.privateVideoProcessingService.generateVideoThumbnail(path);
return { return {
webpublic: null, webpublic: null,
thumbnail, thumbnail,
@ -311,9 +311,9 @@ export class DriveService {
satisfyWebpublic = !!( satisfyWebpublic = !!(
type !== 'image/svg+xml' && // security reason type !== 'image/svg+xml' && // security reason
type !== 'image/avif' && // not supported by Mastodon and MS Edge type !== 'image/avif' && // not supported by Mastodon and MS Edge
!(metadata.exif ?? metadata.iptc ?? metadata.xmp ?? metadata.tifftagPhotoshop) && !(metadata.exif ?? metadata.iptc ?? metadata.xmp ?? metadata.tifftagPhotoshop) &&
metadata.width && metadata.width <= 2048 && metadata.width && metadata.width <= 2048 &&
metadata.height && metadata.height <= 2048 metadata.height && metadata.height <= 2048
); );
} catch (err) { } catch (err) {
this.registerLogger.warn(`sharp failed: ${err}`); this.registerLogger.warn(`sharp failed: ${err}`);
@ -331,9 +331,9 @@ export class DriveService {
try { try {
if (['image/jpeg', 'image/webp', 'image/avif'].includes(type)) { if (['image/jpeg', 'image/webp', 'image/avif'].includes(type)) {
webpublic = await this.imageProcessingService.convertSharpToWebp(img, 2048, 2048); webpublic = await this.privateImageProcessingService.convertSharpToWebp(img, 2048, 2048);
} else if (['image/png', 'image/bmp', 'image/svg+xml'].includes(type)) { } else if (['image/png', 'image/bmp', 'image/svg+xml'].includes(type)) {
webpublic = await this.imageProcessingService.convertSharpToPng(img, 2048, 2048); webpublic = await this.privateImageProcessingService.convertSharpToPng(img, 2048, 2048);
} else { } else {
this.registerLogger.debug('web image not created (not an required image)'); this.registerLogger.debug('web image not created (not an required image)');
} }
@ -352,9 +352,9 @@ export class DriveService {
try { try {
if (isAnimated) { if (isAnimated) {
thumbnail = await this.imageProcessingService.convertSharpToWebp(sharp(path, { animated: true }), 374, 317, { alphaQuality: 70 }); thumbnail = await this.privateImageProcessingService.convertSharpToWebp(sharp(path, { animated: true }), 374, 317, { alphaQuality: 70 });
} else { } else {
thumbnail = await this.imageProcessingService.convertSharpToWebp(img, 498, 422); thumbnail = await this.privateImageProcessingService.convertSharpToWebp(img, 498, 422);
} }
} catch (err) { } catch (err) {
this.registerLogger.warn('thumbnail not created (an error occurred)', err as Error); this.registerLogger.warn('thumbnail not created (an error occurred)', err as Error);
@ -470,11 +470,11 @@ export class DriveService {
const info = await this.fileInfoService.getFileInfo(path, { const info = await this.fileInfoService.getFileInfo(path, {
skipSensitiveDetection: skipNsfwCheck, skipSensitiveDetection: skipNsfwCheck,
sensitiveThreshold: // 感度が高いほどしきい値は低くすることになる sensitiveThreshold: // 感度が高いほどしきい値は低くすることになる
this.meta.sensitiveMediaDetectionSensitivity === 'veryHigh' ? 0.1 : this.meta.sensitiveMediaDetectionSensitivity === 'veryHigh' ? 0.1 :
this.meta.sensitiveMediaDetectionSensitivity === 'high' ? 0.3 : this.meta.sensitiveMediaDetectionSensitivity === 'high' ? 0.3 :
this.meta.sensitiveMediaDetectionSensitivity === 'low' ? 0.7 : this.meta.sensitiveMediaDetectionSensitivity === 'low' ? 0.7 :
this.meta.sensitiveMediaDetectionSensitivity === 'veryLow' ? 0.9 : this.meta.sensitiveMediaDetectionSensitivity === 'veryLow' ? 0.9 :
0.5, 0.5,
sensitiveThresholdForPorn: 0.75, sensitiveThresholdForPorn: 0.75,
enableSensitiveMediaDetectionForVideos: this.meta.enableSensitiveMediaDetectionForVideos, enableSensitiveMediaDetectionForVideos: this.meta.enableSensitiveMediaDetectionForVideos,
}); });
@ -494,7 +494,7 @@ export class DriveService {
); );
if (user && !force) { if (user && !force) {
// Check if there is a file with the same hash // Check if there is a file with the same hash
const matched = await this.driveFilesRepository.findOneBy({ const matched = await this.driveFilesRepository.findOneBy({
md5: info.md5, md5: info.md5,
userId: user.id, userId: user.id,
@ -582,7 +582,7 @@ export class DriveService {
file.maybePorn = info.porn; file.maybePorn = info.porn;
file.isSensitive = user file.isSensitive = user
? this.userEntityService.isLocalUser(user) && profile!.alwaysMarkNsfw ? true : ? this.userEntityService.isLocalUser(user) && profile!.alwaysMarkNsfw ? true :
sensitive ?? false sensitive ?? false
: false; : false;
if (user && this.utilityService.isMediaSilencedHost(this.meta.mediaSilencedHosts, user.host)) file.isSensitive = true; if (user && this.utilityService.isMediaSilencedHost(this.meta.mediaSilencedHosts, user.host)) file.isSensitive = true;
@ -616,7 +616,7 @@ export class DriveService {
file = await this.driveFilesRepository.insertOne(file); file = await this.driveFilesRepository.insertOne(file);
} catch (err) { } catch (err) {
// duplicate key error (when already registered) // duplicate key error (when already registered)
if (isDuplicateKeyValueError(err)) { if (isDuplicateKeyValueError(err)) {
this.registerLogger.info(`already registered ${file.uri}`); this.registerLogger.info(`already registered ${file.uri}`);

View file

@ -313,6 +313,7 @@ export class EmailService {
Accept: 'application/json', Accept: 'application/json',
Authorization: truemailAuthKey, Authorization: truemailAuthKey,
}, },
isLocalAddressAllowed: true,
}); });
const json = (await res.json()) as { const json = (await res.json()) as {

View file

@ -12,7 +12,7 @@ import { bindThis } from '@/decorators.js';
const GLOBAL_NOTES_RANKING_WINDOW = 1000 * 60 * 60 * 24 * 3; // 3日ごと const GLOBAL_NOTES_RANKING_WINDOW = 1000 * 60 * 60 * 24 * 3; // 3日ごと
export const GALLERY_POSTS_RANKING_WINDOW = 1000 * 60 * 60 * 24 * 3; // 3日ごと export const GALLERY_POSTS_RANKING_WINDOW = 1000 * 60 * 60 * 24 * 3; // 3日ごと
const PER_USER_NOTES_RANKING_WINDOW = 1000 * 60 * 60 * 24 * 7; // 1週間ごと const PER_USER_NOTES_RANKING_WINDOW = 1000 * 60 * 60 * 24 * 7; // 1週間ごと
const HASHTAG_RANKING_WINDOW = 1000 * 60 * 60; // 1時間ごと const HASHTAG_RANKING_WINDOW = 1000 * 60 * 60 * 48; // 48時間ごと
const featuredEpoc = new Date('2023-01-01T00:00:00Z').getTime(); const featuredEpoc = new Date('2023-01-01T00:00:00Z').getTime();

View file

@ -181,7 +181,7 @@ export class FetchInstanceMetadataService {
} }
@bindThis @bindThis
private async fetchDom(instance: MiInstance): Promise<DOMWindow['document']> { private async fetchDom(instance: MiInstance): Promise<Document> {
this.logger.info(`Fetching HTML of ${instance.host} ...`); this.logger.info(`Fetching HTML of ${instance.host} ...`);
const url = 'https://' + instance.host; const url = 'https://' + instance.host;
@ -206,7 +206,7 @@ export class FetchInstanceMetadataService {
} }
@bindThis @bindThis
private async fetchFaviconUrl(instance: MiInstance, doc: DOMWindow['document'] | null): Promise<string | null> { private async fetchFaviconUrl(instance: MiInstance, doc: Document | null): Promise<string | null> {
const url = 'https://' + instance.host; const url = 'https://' + instance.host;
if (doc) { if (doc) {
@ -232,7 +232,7 @@ export class FetchInstanceMetadataService {
} }
@bindThis @bindThis
private async fetchIconUrl(instance: MiInstance, doc: DOMWindow['document'] | null, manifest: Record<string, any> | null): Promise<string | null> { private async fetchIconUrl(instance: MiInstance, doc: Document | null, manifest: Record<string, any> | null): Promise<string | null> {
if (manifest && manifest.icons && manifest.icons.length > 0 && manifest.icons[0].src) { if (manifest && manifest.icons && manifest.icons.length > 0 && manifest.icons[0].src) {
const url = 'https://' + instance.host; const url = 'https://' + instance.host;
return (new URL(manifest.icons[0].src, url)).href; return (new URL(manifest.icons[0].src, url)).href;
@ -261,7 +261,7 @@ export class FetchInstanceMetadataService {
} }
@bindThis @bindThis
private async getThemeColor(info: NodeInfo | null, doc: DOMWindow['document'] | null, manifest: Record<string, any> | null): Promise<string | null> { private async getThemeColor(info: NodeInfo | null, doc: Document | null, manifest: Record<string, any> | null): Promise<string | null> {
const themeColor = info?.metadata?.themeColor ?? doc?.querySelector('meta[name="theme-color"]')?.getAttribute('content') ?? manifest?.theme_color; const themeColor = info?.metadata?.themeColor ?? doc?.querySelector('meta[name="theme-color"]')?.getAttribute('content') ?? manifest?.theme_color;
if (themeColor) { if (themeColor) {
@ -273,7 +273,7 @@ export class FetchInstanceMetadataService {
} }
@bindThis @bindThis
private async getSiteName(info: NodeInfo | null, doc: DOMWindow['document'] | null, manifest: Record<string, any> | null): Promise<string | null> { private async getSiteName(info: NodeInfo | null, doc: Document | null, manifest: Record<string, any> | null): Promise<string | null> {
if (info && info.metadata) { if (info && info.metadata) {
if (typeof info.metadata.nodeName === 'string') { if (typeof info.metadata.nodeName === 'string') {
return info.metadata.nodeName; return info.metadata.nodeName;
@ -298,7 +298,7 @@ export class FetchInstanceMetadataService {
} }
@bindThis @bindThis
private async getDescription(info: NodeInfo | null, doc: DOMWindow['document'] | null, manifest: Record<string, any> | null): Promise<string | null> { private async getDescription(info: NodeInfo | null, doc: Document | null, manifest: Record<string, any> | null): Promise<string | null> {
if (info && info.metadata) { if (info && info.metadata) {
if (typeof info.metadata.nodeDescription === 'string') { if (typeof info.metadata.nodeDescription === 'string') {
return info.metadata.nodeDescription; return info.metadata.nodeDescription;

View file

@ -13,11 +13,8 @@ import * as fileType from 'file-type';
import FFmpeg from 'fluent-ffmpeg'; import FFmpeg from 'fluent-ffmpeg';
import isSvg from 'is-svg'; import isSvg from 'is-svg';
import probeImageSize from 'probe-image-size'; import probeImageSize from 'probe-image-size';
import { type predictionType } from 'nsfwjs';
import { sharpBmp } from '@misskey-dev/sharp-read-bmp'; import { sharpBmp } from '@misskey-dev/sharp-read-bmp';
import * as blurhash from 'blurhash'; import * as blurhash from 'blurhash';
import { createTempDir } from '@/misc/create-temp.js';
import { AiService } from '@/core/AiService.js';
import { LoggerService } from '@/core/LoggerService.js'; import { LoggerService } from '@/core/LoggerService.js';
import type Logger from '@/logger.js'; import type Logger from '@/logger.js';
import { bindThis } from '@/decorators.js'; import { bindThis } from '@/decorators.js';
@ -53,7 +50,6 @@ export class FileInfoService {
private logger: Logger; private logger: Logger;
constructor( constructor(
private aiService: AiService,
private loggerService: LoggerService, private loggerService: LoggerService,
) { ) {
this.logger = this.loggerService.getLogger('file-info'); this.logger = this.loggerService.getLogger('file-info');
@ -167,102 +163,7 @@ export class FileInfoService {
@bindThis @bindThis
private async detectSensitivity(source: string, mime: string, sensitiveThreshold: number, sensitiveThresholdForPorn: number, analyzeVideo: boolean): Promise<[sensitive: boolean, porn: boolean]> { private async detectSensitivity(source: string, mime: string, sensitiveThreshold: number, sensitiveThresholdForPorn: number, analyzeVideo: boolean): Promise<[sensitive: boolean, porn: boolean]> {
let sensitive = false; return [false, 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 this.aiService.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 this.asyncIterateFrames(outDir, command)) {
try {
const index = frameIndex++;
if (index !== targetIndex) {
continue;
}
targetIndex = nextIndex;
nextIndex += index; // fibonacci sequence によってフレーム数制限を掛ける
const result = await this.aiService.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];
} }
private async *asyncIterateFrames(cwd: string, command: FFmpeg.FfmpegCommand): AsyncGenerator<string, void> { private async *asyncIterateFrames(cwd: string, command: FFmpeg.FfmpegCommand): AsyncGenerator<string, void> {

View file

@ -6,41 +6,118 @@
import * as http from 'node:http'; import * as http from 'node:http';
import * as https from 'node:https'; import * as https from 'node:https';
import * as net from 'node:net'; import * as net from 'node:net';
import ipaddr from 'ipaddr.js';
import CacheableLookup from 'cacheable-lookup'; import CacheableLookup from 'cacheable-lookup';
import fetch from 'node-fetch'; import fetch from 'node-fetch';
import { HttpProxyAgent, HttpsProxyAgent } from 'hpagent'; import { HttpsProxyAgent } from 'hpagent';
import { Inject, Injectable } from '@nestjs/common'; import { Inject, Injectable } from '@nestjs/common';
import { DI } from '@/di-symbols.js'; import { DI } from '@/di-symbols.js';
import type { Config } from '@/config.js'; import type { Config } from '@/config.js';
import { StatusError } from '@/misc/status-error.js'; import { StatusError } from '@/misc/status-error.js';
import { bindThis } from '@/decorators.js'; import { bindThis } from '@/decorators.js';
import { validateContentTypeSetAsActivityPub } from '@/core/activitypub/misc/validator.js'; import { validateContentTypeSetAsActivityPub } from '@/core/activitypub/misc/validator.js';
import { assertActivityMatchesUrls } from '@/core/activitypub/misc/check-against-url.js';
import type { IObject } from '@/core/activitypub/type.js'; import type { IObject } from '@/core/activitypub/type.js';
import type { Response } from 'node-fetch'; import type { Response } from 'node-fetch';
import type { URL } from 'node:url'; import { URL } from 'node:url';
export type HttpRequestSendOptions = { export type HttpRequestSendOptions = {
throwErrorWhenResponseNotOk: boolean; throwErrorWhenResponseNotOk: boolean;
validators?: ((res: Response) => void)[]; validators?: ((res: Response) => void)[];
}; };
declare module 'node:http' {
interface Agent {
createConnection(options: net.NetConnectOpts, callback?: (err: unknown, stream: net.Socket) => void): net.Socket;
}
}
class HttpRequestServiceAgent extends http.Agent {
constructor(
private config: Config,
options?: http.AgentOptions,
) {
super(options);
}
@bindThis
public createConnection(options: net.NetConnectOpts, callback?: (err: unknown, stream: net.Socket) => void): net.Socket {
const socket = super.createConnection(options, callback)
.on('connect', () => {
const address = socket.remoteAddress;
if (process.env.NODE_ENV === 'production') {
if (address && ipaddr.isValid(address)) {
if (this.isPrivateIp(address)) {
socket.destroy(new Error(`Blocked address: ${address}`));
}
}
}
});
return socket;
}
@bindThis
private isPrivateIp(ip: string): boolean {
const parsedIp = ipaddr.parse(ip);
for (const net of this.config.allowedPrivateNetworks ?? []) {
const cidr = ipaddr.parseCIDR(net);
if (cidr[0].kind() === parsedIp.kind() && parsedIp.match(ipaddr.parseCIDR(net))) {
return false;
}
}
return parsedIp.range() !== 'unicast';
}
}
class HttpsRequestServiceAgent extends https.Agent {
constructor(
private config: Config,
options?: https.AgentOptions,
) {
super(options);
}
@bindThis
public createConnection(options: net.NetConnectOpts, callback?: (err: unknown, stream: net.Socket) => void): net.Socket {
const socket = super.createConnection(options, callback)
.on('connect', () => {
const address = socket.remoteAddress;
if (process.env.NODE_ENV === 'production') {
if (address && ipaddr.isValid(address)) {
if (this.isPrivateIp(address)) {
socket.destroy(new Error(`Blocked address: ${address}`));
}
}
}
});
return socket;
}
@bindThis
private isPrivateIp(ip: string): boolean {
const parsedIp = ipaddr.parse(ip);
for (const net of this.config.allowedPrivateNetworks ?? []) {
const cidr = ipaddr.parseCIDR(net);
if (cidr[0].kind() === parsedIp.kind() && parsedIp.match(ipaddr.parseCIDR(net))) {
return false;
}
}
return parsedIp.range() !== 'unicast';
}
}
@Injectable() @Injectable()
export class HttpRequestService { export class HttpRequestService {
/** /**
* Get http non-proxy agent * Get http non-proxy agent
*/ */
private http: http.Agent; private httpsNative: https.Agent;
/** /**
* Get https non-proxy agent * Get https non-proxy agent
*/ */
private https: https.Agent; private https: https.Agent;
/**
* Get http proxy or non-proxy agent
*/
public httpAgent: http.Agent;
/** /**
* Get https proxy or non-proxy agent * Get https proxy or non-proxy agent
*/ */
@ -56,34 +133,20 @@ export class HttpRequestService {
lookup: false, // nativeのdns.lookupにfallbackしない lookup: false, // nativeのdns.lookupにfallbackしない
}); });
this.http = new http.Agent({ const agentOption = {
keepAlive: true, keepAlive: true,
keepAliveMsecs: 30 * 1000, keepAliveMsecs: 30 * 1000,
lookup: cache.lookup as unknown as net.LookupFunction, lookup: cache.lookup as unknown as net.LookupFunction,
localAddress: config.outgoingAddress, localAddress: config.outgoingAddress,
}); minVersion: 'TLSv1.2' as const,
};
this.https = new https.Agent({ this.httpsNative = new https.Agent(agentOption);
keepAlive: true,
keepAliveMsecs: 30 * 1000, this.https = new HttpsRequestServiceAgent(config, agentOption);
lookup: cache.lookup as unknown as net.LookupFunction,
localAddress: config.outgoingAddress,
});
const maxSockets = Math.max(256, config.deliverJobConcurrency ?? 128); const maxSockets = Math.max(256, config.deliverJobConcurrency ?? 128);
this.httpAgent = config.proxy
? new HttpProxyAgent({
keepAlive: true,
keepAliveMsecs: 30 * 1000,
maxSockets,
maxFreeSockets: 256,
scheduling: 'lifo',
proxy: config.proxy,
localAddress: config.outgoingAddress,
})
: this.http;
this.httpsAgent = config.proxy this.httpsAgent = config.proxy
? new HttpsProxyAgent({ ? new HttpsProxyAgent({
keepAlive: true, keepAlive: true,
@ -103,16 +166,23 @@ export class HttpRequestService {
* @param bypassProxy Allways bypass proxy * @param bypassProxy Allways bypass proxy
*/ */
@bindThis @bindThis
public getAgentByUrl(url: URL, bypassProxy = false): http.Agent | https.Agent { public getAgentByUrl(url: URL, bypassProxy = false): https.Agent {
if (url.protocol && url.protocol !== 'https:') {
throw new Error('Invalid protocol');
}
url.protocol = 'https:';
if (url.port && url.port !== '443') {
throw new Error('Invalid port');
}
if (bypassProxy || (this.config.proxyBypassHosts ?? []).includes(url.hostname)) { if (bypassProxy || (this.config.proxyBypassHosts ?? []).includes(url.hostname)) {
return url.protocol === 'http:' ? this.http : this.https; return this.https;
} else { } else {
return url.protocol === 'http:' ? this.httpAgent : this.httpsAgent; return this.httpsAgent;
} }
} }
@bindThis @bindThis
public async getActivityJson(url: string): Promise<IObject> { public async getActivityJson(url: string, isLocalAddressAllowed = false): Promise<IObject> {
const res = await this.send(url, { const res = await this.send(url, {
method: 'GET', method: 'GET',
headers: { headers: {
@ -120,16 +190,22 @@ export class HttpRequestService {
}, },
timeout: 5000, timeout: 5000,
size: 1024 * 256, size: 1024 * 256,
isLocalAddressAllowed: isLocalAddressAllowed,
}, { }, {
throwErrorWhenResponseNotOk: true, throwErrorWhenResponseNotOk: true,
validators: [validateContentTypeSetAsActivityPub], validators: [validateContentTypeSetAsActivityPub],
}); });
return await res.json() as IObject; const finalUrl = res.url; // redirects may have been involved
const activity = await res.json() as IObject;
assertActivityMatchesUrls(activity, [finalUrl]);
return activity;
} }
@bindThis @bindThis
public async getJson<T = unknown>(url: string, accept = 'application/json, */*', headers?: Record<string, string>): Promise<T> { public async getJson<T = unknown>(url: string, accept = 'application/json, */*', headers?: Record<string, string>, isLocalAddressAllowed = false): Promise<T> {
const res = await this.send(url, { const res = await this.send(url, {
method: 'GET', method: 'GET',
headers: Object.assign({ headers: Object.assign({
@ -137,19 +213,21 @@ export class HttpRequestService {
}, headers ?? {}), }, headers ?? {}),
timeout: 5000, timeout: 5000,
size: 1024 * 256, size: 1024 * 256,
isLocalAddressAllowed: isLocalAddressAllowed,
}); });
return await res.json() as T; return await res.json() as T;
} }
@bindThis @bindThis
public async getHtml(url: string, accept = 'text/html, */*', headers?: Record<string, string>): Promise<string> { public async getHtml(url: string, accept = 'text/html, */*', headers?: Record<string, string>, isLocalAddressAllowed = false): Promise<string> {
const res = await this.send(url, { const res = await this.send(url, {
method: 'GET', method: 'GET',
headers: Object.assign({ headers: Object.assign({
Accept: accept, Accept: accept,
}, headers ?? {}), }, headers ?? {}),
timeout: 5000, timeout: 5000,
isLocalAddressAllowed: isLocalAddressAllowed,
}); });
return await res.text(); return await res.text();
@ -164,6 +242,7 @@ export class HttpRequestService {
headers?: Record<string, string>, headers?: Record<string, string>,
timeout?: number, timeout?: number,
size?: number, size?: number,
isLocalAddressAllowed?: boolean,
} = {}, } = {},
extra: HttpRequestSendOptions = { extra: HttpRequestSendOptions = {
throwErrorWhenResponseNotOk: true, throwErrorWhenResponseNotOk: true,
@ -177,6 +256,16 @@ export class HttpRequestService {
controller.abort(); controller.abort();
}, timeout); }, timeout);
const urlParsed = new URL(url);
if (urlParsed.protocol !== 'https:') {
throw new Error('Invalid protocol');
}
if (urlParsed.port && urlParsed.port !== '443') {
throw new Error('Invalid port');
}
const res = await fetch(url, { const res = await fetch(url, {
method: args.method ?? 'GET', method: args.method ?? 'GET',
headers: { headers: {
@ -185,7 +274,7 @@ export class HttpRequestService {
}, },
body: args.body, body: args.body,
size: args.size ?? 10 * 1024 * 1024, size: args.size ?? 10 * 1024 * 1024,
agent: (url) => this.getAgentByUrl(url), agent: (url) => this.getAgentByUrl(url, false),
signal: controller.signal, signal: controller.signal,
}); });

View file

@ -46,7 +46,9 @@ import { bindThis } from '@/decorators.js';
import { Readable } from 'node:stream'; import { Readable } from 'node:stream';
@Injectable() @Injectable()
export class ImageProcessingService { // Prevent accidental import by upstream merge
// eslint-disable-next-line
export class __YUME_PRIVATE_ImageProcessingService {
constructor( constructor(
) { ) {
} }

View file

@ -171,6 +171,39 @@ export class MfmService {
break; break;
} }
case 'ruby': {
let ruby: [string, string][] = [];
for (const child of node.childNodes) {
if (child.nodeName === 'rp') {
continue;
}
if (treeAdapter.isTextNode(child) && !/\s|\[|\]/.test(child.value)) {
ruby.push([child.value, '']);
continue;
}
if (child.nodeName === 'rt' && ruby.length > 0) {
const rt = getText(child);
if (/\s|\[|\]/.test(rt)) {
// If any space is included in rt, it is treated as a normal text
ruby = [];
appendChildren(node.childNodes);
break;
} else {
ruby.at(-1)![1] = rt;
continue;
}
}
// If any other element is included in ruby, it is treated as a normal text
ruby = [];
appendChildren(node.childNodes);
break;
}
for (const [base, rt] of ruby) {
text += `$[ruby ${base} ${rt}]`;
}
break;
}
// block code (<pre><code>) // block code (<pre><code>)
case 'pre': { case 'pre': {
if (node.childNodes.length === 1 && node.childNodes[0].nodeName === 'code') { if (node.childNodes.length === 1 && node.childNodes[0].nodeName === 'code') {

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