Compare commits

...

642 Commits

Author SHA1 Message Date
Kagami Sascha Rosylight
5d4ab609f5 Update MkAd.stories.impl.ts 2023-07-13 02:23:32 +02:00
Kagami Sascha Rosylight
0370b4dfab Merge branch 'develop' into fix-storybook-testbed 2023-07-13 02:05:24 +02:00
Kagami Sascha Rosylight
a516557bb6 Update MkAd.stories.impl.ts 2023-07-13 01:59:57 +02:00
Kagami Sascha Rosylight
b6a432fd7b fix(storybook): solve test failures (#11262)
* fix(locales, storybook): use default import

* fix(storybook): solve test failures

* Update MkAd.stories.impl.ts
2023-07-13 08:41:55 +09:00
Kagami Sascha Rosylight
7c4e2b658d tmp 2023-07-13 01:08:40 +02:00
Kagami Sascha Rosylight
bb2eb57a35 Update MkAd.stories.impl.ts 2023-07-13 00:46:12 +02:00
Kagami Sascha Rosylight
698fa84b5a hmm 2023-07-13 00:30:29 +02:00
Kagami Sascha Rosylight
2184323ae7 use waitFor 2023-07-12 23:57:26 +02:00
Kagami Sascha Rosylight
0ba5edc6aa fix(storybook): solve test failures 2023-07-12 23:39:59 +02:00
Kagami Sascha Rosylight
3fde3fbc4d Merge branch 'develop' into no-cache-sensitive 2023-07-12 22:28:40 +02:00
Kagami Sascha Rosylight
cd9affd568 fix(locales, storybook): use default import (#11259) 2023-07-12 22:27:51 +02:00
Kagami Sascha Rosylight
24a0063af0 Merge remote-tracking branch 'origin/develop' into no-cache-sensitive 2023-07-12 21:27:49 +02:00
Kagami Sascha Rosylight
74e565b71c fix storybook 2023-07-12 21:27:27 +02:00
Lui
b97694b083 fix: typo in custom emojis manager (#11250) 2023-07-12 16:31:48 +09:00
Kagami Sascha Rosylight
6ed7d1a76e Update CHANGELOG.md 2023-07-12 02:16:37 +02:00
Kagami Sascha Rosylight
c277934328 feat(backend): allow disabling cache for sensitive files 2023-07-12 02:13:27 +02:00
anatawa12
9845ccec5b オフライン時の画面にリロードボタンを追加 (#11242)
* feat: オフライン時の画面にリロードボタンを追加

リロードのためのボタンがないとPWAでインターネットが復帰しても何もできなくなるため。

* docs(changelog): add オフライン時の画面にリロードボタンを追加
2023-07-11 18:24:10 +09:00
okayurisotto
cf3e39178b refactor(backend): 存在確認のfindOneByexistに置き換え (#11224)
* refactor(backend): 存在確認の`findOneBy`を`exist`に置き換え

* cleanup
2023-07-11 14:58:58 +09:00
tamaina
48d3341462 chore(frontend): Remove experimental flag from migration feature 2023-07-11 05:56:56 +00:00
nomad
791ae608a5 fix(backend): fix fetchInstanceMetadata error (#11236) 2023-07-11 14:40:56 +09:00
yupix
f4d1fcaf67 feat: ユーザーをcontextmenuからアンテナに追加できるようになど (#11206)
* feat: ユーザーをcontextmenuからアンテナに追加できるように close #11115

* MkAvatars.vue変更

* nanka iroiro

* fix MkAvatars

* ix

* fix

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-07-10 15:55:10 +09:00
Sayamame-beans
239ea39d6f feat: フォローやお気に入り登録をしていないチャンネルを開く時は概要ページを開くように (#11218)
* feat: フォローやお気に入り登録をしていないチャンネルを開く時は概要ページを開くように

* Update CHANGELOG.md

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-07-10 13:30:41 +09:00
akanevrc
63e21a4ee3 fix(frontend): 画面ビューワをタップした場合、マウスクリックと同様に画像ビューワを閉じるように (#11211)
* fix: change tapAction of photoswipe to 'close'

* doc: update CHANGELOG.md

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-07-10 13:26:05 +09:00
anatawa12
1a096c557e refactor: fix lint failure (#11214) 2023-07-09 15:46:17 +02:00
eni
53b1684c39 fix(frontend): use system-ui for system font (#11177)
* fix(frontend): correct system font stack

This was originally set to Hiragino Maru Gothic Pro, which is the same as the current default font.

* just use system-ui

per code review https://github.com/misskey-dev/misskey/pull/11177#discussion_r1257260039

---------

Co-authored-by: Kagami Sascha Rosylight <saschanaz@outlook.com>
2023-07-09 14:24:05 +02:00
yupix
9dd53527ca feat: プロフィールURLをコピー ボタンを追加 close #11190 (#11205) 2023-07-09 17:20:50 +09:00
Kagami Sascha Rosylight
59046d583d refactor(locales, sw): use es module (#11204)
* refactor(locales): use es module

* fix sw build

* fix gulp

* try fixing storybook

* Revert "try fixing storybook"

This reverts commit 5f2a4eee01.

* try fixing storybook 2

* Update main.ts

* Update build.js

* Update main.ts

* Update changes.ts

* fix sw lint

* Update build.js
2023-07-09 17:19:07 +09:00
Kagami Sascha Rosylight
5059d4d7e1 refactor(backend): skip fetching notes when the data is same-origin (#11200)
* refactor(backend): skip fetching notes when the data is same-origin

* Update CHANGELOG.md

* sentFrom
2023-07-09 08:59:44 +09:00
Kagami Sascha Rosylight
74a05ec739 fix(frontend): fix storybook build (#11203) 2023-07-09 07:06:13 +09:00
Caipira
60366a4558 fix(backend): Remove Meilisearch index when notes are deleted (#10988)
* fix(backend): Include feature to delete Meilisearch index notes

* Update variable name
`cascadingNotesFilter` -> `federatedLocalCascadingNotes`

* tweak

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-07-08 21:31:38 +09:00
tamaina
7ec07d5fd2 perf(backend): Reduce memory usage of MemoryKVCache (#11076)
* perf(backend): Reduce memory usage of MemoryKVCache

* fix
2023-07-08 21:18:16 +09:00
syuilo
5b8fa25a12 13.14.0-beta.2 2023-07-08 21:13:35 +09:00
syuilo
51df3de66d New Crowdin updates (#10993)
* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Arabic)

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

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Italian)

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

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

* New translations ja-JP.yml (Indonesian)

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

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Italian)

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

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Swedish)

* New translations ja-JP.yml (Swedish)

* New translations ja-JP.yml (Swedish)

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

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Swedish)

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

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (Swedish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Swedish)

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

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

* New translations ja-JP.yml (Thai)

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

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (Arabic)

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

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Russian)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Slovak)

* New translations ja-JP.yml (Swedish)

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

* 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 Traditional)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Swedish)

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

* New translations ja-JP.yml (English)
2023-07-08 21:13:08 +09:00
SASAGAWA Kiyoshi
246d167c81 fix: add suuport Japanese message of errors. (#11159)
* fix: add suuport Japanese message of errors.

* fix: change catching function.

* lint

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-07-08 21:10:52 +09:00
Yuriha
d2764944cf Add unit test for FetchInstanceMetadataService (#11173) 2023-07-08 19:34:19 +09:00
syuilo
ac6d6fdeb8 enhance(frontend): 引用対象を「もっと見る」で展開した場合、「閉じる」で畳めるように
Resolve #11185
2023-07-08 19:01:47 +09:00
syuilo
6a015341ef fix(frontend): 長い文章を投稿する際、プレビューが画面からはみ出る問題を修正
Fix #11186
2023-07-08 18:55:02 +09:00
yupix
3796da6836 feat: フォルダーやファイルでもIDをコピーできるように (#11189)
* feat: フォルダーやファイルでもIDをコピーできるように close #11188

* docs: update CHANGELOG.md
2023-07-08 18:45:41 +09:00
yupix
36d5deeb61 fix: フォルダーのページネーションが機能しない (#11187)
* fix: フォルダーのページネーションが機能しない close #11180

* Update MkDrive.vue

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-07-08 17:48:10 +09:00
nomad
e40a0b98e4 fix(frontend): search user with trailing space (#11184)
* fix(frontend): search user with trailing space

* fix(backend): search user with trailing space

* Update search.ts

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-07-08 17:41:52 +09:00
syuilo
0fbb46c981 13.14.0-beta.1 2023-07-08 16:53:46 +09:00
syuilo
081a14d6f3 perf(backend): use limit() instead of take() 2023-07-08 16:53:07 +09:00
syuilo
b056e8f5eb use node 20.3.1
Fix #11179
2023-07-08 15:48:46 +09:00
syuilo
15683370f0 fix(frontend): ページ遷移でスクロール位置が保持されない問題を修正
Fix #11068
2023-07-08 15:30:36 +09:00
syuilo
644023316e refactor: use esm 2023-07-08 13:03:31 +09:00
syuilo
c2d7008cff tweak localization
Resolve #11119
2023-07-08 12:53:51 +09:00
Chocolate Pie
bd843863d0 fix: 非ログイン時にクレデンシャルが必要なページに行くとエラーが出る問題を修正 (#10973)
* 非ログイン時にクレデンシャルが必要なページに行くとエラーが出る問題を修正 (misskey-dev/misskey#10922)

* Update CHANGELOG.md

* fix

* Update CHANGELOG.md

* Update CHANGELOG.md
2023-07-08 08:58:35 +09:00
CyberRex
8ec96ad1e0 fix(backend): ジョブキュー再試行時のタイミングずれによるエラーを抑制 (#11035)
* fix(backend): ジョブキュー再試行時のタイミングずれによるエラーを抑制

* fix lint
2023-07-08 08:57:23 +09:00
okayurisotto
4f876c9e8d refactor(backend): core/activitypub/models (#11067)
* cleanup(`ApImageService.ts`)

* refactor(`ApImageService.ts`)

* cleanup(`check-https.ts`)

* cleanup(`ApMentionService.ts`)

* refactor(`ApMentionService.ts`)

* cleanup(`ApNoteService.ts`): unneeded `eslint-disable-next-line`

* cleanup(`ApNoteService.ts`)

* WIP(`ApImageService.ts`): `image.url`を`getApHrefNullable()`に通すかどうか悩んでいる

* refactor(`ApNoteService.ts`): function return type

* cleanup(`ApNoteService.ts`): deadcode

* refactor(`ApNoteService.ts`): `eslint-disable-next-line`

* refactor(`ApNoteService.ts`): non-null assertion

これまでは`getApId()`の方でエラーがスローされていた。

* cleanup(`ApNoteService.ts`): unneeded await

* refactor(`ApNoteService.ts`): note.attachment

- `toArray()`を使うように
- よくわからない条件式を整理
- `as`をなくすために`promiseLimit()`でジェネリクスを使うように

* cleanup(`ApNoteService.ts`)

* refactor(`ApNoteService.ts`): よりよい型定義

`res`が`null`でないことは確認されているようだったので`null`とのunionはなくした

* refactor(`ApNoteService.ts`): 不要な条件を削除

* cleanup(`ApNoteService.ts`)

* cleanup(`ApNoteService.ts`): 重要でない`as`を削除

* refactor(`ApNoteService.ts`): `eslint-disable-next-line`

* cleanup(`ApNoteService.ts`): deadcode

* cleanup(`ApNoteService.ts`): unneeded non-null assertion

* refactor(`ApNoteService.ts`): 不要な条件を削除

* WIP(`ApNoteService.ts`): `as`をなくす

エラーメッセージを考える

* cleanup(`ApNoteService.ts`): 不要な`as`を削除

* cleanup(`ApPersonService.ts`): `no-unused-vars`

* cleanup(`ApPersonService.ts`): deadcode

* refactor(`ApPersonService.ts`): function return type

* cleanup(`ApPersonService.ts`): deadcode

* cleanup(`ApPersonService.ts`): deadcode

* WIP(`ApPersonService.ts`): `as`を調整

`null`でないか確認する処理が続いていたので型アサーションは`null`とのunionにした。
より本質的な改善の余地があるように感じるのでひとまずWIPとしてコミット。

* refactor(`ApPersonService.ts`): `eslint-disable-next-line`

* WIP(`ApPersonService.ts`): `as any`をなくした

エラーをスローするようにせざるを得なかったのでエラーメッセージを考える必要がある。

* WIP(`ApNoteService.ts`): non-null assertion

non-nullアサーションを減らすために事前に存在確認をするようにした。
エラーをスローするようにしたのでメッセージを考えなければならない。

* refactor(`ApNoteService.ts`): non-null assertion -> optional chaining

* refactor(`ApPersonService.ts`): `eslint-disable-next-line`

* refactor(`ApPersonService.ts`): `eslint-disable-next-line`

* refactor(`ApPersonService.ts`): function return type

* refactor(`ApPersonService.ts`): type guardによるnon-null assertionの削除

* WIP(`ApPersonService.ts`): `analyzeAttachments`

- Field型を事前に定義しておくように

- `attachments`が`IObject`だった場合、返り値が`{ fields: [] }`になるようだが構わないのか?
- `toArray()`を通すべきでは?

* Revert "WIP(`ApImageService.ts`): `image.url`を`getApHrefNullable()`に通すかどうか悩んでいる"

This reverts commit aeefb843a8.

* cleanup(`ApImageService.ts`): `import`

* refactor(`ApImageService.ts`): 冗長だった部分を短く

* cleanup(`ApMentionService.ts`): `import`

* refactor(`ApImageService.ts`): `JSON.stringify()`でのindentationを追加

* cleanup(`ApNoteService.ts`): `import`

* cleanup(`ApNoteService.ts`)

* cleanup(`ApNoteService.ts`)

* cleanup(`ApNoteService.ts`)

* cleanup(`ApNoteService.ts`): `any`に対するnon-null assertion

* refactor(`ApNoteService.ts`): 添付ファイル

* cleanup(`ApPersonService.ts`): `import`

* refactor(`ApPersonService.ts`): より実情に即した`as`に

* cleanup(`ApPersonService.ts`)

* refactor(`ApPersonService.ts`): 冗長だった部分を修正

* cleanup(`ApPersonService.ts`): deadcode

* cleanup(`ApPersonService.ts`)

* cleanup(`ApQuestionService.ts`): `import`

* refactor(`ApQuestionService.ts`): `eslint-disable-next-line`

* refactor(`ApQuestionService.ts`): `eslint-disable-next-line`

* cleanup(`ApQuestionService.ts`)

* refactor(`ApQuestionService.ts`): non-null assertionを消した

* cleanup(`ApQuestionService.ts`)

* WIP(`ApQuestionService.ts`): non-null assertionを消す

エラーメッセージを考える必要がある。

* refactor(`ApQuestionService.ts`): `any`を消す

* refactor(`ApQuestionService.ts`): function return type

* WIP(`ApPersonService.ts`): 可読性の低い三項演算子を削除しつつnon-null assertionを回避

エラーメッセージを考える必要がある。

* cleanup(`ApPersonService.ts`): 不必要な三項演算子を削除

* cleanup(`ApPersonService.ts`): 不要な`as`

* cleanup(`ApPersonService.ts`)

* refactor(`ApPersonService.ts`)

* refactor(`ApPersonService.ts`): 可読性の低い三項演算子を削除

元の実装が悪いと判断し`null`かどうかの確認をより厳密に行うようにした。

* cleanup(`ApPersonService.ts`)

* cleanup(`ApPersonService.ts`)

* refactor(`ApPersonService.ts`): 返り値を`void`に統一

この返り値を参照しているコードは見当たらなかった。
また、普通に意味がない値であるように見受けられた。

* fixup! refactor(`ApPersonService.ts`): 返り値を`void`に統一

* refactor(`ApNoteService.ts`)

* refactor(`ApPersonService.ts`)

* cleanup(`ApPersonService.ts`)

* cleanup(`ApPersonService.ts`)

* refactor(`ApPersonService.ts`): 返り値の`void`統一と条件式の調整

この返り値を参照しているコードは見当たらなかった。
また、普通に意味がない値であるように見受けられた。

* cleanup(`ApQuestionService.ts`)

* refactor(`ApQuestionService.ts`)

* refactor(`ApQuestionService.ts`)

* refactor(`tag.ts`): function return type

* fixup! enhance: account migration (#10592)

* fixup! WIP(`ApPersonService.ts`): 可読性の低い三項演算子を削除しつつnon-null assertionを回避

* fixup! cleanup(`ApPersonService.ts`): 不要な`as`

* refactor: エラーメッセージを見繕った

* Revert "cleanup(`ApImageService.ts`): `import`"

This reverts commit 1454d04c37.

* Revert "cleanup(`ApMentionService.ts`): `import`"

This reverts commit 244f6720c1.

* Revert "cleanup(`ApNoteService.ts`): `import`"

This reverts commit d8f0d76973.

* Revert "cleanup(`ApPersonService.ts`): `import`"

This reverts commit 5190ef954c.

# Conflicts:
#	packages/backend/src/core/activitypub/models/ApPersonService.ts

* Revert "cleanup(`ApQuestionService.ts`): `import`"

This reverts commit 778585e288.

* processRemoteMoveはそのままにしてほしい

* Revert "fixup! refactor(`ApPersonService.ts`): 返り値を`void`に統一"

This reverts commit 083cd678ab.

* Revert "refactor(`ApPersonService.ts`): 返り値を`void`に統一"

This reverts commit bfa0fcd6f0.

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-07-08 08:57:13 +09:00
nenohi
3c6175d959 広告の曜日を設定できるように (#10095)
* 曜日選択できるように

* ラベル選択でもチェックが変更されるように

* adを参照しないといけないかも

* smallint -> integer

* 異物混入だったので取りだし

* タイムゾーン指定(Date2つ使うのなんか違和感

* 未テスト

* これにすると出てこないかも

* UIチョット変更

* UI変更 fix bug

* 畳むように修正

* dayofweek->dayOfWeek

* マイグレ時にnot null,default設定してるのでnullable:falseでよさそう

* コメントの記載

* Update packages/backend/src/server/api/endpoints/meta.ts

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

---------

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2023-07-08 08:56:11 +09:00
syuilo
1f181536ae use engines 2023-07-08 08:52:51 +09:00
syuilo
383d6a2485 nodeの推奨(デフォルト)バージョンと最小バージョンを分離 2023-07-08 08:50:02 +09:00
syuilo
588465566b 🎨 2023-07-08 08:46:42 +09:00
tamaina
b318789354 fix(backend): deliverManyにcontentのnullチェックを追加
https://github.com/MisskeyIO/misskey/pull/99
2023-07-07 23:15:04 +00:00
tamaina
0b8e0fa91b fix 2023-07-07 22:55:53 +00:00
popkirby
8daca59ca6 perf(backend): use mutex for nsfw model loading (#11109)
Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-07-08 07:27:26 +09:00
okayurisotto
d84796588c cleanup: trim trailing whitespace (#11136)
* cleanup: trim trailing whitespace

* update(`.editorconfig`)

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-07-08 07:08:16 +09:00
Yuriha
4c879b3a33 perf(backend): Improve performance of FetchInstanceMetadata (#11128)
* Perf: Avoid retries to acquire lock in fetchInstanceMetadata

* Fix

* Add Changelog

* Fix typo

* Fix lint

* 記法をMisskey式にする

* ????

* refactor
https://github.com/misskey-dev/misskey/pull/11128#pullrequestreview-1518059366

* refactor

* getいらない?

* fix

* fix

* Update CHANGELOG.md

* clean up

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-07-07 23:28:27 +09:00
syuilo
eacc90debc fix(client): ZenUIでポップアップの表示位置がおかしい問題を修正 2023-07-07 20:18:06 +09:00
anatawa12
2606167f0d chore: collapse renote of my note (#11166)
* chore(frontend): 自分のnoteのrenoteも省略するように

Co-authored-by: madorama <madorama999@gmail.com>

* docs(changelog): add 見たことのあるRenoteを省略して表示をオンのときに自分のnoteのrenoteを省略するように

---------

Co-authored-by: madorama <madorama999@gmail.com>
2023-07-07 20:05:11 +09:00
syuilo
f76b3edbdd update node to 20.4.0 2023-07-07 13:58:43 +09:00
tamaina
aef7b0238b Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-07-07 04:51:04 +00:00
tamaina
cbb58b1cfc update changelog 2023-07-07 04:50:56 +00:00
Narazaka
bc4d27410c feat: webp convert @frontend (#11150)
* webp convert @frontend

* 0.85 → 0.90

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-07-07 13:44:31 +09:00
syuilo
d5c4e77c44 update deps 2023-07-07 10:53:06 +09:00
syuilo
e987af4e4f Update .gitignore 2023-07-07 10:49:17 +09:00
Ryoh827
bc61f37faa refactor(frontend): fix enum types in scripts/form (#11138) 2023-07-06 20:23:54 +09:00
syuilo
c065b97140 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-07-06 16:18:09 +09:00
syuilo
0137af892a chore(frontend): tweak photoswipe animation
Resolve #11117
2023-07-06 16:18:06 +09:00
tamaina
06bf5c1ff1 fix(frontend): In MkPagination, init() also initializes items
ユーザーページのノートタブで小タブを変更すると前のタイムラインが残る問題を修正
2023-07-06 06:43:05 +00:00
syuilo
9e955d20c4 🎨 2023-07-06 15:07:51 +09:00
syuilo
165c53a547 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-07-06 15:04:42 +09:00
syuilo
3597da5c49 Update about-misskey.vue 2023-07-06 15:04:39 +09:00
okayurisotto
4a7da723b3 refactor(backend): ノート削除時のfindCascadingNotesの処理を整理 (#11131)
* refactor(backend): ノート削除時の`findCascadingNotes`の処理を整理

* cleanup: unneeded async await

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

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-07-06 11:25:46 +09:00
EdamAme
d2f8ed95aa エスケープせずにDescriptionを出力、Update info-card.pug (#11108)
HTMLのタグがエスケープされ、
misskey-hub.netのサーバー一覧で、iframeで読み込む際にタグがそのまま出力される状況が発生していた。
pugにおける仕様に則り、!=に変更、エスケープを行わないように。
2023-07-06 09:42:57 +09:00
Ikko Eltociear Ashimine
6b2c92cb68 chore(backend): fix typo in MkImgWithBlurhash.vue (#11125)
occured -> occurred
2023-07-06 09:19:10 +09:00
anatawa12
dc8763215a feat(frontend): 画像を動画と同様に簡単に隠せるように (#11127)
* feat: hide image easily

* docs(changelog): add 画像を動画と同様に簡単に隠せるように
2023-07-06 08:49:07 +09:00
okayurisotto
9959f5bd04 refactor(ApDbResolverService.ts): URLを扱う複雑な正規表現をURLインターフェイスで置き換え (#11123)
* refactor(`ApDbResolverService.ts`): URLを扱う複雑な正規表現をURLインターフェイスで置き換え

* fixup! refactor(`ApDbResolverService.ts`): URLを扱う複雑な正規表現をURLインターフェイスで置き換え
2023-07-06 08:47:47 +09:00
tamaina
be143f91b2 update CHANGELOG.md 2023-07-05 04:57:19 +00:00
Kagami Sascha Rosylight
ac4245dce1 feat(frontend): allow cropping images on drive (#11092)
* feat(frontend): allow cropping images on drive

* nanka iroiro

* folder

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-07-05 13:54:40 +09:00
anatawa12
1ab9f096c3 feat(frontend): deck UIのカラムからアンテナ、リストの編集画面を開けるように (#11104)
* feat: add edit antenna button onto deck column

* feat: add edit list button onto deck column

* docs(changelog): add deck UIのカラムのメニューからアンテナとリストの編集画面を開けるようになりました
2023-07-05 13:04:27 +09:00
Umisyo(Souta Kusunoki)
8f94b36732 refactor: ApDeliverManagerService.tsの型とJSDocを適切に置き換え (#11096)
* refactor: ApDeliverManagerService.ts のanyを適切な型に置き換え

Signed-off-by: Umisyo <kusunokisouta@gmail.com>

* fix: quote to single quote

Signed-off-by: Umisyo <kusunokisouta@gmail.com>

* refactor: JSDocを実態に合わせて修正

Signed-off-by: Umisyo <kusunokisouta@gmail.com>

* fix: activityのnullを許容するよう変更

Signed-off-by: Umisyo <kusunokisouta@gmail.com>

---------

Signed-off-by: Umisyo <kusunokisouta@gmail.com>
Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-07-05 12:17:52 +09:00
tamaina
22227fa641 perf(backend): Use addBulk to add deliver queues (#11114) 2023-07-05 12:15:48 +09:00
tamaina
92d9946f59 enhance(frontend): Better Timeline(MkPagination) Experience (#11066)
* enhance(frontend): Better MkPagination Appearance

* fix

* fix

* 新規投稿が空でも先頭に戻ったらunshiftItemsする

* use Map

* refactor, 型エラー潰し

* refactor
2023-07-05 00:59:37 +09:00
tamaina
526fa8bf3f perf(frontend): use setInterval instead of setTimeout chain in MkTime (#10981)
* perf(frontend): use setInterval instead of setTimeout chain in MkTime

* fix

* props.origin

* props.origin 2

* fix

* add comment

* setIntervalを再設定する

* refactor
2023-07-04 22:48:39 +09:00
tamaina
aa92df4e50 chore(frontend): add comment 2023-07-04 11:21:44 +00:00
riku6460
61e7eb8ff1 perf(backend): JSON.parse の呼び出しを削減する (#11091)
* perf(backend): JSON.parse の呼び出しを削減する

Co-authored-by: Hidekazu Kobayashi <kobahide789@gmail.com>

* Update CHANGELOG.md

---------

Co-authored-by: Hidekazu Kobayashi <kobahide789@gmail.com>
2023-07-04 07:49:13 +09:00
syuilo
84d3a06637 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-07-03 14:35:10 +09:00
syuilo
60cddf87d8 Update MkRetentionLineChart.vue 2023-07-03 14:35:07 +09:00
mappi
6157616b37 fix(frontend): sparkle内にリンクを入れるとクリック不能になる問題の修正 (#11075)
* wip

* Fix 11021
2023-07-03 11:27:56 +09:00
syuilo
af3258dc79 perf(backend): make some features optionable
Resolve #11064
Resolve #11065
2023-07-02 16:02:32 +09:00
tamaina
734c41aba5 perf(frontend): MkImgWithBlurhashでblurhash描画に使うcanvasは再利用するようにする (#10966)
* blurhashを描画するためのcanvasは再利用する

* Revert "perf(frontend): WebGL contextの数を減らす"

This reverts commit aeb8955ca2.

* MkAvatarは平均色だけにする

* clean up

* fix
2023-07-02 13:46:49 +09:00
syuilo
a1327fa9e1 perf(backend): allow get for some endpoints 2023-07-02 08:28:26 +09:00
Kagami Sascha Rosylight
1b1f82a2e2 feat(backend): accept OAuth bearer token (#11052)
* feat(backend): accept OAuth bearer token

* refactor

* Update packages/backend/src/server/api/ApiCallService.ts

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

* Update packages/backend/src/server/api/ApiCallService.ts

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

* fix

* kind: permission for account moved error

* also for suspended error

* Update packages/backend/src/server/api/StreamingApiServerService.ts

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

---------

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-06-28 13:37:13 +09:00
Kagami Sascha Rosylight
d48172e9d1 refactor(backend/test): add interface UserToken (#11050) 2023-06-27 08:07:20 +09:00
Yuriha
58a898dfe0 Fix offscreencanvas undefined (#11017)
* Suppress ReferenceError on some environments (i.e. older iOS)

* fix

* fix

* lint

* adopt suggestion by acid-chicken
2023-06-26 10:45:14 +09:00
Kagami Sascha Rosylight
d23ad8b511 fix(backend): APIエラーのHTTP status code変更 (#11047) 2023-06-26 10:09:12 +09:00
syuilo
8099bc24e1 refactor(backend): use node16 for moduleResolution (#10938)
* refactor(backend): use node16 for moduleResolution

* update deps

* Update tsconfig.json

* ✌️

* revive KEYWORD

* restore strict-event-emitter-types dependency

* restore ms dependency

* cancel redundant import reorder

* fix

* Delete ms.ts

* remove rndstr

---------

Co-authored-by: Kagami Sascha Rosylight <saschanaz@outlook.com>
2023-06-25 21:13:15 +09:00
Kagami Sascha Rosylight
ef354e94f2 refactor(backend): replace rndstr with secureRndstr (#11044)
* refactor(backend): replace rndstr with secureRndstr

* Update pnpm-lock.yaml

* .js
2023-06-25 11:04:33 +09:00
Kagami Sascha Rosylight
7bb8c71543 chore(backend, misskey-js): add type for signup (#11043)
* chore(backend, misskey-js): add type for signup

* rerun
2023-06-25 08:34:18 +09:00
Kagami Sascha Rosylight
a2c0573f84 refactor(backend): replace private-ip with ipaddr.js (#11041)
* refactor(backend): replace private-ip with ipaddr.js

* restore ip-cidr
2023-06-25 06:35:09 +09:00
Kagami Sascha Rosylight
5d922e3084 chore(frontend): use @vitest/coverage-v8 2023-06-24 15:20:15 +02:00
Kagami Sascha Rosylight
f0b5860b9c chore(misskey-js): fix invalid version string format 2023-06-24 14:20:28 +02:00
syuilo
fd4c43786a chore(dev): use buraha via npm 2023-06-24 18:22:53 +09:00
syuilo
60cc7f62e6 update deps 2023-06-24 13:11:53 +09:00
syuilo
dc27ba6f03 enhance(frontend): improve ux of deck scroll
Resolve #11007
2023-06-24 12:58:26 +09:00
syuilo
3fe1c862f6 update misskey-js version 2023-06-24 12:46:30 +09:00
Yuriha
33a2c0b59e Make role tag clickable on user pages (#11019) 2023-06-24 07:51:44 +09:00
Caipira
e8c5117b2d fix(backend): Resolve missing parseObjectId in IdService (#11039) 2023-06-23 16:30:47 +09:00
Balazs Nadasdi
e2261b63e9 fix: clear queue endpoint error with redis script (#11037)
Error message:
```
ReplyError: ERR value is not an integer or out of range script: 720d973b3877f92b4fb3285ced83c97cdd204979, on @user_script:209.
```

The whole error can be tracked back to one of the arguments, which is
`Infinity` in the codebase, but it has to be a number.

The documentation in bullmq says `0` is unlimited[^1], and bullmq tries to
parse the argument with `tonumber` which returns with `-9223372036854775808` if
the argument is `"Infinity"` which is out of bound.

```
127.0.0.1:6379> eval 'return tonumber(ARGV[3])' '2' 'slippy.xyz:queue:inbox:inbox:delayed' 'slippy.xyz:queue:inbox:inbox:events' 'slippy.xyz:queue:inbox:inbox:' '1687183763944' Infinity 'delayed'
(integer) -9223372036854775808
127.0.0.1:6379>
```

[^1]: https://github.com/taskforcesh/bullmq/blob/master/src/commands/cleanJobsInSet-2.lua#L10

Signed-off-by: Efertone <efertone@pm.me>
2023-06-22 15:56:40 +09:00
NoriDev
8c7bcdf998 fix(client): サーバーメトリクスが90度傾いている (#11012) 2023-06-17 13:54:54 +09:00
syuilo
f5dfb64a52 ユーザー統計表示機能を削除
Resolve #10998
2023-06-13 14:13:33 +09:00
syuilo
fa7fd9ce25 fix image of MkError.vue 2023-06-11 15:38:06 +09:00
syuilo
63971f1cd8 13.13.2 2023-06-11 10:03:33 +09:00
syuilo
b1313fbca8 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-06-11 10:01:41 +09:00
syuilo
f1b0c54f6e New Crowdin updates (#10971)
* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (Turkish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)
2023-06-11 10:01:30 +09:00
syuilo
94c09f1441 🎨 2023-06-11 09:53:07 +09:00
syuilo
46222d0258 tweak of f3a16bcd6 2023-06-10 17:41:52 +09:00
syuilo
c59a30ec09 Update CHANGELOG.md 2023-06-10 17:27:35 +09:00
nenohi
f3a16bcd6d ロールのユーザーリストを非公開にできるように (#10987)
* ロールのユーザーリストを非公開にできるように

* Changelog update
2023-06-10 17:26:48 +09:00
syuilo
f69627939b Update misskey-js.api.md 2023-06-10 13:45:30 +09:00
syuilo
e8420ad90b fix(backend): キャッシュが溜まり続けないように
Related #10984
2023-06-10 13:45:11 +09:00
syuilo
6182a1cb2c enhance(backend): WebSocketのPing/Pongをプロトコル制御フレームの物で判別する
Resolve #10969
2023-06-09 17:07:57 +09:00
syuilo
308ab8f177 chore 2023-06-09 16:11:28 +09:00
syuilo
359fbd78c1 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-06-09 15:53:43 +09:00
syuilo
dd733ec1d0 enhance(frontend): サーバーのテーマ設定を別ページに分離 2023-06-09 15:53:40 +09:00
tamaina
5e680500e5 chore: instance → server 2023-06-09 06:32:09 +00:00
atsuchan
0465e74521 Fix: enhance: タイムラインにフォロイーの行った他人へのリプライを含めるかどうかの設定をアカウントに保存するのをやめるように (#10982) 2023-06-09 14:08:35 +09:00
Ebise Lutica
34a32a8334 エラー画像URLを設定可能に (#10959)
* エラー画像URLを設定可能に

* Update CHANGELOG.md

* 設定したエラーアイコンをprefetchするようにbase.pugを変更

* 不足していたデータを追加

* enhance(frontend): デザイン調整
2023-06-09 14:00:53 +09:00
syuilo
3941c73db0 tweak of 6032c2be1 2023-06-09 12:55:27 +09:00
syuilo
703f3a8e37 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-06-09 12:51:19 +09:00
syuilo
6032c2be1c fix(frontend): Scrolling Issue in Safari for Top and Bottom Bars
fix #10977
2023-06-09 12:51:16 +09:00
syuilo
13870c63b0 add note 2023-06-09 12:47:36 +09:00
mappi
88083925ce Update CHANGELOG.md (#10979) 2023-06-09 12:09:21 +09:00
Outvi V
95b2148bfe fix: correctly check the sensitivity flag (#10976) 2023-06-09 10:13:46 +09:00
syuilo
8ccf954065 Update misskey-js.api.md 2023-06-06 09:37:36 +09:00
syuilo
e456c6a9c1 13.13.1 2023-06-06 09:17:11 +09:00
syuilo
68c5426fd5 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-06-06 09:16:40 +09:00
syuilo
29856a9129 tweak of 981e6f996 2023-06-06 09:16:38 +09:00
syuilo
f4943bc5bb New translations ja-JP.yml (Japanese, Kansai) (#10954) 2023-06-06 09:09:46 +09:00
syuilo
aeb8955ca2 perf(frontend): WebGL contextの数を減らす
#10960
2023-06-06 09:09:23 +09:00
syuilo
981e6f996e fix(frontend): タブがアクティブな間はstreamが切断されないように
Fix #10952
2023-06-06 09:04:57 +09:00
CaffeeLake
8263cc0094 Fix: #10955 TypeError: JSON5.parse is not a function (#10956)
* Fix: JSON5.parse is not a function

* update changelog

* update chglog

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-06-05 21:44:28 +09:00
tamaina
fa051a2a5f 🎨 2023-06-05 12:35:23 +00:00
tamaina
ce252143c3 chore: Please write more detailed environmental information in your bug report. 2023-06-05 12:29:52 +00:00
syuilo
259be258aa Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-06-05 18:06:44 +09:00
Yuriha
2d5bb40ad0 Condensedlines reflow once (#10944)
* perf: Update MkCondensedLine styles after reading all dimensions

* perf: reduce reflow in MkCondensedLine

* lint

* Update packages/frontend/src/components/global/MkCondensedLine.vue

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

* Update packages/frontend/src/components/global/MkCondensedLine.vue

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

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2023-06-05 18:06:33 +09:00
syuilo
db7fb1c688 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-06-05 18:05:32 +09:00
syuilo
6b0685a25c [ci skip] New Crowdin updates (#10947)
* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Chinese Traditional)
2023-06-05 18:05:20 +09:00
syuilo
618d07158a 13.13.0 2023-06-05 18:05:03 +09:00
syuilo
a63a417fd4 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-06-05 18:04:54 +09:00
syuilo
4443dba717 Update basic.cy.js 2023-06-05 18:04:51 +09:00
tamaina
565c502bbf fix(backend): pageのピン留めを解除することができない問題を修正
Fix #10950
2023-06-05 09:04:30 +00:00
tamaina
9e716fd813 fix(frontend): MkUserPopupが省略されないのを修正
Fix #10870
2023-06-05 08:58:00 +00:00
syuilo
34e1b52b38 Update e2e.js 2023-06-05 17:45:24 +09:00
syuilo
0cb3c7481c fix typo: schema -> scheme 2023-06-05 10:55:18 +09:00
syuilo
db623dda22 New Crowdin updates (#10943)
* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Russian)
2023-06-04 14:31:03 +09:00
syuilo
1177528c25 fix backend e2e 2023-06-04 14:03:46 +09:00
mappi
a7abf941c0 fix:vue-plyr廃止追加対応(Audio要素のコンテキストメニューをブラウザデフォルトに) (#10940)
* wip

* add comment

* fix quotes
2023-06-02 16:31:25 +09:00
syuilo
5230ec883e fix(backend): 7日経過して無効化されたアンテナを再度有効化する方法がない問題を修正
Fix #10476
2023-06-02 15:18:34 +09:00
syuilo
482b00df77 🎨 2023-06-02 14:13:36 +09:00
syuilo
91d790bbb6 update deps 2023-06-02 11:34:38 +09:00
syuilo
40295ae57d fix style
Fix #10870
2023-06-02 11:03:59 +09:00
syuilo
3857cd589f New Crowdin updates (#10935)
* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Chinese Simplified)
2023-06-02 09:13:51 +09:00
syuilo
9eaca966a4 perf(backend): terminate stalled websocket connections
Resolve #10885
2023-06-02 09:13:41 +09:00
Acid Chicken (硫酸鶏)
8bdf0dd135 test: ignore MkImgWithBlurhash to avoid unstable snapshots 2023-06-01 23:27:58 +09:00
tamaina
eedc8049db fix(frontend): make scrollbar-color track transparent
Fix #9414
2023-06-01 12:03:07 +00:00
syuilo
23f272cc7d [ci skip] update patrons 2023-06-01 19:55:33 +09:00
syuilo
15450b18e8 [ci skip] make enableCondensedLineForAcct false by default
for performance
2023-06-01 19:50:51 +09:00
syuilo
50aeaf7498 [ci skip] 🎨 2023-06-01 19:45:06 +09:00
syuilo
861bfa06a8 🎨 2023-06-01 18:07:30 +09:00
Acid Chicken (硫酸鶏)
3b30ee3130 test: fix vitest 2023-06-01 08:50:26 +00:00
syuilo
f6830885d7 tweak of cd8274888 2023-06-01 17:34:56 +09:00
syuilo
ff56511638 13.13.0-beta.7 2023-06-01 17:20:25 +09:00
Acid Chicken (硫酸鶏)
337dd97b49 perf(#10923): CSS Modules のクラス名をインライン化する (#10930)
* perf(#10923): unwind css module class name

* perf(#10923): support multiple components

* refactor: clean up

* refactor(#10923): avoid `useCssModule()`

* fix(#10923): allow direct literal class name

* fix(#10923): avoid computed class name

* fix(#10923): allow literal keys

* fix(#10923): typo

* fix(#10923): invalid class names

* chore: test

* revert: test

This reverts commit 5c7ef366ec.

* fix(#10923): hidden tale

* perf(#10923): also unwind scoped css contained components

* perf(#10923): `normalizeClass` AOT compilation

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-06-01 17:19:46 +09:00
syuilo
146e89edd0 Update index.d.ts 2023-06-01 17:19:11 +09:00
syuilo
cd82748889 enhance(frontend): 追加の絵文字用辞書をダウンロードできるように
Resolve #10921
2023-06-01 17:10:53 +09:00
syuilo
2c0b10b0ee refactor 2023-06-01 16:28:24 +09:00
syuilo
6c09361ec6 🎨 2023-06-01 13:50:13 +09:00
SASAGAWA Kiyoshi
3089a86c8e fix: テーマにプロパティ 'fgOnWhite' を追加してフォローボタンのスタイルを調整 (#10931)
* fix: add theme property 'fgOnWhite' and fix styles of follow button.

* fix: add theme property 'fgOnWhite' and fix styles of follow button.
2023-06-01 13:29:44 +09:00
syuilo
ec2f05d4f7 fix(backend): i/notificationsのsinceIdが機能しない問題を修正
Fix #10902
2023-06-01 13:28:43 +09:00
syuilo
31a8129cb9 New translations ja-JP.yml (Korean) (#10933) 2023-06-01 13:20:43 +09:00
syuilo
8cc6c2c864 New Crowdin updates (#10929)
* New translations ja-JP.yml (Korean)

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

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

* New translations ja-JP.yml (Norwegian)
2023-06-01 09:29:29 +09:00
syuilo
a4de927df8 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-06-01 09:20:39 +09:00
syuilo
a2c77a0944 Update style.scss 2023-06-01 09:20:37 +09:00
syuilo
d8a564c6a0 🎨 2023-06-01 08:54:37 +09:00
syuilo
ff94b64c91 🎨 2023-06-01 07:51:02 +09:00
tamaina
1cc616b86c fix(frontend): disconnect ResizeObserver 2023-05-31 16:04:01 +00:00
syuilo
6addf9002c tweak ui 2023-05-31 18:03:43 +09:00
mappi
6dd219b6c7 fix: Firefoxにおける絵文字ピッカーのTabキーフォーカス問題の修正 (#10926)
* fix 10744

* fix 10744

* Update CHANGELOG.md

* add comment
2023-05-31 14:03:54 +09:00
syuilo
a535142e82 13.13.0-beta.6 2023-05-31 13:43:36 +09:00
syuilo
9521519cb8 reafactor 2023-05-31 13:41:38 +09:00
syuilo
e11f82c300 refactor 2023-05-31 13:27:59 +09:00
kabo2468
aba0755880 enhance(client): MFMのx2, scale, positionが含まれていたらノートをたたむようにした (#10165)
* enhance(client): MFMのx2, scale, positionが含まれていたらノートをたたむようにした

* Update CHANGELOG.md

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-05-31 12:57:40 +09:00
syuilo
821bb1c476 perf(frontend): サーバーにカスタム絵文字の種類が多い場合のパフォーマンスの改善
Resolve #10925
2023-05-31 12:42:24 +09:00
syuilo
14da0a65f7 tweak ui 2023-05-31 12:24:00 +09:00
syuilo
8e5d31eb5c New Crowdin updates (#10918)
* New translations ja-JP.yml (Korean)

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

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

* New translations ja-JP.yml (Norwegian)

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

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Norwegian)
2023-05-31 09:06:29 +09:00
tamaina
f8f3304164 fix(frontend/MkNoteDetailed): fix css module 2023-05-30 16:24:45 +00:00
syuilo
d7efdd7123 perf(frontend): minify file names
Resolve #10924
2023-05-30 18:55:22 +09:00
syuilo
4256e20a7f 13.13.0-beta.5 2023-05-30 17:39:37 +09:00
syuilo
f2d9e3105d fix(frontend): Pagesのコンテンツが表示されない・作成や編集ができない問題を修正
Fix #10908
2023-05-30 17:37:38 +09:00
syuilo
a6cd97ca9a fix(backend): 「アクセストークンの管理」画面でアプリの情報が表示されない問題を修正
Fix #10920
2023-05-30 17:27:47 +09:00
syuilo
a4a171781b clean up 2023-05-30 15:23:21 +09:00
syuilo
8e8e3dbe4e refactor 2023-05-30 15:18:08 +09:00
syuilo
de71845b35 🎨 2023-05-30 14:38:13 +09:00
syuilo
a3a47b8d35 🎨 2023-05-30 14:34:55 +09:00
syuilo
f091007882 refactor 2023-05-30 12:16:39 +09:00
syuilo
8f14b42e81 perf: インスタンスデフォルトテーマを予めjson5 -> jsonに変換しておくことでjson5を初期バンドルに含めずに済むように 2023-05-30 11:51:29 +09:00
syuilo
8b33a70fc4 vue-plyrやめるなど
- 問題点が多い
- バンドルサイズ削減
2023-05-30 11:32:29 +09:00
syuilo
dc031b1d07 perf(frontend): emojilistのサイズ削減 2023-05-30 11:18:40 +09:00
syuilo
f551b6d15e Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-30 10:21:08 +09:00
syuilo
0a2ac58b82 refactor 2023-05-30 10:20:06 +09:00
tamaina
3c07d3fc08 use pnpm@8.6.0 2023-05-29 13:05:43 +00:00
syuilo
c6ea7f754c New Crowdin updates (#10917)
* New translations ja-JP.yml (German)

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

* New translations ja-JP.yml (English)
2023-05-29 20:08:31 +09:00
syuilo
101e8d7adb refactor 2023-05-29 20:05:46 +09:00
syuilo
19b96ff650 refactor 2023-05-29 19:56:17 +09:00
syuilo
bd66a3f148 🎨 2023-05-29 19:37:03 +09:00
syuilo
7f235275c9 🎨 2023-05-29 19:35:11 +09:00
syuilo
3097bb6c7d refactor 2023-05-29 18:22:15 +09:00
syuilo
f469f555e8 New Crowdin updates (#10916)
* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Russian)

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

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

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Japanese, Kansai)
2023-05-29 17:53:05 +09:00
syuilo
115167e6da update deps 2023-05-29 17:52:55 +09:00
syuilo
a1200ad886 lint 2023-05-29 17:24:46 +09:00
syuilo
25d1b66ca4 refactor 2023-05-29 17:22:09 +09:00
syuilo
c5f9b1c224 lint 2023-05-29 17:13:45 +09:00
syuilo
8c66fad96b lint 2023-05-29 17:13:12 +09:00
syuilo
afa4cd9112 13.13.0-beta.4 2023-05-29 13:34:55 +09:00
syuilo
f930eaee02 perf(backend): use websockets/ws instead of theturtle32/WebSocket-Node (#10884)
* perf(backend): use websockets/ws instead of theturtle32/WebSocket-Node

Resolve #10883

* refactor

* Update StreamingApiServerService.ts

* Update StreamingApiServerService.ts

* ✌️

* Update StreamingApiServerService.ts

* fix main stream init

* fix timing 2

* setIntervalの重複を避ける(気休め)

* add comment

* ✌️

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-05-29 13:32:19 +09:00
syuilo
b35b9bc27f Update QueueProcessorService.ts 2023-05-29 13:30:57 +09:00
syuilo
4790ddfad6 refactor of QueueProcessorService 2023-05-29 13:30:26 +09:00
syuilo
b6f21b6edb refactor 2023-05-29 13:21:26 +09:00
syuilo
fd7b77c542 enhance(backend): migrate bull to bullmq (#10910)
* wip

* wip

* Update QueueService.ts

* wip

* refactor

* ✌️

* fix

* Update QueueStatsService.ts

* refactor

* Update ApNoteService.ts

* Update mock-resolver.ts

* refactor

* Update mock-resolver.ts
2023-05-29 11:54:49 +09:00
tamaina
7cbd852fe5 pnpm devでCtrl+Cで終了させてもプロセスが完全に殺せないのを修正 (#10914) 2023-05-29 06:37:13 +09:00
tamaina
a80003cde5 fix(frontend): Zen UIで、デッキ設定で直接/以外を表示したときデッキに戻るボタンを表示 (#10909)
* fix(frontend): デッキ設定で直接/以外を表示したときのZen UIでデッキに戻るボタン

* fix style

* ?zenが指定されていた場合はボタンを表示しない
2023-05-28 20:58:39 +09:00
syuilo
fb54c58a66 🎨 2023-05-27 12:09:19 +09:00
syuilo
3a924f3dc6 refactor 2023-05-27 11:44:04 +09:00
syuilo
11d22c7b73 refactor 2023-05-27 11:38:08 +09:00
syuilo
a879607479 refactor 2023-05-27 11:35:26 +09:00
Chocolate Pie
98aef974df enhance: ハッシュタグのノート一覧ページから、そのハッシュタグで投稿するボタンを追加、お知らせの画像URLを空にできない問題を修正 (#10878)
* fix: お知らせの画像URLを空にできない問題を修正 (misskey-dev/misskey#10657)

* ハッシュタグのノート一覧ページからノートできるように(misskey-dev/misskey#10854)

* fix: 色々直した

* location.reloadを使わないように

* CHANGELOGを編集

* tweak

* Update tag.vue

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-05-26 14:47:31 +09:00
NoriDev
cf46816687 feat: アカウント初期設定ウィザードに戻るボタンと、後で進むボタンを追加 (#10893)
* enhance(frontend): アカウント初期設定ウィザードに戻るボタンを追加

* enhance(frontend): アカウント初期設定ウィザードにあとでボタンを追加

* tweak

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-05-26 14:40:44 +09:00
tamaina
eee1e74174 shareページに"Misskeyへ"ボタンを設置
Resolve #10898
2023-05-26 05:18:01 +00:00
tamaina
8050f89d7e Revert "fix(client): /shareをsubBootPathsから外す"
This reverts commit 406e5d297b.
2023-05-26 05:06:52 +00:00
tamaina
406e5d297b fix(client): /shareをsubBootPathsから外す
Resolve #10898
2023-05-26 04:34:34 +00:00
syuilo
10634b3615 refactor 2023-05-26 13:32:42 +09:00
syuilo
fd03e2e1a7 🎨 2023-05-26 13:30:26 +09:00
syuilo
6cc86272f3 🎨 2023-05-26 13:24:31 +09:00
syuilo
06b1250d47 🎨 2023-05-26 11:31:39 +09:00
syuilo
31a7350a10 🎨 2023-05-26 10:48:49 +09:00
tamaina
4129ac157a package.jsonの並び替えを修正 2023-05-25 14:50:14 +00:00
syuilo
30cb791e93 enhance(frontend): フォロー/フォロー解除したときに自動でTLをリロードするのをやめるように
- 不便に感じる場合が多いように思う
- 将来的にTLがpush型になったら無意味になる
2023-05-25 08:17:09 +09:00
syuilo
1c57983bfd refactor 2023-05-24 17:50:15 +09:00
syuilo
bdf08c8a54 refactor 2023-05-24 17:33:31 +09:00
syuilo
0513ff8b4e refactor 2023-05-24 17:29:58 +09:00
Acid Chicken (硫酸鶏)
62fe3bfb54 refactor(#7598): add i18n dynamic typings (#10882)
* refactor: add i18n dynamic typings

* chore: tweak
2023-05-24 17:12:38 +09:00
syuilo
38a1d6693a 🎨 2023-05-24 14:43:53 +09:00
syuilo
d2eec3a9e4 refactor 2023-05-24 14:34:46 +09:00
syuilo
1de774fa3d update deps 2023-05-24 10:16:42 +09:00
syuilo
ed902658a9 refactor 2023-05-24 09:59:30 +09:00
Caipira
acdcd7c623 enhance(frontend): improve signup complete ui (#10876)
* enhance(frontend): improve signup complete ui

* relocation

* tweak

* Update _boot_.ts

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-05-24 09:43:38 +09:00
syuilo
b0344e07c4 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-21 20:49:40 +09:00
Acid Chicken (硫酸鶏)
9a6ce1e867 ci: fix head user 2023-05-20 18:52:08 +00:00
Acid Chicken (硫酸鶏)
22a6bd6b22 ci: fix branch name 2023-05-20 14:03:05 +00:00
syuilo
38e6f3f776 🎨 2023-05-20 12:32:51 +09:00
syuilo
ca75afe065 13.13.0-beta.3 2023-05-20 10:35:56 +09:00
Acid Chicken (硫酸鶏)
915ed39715 feat: support summary_large_image (#10862)
* feat: use summary_large_image

* chore: add video

* chore: ignore sensitive image on note
2023-05-20 10:35:23 +09:00
Acid Chicken (硫酸鶏)
81fd94e635 chore: update slacc (#10867)
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-05-20 10:34:31 +09:00
syuilo
05507a4bea enhance(frontend): Deck UIを使用している場合、/以外にアクセスした際にZen UIで表示するように
Resolve #10871
2023-05-20 10:31:53 +09:00
syuilo
d177f97928 refactor 2023-05-20 10:12:18 +09:00
syuilo
30cb03a40d Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-20 10:05:39 +09:00
syuilo
c685989e67 refactor 2023-05-20 10:05:35 +09:00
Acid Chicken (硫酸鶏)
ee3f408c7d feat: impl IdlingRenderScheduler (#10547)
* feat: impl IdleRender

* test: pin time on Chromatic

* test: pin time on Chromatic

* fix: typo

* style: rename

* style: rename

* chore: back to setTimeout

* style: linebreak

* refactor: remove unused budget option

* refactor: use raw unix time

* fix: conflict error

* fix: floor

* fix: subtract

* Revert "fix: subtract"

This reverts commit 2ef4afaafc.

* Revert "fix: floor"

This reverts commit bef8ecdf45.

* Revert "refactor: use raw unix time"

This reverts commit 5199e13cb2.
2023-05-20 03:38:07 +09:00
syuilo
1eb35dd5bc delete /docs 2023-05-19 20:59:21 +09:00
Nanashia
15db0b8812 test(backend): Add tests for antennas (#10868) 2023-05-19 20:53:20 +09:00
syuilo
1b78c6a309 refactor 2023-05-19 20:52:15 +09:00
syuilo
c713af8e23 refactor 2023-05-19 18:16:26 +09:00
nenohi
bd6666173a fix:ロールタイムライン無効に関する修正 (#10843)
* 修正

* note visibility change

* public投稿のみ

* update changelog

* RN非表示機能がうごかないところだった
2023-05-19 17:12:22 +09:00
tamaina
02715f5d14 update pnpm to 8.5.1 2023-05-19 07:36:47 +00:00
syuilo
acd5e0b8f6 update deps 2023-05-19 16:34:56 +09:00
syuilo
be2142bb13 refactor 2023-05-19 16:30:39 +09:00
syuilo
4a703d7cf6 refactor 2023-05-19 16:25:48 +09:00
syuilo
95470a40a7 refactor 2023-05-19 16:20:53 +09:00
syuilo
56d4658b36 refactor(frontend): use css module 2023-05-19 14:08:51 +09:00
syuilo
f68008b002 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-19 13:58:33 +09:00
syuilo
6a5ef5b6f2 refactor 2023-05-19 13:58:09 +09:00
syuilo
95b9284e79 🎨 2023-05-19 13:35:46 +09:00
まっぴー
8317772436 fix:Firefoxでサインアップする時、メールアドレスがユーザー名として認識される#10523 (#10869)
* fix:Firefoxでサインアップする時、メールアドレスがユーザー名として認識される

* Update CHANGELOG.md

edit CHANGELOG.md
2023-05-19 11:35:46 +09:00
syuilo
0c0ae6ff90 13.13.0-beta.2 2023-05-19 10:07:29 +09:00
syuilo
d63b943116 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-19 10:06:33 +09:00
Chocolate Pie
dddbc1c894 feat: 公開リスト (#10842)
* feat: まず公開できるように (misskey-dev/misskey#10447)

* feat: 公開したリストのページを作成 (misskey-dev/misskey#10447)

* feat: いいねできるように

* feat: インポートに対応

* wip

* wip

* CHANGELOGを編集

* add note

* refactor

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-05-19 10:06:12 +09:00
syuilo
f68c743f39 add note 2023-05-19 09:48:48 +09:00
tamaina
59255e11b8 perf: MkImgWithBlurhashとMkMediaImageを最適化 (#10782)
* #10781

* fix tsconfig

* fetch image??

* Revert "fetch image??"

This reverts commit 0925c28d5a.

* wip

* Revert "wip"

This reverts commit be97c6cb88.

* loading="eager"

* loading="eager" 2

* error

* wip

* wip

* wip

* wip

* clean up

* fix

* 生成するworkerを1つにする?

* clean up

* use buraha

* wip

* smaller width, height

* update buraha

* clean up

* fix

* Update MkMediaImage.vue

* Update MkImgWithBlurhash.vue

* Revert "fix(frontend): センシティブ設定された画像を開くとき一瞬レイアウトが崩れる問題を修正"

This reverts commit 41e9aa6f9b.

* Update MkMediaList.vue

* Update MkMediaList.vue

* Update MkMediaList.vue

* Update CHANGELOG.md

* wait for decode

* fix

* ?

* (test) remove container-type: inline-size;

* Revert "(test) remove container-type: inline-size;"

This reverts commit 9448e64228.

* container-name

* Revert "container-name"

This reverts commit 94385d3221.

* width: 100%;

* improve performance

* refactor

* wip

* WIP

* wip

* Revert "wip"

This reverts commit 36e3b75cab.

* Revert "WIP"

This reverts commit 05b729ef91.

* Revert "wip"

This reverts commit 0801e79361.

* #10860

* wip

* no worker

* Revert "no worker"

This reverts commit a9c49e4fb4.

* ✌️

* workerNumber固定は不要

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-05-19 09:44:06 +09:00
syuilo
3804c6e7ad feat: センシティブなカスタム絵文字のリアクションを受け入れない設定を追加 2023-05-19 09:43:38 +09:00
syuilo
527a13b77d enhance(frontend): リアクションの取り消し/変更時に確認ダイアログを出すように 2023-05-19 09:15:24 +09:00
syuilo
a3423bad60 tweak 2023-05-19 09:14:54 +09:00
syuilo
e3f9144608 13.13.0-beta.1 2023-05-18 20:29:13 +09:00
syuilo
231506772a tweak of 7ce569424 2023-05-18 20:17:32 +09:00
syuilo
db1098a180 feat(backend): カスタム絵文字ごとに連合するかどうか設定できるように 2023-05-18 18:48:35 +09:00
syuilo
7ce569424a feat: カスタム絵文字ごとにそれをリアクションとして使えるロールを設定できるように 2023-05-18 18:45:49 +09:00
syuilo
9b5b3a4d1b perf(backend): pre-compile regexp 2023-05-18 18:18:25 +09:00
Acid Chicken (硫酸鶏)
6173cebdca ci: remove deprecated notifications 2023-05-18 08:05:09 +00:00
Acid Chicken (硫酸鶏)
6bb82cda37 ci: use actual base 2023-05-18 14:16:07 +09:00
tamaina
dd60f1a533 fix(frontend/MkUrlPreview): summalyがエラーになった際の挙動を修正 2023-05-17 20:00:28 +00:00
Acid Chicken (硫酸鶏)
45263f4cd0 ci: stop MkGalleryPostPreview snapshot 2023-05-17 07:51:45 +00:00
Acid Chicken (硫酸鶏)
747d323584 ci: fix breaking on foreign repos 2023-05-17 07:39:36 +00:00
syuilo
e707aadbcc update deps 2023-05-17 14:11:32 +09:00
syuilo
7b012967d9 refactor(frontend): MFMコンポーネントのリファクタ & パフォーマンスを改善 2023-05-17 11:50:37 +09:00
syuilo
e126083e10 fix(frontend): コンポーネントのpropを非lowerCamelCaseで渡すと機能しない 2023-05-17 11:42:50 +09:00
syuilo
cbca48846c fix streamin error 2023-05-17 11:10:31 +09:00
syuilo
ca2ed0a59b 🎨 2023-05-17 11:08:46 +09:00
syuilo
5d22e113b2 🎨 2023-05-17 10:52:22 +09:00
syuilo
ed3c137543 Revert "refactor: define _IS_CHROMATIC_"
This reverts commit a35f0d43e4.
2023-05-16 19:37:15 +09:00
syuilo
a35f0d43e4 refactor: define _IS_CHROMATIC_ 2023-05-16 19:24:10 +09:00
syuilo
153eed7d71 fix(frontend/test): MkAnimBgで毎回Chromaticの差分が生成されないように 2023-05-16 18:41:34 +09:00
nenohi
0d8e1c5421 channel favoriteの位置修正 (#10855) 2023-05-16 12:28:59 +09:00
syuilo
d10d5a8d53 enhance: タイムラインにフォロイーの行った他人へのリプライを含めるかどうかの設定をアカウントに保存するのをやめるように
Resolve #10646
2023-05-16 12:16:37 +09:00
syuilo
23f106a0c1 refactor(frontend): boot分割したり副作用減らしたりとか
#10838
2023-05-15 19:08:46 +09:00
syuilo
a7ee4aabcb chore(frontend): 設定画面を整理 2023-05-15 16:40:19 +09:00
syuilo
d867fc00b6 clean up 2023-05-15 16:25:44 +09:00
syuilo
60f504bbe2 fix(frontend): ツールチップが永久にDOMに残ることがある問題を修正
#10805
2023-05-15 14:29:35 +09:00
syuilo
f4e6d73a8a refactor 2023-05-15 13:57:36 +09:00
syuilo
c066013c57 fix #10850 ? 2023-05-15 11:03:18 +09:00
syuilo
86f952e659 fix #10850 ? 2023-05-14 20:32:08 +09:00
syuilo
d36e44bc57 Update pnpm-lock.yaml 2023-05-14 20:22:27 +09:00
syuilo
93629fb29d upgrade aiscript to 0.13.3 2023-05-14 20:08:32 +09:00
syuilo
9ff088a830 ✌️ 2023-05-14 17:55:39 +09:00
syuilo
55190e6b8b Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-14 13:23:28 +09:00
syuilo
38391010af Revert "make __VUE_OPTIONS_API__ false"
This reverts commit 636428c72e.
2023-05-14 13:23:25 +09:00
syuilo
3d94dec7a9 Merge pull request #10847 from yupix/feat/client-dev-mode
feat: 開発者モードを追加
2023-05-14 13:02:48 +09:00
syuilo
636428c72e make __VUE_OPTIONS_API__ false 2023-05-14 12:24:21 +09:00
syuilo
0717afc312 refactor(frontend): use composition api 2023-05-14 12:23:39 +09:00
syuilo
3d4a90b08a refactor(frontend): use composition api 2023-05-14 11:43:56 +09:00
yupix
7cc555fd28 Merge branch 'misskey-dev:develop' into feat/client-dev-mode 2023-05-14 10:56:40 +09:00
syuilo
238d0fa667 refactor 2023-05-14 10:50:21 +09:00
yupix
30ff4592cc Merge branch 'misskey-dev:develop' into feat/client-dev-mode 2023-05-14 10:38:52 +09:00
syuilo
a979fb9207 change(frontend): 動的ページのコンポーネントを削除 2023-05-14 10:31:48 +09:00
yupix
f15f60d5b9 feat: 開発者モードを追加 2023-05-14 01:30:46 +00:00
syuilo
8c97c54cfa refactor(frontend): use css modules 2023-05-14 10:21:56 +09:00
syuilo
89a3195dfd 🎨 2023-05-14 09:54:35 +09:00
syuilo
1eaf287b9c 🎨 2023-05-14 09:44:57 +09:00
syuilo
9166a58c5f 🎨 2023-05-13 20:50:21 +09:00
syuilo
eef368abd0 Update about-misskey.vue 2023-05-13 20:50:16 +09:00
syuilo
f983e44d9e fix(frontend): fix retention rate heatmap rendering 2023-05-12 12:15:54 +09:00
syuilo
5be6438bbc update deps 2023-05-12 12:10:56 +09:00
syuilo
d2e6b17a26 fix(frontend): Pageにおいて画像ブロックに画像を設定できない問題を修正
Fix #10837
2023-05-12 11:47:12 +09:00
syuilo
d1c2e4aaa0 refactor 2023-05-12 11:46:13 +09:00
syuilo
6f1994c665 update deps 2023-05-12 11:41:53 +09:00
syuilo
055dc6bb66 enhance(frontend): add retention line chart 2023-05-12 10:29:27 +09:00
syuilo
f06339b970 🎨 2023-05-12 08:26:06 +09:00
syuilo
3370419b0a 🎨 2023-05-12 08:20:36 +09:00
syuilo
9bd4ad0fc1 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-12 08:02:25 +09:00
syuilo
23994d8f4e [ci skip] New Crowdin updates (#10834)
* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (German)

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

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

* New translations ja-JP.yml (Arabic)
2023-05-12 08:02:15 +09:00
syuilo
bb3c85d3a1 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-12 08:01:31 +09:00
syuilo
8328a66104 Update basic.cy.js 2023-05-12 08:01:29 +09:00
Acid Chicken (硫酸鶏)
909ec8c38d ci: fix missing branch 2023-05-11 22:21:48 +09:00
Acid Chicken (硫酸鶏)
b01a1b3c17 ci: notify on changes for push events 2023-05-11 22:20:26 +09:00
Acid Chicken (硫酸鶏)
cbb779f60c ci: skip non-Japanese locale on TurboSnap 2023-05-11 22:06:13 +09:00
syuilo
8ddae83c40 fix MkUserSetupDialog.Privacy.vue 2023-05-11 21:24:27 +09:00
syuilo
1cc106b8de fix(backend): ひとつのMeilisearchサーバーを複数のMisskeyサーバーで使えない問題を修正 2023-05-11 21:09:29 +09:00
syuilo
16eedb86a5 Update CHANGELOG.md 2023-05-11 20:57:34 +09:00
syuilo
2b26a2f5e4 enhance(frontend): アカウント初期設定ウィザードにプライバシー設定を追加 2023-05-11 20:54:47 +09:00
syuilo
a65fa684ce Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-11 20:17:48 +09:00
syuilo
0758c56c53 New Crowdin updates (#10824)
* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

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

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

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

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

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Russian)

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

* New translations ja-JP.yml (Indonesian)

* New translations ja-JP.yml (Thai)
2023-05-11 20:17:15 +09:00
rinsuki
3c0dccc8b9 meta: Remove @rinsuki from reviewer-lottery (#10830) 2023-05-11 19:28:17 +09:00
syuilo
e18feb4183 Update about-misskey.vue 2023-05-11 18:22:38 +09:00
syuilo
9e464eaa63 fix(frontend): fix retention chart rendering 2023-05-11 18:20:48 +09:00
syuilo
8b352e4e56 feat(frontend): ユーザー指定ノート検索 2023-05-11 18:10:34 +09:00
syuilo
26d85c8bed enhance(backend): ノートのハッシュタグもMeilisearchに突っ込むように
今後ハッシュタグ検索とか実装するときのため
2023-05-11 16:33:39 +09:00
syuilo
df924d18f1 fix(frontend): チャンネル内の検索ボックスが挙動不審な問題を修正
Fix #10793
2023-05-11 16:29:34 +09:00
syuilo
177359689e fix(frontend): カラーバーがリプライには表示されないのを修正 2023-05-11 16:26:35 +09:00
syuilo
b380dc53e1 fix typo 2023-05-11 16:22:46 +09:00
syuilo
8c30ca50a8 fix(frontend): より明確な説明にしたのとtypo修正 2023-05-11 16:20:03 +09:00
Acid Chicken (硫酸鶏)
69afd0480e ci: fix typo 2023-05-10 10:33:49 +00:00
syuilo
6d4d9f417b New Crowdin updates (#10823)
* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)
2023-05-10 18:26:02 +09:00
syuilo
11ea1a2811 Update CHANGELOG.md 2023-05-10 18:03:16 +09:00
nenohi
c15b75e477 センシティブワードを正規表現、CWにも適用するように (#10688)
* cwにセンシティブが効いてない

* CWが無いときにTextを見るように

* 比較演算子間違えた

* とりあえずチェック

* 正規表現対応

* /test/giにも対応

* matchでしなくてもいいのでは感

* レビュー修正

* Update packages/backend/src/core/NoteCreateService.ts

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

* Update packages/backend/src/core/NoteCreateService.ts

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

* 修正

* wipかも

* wordsでスペース区切りのものできたかも

* なんか動いたかも

* test作成

* 文言の修正

* 修正

* note参照

---------

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2023-05-10 18:02:41 +09:00
syuilo
ea9a95cd98 delete unused component 2023-05-10 17:53:49 +09:00
syuilo
ed634b4b3d refactor(frontend): use css module 2023-05-10 17:53:01 +09:00
syuilo
f9f115b66d refactor(frontend): use css module 2023-05-10 17:49:30 +09:00
syuilo
02059fdee4 bump 2023-05-10 17:45:54 +09:00
syuilo
37c119e1f5 refactor 2023-05-10 17:45:13 +09:00
syuilo
d75a7fd421 New Crowdin updates (#10815)
* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (Chinese Traditional)
2023-05-10 16:36:22 +09:00
syuilo
adf66154d2 fix test 2023-05-10 15:59:34 +09:00
syuilo
9557579b67 fix(backend): テスト時は一部のサービスを停止 2023-05-10 15:30:36 +09:00
syuilo
341c42ebb9 enhance(backend): graceful shutdown for job queue and refactor 2023-05-10 15:05:08 +09:00
syuilo
574cfdfda6 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-10 12:24:52 +09:00
syuilo
0729678398 fix(frontend): ブラーエフェクトを有効にしている状態で高負荷になる問題を修正 2023-05-10 12:24:50 +09:00
syuilo
b545146bf9 Update ja-JP.yml 2023-05-10 11:43:40 +09:00
syuilo
7ae1d6511a add X-Robots-Tag: noai 2023-05-10 10:57:27 +09:00
syuilo
0c4c4e7202 念のためnoimageaiもつける 2023-05-10 10:54:56 +09:00
syuilo
6a25015a78 enhance(backend): publicReactionsをデフォルトtrueに 2023-05-10 10:53:01 +09:00
syuilo
ae5a72a2df feat: 投稿したコンテンツのAIによる学習を軽減するオプションを追加
Resolve #10819
2023-05-10 10:52:41 +09:00
syuilo
baa45859c1 refactor(frontend): use css modules 2023-05-09 18:47:06 +09:00
syuilo
461f761aa6 Update CHANGELOG.md 2023-05-09 15:37:13 +09:00
tamaina
6894e42674 fix(client): MkUserInfoのフォローボタンが変な位置にある問題を修正 2023-05-09 06:33:50 +00:00
syuilo
22d6c7fe8a fix(backend): 13.11を経験しない状態で13.12にアップデートした場合ユーザープロフィール関連の画像が消失する問題を修正
Fix #10811
2023-05-09 15:28:44 +09:00
syuilo
9e70b02648 13.12.1 2023-05-09 14:59:22 +09:00
syuilo
64f5b2daa2 New Crowdin updates (#10808)
* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)
2023-05-09 14:58:49 +09:00
syuilo
b2f6c67aa9 fix(backend): リモートサーバーの情報が更新できない問題を修正
Fix #10787
2023-05-09 14:57:42 +09:00
syuilo
1c0ec222b4 enhance(frontend): プロフィール画面におけるモデレーションノートの表示を調整
Resolve #10807
2023-05-09 14:28:27 +09:00
syuilo
80619260c1 fix(frontend): ユーザー選択ダイアログが表示されない問題を修正
Fix #10809
2023-05-09 13:57:43 +09:00
syuilo
e382f74bb3 [ci skip] 13.12.0 2023-05-09 09:17:17 +09:00
syuilo
c8343b2750 [ci skip] New Crowdin updates (#10803)
* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (Japanese, Kansai)
2023-05-09 09:11:44 +09:00
syuilo
7feca2a60a fix(frontend): fix e2e 2023-05-09 08:48:42 +09:00
syuilo
aa28ddf762 fix(frontend): fix e2e 2023-05-09 08:33:57 +09:00
syuilo
5c54e12099 fix(test): ジョブキューをテストが終わったら停止するように
Fix #10802 ?
2023-05-09 08:32:25 +09:00
syuilo
b16d7cc6c4 chore(frontend): より柔軟な文言に変更 2023-05-09 08:09:16 +09:00
syuilo
8f36a80775 fix e2e test 2023-05-09 08:01:54 +09:00
syuilo
a6e7c196ee Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-09 07:49:58 +09:00
syuilo
a531b8aeee refactor for e2e 2023-05-09 07:49:53 +09:00
Acid Chicken (硫酸鶏)
3510768fd5 ci: check for PRs (#10804)
* ci: check for PRs

* ci: run all PRs

* ci: fix syntax error

* ci: comment on PRs only

* ci: use pull_request_target
2023-05-08 15:14:42 +00:00
Acid Chicken (硫酸鶏)
34e958c3a7 test: Storybook is broken 2023-05-08 23:40:21 +09:00
syuilo
65a597a35d 13.12.0-beta.6 2023-05-08 19:55:01 +09:00
syuilo
66da7e18c9 Update CHANGELOG.md 2023-05-08 19:54:46 +09:00
syuilo
7c8ca260ce New Crowdin updates (#10795)
* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (Polish)

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

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Russian)

* 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)
2023-05-08 19:53:45 +09:00
syuilo
2a92e3c1c9 fix of f8ed6b1a5 2023-05-08 18:52:08 +09:00
syuilo
f8ed6b1a54 refactor 2023-05-08 18:30:40 +09:00
syuilo
8709487cd5 fix(frontend): チャンネルが新規作成できなかったのを修正 2023-05-08 18:30:29 +09:00
syuilo
41e9aa6f9b fix(frontend): センシティブ設定された画像を開くとき一瞬レイアウトが崩れる問題を修正
Fix #10801
2023-05-08 18:23:35 +09:00
Acid Chicken (硫酸鶏)
1a96425768 chore: 猫耳の先端って本来少し丸まっているものなのではないだろうか (#10800)
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-05-08 17:51:52 +09:00
syuilo
6fd63c1fb6 tweak of #10799 2023-05-08 17:49:19 +09:00
syuilo
b271d02660 tweak of #10799 2023-05-08 17:38:19 +09:00
syuilo
85a4c8dbb1 feat(frontend): アカウント初期設定ウィザード (#10799)
* wip

* 🎨

* 🎨

* wip

* wip

* 🎨

* Update CHANGELOG.md

* wip

* Update MkUserSetupDialog.vue

* add stories

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

* update stories

* Update MkUserSetupDialog.Follow.stories.impl.ts

* test: load mock user account

* ✌️

* ✌️

* test: reset on each render

* test: use id to identify

---------

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2023-05-08 17:29:19 +09:00
syuilo
d5e92c3822 refactor(frontend): use css modules 2023-05-08 10:32:08 +09:00
syuilo
151586ab60 refactor 2023-05-08 08:52:01 +09:00
syuilo
5c80d9093b fix(frontend): fix MkInput style 2023-05-08 08:13:41 +09:00
syuilo
b565df6882 fix(backend): fix channels/owned
Fix #10791
2023-05-08 07:59:06 +09:00
tamaina
b8b91b39f4 enhance(client): 🎨 gallery/:id/edit 2023-05-07 18:36:48 +00:00
tamaina
44ba2fd7cb fix(client): Fix #10746
NSFWメディアの上に表示された「もっと見る」ボタンが押しづらい問題を修正
2023-05-07 12:37:11 +00:00
tamaina
f94f3dae8b Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-07 12:01:47 +00:00
tamaina
4dfe2c15b0 fix(backend): Fix #10786 2023-05-07 12:01:39 +00:00
syuilo
7d1dde0f04 chore(frontend): クライアントの全般設定を整理 2023-05-07 20:59:29 +09:00
syuilo
63a0b7353a chore(frontend): クライアントの全般設定を整理 2023-05-07 20:56:46 +09:00
syuilo
f82810cf1b chore(frontend): クライアントの全般設定を整理 2023-05-07 20:48:46 +09:00
syuilo
853f9dca31 🎨 2023-05-07 20:33:13 +09:00
Acid Chicken (硫酸鶏)
d526cd70fd fix: use max-width instead of width 2023-05-07 19:21:55 +09:00
Acid Chicken (硫酸鶏)
9016573736 chore: min-scale for MkAcct 2023-05-07 19:08:43 +09:00
syuilo
be7b11e1bb 13.12.0-beta.5 2023-05-07 18:20:22 +09:00
syuilo
4da22b85a0 New Crowdin updates (#10614)
* 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 (German)

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

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (Polish)

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

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

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Thai)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Thai)

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

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

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (English)

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

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

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Arabic)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Russian)

* 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 (Japanese, Kansai)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Catalan)

* New translations ja-JP.yml (Korean)

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

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

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (Polish)

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

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

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

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

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

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Italian)

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

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

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

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

* New translations ja-JP.yml (Norwegian)

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

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

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

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

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

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Norwegian)

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

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

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

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

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

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

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

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

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

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

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

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

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

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Russian)

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

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

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

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Thai)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

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

* New translations ja-JP.yml (Chinese Traditional)
2023-05-07 18:20:01 +09:00
syuilo
448a933f77 enhance(frontend): モデレーターはノートに添付された画像上から直接NSFW設定できるように 2023-05-07 18:18:32 +09:00
syuilo
8310d929dc enhance(frontend): 閲覧注意設定された画像は表示した状態でもそれが閲覧注意だと分かる表示をするように 2023-05-07 17:57:55 +09:00
syuilo
963aa4939f Update CHANGELOG.md 2023-05-07 17:55:50 +09:00
syuilo
8957a89024 update test 2023-05-07 17:38:06 +09:00
syuilo
95a2de8d54 fix(backend): 凍結されたユーザーが一部APIのレスポンスに含まれる問題を修正 2023-05-07 17:36:13 +09:00
syuilo
50985b2ffd fix test 2023-05-07 16:42:19 +09:00
syuilo
61c12290fd fix test 2023-05-07 16:41:37 +09:00
syuilo
8a9cc0e711 fix text 2023-05-07 12:53:41 +09:00
syuilo
95e7e003fd fix test 2023-05-07 12:04:16 +09:00
syuilo
29a84230b0 enhance(backend): SearchService.searchNoteでhost指定対応 2023-05-07 11:59:06 +09:00
syuilo
6ad9a9677a fix test 2023-05-07 11:31:32 +09:00
syuilo
1ff23d7a9d Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-07 11:27:46 +09:00
syuilo
84beecd27f fix lint 2023-05-07 11:27:41 +09:00
syuilo
78273f9f0d Update 01_bug-report.md 2023-05-07 10:42:01 +09:00
syuilo
119f02540d 🎨 2023-05-07 10:07:26 +09:00
syuilo
3401ab0128 🎨 2023-05-07 10:04:14 +09:00
かっこかり
39becdb576 miauthでは寄付popupを表示しない (#10779) 2023-05-06 22:13:11 +09:00
syuilo
8c4e918431 13.12.0-beta.4 2023-05-06 12:59:10 +09:00
syuilo
484dfb6a01 enhance(frontend): update aiscript to 0.13.2 2023-05-06 12:58:59 +09:00
syuilo
1a4b4348a9 fix(backend): sort notes
Fix #10776
2023-05-06 12:49:49 +09:00
syuilo
0735ca0853 fix test 2023-05-06 12:41:33 +09:00
syuilo
732d714c96 fix(dev): fix vite config
Fix #10773
2023-05-06 10:25:15 +09:00
syuilo
63be1ee8c0 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-06 10:24:18 +09:00
syuilo
0a59407a3c fix type 2023-05-06 10:24:14 +09:00
syuilo
521bb9b506 Update CHANGELOG.md 2023-05-06 10:13:33 +09:00
syuilo
d17c2892d6 13.12.0-beta.3 2023-05-06 09:53:23 +09:00
syuilo
e36f9599d2 🎨 2023-05-06 09:53:09 +09:00
syuilo
10ff379b4c enhance(backend/frontend): モデレーションノートをユーザーのプロフィールページからも閲覧および編集できるように 2023-05-06 09:51:06 +09:00
syuilo
bd1c2abffc clean up 2023-05-06 09:39:14 +09:00
syuilo
c7d4264ecf refactor 2023-05-06 09:34:21 +09:00
syuilo
30bc59c943 Update CHANGELOG.md 2023-05-06 08:18:54 +09:00
Chocolate Pie
39748ea0c3 feat: アンテナのエクスポート・インポート (#10754)
* feat: アンテナのエクスポートに対応 (misskey-dev/misskey#10690)

* feat: アンテナのインポートに対応 (misskey-dev/misskey#10690)

* fix: タイポを修正

* feat: ユーザーリストをサポート

* fix: バグを直した

* fix: バグを直した

* fix: 適当に決めた変数名を変更

* fix

* fix: 変数の変更、リファクタリング
2023-05-06 08:17:55 +09:00
syuilo
5dfbce7571 feat: チャンネルの削除
Resolve #7171
Resolve #9935
2023-05-06 08:15:17 +09:00
かっこかり
3a105024c7 enhance: プロフィール設定「追加情報」の並び替え・削除に対応 (#10766)
* (enhance) profile fields dnd

* Update CHANGELOG.md

* Fix typo

* fix lint

* fix styles

* fix lint

* (change) style

* (fix) label

* (fix) typo

* (fix) LINT ISSUES

* (change) style

* remove unnecessary style declaration

* (fix) breakpoint
2023-05-06 07:06:12 +09:00
Caipira
ae21b75687 fix(backend): Use SSL option for Meilisearch (#10772) 2023-05-06 04:02:34 +09:00
Acid Chicken (硫酸鶏)
4a72941eda perf: use slacc on check-word-mute (#10721)
* perf: use slacc on check-word-mute when all of specified words are single word

* perf: use slacc as possible

* build: avoid tarball

* chore: update slacc

* build: update package name
2023-05-05 19:49:34 +09:00
syuilo
14e364a74a 13.12.0-beta.2 2023-05-05 14:28:24 +09:00
syuilo
e1bc832c0d Update CHANGELOG.md 2023-05-05 14:19:20 +09:00
nenohi
2d84e04240 ロールにNSFWを強制的につけるオプションを追加 (#10731)
* ロールにNSFWを強制的につけるオプションを追加

* すでにあるファイルにNSFWが付与できない

* NSFWを付与しようとするとエラーに

* add test

* Update packages/backend/src/core/RoleService.ts

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

* spacingで怒られたので

* ロール作成時のプロパティ削除

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-05-05 14:18:06 +09:00
syuilo
be226ec187 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-05 12:24:31 +09:00
syuilo
6db37d4fcb fix(backend): ノートの検索インデックス条件を調整 2023-05-05 12:24:29 +09:00
syuilo
b3b8ee46f0 13.12.0-beta.1 2023-05-05 10:15:00 +09:00
syuilo
b45bc3fd5d feat(frontend): in channel search 2023-05-05 10:05:33 +09:00
syuilo
5c08f2b93b feat: Introduce Meilisearch (#10755)
* wip

* wip

* Update SearchService.ts

* Update SearchService.ts

* wip

* wip

* Update SearchService.ts

* Update CHANGELOG.md

* wip

* Update SearchService.ts

* Update docker-compose.yml.example
2023-05-05 08:52:14 +09:00
syuilo
5f62cefe31 Update CHANGELOG.md 2023-05-05 08:50:25 +09:00
たーびん
8dab46470e fix #10666 チャンネル検索ですべてのチャンネルの取得/表示ができるようにする (#10667)
* Update CHANGELOG.md

* fix : able to search all channels

* add chennel/search test

* update Changelog

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
Co-authored-by: atsuchan <83960488+atsu1125@users.noreply.github.com>
Co-authored-by: Masaya Suzuki <15100604+massongit@users.noreply.github.com>
Co-authored-by: Kagami Sascha Rosylight <saschanaz@outlook.com>
Co-authored-by: taiy <53635909+taiyme@users.noreply.github.com>
Co-authored-by: xianon <xianon@hotmail.co.jp>
Co-authored-by: kabo2468 <28654659+kabo2468@users.noreply.github.com>
Co-authored-by: YS <47836716+yszkst@users.noreply.github.com>
Co-authored-by: Khsmty <me@khsmty.com>
Co-authored-by: Soni L <EnderMoneyMod@gmail.com>
Co-authored-by: mei23 <m@m544.net>
Co-authored-by: daima3629 <52790780+daima3629@users.noreply.github.com>
Co-authored-by: Windymelt <1113940+windymelt@users.noreply.github.com>
Co-authored-by: Ebise Lutica <7106976+EbiseLutica@users.noreply.github.com>
2023-05-05 08:48:14 +09:00
syuilo
8c70bbe74d 🎨 2023-05-05 08:47:02 +09:00
syuilo
9ee002285d 🎨 2023-05-05 08:37:20 +09:00
syuilo
febb9f388c enhance(frontend): make MkCondensedLine experimental 2023-05-05 08:34:05 +09:00
Acid Chicken (硫酸鶏)
2cfed3395e feat: condense acct (#10753)
* feat: condense acct

* fix: watch parent element size

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-05-05 08:16:55 +09:00
syuilo
53498991bb Update about-misskey.vue 2023-05-05 08:05:33 +09:00
syuilo
ae80dc9b1e Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-05 08:05:11 +09:00
syuilo
2c606028b3 :art 2023-05-05 08:05:04 +09:00
かっこかり
1f9f63df7c 「このファイルからノートを作成」ボタンを追加 (#10758)
* (add) note this file button

* Update CHANGELOG.md
2023-05-04 19:58:17 +09:00
syuilo
dbc24ce587 Update about-misskey.vue 2023-05-03 16:38:52 +09:00
tamaina
58c3fc6cd2 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-05-02 16:21:25 +00:00
tamaina
363eb73fb3 fix 2023-05-02 16:21:18 +00:00
okayurisotto
43593603f1 fix(backend): fieldsの誤った定義を修正 (#10737) 2023-05-02 21:14:22 +09:00
syuilo
bcd123371b update deps 2023-05-02 20:52:36 +09:00
tamaina
f3e43a0fc6 refactor 2023-05-02 10:26:18 +00:00
tamaina
b3ec47c3f4 初期ユーザー登録時にはpreservedUsernamesを無視する
Fix #10738
2023-05-02 10:18:57 +00:00
syuilo
a2e475f2e8 Update CHANGELOG.md 2023-05-02 12:37:42 +09:00
syuilo
379c5a8091 enhance(frontend): use MkColorInput 2023-05-02 12:32:21 +09:00
syuilo
8dc5edde76 fix(backend): フォローリクエストの通知が残る問題を修正
Fix #10611
2023-05-02 12:14:06 +09:00
syuilo
e9ba896431 Update CHANGELOG.md 2023-05-02 09:57:11 +09:00
tsukimizake
cbd183a7a9 fix: return null from Mk:dialog (#10676) 2023-05-02 09:56:20 +09:00
syuilo
d535ec21a2 feat: チャンネルに色を設定できるように 2023-05-02 09:36:40 +09:00
syuilo
0cbdbf24f1 Create MkColorInput.vue 2023-05-02 09:23:30 +09:00
syuilo
4495969d7f Update MkInput.vue 2023-05-02 09:22:37 +09:00
syuilo
f5e9886c70 Update MkInput.vue 2023-05-02 09:17:10 +09:00
syuilo
1631e62739 refactor(frontend): use css modules 2023-05-02 09:07:57 +09:00
syuilo
e48926b01d Update about-misskey.vue 2023-05-02 08:13:30 +09:00
syuilo
25580e8afc 🎨 2023-05-01 17:09:07 +09:00
syuilo
5b7482d8f4 Update about-misskey.vue 2023-05-01 10:02:57 +09:00
tamaina
5f4d20ac1d ThisIsExperimentalFeature → thisIsExperimentalFeature 2023-04-30 12:11:43 +00:00
nexryai
7de59a80a2 fix(backend): サーバーメトリクスのメモリ使用率が不正確になることがある不具合の修正 (#10728)
* FIX: サーバーメトリクスのメモリ使用率が不正確になることがある不具合の修正

* Update CHANGELOG
2023-04-30 06:47:00 +09:00
Namekuji
d28866f71a enhance: account migration (#10592)
* copy block and mute then create follow and unfollow jobs

* copy block and mute and update lists when detecting an account has moved

* no need to care promise orders

* refactor updating actor and target

* automatically accept if a locked account had accepted an old account

* fix exception format

* prevent the old account from calling some endpoints

* do not unfollow when moving

* adjust following and follower counts

* check movedToUri when receiving a follow request

* skip if no need to adjust

* Revert "disable account migration"

This reverts commit 2321214c98.

* fix translation specifier

* fix checking alsoKnownAs and uri

* fix updating account

* fix refollowing locked account

* decrease followersCount if followed by the old account

* adjust following and followers counts when unfollowing

* fix copying mutings

* prohibit moved account from moving again

* fix move service

* allow app creation after moving

* fix lint

* remove unnecessary field

* fix cache update

* add e2e test

* add e2e test of accepting the new account automatically

* force follow if any error happens

* remove unnecessary joins

* use Array.map instead of for const of

* ユーザーリストの移行は追加のみを行う

* nanka iroiro

* fix misskey-js?

* ✌️

* 移行を行ったアカウントからのフォローリクエストの自動許可を調整

* newUriを外に出す

* newUriを外に出す2

* clean up

* fix newUri

* prevent moving if the destination account has already moved

* set alsoKnownAs via /i/update

* fix database initialization

* add return type

* prohibit updating alsoKnownAs after moving

* skip to add to alsoKnownAs if toUrl is known

* skip adding to the list if it already has

* use Acct.parse instead

* rename error code

* 🎨

* 制限を5から10に緩和

* movedTo(Uri), alsoKnownAsはユーザーidを返すように

* test api res

* fix

* 元アカウントはミュートし続ける

* 🎨

* unfollow

* fix

* getUserUriをUserEntityServiceに

* ?

* job!

* 🎨

* instance => server

* accountMovedShort, forbiddenBecauseYouAreMigrated

* accountMovedShort

* fix test

* import, pin禁止

* 実績を凍結する

* clean up

* ✌️

* change message

* ブロック, フォロー, ミュート, リストのインポートファイルの制限を32MiBに

* Revert "ブロック, フォロー, ミュート, リストのインポートファイルの制限を32MiBに"

This reverts commit 3bd7be35d8.

* validateAlsoKnownAs

* 移行後2時間以内はインポート可能なファイルサイズを拡大

* clean up

* どうせactorをupdatePersonで更新するならupdatePersonしか移行処理を発行しないことにする

* handle error?

* リモートからの移行処理の条件を是正

* log, port

* fix

* fix

* enhance(dev): non-production環境でhttpサーバー間でもユーザー、ノートの連合が可能なように

* refactor (use checkHttps)

* MISSKEY_WEBFINGER_USE_HTTP

* Environment Variable readme

* NEVER USE IN PRODUCTION

* fix punyHost

* fix indent

* fix

* experimental

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-04-30 00:09:29 +09:00
Chocolate Pie
149ddebf16 fix(frontend): ロールのタイトルのバグを解決、Reactivity Transformで型エラーを出さないように (#10729)
* fix: #10569を解決

* fix: ロールが存在しない場合、タイトルにエラーメッセージを表示させる

* fix: Reactivity Transformで型エラーを出さないように

* feat: i18n対応

* feat: タブでエラー表示

* fix: エラーメッセージを分ける

* fix: 使う変数の間違えを修正

* productionビルドできない問題を修正

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-04-29 23:36:28 +09:00
tamaina
351bee325b perf(backend): Use ThinUser in admin/federation/remove-all-following 2023-04-29 14:35:48 +00:00
Namekuji
0ab50f87a2 fix #10651 (#10684) 2023-04-29 23:27:14 +09:00
tamaina
09764b909b enhance(dev): non-production環境でhttpサーバー間でもユーザー、ノートの連合が可能なように (#10717)
* enhance(dev): non-production環境でhttpサーバー間でもユーザー、ノートの連合が可能なように

* refactor (use checkHttps)

* MISSKEY_WEBFINGER_USE_HTTP

* Environment Variable readme

* NEVER USE IN PRODUCTION

* fix punyHost
2023-04-29 23:26:47 +09:00
tamaina
2d3d986d13 test: Check availability of production build (#10734) 2023-04-29 23:21:54 +09:00
tamaina
87657d0acf wip 2023-04-29 14:01:25 +00:00
Acid Chicken (硫酸鶏)
9d5911d4e4 feat: make MkImgWithBlurhash transitionable (#10500)
* feat: make `MkImgWithBlurhash` animatable

* refactor: split out transition styles

* fix: bug

* test: waitFor image loads

* style: remove unused await

* fix

* fix type error

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-04-29 22:57:46 +09:00
okayurisotto
e2d9c0efe2 fix(backend): alsoKnownAsの誤った定義を修正 (#10725) 2023-04-29 19:24:33 +09:00
syuilo
8fb5457c01 [ci skip] fix typo 2023-04-29 18:28:25 +09:00
syuilo
0ad7869249 feat: preserved usernames
Resolve #10704
2023-04-29 17:03:14 +09:00
syuilo
e8177ee311 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-04-29 16:40:58 +09:00
かっこかり
8fbca63cec feat(client): Renoteした人の一覧を表示するダイアログを追加 (#10647)
* (add) renote user dialog

* (change) noteMenu order

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

* (change) menu text

* Update CHANGELOG.md

* (change) dialog title text

* (fix) grammar mistakes in CHANGELOG.md

* (change) i18n keys

---------

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2023-04-29 15:48:06 +09:00
たーびん
5124db57d2 fix email test (#10719) 2023-04-27 19:43:00 +09:00
tamaina
6e0f998fb2 test: use pnpm v8 2023-04-26 15:17:40 +00:00
futchitwo
52a1d96218 fix(play preset): Set failback for notes without text or user.name in Timeline preset (#10718) 2023-04-26 14:10:04 +09:00
Yuriha
a986203b38 [fix] .wav .flac ファイルを再生可能にする (#10686)
* .wav .flac ファイルを再生可能にする
file-typeにより判定されたMIME TypeをHTML5 Audio/Video要素に認識されるものに書き換える

* fix typecheck error

* frontend側の FILE_TYPE_BROWSERSAFEも更新

* Update packages/backend/src/core/FileInfoService.ts

* ✌️

* 後方互換を確保

* add tests

* update changelog.md

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-04-26 02:17:58 +09:00
tamaina
2aa75f5489 fix 2023-04-25 06:29:27 +00:00
tamaina
b9b9cd0c78 enhance(server): 環境変数MISSKEY_CONFIG_YMLでdefault.ymlを任意のymlに変更可能に (#10712)
* enhance(server): MISSKEY_CONFIG_YMLでconfigを設定可能に

* update changelog
2023-04-25 15:18:03 +09:00
syuilo
b2a28ad9d4 Update about-misskey.vue 2023-04-23 16:24:34 +09:00
Acid Chicken (硫酸鶏)
f3206d094d build: set default theme for Storybook 2023-04-23 12:47:43 +09:00
syuilo
59dc9516d0 refactor(frontend): use composition aoi 2023-04-23 08:13:12 +09:00
syuilo
62af89d433 🎨 2023-04-22 20:22:09 +09:00
syuilo
b57ee4dd96 fix of 34492f3c9a 2023-04-22 20:12:41 +09:00
syuilo
8876ae09ed .js 2023-04-22 20:05:36 +09:00
syuilo
34492f3c9a enhance(backend): tweak cache of federated instance
#10631
2023-04-22 19:59:08 +09:00
syuilo
918a96da24 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-04-22 17:24:22 +09:00
syuilo
e461fb169e refactor(frontend): refactor MkNumberDiff.vue 2023-04-22 17:24:19 +09:00
tinaxd
5ddffa728a fix: ドライブアップロードで413が返ってきたときにエラーメッセージを表示 (#10680) 2023-04-22 17:18:57 +09:00
syuilo
eb0e2ceef7 🎨 2023-04-22 17:11:13 +09:00
syuilo
2718d86171 🎨 2023-04-22 16:04:03 +09:00
syuilo
d437e148db 🎨 2023-04-22 12:50:40 +09:00
syuilo
eacdc0136f 🎨 2023-04-22 12:19:49 +09:00
syuilo
5a7a1d0be9 🎨 2023-04-22 10:50:54 +09:00
syuilo
9145302b3a fix(frontend): fix wrong icon name 2023-04-22 08:00:37 +09:00
syuilo
ca49ac28b8 chore: remove unused files 2023-04-22 07:53:46 +09:00
syuilo
7b721c2124 Update about-misskey.vue 2023-04-22 07:51:15 +09:00
syuilo
87ff004c73 🎨 2023-04-21 09:34:36 +09:00
syuilo
18df1c7a52 Revert "🎨"
This reverts commit af738d9ca9.
2023-04-21 09:29:32 +09:00
syuilo
1dac961784 enhance(frontend): INVALID_PARAMおよびROLE_PERMISSION_DENIEDエラーを分かりやすく表示するように 2023-04-21 09:17:44 +09:00
syuilo
8b833c88ad vite動かなかったため戻した 2023-04-21 09:17:14 +09:00
syuilo
4054f9cccf update deps 2023-04-21 09:02:49 +09:00
tamaina
5cae078e5e fix(backend): make isExplorable optional for backward compatibility
https://github.com/misskey-dev/misskey/pull/10677#issuecomment-1516394630
2023-04-20 16:09:54 +00:00
nenohi
8dc60cd327 Role timeline setting (#10677)
* ロールタイムライン設定

* isRoleTimeline to isExplorable

* ポリシーではないので削除

* 型からも

* wip

* 足りてなかった説

* wip

* listはpublicを表示

* 前回の記載修正( #10671 )

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-04-20 20:02:50 +09:00
syuilo
af738d9ca9 🎨 2023-04-20 20:01:54 +09:00
syuilo
40debf20d8 add new achievement 2023-04-20 19:40:02 +09:00
syuilo
3af99d075e enhance(frontend): サーバー情報ページでサーバールールを見れるように 2023-04-20 17:23:35 +09:00
syuilo
795cb1ecf4 🎨 2023-04-20 15:39:59 +09:00
tamaina
e89d0aa815 update pnpm and summaly 2023-04-20 04:34:59 +00:00
syuilo
206baa13e6 enhance(frontend): tweak retention rate heatmap rendering 2023-04-20 10:41:09 +09:00
syuilo
7cc797062d tweak MkSignupDialog.rules.vue 2023-04-20 10:11:48 +09:00
syuilo
67d218fe2b tweak MkSignupDialog.rules.vue 2023-04-20 09:52:08 +09:00
tamaina
dc8a3f210b fix(server): 1:1ではない画像のリアクション通知バッジが左や上に寄ってしまっていたのを中央に来るように修正 2023-04-19 14:30:48 +00:00
syuilo
e1f9ab77f8 feat: Server rules (#10660)
* enhance(frontend): サーバールールのデザイン調整

* enhance(frontend): i18n

* enhance(frontend): 利用規約URLの設定を「モデレーション」ページへ移動

* enhance(frontend): サーバールールのデザイン調整

* Update CHANGELOG.md

* 不要な差分を削除

* fix(frontend): lint

* ui tweak

* test: add stories

* tweak

* test: bind args

* test: add interaction tests

* fix bug

* Update packages/frontend/src/pages/admin/server-rules.vue

Co-authored-by: Ebise Lutica <7106976+EbiseLutica@users.noreply.github.com>

* Update misskey-js.api.md

* chore: windowを明示

* 🎨

* refactor

* 🎨

* 🎨

* fix e2e test

* 🎨

* 🎨

* fix icon

* fix e2e

---------

Co-authored-by: Ebise Lutica <7106976+EbiseLutica@users.noreply.github.com>
Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2023-04-19 21:24:31 +09:00
syuilo
0f7defc14a Update test-frontend.yml 2023-04-19 16:42:14 +09:00
syuilo
323af09ae9 Update labeler.yml 2023-04-19 13:35:19 +09:00
syuilo
d868f8f356 Update labeler.yml 2023-04-19 13:34:45 +09:00
syuilo
8c9cb9ee15 update deps 2023-04-19 12:52:14 +09:00
syuilo
3a61af326e Update about-misskey.vue 2023-04-19 11:24:46 +09:00
syuilo
f5c502a436 Update labeler.yml 2023-04-19 11:08:56 +09:00
syuilo
b8dacaaac8 Update pull_request_template.md 2023-04-19 11:02:51 +09:00
nenohi
65ff2c2498 カスタム絵文字のライセンスを一括でできるように (#10671)
* setlicensebulk追加

* 5時に誤字った!w

* 並び順の変更(set,add,removeの順

* add changelog
2023-04-19 08:25:24 +09:00
SASAGAWA Kiyoshi
b26807b59b fix: text color of follow button (#10672) 2023-04-19 08:24:37 +09:00
tamaina
471b836a44 fix(sw): 通知全削除時にread_notification通知が消えないように
通知欄に現れたり消えたりするとうざい
2023-04-18 06:01:18 +00:00
tsukimizake
aa289c9cb0 use channels/my-favorites on deck/channel-column/setChannel (#10662) 2023-04-18 13:29:45 +09:00
syuilo
614f12386e feat(frontend): 通知の表示をカスタマイズできるように 2023-04-17 13:12:58 +09:00
syuilo
cc27c1486d Update CHANGELOG.md 2023-04-17 11:01:01 +09:00
Acid Chicken (硫酸鶏)
d2d17847dc ci: fix story impl files were ignored 2023-04-16 11:00:07 +00:00
syuilo
fa60f54bc5 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-04-16 18:49:32 +09:00
Nanashia
0ddc79bb91 fix(backend): アバターとバナーがリセットできない (#10643)
* fix(backend): avatar and banner couldn't be reset

* Update CHANGELOG.md
2023-04-16 15:23:49 +09:00
syuilo
9ad250bbb8 enhance(frontend): improve MkPostForm behaviour 2023-04-16 07:59:23 +09:00
tamaina
d2aba9b693 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-04-15 16:18:11 +00:00
tamaina
6c5b5f59dd update CHANGELOG.md 2023-04-15 16:17:57 +00:00
Nanashia
973e70bacc chore: Use node@18.16.0 on DevContainer (#10642) 2023-04-16 01:00:35 +09:00
tamaina
15761a0fa8 enhance(client): 1枚だけのメディアリストの画像のアスペクト比を画像に応じて縦長にする (#10452)
* ✌️

* fix

* ✌️

* 422px上限

* 334

* min-height: 130px

* 64px

* fix

* wip

* ✌️

* fix

* max-height: none

* MkImgWithBlurHashでratioを計算する

* wip

* fix

* fix?

* Revert "fix?"

This reverts commit e39d832dd1.

* Revert "fix"

This reverts commit 15be36ba55.

* Revert "wip"

This reverts commit af7d86f69d.

* fix

* Revert "Revert "wip""

This reverts commit bb0036ae22.

* Revert "Revert "fix""

This reverts commit c1d94a45c5.

* Revert "Revert "fix?""

This reverts commit 9cb4fbfd96.

* fix

* use clamp

* readable

* add 1:1, 3:4

* moveComment

* 3:4 → 2:3

* fix

* default

* fallback

* Revert "fallback"

This reverts commit 741717dd49.

* Fix?(server): Content-Dispositionのパースでエラーが発生した場合にもダウンロードが完了するように
#10626
2023-04-15 21:35:19 +09:00
tamaina
38fdc73d01 Fix?(server): Content-Dispositionのパースでエラーが発生した場合にもダウンロードが完了するように
#10626
2023-04-15 11:19:00 +00:00
かっこかり
bcbf06ac8c feat(client): データセーバーモードの追加 (#10478)
* change nsfw settings

* Update CHANGELOG.md

* (fix) eliminate warning message when manually hide

* Apply suggestions from code review

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

* (change) translation key

* revert nsfw settings (partial)

* (add) data saver setting

* Integrate MkMediaBlurhash and MkImgWithBlurhash

* Update CHANGELOG.md

* 🎨

* リモートのファイルでsizeが0の場合は表示しない, refを作らない

* fix

* かっこ

---------

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-04-15 15:29:57 +09:00
syuilo
98383b2aa9 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-04-15 11:25:01 +09:00
Kohei Ota (inductor)
5a8748b2b0 Update node version (#10639) 2023-04-15 10:20:39 +09:00
syuilo
69adbdef15 Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-04-14 19:35:16 +09:00
syuilo
da0c295114 Update about-misskey.vue 2023-04-14 19:35:11 +09:00
Kisaragi
83d0f819be refactor(backend): validateNoteの引数の型を強くし、anyを除去 (#10325)
* refactor(backend): validateNoteの引数の型を推論する

* fix(backend): アサーションの内容から推論してエラーの内容を期待されるであろう式へと変更する

* refactor

Co-authored-by: Acid-Chicken <root@acid-chicken.com>

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
Co-authored-by: Acid-Chicken <root@acid-chicken.com>
2023-04-14 16:27:55 +09:00
Acid Chicken (硫酸鶏)
c47a0f78ff fix(client): cat ears are clipped in MkReactionsViewer (#10445)
* fix: cat ears are clipped in MkReactionsViewer

* fix: missing padding

* fix border

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-04-14 16:00:41 +09:00
tamaina
7d3b7986e5 update CHANGELOG.md 2023-04-14 05:57:02 +00:00
nenohi
9469b26eb2 カスタム絵文字の検索を絵文字ピッカー使用できるように (#10335)
* fix( #10013)

* add changelog

* also in about.emojis.vue

* fix changelog

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-04-14 14:49:41 +09:00
tamaina
168fe0e376 fix(server): Force the extention of exported file (#10630)
* fix(server): Force the extention of exported file

* update changelog.md
2023-04-14 14:35:38 +09:00
tamaina
14f30afd3c fix check_connect.js 2023-04-14 05:14:00 +00:00
syuilo
a67439981b fix types 2023-04-14 13:50:05 +09:00
syuilo
5f67ca434d update ioredis 5.x 2023-04-14 10:09:03 +09:00
Nanashia
21dfce2cbb test(backend): catching up with #10516 (#10624) 2023-04-14 01:10:36 +09:00
Acid Chicken (硫酸鶏)
47c7b4b9cc fix(#10609): remove isChromatic on real build (#10613)
* perf: remove isChromatic on real build

* revert: Revert #10475 in MkTime

This reverts commit 7d11cf8ec9.

* @rollup/plugin-replace as dependencies

* fix pnpm-lock,yaml

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-04-13 23:23:11 +09:00
tamaina
55c10d0d88 fix(client): fix narrow style of MkPostForm 2023-04-13 11:27:21 +00:00
tamaina
93dcd1c98e fix DriveService.ts 2023-04-13 11:27:05 +00:00
CGsama
2423fb8d38 fix: proper expire remote user drivefile over limits at adding time (#9426)
* delete remote user drivefile over limits at adding

* refactor

* delete → expire

* speed up by batch find

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-04-13 18:48:38 +09:00
KokiSakano
463446795d refactor: init.ts周りのeslintエラーと型の修正 (#10157)
* refactor/miLocalStorageのメソッドに戻り値追加

* refactor/miLocalStorageのキーとしてdebugがconfig.tsに存在するので追加

* fix/JSON.parseにnullは入らないのでnullの時は分岐させてnullにする

* refactor/修正したファイルの型調整+記法の統一

* fix/型のためにlangがnullの時はhtmlの言語の設定をしない

* refactor/catchで何もしないと警告が出るので修正

* refactor/細かい点の修正

* refactor/変数の二重定義になっていた二重定義になっていたので修正

* refactor/importの整理(通常のimportは最初に処理されるので影響はない想定)

* fix/vueファイルに型を与えてインポート時の型エラーを防ぐ

* refactor/開発環境のみで利用するので,eslintの設定を変更する

* fix/vueの定義を最小限にする

* fallback language to 'en-US'

* remove accounts migration

* fix:vueの型定義ファイルを消す

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-04-13 18:47:49 +09:00
happo31
dffefdad95 fix: #9998 MkNote.vue, MkNoteDetailed.vue で、特定のMFMによってフッターのボタンが押せなくなる (#9999)
* fix(client): add `overflow: clip;`

* fix(client): add `overflow: clip;`

* Revert "fix(client): add `overflow: clip;`"

This reverts commit c43226afde.

Revert "fix(client): add `overflow: clip;`"

This reverts commit c722515105.

* feat(client): add z-index to .footer
2023-04-13 15:43:10 +09:00
syuilo
e014c91899 enhance(frontend): ユーザーメニューからユーザーメモを編集できるように 2023-04-13 13:50:17 +09:00
syuilo
5cac1515fd fix(backend): user.memoはdetailがtrueな時だけに 2023-04-13 13:34:54 +09:00
syuilo
97abfd48ce refactor(backend): tweak repository name 2023-04-13 13:31:54 +09:00
Ebise Lutica
605f149235 feat: 自分用メモ機能 (#10516)
* 自分用メモを作成する機能

* 不要なCSSを削除

* メモ: デザイン調整

* デザイン崩れを修正

* fix: メモ機能のe2eテストで見つかった不具合を修正

* デザイン調整

* fix(frontend): 自分用メモtextareaにline-heightが適用されない問題を修正
2023-04-13 13:17:32 +09:00
tamaina
7d11cf8ec9 Revert #10475 in MkTime 2023-04-13 03:38:43 +00:00
Acid Chicken (硫酸鶏)
9bb6c536c0 test(#10336): add components/Mk[A-B].* stories (#10475)
* chore(#10336): register snippets

* test(#10336): add `components/Mk[A-B].*` stories

* build: desynced lockfile

* ci(#10336): preload assets

* ci(#10336): use pull_request

* build: update lockfile

* fix: reactivity transform

* chore: track upstream changes

* refactor: avoid temporary previous tapping declarations

* revert: avoid temporary previous tapping declarations

This reverts commit e649b1b1e6.

* test: flaky snapshots

* style: import
2023-04-13 12:20:39 +09:00
syuilo
2a7ba37996 [ci skip] improve readability 2023-04-13 09:09:29 +09:00
syuilo
3f57119aea [ci skip] remove outdated comment 2023-04-13 09:02:41 +09:00
syuilo
ddb1ab7fae 13.11.3 2023-04-13 08:54:47 +09:00
syuilo
8913e561db New Crowdin updates (#10585)
* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (German)

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

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

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (German)

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

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

* New translations ja-JP.yml (Chinese Simplified)
2023-04-13 08:53:29 +09:00
syuilo
dcbaca4260 fix(backend): チャンネルのピン留めされたノートの順番が正しくない問題を修正
Fix #10541
2023-04-13 08:52:30 +09:00
syuilo
6839441ac6 🎨 2023-04-13 08:46:10 +09:00
syuilo
62b6c4d09b Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop 2023-04-13 08:43:15 +09:00
syuilo
1a7e5fb865 Update about-misskey.vue 2023-04-13 08:43:06 +09:00
syuilo
78a2feb24c Update CHANGELOG.md 2023-04-13 08:34:25 +09:00
futchitwo
04511ac141 fix(server): アンテナとロールTLのuntil/sinceプロパティが動くように (#10605)
* fix(server): アンテナとロールTLのuntil/sinceプロパティが動くように

* fix
2023-04-13 08:33:36 +09:00
tamaina
4c0ef07f6f fix 2023-04-12 12:34:34 +00:00
tamaina
3ff5a5ae29 fix type in CustomEmojiService 2 2023-04-12 12:32:27 +00:00
tamaina
6ea057f8f8 fix type in CustomEmojiService 2023-04-12 12:09:28 +00:00
hutchisr
b7d056fb22 Use unique identifier for each follow request (#10600)
Co-authored-by: anemone <anemoneya@icloud.com>
2023-04-12 20:22:50 +09:00
syuilo
e3aeab8122 fix type 2023-04-12 17:02:54 +09:00
syuilo
72031e49fc Update CustomEmojiService.ts 2023-04-12 16:10:17 +09:00
syuilo
d06d1e8682 fix(backend): カスタム絵文字でリアクションできないことがある問題を修正 2023-04-12 16:07:58 +09:00
Nanashia
5c3a4a8224 test(backend): Add tests for users (#10546)
Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-04-12 13:20:16 +09:00
kakkokari-gtyih
49749b46c4 feat(server): Misskey Webでユーザーフレンドリーなエラーページを出す (#10590)
* (add) user-friendly error page

* Update CHANGELOG.md

* (add) cache-control header

* Add ClientLoggerService

* Log params and query

* remove error stack on client

* fix pug

* 文面を調整

* :art]

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-04-12 12:52:14 +09:00
syuilo
5d56799070 feat: role timeline
Resolve #10581
2023-04-12 11:40:08 +09:00
tamaina
81d2c5a4a7 enhance: カスタム絵文字関連の変更 (#9794)
* PackedNoteなどのemojisはプロキシしていないURLを返すように

* MFMでx3/x4もしくはscale.x/yが2.5以上に指定されていた場合にはオリジナル品質の絵文字を使用する

* update CHANGELOG.md

* fix changelog

* ??

* wip

* fix

* merge

* Update packages/frontend/src/scripts/media-proxy.ts

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

* merge

* calc scale

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-04-12 10:58:56 +09:00
tamaina
0db88a5a3b refactor: サウンド関連の設定をpizzaxに移行 (#8105)
* enhane: unison-reloadに指定したパスに移動できるように

* null

* null

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

* null

* await?

* rename

* rename

* Update read.ts

* merge

* get-note-summary

* fix

* swパッケージに

* add missing packages

* fix getNoteSummary

* add webpack-cli

* ✌️

* remove plugins

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

* fix notification.vue

* remove a blank line

* disconnect intersection observer

* disconnect2

* fix notification.vue

* remove a blank line

* disconnect intersection observer

* disconnect2

* fix

* ✌️

* clean up config

* typesを戻した

* backend/src/web/index.ts

* notification-badges

* add scripts

* change create-notification.ts

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

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

* disconnect

* oops

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

* truncate notification

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

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

* clean up

* clean up

* refactor

* キャッシュ対策

* Truncate push notification message

* fix

* wip

* clean up

* migration

* migration

* comment

* move soundConfigStore

* ✌️

* clean up

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

* components/drive-file-thumbnail.vue

* components/drive-select-dialog.vue

* components/drive-window.vue

* merge

* fix

* remove reversi setting

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

* return createEmptyNotification()

* fix

* fix

* i18n.ts

* update

* ✌️

* remove ts-loader

* fix

* fix

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

* pollEnded

* pollEnded

* URLをsw.jsに戻す

* clean up

* clean up

* update sounds.vue

* update

* fix type

* ✌️

* ;v;

---------

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-04-12 10:39:57 +09:00
tamaina
f9720e0e6e update CHANGELOG.md 2023-04-12 01:32:25 +00:00
syuilo
77f91d67b4 perf(backend): ノート作成時のアンテナ追加パフォーマンスを改善 2023-04-12 10:07:14 +09:00
Namekuji
da83322200 feat: queueing bulk follow/unfollow and block/unblock (#10544)
* wrap follow/unfollow and block/unblock as job queue

* create import job to follow in each iteration

* make relationship jobs concurrent

* replace to job queue if called repeatedly

* use addBulk to import

* omit stream when importing

* fix job caller

* use ThinUser instead of User to reduce redis memory consumption

* createImportFollowingToDbJobの呼び出し方を変える, 型補強

* Force ThinUser

* オブジェクト操作のみのメソッド名はgenerate...Data

* Force ThinUser in generateRelationshipJobData

* silent bulk unfollow at admin api endpoint

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-04-12 09:13:58 +09:00
futchitwo
b463490d9f Update CHANGELOG.md (#10591) 2023-04-12 02:08:41 +09:00
okayurisotto
5002effd65 Refactor sw (#10579)
* refactor(sw): remove dead code

* refactor(sw): remove dead code

* refactor(sw): remove dead code

* refactor(sw): remove dead code

* refactor(sw): remove dead code

* refactor(sw): remove dead code

* refactor(sw): 冗長な部分を変更

* refactor(sw): 使われていない煩雑な機能を削除

* refactor(sw): remove dead code

* refactor(sw): URL文字列の作成に`URL`を使うように

* refactor(sw): 型アサーションの削除とそれに伴い露呈したエラーへの対処

* refactor(sw): `append` -> `set` in `URLSearchParams`

* refactor(sw): `any`の削除とそれに伴い露呈したエラーへの対処

* refactor(sw): 型アサーションの削除とそれに伴い露呈したエラーへの対処

対処と言っても`throw`するだけ。いままでもこの状況ではエラーが投げられていたはずなので、この対処により新たな問題が起きることはないはず。

* refactor(sw): i18n loading

* refactor(sw): 型推論がうまくできる書き方に変更

`codes`が`(string | undefined)[]`から`string[]`になった

* refactor(sw): クエリ文字列の作成に`URLSearchParams`を使うように

* refactor(sw): `findClient`

* refactor(sw): `openClient`における`any`や`as`の書き換え

* refactor(sw): `openPost`における`any`の書き換え

* refactor(sw): `let` -> `const`

* refactor(sw): `any` -> `unknown`

* cleanup(sw): import

* cleanup(sw)

* cleanup(sw): `?.`

* cleanup(sw/.eslintrc.js)

* refactor(sw): `@typescript-eslint/explicit-function-return-type`

* refactor(sw): `@typescript-eslint/no-unused-vars`

* refactor(sw): どうしようもないところに`eslint-disable-next-line`を

* refactor(sw): `import/no-default-export`

* update operations.ts

* throw new Error

---------

Co-authored-by: tamaina <tamaina@hotmail.co.jp>
2023-04-12 01:07:24 +09:00
1049 changed files with 39586 additions and 23206 deletions

View File

@@ -95,15 +95,15 @@ redis:
# #prefix: example-prefix
# #db: 1
# ┌─────────────────────────────
#───┘ Elasticsearch configuration └─────────────────────────────
# ┌───────────────────────────┐
#───┘ MeiliSearch configuration └─────────────────────────────
#elasticsearch:
# host: localhost
# port: 9200
# ssl: false
# user:
# pass:
#meilisearch:
# host: meilisearch
# port: 7700
# apiKey: ''
# ssl: true
# index: ''
# ┌───────────────┐
#───┘ ID generation └───────────────────────────────────────────

View File

@@ -95,15 +95,15 @@ redis:
# #prefix: example-prefix
# #db: 1
# ┌─────────────────────────────
#───┘ Elasticsearch configuration └─────────────────────────────
# ┌───────────────────────────┐
#───┘ MeiliSearch configuration └─────────────────────────────
#elasticsearch:
#meilisearch:
# host: localhost
# port: 9200
# ssl: false
# user:
# pass:
# port: 7700
# apiKey: ''
# ssl: true
# index: ''
# ┌───────────────┐
#───┘ ID generation └───────────────────────────────────────────
@@ -133,16 +133,20 @@ id: 'aid'
#clusterLimit: 1
# Job concurrency per worker
# deliverJobConcurrency: 128
# inboxJobConcurrency: 16
#deliverJobConcurrency: 128
#inboxJobConcurrency: 16
#relashionshipJobConcurrency: 16
# What's relashionshipJob?:
# Follow, unfollow, block and unblock(ings) while following-imports, etc. or account migrations.
# Job rate limiter
# deliverJobPerSec: 128
# inboxJobPerSec: 16
#deliverJobPerSec: 128
#inboxJobPerSec: 16
#relashionshipJobPerSec: 64
# Job attempts
# deliverJobMaxAttempts: 12
# inboxJobMaxAttempts: 8
#deliverJobMaxAttempts: 12
#inboxJobMaxAttempts: 8
# IP address family used for outgoing request (ipv4, ipv6 or dual)
#outgoingAddressFamily: ipv4

View File

@@ -4,7 +4,10 @@
"service": "app",
"workspaceFolder": "/workspace",
"features": {
"ghcr.io/devcontainers-contrib/features/pnpm:2": {}
"ghcr.io/devcontainers-contrib/features/pnpm:2": {},
"ghcr.io/devcontainers/features/node:1": {
"version": "20.3.1"
}
},
"forwardPorts": [3000],
"postCreateCommand": "sudo chmod 755 .devcontainer/init.sh && .devcontainer/init.sh",

View File

@@ -95,15 +95,15 @@ redis:
# #prefix: example-prefix
# #db: 1
# ┌─────────────────────────────
#───┘ Elasticsearch configuration └─────────────────────────────
# ┌───────────────────────────┐
#───┘ MeiliSearch configuration └─────────────────────────────
#elasticsearch:
# host: localhost
# port: 9200
# ssl: false
# user:
# pass:
#meilisearch:
# host: meilisearch
# port: 7700
# apiKey: ''
# ssl: true
# index: ''
# ┌───────────────┐
#───┘ ID generation └───────────────────────────────────────────

View File

@@ -2,7 +2,7 @@ version: '3.8'
services:
app:
build:
build:
context: .
dockerfile: Dockerfile

View File

@@ -8,7 +8,6 @@ build/
built/
db/
docker-compose.yml
elasticsearch/
node_modules/
packages/*/node_modules
redis/

View File

@@ -6,6 +6,10 @@ indent_size = 2
charset = utf-8
insert_final_newline = true
end_of_line = lf
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
[*.{yml,yaml}]
indent_style = space

View File

@@ -37,7 +37,24 @@ Please include errors from the developer console and/or server log files if you
## 📌 Environment
<!-- Tell us where on the platform it happens -->
<!-- DO NOT WRITE "latest". Please provide the specific version. -->
Misskey version:
Your OS:
Your browser:
### 💻 Frontend
* Model and OS of the device(s):
<!-- Example: MacBook Pro (14inch, 2021), macOS Ventura 13.4 -->
* Browser:
<!-- Example: Chrome 113.0.5672.126 -->
* Server URL:
<!-- Example: misskey.io -->
* Misskey:
13.x.x
### 🛰 Backend (for server admin)
<!-- If you are using a managed service, put that after the version. -->
* Installation Method or Hosting Service: <!-- Example: docker compose, k8s/docker, systemd, "Misskey install shell script", development environment -->
* Misskey: 13.x.x
* Node: 20.x.x
* PostgreSQL: 15.x.x
* Redis: 7.x.x
* OS and Architecture: <!-- Example: Ubuntu 22.04.2 LTS aarch64 -->

25
.github/labeler.yml vendored
View File

@@ -1,12 +1,21 @@
'Server':
'packages/backend':
- packages/backend/**/*
'🖥Client':
- packages/frontend/**/*
'🧪Test':
- cypress/**/*
'packages/backend:test':
- packages/backend/test/**/*
'‼️ wrong locales':
- any: ['locales/*.yml', '!locales/ja-JP.yml']
'packages/frontend':
- packages/frontend/**/*
'packages/frontend:test':
- cypress/**/*
'packages/sw':
- packages/sw/**/*
'packages/misskey-js':
- packages/misskey-js/**/*
'packages/misskey-js:test':
- packages/misskey-js/test/**/*
- packages/misskey-js/test-d/**/*

View File

@@ -19,5 +19,6 @@ https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md
## 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

View File

@@ -6,5 +6,4 @@ groups:
- syuilo
- acid-chicken
- EbiseLutica
- rinsuki
- tamaina

View File

@@ -16,7 +16,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v3.6.0
with:
node-version: 18.x
node-version-file: '.node-version'
cache: 'pnpm'
- name: Install dependencies

View File

@@ -17,11 +17,11 @@ jobs:
submodules: true
- uses: pnpm/action-setup@v2
with:
version: 7
version: 8
run_install: false
- uses: actions/setup-node@v3.6.0
with:
node-version: 18.x
node-version-file: '.node-version'
cache: 'pnpm'
- run: corepack enable
- run: pnpm i --frozen-lockfile
@@ -48,7 +48,7 @@ jobs:
run_install: false
- uses: actions/setup-node@v3.6.0
with:
node-version: 18.x
node-version-file: '.node-version'
cache: 'pnpm'
- run: corepack enable
- run: pnpm i --frozen-lockfile
@@ -74,7 +74,7 @@ jobs:
run_install: false
- uses: actions/setup-node@v3.6.0
with:
node-version: 18.x
node-version-file: '.node-version'
cache: 'pnpm'
- run: corepack enable
- run: pnpm i --frozen-lockfile

View File

@@ -2,8 +2,10 @@ name: Storybook
on:
push:
branches-ignore:
- l10n_develop
branches:
- master
- develop
pull_request_target:
jobs:
build:
@@ -14,18 +16,31 @@ jobs:
steps:
- uses: actions/checkout@v3.3.0
if: github.event_name != 'pull_request_target'
with:
fetch-depth: 0
submodules: true
- uses: actions/checkout@v3.3.0
if: github.event_name == 'pull_request_target'
with:
fetch-depth: 0
submodules: true
ref: "refs/pull/${{ github.event.number }}/merge"
- name: Checkout actual HEAD
if: github.event_name == 'pull_request_target'
id: rev
run: |
echo "base=$(git rev-list --parents -n1 HEAD | cut -d" " -f2)" >> $GITHUB_OUTPUT
git checkout $(git rev-list --parents -n1 HEAD | cut -d" " -f3)
- name: Install pnpm
uses: pnpm/action-setup@v2
with:
version: 7
version: 8
run_install: false
- name: Use Node.js 18.x
- name: Use Node.js 20.x
uses: actions/setup-node@v3.6.0
with:
node-version: 18.x
node-version-file: '.node-version'
cache: 'pnpm'
- run: corepack enable
- run: pnpm i --frozen-lockfile
@@ -36,13 +51,13 @@ jobs:
- name: Build storybook
run: pnpm --filter frontend build-storybook
- name: Publish to Chromatic
if: github.ref == 'refs/heads/master'
if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/master'
run: pnpm --filter frontend chromatic --exit-once-uploaded -d storybook-static
env:
CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
- name: Publish to Chromatic
if: github.ref != 'refs/heads/master'
id: chromatic
if: github.event_name != 'pull_request_target' && github.ref != 'refs/heads/master'
id: chromatic_push
run: |
DIFF="${{ github.event.before }} HEAD"
if [ "$DIFF" = "0000000000000000000000000000000000000000 HEAD" ]; then
@@ -52,12 +67,35 @@ jobs:
if [ "$CHROMATIC_PARAMETER" = " --skip" ]; then
echo "skip=true" >> $GITHUB_OUTPUT
fi
pnpm --filter frontend chromatic --exit-once-uploaded -d storybook-static $(echo "$CHROMATIC_PARAMETER")
if pnpm --filter frontend chromatic -d storybook-static $(echo "$CHROMATIC_PARAMETER"); then
echo "success=true" >> $GITHUB_OUTPUT
else
echo "success=false" >> $GITHUB_OUTPUT
fi
env:
CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
- name: Notify that Chromatic will skip testing
- name: Publish to Chromatic
if: github.event_name == 'pull_request_target'
id: chromatic_pull_request
run: |
DIFF="${{ steps.rev.outputs.base }} HEAD"
if [ "$DIFF" = "0000000000000000000000000000000000000000 HEAD" ]; then
DIFF="HEAD"
fi
CHROMATIC_PARAMETER="$(node packages/frontend/.storybook/changes.js $(git diff-tree --no-commit-id --name-only -r $(echo "$DIFF") | xargs))"
if [ "$CHROMATIC_PARAMETER" = " --skip" ]; then
echo "skip=true" >> $GITHUB_OUTPUT
fi
BRANCH="${{ github.event.pull_request.head.user.login }}:${{ github.event.pull_request.head.ref }}"
if [ "$BRANCH" = "misskey-dev:${{ github.event.pull_request.head.ref }}" ]; then
BRANCH="${{ github.event.pull_request.head.ref }}"
fi
pnpm --filter frontend chromatic --exit-once-uploaded -d storybook-static --branch-name $BRANCH $(echo "$CHROMATIC_PARAMETER")
env:
CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
- name: Notify that Chromatic detects changes
uses: actions/github-script@v6.4.0
if: github.ref != 'refs/heads/master' && github.ref != 'refs/heads/develop' && steps.chromatic.outputs.skip == 'true'
if: github.event_name != 'pull_request_target' && steps.chromatic_push.outputs.success == 'false'
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
@@ -65,7 +103,7 @@ jobs:
owner: context.repo.owner,
repo: context.repo.repo,
commit_sha: context.sha,
body: 'Chromatic will skip testing but you may still have to [review the changes on Chromatic](https://www.chromatic.com/pullrequests?appId=6428f7d7b962f0b79f97d6e4).'
body: 'Chromatic detects changes. Please [review the changes on Chromatic](https://www.chromatic.com/builds?appId=6428f7d7b962f0b79f97d6e4).'
})
- name: Upload Artifacts
uses: actions/upload-artifact@v3

View File

@@ -13,7 +13,7 @@ jobs:
strategy:
matrix:
node-version: [18.x]
node-version: [20.x]
services:
postgres:
@@ -35,7 +35,7 @@ jobs:
- name: Install pnpm
uses: pnpm/action-setup@v2
with:
version: 7
version: 8
run_install: false
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3.6.0

View File

@@ -13,7 +13,7 @@ jobs:
strategy:
matrix:
node-version: [18.x]
node-version: [20.x]
steps:
- uses: actions/checkout@v3.3.0
@@ -22,7 +22,7 @@ jobs:
- name: Install pnpm
uses: pnpm/action-setup@v2
with:
version: 7
version: 8
run_install: false
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3.6.0
@@ -51,7 +51,7 @@ jobs:
strategy:
fail-fast: false
matrix:
node-version: [18.x]
node-version: [20.x]
browser: [chrome]
services:
@@ -106,7 +106,7 @@ jobs:
install: false
start: pnpm start:test
wait-on: 'http://localhost:61812'
headless: false
headed: true
browser: ${{ matrix.browser }}
- uses: actions/upload-artifact@v2
if: failure()

View File

@@ -16,7 +16,7 @@ jobs:
strategy:
matrix:
node-version: [18.x]
node-version: [20.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:

42
.github/workflows/test-production.yml vendored Normal file
View File

@@ -0,0 +1,42 @@
name: Test (production install and build)
on:
push:
branches:
- master
- develop
pull_request:
env:
NODE_ENV: production
jobs:
production:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20.x]
steps:
- uses: actions/checkout@v3.3.0
with:
submodules: true
- name: Install pnpm
uses: pnpm/action-setup@v2
with:
version: 8
run_install: false
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3.6.0
with:
node-version: ${{ matrix.node-version }}
cache: 'pnpm'
- run: corepack enable
- run: pnpm i --frozen-lockfile
- name: Check pnpm-lock.yaml
run: git diff --exit-code pnpm-lock.yaml
- name: Copy Configure
run: cp .github/misskey/test.yml .config/default.yml
- name: Build
run: pnpm build

5
.gitignore vendored
View File

@@ -44,7 +44,7 @@ built
/data
/.cache-loader
/db
/elasticsearch
/meili_data
npm-debug.log
*.pem
run.bat
@@ -64,3 +64,6 @@ temp
*.blend3
*.blend4
*.blend5
# VSCode addon
.favorites.json

View File

@@ -1 +1 @@
v18.13.0
20.3.1

View File

@@ -6,5 +6,6 @@
"files.associations": {
"*.test.ts": "typescript"
},
"jest.jestCommandLine": "pnpm run jest",
"jest.autoRun": "off"
}

View File

@@ -12,8 +12,222 @@
-->
## 13.x.x (unreleased)
### General
- identicon生成を無効にしてパフォーマンスを向上させることができるようになりました
- サーバーのマシン情報の公開を無効にしてパフォーマンスを向上させることができるようになりました
### Client
- deck UIのカラムのメニューからアンテナとリストの編集画面を開けるように
- ドライブファイルのメニューで画像をクロップできるように
- 画像を動画と同様に簡単に隠せるように
- オリジナル画像を保持せずにアップロードする場合webpでアップロードされるように(Safari以外)
- 見たことのあるRenoteを省略して表示をオンのときに自分のnoteのrenoteを省略するように
- フォルダーやファイルに対しても開発者モード使用時、IDをコピーできるように
- 引用対象を「もっと見る」で展開した場合、「閉じる」で畳めるように
- プロフィールURLをコピーできるボタンを追加 #11190
- ユーザーのContextMenuに「アンテナに追加」ボタンを追加
- フォローやお気に入り登録をしていないチャンネルを開く時は概要ページを開くように
- 画面ビューワをタップした場合、マウスクリックと同様に画像ビューワを閉じるように
- オフライン時の画面にリロードボタンを追加
- Fix: サーバーメトリクスが90度傾いている
- Fix: 非ログイン時にクレデンシャルが必要なページに行くとエラーが出る問題を修正
- Fix: sparkle内にリンクを入れるとクリック不能になる問題の修正
- Fix: ZenUIでポップアップの表示位置がおかしい問題を修正
- Fix: ページ遷移でスクロール位置が保持されない問題を修正
- Fix: フォルダーのページネーションが機能しない #11180
- Fix: 長い文章を投稿する際、プレビューが画面からはみ出る問題を修正
- Fix: システムフォント設定が正しく反映されない問題を修正
### Server
- JSON.parse の回数を削減することで、ストリーミングのパフォーマンスを向上しました
- nsfwjs のモデルロードを排他することで、重複ロードによってメモリ使用量が増加しないように
- 連合の配送ジョブのパフォーマンスを向上ロック機構の見直し、Redisキャッシュの活用
- 全体的なDBクエリのパフォーマンスを向上
- featuredートのsignedGet回数を減らしました
- リモートサーバーからのNSFW映像のキャッシュだけを無効化できるオプションを追加しました
## 13.13.2
### General
- エラー時や項目が存在しないときなどのアイコン画像をサーバー管理者が設定できるように
- ロールが付与されているユーザーリストを非公開にできるように
- サーバーの負荷が非常に高いため、ユーザー統計表示機能を削除しました
### Client
- Fix: タブがバックグラウンドでもstreamが切断されないように
### Server
- Fix: キャッシュが溜まり続けないように
## 13.13.1
### Client
- Fix: タブがアクティブな間はstreamが切断されないように
### Server
- Fix: api/metaで`TypeError: JSON5.parse is not a function`エラーが発生する問題を修正
## 13.13.0
### General
- カスタム絵文字ごとにそれをリアクションとして使えるロールを設定できるように
- カスタム絵文字ごとに連合するかどうか設定できるように
- カスタム絵文字ごとにセンシティブフラグを設定できるように
- センシティブなカスタム絵文字のリアクションを受け入れない設定が可能に
- タイムラインにフォロイーの行った他人へのリプライを含めるかどうかの設定をアカウントに保存するのをやめるように
- 今後はAPI呼び出し時およびストリーミング接続時に設定するようになります
- リストを公開できるようになりました
### Client
- リアクションの取り消し/変更時に確認ダイアログを出すように
- 開発者モードを追加
- AiScriptを0.13.3に更新
- Deck UIを使用している場合、`/`以外にアクセスした際にZen UIで表示するように
- メインカラムを設置していない場合の問題を解決
- ハッシュタグのノート一覧ページから、そのハッシュタグで投稿するボタンを追加
- アカウント初期設定ウィザードに戻るボタンを追加
- アカウントの初期設定ウィザードにあとでボタンを追加
- サーバーにカスタム絵文字の種類が多い場合のパフォーマンスの改善
- Fix: URLプレビューで情報が取得できなかった際の挙動を修正
- Fix: Safari、Firefoxでの新規登録時、パスワードマネージャーにメールアドレスが登録されていた挙動を修正
- Fix: ロールタイムラインが無効でも投稿が流れてしまう問題の修正
- Fix: ロールタイムラインにて全ての投稿が流れてしまう問題の修正
- Fix: 「アクセストークンの管理」画面でアプリの情報が表示されない問題の修正
- Fix: Firefoxにおける絵文字ピッカーのTabキーフォーカス問題の修正
- Fix: フォローボタンがテーマのカラースキームによって視認性が悪くなる問題を修正
- 新しいプロパティ `fgOnWhite` が追加されました
### Server
- bullをbull-mqにアップグレードし、ジョブキューのパフォーマンスを改善
- ストリーミングのパフォーマンスを改善
- Fix: 無効化されたアンテナにアクセスがあった際に再度有効化するように
- Fix: お知らせの画像URLを空にできない問題を修正
- Fix: i/notificationsのsinceIdが機能しない問題を修正
- Fix: pageのピン留めを解除することができない問題を修正
## 13.12.2
## NOTE
Meilisearchの設定に`index`が必要になりました。値はMisskeyサーバーのホスト名にすることをお勧めします(アルファベット、ハイフン、アンダーバーのみ使用可能)。例: `misskey-io`
過去に作成された`notes`インデックスは、`<index名>---notes`にリネームが必要です。例: `misskey-io---notes`
### General
- 投稿したコンテンツのAIによる学習を軽減するオプションを追加
### Client
- ユーザーを指定してのノート検索が可能に
- アカウント初期設定ウィザードにプライバシー設定を追加
- リテンション率チャートに折れ線グラフを追加
- Fix: ブラーエフェクトを有効にしている状態で高負荷になる問題を修正
- Fix: Pageにおいて画像ブロックに画像を設定できない問題を修正
- Fix: カラーバーがリプライには表示されないのを修正
- Fix: チャンネル内の検索ボックスが挙動不審な問題を修正
- Fix: リテンションチャートのレンダリングを修正
- Fix: リアクションエフェクトのレンダリングの問題を修正
### Server
- センシティブワードの登録にAnd、正規表現が使用できるようになりました。
- Fix: ひとつのMeilisearchサーバーを複数のMisskeyサーバーで使えない問題を修正
## 13.12.1
### Client
- プロフィール画面におけるモデレーションノートの表示を調整
- Fix: 一部ダイアログが表示されない問題を修正
- Fix: MkUserInfoのフォローボタンが変な位置にある問題を修正
### Server
- Fix: リモートサーバーの情報が更新できない問題を修正
- Fix: 13.11を経験しない状態で13.12にアップデートした場合ユーザープロフィール関連の画像が消失する問題を修正
## 13.12.0
### NOTE
- Node.js 18.16.0以上が必要になりました
### General
- アカウントの引っ越し(フォロワー引き継ぎ)に対応
- Meilisearchを全文検索に使用できるようになりました
* 「フォロワーのみ」の投稿は検索結果に表示されません。
- 新規登録前に簡潔なルールをユーザーに表示できる、サーバールール機能を追加
- ユーザーへの自分用メモ機能
* ユーザーに対して、自分だけが見られるメモを追加できるようになりました。
(自分自身に対してもメモを追加できます。)
* ユーザーメニューから追加できます。
デスクトップ表示ではusernameの右側のボタンからも追加可能
- チャンネルに色を設定できるようになりました。各ノートに設定した色のインジケーターが表示されます。
- チャンネルをアーカイブできるようになりました。
* アーカイブすると、チャンネル一覧や検索結果に表示されなくなり、新たな書き込みもできなくなります。
- アンテナのエクスポート・インポートができるようになりました
- ロールタイムラインをロールごとに表示するかどうかの選択できるようになりました。
* デフォルトがオフになるので、ロールタイムラインを表示する場合はオンにしてください。
- ロールに強制的にNSFWを付与するポリシーを追加
* アップロード済みのファイルはNSFWにならない為注意してください。
- モデレーションノートがユーザーのプロフィールページからも閲覧および編集できるようになりました。
- カスタム絵文字のライセンスを複数でセットできるようになりました。
- 管理者が予約ユーザー名を設定できるようになりました。
- Fix: フォローリクエストの通知が残る問題を修正
### Client
- アカウント作成時に初期設定ウィザードを表示するように
- チャンネル内検索ができるように
- チャンネル検索ですべてのチャンネルの取得/表示ができるように
- 通知の表示をカスタマイズできるように
- ドライブのファイル一覧から直接ノートを作成できるように
- ートメニューからRenoteしたユーザーの一覧を見れるように
- コントロールパネルのカスタム絵文字ページおよびaboutのカスタム絵文字の検索インプットで、`:emojiname1::emojiname2:`のように検索して絵文字を検索できるように
* 絵文字ピッカーから入力可能になります
- データセーバーモードを追加
* 画像が全て隠れた状態で表示されるようになります
- 閲覧注意設定された画像は表示した状態でもそれが閲覧注意だと分かる表示をするように
- モデレーターはートに添付された画像上から直接NSFW設定できるように
- 1枚だけのメディアリストの画像のアスペクト比を画像に応じて縦長にするように
- プロフィール設定「追加情報」の項目の削除と並び替えができるように
- 新しい実績を追加
- AiScriptを0.13.2に更新
- Fix: AiScript APIのMk:dialogで何も返していなかったのをNULLを返すように修正
- Fix: 1:1ではない画像のリアクション通知バッジが左や上に寄ってしまっていたのを中央に来るように修正
- Fix: リアクションをホバーした時のユーザーリストで猫耳が切れてしまっていた問題を修正
- Fix: NSFWメディアの上に表示された「もっと見る」ボタンが押しづらい問題を修正
### Server
- channel/searchのqueryが空の場合に全てのチャンネルを返すように変更
- 環境変数MISSKEY_CONFIG_YMLで設定ファイルをdefault.ymlから変更可能に
- Fix: 他のサーバーの情報が取得できないことがある問題を修正
- Fix: エクスポートデータの拡張子がunknownになる問題を修正
- Fix: Content-Dispositionのパースでエラーが発生した場合にダウンロードが完了しない問題を修正
- Fix: API: i/update avatarIdとbannerIdにnullを渡した時、画像がリセットされない問題を修正
- Fix: .wav, .flacが再生できない問題を修正新しくアップロードされたファイルのみ修正が適用されます
- Fix: 凍結されたユーザーが一部APIのレスポンスに含まれる問題を修正
- Fix: メモリの使用量を`used - buffers - cached`ではなく`total - available`で求めるように(環境によって正常に計測できていなかったため)
## 13.11.3
### General
- 指定したロールを持つユーザーのノートのみが流れるロールタイムラインを追加
- Deckのカラムとしても追加可能
- カスタム絵文字関連の改善
* ートなどに含まれるemojispopulateEmojiの結果プロキシされたURLではなくオリジナルのURLを指すように
* MFMでx3/x4もしくはscale.x/yが2.5以上に指定されていた場合にはオリジナル品質の絵文字を使用するように
- カスタム絵文字でリアクションできないことがある問題を修正
### Client
- チャンネルのピン留めされたノートの順番が正しくない問題を修正
### Server
- フォローインポートなどでの大量のフォロー等操作をキューイングするように #10544 @nmkj-io
- Misskey Webでのサーバーサイドエラー画面を改善
- Misskey Webでのサーバーサイドエラーのログが残るように
- ノート作成時のアンテナ追加パフォーマンスを改善
- アンテナとロールTLのuntil/sinceプロパティが動くように
## 13.11.2
### Note
- 13.11.0または13.11.1から13.11.2以降にアップデートする場合、Redisのカスタム絵文字のキャッシュを削除する必要があります(https://github.com/misskey-dev/misskey/issues/10502#issuecomment-1502790755 参照)
### General
- チャンネルの検索用ページの追加
@@ -84,6 +298,8 @@
- 猫耳のアバター内部部分をぼかしでマスク表示してより猫耳っぽく見えるように
- 「UIのアニメーションを減らす」 (`reduceAnimation`) で猫耳を撫でられなくなります
- Add Minimizing ("folding") of windows
- 「データセーバー」モードを追加
- 非NSFWメディアが隠れている際にも「閲覧注意」が出てしまう問題を修正
### Server
- PostgreSQLのレプリケーション対応
@@ -215,6 +431,7 @@
- アンテナでCWも検索対象にするように
- ノートの操作部をホバー時のみ表示するオプションを追加
- サウンドを追加
- enhance(client): MFMのx2, scale, positionが含まれていたらートをたたむように
- サーバーのパフォーマンスを改善
### Bugfixes

View File

@@ -106,7 +106,7 @@ If your language is not listed in Crowdin, please open an issue.
![Crowdin](https://d322cqt584bo4o.cloudfront.net/misskey/localized.svg)
## Development
During development, it is useful to use the
During development, it is useful to use the
```
pnpm dev
@@ -150,7 +150,7 @@ Prepare DB/Redis for testing.
```
docker compose -f packages/backend/test/docker-compose.yml up
```
Alternatively, prepare an empty (data can be erased) DB and edit `.config/test.yml`.
Alternatively, prepare an empty (data can be erased) DB and edit `.config/test.yml`.
Run all test.
```
@@ -165,6 +165,11 @@ pnpm jest -- foo.ts
### e2e tests
TODO
## Environment Variable
- `MISSKEY_CONFIG_YML`: Specify the file path of config.yml instead of default.yml (e.g. `2nd.yml`).
- `MISSKEY_WEBFINGER_USE_HTTP`: If it's set true, WebFinger requests will be http instead of https, useful for testing federation between servers in localhost. NEVER USE IN PRODUCTION.
## Continuous integration
Misskey uses GitHub Actions for executing automated tests.
Configuration files are located in [`/.github/workflows`](/.github/workflows).
@@ -245,7 +250,6 @@ You can override the default story by creating a impl story file (`MyComponent.s
```ts
/* eslint-disable @typescript-eslint/explicit-function-return-type */
/* eslint-disable import/no-duplicates */
import { StoryObj } from '@storybook/vue3';
import MyComponent from './MyComponent.vue';
export const Default = {

View File

@@ -1,6 +1,6 @@
# syntax = docker/dockerfile:1.4
ARG NODE_VERSION=18.13.0-bullseye
ARG NODE_VERSION=20.3.1-bullseye
# build assets & compile TypeScript

View File

@@ -2,9 +2,9 @@
<a href="https://misskey-hub.net">
<img src="./assets/title_float.svg" alt="Misskey logo" style="border-radius:50%" width="400"/>
</a>
**🌎 **[Misskey](https://misskey-hub.net/)** is an open source, decentralized social media platform that's free forever! 🚀**
---
<a href="https://misskey-hub.net/instances.html">
@@ -21,7 +21,7 @@
<a href="https://www.patreon.com/syuilo">
<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>
---
[![codecov](https://codecov.io/gh/misskey-dev/misskey/branch/develop/graph/badge.svg?token=R6IQZ3QJOL)](https://codecov.io/gh/misskey-dev/misskey)

View File

@@ -23,13 +23,13 @@
</rdf:RDF>
</metadata>
<style>
#g8 {
#g8 {
animation-name: floating;
animation-duration: 3s;
animation-iteration-count: infinite;
animation-timing-function: ease-in-out;
}
@keyframes floating {
0% { transform: translate(0, 0px); }
50% { transform: translate(0, -5px); }

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -116,15 +116,15 @@ redis:
# #prefix: example-prefix
# #db: 1
# ┌─────────────────────────────
#───┘ Elasticsearch configuration └─────────────────────────────
# ┌───────────────────────────┐
#───┘ MeiliSearch configuration └─────────────────────────────
#elasticsearch:
#meilisearch:
# host: localhost
# port: 9200
# ssl: false
# user:
# pass:
# port: 7700
# apiKey: ''
# ssl: true
# index: ''
# ┌───────────────┐
#───┘ ID generation └───────────────────────────────────────────

View File

@@ -52,6 +52,11 @@ describe('After setup instance', () => {
cy.intercept('POST', '/api/signup').as('signup');
cy.get('[data-cy-signup]').click();
cy.get('[data-cy-signup-rules-continue]').should('be.disabled');
cy.get('[data-cy-signup-rules-notes-agree] [data-cy-switch-toggle]').click();
cy.get('[data-cy-signup-rules-continue]').should('not.be.disabled');
cy.get('[data-cy-signup-rules-continue]').click();
cy.get('[data-cy-signup-submit]').should('be.disabled');
cy.get('[data-cy-signup-username] input').type('alice');
cy.get('[data-cy-signup-submit]').should('be.disabled');
@@ -71,6 +76,11 @@ describe('After setup instance', () => {
// ユーザー名が重複している場合の挙動確認
cy.get('[data-cy-signup]').click();
cy.get('[data-cy-signup-rules-continue]').should('be.disabled');
cy.get('[data-cy-signup-rules-notes-agree] [data-cy-switch-toggle]').click();
cy.get('[data-cy-signup-rules-continue]').should('not.be.disabled');
cy.get('[data-cy-signup-rules-continue]').click();
cy.get('[data-cy-signup-username] input').type('alice');
cy.get('[data-cy-signup-password] input').type('alice1234');
cy.get('[data-cy-signup-password-retype] input').type('alice1234');
@@ -149,10 +159,59 @@ describe('After user signed in', () => {
});
it('successfully loads', () => {
cy.get('[data-cy-open-post-form]').should('be.visible');
cy.get('[data-cy-user-setup-continue]').should('be.visible');
});
it('account setup wizard', () => {
cy.get('[data-cy-user-setup-continue]').click();
cy.get('[data-cy-user-setup-user-name] input').type('ありす');
cy.get('[data-cy-user-setup-user-description] textarea').type('ほげ');
// TODO: アイコン設定テスト
cy.get('[data-cy-user-setup-continue]').click();
// プライバシー設定
cy.get('[data-cy-user-setup-continue]').click();
// フォローはスキップ
cy.get('[data-cy-user-setup-continue]').click();
// プッシュ通知設定はスキップ
cy.get('[data-cy-user-setup-continue]').click();
cy.get('[data-cy-user-setup-continue]').click();
});
});
describe('After user setup', () => {
beforeEach(() => {
cy.resetState();
// インスタンス初期セットアップ
cy.registerUser('admin', 'pass', true);
// ユーザー作成
cy.registerUser('alice', 'alice1234');
cy.login('alice', 'alice1234');
// アカウント初期設定ウィザード
cy.get('[data-cy-user-setup] [data-cy-modal-window-close]').click();
cy.get('[data-cy-modal-dialog-ok]').click();
});
afterEach(() => {
// テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。
// waitを入れることでそれを防止できる
cy.wait(1000);
});
it('note', () => {
cy.get('[data-cy-open-post-form]').should('be.visible');
cy.get('[data-cy-open-post-form]').click();
cy.get('[data-cy-post-form-text]').type('Hello, Misskey!');
cy.get('[data-cy-open-post-form-submit]').click();

View File

@@ -10,6 +10,10 @@ describe('After user signed in', () => {
cy.registerUser('alice', 'alice1234');
cy.login('alice', 'alice1234');
// アカウント初期設定ウィザード
cy.get('[data-cy-user-setup] [data-cy-modal-window-close]').click();
cy.get('[data-cy-modal-dialog-ok]').click();
});
afterEach(() => {
@@ -19,26 +23,26 @@ describe('After user signed in', () => {
});
it('widget edit toggle is visible', () => {
cy.get('.mk-widget-edit').should('be.visible');
cy.get('[data-cy-widget-edit]').should('be.visible');
});
it('widget select should be visible in edit mode', () => {
cy.get('.mk-widget-edit').click();
cy.get('.mk-widget-select').should('be.visible');
cy.get('[data-cy-widget-edit]').click();
cy.get('[data-cy-widget-select]').should('be.visible');
});
it('first widget should be removed', () => {
cy.get('.mk-widget-edit').click();
cy.get('[data-cy-widget-edit]').click();
cy.get('[data-cy-customize-container]:first-child [data-cy-customize-container-remove]._button').click();
cy.get('[data-cy-customize-container]').should('have.length', 2);
});
function buildWidgetTest(widgetName) {
it(`${widgetName} widget should get added`, () => {
cy.get('.mk-widget-edit').click();
cy.get('.mk-widget-select select').select(widgetName, { force: true });
cy.get('[data-cy-widget-edit]').click();
cy.get('[data-cy-widget-select] select').select(widgetName, { force: true });
cy.get('[data-cy-bg]._modalBg[data-cy-transparent]').click({ multiple: true, force: true });
cy.get('.mk-widget-add').click({ force: true });
cy.get('[data-cy-widget-add]').click({ force: true });
cy.get(`[data-cy-mkw-${widgetName}]`).should('exist');
});
}

View File

@@ -21,6 +21,8 @@ import './commands'
Cypress.on('uncaught:exception', (err, runnable) => {
if ([
'The source image cannot be decoded',
// Chrome
'ResizeObserver loop limit exceeded',

View File

@@ -7,7 +7,7 @@ services:
links:
- db
- redis
# - es
# - meilisearch
depends_on:
db:
condition: service_healthy
@@ -48,16 +48,18 @@ services:
interval: 5s
retries: 20
# es:
# meilisearch:
# restart: always
# image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.4.2
# image: getmeili/meilisearch:v1.1.1
# environment:
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
# - "TAKE_FILE_OWNERSHIP=111"
# - MEILI_NO_ANALYTICS=true
# - MEILI_ENV=production
# env_file:
# - .config/meilisearch.env
# networks:
# - internal_network
# volumes:
# - ./elasticsearch:/usr/share/elasticsearch/data
# - ./meili_data:/meili_data
networks:
internal_network:

View File

@@ -1,25 +0,0 @@
DONATORS
========
The list of people who have sent donation for Misskey.
(In random order, honorific titles are omitted.)
* らふぁ
* 俺様
* なぎうり
* スルメ https://surume.tk/
*
* 音船 https://otofune.me/
* aqz https://misskey.xyz/aqz
* kotodu "虚無創作中"
* Maya Minatsuki
* Knzk https://knzk.me/@Knzk
* ねじりわさび https://knzk.me/@y
* NCLS https://knzk.me/@imncls]
* こじま @skoji@sandbox.skoji.jp
:heart: Thanks for donating, guys!
---
If your name is missing, please contact us!

View File

@@ -2,14 +2,14 @@
* Gulp tasks
*/
const fs = require('fs');
const gulp = require('gulp');
const replace = require('gulp-replace');
const terser = require('gulp-terser');
const cssnano = require('gulp-cssnano');
import * as fs from 'node:fs';
import gulp from 'gulp';
import replace from 'gulp-replace';
import terser from 'gulp-terser';
import cssnano from 'gulp-cssnano';
const locales = require('./locales');
const meta = require('./package.json');
import locales from './locales/index.js';
import meta from './package.json' assert { type: "json" };
gulp.task('copy:backend:views', () =>
gulp.src('./packages/backend/src/server/web/views/**/*').pipe(gulp.dest('./packages/backend/built/server/web/views'))
@@ -45,7 +45,7 @@ gulp.task('build:backend:script', () => {
});
gulp.task('build:backend:style', () => {
return gulp.src(['./packages/backend/src/server/web/style.css', './packages/backend/src/server/web/bios.css', './packages/backend/src/server/web/cli.css'])
return gulp.src(['./packages/backend/src/server/web/style.css', './packages/backend/src/server/web/bios.css', './packages/backend/src/server/web/cli.css', './packages/backend/src/server/web/error.css'])
.pipe(cssnano({
zindex: false
}))

View File

@@ -2,6 +2,7 @@
_lang_: "العربية"
headlineMisskey: "شبكة مرتبطة بالملاحظات"
introMisskey: "اهلا بك! ميسكي هو منصة تدوين مصغر لا مركزية ومفتوحة المصدر.\nيمكنك مشاركة \"ملاحظات\" عن ما يجري حولك، وإخبار الجميع عن نفسك 📡\nتسمح لك \"الانفعالات\" بتعبير عن شعورك حول ملاحظات الآخرين 👍\nاكتشف عالمًا جديدًا 🚀"
poweredByMisskeyDescription: "{name} هو إحدى الخِدمات التي تستخدم المنصة مفتوحة المصدر <b>ميسكي</b> (يشار إليه كمثيل ميسكي)"
monthAndDay: "{day}/{month}"
search: "البحث"
notifications: "الإشعارات"
@@ -19,6 +20,7 @@ noNotes: "لم يُعثر على أية ملاحظات"
noNotifications: "ليس هناك أية اشعارات"
instance: "مثيل الخادم"
settings: "الاعدادات"
notificationSettings: "إعدادات الإشعارات"
basicSettings: "الاعدادات الأساسية"
otherSettings: "إعدادات أخرى"
openInWindow: "افتح في نافذة جديدة"
@@ -48,7 +50,10 @@ deleteAndEdit: "إزالة وإعادة الصياغة"
deleteAndEditConfirm: "أمتأكد من حذف الملاحظة؟ ستفقد كل مشاركاتها، والتفاعلات، والردود عليها."
addToList: "أضفه إلى قائمة"
sendMessage: "أرسل رسالة"
copyRSS: "انسخ رابط RSS"
copyUsername: "انسخ اسم المستخدم"
copyUserId: "انسخ معرف المستخدم"
copyNoteId: "انسخ معرف الملاحظة"
searchUser: "ابحث عن مستخدمين"
reply: "رد"
loadMore: "عرض المزيد"
@@ -101,6 +106,8 @@ renoted: "أُعيد نشره"
cantRenote: "لا يمكن إعادة نشر الملاحظة"
cantReRenote: "لا يمكنك إعادة نشر ملاحظة معاد نشرها"
quote: "اقتبس"
inChannelRenote: "إعادة نشر في قناة"
inChannelQuote: "اقتباس في قناة"
pinnedNote: "ملاحظة مدبسة"
pinned: "دبّسها على الصفحة الشخصية"
you: "أنت"
@@ -118,6 +125,8 @@ unmarkAsSensitive: "ألغ تعيينه كمحتوى حساس"
enterFileName: "ادخل اسم الملف"
mute: "اكتم"
unmute: "إلغاء الكتم"
renoteMute: "اكتم إعادة النشر"
renoteUnmute: "ارفع الكتم عن إعادة النشر"
block: "احجب"
unblock: "إلغاء الحجب"
suspend: "علِق"
@@ -127,6 +136,7 @@ unblockConfirm: "أمتأكد من إلغاء حجب هذا الحساب؟"
suspendConfirm: "أمتأكد من تعليق الحساب؟"
unsuspendConfirm: "أمتأكد من إلغاء تعليق؟"
selectList: "اختر قائمة"
selectChannel: "اختر قناة"
selectAntenna: "اختر هوائيًا"
selectWidget: "اختر ودجة"
editWidgets: "عدّل الودجات"
@@ -139,6 +149,7 @@ emojiUrl: "رابط الإيموجي"
addEmoji: "إضافة إيموجي"
settingGuide: "الإعدادات المستحسنة"
cacheRemoteFiles: "خزن مؤقتا الملفات البعيدة"
cacheRemoteFilesDescription: "إذا عُطل هذا الإعداد، ستُحمل الملفات من المثيل البعيد، هذا سيقلل من المساحة المستغلة على القرص لكن سيزيد حجم تدفق البيانات وهذا لأن الصور المصغرة لن تولّد."
flagAsBot: "علّمه كحساب آلي"
flagAsBotDescription: "فعّل هذا الخيار إذا كان هذا الحساب يُدار عبر برمجية. إذا فُعل فسيكون بمثابة علامة للمطورين الآخرين لتجنب سلاسل لا متناهية من التفاعل بين حسابات الآلية وضبط أنظمة ميسكي للتعامل مع هذا الحساب كآلي."
flagAsCat: "علّم هذا الحساب كحساب قط"
@@ -250,12 +261,16 @@ noMoreHistory: "لا يوجد المزيد من التاريخ"
startMessaging: "ابدأ محادثة"
nUsersRead: "قرأه {n}"
agreeTo: "اوافق على {0}"
tos: "شروط الخدمة"
agree: "أقبل"
agreeBelow: "أقبل ما يلي"
basicNotesBeforeCreateAccount: "ملاحظات مهمة"
termsOfService: "شروط الخدمة"
start: "البداية"
home: "الرئيسي"
remoteUserCaution: "هذه المعلومات قد لا تكون مكتملة بما أن المستخدم من مثيل بعيد."
activity: "النشاط"
images: "الصور"
images: "صور"
image: "صور"
birthday: "تاريخ الميلاد"
yearsOld: "{age} سنة"
registeredDate: "انضم في"
@@ -292,7 +307,6 @@ copyUrl: "انسخ الرابط"
rename: "إعادة التسمية"
avatar: "الصورة الرمزية"
banner: "الصورة الرأسية"
nsfw: "محتوى حساس"
whenServerDisconnected: "عند فقدان الاتصال بالخادم"
disconnectedFromServer: "قُطِع الإتصال بالخادم"
reload: "انعش"
@@ -357,6 +371,7 @@ antennaExcludeKeywords: "الكلمات المفتاحية المستثناة"
antennaKeywordsDescription: "افصل بينهم بمسافة لاستخدام معامل \"و\" أو بسطر لاستخدام معامل \"أو\""
notifyAntenna: "نبهني بصول ملاحظات جديدة"
withFileAntenna: "ملاحظات تحوي ملفات فقط"
enableServiceworker: "فعّل إرسال الإشعارات للمتصفح"
antennaUsersDescription: "اكتب اسم مستخدم لكل سطر"
caseSensitive: "حساسية حالة الأحرف"
withReplies: "بالردود"
@@ -379,11 +394,15 @@ about: "عن"
aboutMisskey: "عن Misskey"
administrator: "المدير"
token: "الرمز المميز"
2fa: "الاستيثاق بعاملَيْن"
totp: "تطبيق استيثاق"
moderator: "مشرِف"
moderation: "الإشراف"
nUsersMentioned: "{n} مستخدمين أُشير إليهم"
securityKeyAndPasskey: "الأمن ومفاتيح الأمان"
securityKey: "مفتاح الأمان"
lastUsed: "آخر استخدام"
lastUsedAt: "آخر استخدام: {t}"
unregister: "إلغاء التسجيل"
passwordLessLogin: "لِج مِن دون كلمة سرية"
resetPassword: "أعد تعيين كلمتك السرية"
@@ -434,6 +453,8 @@ or: "أو"
language: "اللغة"
uiLanguage: "لغة واجهة المستخدم"
aboutX: "عن {x}"
emojiStyle: "نمط الوجوه التعبيرية"
showNoteActionsOnlyHover: "أظهر الإجراءات عند التمرير فوق الملاحظة"
noHistory: "السجل فارغ"
signinHistory: "تاريخ تسجيل الدخول"
doing: "انتظر لحظة"
@@ -444,6 +465,7 @@ createAccount: "أنشئ حسابًا"
existingAccount: "الحسابات الموجودة"
regenerate: "أعِد التوليد"
fontSize: "حجم الخط"
limitTo: "سقفهُ لـ{x}"
noFollowRequests: "ليس لديك طلبات متابعة معلقة"
openImageInNewTab: "إفتح الصورة بصفحة جديدة"
dashboard: "لوحة التحكم"
@@ -465,13 +487,16 @@ objectStoragePrefix: "البادئة"
objectStoragePrefixDesc: "ستُحفظ الملفات في مجلدات تحوي اسماءها هذه البادئة."
objectStorageEndpoint: "نقطة النهاية"
objectStorageRegion: "المنطقة"
objectStorageRegionDesc: "حدد منطقة مثل \"xx-east-1\". إذا كانت خدمتك لا تميز بين المناطق استخدم \"us-east-1\" أو اتركها فارغة إذا كنت تستخدم متغيرات البيئة أو ملفات ضبط AWS."
objectStorageUseSSL: "استخدم SSL"
objectStorageUseSSLDesc: "عطل هذا الخيار إذا لم ترد استخدام API عبر HTTPS"
objectStorageUseProxy: "اتصل عبر وكيل"
objectStorageUseProxyDesc: "عطل هذا الخيار إذا لم ترد استخدام API عبر وكيل"
objectStorageSetPublicRead: "عينها ك\"علنية\" عند الرفع"
serverLogs: "سجلات الخادم"
deleteAll: "حذف الكل"
showFixedPostForm: "أظهر نموذج الكتابة في أعلى الصفحة"
showFixedPostFormInChannel: "أظهر نموذج الكتابة في أعلى الخط الزمني (قنوات)"
newNoteRecived: "هناك ملاحظات جديدة"
sounds: "الرنات"
sound: "الرنات"
@@ -506,9 +531,12 @@ userSuspended: "عُلق هذا المستخدم."
userSilenced: "كُتم هذا المستخدم."
yourAccountSuspendedTitle: "هذا الحساب معلق"
yourAccountSuspendedDescription: "عُلق الحساب بسبب انتهاك شروط خدمة المثيل و ما شابه. إذا أردت معرفة التفصيل تواصل مع مدير المثيل. رجاءً لا تنشئ حساب جديد."
accountDeleted: "حُذف الحساب"
accountDeletedDescription: "حُذف هذا الحساب."
menu: "القائمة"
divider: "فاصل"
addItem: "إضافة عنصر"
rearrange: "أعد الترتيب"
relays: "المُرَحلات"
addRelay: "إضافة مُرحّل"
inboxUrl: "رابط صندوق الوارد"
@@ -531,6 +559,8 @@ author: "الكاتب"
leaveConfirm: "لديك تغييرات غير محفوظة. أتريد المتابعة دون حفظها؟"
manage: "إدارة "
plugins: "الإضافات"
preferencesBackups: "النُسخ الاحتياطية للإعدادات"
useBlurEffectForModal: "استخدم تأثير الطمس في المشروط"
useFullReactionPicker: "استخدم الحجم الكامل لمنتقي التفاعلات"
width: "العرض"
height: "الإرتفاع"
@@ -606,6 +636,7 @@ clip: "مِشبك"
createNew: "أنشِئ جديد"
optional: "اختياري"
createNewClip: "أنشئ مِشبكَا جديدًا"
confirmToUnclipAlreadyClippedNote: "هذه الملاحظة تنتمي للمشبك {name} سلفًا، أتريد حذفها منه⸮"
public: "علني"
i18nInfo: "يترجم متطوعون ميسكي إلى عدة لغات، يمكنك المساعدة عبر {link}"
manageAccessTokens: "إدارة رموز الوصول"
@@ -627,6 +658,7 @@ driveFilesCount: "عدد الملفات في قرص التخزين"
driveUsage: "المستغل من قرص التخزين"
noCrawle: "ارفض فهرسة زاحف الويب"
noCrawleDescription: "يطلب من محركات البحث ألّا يُفهرسوا ملفك الشخصي وملاحظات وصفحاتك وما شابه."
lockedAccountInfo: "ستكون هذه الملاحظة مرئية للجميع مالم تحدد مرئتيها إلى \"للمتابعين فقط\""
alwaysMarkSensitive: "علّم افتراضيًا جميع ملاحظاتي كذات محتوى حساس"
loadRawImages: "حمّل الصور الأصلية بدلًا من المصغرات"
disableShowingAnimatedImages: "لا تشغّل الصور المتحركة"
@@ -640,10 +672,13 @@ contact: "التواصل"
useSystemFont: "استخدم الخط الافتراضية للنظام"
clips: "مشابك"
experimentalFeatures: "ميّزات اختبارية"
experimental: "اختباري"
developer: "المطور"
makeExplorable: "أظهر الحساب في صفحة \"استكشاف\""
makeExplorableDescription: "بتعطيل هذا الخيار لن يظهر حسابك في صفحة \"استكشاف\""
showGapBetweenNotesInTimeline: "أظهر فجوات بين المشاركات في الخيط الزمني"
left: "يسار"
center: "وسط"
wide: "عريض"
narrow: "رفيع"
reloadToApplySetting: "سيُطبق هذا الإعداد بعد إعادة تحميل الصفحة، أتريد إعادة تحميلها الآن؟"
@@ -661,6 +696,7 @@ accentColor: "طابع لوني"
textColor: "لون النص"
saveAs: "احفظ كـ..."
advanced: "متقدم"
advancedSettings: "إعدادات متقدمة"
value: "القيمة"
createdAt: "أُنشئ في"
updatedAt: "حُدّث في"
@@ -680,6 +716,7 @@ editCode: "حرر الشفرة"
apply: "تطبيق"
receiveAnnouncementFromInstance: "استلم إشعارات من هذا المثيل"
emailNotification: "إشعارات البريد الكتروني"
publish: "علني"
inChannelSearch: "ابحث عن قناة"
useReactionPickerForContextMenu: "افتح منتقي التفاعلات عند النقر بالزر الأيمن"
typingUsers: "{users} يكتب(ون)..."
@@ -719,12 +756,14 @@ noMaintainerInformationWarning: "لم تُضبط معلومات المدير"
noBotProtectionWarning: "لم تضبط الحماية من الحسابات الآلية"
configure: "اضبط"
postToGallery: "انشر في المعرض"
postToHashtag: "انشر بهذا الوسم"
gallery: "المعرض"
recentPosts: "المشاركات الحديثة"
popularPosts: "المشاركات المتداولة"
shareWithNote: "شاركه في ملاحظة"
ads: "الإعلانات"
expiration: "ينتهي استطلاع الرأي في"
startingperiod: "ابدأ"
memo: "تذكير"
priority: "الأولوية"
high: "عالية"
@@ -750,13 +789,16 @@ translate: "ترجم"
translatedFrom: "تُرجم من {x}"
accountDeletionInProgress: "حذف الحساب جارٍ"
usernameInfo: "الاسم الذي يميزك عن بافي مستخدمي هذا الخادم، يمكنك استخدام الحروف اللاتينية (a~z, A~Z) والأرقام (0~9) والشرطة السفلية (_). لا يمكنك تغييره بعد تسجيله."
devMode: "وضع المُطوّر"
keepCw: "أبقِ على تحذيرات المحتوى"
lastCommunication: "آخر تواصل"
resolved: "عولج"
unresolved: "لم يعالج"
breakFollow: "إلغاء الاشتراك"
breakFollowConfirm: "أمتأكد من إزالة المتابِع ؟"
itsOn: "مفعّل"
itsOff: "معطّل"
on: "مفعل"
emailRequiredForSignup: "عنوان البريد الإلكتروني إلزامي للتسجيل"
unread: "غير مقروءة"
filter: "رشّح"
@@ -769,6 +811,7 @@ muteThread: "اكتم النقاش"
unmuteThread: "ارفع الكتم عن النقاش"
ffVisibility: "مرئية المتابِعين/المتابَعين"
ffVisibilityDescription: "يسمح لك بتحديد من يمكنهم رؤية متابِعيك ومتابَعيك."
continueThread: "اعرض بقية النقاش"
deleteAccountConfirm: "سيحذف حسابك نهائيًا، أتريد المتابعة؟"
incorrectPassword: "كلمة السر خاطئة."
voteConfirm: "متيقِّن من تصويتك لـ {choice}؟"
@@ -790,23 +833,239 @@ tenMinutes: "10 دقائق"
oneHour: "ساعة"
oneDay: "يوم"
oneWeek: "أسبوع"
oneMonth: "شهر"
failedToFetchAccountInformation: "تعذر جلب معلومات الحساب"
cropNo: "استخدمها كما هي"
file: "الملفات"
recentNHours: "آخر {n} ساعة"
recentNDays: "آخر {n} أيام"
noEmailServerWarning: "خادم البريد غير مضبوط."
thereIsUnresolvedAbuseReportWarning: "توجد بلاغات غير معالجة."
recommended: "مقترح"
driveCapOverrideLabel: "غيّر حجم قرص التخزين لهذا المستخدم"
driveCapOverrideCaption: "أعد الحجم إلى القيمة الافتراضية بإدخال 0 أو أقل."
requireAdminForView: "لاستعراض هذه الصفحة وجب عليك الولوج كمدير."
typeToConfirm: "أدخل {x} للتأكيد"
deleteAccount: "احذف الحساب"
document: "التوثيق"
numberOfPageCache: "عدد الصفحات المخزنة مؤقتًا"
logoutConfirm: "أتريد الخروج؟"
lastActiveDate: "آخر استخدام"
statusbar: "شريط الحالة"
pleaseSelect: "حدد خيارًا"
reverse: "اقلب"
colored: "ملوّن"
refreshInterval: "مهلة التحديث"
label: "التسمية"
type: "نوع"
speed: "سرعة"
slow: "بطيء"
fast: "سريع"
sensitiveMediaDetection: "التعرف على المحتوى الحساس"
localOnly: "المحلي فقط"
failedToUpload: "فشل الرفع"
cannotUploadBecauseInappropriate: "تعذر رفع الملف لوجود محتوى حساس فيه."
cannotUploadBecauseNoFreeSpace: "تعذر رفع الملف لنقص مساحة التخزين."
cannotUploadBecauseExceedsFileSizeLimit: "تعذر رفع الملف بسبب تجاوز حجمه للحد المسموح"
beta: "بيتا"
enableAutoSensitive: "تعيين تلقائي كمحتوى حساس NSFW"
enableAutoSensitiveDescription: "عند الاستطاعة يسمح باكتشاف المحتوى حساس NSFW تلقائيًا في الوسائط باستخدام تعلم الآلة ووسمها تبعًا لذلك. قد يكون هذا الخيار مفعلا من جهة الخادم وسيعمل حتى وان عُطل."
activeEmailValidationDescription: "يتحقق من صحة عنوان البريد الإلكتروني بشكل أكثر حزمًا وذلك عبر تحديد ما إذا كان عنوان بريد إلكتروني مؤقت وإمكانية التواصل معه. إذا لم يحدد هذا الخيار فسيتحقق من نسق عنوان البريد الإلكتروني."
navbar: "شريط التنقل"
shuffle: "خلط"
account: "الحسابات"
move: "أنقل"
pushNotification: "إرسال الإشعارات"
subscribePushNotification: "فعّل إرسال الإشعارات"
unsubscribePushNotification: "عطل إرسال الإشعارات"
pushNotificationAlreadySubscribed: "إرسال الإشعارات مفعل سلفًا"
pushNotificationNotSupported: "متصفحك لا يدعم إرسال الإشعارات أو المثيل لا يدعمها."
sendPushNotificationReadMessage: "احذف الإشعارات فور قراءتها"
sendPushNotificationReadMessageCaption: "هذا قد يزيد من معدل استهلاك الطاقة لجهازك."
windowRestore: "استرجاع"
caption: "التعليق التوضيحي"
loggedInAsBot: "والج كآلي"
tools: "أدوات"
cannotLoad: "تعذر التحميل"
numberOfProfileView: "مشاهدات الملف الشخصي"
like: "أعجبني"
unlike: "ألغِ الإعجاب"
numberOfLikes: "الإعجابات"
show: "المظهر"
neverShow: "لا تظهره مجددًا"
remindMeLater: "ربما لاحقا"
didYouLikeMisskey: "هل أعجبك ميسكي؟"
pleaseDonate: "يستخدم {host} البرمجية الحرة ميسكي. نتمنى أن تتبرعوا للمشروع مما سيسمح لنا متابعة تطويره!"
roles: "الأدوار"
role: "الدور"
noRole: "لم يُعثر على دور"
normalUser: "مستخدم عادي"
undefined: "غير معرّف"
assign: "أسند"
unassign: "ألغ الإسناد"
color: "اللون"
manageCustomEmojis: "إدارة الإيموجي المخصصة"
youCannotCreateAnymore: "وصلت لسقف الإنشاء."
cannotPerformTemporary: "غير متاح مؤقتاً"
permissionDeniedError: "رُفضة العملية"
preset: "إعدادات مسبقة"
selectFromPresets: "اختر من الإعدادات المسبقة"
achievements: "الإنجازات"
gotInvalidResponseError: "استجابة غير متوقعة من الخادم"
gotInvalidResponseErrorDescription: "يتعذر الوصول إلى الخادم أوأنه يُصان، رجاءً حاول لاحقًا."
thisPostMayBeAnnoying: "هذا قد يزعج الآخرين."
thisPostMayBeAnnoyingHome: "أنشر في الخط الزمني الرئيس"
thisPostMayBeAnnoyingCancel: "ألغِ"
internalServerError: "خطأ داخلي في الخادم"
internalServerErrorDescription: "واجه الخادم خطأ غي متوقع."
copyErrorInfo: "انسخ تفاصيل الخطأ"
joinThisServer: "سجل في هذا المثيل"
exploreOtherServers: "اعثر على مثيل آخر"
disableFederationOk: "عطّل"
invitationRequiredToRegister: "هذا المثيل للمدعوين فقط. لتسجيل فيه تحتاج رمزًا صالحًا."
postToTheChannel: "انشر في قناة"
cannotBeChangedLater: "لا يمكن تغييره لاحقًا."
reactionAcceptance: "قبول التفاعلات"
rolesAssignedToMe: "الأدوار المسندة إلي"
resetPasswordConfirm: "هل تريد إعادة تعيين كلمة السر؟"
license: "الرخصة"
unfavoriteConfirm: "أتريد إزالتها من المفضلة؟"
noteIdOrUrl: "معرف الملاحظة أو رابطها"
video: "فيديو"
videos: "فيديوهات"
accountMigration: "ترحيل الحساب"
accountMoved: "نقل هذا المستخدم حسابه:"
accountMovedShort: "رُحل هذا الحساب."
operationForbidden: "عملية ممنوعة"
forceShowAds: "أظهر الإعلانات التجارية دائما"
leftTop: "أعلى اليسار"
rightTop: "أعلى اليمين"
leftBottom: "أسفل اليسار"
rightBottom: "أسفل اليمين"
stackAxis: "اتجاه التكديس"
vertical: "عمودي"
horizontal: "جانبي"
position: "الموضع"
serverRules: "قوانين الخادم"
pleaseConfirmBelowBeforeSignup: "رجاءً وافق على ما يلي قبل التسجيل."
pleaseAgreeAllToContinue: "للمتابعة وافق على الحقول أعلاه."
continue: "متابعة"
preservedUsernames: "أسماء المستخدمين المحجوزة"
preservedUsernamesDescription: "قائمة بأسماء المستخدمين المحجوزة كلٌ في سطر. لن يُقبل التسجيل بهذه الأسماء وستبقى محصورة على التسجيل اليدوي بواسطة المديرين. لن يتأثر المستخدمون الذين يملكون هذه الأسماء سلفًا."
createNoteFromTheFile: "أنشئ ملاحظة من هذا الملف"
archive: "الأرشيف"
channelArchiveConfirmTitle: "أتريد أرشفت {name}؟"
channelArchiveConfirmDescription: "لن يمكنك نشر ملاحظات في القناة المأرشفة ولن تظهر في قائمة القنوات ولا في نتائج البحث."
thisChannelArchived: "أُرشفت هذه القناة."
displayOfNote: "عرض الملاحظة"
initialAccountSetting: "إعداد الملف الشخصي"
youFollowing: "متابَع"
options: "خيارات"
specifyUser: "مستخدم محدد"
failedToPreviewUrl: "تتعذر المعاينة"
update: "حدِّث"
rolesThatCanBeUsedThisEmojiAsReaction: "الأدوار التي يُسمح لأصحابها استخدام هذا اإيموجي في اللتفاعل"
rolesThatCanBeUsedThisEmojiAsReactionEmptyDescription: "إذا لم تحدد دورًا يمكن للجميع استخدام هذا الإيموجي في التفاعل."
rolesThatCanBeUsedThisEmojiAsReactionPublicRoleWarn: "يجب أن تكون الأدوار علنية."
cancelReactionConfirm: "أتريد حذف تفاعلك؟"
changeReactionConfirm: "أتريد تعديل تفاعلك؟"
later: "لاحقاً"
goToMisskey: "لميسكي"
additionalEmojiDictionary: "قواميس إيموجي إضافية"
installed: "مُثبت"
_initialAccountSetting:
accountCreated: "نجح إنشاء حسابك!"
letsStartAccountSetup: "إذا كنت جديدًا لنعدّ حسابك الشخصي."
letsFillYourProfile: "أولًا لنعد ملفك الشخصي."
profileSetting: "إعدادات الملف الشخصي"
privacySetting: "إعدادات الخصوصية"
theseSettingsCanEditLater: "يمكنك تغيير هذه الإعدادات لاحقًا."
_accountMigration:
moveFrom: "انقل حسابًا آخر لهذا الحساب"
moveFromLabel: "الحساب الأصلي #{n}"
moveTo: "انقل هذا الحساب لحساب آخر"
moveToLabel: "الحساب الوجهة:"
moveCannotBeUndone: "لا يمكن التراجع عن نقل الحساب."
movedTo: "الحساب الوجهة:"
_achievements:
_types:
_notes1:
description: "انشر ملاحظتك الأولى"
flavor: "تمتع باستخدام ميسكي!"
_notes10:
title: "بعض الملاحظات"
description: "انشر 10 ملاحظات"
_notes100:
title: "كثير من الملاحظات"
description: "انشر 100 ملاحظة"
_notes500:
description: "انشر 500 ملاحظة"
_notes1000:
title: "جبل ملاحظات"
description: "انشر 1000 ملاحظة"
_notes5000:
description: "انشر 5000 ملاحظة"
_notes10000:
description: "انشر 10000 ملاحظة"
_notes20000:
title: "أريد...ملاحظات...أكثر"
description: "انشر 20000 ملاحظة"
_notes30000:
title: "ملاحظات وملاحظات وملاحظات"
description: "انشر 30000 ملاحظة"
_notes40000:
title: "مصنع ملاحظات"
description: "انشر 40000 ملاحظة"
_notes50000:
title: "كوكب ملاحظات"
description: "انشر 50000 ملاحظة"
_notes60000:
title: "نجم ملاحظات"
description: "انشر 60000 ملاحظة"
_notes70000:
title: "ثقب أسود للملاحظات"
description: "انشر 70000 ملاحظة"
_notes80000:
title: "مجرة ملاحظات"
description: "انشر 80000 ملاحظة"
_notes90000:
title: "كوْن ملاحظات"
description: "انشر 90000 ملاحظة"
_notes100000:
title: "كل ملاحظاتك لنا"
description: "انشر 100000 ملاحظة"
flavor: "حقًا لديك الكثير من القصص"
_login3:
title: "مبتدأ I"
_noteFavorited1:
description: "فضًِل ملاحظتك الأولى"
_myNoteFavorited1:
title: "ساعٍ للنجوم"
description: "أعجب شخص آخر بإحدى ملاحظاتك"
_profileFilled:
title: "مستعد"
description: "أعدّ حسابك"
_markedAsCat:
title: "أنا قط"
_role:
new: "دور جديد"
edit: "حرر الأدوار"
name: "اسم الدور"
description: "وصف الدور"
permission: "أذونات الدور"
assignTarget: "نوع الإسناد"
options: "خيارات"
policies: "السياسة العامة"
priority: "الأولوية"
_priority:
low: "منخفضة"
middle: "متوسط"
high: "عالية"
_options:
canManageCustomEmojis: "إدارة الإيموجي المخصصة"
_condition:
isLocal: "مستخدم محلي"
isRemote: "مستخدم بعيد"
_emailUnavailable:
used: "هذا البريد الإلكتروني مستخدم"
format: "صيغة البريد الإلكتروني غير صالحة"
@@ -864,10 +1123,6 @@ _aboutMisskey:
donate: "تبرع لميسكي"
morePatrons: "نحن نقدر الدعم الذي قدمه العديد من الأشخاص الذين لم نذكرهم. شكرًا لكم 🥰"
patrons: "الداعمون"
_nsfw:
respect: "اخف الوسائط ذات المحتوى الحساس"
ignore: "اعرض الوسائط ذات المحتوى الحساس"
force: "اخف كل الوسائط"
_instanceTicker:
none: "لا تظهره بتاتًا"
remote: "أظهر للمستخدمين البِعاد"
@@ -977,29 +1232,6 @@ _time:
minute: "د"
hour: "سا"
day: "ي"
_tutorial:
title: "كيف تستخدم Misskey"
step1_1: "مرحبًا!"
step1_2: "تدعى هذه الصفحة 'الخيط الزمني' وهي تحوي ملاحظات الأشخاص الذي تتابعهم مرتبة حسب تاريخ نشرها."
step1_3: "خيطك الزمني فارغ حاليًا بما أنك لا تتابع أي شخص ولم تنشر أي ملاحظة."
step2_1: "لننهي إعداد ملفك الشخصي قبل كتابة ملاحظة أو متابعة أشخاص."
step2_2: "أعطاء معلومات عن شخصيتك يمنح من له نفس إهتماماتك فرصة متابعتك والتفاعل مع ملاحظاتك."
step3_1: "هل أنهيت إعداد حسابك؟"
step3_2: "إذا تاليًا لتنشر ملاحظة. أنقر على أيقونة القلم في أعلى الشاشة"
step3_3: "املأ النموذج وانقر الزرّ الموجود في أعلى اليمين للإرسال."
step3_4: "ليس لديك ما تقوله؟ إذا اكتب \"بدأتُ استخدم ميسكي\"."
step4_1: "هل نشرت ملاحظتك الأولى؟"
step4_2: "مرحى! يمكنك الآن رؤية ملاحظتك في الخيط الزمني."
step5_1: "والآن، لنجعل الخيط الزمني أكثر حيوية وذلك بمتابعة بعض المستخدمين."
step5_2: "تعرض صفحة {features} الملاحظات المتداولة في هذا المثيل ويتيح لك {Explore} العثور على المستخدمين الرائدين. اعثر على الأشخاص الذين يثيرون إهتمامك وتابعهم!"
step5_3: "لمتابعة مستخدمين ادخل ملفهم الشخصي بالنقر على صورتهم الشخصية ثم اضغط زر 'تابع'."
step5_4: "إذا كان لدى المستخدم رمز قفل بجوار اسمه ، وجب عليك انتظاره ليقبل طلب المتابعة يدويًا."
step6_1: "الآن ستتمكن من رؤية ملاحظات المستخدمين المتابَعين في الخيط الزمني."
step6_2: "يمكنك التفاعل بسرعة مع الملاحظات عن طريق إضافة \"تفاعل\"."
step6_3: "لإضافة تفاعل لملاحظة ، انقر فوق علامة \"+\" أسفل للملاحظة واختر الإيموجي المطلوب."
step7_1: "مبارك ! أنهيت الدورة التعليمية الأساسية لاستخدام ميسكي."
step7_2: "إذا أردت معرفة المزيد عن ميسكي زر {help}."
step7_3: "حظًا سعيدًا واستمتع بوقتك مع ميسكي! 🚀"
_2fa:
alreadyRegistered: "سجلت سلفًا جهازًا للاستيثاق بعاملين."
step1: "أولًا ثبّت تطبيق استيثاق على جهازك (مثل {a} و{b})."
@@ -1077,6 +1309,7 @@ _widgets:
onlineUsers: "المتّصلون"
jobQueue: "قائمة الانتظار"
serverMetric: "إحصائيات الخادم"
userList: "قائمة المستخدمين"
_userList:
chooseList: "اختر قائمة"
_cw:
@@ -1140,6 +1373,7 @@ _profile:
changeBanner: "غيّر اللافتة"
_exportOrImport:
allNotes: "كل الملاحظات"
favoritedNotes: " الملاحظات المفضلة"
followingList: "المتابَعون"
muteList: "المستخدمون المكتومون"
blockingList: "المستخدمون المحجوبون"
@@ -1158,6 +1392,8 @@ _charts:
notesTotal: "إجمالي الملاحظات"
filesIncDec: "تباين عدد الملفات"
filesTotal: "العدد الإجمالي للملفات"
storageUsageIncDec: "التباين في استغلال مساحة التخزين"
storageUsageTotal: "اجمالي مساحة التخزين المستغلة"
_instanceCharts:
requests: "الطلبات"
users: "تباين عدد المستخدمين"
@@ -1218,7 +1454,7 @@ _pages:
text: "نص"
textarea: "حقل نصي"
section: "قسم"
image: "الصور"
image: "صور"
button: "زرّ"
note: "ملاحظة مضمّنة"
_note:
@@ -1277,3 +1513,5 @@ _deck:
_webhookSettings:
name: "الإسم"
active: "مفعّل"
_events:
reaction: "عند تلقي تفاعل"

View File

@@ -252,12 +252,12 @@ noMoreHistory: "আর কোন ইতিহাস নেই"
startMessaging: "চ্যাট শুরু করুন"
nUsersRead: "{n} জন পড়েছেন"
agreeTo: "{0} এর প্রতি আমি সম্মত"
tos: "পরিষেবার শর্তাদি"
start: "শুরু করুন"
home: "মূল পাতা"
remoteUserCaution: "এই ব্যাবহারকারী রিমোট ইন্সট্যান্সের, নিম্নক্ত তথ্য অসম্পূর্ণ হতে পারে।"
activity: "কার্যকলাপ"
images: "ছবি"
image: "ছবি"
birthday: "জন্মদিন"
yearsOld: "{age} বছর"
registeredDate: "যোগদানের তারিখ"
@@ -294,7 +294,6 @@ copyUrl: "URL কপি করুন"
rename: "পুনঃনামকরণ"
avatar: "প্রোফাইল ছবি"
banner: "ব্যানার"
nsfw: "সংবেদনশীল বিষয়বস্তু"
whenServerDisconnected: "সার্ভারের সাথে সংযোগ বিচ্ছিন্ন হয়ে গেলে"
disconnectedFromServer: "সার্ভার থেকে সংযোগ বিচ্ছিন্ন হয়েছে"
reload: "আবার লোড করুন"
@@ -836,6 +835,8 @@ account: "অ্যাকাউন্টগুলি"
like: "পছন্দ করা"
show: "প্রদর্শন"
color: "রং"
horizontal: "পাশে"
youFollowing: "অনুসরণ করা হচ্ছে"
_role:
priority: "অগ্রাধিকার"
_priority:
@@ -900,10 +901,6 @@ _aboutMisskey:
donate: "Misskey তে দান করুন"
morePatrons: "আরও অনেকে আমাদের সাহায্য করছেন। তাদের সবাইকে ধন্যবাদ 🥰"
patrons: "সমর্থনকারী"
_nsfw:
respect: "স্পর্শকাতর মিডিয়া লুকান"
ignore: "স্পর্শকাতর মিডিয়া লুকাবেন না"
force: "সকল মিডিয়া লুকান"
_instanceTicker:
none: "দেখাবেন না"
remote: "রিমোট ব্যাবহারকারীদের জন্য দেখান"
@@ -1039,29 +1036,6 @@ _time:
minute: "মিনিট"
hour: "ঘণ্টা"
day: "দিন"
_tutorial:
title: "Misskey কিভাবে ব্যাবহার করবেন"
step1_1: "স্বাগতম!"
step1_2: "এই স্ক্রীনটিকে \"টাইমলাইন\" বলা হয় এবং কালানুক্রমিক ক্রমে আপনার এবং আপনি যাদের \"অনুসরণ করেন\" তাদের \"নোটগুলি\" দেখায়৷"
step1_3: "আপনি আপনার টাইমলাইনে কিছু দেখতে পাবেন না কারণ আপনি এখনও কোনো নোট পোস্ট করেননি এবং আপনি কাউকে অনুসরণ করছেন না৷"
step2_1: "নোট তৈরি করার আগে বা কাউকে অনুসরণ করার আগে প্রথমে আপনার প্রোফাইলটি সম্পূর্ণ করুন।"
step2_2: "আপনি কে তা জানা অনেক লোকের জন্য আপনার নোটগুলি দেখা এবং অনুসরণ করাকে সহজ করে তোলে৷"
step3_1: "আপনি কি সফলভাবে আপনার প্রোফাইল সেট আপ করেছেন?"
step3_2: "এখন, কিছু নোট পোস্ট করার চেষ্টা করুন। পোস্ট ফর্ম খুলতে পেন্সিল চিহ্নযুক্ত বাটনে ক্লিক করুন।"
step3_3: "বিষয়বস্তু লেখার পরে, আপনি ফর্মের উপরের ডানদিকের বাটনে ক্লিক করে পোস্ট করতে পারেন।"
step3_4: "পোস্ট করার মত কিছু মনে পরছে না? \"আমি মিসকি সেট আপ করছি\" বললে কেমন হয়?"
step4_1: "পোস্ট করেছেন?"
step4_2: "সাবাশ! এখন আপনার নোট টাইমলাইনে দেখা যাবে।"
step5_1: "এখন অন্যদেরকে অনুসরণ করে আপনার টাইমলাইনকে প্রাণবন্ত করে তুলুন।"
step5_2: "আপনি {featured}-এ জনপ্রিয় নোটগুলি দেখতে পারেন, যাতে আপনি যে ব্যক্তিকে পছন্দ করেন তাকে বেছে নিতে এবং অনুসরণ করতে পারেন, অথবা {explore}-এ জনপ্রিয় ব্যবহারকারীদের দেখতে পারেন৷"
step5_3: "একজন ব্যবহারকারীকে অনুসরণ করতে, ব্যবহারকারীর আইকনে ক্লিক করুন এবং ব্যবহারকারীর পৃষ্ঠাতে \"অনুসরণ করুন\" বাটনে ক্লিক করুন।"
step5_4: "যদি ব্যবহারকারীর নামের পাশে একটি লক আইকন থাকে তাহলে আপনার অনুসরণের অনুরোধ গ্রহণ করার জন্য তারা কিছু সময় নিতে পারে।"
step6_1: "সবকিছু ঠিক থাকলে আপনি টাইমলাইনে অন্য ব্যবহারকারীদের নোট দেখতে পাবেন।"
step6_2: "আপনি সহজেই আপনার প্রতিক্রিয়া জানাতে অন্য ব্যক্তির নোটে \"রিঅ্যাকশন\" যোগ করতে পারেন।"
step6_3: "একটি রিঅ্যাকশন যোগ করতে, নোটে \"+\" চিহ্নে ক্লিক করুন এবং আপনার পছন্দের রিঅ্যাকশন নির্বাচন করুন।"
step7_1: "অভিনন্দন! আপনি এখন Misskey-র প্রাথমিক টিউটোরিয়ালটি শেষ করেছেন।"
step7_2: "আপনি যদি Misskey সম্পর্কে আরও জানতে চান, তাহলে {help} এ দেখুন।"
step7_3: "এখন Misskey উপভোগ করুন 🚀"
_2fa:
alreadyRegistered: "আপনি ইতিমধ্যে একটি 2-ফ্যাক্টর অথেনটিকেশন ডিভাইস নিবন্ধন করেছেন৷"
step1: "প্রথমে, আপনার ডিভাইসে {a} বা {b} এর মতো একটি অথেনটিকেশন অ্যাপ ইনস্টল করুন৷"

View File

@@ -216,6 +216,7 @@ instanceFollowers: "Seguidors del servidor"
instanceUsers: "Usuaris del servidor"
changePassword: "Canvia la contrasenya"
security: "Seguretat"
retypedNotMatch: "L'entrada no coincideix"
currentPassword: "Contrasenya actual"
newPassword: "Contrasenya nova"
newPasswordRetype: "Contrasenya nou (repeteix-la)"
@@ -239,6 +240,7 @@ start: "Comença"
home: "Inici"
activity: "Activitat"
images: "Imatges"
image: "Imatges"
birthday: "Aniversari"
yearsOld: "{age} anys"
registeredDate: "Data de registre"
@@ -261,7 +263,6 @@ emptyFolder: "La carpeta està buida"
unableToDelete: "No es pot eliminar"
copyUrl: "Copia l'URL"
rename: "Canvia el nom"
nsfw: "NSFW"
reload: "Actualitza"
doNothing: "Ignora"
accept: "Accepta"

View File

@@ -12,12 +12,14 @@ fetchingAsApObject: "Načítám data z Fediversu..."
ok: "Potvrdit"
gotIt: "Rozumím!"
cancel: "Zrušit"
noThankYou: "Ne děkuji"
enterUsername: "Zadej uživatelské jméno"
renotedBy: "{user} přeposla/a"
noNotes: "Žádné poznámky"
noNotifications: "Žádná oznámení"
instance: "Instance"
settings: "Nastavení"
notificationSettings: "Nastavení oznámení"
basicSettings: "Obecná nastavení"
otherSettings: "Rozšířená nastavení"
openInWindow: "Otevřít v novém okně"
@@ -236,12 +238,12 @@ noMoreHistory: "To je vše"
startMessaging: "Zahájit chat"
nUsersRead: "přečteno {n} uživateli"
agreeTo: "Souhlasím s {0}"
tos: "Podmínky užívání"
start: "Začít"
home: "Domů"
remoteUserCaution: "Tyto informace nemusí být aktuální jelikož uživatel je ze vzdálené instance."
activity: "Aktivita"
images: "Obrázky"
image: "Obrázky"
birthday: "Datum narození"
yearsOld: "{age} let"
registeredDate: "Datum registrace"
@@ -274,7 +276,6 @@ copyUrl: "Kopírovat URL"
rename: "Přejmenovat"
avatar: "Avatar"
banner: "Baner"
nsfw: "NSFW"
disconnectedFromServer: "Spojení bylo přerušeno"
reload: "Aktualizovat"
doNothing: "Ignorovat"
@@ -664,6 +665,8 @@ _time:
second: "Sekund"
minute: "Minut"
hour: "Hodin"
_2fa:
renewTOTPCancel: "Ne děkuji"
_weekday:
sunday: "Neděle"
monday: "Pondělí"

View File

@@ -20,6 +20,7 @@ noNotes: "Keine Notizen gefunden"
noNotifications: "Keine Benachrichtigungen gefunden"
instance: "Instanz"
settings: "Einstellungen"
notificationSettings: "Benachrichtigungseinstellungen"
basicSettings: "Allgemeine Einstellungen"
otherSettings: "Weitere Einstellungen"
openInWindow: "In einem Fenster öffnen"
@@ -51,6 +52,10 @@ addToList: "Zu Liste hinzufügen"
sendMessage: "Nachricht senden"
copyRSS: "RSS kopieren"
copyUsername: "Benutzernamen kopieren"
copyUserId: "Benutzer-ID kopieren"
copyNoteId: "Notiz-ID kopieren"
copyFileId: "Datei-ID kopieren"
copyFolderId: "Ordner-ID kopieren"
searchUser: "Nach einem Benutzer suchen"
reply: "Antworten"
loadMore: "Mehr laden"
@@ -109,7 +114,7 @@ pinnedNote: "Angeheftete Notiz"
pinned: "Angeheftet"
you: "Du"
clickToShow: "Zum Anzeigen anklicken"
sensitive: "NSFW"
sensitive: "Sensibel"
add: "Hinzufügen"
reaction: "Reaktionen"
reactions: "Reaktionen"
@@ -117,8 +122,8 @@ reactionSetting: "In der Reaktionsauswahl anzuzeigende Reaktionen"
reactionSettingDescription2: "Ziehe um Anzuordnen, klicke um zu löschen, drücke „+“ um hinzuzufügen"
rememberNoteVisibility: "Notizsichtbarkeit merken"
attachCancel: "Anhang entfernen"
markAsSensitive: "Als NSFW markieren"
unmarkAsSensitive: "Als nicht NSFW markieren"
markAsSensitive: "Als sensibel markieren"
unmarkAsSensitive: "Als nicht sensibel markieren"
enterFileName: "Dateinamen eingeben"
mute: "Stummschalten"
unmute: "Stummschaltung aufheben"
@@ -133,8 +138,10 @@ unblockConfirm: "Möchtest du diese Blockierung wirklich aufheben?"
suspendConfirm: "Möchtest du diesen Benutzer wirklich sperren?"
unsuspendConfirm: "Möchtest du diesen Benutzer wirklich entsperren?"
selectList: "Liste auswählen"
editList: "Liste bearbeiten"
selectChannel: "Kanal auswählen"
selectAntenna: "Antenne auswählen"
editAntenna: "Antenne bearbeiten"
selectWidget: "Widget auswählen"
editWidgets: "Widgets bearbeiten"
editWidgetsExit: "Fertig"
@@ -262,14 +269,16 @@ noMoreHistory: "Kein weiterer Verlauf vorhanden"
startMessaging: "Neuen Chat erstellen"
nUsersRead: "Von {n} Benutzern gelesen"
agreeTo: "Ich stimme {0} zu"
agree: "Zustimmen"
agreeBelow: "Ich stimme Untenstehendem zu"
basicNotesBeforeCreateAccount: "Wichtige Infos"
tos: "Nutzungsbedingungen"
termsOfService: "Nutzungsbedingungen"
start: "Anfangen"
home: "Startseite"
remoteUserCaution: "Diese Informationen sind möglicherweise unvollständig, da der Benutzer von einer fremden Instanz stammt."
activity: "Aktivität"
images: "Bilder"
image: "Bild"
birthday: "Geburtstag"
yearsOld: "{age} Jahre alt"
registeredDate: "Registrationsdatum"
@@ -306,7 +315,7 @@ copyUrl: "URL kopieren"
rename: "Umbenennen"
avatar: "Profilbild"
banner: "Banner"
nsfw: "NSFW"
displayOfSensitiveMedia: "Anzeige von sensiblen Medien"
whenServerDisconnected: "Bei Verbindungsverlust zum Server"
disconnectedFromServer: "Die Verbindung zum Server wurde getrennt"
reload: "Aktualisieren"
@@ -467,12 +476,14 @@ enableAdvancedMfm: "Erweitertes MFM aktivieren"
enableAnimatedMfm: "Animiertes MFM aktivieren"
doing: "In Bearbeitung …"
category: "Kategorie"
tags: "Schlagwörter"
tags: "Aliasse"
docSource: "Quellcode dieses Dokuments"
createAccount: "Benutzerkonto erstellen"
existingAccount: "Bestehendes Benutzerkonto"
regenerate: "Regenerieren"
fontSize: "Schriftgröße"
mediaListWithOneImageAppearance: "Höhe von Medienlisten mit nur einem Bild"
limitTo: "Auf {x} begrenzen"
noFollowRequests: "Keine ausstehenden Follow-Anfragen vorhanden"
openImageInNewTab: "Bilder in neuem Tab öffnen"
dashboard: "Dashboard"
@@ -555,6 +566,7 @@ accountDeletedDescription: "Dieses Konto wurde gelöscht."
menu: "Menü"
divider: "Trenner"
addItem: "Element hinzufügen"
rearrange: "Sortieren"
relays: "Relays"
addRelay: "Relay hinzufügen"
inboxUrl: "inbox-URL"
@@ -685,7 +697,7 @@ driveUsage: "Drive-Auslastung"
noCrawle: "Crawler-Indexierung ablehnen"
noCrawleDescription: "Suchmaschinen bitten, die eigene Profilseite, Notizen, Seiten usw. nicht zu indexieren."
lockedAccountInfo: "Auch wenn du Follow-Anfragen auf manuelle Bestätigung setzt, wird jede deiner Notizen öffentlich sichtbar sein, sofern du ihre Notizsichtbarkeit nicht auf \"Nur Follower\" setzt."
alwaysMarkSensitive: "Medien standardmäßig als NSFW markieren"
alwaysMarkSensitive: "Medien standardmäßig als sensibel markieren"
loadRawImages: "Anstatt Vorschaubilder immer Originalbilder anzeigen"
disableShowingAnimatedImages: "Animierte Bilder nicht abspielen"
verificationEmailSent: "Eine Bestätigungsmail wurde an deine Email-Adresse versendet. Besuche den dort enthaltenen Link, um die Verifizierung abzuschließen."
@@ -698,6 +710,8 @@ contact: "Kontakt"
useSystemFont: "Standardschriftart des Systems verwenden"
clips: "Clips"
experimentalFeatures: "Experimentelle Funktionalitäten"
experimental: "Experimentell"
thisIsExperimentalFeature: "Dies ist eine experimentelle Funktion. Änderungen an ihrer Funktionsweise sind vorbehalten, zudem kann eine Verwendung zu unerwarteten Effekten führen."
developer: "Entwickler"
makeExplorable: "Benutzerkonto in „Erkunden“ sichtbar machen"
makeExplorableDescription: "Wenn diese Option deaktiviert ist, ist dein Benutzerkonto nicht im „Erkunden“-Bereich sichtbar."
@@ -782,6 +796,7 @@ noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert.
noBotProtectionWarning: "Schutz vor Bots ist nicht konfiguriert."
configure: "Konfigurieren"
postToGallery: "Neuen Galeriebeitrag erstellen"
postToHashtag: "Mit diesem Hashtag senden"
gallery: "Galerie"
recentPosts: "Neue Beiträge"
popularPosts: "Beliebte Beiträge"
@@ -815,6 +830,7 @@ translatedFrom: "Aus {x} übersetzt"
accountDeletionInProgress: "Die Löschung deines Benutzerkontos ist momentan in Bearbeitung."
usernameInfo: "Ein Name, durch den dein Benutzerkonto auf diesem Server identifiziert werden kann. Du kannst das Alphabet (a~z, A~Z), Ziffern (0~9) oder Unterstriche (_) verwenden. Benutzernamen können später nicht geändert werden."
aiChanMode: "Ai-Modus"
devMode: "Entwicklermodus"
keepCw: "Inhaltswarnungen beibehalten"
pubSub: "Pub/Sub Benutzerkonten"
lastCommunication: "Letzte Kommunikation"
@@ -824,6 +840,8 @@ breakFollow: "Follower entfernen"
breakFollowConfirm: "Diesen Follower wirklich entfernen?"
itsOn: "Eingeschaltet"
itsOff: "Ausgeschaltet"
on: "An"
off: "Aus"
emailRequiredForSignup: "Angabe einer Email-Adresse als benötigt markieren"
unread: "Ungelesen"
filter: "Filter"
@@ -898,15 +916,16 @@ type: "Art"
speed: "Geschwindigkeit"
slow: "Langsam"
fast: "Schnell"
sensitiveMediaDetection: "Erkennung von NSFW-Medien"
sensitiveMediaDetection: "Erkennung von sensiblen Medien"
localOnly: "Nur Lokal"
remoteOnly: "Nur für fremde Instanzen"
failedToUpload: "Hochladen fehlgeschlagen"
cannotUploadBecauseInappropriate: "Diese Datei kann nicht hochgeladen werden, da Anteile der Datei als möglicherweise NSFW festgestellt wurden."
cannotUploadBecauseInappropriate: "Diese Datei kann nicht hochgeladen werden, da Anteile der Datei als möglicherweise unangebracht festgestellt wurden."
cannotUploadBecauseNoFreeSpace: "Die Datei konnte nicht hochgeladen werden, da dein Drive-Speicherplatz aufgebraucht ist."
cannotUploadBecauseExceedsFileSizeLimit: "Diese Datei kann wegen Überschreitung der Maximalgröße nicht hochgeladen werden."
beta: "Beta"
enableAutoSensitive: "NSFW-Automarkierung"
enableAutoSensitiveDescription: "Setzt soweit möglich durch Verwendung von Machine Learning automatisch NSFW-Markierungen für Medien, die NSFW-Anteile beinhalten. Auch wenn du diese Option deaktiviert hast, ist sie möglicherweise auf Instanzebene aktiviert."
enableAutoSensitive: "Automarkierung sensibler Medien"
enableAutoSensitiveDescription: "Setzt soweit möglich durch Verwendung von Machine Learning automatisch Markierungen für sensible Medien. Auch wenn du diese Option deaktiviert hast, ist sie möglicherweise auf Instanzebene aktiviert."
activeEmailValidationDescription: "Aktivert strengere Überprüfung von E-Mail-Adressen, d.h. Testen auf Wegwerfadressen und darauf, ob mit der Adresse tatsächlich kommuniziert werden kann. Ist dies deaktiviert, so wird nur das Format der E-Mail überprüft."
navbar: "Navigationsleiste"
shuffle: "Mischen"
@@ -917,8 +936,8 @@ subscribePushNotification: "Push-Benachrichtigungen aktivieren"
unsubscribePushNotification: "Push-Benachrichtigungen deaktivieren"
pushNotificationAlreadySubscribed: "Push-Benachrichtigungen sind bereits aktiviert"
pushNotificationNotSupported: "Entweder dein Browser oder deine Instanz unterstützt Push-Benachrichtigungen nicht"
sendPushNotificationReadMessage: "Push-Benachrichtigungen löschen, sobald die relevanten Benachrichtigungen oder Nachrichten gelesen wurden"
sendPushNotificationReadMessageCaption: "Eine Push-Benachrichtigungen mit dem Inhalt \"{emptyPushNotificationMessage}\" wird kurz eingeblendet. Dies kann gegebenenfalls den Batterieverbrauch deines Gerätes erhöhen."
sendPushNotificationReadMessage: "Push-Benachrichtigungen löschen, sobald sie gelesen wurden"
sendPushNotificationReadMessageCaption: "Dies kann gegebenenfalls den Batterieverbrauch deines Gerätes erhöhen."
windowMaximize: "Maximieren"
windowMinimize: "Minimieren"
windowRestore: "Wiederherstellen"
@@ -937,6 +956,7 @@ 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!"
roles: "Rollen"
role: "Rolle"
noRole: "Rolle nicht gefunden"
normalUser: "Standardbenutzer"
undefined: "Undefiniert"
assign: "Zuweisen"
@@ -946,6 +966,10 @@ manageCustomEmojis: "Kann benutzerdefinierte Emojis verwalten"
youCannotCreateAnymore: "Du hast das Erstellungslimit erreicht."
cannotPerformTemporary: "Vorübergehend nicht verfügbar"
cannotPerformTemporaryDescription: "Diese Aktion ist wegen des Überschreitenes des Ausführungslimits temporär nicht verfügbar. Bitte versuche es nach einiger Zeit erneut."
invalidParamError: "Ungültige Parameter"
invalidParamErrorDescription: "Die Anfrageparameter sind fehlerhaft. Dies liegt meist an einem Bug, kann aber auch durch eine zu langen Eingabe o.ä. ausgelöst werden."
permissionDeniedError: "Aktion verweigert"
permissionDeniedErrorDescription: "Dieses Benutzerkonto besitzt nicht die Berechtigung, um diese Aktion auszuführen."
preset: "Vorlage"
selectFromPresets: "Aus Vorlagen wählen"
achievements: "Errungenschaften"
@@ -971,11 +995,14 @@ postToTheChannel: "In Kanal senden"
cannotBeChangedLater: "Kann später nicht mehr geändert werden."
reactionAcceptance: "Reaktionsannahme"
likeOnly: "Nur \"Gefällt mir\""
likeOnlyForRemote: "Nur \"Gefällt mir\" für fremde Instanzen"
likeOnlyForRemote: "Alle (Nur \"Gefällt mir\" für fremde Instanzen)"
nonSensitiveOnly: "Keine Sensitiven"
nonSensitiveOnlyForLocalLikeOnlyForRemote: "Keine Sensitiven (Nur \"Gefällt mir\" von fremden Instanzen)"
rolesAssignedToMe: "Mir zugewiesene Rollen"
resetPasswordConfirm: "Wirklich Passwort zurücksetzen?"
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."
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."
notesSearchNotAvailable: "Die Notizsuche ist nicht verfügbar."
license: "Lizenz"
unfavoriteConfirm: "Wirklich aus Favoriten entfernen?"
@@ -989,17 +1016,92 @@ enableChartsForFederatedInstances: "Diagramme für fremde Instanzen erstellen"
showClipButtonInNoteFooter: "\"Clip\" zum Notizmenu hinzufügen"
largeNoteReactions: "Reaktionen vergrößert anzeigen"
noteIdOrUrl: "Notiz-ID oder URL"
accountMigration: "Konto-Umzug"
accountMoved: "Dieser Benutzer ist zu einem neuen Konto umgezogen:"
video: "Video"
videos: "Videos"
dataSaver: "Datensparmodus"
accountMigration: "Kontomigration"
accountMoved: "Dieser Benutzer ist zu einem neuen Konto migriert:"
accountMovedShort: "Dieses Konto wurde migriert."
operationForbidden: "Aktion nicht möglich"
forceShowAds: "Werbung immer anzeigen"
addMemo: "Bemerkung hinzufügen"
editMemo: "Bemerkung bearbeiten"
reactionsList: "Reaktionen"
renotesList: "Renotes"
notificationDisplay: "Benachrichtigungen"
leftTop: "Oben links"
rightTop: "Oben rechts"
leftBottom: "Unten links"
rightBottom: "Unten rechts"
stackAxis: "Stapelrichtung"
vertical: "Vertikal"
horizontal: "Horizontal"
position: "Position"
serverRules: "Serverregeln"
pleaseConfirmBelowBeforeSignup: "Lies bitte Untenstehendes vor der Registration."
pleaseAgreeAllToContinue: "Zum Fortfahren muss allen obigen Feldern zugestimmt werden."
continue: "Fortfahren"
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."
createNoteFromTheFile: "Notiz für diese Datei schreiben"
archive: "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."
thisChannelArchived: "Dieser Kanal wurde archiviert."
displayOfNote: "Anzeige von Notizen"
initialAccountSetting: "Kontoeinrichtung"
youFollowing: "Gefolgt"
preventAiLearning: "Verwendung in machinellem Lernen (Generative bzw. Prediktive AI/KI) ablehnen"
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"
specifyUser: "Spezifischer Benutzer"
failedToPreviewUrl: "Vorschau nicht anzeigbar"
update: "Aktualisieren"
rolesThatCanBeUsedThisEmojiAsReaction: "Rollen, die dieses Emoji als Reaktion verwenden können"
rolesThatCanBeUsedThisEmojiAsReactionEmptyDescription: "Sind keine Rollen angegeben, kann jeder dieses Emoji als Reaktion verwenden."
rolesThatCanBeUsedThisEmojiAsReactionPublicRoleWarn: "Diese Rollen müssen öffentlich sein."
cancelReactionConfirm: "Möchtest du deine Reaktion wirklich löschen?"
changeReactionConfirm: "Möchtest du deine Reaktion wirklich ändern?"
later: "Später"
goToMisskey: "Zu Misskey"
additionalEmojiDictionary: "Zusätzliche Emoji-Wörterbücher"
installed: "Installiert"
branding: "Branding"
enableServerMachineStats: "Hardwareinformationen des Servers veröffentlichen"
enableIdenticonGeneration: "Generierung von Benutzer-Identicons aktivieren"
turnOffToImprovePerformance: "Deaktivierung kann zu höherer Leistung führen."
_initialAccountSetting:
accountCreated: "Dein Konto wurde erfolgreich erstellt!"
letsStartAccountSetup: "Lass uns nun dein Konto einrichten."
letsFillYourProfile: "Lass uns zuerst dein Profil einrichten."
profileSetting: "Profileinstellungen"
privacySetting: "Privatsphäreneinstellungen"
theseSettingsCanEditLater: "Diese Einstellungen kannst du jederzeit ändern."
youCanEditMoreSettingsInSettingsPageLater: "In den Einstellungen findest du noch viele weitere Optionen. Schau dort später mal vorbei."
followUsers: "Folge zuerst ein paar Nutzern, um deine Chronik zu füllen."
pushNotificationDescription: "Durch die Aktivierung von Push-Benachrichtigungen kannst du von {name} Benachrichtigungen direkt auf dein Gerät erhalten."
initialAccountSettingCompleted: "Kontoeinrichtung abgeschlossen!"
haveFun: "Viel Spaß mit {name}!"
ifYouNeedLearnMore: "Besuche {link}, falls du mehr über {name} (Misskey) lernen möchtest."
skipAreYouSure: "Die Kontoeinrichtung wirklich überspringen?"
laterAreYouSure: "Die Kontoeinrichtung wirklich später erledigen?"
_serverRules:
description: "Eine Reihe von Regeln, die vor der Registrierung angezeigt werden. Eine Zusammenfassung der Nutzungsbedingungen anzuzeigen ist empfohlen."
_accountMigration:
moveTo: "Dieses Konto zu einem neuen umziehen"
moveFrom: "Von einem anderen Konto zu diesem migrieren"
moveFromSub: "Alias für ein anderes Konto erstellen"
moveFromLabel: "Migrationsursprung #{n}"
moveFromDescription: "Um von einem anderen Konto zu diesem zu migrieren, muss zuvor hier ein Alias eingerichtet werden.\nGib das Konto, von dem migriert werden soll, in folgendem Format ein: @username@server.example.com\n\nZum Löschen des Alias kann das Feld leergelassen werden (nicht empfohlen)."
moveTo: "Dieses Konto zu einem neuen migrieren"
moveToLabel: "Umzugsziel:"
moveAccountDescription: "Ein Umzug kann nicht rückgängig gemacht werden. Stelle zuerst sicher, dass du auf dem Umzugsziel einen Alias erstellt hast. Gib dann das Umzugsziel in folgendem Format ein: @person@instance.com"
moveFrom: "Von einem anderen Konto zu diesem umziehen"
moveFromLabel: "Umzugsursprung:"
moveFromDescription: "Stelle sicher, dass du auf dem Umzugsursprungskonto einen Alias zu diesem Konto erstellt hast, falls du die Follower des Ursprungskontos übertragen möchtest. Dies muss vor dem Umzug geschehen! Gib dann das Ursprungskonto in folgendem Format an: @person@instance.com"
migrationConfirm: "Dieses Konto wirklich zu {account} umziehen? Sobald der Umzug beginnt, kann er nicht rückgängig gemacht werden, und dieses Konto nicht wieder im ursprünglichen Zustand verwendet werden.\n\nÜberprüfe zusätzlich, dass du auf dem Umzugsziel einen Alias eingerichtet hast."
moveCannotBeUndone: "Die Migration eines Benutzerkontos ist unwiderruflich."
moveAccountDescription: "Hierdurch wird dein Konto zu einem anderen migriert.\n ・Follower von diesem Konto werden automatisch auf das neue Konto migriert\n ・Dieses Konto wird allen Nutzern, denen es derzeit folgt, nicht mehr folgen\n ・Mit diesem Konto können keine neuen Notizen usw. erstellt werden\n\nWährend die Migration der Follower automatisch erfolgt, muss die Migration der Konten, denen du folgst, manuell vorbereitet werden. Exportiere hierzu die Liste der gefolgten Nutzer über das Einstellungsmenu, und importiere diese Liste im neuen Konto. Das gleiche Verfahren gilt für erstellte Listen und stummgeschaltete oder blockierte Nutzer.\n\n(Diese Erklärung gilt für Misskey v13.12.0 oder später. Die Funktionsweise andere ActivityPub-Software, beispielsweise Mastodon, kann hiervon abweichen.)"
moveAccountHowTo: "Um ein Konto zu migrieren, erstelle zuerst auf dem Umzugsziel einen Alias für dieses Konto.\nGib dann das Umzugsziel in folgendem Format ein: @username@server.example.com"
startMigration: "Migrieren"
migrationConfirm: "Dieses Konto wirklich zu {account} umziehen? Sobald der Umzug beginnt, kann er nicht rückgängig gemacht werden, und dieses Konto nicht wieder im ursprünglichen Zustand verwendet werden."
movedAndCannotBeUndone: "\nDieses Konto wurde migriert.\nDiese Aktion ist unwiderruflich."
postMigrationNote: "Dieses Konto wird 24 Stunden nach Abschluss der Migration allen Konten, denen es derzeit folgt, nicht mehr folgen.\n\nSowohl die Anzahl der Follower als auch die der Konten, denen dieses Konto folgt, wird dann auf Null gesetzt. Um zu vermeiden, dass Follower dieses Kontos dessen Beiträge, welche nur für Follower bestimmt sind, nicht mehr sehen können, werden sie diesem Konto jedoch weiterhin folgen."
movedTo: "Neues Konto:"
_achievements:
earnedAt: "Freigeschaltet am"
_types:
@@ -1026,7 +1128,7 @@ _achievements:
title: "Supernotiz"
description: "10.000 Notizen gesendet"
_notes20000:
title: "Brauche... mehr... Notizen"
title: "Brauche... mehr... Notizen..."
description: "20.000 Notizen gesendet"
_notes30000:
title: "Notizen, Notizen, Notizen"
@@ -1170,7 +1272,10 @@ _achievements:
description: "Du hast einen verborgenen Schatz gefunden"
_client30min:
title: "Kurze Pause"
description: "Habe Misskey für 30 Minuten geöffnet"
description: "Habe Misskey für mindestens 30 Minuten geöffnet"
_client60min:
title: "Munter mit Misskey"
description: "Habe Misskey für mindestens 60 Minuten geöffnet"
_noteDeletedWithin1min:
title: "Ups"
description: "Lösche eine Notiz innerhalb von 1 Minute nachdem sie gesendet wurde"
@@ -1250,7 +1355,7 @@ _role:
condition: "Bedingung"
isConditionalRole: "Dies ist eine konditionale Rolle."
isPublic: "Öffentliche Rolle"
descriptionOfIsPublic: "Ist dies aktiviert, so kann jeder die Liste der Benutzer, die dieser Rolle zugewiesen sind, einsehen. Zusätzlich wird diese Rolle im Profil zugewiesener Benutzer angezeigt."
descriptionOfIsPublic: "Diese Rolle wird im Profil zugewiesener Benutzer angezeigt."
options: "Optionen"
policies: "Richtlinien"
baseRole: "Rollenvorlage"
@@ -1259,6 +1364,8 @@ _role:
iconUrl: "Icon-URL"
asBadge: "Als Abzeichen anzeigen"
descriptionOfAsBadge: "Ist dies aktiviert, so wird das Icon dieser Rolle an der Seite der Namen von Benutzern mit dieser Rolle angezeigt."
isExplorable: "Benutzerliste veröffentlichen"
descriptionOfIsExplorable: "Ist dies aktiviert, so ist die Chronik dieser Rolle, sowie eine Liste der Benutzer mit dieser Rolle, frei zugänglich."
displayOrder: "Position"
descriptionOfDisplayOrder: "Je höher die Nummer, desto höher die UI-Position."
canEditMembersByModerator: "Moderatoren können Benutzern diese Rolle zuweisen"
@@ -1275,6 +1382,7 @@ _role:
canInvite: "Erstellung von Einladungscodes für diese Instanz"
canManageCustomEmojis: "Benutzerdefinierte Emojis verwalten"
driveCapacity: "Drive-Kapazität"
alwaysMarkNsfw: "Dateien immer als NSFW markieren"
pinMax: "Maximale Anzahl an angehefteten Notizen"
antennaMax: "Maximale Anzahl an Antennen"
wordMuteMax: "Maximale Zeichenlänge für Wortstummschaltungen"
@@ -1302,10 +1410,10 @@ _role:
or: "ODER-Bedingung"
not: "NICHT-Bedingung"
_sensitiveMediaDetection:
description: "Ermöglicht eine Erleichterung der Servermoderation durch die automatische Erkennungen von NSFW-Medien unter Verwendung von Machine Learning. Hierdurch wird die Serverlast etwas erhöht."
description: "Ermöglicht eine Erleichterung der Servermoderation durch die automatische Erkennungen von sensiblen Medien unter Verwendung von Machine Learning. Hierdurch wird die Serverlast etwas erhöht."
sensitivity: "Erkennungssensitivität"
sensitivityDescription: "Durch das Senken der Sensitivität kann die Anzahl an Fehlerkennungen (sog. false positives) reduziert werden. Durch ein Erhöhen dieser kann die Anzahl an verpassten Erkennungen (sog. false negatives) reduziert werden."
setSensitiveFlagAutomatically: "Als NSFW markieren"
setSensitiveFlagAutomatically: "Als sensibel markieren"
setSensitiveFlagAutomaticallyDescription: "Die Resultate der internen Erkennung werden beibehalten, auch wenn diese Option deaktiviert ist."
analyzeVideos: "Videoanalyse aktivieren"
analyzeVideosDescription: "Analysiert zusätzlich zu Bildern auch Videos. Die Last des Servers wird hierdurch etwas erhöht."
@@ -1334,6 +1442,7 @@ _ad:
back: "Zurück"
reduceFrequencyOfThisAd: "Diese Werbung weniger anzeigen"
hide: "Ausblenden"
timezoneinfo: "Der Wochentag wird durch die Serverzeitzone bestimmt."
_forgotPassword:
enterEmail: "Gib die Email-Adresse ein, mit der du dich registriert hast. An diese wird ein Link gesendet, mit dem du dein Passwort zurücksetzen kannst."
ifNoEmail: "Solltest du bei der Registrierung keine Email-Adresse angegeben haben, wende dich bitte an den Administrator."
@@ -1385,9 +1494,9 @@ _aboutMisskey:
donate: "An Misskey spenden"
morePatrons: "Wir schätzen ebenso die Unterstützung vieler anderer hier nicht gelisteter Personen sehr. Danke! 🥰"
patrons: "UnterstützerInnen"
_nsfw:
respect: "Als NSFW markierte Bilder verbergen"
ignore: "Als NSFW markierte Bilder nicht verbergen"
_displayOfSensitiveMedia:
respect: "Sensible Medien verbergen"
ignore: "Sensible Medien anzeigen"
force: "Alle Medien verbergen"
_instanceTicker:
none: "Nie anzeigen"
@@ -1407,6 +1516,8 @@ _channel:
following: "Gefolgt"
usersCount: "{n} Teilnehmer"
notesCount: "{n} Notizen"
nameAndDescription: "Name und Beschreibung"
nameOnly: "Nur Name"
_menuDisplay:
sideFull: "Seitlich"
sideIcon: "Seitlich (Icons)"
@@ -1524,32 +1635,16 @@ _time:
minute: "Minute(n)"
hour: "Stunde(n)"
day: "Tag(en)"
_tutorial:
_timelineTutorial:
title: "Wie du Misskey verwendest"
step1_1: "Willkommen!"
step1_2: "Diese Seite ist die „Chronik“. Sie zeigt dir deine geschrieben „Notizen“ sowie die aller Benutzer, denen du folgst, in chronologischer Reihenfolge."
step1_3: "Deine Chronik sollte momentan leer sein, da du bis jetzt noch keine Notizen geschrieben hast und auch noch keinen Benutzern folgst."
step2_1: "Lass uns zuerst dein Profil vervollständigen, bevor du Notizen schreibst oder jemandem folgst."
step2_2: "Informationen darüber, was für eine Person du bist, macht es anderen leichter zu wissen, ob sie deine Notizen sehen wollen und ob sie dir folgen möchten."
step3_1: "Mit dem Einrichten deines Profils fertig?"
step3_2: "Dann lass uns als nächstes versuchen, eine Notiz zu schreiben. Dies kannst du tun, indem du auf den Knopf mit dem Stift-Icon auf dem Bildschirm drückst."
step3_3: "Fülle das Fenster aus und drücke auf den Knopf oben rechts zum Senden."
step3_4: "Fällt dir nichts ein, das du schreiben möchtest? Versuch's mit \"Hallo Misskey!\""
step4_1: "Fertig mit dem Senden deiner ersten Notiz?"
step4_2: "Falls deine Notiz nun in deiner Chronik auftaucht, hast du alles richtig gemacht."
step5_1: "Lass uns nun deiner Chronik etwas mehr Leben einhauchen, indem du einigen anderen Benutzern folgst."
step5_2: "{featured} zeigt dir beliebte Notizen dieser Instanz. In {explore} kannst du beliebte Benutzer finden. Schau dort, ob du Benutzer findest, die dich interessieren."
step5_3: "Klicke zum Anzeigen des Profils eines Benutzers auf dessen Profilbild und dann auf den \"Folgen\"-Knopf, um diesem zu folgen."
step5_4: "Je nach Benutzer kann es etwas Zeit in Anspruch nehmen, bis dieser deine Follow-Anfrage bestätigt."
step6_1: "Wenn du nun auch die Notizen anderer Benutzer in deiner Chronik siehst, hast du auch diesmal alles richtig gemacht."
step6_2: "Du kannst ebenso „Reaktionen“ verwenden, um schnell auf Notizen anderer Benutzer zu reagieren."
step6_3: "Um eine Reaktion anzufügen, klicke auf das „+“-Symbol in der Notiz und wähle ein Emoji aus, mit dem du reagieren möchtest."
step7_1: "Glückwunsch! Du hast die Einführung in die Verwendung von Misskey abgeschlossen."
step7_2: "Wenn du mehr über Misskey lernen möchtest, schau dich im {help}-Bereich um."
step7_3: "Und nun, viel Spaß mit Misskey! 🚀"
step8_1: "Möchtest du abschließend Push-Benachrichtigungen aktivieren?"
step8_2: "Push-Benachrichtigungen erlauben es dir, über Reaktionen, Follows oder Erwähnungen usw. zu erfahren, auch wenn Misskey zu dieser Zeit nicht geöffnet ist."
step8_3: "Diese Einstellung kannst du jederzeit ändern."
step1_1: "Dieser Bildschirm ist die \"Chronik\". Hier werden alle \"Notizen\" von {name} angezeigt."
step1_2: "Es gibt einige verschiedene Chroniken. Beispielsweise werden in der \"Startseite\" alle Notizen von Nutzern, denen du folgst, angezeigt, und in der \"Lokalen Chronik\" werden Notizen aller Nutzer auf {name} angezeigt."
step2_1: "Lass uns als nächstes versuchen, eine Notiz zu schreiben. Dies kannst du tun, indem du auf den Knopf mit dem Stift-Icon drückst."
step2_2: "Stell dich den anderen vor oder schreibe einfach \"Hallo {name}!\", wenn du darauf keine Lust hast oder dir nichts einfällt."
step3_1: "Fertig mit dem Senden deiner ersten Notiz?"
step3_2: "Falls deine Notiz nun in deiner Chronik auftaucht, hast du alles richtig gemacht."
step4_1: "Notizen können zusätzlich mit \"Reaktionen\" ausgestattet werden."
step4_2: "Um eine Reaktion anzufügen, klicke auf das „+“-Symbol einer Notiz und wähle ein Emoji aus, mit dem du reagieren möchtest."
_2fa:
alreadyRegistered: "Du hast bereits ein Gerät für Zwei-Faktor-Authentifizierung registriert."
registerTOTP: "Authentifizierungs-App registrieren"
@@ -1887,6 +1982,7 @@ _deck:
channel: "Kanal"
mentions: "Erwähnungen"
direct: "Direktnachrichten"
roleTimeline: "Rollenchronik"
_dialog:
charactersExceeded: "Maximallänge überschritten! Momentan {current} von {max}"
charactersBelow: "Minimallänge unterschritten! Momentan {current} von {min}"

View File

@@ -172,11 +172,11 @@ explore: "Εξερευνήστε"
messageRead: "Διαβάστηκε"
startMessaging: "Ξεκινήστε μία συνομιλία"
nUsersRead: "διαβάστηκε από {n}"
tos: "Όροι χρήσης"
start: "Ας αρχίσουμε"
home: "Κεντρικό"
activity: "Δραστηριότητα"
images: "Εικόνες"
image: "Εικόνες"
birthday: "Γενέθλια"
registeredDate: "Έγινε μέλος στις"
location: "Τοποθεσία"

View File

@@ -20,6 +20,7 @@ noNotes: "No notes"
noNotifications: "No notifications"
instance: "Instance"
settings: "Settings"
notificationSettings: "Notification Settings"
basicSettings: "Basic Settings"
otherSettings: "Other Settings"
openInWindow: "Open in window"
@@ -51,6 +52,10 @@ addToList: "Add to list"
sendMessage: "Send a message"
copyRSS: "Copy RSS"
copyUsername: "Copy username"
copyUserId: "Copy user ID"
copyNoteId: "Copy note ID"
copyFileId: "Copy file ID"
copyFolderId: "Copy folder ID"
searchUser: "Search for a user"
reply: "Reply"
loadMore: "Load more"
@@ -109,7 +114,7 @@ pinnedNote: "Pinned note"
pinned: "Pin to profile"
you: "You"
clickToShow: "Click to show"
sensitive: "NSFW"
sensitive: "Sensitive"
add: "Add"
reaction: "Reactions"
reactions: "Reactions"
@@ -117,8 +122,8 @@ reactionSetting: "Reactions to show in the reaction picker"
reactionSettingDescription2: "Drag to reorder, click to delete, press \"+\" to add."
rememberNoteVisibility: "Remember note visibility settings"
attachCancel: "Remove attachment"
markAsSensitive: "Mark as NSFW"
unmarkAsSensitive: "Unmark as NSFW"
markAsSensitive: "Mark as sensitive"
unmarkAsSensitive: "Unmark as sensitive"
enterFileName: "Enter filename"
mute: "Mute"
unmute: "Unmute"
@@ -133,8 +138,10 @@ unblockConfirm: "Are you sure that you want to unblock this account?"
suspendConfirm: "Are you sure that you want to suspend this account?"
unsuspendConfirm: "Are you sure that you want to unsuspend this account?"
selectList: "Select a list"
editList: "Edit list"
selectChannel: "Select a channel"
selectAntenna: "Select an antenna"
editAntenna: "Edit antenna"
selectWidget: "Select a widget"
editWidgets: "Edit widgets"
editWidgetsExit: "Done"
@@ -262,14 +269,16 @@ noMoreHistory: "There is no further history"
startMessaging: "Start a new chat"
nUsersRead: "read by {n}"
agreeTo: "I agree to {0}"
agree: "Agree"
agreeBelow: "I agree to the below"
basicNotesBeforeCreateAccount: "Important notes"
tos: "Terms of Service"
termsOfService: "Terms of Service"
start: "Begin"
home: "Home"
remoteUserCaution: "As this user is from a remote instance, the shown information may be incomplete."
activity: "Activity"
images: "Images"
image: "Image"
birthday: "Birthday"
yearsOld: "{age} years old"
registeredDate: "Joined on"
@@ -306,7 +315,7 @@ copyUrl: "Copy URL"
rename: "Rename"
avatar: "Avatar"
banner: "Banner"
nsfw: "NSFW"
displayOfSensitiveMedia: "Display of sensitive media"
whenServerDisconnected: "When losing connection to the server"
disconnectedFromServer: "Connection to server has been lost"
reload: "Refresh"
@@ -467,12 +476,14 @@ enableAdvancedMfm: "Enable advanced MFM"
enableAnimatedMfm: "Enable animated MFM"
doing: "Processing..."
category: "Category"
tags: "Tags"
tags: "Aliases"
docSource: "Source of this document"
createAccount: "Create account"
existingAccount: "Existing account"
regenerate: "Regenerate"
fontSize: "Font size"
mediaListWithOneImageAppearance: "Height of media lists with one image only"
limitTo: "Limit to {x}"
noFollowRequests: "You don't have any pending follow requests"
openImageInNewTab: "Open images in new tab"
dashboard: "Dashboard"
@@ -555,6 +566,7 @@ accountDeletedDescription: "This account has been deleted."
menu: "Menu"
divider: "Divider"
addItem: "Add Item"
rearrange: "Rearrange"
relays: "Relays"
addRelay: "Add Relay"
inboxUrl: "Inbox URL"
@@ -685,7 +697,7 @@ driveUsage: "Drive space usage"
noCrawle: "Reject crawler indexing"
noCrawleDescription: "Ask search engines to not index your profile page, notes, Pages, etc."
lockedAccountInfo: "Unless you set your note visiblity to \"Followers only\", your notes will be visible to anyone, even if you require followers to be manually approved."
alwaysMarkSensitive: "Mark as NSFW by default"
alwaysMarkSensitive: "Mark as sensitive by default"
loadRawImages: "Load original images instead of showing thumbnails"
disableShowingAnimatedImages: "Don't play animated images"
verificationEmailSent: "A verification email has been sent. Please follow the included link to complete verification."
@@ -698,6 +710,8 @@ contact: "Contact"
useSystemFont: "Use the system's default font"
clips: "Clips"
experimentalFeatures: "Experimental features"
experimental: "Experimental"
thisIsExperimentalFeature: "This is an experimental feature. Its functionality is subject to change, and it may not operate as intended."
developer: "Developer"
makeExplorable: "Make account visible in \"Explore\""
makeExplorableDescription: "If you turn this off, your account will not show up in the \"Explore\" section."
@@ -782,6 +796,7 @@ noMaintainerInformationWarning: "Maintainer information is not configured."
noBotProtectionWarning: "Bot protection is not configured."
configure: "Configure"
postToGallery: "Create new gallery post"
postToHashtag: "Post to this hashtag"
gallery: "Gallery"
recentPosts: "Recent posts"
popularPosts: "Popular posts"
@@ -815,6 +830,7 @@ translatedFrom: "Translated from {x}"
accountDeletionInProgress: "Account deletion is currently in progress"
usernameInfo: "A name that identifies your account from others on this server. You can use the alphabet (a~z, A~Z), digits (0~9) or underscores (_). Usernames cannot be changed later."
aiChanMode: "Ai Mode"
devMode: "Developer mode"
keepCw: "Keep content warnings"
pubSub: "Pub/Sub Accounts"
lastCommunication: "Last communication"
@@ -824,6 +840,8 @@ breakFollow: "Remove follower"
breakFollowConfirm: "Really remove this follower?"
itsOn: "Enabled"
itsOff: "Disabled"
on: "On"
off: "Off"
emailRequiredForSignup: "Require email address for sign-up"
unread: "Unread"
filter: "Filter"
@@ -898,15 +916,16 @@ type: "Type"
speed: "Speed"
slow: "Slow"
fast: "Fast"
sensitiveMediaDetection: "Detection of NSFW media"
sensitiveMediaDetection: "Detection of sensitive media"
localOnly: "Local only"
remoteOnly: "Remote only"
failedToUpload: "Upload failed"
cannotUploadBecauseInappropriate: "This file could not be uploaded because parts of it have been detected as potentially NSFW."
cannotUploadBecauseInappropriate: "This file could not be uploaded because parts of it have been detected as potentially inappropriate."
cannotUploadBecauseNoFreeSpace: "Upload failed due to lack of Drive capacity."
cannotUploadBecauseExceedsFileSizeLimit: "This file cannot be uploaded as it exceeds the file size limit."
beta: "Beta"
enableAutoSensitive: "Automatic NSFW-Marking"
enableAutoSensitiveDescription: "Allows automatic detection and marking of NSFW media through Machine Learning where possible. Even if this option is disabled, it may be enabled instance-wide."
enableAutoSensitive: "Automatic marking as sensitive"
enableAutoSensitiveDescription: "Allows automatic detection and marking of sensitive media through Machine Learning where possible. Even if this option is disabled, it may be enabled instance-wide."
activeEmailValidationDescription: "Enables stricter validation of email addresses, which includes checking for disposable addresses and by whether it can actually be communicated with. When unchecked, only the format of the email is validated."
navbar: "Navigation bar"
shuffle: "Shuffle"
@@ -917,8 +936,8 @@ subscribePushNotification: "Enable push notifications"
unsubscribePushNotification: "Disable push notifications"
pushNotificationAlreadySubscribed: "Push notifications are already enabled"
pushNotificationNotSupported: "Your browser or instance does not support push notifications"
sendPushNotificationReadMessage: "Delete push notifications once the relevant notifications or messages have been read"
sendPushNotificationReadMessageCaption: "A notification containing the text \"{emptyPushNotificationMessage}\" will be displayed for a short time. This may increase the power consumption of your device."
sendPushNotificationReadMessage: "Delete push notifications once they have been read"
sendPushNotificationReadMessageCaption: "This may increase the power consumption of your device."
windowMaximize: "Maximize"
windowMinimize: "Minimize"
windowRestore: "Restore"
@@ -937,6 +956,7 @@ didYouLikeMisskey: "Have you taken a liking to Misskey?"
pleaseDonate: "{host} uses the free software, Misskey. We would highly appreciate your donations so development of Misskey can continue!"
roles: "Roles"
role: "Role"
noRole: "Role not found"
normalUser: "Normal user"
undefined: "Undefined"
assign: "Assign"
@@ -946,6 +966,10 @@ manageCustomEmojis: "Manage Custom Emojis"
youCannotCreateAnymore: "You've hit the creation limit."
cannotPerformTemporary: "Temporarily unavailable"
cannotPerformTemporaryDescription: "This action cannot be performed temporarily due to exceeding the execution limit. Please wait for a while and then try again."
invalidParamError: "Invalid parameters"
invalidParamErrorDescription: "The request parameters are invalid. This is normally caused by a bug, but may also be due to inputs exceeding size limits or similar."
permissionDeniedError: "Operation denied"
permissionDeniedErrorDescription: "This account does not have the permission to perform this action."
preset: "Preset"
selectFromPresets: "Choose from presets"
achievements: "Achievements"
@@ -971,11 +995,14 @@ postToTheChannel: "Post to channel"
cannotBeChangedLater: "This cannot be changed later."
reactionAcceptance: "Reaction Acceptance"
likeOnly: "Only likes"
likeOnlyForRemote: "Only likes for remote instances"
likeOnlyForRemote: "All (Only likes for remote instances)"
nonSensitiveOnly: "Non-sensitive only"
nonSensitiveOnlyForLocalLikeOnlyForRemote: "Non-sensitive only (Only likes from remote)"
rolesAssignedToMe: "Roles assigned to me"
resetPasswordConfirm: "Really reset your password?"
sensitiveWords: "Sensitive words"
sensitiveWordsDescription: "The visibility of all notes containing any of the configured words will be set to \"Home\" automatically. You can list multiple by separating them via line breaks."
sensitiveWordsDescription2: "Using spaces will create AND expressions and surrounding keywords with slashes will turn them into a regular expression."
notesSearchNotAvailable: "Note search is unavailable."
license: "License"
unfavoriteConfirm: "Really remove from favorites?"
@@ -989,17 +1016,92 @@ enableChartsForFederatedInstances: "Generate remote instance data charts"
showClipButtonInNoteFooter: "Add \"Clip\" to note action menu"
largeNoteReactions: "Enlargen displayed reactions"
noteIdOrUrl: "Note ID or URL"
video: "Video"
videos: "Videos"
dataSaver: "Data Saver"
accountMigration: "Account Migration"
accountMoved: "This user has moved to a new account:"
accountMovedShort: "This account has been migrated."
operationForbidden: "Operation forbidden"
forceShowAds: "Always show ads"
addMemo: "Add memo"
editMemo: "Edit memo"
reactionsList: "Reactions"
renotesList: "Renotes"
notificationDisplay: "Notifications"
leftTop: "Top left"
rightTop: "Top right"
leftBottom: "Bottom left"
rightBottom: "Bottom right"
stackAxis: "Stacking direction"
vertical: "Vertical"
horizontal: "Horizontal"
position: "Position"
serverRules: "Server rules"
pleaseConfirmBelowBeforeSignup: "Please confirm the below before signing up."
pleaseAgreeAllToContinue: "You must agree to all above fields to continue."
continue: "Continue"
preservedUsernames: "Reserved usernames"
preservedUsernamesDescription: "List usernames to reserve separated by linebreaks. These will become unable during normal account creation, but can be used by administrators to manually create accounts. Already existing accounts using these usernames will not be affected."
createNoteFromTheFile: "Compose note from this file"
archive: "Archive"
channelArchiveConfirmTitle: "Really archive {name}?"
channelArchiveConfirmDescription: "An archived channel won't appear in the channel list or search results anymore. New posts can also not be added to it anymore."
thisChannelArchived: "This channel has been archived."
displayOfNote: "Note display"
initialAccountSetting: "Profile setup"
youFollowing: "Followed"
preventAiLearning: "Reject usage in Machine Learning (Generative AI)"
preventAiLearningDescription: "Requests crawlers to not use posted text or image material etc. in machine learning (Predictive / Generative AI) data sets. This is achieved by adding a \"noai\" HTML-Response flag to the respective content. A complete prevention can however not be achieved through this flag, as it may simply be ignored."
options: "Options"
specifyUser: "Specific user"
failedToPreviewUrl: "Could not preview"
update: "Update"
rolesThatCanBeUsedThisEmojiAsReaction: "Roles that can use this emoji as reaction"
rolesThatCanBeUsedThisEmojiAsReactionEmptyDescription: "If no roles are specified, anyone can use this emoji as reaction."
rolesThatCanBeUsedThisEmojiAsReactionPublicRoleWarn: "These roles must be public."
cancelReactionConfirm: "Really delete your reaction?"
changeReactionConfirm: "Really change your reaction?"
later: "Later"
goToMisskey: "To Misskey"
additionalEmojiDictionary: "Additional emoji dictionaries"
installed: "Installed"
branding: "Branding"
enableServerMachineStats: "Publish server hardware stats"
enableIdenticonGeneration: "Enable user identicon generation"
turnOffToImprovePerformance: "Turning this off can increase performance."
_initialAccountSetting:
accountCreated: "Your account was successfully created!"
letsStartAccountSetup: "For starters, let's set up your profile."
letsFillYourProfile: "First, let's set up your profile."
profileSetting: "Profile settings"
privacySetting: "Privacy settings"
theseSettingsCanEditLater: "You can always change these settings later."
youCanEditMoreSettingsInSettingsPageLater: "There are many more settings you can configure from the \"Settings\" page. Be sure to visit it later."
followUsers: "Try following some users that interest you to build up your timeline."
pushNotificationDescription: "Enabling push notifications will allow you to receive notifications from {name} directly on your device."
initialAccountSettingCompleted: "Profile setup complete!"
haveFun: "Enjoy {name}!"
ifYouNeedLearnMore: "If you'd like to learn more about how to use {name} (Misskey), please visit {link}."
skipAreYouSure: "Really skip profile setup?"
laterAreYouSure: "Really do profile setup later?"
_serverRules:
description: "A set of rules to be displayed before registration. Setting a summary of the Terms of Service is recommended."
_accountMigration:
moveFrom: "Migrate another account to this one"
moveFromSub: "Create alias to another account"
moveFromLabel: "Original Account #{n}"
moveFromDescription: "You must create an alias for the account to move from on this account.\nEnter the account to migrate from in the following format: @username@server.example.com\nTo delete the alias, leave the field empty (not recommended)."
moveTo: "Migrate this account to a different one"
moveToLabel: "Account to move to:"
moveAccountDescription: "This action is irreversible. First, create an alias for this account on the account you wish to move to. Then, enter the account to move to in the following format: @person@instance.com"
moveFrom: "Migrate another account to this one"
moveFromLabel: "Account to move from:"
moveFromDescription: "Create an alias for the account to move from on this account if you wish to transfer its followers. This has to be done before the transfer! Then, enter the account to move to in the following format: @person@instance.com"
migrationConfirm: "Really migrate this account to {account}? Once started, this process cannot be stopped or taken back, and you will not be able to use this account in its original state anymore.\n\nAlso, confirm you've created an alias at the account to migrate to."
moveCannotBeUndone: "Account migration cannot be undone."
moveAccountDescription: "This will migrate your account to a different one.\n ・Followers from this account will automatically be migrated to the new account\n ・This account will unfollow all users it is currently following\n ・You will be unable to create new notes etc. on this account\n\nWhile migration of followers is automatic, you must manually prepare some steps to migrate the list of users you are following. To do so, carry out a follows export that you will later import on the new account in the settings menu. The same procedure applies to your lists as well as your muted and blocked users.\n\n(This explanation applies to Misskey v13.12.0 and later. Other ActivityPub software, such as Mastodon, might function differently.)"
moveAccountHowTo: "To migrate, first create an alias for this account on the account to move to.\nAfter you have created the alias, enter the account to move to in the following format: @username@server.example.com"
startMigration: "Migrate"
migrationConfirm: "Really migrate this account to {account}? Once started, this process cannot be stopped or taken back, and you will not be able to use this account in its original state anymore."
movedAndCannotBeUndone: "\nThis account has been migrated.\nMigration cannot be reversed."
postMigrationNote: "This account will unfollow all accounts it is currently following 24 hours after migration finishes.\nBoth the number of follows and followers will then become zero. To avoid your followers from being unable to see followers only posts of this account, they will however continue following this account."
movedTo: "New account:"
_achievements:
earnedAt: "Unlocked at"
_types:
@@ -1170,7 +1272,10 @@ _achievements:
description: "You've found the hidden treasure"
_client30min:
title: "Short break"
description: "Spend 30 minutes on Misskey"
description: "Keep Misskey opened for at least 30 minutes"
_client60min:
title: "No \"Miss\" in Misskey"
description: "Keep Misskey opened for at least 60 minutes"
_noteDeletedWithin1min:
title: "Nevermind"
description: "Delete a note within a minute of posting it"
@@ -1250,8 +1355,8 @@ _role:
condition: "Condition"
isConditionalRole: "This is a conditional role."
isPublic: "Public role"
descriptionOfIsPublic: "Anyone will be able to view a list of users assigned to this role. In addition, this role will be displayed in the profiles of assigned users."
options: "Role options"
descriptionOfIsPublic: "This role will be displayed in the profiles of assigned users."
options: "Options"
policies: "Policies"
baseRole: "Role template"
useBaseValue: "Use role template value"
@@ -1259,6 +1364,8 @@ _role:
iconUrl: "Icon URL"
asBadge: "Show as badge"
descriptionOfAsBadge: "This role's icon will be displayed next to the username of users with this role if turned on."
isExplorable: "Make role explorable"
descriptionOfIsExplorable: "This role's timeline and the list of users with this will be made public if enabled."
displayOrder: "Position"
descriptionOfDisplayOrder: "The higher the number, the higher its UI position."
canEditMembersByModerator: "Allow moderators to edit the list of members for this role"
@@ -1275,6 +1382,7 @@ _role:
canInvite: "Can create instance invite codes"
canManageCustomEmojis: "Can manage custom emojis"
driveCapacity: "Drive capacity"
alwaysMarkNsfw: "Always mark files as NSFW"
pinMax: "Maximum number of pinned notes"
antennaMax: "Maximum number of antennas"
wordMuteMax: "Maximum number of characters allowed in word mutes"
@@ -1302,10 +1410,10 @@ _role:
or: "OR-Condition"
not: "NOT-Condition"
_sensitiveMediaDetection:
description: "Reduces the effort of server moderation through automatically recognizing NSFW media via Machine Learning. This will slightly increase the load on the server."
description: "Reduces the effort of server moderation through automatically recognizing sensitive media via Machine Learning. This will slightly increase the load on the server."
sensitivity: "Detection sensitivity"
sensitivityDescription: "Reducing the sensitivity will lead to fewer misdetections (false positives) whereas increasing it will lead to fewer missed detections (false negatives)."
setSensitiveFlagAutomatically: "Mark as NSFW"
setSensitiveFlagAutomatically: "Mark as sensitive"
setSensitiveFlagAutomaticallyDescription: "The results of the internal detection will be retained even if this option is turned off."
analyzeVideos: "Enable analysis of videos"
analyzeVideosDescription: "Analyzes videos in addition to images. This will slightly increase the load on the server."
@@ -1334,6 +1442,7 @@ _ad:
back: "Back"
reduceFrequencyOfThisAd: "Show this ad less"
hide: "Hide"
timezoneinfo: "The day of the week is determined from the server's timezone."
_forgotPassword:
enterEmail: "Enter the email address you used to register. A link with which you can reset your password will then be sent to it."
ifNoEmail: "If you did not use an email during registration, please contact the instance administrator instead."
@@ -1385,9 +1494,9 @@ _aboutMisskey:
donate: "Donate to Misskey"
morePatrons: "We also appreciate the support of many other helpers not listed here. Thank you! 🥰"
patrons: "Patrons"
_nsfw:
respect: "Hide NSFW media"
ignore: "Don't hide NSFW media"
_displayOfSensitiveMedia:
respect: "Hide media marked as sensitive"
ignore: "Display media marked as sensitive"
force: "Hide all media"
_instanceTicker:
none: "Never show"
@@ -1407,6 +1516,8 @@ _channel:
following: "Followed"
usersCount: "{n} Participants"
notesCount: "{n} Notes"
nameAndDescription: "Name and description"
nameOnly: "Name only"
_menuDisplay:
sideFull: "Side"
sideIcon: "Side (Icons)"
@@ -1524,32 +1635,16 @@ _time:
minute: "Minute(s)"
hour: "Hour(s)"
day: "Day(s)"
_tutorial:
_timelineTutorial:
title: "How to use Misskey"
step1_1: "Welcome!"
step1_2: "This page is called the \"timeline\". It shows chronologically ordered \"notes\" of people who you \"follow\"."
step1_3: "Your timeline is currently empty, since you have not posted any notes or followed anyone yet."
step2_1: "Let's finish setting up your profile before writing a note or following anyone."
step2_2: "Providing some information about who you are will make it easier for others to tell if they want to see your notes or follow you."
step3_1: "Finished setting up your profile?"
step3_2: "Then let's try posting a note next. You can do so by pressing the button with a pencil icon on the screen."
step3_3: "Fill in the modal and press the button on the top right to post."
step3_4: "Have nothing to say? Try \"just setting up my msky\"!"
step4_1: "Finished posting your first note?"
step4_2: "Hurray! Now your first note should be displayed on your timeline."
step5_1: "Now, let's try making your timeline more lively by following other people."
step5_2: "{featured} will show you popular notes in this instance. {explore} will let you find popular users. Try finding people you'd like to follow there!"
step5_3: "To follow other users, click on their icon and press the \"Follow\" button on their profile."
step5_4: "If the other user has a lock icon next to their name, it may take some time for that user to manually approve your follow request."
step6_1: "You should be able to see other users' notes on your timeline now."
step6_2: "You can also put \"reactions\" on other people's notes to quickly respond to them."
step6_3: "To attach a \"reaction\", press the \"+\" mark on another user's note and choose an emoji you'd like to react with."
step7_1: "Congratulations! You have now finished Misskey's basic tutorial."
step7_2: "If you would like to learn more about Misskey, try the {help} section."
step7_3: "Now then, have fun with Misskey! 🚀"
step8_1: "Lastly, would you like to enable push notifications?"
step8_2: "Enabling these will allow you to receive notifications for mentions, reactions, follows, etc. even when Misskey is not opened."
step8_3: "You can always change this setting later."
step1_1: "This is the \"timeline\". All \"notes\" submitted on {name} will be chronologically displayed here."
step1_2: "There are a few different timelines. For example, the \"Home timeline\" will contain notes of users you follow, and the \"Local timeline\" will contain notes from all users of {name}."
step2_1: "Let's try posting a note next. You can do so by pressing the button with a pencil icon."
step2_2: "How about writing a self-introduction, or just \"Hello {name}!\" if you don't feel like it?"
step3_1: "Finished posting your first note?"
step3_2: "Your first note should now be displayed on your timeline."
step4_1: "You can also attach \"Reactions\" to notes."
step4_2: "To attach a reaction, press the \"+\" mark on a note and choose an emoji you'd like to react with."
_2fa:
alreadyRegistered: "You have already registered a 2-factor authentication device."
registerTOTP: "Register authenticator app"
@@ -1887,6 +1982,7 @@ _deck:
channel: "Channel"
mentions: "Mentions"
direct: "Direct notes"
roleTimeline: "Role Timeline"
_dialog:
charactersExceeded: "You've exceeded the maximum character limit! Currently at {current} of {max}."
charactersBelow: "You're below the minimum character limit! Currently at {current} of {min}."

View File

@@ -20,6 +20,7 @@ noNotes: "No hay notas"
noNotifications: "No hay notificaciones"
instance: "Instancia"
settings: "Configuración"
notificationSettings: "Configurar las notificaciones"
basicSettings: "Configuración Básica"
otherSettings: "Configuración avanzada"
openInWindow: "Abrir en una ventana"
@@ -51,6 +52,8 @@ addToList: "Agregar a lista"
sendMessage: "Enviar un mensaje"
copyRSS: "Copiar RSS"
copyUsername: "Copiar nombre de usuario"
copyUserId: "Copiar ID del usuario"
copyNoteId: "Copiar ID de la nota"
searchUser: "Buscar un usuario"
reply: "Responder"
loadMore: "Ver más"
@@ -133,8 +136,10 @@ unblockConfirm: "¿Quiere dejar de bloquear esta cuenta?"
suspendConfirm: "¿Quiere suspender esta cuenta?"
unsuspendConfirm: "¿Quiere dejar de suspender esta cuenta?"
selectList: "Seleccione una lista"
editList: "Editar lista"
selectChannel: "Seleccionar canal"
selectAntenna: "Seleccionar antena"
editAntenna: "Editar antena"
selectWidget: "Seleccionar widget"
editWidgets: "Editar widgets"
editWidgetsExit: "Terminar edición"
@@ -228,10 +233,10 @@ instanceFollowers: "Seguidores de la instancia"
instanceUsers: "Usuarios de la instancia"
changePassword: "Cambiar contraseña"
security: "Seguridad"
retypedNotMatch: "No hay coincidencia"
retypedNotMatch: "La información no coincide."
currentPassword: "Contraseña actual"
newPassword: "Contraseña nueva"
newPasswordRetype: "Contraseña nueva (repetir)"
newPasswordRetype: "Reescribe contraseña nueva"
attachFile: "Añadir archivo"
more: "¡Más!"
featured: "Destacados"
@@ -262,14 +267,16 @@ noMoreHistory: "El historial se ha acabado"
startMessaging: "Iniciar chat"
nUsersRead: "Leído por {n} personas"
agreeTo: "De acuerdo con {0}"
agree: "De acuerdo."
agreeBelow: "Estoy de acuerdo con lo siguiente"
basicNotesBeforeCreateAccount: "Notas básicas"
tos: "Términos de uso"
termsOfService: "Términos y condiciones"
start: "Comenzar"
home: "Inicio"
remoteUserCaution: "Para el usuario remoto, la información está incompleta"
activity: "Actividad"
images: "Imágenes"
image: "Imágenes"
birthday: "Fecha de nacimiento"
yearsOld: "{age} años"
registeredDate: "Fecha de registro"
@@ -306,7 +313,6 @@ copyUrl: "Copiar URL"
rename: "Renombrar"
avatar: "Avatar"
banner: "Banner"
nsfw: "Marcado como sensible"
whenServerDisconnected: "Cuando se pierda la conexión con el servidor"
disconnectedFromServer: "Desconectado del servidor"
reload: "Recargar"
@@ -430,7 +436,7 @@ title: "Título"
text: "Texto"
enable: "Activar"
next: "Siguiente"
retype: "Intentar de nuevo"
retype: "Ingrese de nuevo"
noteOf: "Notas de {user}"
quoteAttached: "Cita añadida"
quoteQuestion: "¿Quiere añadir una cita?"
@@ -450,7 +456,7 @@ weakPassword: "Contraseña débil"
normalPassword: "Buena contraseña"
strongPassword: "Muy buena contraseña"
passwordMatched: "Correcto"
passwordNotMatched: "Las contraseñas no son las mismas"
passwordNotMatched: "Las contraseñas no coinciden"
signinWith: "Inicie sesión con {x}"
signinFailed: "Autenticación fallida. Asegúrate de haber usado el nombre de usuario y contraseña correctos."
or: "O"
@@ -473,6 +479,8 @@ createAccount: "Crear cuenta"
existingAccount: "Cuenta existente"
regenerate: "Regenerar"
fontSize: "Tamaño de la letra"
mediaListWithOneImageAppearance: "Altura de la lista de medios con una sola imagen."
limitTo: "{x} hasta un máximo de"
noFollowRequests: "No hay solicitudes de seguimiento"
openImageInNewTab: "Abrir imagen en nueva pestaña"
dashboard: "Panel de control"
@@ -555,6 +563,7 @@ accountDeletedDescription: "Esta cuenta ha sido borrada."
menu: "Menú"
divider: "Divisor"
addItem: "Agregar elemento"
rearrange: "Ordenar"
relays: "Relés"
addRelay: "Agregar relé"
inboxUrl: "Inbox URL"
@@ -698,6 +707,8 @@ contact: "Contacto"
useSystemFont: "Utilizar la tipografía por defecto del sistema"
clips: "Clip"
experimentalFeatures: "Características experimentales"
experimental: "Función experimental"
thisIsExperimentalFeature: "Se trata de una función experimental. Las especificaciones pueden cambiar o puede que no funcione correctamente."
developer: "Desarrolladores"
makeExplorable: "Hacer visible la cuenta en \"Explorar\""
makeExplorableDescription: "Si desactiva esta opción, su cuenta no aparecerá en la sección \"Explorar\"."
@@ -782,8 +793,9 @@ noMaintainerInformationWarning: "No se ha establecido la información del admini
noBotProtectionWarning: "La protección contra los bots no está configurada"
configure: "Configurar"
postToGallery: "Crear una nueva publicación en la galería"
postToHashtag: "Publicar a este hashtag"
gallery: "Galería"
recentPosts: "Posts recientes"
recentPosts: "Publicaciones recientes"
popularPosts: "Más vistos"
shareWithNote: "Compartir con una nota"
ads: "Anuncios"
@@ -815,6 +827,7 @@ translatedFrom: "Traducido de {x}"
accountDeletionInProgress: "La eliminación de la cuenta está en curso"
usernameInfo: "Un nombre que identifique su cuenta de otras en este servidor. Puede utilizar el alfabeto (a~z, A~Z), dígitos (0~9) o guiones bajos (_). Los nombres de usuario no se pueden cambiar posteriormente."
aiChanMode: "Modo Ai"
devMode: "Modo de desarrollador"
keepCw: "Mantener la advertencia de contenido"
pubSub: "Cuentas Pub/Sub"
lastCommunication: "Última comunicación"
@@ -824,9 +837,11 @@ breakFollow: "Dejar de seguir"
breakFollowConfirm: "¿Quieres dejar de seguir?"
itsOn: "¡Está encendido!"
itsOff: "¡Está apagado!"
emailRequiredForSignup: "Se requere una dirección de correo electrónico para el registro de la cuenta"
on: "Activado"
off: "Desactivado"
emailRequiredForSignup: "Se requiere una dirección de correo electrónico para el registro de la cuenta"
unread: "No leído"
filter: "Filtro"
filter: "Filtrar"
controlPanel: "Panel de control"
manageAccounts: "Administrar cuenta"
makeReactionsPublic: "Hacer el historial de reacciones público"
@@ -904,6 +919,7 @@ remoteOnly: "Sólo remoto"
failedToUpload: "La subida falló"
cannotUploadBecauseInappropriate: "Este archivo no se puede subir debido a que algunas partes han sido detectadas comoNSFW."
cannotUploadBecauseNoFreeSpace: "La subida falló debido a falta de espacio libre en la unidad del usuario."
cannotUploadBecauseExceedsFileSizeLimit: "Este archivo supera el peso máximo y no puede ser subido."
beta: "Beta"
enableAutoSensitive: "Marcar automáticamente contenido NSFW"
enableAutoSensitiveDescription: "Permite la detección y marcado automático de contenido NSFW usando 'Machine Learning' cuando sea posible. Incluso si esta opción está desactivada, puede ser activado para toda la instancia."
@@ -934,18 +950,23 @@ show: "Apariencia"
neverShow: "No mostrar de nuevo"
remindMeLater: "Recordar después"
didYouLikeMisskey: "¿Te gusta Misskey?"
pleaseDonate: "Misskey es software libre, y es usado por {host} . Por favor, ¡considera donar al proyecto principal para que podamos continuar!"
pleaseDonate: "{host} usa el software gratuito Misskey. Por favor ¡Considera donar al proyecto principal para que podamos continuar!"
roles: "Roles"
role: "Roles"
role: "Rol"
noRole: "Rol no encontrado"
normalUser: "Usuario normal"
undefined: "Indefinido"
assign: "Asignar"
unassign: "Quitar"
color: "Color"
manageCustomEmojis: "Administrar emojis personalizados"
youCannotCreateAnymore: "Se alcanzó el límite de creación"
cannotPerformTemporary: "Indisponible temporalmente"
youCannotCreateAnymore: "Has llegado al límite de creaciones."
cannotPerformTemporary: "Temporalmente no disponible"
cannotPerformTemporaryDescription: "Esta acción no se puede realizar porque se excedió el límite de ejecución. Espera un poco y prueba de nuevo."
invalidParamError: "Parámetros inválidos"
invalidParamErrorDescription: "Los parámetros de la solicitud son inválidos. Normalmente se trata de un error, pero también puede haberse excedido algún límite o similares."
permissionDeniedError: "Operación denegada"
permissionDeniedErrorDescription: "Esta cuenta no tiene permisos para hacer esa acción."
preset: "Predefinido"
selectFromPresets: "Escoger desde predefinidos"
achievements: "Logros"
@@ -961,7 +982,7 @@ internalServerErrorDescription: "El servidor tuvo un error inesperado."
copyErrorInfo: "Copiar detalles del error"
joinThisServer: "Registrarse en esta instancia"
exploreOtherServers: "Buscar otra instancia"
letsLookAtTimeline: "Mirar la línea de tiempo local"
letsLookAtTimeline: "Mira la línea de tiempo"
disableFederationConfirm: "¿Estas seguro que quieres desactivar la federación?"
disableFederationConfirmWarn: "Aunque no exista federación los posts no serán marcados como privados. En la mayoría de los casos, no es necesario hacer los posts no federar."
disableFederationOk: "Desactivar."
@@ -972,6 +993,7 @@ cannotBeChangedLater: "Esto no podrá ser cambiado después."
reactionAcceptance: "Aceptación de reacciones"
likeOnly: "Sólo 'me gusta'"
likeOnlyForRemote: "Sólo reacciones de instancias remotas"
nonSensitiveOnly: "Solo no sensible"
rolesAssignedToMe: "Roles asignados a mí"
resetPasswordConfirm: "¿Realmente quieres cambiar la contraseña?"
sensitiveWords: "Palabras sensibles"
@@ -989,16 +1011,49 @@ enableChartsForFederatedInstances: "Generar gráficos de servidores remotos"
showClipButtonInNoteFooter: "Añadir \"Clip\" al menú de notas"
largeNoteReactions: "Agrandar las reacciones de las notas"
noteIdOrUrl: "ID o URL de la nota"
video: "Video"
videos: "Video"
dataSaver: "Ahorro de datos"
accountMigration: "Migración de cuenta"
accountMoved: "Este usuario se ha mudado a una nueva cuenta:"
accountMoved: "Este usuario se movió a una nueva cuenta:"
accountMovedShort: "Esta cuenta ha sido migrada."
addMemo: "Añadir nota"
editMemo: "Editar nota"
reactionsList: "Lista de reacciones"
renotesList: "Renotas"
stackAxis: "Dirección de apilado"
horizontal: "Horizontal"
position: "Posición"
serverRules: "Reglas del servidor"
continue: "Continuar"
preservedUsernames: "Nombre de usuario reservado"
archive: "Archivo"
channelArchiveConfirmTitle: "¿Seguro de archivar {name}?"
youFollowing: "Siguiendo"
options: "Opción"
update: "Actualizar"
installed: "Instalado"
branding: "Marca"
enableServerMachineStats: "Publicar estadísticas de hardware del servidor"
enableIdenticonGeneration: "Activar generación de identicon por usuario"
_initialAccountSetting:
accountCreated: "¡La cuenta ha sido creada!"
letsStartAccountSetup: "Para empezar, creemos tu perfil."
letsFillYourProfile: "Primero, creemos tu perfil."
profileSetting: "Configuración del perfil"
privacySetting: "Configuración de privacidad"
theseSettingsCanEditLater: "Puedes cambiar estos ajustes más tarde."
youCanEditMoreSettingsInSettingsPageLater: "Desde la pestaña de \"Configuración\" puedes modificar más ajustes. Asegúrate de visitarla después."
followUsers: "Comienza a seguir a usuarios que te interesen para construir tu línea de tiempo."
_accountMigration:
moveTo: "Mover esta cuenta a una nueva"
moveToLabel: "Cuenta destino:"
moveAccountDescription: "Esta operación no puede deshacerse. En primer lugar, asegúrese de haber creado un alias para esta cuenta en la cuenta a la que se va a trasladar. Después de crear el alias, introduzca la cuenta a la que se está trasladando de la siguiente manera: @person@instance.com"
moveFrom: "Trasladar de otra cuenta a ésta"
moveFromLabel: "Cuenta desde la que se realiza el traslado:"
moveFromDescription: "Si quieres transferir seguidores de otra cuenta a esta cuenta y trasladarlos, tendrás que crear un alias aquí. Asegúrate de crearlo antes de realizar el traslado. Introduce la cuenta desde la que estás moviendo los seguidores así: @person@instance.com"
moveTo: "Mover esta cuenta a una nueva"
moveToLabel: "Cuenta destino:"
moveAccountDescription: "Esta operación no puede deshacerse. En primer lugar, asegúrese de haber creado un alias para esta cuenta en la cuenta a la que se va a trasladar. Después de crear el alias, introduzca la cuenta a la que se está trasladando de la siguiente manera: @person@instance.com"
migrationConfirm: "¿Estás seguro de que quieres mover esta cuenta a {account}? Una vez trasladada, no podrás deshacer el traslado y no podrás volver a utilizar la cuenta original.\n\nAdemás, compruebe que ha configurado un alias en el destino del traslado."
movedTo: "Cuenta destino:"
_achievements:
earnedAt: "Desbloqueado el"
_types:
@@ -1170,6 +1225,8 @@ _achievements:
_client30min:
title: "Un descansito"
description: "30 minutos dedicados a Misskey"
_client60min:
title: "Viendo mucho Misskey."
_noteDeletedWithin1min:
title: "Ah... Mejor no..."
description: "Borrar una nota antes que de pase 1 minuto"
@@ -1273,7 +1330,7 @@ _role:
canPublicNote: "Permitir la publicación"
canInvite: "Puede crear códigos de invitación"
canManageCustomEmojis: "Administrar emojis personalizados"
driveCapacity: "Capacidad de almacenamiento"
driveCapacity: "Capacidad del drive"
pinMax: "Máximo de notas fijadas"
antennaMax: "Máximo de antenas"
wordMuteMax: "Máximo de caracteres en palabras silenciadas"
@@ -1384,10 +1441,6 @@ _aboutMisskey:
donate: "Donar a Misskey"
morePatrons: "Muchas más personas nos apoyan. Muchas gracias🥰"
patrons: "Patrocinadores"
_nsfw:
respect: "Ocultar medios NSFW"
ignore: "No esconder medios NSFW "
force: "Ocultar todos los medios"
_instanceTicker:
none: "No mostrar"
remote: "Mostrar a usuarios remotos"
@@ -1509,7 +1562,7 @@ _sfx:
channel: "Notificaciones del canal"
_ago:
future: "Futuro"
justNow: "Recién ahora"
justNow: "Justo ahora"
secondsAgo: "Hace {n} segundos"
minutesAgo: "Hace {n} minutos"
hoursAgo: "Hace {n} horas"
@@ -1523,32 +1576,9 @@ _time:
minute: "Minutos"
hour: "Horas"
day: "Días"
_tutorial:
title: "Cómo usar Misskey"
step1_1: "Bienvenido"
step1_2: "Esta imagen se llama \"Linea de tiempo\" y muestra en orden cronológico las \"notas\" tuyas y de la gente que \"sigues\""
step1_3: "Si no estás escribiendo ninguna nota y no estás siguiendo a nadie, es esperable que no se muestre nada en la linea de tiempo"
step2_1: "Antes de crear notas y seguir a alguien, primero vamos a crear tu perfil"
step2_2: "Si provees información sobre quien eres, será más fácil para que otros usuarios te sigan"
step3_1: "¿Has podido crear tu perfil sin problemas?"
step3_2: "Con esto, prueba hacer una nota. Aprieta el botón con forma de lápiz que está arriba de la imagen y abre el formulario."
step3_3: "Si has escrito el contenido, aprieta el botón que está arriba a la derecha del formulario para postear."
step3_4: "¿No se te ocurre un contenido? Prueba con decir \"Empecé a usar Misskey\""
step4_1: "¿Has posteado?"
step4_2: "Si tu nota puede verse en la linea de tiempo, fue todo un éxito."
step5_1: "Luego, ponte a seguir a otra gente y haz que tu linea de tiempo esté más animada."
step5_2: "Puedes ver las notas destacadas en {featured} y desde allí seguir a usuarios que te importan. También puedes buscar usuario destacados en {explore}."
step5_3: "Para seguir a un usuario, haz click en su avatar para ver su página de usuario y allí apretar el botón \"seguir\""
step5_4: "De esa manera, puede pasar un tiempo hasta que el usuario apruebe al seguidor."
step6_1: "Si puedes ver en la linea de tiempo las notas de otros usuarios, fue todo un éxito."
step6_2: "En las notas de otros usuarios puedes añadir una \"reacción\", para poder responder rápidamente."
step6_3: "Para añadir una reacción, haz click en el botón \"+\" de la nota y elige la reacción que prefieras."
step7_1: "Así terminó la explicación del funcionamiento básico de Misskey. Eso fue todo."
step7_2: "Si quieres conocer más sobre Misskey, prueba con la sección {help}."
step7_3: "Así, disfruta de Misskey 🚀"
step8_1: "Por último, ¿por qué no activar las notificaciones emergentes?"
step8_2: "Al recibir notificaciones emergentes, estarás al tanto de reacciones, seguimientos y menciones incluso cuando Misskey no esté abierto."
step8_3: "La configuración de las notificaciones puede modificarse posteriormente."
_timelineTutorial:
step4_1: "También puedes añadir \"Reacciones\" a notas."
step4_2: "Para añadir una reacción selecciona el botón \"+\" en la nota y escoge el emoji que quieras para reaccionar."
_2fa:
alreadyRegistered: "Ya has completado la configuración."
registerTOTP: "Registrar aplicación autenticadora"
@@ -1694,14 +1724,14 @@ _visibility:
homeDescription: "Visible sólo en la linea de tiempo de inicio"
followers: "Seguidores"
followersDescription: "Visible sólo para tus seguidores"
specified: "Mensaje directo"
specified: "Nota directa"
specifiedDescription: "Visible sólo para los usuarios elegidos"
disableFederation: "No federado"
disableFederationDescription: "No enviar a otras instancias"
_postForm:
replyPlaceholder: "Responder a esta nota"
quotePlaceholder: "Citar esta nota"
channelPlaceholder: "Postear en el canal"
channelPlaceholder: "Publicar en el canal"
_placeholders:
a: "¿Qué haces?"
b: "¿Te pasó algo?"
@@ -1885,7 +1915,7 @@ _deck:
list: "Listas"
channel: "Canal"
mentions: "Menciones"
direct: "Mensaje directo"
direct: "Notas directas"
_dialog:
charactersExceeded: "¡Has excedido el límite de caracteres! Actualmente {current} de {max}."
charactersBelow: "¡Estás por debajo del límite de caracteres! Actualmente {current} de {min}."
@@ -1893,8 +1923,8 @@ _disabledTimeline:
title: "Línea de tiempo deshabilitada"
description: "No puedes usar esta línea de tiempo con tus roles actuales."
_drivecleaner:
orderBySizeDesc: "Más grandes"
orderByCreatedAtAsc: "Más antiguos"
orderBySizeDesc: "Tamaño descendiente"
orderByCreatedAtAsc: "Fecha ascendente"
_webhookSettings:
createWebhook: "Crear Webhook"
name: "Nombre"

View File

@@ -20,6 +20,7 @@ noNotes: "Aucune note"
noNotifications: "Aucune notification"
instance: "Instance"
settings: "Paramètres"
notificationSettings: "Paramètres des notifications "
basicSettings: "Paramètres généraux"
otherSettings: "Paramètres avancés"
openInWindow: "Ouvrir dans une nouvelle fenêtre"
@@ -259,12 +260,12 @@ noMoreHistory: "Il ny a plus dhistorique"
startMessaging: "Commencer à discuter"
nUsersRead: "Lu par {n} personnes"
agreeTo: "Jaccepte {0}"
tos: "les conditions dutilisation"
start: "Commencer"
home: "Principal"
remoteUserCaution: "Les informations de ce compte risqueraient dêtre incomplètes du fait que lutilisateur·rice provient dune instance distante."
activity: "Activité"
images: "Images"
image: "Images"
birthday: "Date de naissance"
yearsOld: "{age} ans"
registeredDate: "Inscrit le"
@@ -301,7 +302,6 @@ copyUrl: "Copier lURL"
rename: "Renommer"
avatar: "Avatar"
banner: "Bannière"
nsfw: "Contenu sensible"
whenServerDisconnected: "Lorsque la connexion au serveur est perdue"
disconnectedFromServer: "Déconnecté·e du serveur"
reload: "Rafraîchir"
@@ -451,6 +451,7 @@ native: "Natif"
disableDrawer: "Les menus ne s'affichent pas dans le tiroir"
noHistory: "Pas d'historique"
signinHistory: "Historique de connexion"
enableAdvancedMfm: "Activer la MFM avancée"
doing: "En cours..."
category: "Catégorie"
tags: "Étiquettes"
@@ -838,13 +839,17 @@ tenMinutes: "10 minutes"
oneHour: "1 heure"
oneDay: "1 jour"
oneWeek: "1 semaine"
oneMonth: "Un mois"
reflectMayTakeTime: "Cela peut prendre un certain temps avant que cela ne se termine."
failedToFetchAccountInformation: "Impossible de récupérer les informations du compte."
rateLimitExceeded: "Limite de taux dépassée"
cropImage: "Recadrer l'image"
cropImageAsk: "Voulez-vous recadrer cette image ?"
cropYes: "Rogner"
cropNo: "Utiliser en l'état"
file: "Fichiers"
recentNHours: "Dernières {n} heures"
recentNDays: "Derniers {n} jours"
noEmailServerWarning: "Serveur de courrier non configuré."
thereIsUnresolvedAbuseReportWarning: "Il ny a aucun rapport non résolu."
recommended: "Recommandé"
@@ -900,11 +905,73 @@ numberOfLikes: "Favoris"
show: "Affichage"
neverShow: "Ne plus afficher"
remindMeLater: "Peut-être plus tard"
roles: "Rôles"
role: "Rôles"
noRole: "Aucun rôle"
normalUser: "Simple utilisateur·rice"
assign: "Attribuer"
color: "Couleur"
manageCustomEmojis: "Gestion des émojis personnalisés"
preset: "Préréglage"
selectFromPresets: "Sélectionner à partir des préréglages"
thisPostMayBeAnnoying: "Cette note peut gêner d'autres personnes."
thisPostMayBeAnnoyingCancel: "Annuler"
license: "Licence"
video: "Vidéo"
videos: "Vidéos"
dataSaver: "Économiseur de données"
accountMigration: "Migration de compte"
accountMoved: "Cet·te utilisateur·rice a migré son compte vers :"
addMemo: "Ajouter un mémo"
notificationDisplay: "Style des notifications"
leftTop: "En haut à gauche"
rightTop: "En haut à droite"
leftBottom: "En bas à gauche"
rightBottom: "En bas à droite"
vertical: "Vertical"
horizontal: "Latéral"
serverRules: "Règles du serveur"
youFollowing: "Abonné·e"
_achievements:
_types:
_notes1:
description: "Publiez votre première note"
flavor: "Passez un bon moment avec Misskey !"
_notes100:
title: "Beaucoup de notes"
_notes100000:
title: "ALL YOUR NOTE ARE BELONG TO US"
_login3:
title: "Débutant "
description: "Se connecter pour un total de 3 jours"
_login7:
title: "Débutant Ⅱ"
description: "Se connecter pour un total de 7 jours"
_login15:
title: "Débutant Ⅲ"
description: "Se connecter pour un total de 15 jours"
_login30:
description: "Se connecter pour un total de 30 jours"
_login60:
description: "Se connecter pour un total de 60 jours"
_login100:
description: "Se connecter pour un total de 100 jours"
_login200:
description: "Se connecter pour un total de 200 jours"
_login300:
description: "Se connecter pour un total de 300 jours"
_login400:
description: "Se connecter pour un total de 400 jours"
_login500:
description: "Se connecter pour un total de 500 jours"
_login600:
description: "Se connecter pour un total de 600 jours"
_login700:
description: "Se connecter pour un total de 700 jours"
_login800:
description: "Se connecter pour un total de 800 jours"
_login900:
description: "Se connecter pour un total de 900 jours"
_login1000:
flavor: "Merci d'utiliser Misskey !"
_markedAsCat:
@@ -912,12 +979,27 @@ _achievements:
flavor: "Je n'ai pas encore de nom"
_following50:
title: "Beaucoup d'amis"
_followers10:
title: "Abonnez-moi !"
_iLoveMisskey:
title: "Jadore Misskey"
_viewInstanceChart:
title: "Analyste"
_loggedInOnBirthday:
title: "Joyeux Anniversaire !"
_loggedInOnNewYearsDay:
title: "Bonne année !"
_cookieClicked:
flavor: "Attendez une minute, vous êtes sur le mauvais site web ?"
_role:
assignTarget: "Attribuer"
priority: "Priorité"
_priority:
low: "Basse"
middle: "Moyen"
high: "Haute"
_options:
canManageCustomEmojis: "Gestion des émojis personnalisés"
_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."
sensitivity: "Sensibilité de la détection"
@@ -1002,10 +1084,6 @@ _aboutMisskey:
donate: "Soutenir Misskey"
morePatrons: "Nous apprécions vraiment le soutien de nombreuses autres personnes non mentionnées ici. Merci à toutes et à tous ! 🥰"
patrons: "Contributeurs"
_nsfw:
respect: "Cacher les médias marqués comme contenu sensible"
ignore: "Afficher les médias sensibles"
force: "Cacher tous les médias"
_instanceTicker:
none: "Cacher "
remote: "Montrer pour les utilisateur·ice·s distant·e·s"
@@ -1141,31 +1219,6 @@ _time:
minute: "min"
hour: "h"
day: "j"
_tutorial:
title: "Comment utiliser Misskey"
step1_1: "Bienvenue,"
step1_2: "Cette page est appelée « un fil ». Elle affiche les « notes » des personnes auxquelles vous êtes abonné dans un ordre chronologique."
step1_3: "Votre fil est actuellement vide vu que vous ne suivez aucun compte et que vous navez publié aucune note, pour linstant."
step2_1: "Procédons dabord à la préparation de votre profil avant décrire une note et/ou de vous abonner à un compte."
step2_2: "En fournissant quelques informations sur vous, il sera plus facile pour les autres de sabonner à votre compte."
step3_1: "Vous avez fini de créer votre profil ?"
step3_2: "Létape suivante consiste à créer une note. Vous pouvez commencer en cliquant sur licône crayon sur lécran."
step3_3: "Remplissez le cadran et cliquez sur le bouton en haut à droite pour envoyer."
step3_4: "Vous navez rien à dire ? Essayez décrire « Jai commencé à utiliser Misskey »."
step4_1: "Avez-vous publié votre première note ?"
step4_2: "Youpi ! Celle-ci est maintenant affichée sur votre fil dactualité."
step5_1: "Maintenant, essayons de nous abonner à dautres personnes afin de rendre votre fil plus vivant."
step5_2: "La page {featured} affiche les notes en tendance sur la présente instance et {explore} vous permet de trouver des utilisateur·rice·s en tendance. Essayez de vous abonner aux gens que vous aimez !"
step5_3: "Pour pouvoir suivre dautres utilisateur·rice, cliquez sur leur avatar afin dafficher la page du profil utilisateur ensuite appuyez sur le bouton « Sabonner »."
step5_4: "Si lautre utilisateur possède une icône sous forme dun cadenas à côté de son nom, il devra accepter votre demande dabonnement manuellement."
step6_1: "Maintenant, vous êtes en mesure de voir safficher les notes des autres utilisateur·rice·s sur votre propre fil."
step6_2: "Vous avez également la possibilité dintéragir rapidement avec les notes des autres utilisateur·rice·s en ajoutant des « réactions »."
step6_3: "Pour ajouter une réaction à une note, cliquez sur le signe « + » de celle-ci et sélectionnez lémoji souhaité."
step7_1: "Félicitations ! Vous avez atteint la fin du tutoriel de base pour lutilisation de Misskey."
step7_2: "Si vous désirez en savoir plus sur Misskey, jetez un œil sur la section {help}."
step7_3: "Bon courage et amusez-vous bien sur Misskey ! 🚀"
step8_1: "Enfin, souhaitez-vous activer les notifications push ?"
step8_2: "En les activant, vous recevrez des notifications pour les mentions, les réactions, les suivis, etc., même lorsque Misskey n'est pas ouvert."
_2fa:
alreadyRegistered: "Configuration déjà achevée."
step1: "Tout d'abord, installez une application d'authentification, telle que {a} ou {b}, sur votre appareil."

72
locales/generateDTS.js Normal file
View File

@@ -0,0 +1,72 @@
import * as fs from 'node:fs';
import * as yaml from 'js-yaml';
import * as ts from 'typescript';
function createMembers(record) {
return Object.entries(record)
.map(([k, v]) => ts.factory.createPropertySignature(
undefined,
ts.factory.createStringLiteral(k),
undefined,
typeof v === 'string'
? ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)
: ts.factory.createTypeLiteralNode(createMembers(v)),
));
}
export default function generateDTS() {
const locale = yaml.load(fs.readFileSync(`${__dirname}/ja-JP.yml`, 'utf-8'));
const members = createMembers(locale);
const elements = [
ts.factory.createInterfaceDeclaration(
[ts.factory.createToken(ts.SyntaxKind.ExportKeyword)],
ts.factory.createIdentifier('Locale'),
undefined,
undefined,
members,
),
ts.factory.createVariableStatement(
[ts.factory.createToken(ts.SyntaxKind.DeclareKeyword)],
ts.factory.createVariableDeclarationList(
[ts.factory.createVariableDeclaration(
ts.factory.createIdentifier('locales'),
undefined,
ts.factory.createTypeLiteralNode([ts.factory.createIndexSignature(
undefined,
[ts.factory.createParameterDeclaration(
undefined,
undefined,
ts.factory.createIdentifier('lang'),
undefined,
ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
undefined,
)],
ts.factory.createTypeReferenceNode(
ts.factory.createIdentifier('Locale'),
undefined,
),
)]),
undefined,
)],
ts.NodeFlags.Const | ts.NodeFlags.Ambient | ts.NodeFlags.ContextFlags,
),
),
ts.factory.createExportAssignment(
undefined,
true,
ts.factory.createIdentifier('locales'),
),
];
const printed = ts.createPrinter({
newLine: ts.NewLineKind.LineFeed,
}).printList(
ts.ListFormat.MultiLine,
ts.factory.createNodeArray(elements),
ts.createSourceFile('index.d.ts', '', ts.ScriptTarget.ESNext, true, ts.ScriptKind.TS),
);
fs.writeFileSync(`${__dirname}/index.d.ts`, `/* eslint-disable */
// This file is generated by locales/generateDTS.js
// Do not edit this file directly.
${printed}`, 'utf-8');
}

View File

@@ -5,7 +5,7 @@ introMisskey: "Selamat datang! Misskey adalah perangkat mikroblog tercatu bersif
poweredByMisskeyDescription: "{name} adalah sebuah layanan (instance) yang menggunakan platform sumber terbuka <b>Misskey</b>."
monthAndDay: "{day} {month}"
search: "Penelusuran"
notifications: "Pemberitahuan"
notifications: "Notifikasi"
username: "Nama Pengguna"
password: "Kata sandi"
forgotPassword: "Lupa Kata Sandi"
@@ -17,14 +17,15 @@ noThankYou: "Tidak sekarang."
enterUsername: "Masukkan nama pengguna"
renotedBy: "direnote oleh {user}"
noNotes: "Tidak ada catatan"
noNotifications: "Tidak ada pemberitahuan"
noNotifications: "Tidak ada notifikasi"
instance: "Instansi"
settings: "Pengaturan"
notificationSettings: "Atur Notifikasi"
basicSettings: "Pengaturan umum"
otherSettings: "Pengaturan lainnya"
openInWindow: "Buka di jendela"
profile: "Profil"
timeline: "Linimasa"
timeline: "Lini masa"
noAccountDescription: "Pengguna ini belum menulis bio"
login: "Masuk"
loggingIn: "Sedang masuk"
@@ -51,6 +52,8 @@ addToList: "Tambahkan ke daftar"
sendMessage: "Kirim pesan"
copyRSS: "Salin RSS"
copyUsername: "Salin nama pengguna"
copyUserId: "Salin ID pengguna"
copyNoteId: "Salin ID catatan"
searchUser: "Cari pengguna"
reply: "Balas"
loadMore: "Selebihnya"
@@ -89,7 +92,7 @@ serverIsDead: "Tidak ada respon dari peladen. Mohon tunggu dan coba beberapa saa
youShouldUpgradeClient: "Untuk melihat halaman ini, mohon muat ulang untuk memutakhirkan klienmu."
enterListName: "Masukkan nama daftar"
privacy: "Privasi"
makeFollowManuallyApprove: "Permintaan mengikuti membutuhkan persetujuan"
makeFollowManuallyApprove: "Permintaan mengikuti butuh persetujuan"
defaultNoteVisibility: "Privasi bawaan catatan"
follow: "Ikuti"
followRequest: "Permintaan mengikuti"
@@ -114,7 +117,7 @@ add: "Tambahkan"
reaction: "Reaksi"
reactions: "Reaksi"
reactionSetting: "Reaksi untuk dimunculkan di bilah reaksi"
reactionSettingDescription2: "Geser untuk memindah urutkan, klik untuk menghapus, tekan \"+\" untuk menambahkan"
reactionSettingDescription2: "Geser untuk memindah urutan emoji, klik untuk menghapus, tekan \"+\" untuk menambahkan"
rememberNoteVisibility: "Ingat pengaturan visibilitas catatan"
attachCancel: "Hapus lampiran"
markAsSensitive: "Tandai sebagai konten sensitif"
@@ -133,8 +136,10 @@ unblockConfirm: "Apakah kamu yakin ingin membuka blokir akun ini?"
suspendConfirm: "Apakah kamu yakin ingin membekukan akun ini?"
unsuspendConfirm: "Apakah kamu yakin ingin membuka pembekuan akun ini?"
selectList: "Pilih daftar"
editList: "Sunting daftar"
selectChannel: "Pilih kanal"
selectAntenna: "Pilih Antena"
editAntenna: "Sunting antena"
selectWidget: "Pilih gawit"
editWidgets: "Sunting gawit"
editWidgetsExit: "Selesai"
@@ -145,16 +150,17 @@ emojiName: "Nama emoji"
emojiUrl: "URL Emoji"
addEmoji: "Tambahkan emoji"
settingGuide: "Pengaturan rekomendasi"
cacheRemoteFiles: "Tembolokkan berkas remote"
cacheRemoteFilesDescription: "Ketika pengaturan ini dinonaktifkan, berkas luar akan dimuat langsung dari instansi luar. Menonaktifkan ini akan mengurangi penggunaan penyimpanan, namun dapat menyebabkan meningkatkan lalu lintas bandwidth, karena thumbnail tidak dihasilkan."
cacheRemoteFiles: "Tembolokkan berkas dari instansi luar"
cacheRemoteFilesDescription: "Ketika pengaturan ini dinonaktifkan, berkas dari instansi luar akan dimuat langsung. Menonaktifkan ini akan mengurangi penggunaan penyimpanan peladen, namun dapat menyebabkan peningkatan lalu lintas bandwidth, karena keluku tidak dihasilkan."
flagAsBot: "Atur akun ini sebagai Bot"
flagAsBotDescription: "Jika akun ini dikendalikan oleh program, tetapkanlah opsi ini. Jika diaktifkan, ini akan berfungsi sebagai tanda bagi pengembang lain untuk mencegah interaksi berantai dengan bot lain dan menyesuaikan sistem internal Misskey untuk memperlakukan akun ini sebagai bot."
flagAsCat: "Atur akun ini sebagai kucing"
flagAsCatDescription: "Nyalakan tanda ini untuk menandai akun ini sebagai kucing."
flagShowTimelineReplies: "Tampilkan balasan di linimasa"
flagShowTimelineRepliesDescription: "Menampilkan balasan pengguna dari note pengguna lain di linimasa apabila dinyalakan."
flagShowTimelineReplies: "Tampilkan balasan di lini masa"
flagShowTimelineRepliesDescription: "Menampilkan balasan pengguna dari catatan pengguna lain di lini masa apabila dinyalakan."
autoAcceptFollowed: "Setujui otomatis permintaan mengikuti dari pengguna yang kamu ikuti"
addAccount: "Tambahkan akun"
reloadAccountsList: "Muat ulang daftar akun"
loginFailed: "Gagal untuk masuk"
showOnRemote: "Lihat profil asli"
general: "Umum"
@@ -165,7 +171,7 @@ searchWith: "Cari: {q}"
youHaveNoLists: "Kamu tidak memiliki daftar apapun"
followConfirm: "Apakah kamu yakin ingin mengikuti {name}?"
proxyAccount: "Akun proksi"
proxyAccountDescription: "Akun proksi merupakan sebuah akun yang bertindak sebagai pengikut luar untuk pengguna dalam kondisi tertentu. Sebagai contoh, ketika pengguna menambahkan seorang pengguna luar ke dalam daftar, aktivitas dari pengguna luar tidak akan disampaikan ke instansi apabila tidak ada pengguna lokal yang mengikuti pengguna tersebut, dengan begitu akun proksilah yang akan mengikutinya."
proxyAccountDescription: "Akun proksi merupakan sebuah akun yang bertindak sebagai pengikut instansi luar untuk pengguna dalam kondisi tertentu. Sebagai contoh, ketika pengguna menambahkan seorang pengguna instansi luar ke dalam daftar, aktivitas dari pengguna instansi luar tidak akan disampaikan ke instansi apabila tidak ada pengguna lokal yang mengikuti pengguna tersebut, dengan begitu akun proksilah yang akan mengikutinya."
host: "Host"
selectUser: "Pilih pengguna"
recipient: "Penerima"
@@ -197,7 +203,7 @@ clearQueue: "Bersihkan antrian"
clearQueueConfirmTitle: "Apakah kamu yakin ingin membersihkan antrian?"
clearQueueConfirmText: "Seluruh sisa catatan yang tidak tersampaikan di dalam antrian tidak akan difederasi. Biasanya operasi ini TIDAK dibutuhkan."
clearCachedFiles: "Hapus tembolok"
clearCachedFilesConfirm: "Apakah kamu yakin ingin menghapus seluruh tembolok berkas remote?"
clearCachedFilesConfirm: "Apakah kamu yakin ingin menghapus seluruh tembolok berkas instansi luar?"
blockedInstances: "Instansi terblokir"
blockedInstancesDescription: "Daftar nama host dari instansi yang diperlukan untuk diblokir. Instansi yang didaftarkan tidak akan dapat berkomunikasi dengan instansi ini."
muteAndBlock: "Bisukan / Blokir"
@@ -222,9 +228,9 @@ all: "Semua"
subscribing: "Berlangganan"
publishing: "Sedang menyiarkan langsung"
notResponding: "Tidak ada respon"
instanceFollowing: "Mengikuti instance"
instanceFollowers: "Pengikut instance"
instanceUsers: "Pengguna pada instance ini"
instanceFollowing: "Mengikuti instansi"
instanceFollowers: "Pengikut instansi"
instanceUsers: "Pengguna pada instansi ini"
changePassword: "Ubah kata sandi"
security: "Keamanan"
retypedNotMatch: "Input tidak sama"
@@ -232,11 +238,11 @@ currentPassword: "Kata sandi saat ini"
newPassword: "Kata sandi baru"
newPasswordRetype: "Ulangi kata sandi baru"
attachFile: "Lampirkan berkas"
more: "Lagi !"
more: "Lainnya"
featured: "Sorotan"
usernameOrUserId: "Nama pengguna atau User ID"
noSuchUser: "Pengguna tidak ditemukan"
lookup: "Mencari"
lookup: "Cari"
announcements: "Pengumuman"
imageUrl: "URL Gambar"
remove: "Hapus"
@@ -261,14 +267,16 @@ noMoreHistory: "Tidak ada sejarah lagi"
startMessaging: "Mulai mengirim pesan"
nUsersRead: "Dibaca oleh {n}"
agreeTo: "Saya setuju kepada {0}"
agree: "Setuju"
agreeBelow: "Saya setuju dengan di bawah ini"
basicNotesBeforeCreateAccount: "Catatan penting"
tos: "Syarat dan ketentuan"
termsOfService: "Syarat dan ketentuan"
start: "Mulai"
home: "Beranda"
remoteUserCaution: "Informasi ini mungkin tidak mutakhir, karena pengguna ini berasal dari instansi luar."
remoteUserCaution: "Informasi ini mungkin tidak mutakhir, karena pengguna ini berasal dari peladen instansi luar."
activity: "Aktivitas"
images: "Gambar"
image: "Gambar"
birthday: "Tanggal lahir"
yearsOld: "{age} tahun"
registeredDate: "Bergabung pada"
@@ -305,19 +313,18 @@ copyUrl: "Salin tautan"
rename: "Ubah nama"
avatar: "Avatar"
banner: "Banner"
nsfw: "Konten sensitif"
whenServerDisconnected: "Ketika kehilangan koneksi dengan peladen"
disconnectedFromServer: "Terputus koneksi dari peladen"
reload: "Muat ulang"
doNothing: "Abaikan"
reloadConfirm: "Apakah kamu ingin memuat ulang linimasa?"
reloadConfirm: "Apakah kamu ingin memuat ulang lini masa?"
watch: "Tonton"
unwatch: "Batal tonton"
accept: "Terima"
reject: "Tolak"
normal: "Normal"
instanceName: "Nama instance"
instanceDescription: "Tentang instance"
instanceName: "Nama instansi"
instanceDescription: "Tentang instansi"
maintainerName: "Pengelola"
maintainerEmail: "Surel pengelola"
tosUrl: "URL Syarat dan Ketentuan"
@@ -331,9 +338,9 @@ pages: "Halaman"
integration: "Integrasi"
connectService: "Sambungkan"
disconnectService: "Putuskan"
enableLocalTimeline: "Nyalakan linimasa lokal"
enableGlobalTimeline: "Nyalakan linimasa global"
disablingTimelinesInfo: "Admin dan Moderator akan selalu memiliki akses ke semua linimasa meskipun linimasa tersebut tidak diaktifkan."
enableLocalTimeline: "Nyalakan lini masa lokal"
enableGlobalTimeline: "Nyalakan lini masa global"
disablingTimelinesInfo: "Admin dan Moderator akan selalu memiliki akses ke semua lini masa meskipun lini masa tersebut tidak diaktifkan."
registration: "Pendaftaran"
enableRegistration: "Nyalakan pendaftaran pengguna baru"
invite: "Undang"
@@ -376,7 +383,7 @@ enableServiceworker: "Aktifkan ServiceWorker"
antennaUsersDescription: "Tuliskan satu nama pengguna per baris"
caseSensitive: "Peka huruf besar dan huruf kecil"
withReplies: "Termasuk balasan"
connectedTo: "Akun yang mengikuti telah terhubung"
connectedTo: "Akun berikut terhubung"
notesAndReplies: "Catatan dan balasan"
withFiles: "Media"
silence: "Bungkam"
@@ -395,6 +402,7 @@ about: "Informasi"
aboutMisskey: "Tentang Misskey"
administrator: "Admin"
token: "Token"
2fa: "Autentikasi 2-faktor"
totp: "Aplikasi autentikator"
totpDescription: "Gunakan aplikasi autentikator untuk mendapatkan kata sandi sekali pakai"
moderator: "Moderator"
@@ -406,6 +414,7 @@ lastUsed: "Terakhir digunakan"
lastUsedAt: "Penggunaan terakhir: {t}"
unregister: "Batalkan pendaftaran"
passwordLessLogin: "Setel login tanpa kata sandi"
passwordLessLoginDescription: "Bolehkan masuk tanpa kata sandi dengan menggunakan hanya security-key atau passkey"
resetPassword: "Atur ulang kata sandi"
newPasswordIs: "Kata sandi baru adalah \"{password}\""
reduceUiAnimation: "Kurangi animasi antarmuka"
@@ -414,7 +423,7 @@ notFound: "Tidak dapat ditemukan"
notFoundDescription: "Tidak ada halaman sesuai dengan URL yang ditentukan."
uploadFolder: "Lokasi unggah folder bawaan"
cacheClear: "Bersihkan tembolok"
markAsReadAllNotifications: "Tandai semua pemberitahuan telah dibaca"
markAsReadAllNotifications: "Tandai semua notifikasi telah dibaca"
markAsReadAllUnreadNotes: "Tandai semua catatan telah dibaca"
markAsReadAllTalkMessages: "Tandai semua pesan telah dibaca"
help: "Bantuan"
@@ -457,6 +466,7 @@ aboutX: "Tentang {x}"
emojiStyle: "Gaya emoji"
native: "Native"
disableDrawer: "Jangan gunakan menu bergaya laci"
showNoteActionsOnlyHover: "Hanya tampilkan aksi catatan saat ditunjuk"
noHistory: "Tidak ada riwayat"
signinHistory: "Riwayat masuk"
enableAdvancedMfm: "Nyalakan MFM tingkat lanjut"
@@ -469,6 +479,8 @@ createAccount: "Buat akun"
existingAccount: "Akun yang ada"
regenerate: "Buat ulang"
fontSize: "Ukuran huruf"
mediaListWithOneImageAppearance: "Tinggi daftar media dengan satu gambar saja"
limitTo: "Batasi pada {x}"
noFollowRequests: "Kamu tidak memiliki permintaan mengikuti yang menunggu"
openImageInNewTab: "Buka gambar di tab baru"
dashboard: "Dasbor"
@@ -484,7 +496,7 @@ promotion: "Promosi"
promote: "Promosikan"
numberOfDays: "Jumlah hari"
hideThisNote: "Sembunyikan catatan ini"
showFeaturedNotesInTimeline: "Tampilkan catatan yang diunggulkan di linimasa"
showFeaturedNotesInTimeline: "Tampilkan catatan yang diunggulkan di lini masa"
objectStorage: "Object Storage"
useObjectStorage: "Gunakan object storage"
objectStorageBaseUrl: "Base URL"
@@ -502,9 +514,11 @@ objectStorageUseSSLDesc: "Matikan ini jika kamu tidak akan menggunakan HTTPS unt
objectStorageUseProxy: "Hubungkan melalui Proxy"
objectStorageUseProxyDesc: "Matikan ini jika kamu tidak akan menggunakan Proxy untuk koneksi ObjectStorage"
objectStorageSetPublicRead: "Setel \"public-read\" disaat mengunggah"
s3ForcePathStyleDesc: "Jika s3ForcePathStyle dinyalakan, nama bucket harus dimasukkan dalam path URL dan bukan URL nama host tersebut. Kamu perlu menyalakan pengaturan ini jika menggunakan layanan seperti instansi Minio yang self-hosted."
serverLogs: "Log Peladen"
deleteAll: "Hapus semua"
showFixedPostForm: "Tampilkan form posting di atas linimasa."
showFixedPostForm: "Tampilkan form posting di atas lini masa."
showFixedPostFormInChannel: "Tampilkan form posting di atas lini masa (Kanal)"
newNoteRecived: "Kamu mendapat catatan baru"
sounds: "Bunyi"
sound: "Bunyi"
@@ -533,23 +547,28 @@ scratchpadDescription: "Scratchpad menyediakan lingkungan eksperimen untuk AiScr
output: "Keluaran"
script: "Script"
disablePagesScript: "Nonaktifkan script pada halaman"
updateRemoteUser: "Perbaharui informasi pengguna luar"
updateRemoteUser: "Perbaharui informasi pengguna instansi luar"
deleteAllFiles: "Hapus semua berkas"
deleteAllFilesConfirm: "Apakah kamu yakin ingin menghapus semua berkas?"
removeAllFollowing: "Tahan semua mengikuti"
removeAllFollowing: "Batalkan mengikuti semua pengguna"
removeAllFollowingDescription: "Batal mengikuti semua akun dari {host}. Mohon jalankan ini ketika instansi sudah tidak ada lagi."
userSuspended: "Pengguna ini telah dibekukan."
userSilenced: "Pengguna ini telah dibungkam."
yourAccountSuspendedTitle: "Akun ini dibekukan"
yourAccountSuspendedDescription: "Akun ini dibekukan karena melanggar ketentuan penggunaan layanan peladen atau semacamnya. Hubungi admin apabila ingin tahu alasan lebih lanjut. Mohon untuk tidak membuat akun baru."
tokenRevoked: "Token tidak valid"
tokenRevokedDescription: "Token ini telah kedaluwarsa. Mohon masuk lagi."
accountDeleted: "Akun telah dihapus"
accountDeletedDescription: "Akun ini telah dihapus."
menu: "Menu"
divider: "Pembagi"
addItem: "Tambahkan item"
rearrange: "Tata ulang"
relays: "Relay"
addRelay: "Tambahkan relay"
inboxUrl: "URL Kotak masuk"
addedRelays: "Relay yang ditambahkan"
serviceworkerInfo: "Harus diaktifkan untuk pemberitahuan push."
serviceworkerInfo: "Harus diaktifkan untuk notifikasi dorong."
deletedNote: "Catatan yang dihapus"
invisibleNote: "Catatan yang disembunyikan"
enableInfiniteScroll: "Aktifkan gulir tak terbatas"
@@ -577,13 +596,13 @@ height: "Tinggi"
large: "Besar"
medium: "Sedang"
small: "Kecil"
generateAccessToken: "Buat access token"
generateAccessToken: "Buat token akses"
permission: "Izin"
enableAll: "Aktifkan semua"
disableAll: "Nonaktifkan semua"
tokenRequested: "Berikan ijin akses ke akun"
pluginTokenRequestedDescription: "Plugin ini dapat menggunakan setelan ijin disini."
notificationType: "Jenis pemberitahuan"
notificationType: "Jenis notifikasi"
edit: "Sunting"
emailServer: "Peladen surel"
enableEmail: "Nyalakan distribusi surel"
@@ -614,10 +633,10 @@ delayed: "Terlambat"
database: "Basis data"
channel: "Kanal"
create: "Buat"
notificationSetting: "Pengaturan Pemberitahuan"
notificationSettingDesc: "Pilih tipe pemberitahuan untuk ditampilkan"
notificationSetting: "Pengaturan Notifikasi"
notificationSettingDesc: "Pilih tipe notifikasi untuk ditampilkan"
useGlobalSetting: "Gunakan setelan global"
useGlobalSettingDesc: "Jika dinyalakan, setelan pemberitahuan akun kamu akan digunakan. Jika dimatikan, konfigurasi secara individu dapat dibuat."
useGlobalSettingDesc: "Jika dinyalakan, setelan notifikasi akun kamu akan digunakan. Jika dimatikan, pengaturan secara individu dapat dibuat."
other: "Lainnya"
regenerateLoginToken: "Perbarui token login"
regenerateLoginTokenDescription: "Perbarui token yang digunakan secara internal saat login. Normalnya aksi ini tidak diperlukan. Jika diperbarui, semua perangkat akan dilogout."
@@ -654,8 +673,8 @@ createNewClip: "Buat klip baru"
unclip: "Batalkan klip"
confirmToUnclipAlreadyClippedNote: "Catatan ini sudah disertakan di klip \"{name}\". Yakin ingin membatalkan catatan dari klip ini?"
public: "Publik"
i18nInfo: "Misskey diterjemahkan ke dalam banyak bahasa oleh sukarelawan. Kamu dapat ikut membantu di {link}."
manageAccessTokens: "Kelola access token"
i18nInfo: "Misskey diterjemahkan ke dalam banyak bahasa oleh sukarelawan. Kamu juga dapat ikut membantu menerjemahkannya di {link}."
manageAccessTokens: "Kelola token akses"
accountInfo: "Informasi akun"
notesCount: "Jumlah catatan"
repliesCount: "Jumlah balasan terkirim"
@@ -672,7 +691,7 @@ yes: "Iya"
no: "Tidak"
driveFilesCount: "Jumlah berkas drive"
driveUsage: "Penggunaan ruang penyimpanan drive"
noCrawle: "Tolak pengindeksan crawler"
noCrawle: "Tolak pengindeksan perayap web"
noCrawleDescription: "Meminta mesin pencari untuk tidak mengindeks halaman profil kamu, catatan, Halaman, dll."
lockedAccountInfo: "Kecuali kamu menyetel visibilitas catatan milikmu ke \"Hanya pengikut\", catatan milikmu akan dapat dilihat oleh siapa saja, bahkan jika kamu memerlukan pengikut untuk disetujui secara manual."
alwaysMarkSensitive: "Tandai media dalam catatan sebagai media sensitif"
@@ -688,10 +707,12 @@ contact: "Kontak"
useSystemFont: "Gunakan font bawaan sistem operasi"
clips: "Klip"
experimentalFeatures: "Fitur eksperimental"
experimental: "Eksperimental"
thisIsExperimentalFeature: "Fitur ini eksperimental. Fungsionalitas dari fitur ini dapat berubah sewaktu-waktu dan mungkin tidak bekerja sesuai semestinya."
developer: "Pengembang"
makeExplorable: "Buat akun tampil di \"Jelajahi\""
makeExplorableDescription: "Jika kamu mematikan ini, akun kamu tidak akan muncul di bagian \"Jelajahi:"
showGapBetweenNotesInTimeline: "Tampilkan jarak diantara catatan pada linimasa"
makeExplorableDescription: "Jika kamu mematikan ini, akun kamu tidak akan muncul di menu \"Jelajahi\""
showGapBetweenNotesInTimeline: "Tampilkan jarak diantara catatan pada lini masa"
duplicate: "Duplikat"
left: "Kiri"
center: "Tengah"
@@ -730,14 +751,14 @@ capacity: "Kapasitas"
inUse: "Digunakan"
editCode: "Sunting kode"
apply: "Terapkan"
receiveAnnouncementFromInstance: "Terima pemberitahuan surel dari instansi ini"
emailNotification: "Pemberitahuan surel"
receiveAnnouncementFromInstance: "Terima pengumuman dari instansi ini"
emailNotification: "Notifikasi surel"
publish: "Terbitkan"
inChannelSearch: "Cari di kanal"
useReactionPickerForContextMenu: "Buka pemilih reaksi dengan klik-kanan"
typingUsers: "{users} sedang mengetik..."
jumpToSpecifiedDate: "Loncat ke tanggal spesifik"
showingPastTimeline: "Sedang menampilkan linimasa lama"
showingPastTimeline: "Sedang menampilkan lini masa lama"
clear: "Bersihkan"
markAllAsRead: "Tandai semua telah dibaca"
goBack: "Kembali"
@@ -752,7 +773,7 @@ userInfo: "Informasi pengguna"
unknown: "Tidak diketahui"
onlineStatus: "Status daring"
hideOnlineStatus: "Sembunyikan status daring"
hideOnlineStatusDescription: "Menyembunyikan status daring kamu umengurangi kenyamanan untuk beberapa fungsi seperti contohnya pencarian."
hideOnlineStatusDescription: "Menyembunyikan status daring kamu akan mengurangi kenyamanan untuk beberapa fungsi, seperti contohnya pencarian."
online: "Daring"
active: "Aktif"
offline: "Luring"
@@ -772,12 +793,14 @@ noMaintainerInformationWarning: "Informasi pengelola belum disetel."
noBotProtectionWarning: "Proteksi bot belum disetel."
configure: "Setel"
postToGallery: "Posting ke galeri"
postToHashtag: "Catat ke tagar ini"
gallery: "Galeri"
recentPosts: "Postingan terbaru"
popularPosts: "Postingan populer"
shareWithNote: "Bagikan dengan catatan"
ads: "Iklan"
expiration: "Batas akhir"
startingperiod: "Mulai"
memo: "Memo"
priority: "Prioritas"
high: "Tinggi"
@@ -804,14 +827,18 @@ translatedFrom: "Terjemahkan dari {x}"
accountDeletionInProgress: "Penghapusan akun sedang dalam proses"
usernameInfo: "Nama yang mengidentifikasikan akun kamu dari yang lain pada peladen ini. Kamu dapat menggunakan alfabet (a~z, A~Z), digit (0~9) atau garis bawah (_). Username tidak dapat diubah setelahnya."
aiChanMode: "Mode Ai"
keepCw: "Biarkan Peringatan Konten"
devMode: "Mode pengembang"
keepCw: "Biarkan peringatan konten"
pubSub: "Akun Pub/Sub"
lastCommunication: "Komunikasi terakhir"
resolved: "Selesai"
unresolved: "Belum selesai"
breakFollow: "Batalkan mengikuti"
breakFollow: "Hapus pengikut"
breakFollowConfirm: "Yakin untuk menghapus pengikut ini?"
itsOn: "Aktif"
itsOff: "Nonaktif"
on: "Nyala"
off: "Mati"
emailRequiredForSignup: "Membutuhkan alamat surel untuk mendaftar"
unread: "Belum dibaca"
filter: "Saring"
@@ -888,25 +915,26 @@ slow: "Lambat"
fast: "Cepat"
sensitiveMediaDetection: "Deteksi media NSFW"
localOnly: "Hanya lokal"
remoteOnly: "Hanya remot"
remoteOnly: "Hanya luar instansi"
failedToUpload: "Gagal mengunggah"
cannotUploadBecauseInappropriate: "Berkas ini tidak dapat diunggah karena sebagian dari berkas terdeteksi berpotensi NSFW."
cannotUploadBecauseNoFreeSpace: "Gagal mengunggah karena kekurangan kapasitas Drive."
cannotUploadBecauseExceedsFileSizeLimit: "Berkas ini tidak dapat diunggah karena melebihi batas ukuran berkas."
beta: "Beta"
enableAutoSensitive: "Penandaan NSFW otomatis"
enableAutoSensitiveDescription: "Mendeteksi otomatis dan menandai media NSFW menggunakan Machine Learning jika memungkinkan. Meskipun opsi ini dimatikan, ada kemungkinan dinyalakan secara menyeluruh pada instansi peladen."
enableAutoSensitiveDescription: "Mendeteksi otomatis dan menandai media NSFW menggunakan Pembelajaran Mesin jika memungkinkan. Meskipun opsi ini dimatikan, ada kemungkinan dinyalakan secara menyeluruh pada instansi peladen."
activeEmailValidationDescription: "Membolehkan validasi alamat surel ketat dengan mengecek apakah alamat surel tersebut temporer dan bisa berkomunikasi dengan surel tersebut. Ketidak tidak dicentang, hanya format surel yang divalidasi."
navbar: "Bilah navigasi"
shuffle: "Acak"
account: "Akun"
move: "Pindah"
pushNotification: "Pemberitahuan push"
subscribePushNotification: "Nyalakan pemberitahuan push"
unsubscribePushNotification: "Matikan pemberitahuan push"
pushNotificationAlreadySubscribed: "Pemberitahuan push telah dinyalakan"
pushNotificationNotSupported: "Browser atau instansi kamu tidak mendukung pemberitahuan push"
sendPushNotificationReadMessage: "Hapus pemberitahuan push ketika pemberitahuan relevan atau pesan telah dibaca"
sendPushNotificationReadMessageCaption: "Pemberitahuan berisi teks「{emptyPushNotificationMessage}」akan ditampilkan dalam waktu pendek. Ini mungkin dapat menambah pemakaian baterai pada perangkat kamu."
pushNotification: "Notifikasi dorong"
subscribePushNotification: "Nyalakan notifikasi dorong"
unsubscribePushNotification: "Matikan notifikasi dorong"
pushNotificationAlreadySubscribed: "Notifikasi dorong telah dinyalakan"
pushNotificationNotSupported: "Browser atau instansi kamu tidak mendukung notifikasi dorong"
sendPushNotificationReadMessage: "Hapus notifikasi dorong ketika notifikasi relevan atau pesan telah dibaca"
sendPushNotificationReadMessageCaption: "Notifikasi berisi teks「{emptyPushNotificationMessage}」akan ditampilkan dalam waktu pendek. Ini mungkin dapat menambah pemakaian baterai pada perangkat kamu."
windowMaximize: "Maksimalkan"
windowMinimize: "Minimalkan"
windowRestore: "Kembalikan"
@@ -925,6 +953,7 @@ didYouLikeMisskey: "Apakah kamu mulai menyukai Misskey?"
pleaseDonate: "{host} menggunakan perangkat lunak bebas yaitu Misskey. Kami sangat mengapresiasi sekali donasi dari kamu agar pengembangan Misskey tetap dapat berlanjut!"
roles: "Peran"
role: "Peran"
noRole: "Peran tidak temukan"
normalUser: "Pengguna umum"
undefined: "Tak terdefinisi"
assign: "Tetapkan\n"
@@ -934,25 +963,141 @@ manageCustomEmojis: "Kelola Emoji Kustom"
youCannotCreateAnymore: "Kamu melewati batas pembuatan."
cannotPerformTemporary: "Sementara Tidak Tersedia"
cannotPerformTemporaryDescription: "Aksi ini tidak dapat dilakukan sementara karena melewati batas eksekusi. Mohon tunggu sejenak dan coba lagi."
invalidParamError: "Parameter tidak valid"
invalidParamErrorDescription: "Parameter permintaan tidak valid. Hal ini biasanya disebabkan oleh bug, namun juga dapat terjadi karena input melebihi batas ukuran atau semacamnya."
permissionDeniedError: "Operasi ditolak"
permissionDeniedErrorDescription: "Akun ini tidak memiliki izin untuk melakukan aksi ini."
preset: "Prasetel"
selectFromPresets: "Pilih dari prasetel"
achievements: "Pencapaian"
gotInvalidResponseError: "Respon peladen tidak valid"
gotInvalidResponseErrorDescription: "Peladen tidak dapat dijangkau atau sedang dalam perawatan. Mohon coba lagi nanti."
thisPostMayBeAnnoying: "Catatan ini mungkin dapat mengganggu orang lain."
thisPostMayBeAnnoyingHome: "Catat ke linimasa beranda"
thisPostMayBeAnnoyingHome: "Catat ke lini masa beranda"
thisPostMayBeAnnoyingCancel: "Batalkan"
thisPostMayBeAnnoyingIgnore: "Tetap catat"
collapseRenotes: "Tutup renote yang sudah kamu lihat"
internalServerError: "Kesalahan internal peladen"
internalServerErrorDescription: "Peladen sedang mengalami galat tak terduga"
copyErrorInfo: "Salin detil galat"
joinThisServer: "Gabung server ini"
exploreOtherServers: "Cari server lain"
joinThisServer: "Gabung peladen ini"
exploreOtherServers: "Cari peladen lain"
letsLookAtTimeline: "LIhat timeline"
disableFederationConfirm: "Matikan federasi?"
disableFederationConfirmWarn: "Mematikan federasi tidak membuat kiriman menjadi privat. Umumnya, mematikan federasi tidak diperlukan."
disableFederationOk: "Matikan federasi"
invitationRequiredToRegister: "Instansi ini dalam mode undangan-saja. Kamu harus memasukkan kode undangan yang valid untuk mendaftar."
emailNotSupported: "Instansi ini tidak mendukung mengirim surel"
postToTheChannel: "Catat ke kanal"
cannotBeChangedLater: "Hal ini nantinya tidak dapat diubah lagi."
reactionAcceptance: "Penerimaan reaksi"
likeOnly: "Hanya suka"
likeOnlyForRemote: "Semua (Hanya suka dari instansi luar)"
nonSensitiveOnly: "Hanya non-sensitif"
nonSensitiveOnlyForLocalLikeOnlyForRemote: "Hanya non-sensitif (Hanya suka dari instansi luar)"
rolesAssignedToMe: "Peran yang ditugaskan ke saya"
resetPasswordConfirm: "Yakin untuk mereset kata sandimu?"
sensitiveWords: "Kata sensitif"
sensitiveWordsDescription: "Visibilitas dari semua catatan mengandung kata yang telah diatur akan dijadikan \"Beranda\" secara otomatis. Kamu dapat mendaftarkan kata tersebut lebih dari satu dengan menuliskannya di baris baru."
sensitiveWordsDescription2: "Menggunakan spasi akan membuat ekspresi AND dan kata kunci disekitarnya dengan garis miring akan mengubahnya menjadi ekspresi reguler."
notesSearchNotAvailable: "Pencarian catatan tidak tersedia."
license: "Lisensi"
unfavoriteConfirm: "Yakin ingin menghapusnya dari favorit?"
myClips: "Klip saya"
drivecleaner: "Pembersih Drive"
retryAllQueuesNow: "Coba jalankan lagi semua antrian"
retryAllQueuesConfirmTitle: "Yakin ingin mencoba lagi semuanya?"
retryAllQueuesConfirmText: "Hal ini akan meningkatkan beban sementara ke peladen."
enableChartsForRemoteUser: "Buat bagan data pengguna instansi luar"
enableChartsForFederatedInstances: "Buat bagan data peladen instansi luar"
showClipButtonInNoteFooter: "Tambahkan \"Klip\" ke menu aksi catatan"
largeNoteReactions: "Besarkan reaksi yang ditampilkan"
noteIdOrUrl: "ID catatan atau URL"
video: "Video"
videos: "Video"
dataSaver: "Penghemat data"
accountMigration: "Pemindahan akun"
accountMoved: "Pengguna ini telah berpindah ke akun baru:"
accountMovedShort: "Akun ini telah dipindahkan."
operationForbidden: "Operasi dilarang"
forceShowAds: "Selalu tampilkan iklan"
addMemo: "Tambahkan memo"
editMemo: "Sunting memo"
reactionsList: "Reaksi"
renotesList: "Renote"
notificationDisplay: "Notifikasi"
leftTop: "Kiri atas"
rightTop: "Kanan atas"
leftBottom: "Kiri bawah"
rightBottom: "Kanan bawah"
stackAxis: "Arah tumpukan"
vertical: "Vertikal"
horizontal: "Horisontal"
position: "Posisi"
serverRules: "Aturan peladen"
pleaseConfirmBelowBeforeSignup: "Mohon konfirmasi di bawah ini sebelum mendaftar."
pleaseAgreeAllToContinue: "Kamu harus menyetujui semua kolom di atas untuk melanjutkan."
continue: "Lanjutkan"
preservedUsernames: "Nama pengguna tercadangkan"
preservedUsernamesDescription: "Daftar nama pengguna yang dicadangkan dipisah dengan baris baru. Nama pengguna berikut akan tidak dapat dipakai pada pembuatan akun normal, namun dapat digunakan oleh admin untuk membuat akun baru. Akun yang sudah ada dengan menggunakan nama pengguna ini tidak akan terpengaruh."
createNoteFromTheFile: "Buat catatan dari berkas ini"
archive: "Arsipkan"
channelArchiveConfirmTitle: "Yakin untuk mengarsipkan {name}?"
channelArchiveConfirmDescription: "Kanal yang diarsipkan tidak akan muncul pada daftar kanal atau hasil pencarian. Postingan baru juga tidak dapat ditambahkan lagi."
thisChannelArchived: "Kanal ini telah diarsipkan."
displayOfNote: "Tampilan catatan"
initialAccountSetting: "Atur profil"
youFollowing: "Mengikuti"
preventAiLearning: "Tolak penggunaan Pembelajaran Mesin (AI Generatif)"
preventAiLearningDescription: "Minta perayap web untuk tidak menggunakan materi teks atau gambar yang telah diposting ke dalam set data Pembelajaran Mesin (Prediktif / Generatif). Hal ini dicapai dengan menambahkan flag HTML-Response \"noai\" ke masing-masing konten. Pencegahan penuh mungkin tidak dapat dicapai dengan flag ini, karena juga dapat diabaikan begitu saja."
options: "Opsi peran"
specifyUser: "Pengguna spesifik"
failedToPreviewUrl: "Tidak dapat dipratinjau"
update: "Perbarui"
rolesThatCanBeUsedThisEmojiAsReaction: "Peran yang dapat menggunakan emoji ini sebagai reaksi"
rolesThatCanBeUsedThisEmojiAsReactionEmptyDescription: "Jika peran tidak ditentukan, semua pengguna dapat menggunakan emoji ini sebagai reaksi."
rolesThatCanBeUsedThisEmojiAsReactionPublicRoleWarn: "Peran ini harus publik."
cancelReactionConfirm: "Yakin untuk menghapus reaksimu?"
changeReactionConfirm: "Yakin untuk mengganti reaksimu?"
later: "Nanti saja"
goToMisskey: "Ke Misskey"
additionalEmojiDictionary: "Kamus emoji tambahan"
installed: "Terpasang"
branding: "Merek"
enableServerMachineStats: "Tampilkan informasi mesin peladen menjadi publik"
enableIdenticonGeneration: "Nyalakan pembuatan Identicon per pengguna"
_initialAccountSetting:
accountCreated: "Akun kamu telah sukses dibuat!"
letsStartAccountSetup: "Untuk pemula, ayo atur profilmu dulu."
letsFillYourProfile: "Pertama, ayo atur profilmu dulu."
profileSetting: "Pengaturan profil"
privacySetting: "Pengaturan privasi"
theseSettingsCanEditLater: "Kamu selalu bisa mengganti pengaturan ini lain kali."
youCanEditMoreSettingsInSettingsPageLater: "Ada banyak pengaturan yang dapat kamu atur dari halaman \"Pengaturan\". Pastikan untuk mengunjungi halaman tersebut nanti."
followUsers: "Coba ikuti beberapa pengguna yang menarik bagimu untuk membangun lini masa akunmu."
pushNotificationDescription: "Menyalakan notifikasi dorong akan membuatmu menerima notifikasi dari {name} secara langsung ke perangkatmu."
initialAccountSettingCompleted: "Pengaturan profil selesai!"
haveFun: "Selamat menikmati, {name}!"
ifYouNeedLearnMore: "Kalau kamu ingin mempelajari lebih lanjut bagaimana cara menggunakan {name} (Misskey), silahkan kunjungi {link}."
skipAreYouSure: "Yakin melewati atur profil?"
laterAreYouSure: "Yakin banget untuk atur profil nanti?"
_serverRules:
description: "Daftar peraturan akan ditampilkan sebelum pendaftaran. Mengatur ringkasan dari Syarat dan Ketentuan sangat direkomendasikan."
_accountMigration:
moveFrom: "Pindahkan akun lain ke akun ini"
moveFromSub: "Buat alias ke akun lain"
moveFromLabel: "Akun asli #{n}"
moveFromDescription: "Kamu harus membuat alias untuk akun asal kamu berpindah ke akun ini\nMasukkan alias akun asal kamu berpindah ke dalam format berikut: @namapengguna@nama.server.com\nUntuk menghapus alias, kosongkan kolom ini (tidak direkomendasikan)."
moveTo: "Pindahkan akun ini ke akun lain"
moveToLabel: "Akun tujuan pindah:"
moveCannotBeUndone: "Pemindahan akun tidak dapat diurungkan."
moveAccountDescription: "Hal ini akan memindahkan akun kamu ke akun lain.\n ・Pengikut dari akun ini akan secara otomatis dipindahkan ke akun baru\n ・Akun ini akan berhenti mengikuti dari semua pengguna yang sedang kamu ikuti\n ・Kamu akan tidak dapat membuat catatan baru dan lain-lain pada akun ini\n\nMeskipun pemindahan pengikut dilakukan secara otomatis, kamu harus mempersiapkan beberapa langkah secara manual untuk memindahkan daftar pengguna yang sedang kamu ikuti. Untuk melakukan tersebut, lakukan ekspor daftar ikuti yang nantinya dapat kamu impor pada menu pengaturan di akun baru kamu. Prosedur yang sama juga dapat diterapkan pada daftar seperti pengguna yang kamu bisukan atau blokir.\n\n(Penjelasan ini hanya berlaku pada Misskey versi 13.12.0 dan setelahnya. Perangkat lunak ActivityPub lainnya seperti Mastodon berkemungkinan befungsi berbeda.)"
moveAccountHowTo: "Untuk pindah, pertama buat alias untuk akun ini pada akun tujuan kamu berpindah.\nSetelah kamu membuat alias, masukkan akun tujuan kamu berpindah ke dalam format berikut:\n@namapengguna@nama.server.com"
startMigration: "Pindahkan"
migrationConfirm: "Yakin untuk memindahkan akun ini ke {account}? Sekali dimulai, proses ini tidak dapat dihentikan atau ditarik kembali, dan kamu tidak dapat menggunakan akun ini lagi dalam keadaan asli semula."
movedAndCannotBeUndone: "\nAkun ini telah dipindahkan.\nPemindahan tidak dapat diurungkan."
postMigrationNote: "24 jam setelah pemindahan akun selesai, akun ini akan berhenti mengikuti semua akun yang sedang diikuti. Angka mengikut dan pengikut akan menjadi nol. Untuk menghindari pengikut kamu tidak dapat melihat postingan hanya pengikut saja dalam postingan ini, mereka akan tetap mengikuti akun ini."
movedTo: "Akun baru tujuan pindah:"
_achievements:
earnedAt: "Terbuka pada"
_types:
@@ -1124,6 +1269,9 @@ _achievements:
_client30min:
title: "Istirahat pendek"
description: "Habiskan waktu 30 menit di Misskey"
_client60min:
title: "Tidak ada \"Miss\" dalam Misskey"
description: "Biarkan Misskey tetap terbuka setidaknya selama 60 menit"
_noteDeletedWithin1min:
title: "Eh, salah coy!"
description: "Hapus catatan kurang dari semenit kamu catat"
@@ -1139,8 +1287,8 @@ _achievements:
title: "Rujukan mandiri"
description: "Kutip catatanmu sendiri"
_htl20npm:
title: "Linimasa mengalir"
description: "Memiliki linimasa beranda dengan kecepatan melebihi 20 cpm (catatan per menit)"
title: "Lini masa mengalir"
description: "Memiliki lini masa beranda dengan kecepatan melebihi 20 cpm (catatan per menit)"
_viewInstanceChart:
title: "Analis"
description: "Lihat bagan instansimu"
@@ -1212,6 +1360,10 @@ _role:
iconUrl: "URL ikon"
asBadge: "Tampilkan sebagai lencana"
descriptionOfAsBadge: "Ikon peran ini akan ditampilkan bersebelahan dengan username pengguna yang memiliki peran ini jika dinyalakan."
isExplorable: "Buat peran dapat terjelajahi"
descriptionOfIsExplorable: "Lini masa peran ini dan daftar pengguna dengan peran ini akan dibuat publik apabila dinyalakan."
displayOrder: "Urutan"
descriptionOfDisplayOrder: "Semakin tinggi angka, semakin tinggi posisi antarmukanya."
canEditMembersByModerator: "Perbolehkan moderator untuk menyunting daftar anggota untuk peran ini"
descriptionOfCanEditMembersByModerator: "Ketika dinyalakan, moderator beserta administrator dapat menugaskan ataupun mencabut pengguna ke peran ini. Ketika dimatikan, hanya administrator saja yang dapat menugaskan pengguna ke peran ini."
priority: "Prioritas"
@@ -1220,12 +1372,13 @@ _role:
middle: "Sedang"
high: "Tinggi"
_options:
gtlAvailable: "Dapat melihat linimasa global"
ltlAvailable: "Dapat melihat linimasa lokal"
gtlAvailable: "Dapat melihat lini masa global"
ltlAvailable: "Dapat melihat lini masa lokal"
canPublicNote: "Dapat mengirim catatan publik"
canInvite: "Dapat membuat kode undangan instansi"
canManageCustomEmojis: "Dapat mengelola Emoji kustom"
driveCapacity: "Kapasitas Drive"
alwaysMarkNsfw: "Selalu tandai berkas sebagai NSFW"
pinMax: "Jumlah maksimal catatan yang disematkan"
antennaMax: "Jumlah maksimum antena"
wordMuteMax: "Jumlah maksimum karakter yang diperbolehkan dalam membisukan kata"
@@ -1237,6 +1390,7 @@ _role:
rateLimitFactor: "Batas kecepatan"
descriptionOfRateLimitFactor: "Batas kecepatan yang rendah tidak begitu membatasi, batas kecepatan tinggi lebih membatasi. "
canHideAds: "Dapat menyembunyikan iklan"
canSearchNotes: "Penggunaan pencarian catatan"
_condition:
isLocal: "Pengguna lokal"
isRemote: "Pengguna remote"
@@ -1246,11 +1400,13 @@ _role:
followersMoreThanOrEq: "Memiliki pengikut X atau lebih dari tersebut"
followingLessThanOrEq: "Mengikuti X pengguna atau kurang dari itu"
followingMoreThanOrEq: "Mengikuti X pengguna atau lebih dari itu"
notesLessThanOrEq: "Jumlah postingan kurang dari sama dengan"
notesMoreThanOrEq: "Jumlah postingan lebih dari sama dengan"
and: "Kondisi-AND"
or: "Kondisi-OR"
not: "Kondisi-NOT"
_sensitiveMediaDetection:
description: "Mengurangi usaha moderasi server dengan mengenali media NSFW srcara otomatis menggunakan Machine Learning. Fungsi ini akan sedikit menaikkan beban peladen."
description: "Mengurangi usaha moderasi peladen dengan mengenali media NSFW secara otomatis menggunakan Pembelajaran Mesin. Fungsi ini akan sedikit menaikkan beban peladen."
sensitivity: "Sensitivitas deteksi"
sensitivityDescription: "Mengurangi sensitivitas akan mengurangi misdeteksi (false positive) sedangkan meningkatkannya akan menambah misdeteksi (false positive)."
setSensitiveFlagAutomatically: "Tandai sebagai NSFW"
@@ -1333,21 +1489,17 @@ _aboutMisskey:
donate: "Donasi ke Misskey"
morePatrons: "Kami sangat mengapresiasi dukungan dari banyak penolong lain yang tidak tercantum disini. Terima kasih! 🥰"
patrons: "Pendukung"
_nsfw:
respect: "Sembunyikan media NSFW"
ignore: "Jangan sembunyikan media NSFW"
force: "Sembunyikan semua media"
_instanceTicker:
none: "Jangan tampilkan"
remote: "Tampilkan untuk pengguna luar"
remote: "Tampilkan untuk pengguna instansi luar"
always: "Selalu tampilkan"
_serverDisconnectedBehavior:
reload: "Muat ulang otomatis"
dialog: "Tampilkan dialog peringatan"
quiet: "Tampilkan peringatan tidak mengganggu"
_channel:
create: "Buat saluran"
edit: "Sunting saluran"
create: "Buat Kanal"
edit: "Sunting Kanal"
setBanner: "Setel banner"
removeBanner: "Hapus banner"
featured: "Tren"
@@ -1355,6 +1507,8 @@ _channel:
following: "Mengikuti"
usersCount: "{n} Partisipan"
notesCount: "terdapat {n} catatan"
nameAndDescription: "Nama dan deskripsi"
nameOnly: "Hanya nama"
_menuDisplay:
sideFull: "Horisontal"
sideIcon: "Horisontal (Ikon)"
@@ -1363,9 +1517,9 @@ _menuDisplay:
_wordMute:
muteWords: "Kata yang dibisukan"
muteWordsDescription: "Pisahkan dengan spasi untuk kondisi AND. Pisahkan dengan baris baru untuk kondisi OR."
muteWordsDescription2: "Kurung kata kunci dengan garis miring untuk menggunakan regular expressions."
softDescription: "Sembunyikan catatan yang memenuhi aturan kondisi dari linimasa."
hardDescription: "Cegah catatan memenuhi aturan kondisi dari ditambahkan ke linimasa. Dengan tambahan, catatan berikut tidak akan ditambahkan ke linimasa meskipun jika kondisi tersebut diubah."
muteWordsDescription2: "Kurung kata kunci dengan garis miring untuk menggunakan ekspresi reguler."
softDescription: "Sembunyikan catatan yang memenuhi aturan kondisi dari lini masa."
hardDescription: "Cegah catatan memenuhi aturan kondisi dari ditambahkan ke lini masa. Dengan tambahan, catatan berikut tidak akan ditambahkan ke lini masa meskipun jika kondisi tersebut diubah."
soft: "Lembut"
hard: "Keras"
mutedNotes: "Catatan yang dibisukan"
@@ -1435,8 +1589,8 @@ _theme:
cwBg: "Latar belakang tombol Sembunyikan Konten"
cwFg: "Teks tombol Sembunyikan Konten"
cwHoverBg: "Latar belakang tombol Sembunyikan Konten (Mengambang)"
toastBg: "Latar belakang pemberitahuan"
toastFg: "Teks pemberitahuan"
toastBg: "Latar belakang notifikasi"
toastFg: "Teks notifikasi"
buttonBg: "Latar belakang tombol"
buttonHoverBg: "Latar belakang tombol (Mengambang)"
inputBorder: "Batas bidang masukan"
@@ -1451,11 +1605,11 @@ _theme:
_sfx:
note: "Catatan"
noteMy: "Catatan (Saya)"
notification: "Pemberitahuan"
notification: "Notifikasi"
chat: "Pesan"
chatBg: "Obrolan (Latar Belakang)"
antenna: "Penerimaan Antenna"
channel: "Pemberitahuan saluran"
channel: "Notifikasi Kanal"
_ago:
future: "Masa depan"
justNow: "Baru saja"
@@ -1472,41 +1626,40 @@ _time:
minute: "menit"
hour: "jam"
day: "hari"
_tutorial:
title: "Cara menggunakan Misskey"
step1_1: "Selamat datang!"
step1_2: "Halaman ini disebut \"linimasa\". Halaman ini menampilkan \"catatan\" yang diurutkan secara kronologis dari orang-orang yang kamu \"ikuti\"."
step1_3: "Linimasa kamu kosong, karena kamu belum mencatat catatan apapun atau mengikuti siapapun."
step2_1: "Selesaikan menyetel profilmu sebelum menulis sebuah catatan atau mengikuti seseorang."
step2_2: "Menyediakan beberapa informasi tentang siapa kamu akan membuat orang lain mudah untuk mengikutimu kembali."
step3_1: "Selesai menyetel profil kamu?"
step3_2: "Langkah selanjutnya adalah membuat catatan. Kamu bisa lakukan ini dengan mengklik ikon pensil pada layar kamu."
step3_3: "Isilah di dalam modal dan tekan tombol pada atas kanan untuk memcatat catatan kamu."
step3_4: "Bingung tidak berpikiran untuk mengatakan sesuatu? Coba saja \"baru aja ikutan bikin akun misskey punyaku\"!"
step4_1: "Selesai mencatat catatan pertamamu?"
step4_2: "Horee! Sekarang catatan pertamamu sudah ditampilkan di linimasa milikmu."
step5_1: "Sekarang, mari mencoba untuk membuat linimasamu lebih hidup dengan mengikuti orang lain."
step5_2: "{featured} akan memperlihatkan catatan yang sedang tren saat ini untuk kamu. {explore} akan membantumu untuk mencari pengguna yang sedang tren juga saat ini. Coba ikuti seseorang yang kamu suka!"
step5_3: "Untuk mengikuti pengguna lain, klik pada ikon mereka dan tekan tombol follow pada profil mereka."
step5_4: "Jika pengguna lain memiliki ikon gembok di sebelah nama mereka, maka pengguna rersebut harus menyetujui permintaan mengikuti dari kamu secara manual."
step6_1: "Sekarang kamu dapat melihat catatan pengguna lain pada linimasamu."
step6_2: "Kamu juga bisa memberikan \"reaksi\" ke catatan orang lain untuk merespon dengan cepat."
step6_3: "Untuk memberikan \"reaksi\", tekan tanda \"+\" pada catatan pengguna lain dan pilih emoji yang kamu suka untuk memberikan reaksimu kepada mereka."
step7_1: "Yay, Selamat! Kamu sudah menyelesaikan tutorial dasar Misskey."
step7_2: "Jika kamu ingin mempelajari lebih lanjut tentang Misskey, cobalah berkunjung ke bagian {help}."
step7_3: "Semoga berhasil dan bersenang-senanglah! 🚀"
step8_1: "Yang terakhir, apakah kamu ingin menyalakam pemberitahuan push?"
step8_2: "Menyalakan ini akan memungkinkan kamu menerima pemberitahuan untuk sebutan, reaksi, ikuti, dll. Bahkan ketika Misskey sedang tidak dibuka."
step8_3: "Kamu dapat mengganti pengaturan ini nanti."
_timelineTutorial:
title: "Bagaimana cara menggunakan Misskey"
step1_1: "Ini adalah \"lini masa\". Semua \"catatan\" yang dikirimkan oleh {name} akan dimunculkan secara kronologis di sini."
step1_2: "Ada beberapa lini masa yang berbeda. Seperti contoh, \"Lini masa Beranda\" berisi catatan dari pengguna yang kamu ikuti, dan \"Lini masa lokal\" berisi catatan dari semua pengguna dari {name}."
step2_1: "Selanjutnya, mari kita coba memposting sebuah catatan. Kamu dapat melakukanya dengan menekan tombol dengan ikon pensil."
step2_2: "Bagaimana dengan menuliskan sedikit perkenalan diri, atau hanya \"Hello {name}\" kalau kamu lagi ngga feeling?"
step3_1: "Udah selesai memposting catatan pertamamu?"
step3_2: "Catatan pertamamu seharusnya sekarang sudah tampil di lini masa kamu."
step4_1: "Kamu dapat menyisipkan \"Reaksi\" ke dalam catatan."
step4_2: "Untuk menyisipkan reaksi, tekan tanda \"+\" dalam catatan dan pilih emoji yang kamu suka untuk mereaksi catatan tersebut."
_2fa:
alreadyRegistered: "Kamu telah mendaftarkan perangkat otentikasi dua faktor."
registerTOTP: "Daftarkan aplikasi autentikator"
passwordToTOTP: "Masukkan kata sandimu"
step1: "Pertama, pasang aplikasi otentikasi (seperti {a} atau {b}) di perangkat kamu."
step2: "Lalu, pindai kode QR yang ada di layar."
step2Click: "Mengeklik kode QR ini akan membolehkanmu untuk mendaftarkan 2FA ke security-key atau aplikasi autentikator ponsel."
step2Url: "Di aplikasi desktop, masukkan URL berikut:"
step3Title: "Masukkan kode autentikasi"
step3: "Masukkan token yang telah disediakan oleh aplikasimu untuk menyelesaikan pemasangan."
step4: "Mulai sekarang, upaya login apapun akan meminta token login dari aplikasi otentikasi kamu."
securityKeyNotSupported: "Peramban kamu tidak mendukung security key."
registerTOTPBeforeKey: "Mohon atur aplikasi autentikator untuk mendaftarkan security key atau passkey."
securityKeyInfo: "Kamu dapat memasang otentikasi WebAuthN untuk mengamankan proses login lebih lanjut dengan tidak hanya perangkat keras kunci keamanan yang mendukung FIDO2, namun juga sidik jari atau otentikasi PIN pada perangkatmu."
chromePasskeyNotSupported: "Passkey Chrome saat ini tidak didukung."
registerSecurityKey: "Daftarkan security key atau passkey."
securityKeyName: "Masukkan nama key."
tapSecurityKey: "Mohon ikuti peramban kamu untuk mendaftarkan security key atau passkey"
removeKey: "Hapus security key"
removeKeyConfirm: "Hapus cadangan {name}?"
whyTOTPOnlyRenew: "Aplikasi autentikator tidak dapat dihapus selama security key masih terdaftar."
renewTOTP: "Atur ulang aplikasi autentikator"
renewTOTPConfirm: "Hal ini akan menyebabkan kode verifikasi dari aplikasi autentikator sebelumnya berhenti bekerja"
renewTOTPOk: "Atur ulang"
renewTOTPCancel: "Tidak sekarang."
_permissions:
"read:account": "Lihat informasi akun"
@@ -1524,8 +1677,8 @@ _permissions:
"read:mutes": "Lihat daftar orang yang dibisukan"
"write:mutes": "Sunting daftar orang yang dibisukan"
"write:notes": "Buat atau hapus catatan"
"read:notifications": "Lihat pemberitahuan"
"write:notifications": "Sunting pemberitahuan"
"read:notifications": "Lihat notifikasi"
"write:notifications": "Sunting notifikasi"
"read:reactions": "Lihat reaksi"
"write:reactions": "Sunting reaksi"
"write:votes": "Beri suara"
@@ -1535,8 +1688,8 @@ _permissions:
"write:page-likes": "Sunting suka pada Halaman"
"read:user-groups": "Lihat grup pengguna"
"write:user-groups": "Sunting atau hapus grup pengguna"
"read:channels": "Lihat saluran"
"write:channels": "Sunting saluran"
"read:channels": "Lihat Kanal"
"write:channels": "Sunting Kanal"
"read:gallery": "Lihat galeri"
"write:gallery": "Sunting galeri"
"read:gallery-likes": "Lihat daftar postingan galeri yang disukai"
@@ -1568,8 +1721,8 @@ _widgets:
profile: "Profil"
instanceInfo: "Informasi Instansi"
memo: "Catatan memo"
notifications: "Pemberitahuan"
timeline: "Linimasa"
notifications: "Notifikasi"
timeline: "Lini masa"
calendar: "Kalender"
trends: "Tren"
clock: "Jam"
@@ -1623,13 +1776,15 @@ _poll:
remainingSeconds: "Berakhir dalam {s} detik"
_visibility:
public: "Publik"
publicDescription: "Catat ke linimasa global"
publicDescription: "Catat ke lini masa global"
home: "Beranda"
homeDescription: "Catat ke linimasa beranda saja"
homeDescription: "Catat ke lini masa beranda saja"
followers: "Pengikut"
followersDescription: "Catat ke pengikut saja"
specified: "Langsung"
specifiedDescription: "Catat ke pengguna yang ditentukan saja"
disableFederation: "Matikan federasi"
disableFederationDescription: "Jangan kirimkan ke instansi lain"
_postForm:
replyPlaceholder: "Balas ke catatan ini..."
quotePlaceholder: "Kutip catatan ini..."
@@ -1670,7 +1825,7 @@ _charts:
activeUsers: "Pengguna aktif"
notesIncDec: "Perbedaan # dalam catatan"
localNotesIncDec: "Perbedaan # dalam catatan lokal"
remoteNotesIncDec: "Perbedaan # dalam catatan luar"
remoteNotesIncDec: "Perbedaan # dalam catatan instansi luar"
notesTotal: "Total # catatan"
filesIncDec: "Perbedaan # dalam berkas"
filesTotal: "Jumlah # berkas"
@@ -1785,7 +1940,8 @@ _notification:
pollEnded: "Jajak pendapat berakhir"
receiveFollowRequest: "Permintaan mengikuti diterima"
followRequestAccepted: "Permintaan mengikuti disetujui"
app: "Pemberitahuan dari aplikasi"
achievementEarned: "Pencapaian didapatkan"
app: "Notifikasi dari aplikasi tertaut"
_actions:
followBack: "Ikuti Kembali"
reply: "Balas"
@@ -1810,13 +1966,34 @@ _deck:
_columns:
main: "Utama"
widgets: "Widget"
notifications: "Pemberitahuan"
tl: "Linimasa"
notifications: "Notifikasi"
tl: "Lini masa"
antenna: "Antena"
list: "Daftar"
channel: "Kanal"
mentions: "Sebutan"
direct: "Langsung"
roleTimeline: "Lini masa peran"
_dialog:
charactersExceeded: "Kamu telah melebihi batas karakter maksimum! Saat ini pada {current} dari {max}."
charactersBelow: "Kamu berada di bawah batas minimum karakter! Saat ini pada {current} dari {min}."
_disabledTimeline:
title: "Lini masa dinonaktifkan"
description: "Saat ini kamu tidak dapat menggunakan lini masa ini karena peran kamu saat ini."
_drivecleaner:
orderBySizeDesc: "Ukuran berkas (Turun)"
orderByCreatedAtAsc: "Tanggal (Naik)"
_webhookSettings:
createWebhook: "Buat Webhook"
name: "Nama"
secret: "Secret"
events: "Webhook Events"
active: "Aktif"
_events:
follow: "Ketika mengikuti pengguna"
followed: "Ketika diikuti pengguna"
note: "Ketika memposting catatan"
reply: "Ketika menerima balasan"
renote: "Ketika direnote"
reaction: "Ketika menerima reaksi"
mention: "Ketika sedang disebut"

2166
locales/index.d.ts vendored

File diff suppressed because it is too large Load Diff

View File

@@ -2,8 +2,8 @@
* Languages Loader
*/
const fs = require('fs');
const yaml = require('js-yaml');
import * as fs from 'node:fs';
import * as yaml from 'js-yaml';
const merge = (...args) => args.reduce((a, c) => ({
...a,
@@ -51,9 +51,9 @@ const primaries = {
// 何故か文字列にバックスペース文字が混入することがあり、YAMLが壊れるので取り除く
const clean = (text) => text.replace(new RegExp(String.fromCodePoint(0x08), 'g'), '');
const locales = languages.reduce((a, c) => (a[c] = yaml.load(clean(fs.readFileSync(`${__dirname}/${c}.yml`, 'utf-8'))) || {}, a), {});
const locales = languages.reduce((a, c) => (a[c] = yaml.load(clean(fs.readFileSync(new URL(`${c}.yml`, import.meta.url), 'utf-8'))) || {}, a), {});
module.exports = Object.entries(locales)
export default Object.entries(locales)
.reduce((a, [k ,v]) => (a[k] = (() => {
const [lang] = k.split('-');
switch (k) {

View File

@@ -20,20 +20,21 @@ noNotes: "Nessuna nota!"
noNotifications: "Nessuna notifica"
instance: "Istanza"
settings: "Impostazioni"
notificationSettings: "Preferenze di notifica"
basicSettings: "Impostazioni generali"
otherSettings: "Altre impostazioni"
openInWindow: "Apri in una finestra"
profile: "Profilo"
timeline: "Timeline"
noAccountDescription: "L'utente non ha ancora scritto niente nella biografia di profilo."
noAccountDescription: "La persona non ha ancora scritto alcuna autobiografia."
login: "Accedi"
loggingIn: "Accesso in corso..."
logout: "Uscita"
signup: "Iscriviti"
uploading: "Caricamento..."
save: "Salva"
users: "Utente"
addUser: "Aggiungi utente"
users: "Profili"
addUser: "Aggiungi profilo"
favorite: "Preferiti"
favorites: "Preferiti"
unfavorite: "Rimuovi nota dai preferiti"
@@ -51,7 +52,9 @@ addToList: "Aggiungi alla lista"
sendMessage: "Invia messaggio"
copyRSS: "Copia RSS"
copyUsername: "Copia nome utente"
searchUser: "Cerca utente"
copyUserId: "Copia ID del profilo"
copyNoteId: "Copia ID della Nota"
searchUser: "Cerca profilo"
reply: "Rispondi"
loadMore: "Mostra di più"
showMore: "Espandi"
@@ -152,7 +155,7 @@ flagAsBotDescription: "Attiva questo campo se il profilo esegue principalmente o
flagAsCat: "Sono un gatto"
flagAsCatDescription: "La modalità \"sono un gatto\" aggiunge le orecchie al tuo profilo"
flagShowTimelineReplies: "Mostra le risposte alle note sulla timeline."
flagShowTimelineRepliesDescription: "Se è attiva, la timeline mostra le risposte alle altre note dell'utente oltre a quelle dell'utente stesso."
flagShowTimelineRepliesDescription: "Attivando, la timeline mostra le Note del profilo ed anche le risposte ad altre Note"
autoAcceptFollowed: "Accetta automaticamente le richieste di follow da utenti che già segui"
addAccount: "Aggiungi profilo"
reloadAccountsList: "Ricarica l'elenco dei profili"
@@ -204,7 +207,7 @@ blockedInstancesDescription: "Elenca le istanze che vuoi bloccare, una per riga.
muteAndBlock: "Silenziati / Bloccati"
mutedUsers: "Profili silenziati"
blockedUsers: "Profili bloccati"
noUsers: "Nessun utente trovato"
noUsers: "Non ci sono profili"
editProfile: "Modifica profilo"
noteDeleteConfirm: "Vuoi davvero eliminare questa Nota?"
pinLimitExceeded: "Non puoi fissare altre note "
@@ -235,8 +238,8 @@ newPasswordRetype: "Conferma password"
attachFile: "Allega file"
more: "Di più!"
featured: "Tendenze"
usernameOrUserId: "Nome utente o ID utente"
noSuchUser: "Nessun utente trovato"
usernameOrUserId: "Nome utente o ID"
noSuchUser: "Profilo non trovato"
lookup: "Ricerca remota"
announcements: "Annunci"
imageUrl: "URL dell'immagine"
@@ -262,14 +265,16 @@ noMoreHistory: "Non c'è più cronologia da visualizzare"
startMessaging: "Nuovo messaggio"
nUsersRead: "Letto da {n} persone"
agreeTo: "Sono d'accordo con {0}"
agree: "D'accordo"
agreeBelow: "Accetto quanto riportato sotto"
basicNotesBeforeCreateAccount: "Note importanti"
tos: "Termini di servizio"
termsOfService: "Informativa Privacy"
start: "Inizia!"
home: "Home"
remoteUserCaution: "Può darsi che le informazioni siano incomplete perché questo è un utente remoto."
remoteUserCaution: "Le informazioni potrebbero essere incomplete poiché questo profilo remoto potrebbe non essere completamente federato."
activity: "Attività"
images: "Immagini"
image: "Immagini"
birthday: "Compleanno"
yearsOld: "{age} anni"
registeredDate: "Iscrizione a.."
@@ -306,7 +311,6 @@ copyUrl: "Copia URL"
rename: "Modifica nome"
avatar: "Foto del profilo"
banner: "Intestazione"
nsfw: "Contenuti sensibili"
whenServerDisconnected: "Quando la connessione col server è persa"
disconnectedFromServer: "Il server si è disconnesso"
reload: "Ricarica"
@@ -441,7 +445,7 @@ signinRequired: "Occorre avere un profilo registrato su questa istanza"
invitations: "Invita"
invitationCode: "Codice di invito"
checking: "Confermando"
available: "Consigliati"
available: "Disponibile"
unavailable: "Il nome utente è già in uso"
usernameInvalidFormat: "Il nome utente può contenere solo lettere, numeri e '_'"
tooShort: "Troppo breve"
@@ -473,6 +477,8 @@ createAccount: "Crea il tuo profilo"
existingAccount: "Profilo esistente"
regenerate: "Generare di nuovo"
fontSize: "Dimensione carattere"
mediaListWithOneImageAppearance: "Altezza dell'elenco media con una sola immagine "
limitTo: "Limita a {x}"
noFollowRequests: "Non hai alcuna richiesta di follow"
openImageInNewTab: "Apri le immagini in un nuovo tab"
dashboard: "Pannello di controllo"
@@ -555,6 +561,7 @@ accountDeletedDescription: "Questo profilo è stato eliminato."
menu: "Menù"
divider: "Linea di separazione"
addItem: "Aggiungi elemento"
rearrange: "Riordina"
relays: "Ripetitori"
addRelay: "Aggiungi ripetitore"
inboxUrl: "Inbox URL"
@@ -655,7 +662,7 @@ instanceTicker: "Informazioni sull'istanza da cui vengono le note"
waitingFor: "Aspettando {x}"
random: "Casuale"
system: "Sistema"
switchUi: "Cambiare interfaccia"
switchUi: "Cambia interfaccia grafica"
desktop: "Desktop"
clip: "Clip"
createNew: "Crea"
@@ -698,6 +705,8 @@ contact: "Contatti"
useSystemFont: "Usa il carattere predefinito del sistema"
clips: "Clip"
experimentalFeatures: "Funzioni sperimentali"
experimental: "Sperimentale"
thisIsExperimentalFeature: "Questa è una funzionalità sperimentale. Potrebbe essere malfunzionante o cambiare in futuro."
developer: "Sviluppatore"
makeExplorable: "Profilo visibile pubblicamente nella pagina \"Esplora\""
makeExplorableDescription: "Disabilitando questa opzione, il tuo profilo non verrà elencato nella pagina \"Esplora\"."
@@ -774,7 +783,7 @@ switchAccount: "Cambia profilo"
enabled: "Attivo"
disabled: "Inattivo"
quickAction: "Azioni rapide"
user: "Utente"
user: "Profilo"
administration: "Gestione"
accounts: "Profilo"
switch: "Cambia"
@@ -782,11 +791,12 @@ noMaintainerInformationWarning: "Le informazioni amministratore non sono imposta
noBotProtectionWarning: "Nessuna protezione impostata contro i bot."
configure: "Imposta"
postToGallery: "Pubblicare nella galleria"
postToHashtag: "Pubblica a questo hashtag"
gallery: "Galleria"
recentPosts: "Le più recenti"
popularPosts: "Le più visualizzate"
shareWithNote: "Condividere in nota"
ads: "Pubblicità"
ads: "Banner"
expiration: "Scadenza"
startingperiod: "Periodo di inizio"
memo: "Promemoria"
@@ -806,7 +816,7 @@ received: "Ricevuto"
searchResult: "Risultati della Ricerca"
hashtags: "Hashtag"
troubleshooting: "Risoluzione problemi"
useBlurEffect: "Utilizza effetto sfocatura nell'interfaccia"
useBlurEffect: "Utilizza effetto sfocatura"
learnMore: "Più dettagli"
misskeyUpdated: "Misskey è stato aggiornato!"
whatIsNew: "Visualizza le informazioni sull'aggiornamento"
@@ -815,6 +825,7 @@ translatedFrom: "Tradotto da {x}"
accountDeletionInProgress: "È in corso l'eliminazione del profilo"
usernameInfo: "Un nome per identificare univocamente il tuo profilo sull'istanza. Puoi utilizzare caratteri alfanumerici maiuscoli, minuscoli e il trattino basso (_). Non potrai cambiare nome utente in seguito."
aiChanMode: "Modalità Ai"
devMode: "Modalità sviluppatori"
keepCw: "Mantieni il Content Warning"
pubSub: "Publish/Subscribe del profilo"
lastCommunication: "La comunicazione più recente"
@@ -824,6 +835,8 @@ breakFollow: "Non seguire"
breakFollowConfirm: "Vuoi davvero togliere follower?"
itsOn: "Abilitato"
itsOff: "Disabilitato"
on: "Acceso"
off: "Spento"
emailRequiredForSignup: "L'ndirizzo e-mail è obbligatorio per registrarsi"
unread: "Non lette"
filter: "Filtri"
@@ -843,7 +856,7 @@ voteConfirm: "Votare per「{choice}」?"
hide: "Nascondere"
useDrawerReactionPickerForMobile: "Mostra sul drawer da dispositivo mobile"
welcomeBackWithName: "Ciao, {name}! Eccoti di nuovo!"
clickToFinishEmailVerification: "Fai click su [{ok}] per completare la verifica dell'indirizzo email."
clickToFinishEmailVerification: "Premi il bottone \"{ok}\" per completare la verifica dell'indirizzo email."
overridedDeviceKind: "Tipo di dispositivo"
smartphone: "Smartphone"
tablet: "Tablet"
@@ -904,6 +917,7 @@ remoteOnly: "Solo remoto"
failedToUpload: "errore di caricamento"
cannotUploadBecauseInappropriate: "Non è possibile caricarlo perché è stato stabilito che potrebbe contenere contenuti inappropriati."
cannotUploadBecauseNoFreeSpace: "Impossibile caricare a causa della mancanza di spazio libero sul drive."
cannotUploadBecauseExceedsFileSizeLimit: "Il file non può essere caricato perché eccede le dimensioni consentite."
beta: "Versione beta"
enableAutoSensitive: "Determinazione automatica del NSFW"
enableAutoSensitiveDescription: "Se disponibile, il flag NSFW viene impostato automaticamente sui media utilizzando l'apprendimento automatico. Anche se questa funzione è disattivata, in alcuni casi può essere impostata automaticamente."
@@ -937,6 +951,7 @@ didYouLikeMisskey: "Ti piace Misskey?"
pleaseDonate: "Misskey è il software libero utilizzato su {host}. Offrendo una donazione è più facile continuare a svilupparlo!"
roles: "Ruoli"
role: "Ruolo"
noRole: "Ruolo non trovato"
normalUser: "Profilo standard"
undefined: "Indefinito"
assign: "Assegna"
@@ -946,6 +961,10 @@ manageCustomEmojis: "Gestisci le emoji personalizzate"
youCannotCreateAnymore: "Non puoi creare, hai raggiunto il limite."
cannotPerformTemporary: "Indisponibilità temporanea"
cannotPerformTemporaryDescription: "L'attività non può essere svolta, poiché si è raggiunto il limite di esecuzioni possibili. Per favore, riprova più tardi."
invalidParamError: "Errore, parametro non valido"
invalidParamErrorDescription: "Riscontrato un errore nei parametri della richiesta. Solitamente potrebbe essere un malfunzionamento, ma a volte potrebbe essere causato dalla quantità eccessiva di caratteri nel parametro."
permissionDeniedError: "Errore, attività non autorizzata"
permissionDeniedErrorDescription: "Non si dispone dell'autorizzazione per eseguire questa operazione."
preset: "Preimpostato"
selectFromPresets: "Seleziona preimpostato"
achievements: "Obiettivi raggiunti"
@@ -969,13 +988,16 @@ invitationRequiredToRegister: "L'accesso a questa istanza è solo ad invito. Pu
emailNotSupported: "L'istanza non supporta l'invio di email"
postToTheChannel: "Pubblica nel canale"
cannotBeChangedLater: "Non sarà più modificabile"
reactionAcceptance: "Accettazione reazioni"
reactionAcceptance: "Reazioni consentite"
likeOnly: "Solo i Like"
likeOnlyForRemote: "Solo Like remoti"
nonSensitiveOnly: "Solamente non sensibili"
nonSensitiveOnlyForLocalLikeOnlyForRemote: "Solamente non sensibili (solo Mi piace remoti)"
rolesAssignedToMe: "I miei ruoli"
resetPasswordConfirm: "Vuoi davvero ripristinare la password?"
sensitiveWords: "Parole sensibili"
sensitiveWordsDescription: "Imposta automaticamente \"Home\" alla visibilità delle Note che contengono una qualsiasi parola tra queste configurate. Puoi separarle per riga."
sensitiveWordsDescription2: "Gli spazi creano la relazione \"E\" tra parole (questo E quello). Racchiudere una parola nelle slash \"/\" la trasforma in Espressione Regolare."
notesSearchNotAvailable: "Non è possibile cercare tra le Note."
license: "Licenza"
unfavoriteConfirm: "Vuoi davvero rimuovere la preferenza?"
@@ -989,16 +1011,91 @@ enableChartsForFederatedInstances: "Abilita i grafici per le istanze federate"
showClipButtonInNoteFooter: "Aggiungi il bottone Clip tra le azioni delle Note"
largeNoteReactions: "Ingrandisci le reazioni"
noteIdOrUrl: "ID della Nota o URL"
video: "Video"
videos: "Video"
dataSaver: "Risparmia dati"
accountMigration: "Migrazione del profilo"
accountMoved: "Questo profilo ha migrato altrove:"
accountMovedShort: "Questo profilo è stato migrato"
operationForbidden: "Operazione non consentita"
forceShowAds: "Mostra sempre i banner"
addMemo: "Aggiungi Memo"
editMemo: "Modifica Memo"
reactionsList: "Elenco delle reazioni"
renotesList: "Elenco di Rinota"
notificationDisplay: "Stile delle notifiche"
leftTop: "In alto a sinistra"
rightTop: "In alto a destra"
leftBottom: "In basso a sinistra"
rightBottom: "In basso a destra"
stackAxis: "Allineamento"
vertical: "Verticale"
horizontal: "Laterale"
position: "Posizione"
serverRules: "Regolamento"
pleaseConfirmBelowBeforeSignup: "Ai sensi del regolamento EU 679/2016 GDPR, autorizzo il trattamento dati personali come descritto nella informativa Privacy."
pleaseAgreeAllToContinue: "Per continuare, occorre selezionare ed essere d'accordo su tutto."
continue: "Continua"
preservedUsernames: "Nomi utente riservati"
preservedUsernamesDescription: "Elenca, uno per linea, i nomi utente che non possono essere registrati durante la creazione del profilo. La restrizione non si applica agli amministratori. Inoltre, i profili già registrati sono esenti."
createNoteFromTheFile: "Crea Nota da questo file"
archive: "Archivio"
channelArchiveConfirmTitle: "Vuoi davvero archiviare {name}?"
channelArchiveConfirmDescription: "Un canale archiviato non compare nell'elenco canali, nemmeno nei risultati di ricerca. Non può ricevere nemmeno nuove Note."
thisChannelArchived: "Questo canale è stato archiviato."
displayOfNote: "Visualizzazione delle Note"
initialAccountSetting: "Impostazioni iniziali del profilo"
youFollowing: "Seguiti"
preventAiLearning: "Impedisci l'apprendimento della IA"
preventAiLearningDescription: "Aggiungendo il campo \"noai\" alla risposta HTML, si indica ai Robot esterni di non usare testi e allegati per addestrare sistemi di Machine Learning (IA predittiva/generativa). Anche se è impossibile sapere se la richiesta venga onorata o semplicemente ignorata."
options: "Opzioni del ruolo"
specifyUser: "Profilo specifico"
failedToPreviewUrl: "Anteprima non disponibile"
update: "Aggiorna"
rolesThatCanBeUsedThisEmojiAsReaction: "Ruoli che possono usare questa emoji come reazione"
rolesThatCanBeUsedThisEmojiAsReactionEmptyDescription: "Se non viene specificato alcun ruolo, chiunque può reagire con questa emoji."
rolesThatCanBeUsedThisEmojiAsReactionPublicRoleWarn: "Questi ruoli devono essere pubblici"
cancelReactionConfirm: "Vuoi annullare la tua reazione?"
changeReactionConfirm: "Vuoi cambiare la tua reazione?"
later: "Non ora"
goToMisskey: "Vai a Misskey"
additionalEmojiDictionary: "Dizionario aggiuntivo emoji"
installed: "Installazione avvenuta"
branding: "Branding"
enableServerMachineStats: "Pubblicare le informazioni sul server"
enableIdenticonGeneration: "Generazione automatica delle Identicon"
_initialAccountSetting:
accountCreated: "Il tuo profilo è stato creato!"
letsStartAccountSetup: "Per iniziare, impostiamo il tuo profilo."
letsFillYourProfile: "Innanzitutto, compila il tuo profilo."
profileSetting: "Impostazioni del profilo"
privacySetting: "Impostazioni sulla privacy"
theseSettingsCanEditLater: "In seguito, potrai cambiare la tua scelta."
youCanEditMoreSettingsInSettingsPageLater: "Nella pagina \"Impostazioni\", è possibile personalizzare di più il tuo profilo. Dacci un'occhiata dopo!"
followUsers: "Per comporre la tua Timeline Home (personale) segui i profili delle persone che ti interessano."
pushNotificationDescription: "Attivare le notifiche push ti permettera di ricevere informazioni sulla attività di {name} direttamente sul tuo dispositivo."
initialAccountSettingCompleted: "Hai completato la configurazione iniziale!"
haveFun: "Divertiti con {name}!"
ifYouNeedLearnMore: "Per saperne di più su come usare {name} (Misskey), visita la pagina {link}"
skipAreYouSure: "Vuoi davvero saltare la configurazione iniziale?"
laterAreYouSure: "Vuoi davvero rimandare la configurazione iniziale?"
_serverRules:
description: "In Europa è necessario mostrare l'informativa sul trattamento dei dati personali, prima della registrazione al servizio."
_accountMigration:
moveTo: "Migrare questo profilo verso un un altro"
moveToLabel: "Profilo verso cui migrare"
moveAccountDescription: "Questa attività è irreversibile! Innanzitutto, assicurati di aver creato, nella istanza di destinazione, un alias con l'indirizzo di questo profilo. Successivamente, indica qui il profilo di destinazione in questo modo: @persona@istanza.it"
moveFrom: "Migra un altro profilo dentro a questo"
moveFromSub: "Crea un alias verso un altro profilo remoto"
moveFromLabel: "Profilo da cui migrare:"
moveFromDescription: "Se desideri spostare i profili follower da un altro profilo a questo, devi prima creare un alias qui. Assicurati averlo creato PRIMA di eseguire l'attività! Inserisci l'indirizzo del profilo mittente in questo modo: @persona@istanza.it"
moveTo: "Migrare questo profilo verso un un altro"
moveToLabel: "Profilo verso cui migrare"
moveCannotBeUndone: "La migrazione è irreversibile, non può essere interrotta o annullata."
moveAccountDescription: "Questa attività è irreversibile! Innanzitutto, assicurati di aver creato, nella istanza di destinazione, un alias con l'indirizzo di questo profilo. Successivamente, indica qui il profilo di destinazione in questo modo: @persona@istanza.it"
moveAccountHowTo: "Per migrare su un profilo remoto, crea prima un alias di questo profilo, sulla istanza di destinazione.\nDopo aver creato l'alias, inserisci l'indirizzo di destinazione, indicando ad esempio: @profilo@altra.istanza"
startMigration: "Avvia la migrazione"
migrationConfirm: "Vuoi davvero migrare questo profilo su {account}? L'azione è irreversibile e non potrai più utilizzare questo profilo nel suo stato originale.\nInoltre, assicurati di aver già creato un alias sull'account a cui ti stai trasferendo."
movedAndCannotBeUndone: "Il tuo profilo è stato migrato.\nLa migrazione non può essere annullata."
postMigrationNote: "Questo profilo smetterà di seguire gli altri profili remoti a 24 ore dal termine della migrazione.\nSia i Follow che i Follower scenderanno a zero. I tuoi follower saranno comunque in grado di vedere le Note per soli follower, poiché non smetteranno di seguirti."
movedTo: "Profilo verso cui migrare"
_achievements:
earnedAt: "Data di conseguimento"
_types:
@@ -1170,6 +1267,9 @@ _achievements:
_client30min:
title: "Piccola grande pausa"
description: "Hai passato più di 30 minuti su Misskey"
_client60min:
title: "Misskey negli occhi"
description: "Hai letto Misskey almeno per un'ora"
_noteDeletedWithin1min:
title: "Ooops!"
description: "Hai eliminato una nota entro un minuto dalla sua pubblicazione"
@@ -1258,6 +1358,8 @@ _role:
iconUrl: "URL dell'icona"
asBadge: "Mostra come badge"
descriptionOfAsBadge: "Se indicato, accanto al nome utente viene visualizzata l'icona del ruolo."
isExplorable: "La timeline del ruolo è pubblica"
descriptionOfIsExplorable: "Selezionandolo, la timeline del ruolo diventerà accessibile pubblicamente. Tranne se il ruolo non è pubblico."
displayOrder: "Ordine di visualizzazione"
descriptionOfDisplayOrder: "I valori più alti vengono visualizzati per primi"
canEditMembersByModerator: "Anche i Moderatori assegnano profili a questo ruolo"
@@ -1274,6 +1376,7 @@ _role:
canInvite: "Genera codici di invito all'istanza"
canManageCustomEmojis: "Gestire le emoji personalizzate"
driveCapacity: "Capienza del Drive"
alwaysMarkNsfw: "Imposta sempre come NSFW"
pinMax: "Quantità massima di Note in primo piano"
antennaMax: "Quantità massima di Antenne"
wordMuteMax: "Lunghezza massima del filtro parole"
@@ -1384,10 +1487,6 @@ _aboutMisskey:
donate: "Sostieni Misskey"
morePatrons: "Apprezziamo sinceramente il supporto di tante altre persone. Grazie mille! 🥰"
patrons: "Sostenitori"
_nsfw:
respect: "Nascondere i media segnati come sensibli"
ignore: "Visualizzare i media segnati come sensibili"
force: "Nascondere tutti i media"
_instanceTicker:
none: "Nascondi"
remote: "Mostra solo per i profili remoti"
@@ -1406,6 +1505,8 @@ _channel:
following: "Seguiti"
usersCount: "{n} partecipanti"
notesCount: "{n} note"
nameAndDescription: "Nome e descrizione"
nameOnly: "Solo il nome"
_menuDisplay:
sideFull: "Laterale"
sideIcon: "Laterale (solo icone)"
@@ -1523,32 +1624,16 @@ _time:
minute: "min"
hour: "ore"
day: "giorni"
_tutorial:
_timelineTutorial:
title: "Come usare Misskey"
step1_1: "Eccoci!"
step1_2: "Questa pagina si chiama \"Timeline \" e mostra in ordine cronologico le \"note\" delle persone che segui."
step1_3: "Attualmente la tua Timeline è vuota perché non segui alcun profilo e non hai ancora pubblicato alcuna nota."
step2_1: "Prima di scrivere una «Nota» o di seguire altri profili, prepara il tuo profilo!"
step2_2: "Se aggiungi informazioni personali aumenterai le tue possibilità di essere seguit@ da altre persone. "
step3_1: "Hai finito di impostare il tuo profilo?"
step3_2: "Ora puoi pubblicare una «Nota». Proviamo subito! Premi il bottone con l'icona «penna» per iniziare a scrivere in una finestra di dialogo. "
step3_3: "Scritto il testo della nota, puoi pubblicarla premendo il pulsante nella parte superiore destra della finestra di dialogo."
step3_4: "Non ti viene niente in mente? Perché non scrivi semplicemente \"Ho appena iniziato a usare Misskey\"?"
step4_1: "Hai pubblicato qualcosa?"
step4_2: "Se puoi visualizzare la tua nota sulla timeline, ce l'hai fatta!"
step5_1: "Adesso, cerca di seguire altre persone per vivacizzare la tua timeline. "
step5_2: "La pagina {featured} mostra le note di tendenza su questa istanza, magari ti aiuterà a trovare profili che ti piacciono e che vorrai seguire. Altrimenti potrai trovare utenti popolari anche usando {explore}."
step5_3: "Clicca l'immagine per aprire il profilo e premere il bottone \"Seguire\""
step5_4: "Se l'altro profilo ha un lucchetto vicino al nome, significa che occorre un po' di tempo prima che approvi manualmente la tua richiesta di follow."
step6_1: "Adesso, dovresti essere in grado di vedere le note dagli altri profili sulla tua timeline."
step6_2: "Puoi anche rispondere alle note con un click, scegliendo le reazioni immediate."
step6_3: "Per inviare una reazione, premi l'icona + della nota e scegli l'emoji che vuoi mandare."
step7_1: "Congratulazioni! Hai completato l'esercitazione iniziale su come usare Misskey."
step7_2: "Se vuoi saperne di più su Misskey, puoi dare un'occhiata alla sezione {help}."
step7_3: "Da ultimo, buon divertimento su Misskey! 🚀"
step8_1: "Per concludere, vuoi attivare le notifiche push?"
step8_2: "Attivandole, otterrai notifiche di follow, reazioni e menzioni anche quando Misskey è chiuso."
step8_3: "Potrai modificare questa impostazione."
step1_1: "Questa è la \"Timeline\". tutte le \"Note\" pubblicate su {name} vengono elencate in ordine cronologico."
step1_2: "Le Timeline sono diverse, ad esempio, la \"Home\" elenca le Note dei profili che segui. Quella \"Locale\" elenca quelle di tutti i profili attivi su {name}."
step2_1: "Prova a pubblicare una Nota. Semplicemente premendo il bottone con l'icona di una matita."
step2_2: "Potresti scrivere la tua presentazione, oppure semplicemente \"Ciao da {name}!\""
step3_1: "Hai pubblicato qualcosa?"
step3_2: "In tal caso, dovrebbe comparire subito nella tua \"Home\""
step4_1: "Puoi reagire con un emoji alle Note."
step4_2: "To attach a reaction, press the \"+\" mark on a note and choose an emoji you'd like to react with.\nPer reagire con una emoji, premi il bottone \"+\" (più) visibile vicino ad ogni Nota e scegli dall'elenco la emoji che rappresenta la tua reazione."
_2fa:
alreadyRegistered: "La configurazione è stata già completata."
registerTOTP: "Registra un'app di autenticazione"
@@ -1696,7 +1781,7 @@ _visibility:
followersDescription: "Visibile solo ai tuoi follower"
specified: "Nota diretta"
specifiedDescription: "Visibile solo ai profili menzionati"
disableFederation: "Federazione disabilitata"
disableFederation: "Non federare"
disableFederationDescription: "Non spedire attività alle altre istanze remote"
_postForm:
replyPlaceholder: "Rispondi a questa nota..."
@@ -1886,6 +1971,7 @@ _deck:
channel: "Canale"
mentions: "Menzioni"
direct: "Diretta"
roleTimeline: "Timeline Ruolo"
_dialog:
charactersExceeded: "Hai superato il limite di {max} caratteri! ({corrente})"
charactersBelow: "Sei al di sotto del minimo di {min} caratteri! ({corrente})"

View File

@@ -49,9 +49,15 @@ delete: "削除"
deleteAndEdit: "削除して編集"
deleteAndEditConfirm: "このートを削除してもう一度編集しますかこのートへのリアクション、Renote、返信も全て削除されます。"
addToList: "リストに追加"
addToAntenna: "アンテナに追加"
sendMessage: "メッセージを送信"
copyRSS: "RSSをコピー"
copyUsername: "ユーザー名をコピー"
copyUserId: "ユーザーIDをコピー"
copyNoteId: "ートIDをコピー"
copyFileId: "ファイルIDをコピー"
copyFolderId: "フォルダーIDをコピー"
copyProfileUrl: "プロフィールURLをコピー"
searchUser: "ユーザーを検索"
reply: "返信"
loadMore: "もっと見る"
@@ -110,7 +116,7 @@ pinnedNote: "ピン留めされたノート"
pinned: "ピン留め"
you: "あなた"
clickToShow: "クリックして表示"
sensitive: "閲覧注意"
sensitive: "センシティブ"
add: "追加"
reaction: "リアクション"
reactions: "リアクション"
@@ -118,8 +124,8 @@ reactionSetting: "ピッカーに表示するリアクション"
reactionSettingDescription2: "ドラッグして並び替え、クリックして削除、+を押して追加します。"
rememberNoteVisibility: "公開範囲を記憶する"
attachCancel: "添付取り消し"
markAsSensitive: "閲覧注意にする"
unmarkAsSensitive: "閲覧注意を解除する"
markAsSensitive: "センシティブとして設定"
unmarkAsSensitive: "センシティブを解除する"
enterFileName: "ファイル名を入力"
mute: "ミュート"
unmute: "ミュート解除"
@@ -134,8 +140,10 @@ unblockConfirm: "ブロック解除しますか?"
suspendConfirm: "凍結しますか?"
unsuspendConfirm: "解凍しますか?"
selectList: "リストを選択"
editList: "リストを編集"
selectChannel: "チャンネルを選択"
selectAntenna: "アンテナを選択"
editAntenna: "アンテナを編集"
selectWidget: "ウィジェットを選択"
editWidgets: "ウィジェットを編集"
editWidgetsExit: "編集を終了"
@@ -148,6 +156,8 @@ addEmoji: "絵文字を追加"
settingGuide: "おすすめ設定"
cacheRemoteFiles: "リモートのファイルをキャッシュする"
cacheRemoteFilesDescription: "この設定を無効にすると、リモートファイルをキャッシュせず直リンクするようになります。サーバーのストレージを節約できますが、サムネイルが生成されないので通信量が増加します。"
cacheRemoteSensitiveFiles: "リモートのNSFWファイルをキャッシュする"
cacheRemoteSensitiveFilesDescription: "この設定を無効にすると、リモートのNSFWファイルだけはキャッシュせず直リンクするようになります。"
flagAsBot: "Botとして設定"
flagAsBotDescription: "このアカウントがプログラムによって運用される場合は、このフラグをオンにします。オンにすると、反応の連鎖を防ぐためのフラグとして他の開発者に役立ったり、Misskeyのシステム上での扱いがBotに合ったものになります。"
flagAsCat: "にゃああああああああああああああ!!!!!!!!!!!!"
@@ -263,14 +273,16 @@ noMoreHistory: "これより過去の履歴はありません"
startMessaging: "チャットを開始"
nUsersRead: "{n}人が読みました"
agreeTo: "{0}に同意"
agree: "同意する"
agreeBelow: "下記に同意する"
basicNotesBeforeCreateAccount: "基本的な注意事項"
tos: "利用規約"
termsOfService: "利用規約"
start: "始める"
home: "ホーム"
remoteUserCaution: "リモートユーザーのため、情報が不完全です。"
activity: "アクティビティ"
images: "画像"
image: "画像"
birthday: "誕生日"
yearsOld: "{age}歳"
registeredDate: "登録日"
@@ -307,7 +319,7 @@ copyUrl: "URLをコピー"
rename: "名前を変更"
avatar: "アイコン"
banner: "バナー"
nsfw: "閲覧注意"
displayOfSensitiveMedia: "センシティブなメディアの表示"
whenServerDisconnected: "サーバーとの接続が失われたとき"
disconnectedFromServer: "サーバーから切断されました"
reload: "リロード"
@@ -474,6 +486,8 @@ createAccount: "アカウントを作成"
existingAccount: "既存のアカウント"
regenerate: "再生成"
fontSize: "フォントサイズ"
mediaListWithOneImageAppearance: "画像が1枚のみのメディアリストの高さ"
limitTo: "{x}を上限に"
noFollowRequests: "フォロー申請はありません"
openImageInNewTab: "画像を新しいタブで開く"
dashboard: "ダッシュボード"
@@ -556,6 +570,7 @@ accountDeletedDescription: "このアカウントは削除されています。"
menu: "メニュー"
divider: "分割線"
addItem: "項目を追加"
rearrange: "並び替え"
relays: "リレー"
addRelay: "リレーの追加"
inboxUrl: "inboxのURL"
@@ -684,9 +699,9 @@ no: "いいえ"
driveFilesCount: "ドライブのファイル数"
driveUsage: "ドライブ使用量"
noCrawle: "クローラーによるインデックスを拒否"
noCrawleDescription: "検索エンジンにあなたのユーザーページ、ート、Pagesなどのコンテンツを登録(インデックス)しないよう要します。"
noCrawleDescription: "外部の検索エンジンにあなたのユーザーページ、ート、Pagesなどのコンテンツを登録(インデックス)しないよう要します。"
lockedAccountInfo: "フォローを承認制にしても、ノートの公開範囲を「フォロワー」にしない限り、誰でもあなたのノートを見ることができます。"
alwaysMarkSensitive: "デフォルトでメディアを閲覧注意にする"
alwaysMarkSensitive: "デフォルトでメディアをセンシティブ設定にする"
loadRawImages: "添付画像のサムネイルをオリジナル画質にする"
disableShowingAnimatedImages: "アニメーション画像を再生しない"
verificationEmailSent: "確認のメールを送信しました。メールに記載されたリンクにアクセスして、設定を完了してください。"
@@ -699,6 +714,8 @@ contact: "連絡先"
useSystemFont: "システムのデフォルトのフォントを使う"
clips: "クリップ"
experimentalFeatures: "実験的機能"
experimental: "実験的"
thisIsExperimentalFeature: "これは実験的な機能です。仕様が変更されたり、正常に動作しなかったりする可能性があります。"
developer: "開発者"
makeExplorable: "アカウントを見つけやすくする"
makeExplorableDescription: "オフにすると、「みつける」にアカウントが載らなくなります。"
@@ -783,6 +800,7 @@ noMaintainerInformationWarning: "管理者情報が設定されていません
noBotProtectionWarning: "Botプロテクションが設定されていません。"
configure: "設定する"
postToGallery: "ギャラリーへ投稿"
postToHashtag: "このハッシュタグで投稿"
gallery: "ギャラリー"
recentPosts: "最近の投稿"
popularPosts: "人気の投稿"
@@ -816,6 +834,7 @@ translatedFrom: "{x}から翻訳"
accountDeletionInProgress: "アカウントの削除が進行中です"
usernameInfo: "サーバー上であなたのアカウントを一意に識別するための名前。アルファベット(a~z, A~Z)、数字(0~9)、およびアンダーバー(_)が使用できます。ユーザー名は後から変更することは出来ません。"
aiChanMode: "藍モード"
devMode: "開発者モード"
keepCw: "CWを維持する"
pubSub: "Pub/Subのアカウント"
lastCommunication: "直近の通信"
@@ -825,6 +844,8 @@ breakFollow: "フォロワーを解除"
breakFollowConfirm: "フォロワー解除しますか?"
itsOn: "オンになっています"
itsOff: "オフになっています"
on: "オン"
off: "オフ"
emailRequiredForSignup: "アカウント登録にメールアドレスを必須にする"
unread: "未読"
filter: "フィルタ"
@@ -905,9 +926,10 @@ remoteOnly: "リモートのみ"
failedToUpload: "アップロード失敗"
cannotUploadBecauseInappropriate: "不適切な内容を含む可能性があると判定されたためアップロードできません。"
cannotUploadBecauseNoFreeSpace: "ドライブの空き容量が無いためアップロードできません。"
cannotUploadBecauseExceedsFileSizeLimit: "ファイルサイズの制限を超えているためアップロードできません。"
beta: "ベータ"
enableAutoSensitive: "自動NSFW判定"
enableAutoSensitiveDescription: "利用可能な場合は、機械学習を利用して自動でメディアにNSFWフラグを設定します。この機能をオフにしても、サーバーによっては自動で設定されることがあります。"
enableAutoSensitive: "自動センシティブ判定"
enableAutoSensitiveDescription: "利用可能な場合は、機械学習を利用して自動でメディアにセンシティブフラグを設定します。この機能をオフにしても、サーバーによっては自動で設定されることがあります。"
activeEmailValidationDescription: "ユーザーのメールアドレスのバリデーションを、捨てアドかどうかや実際に通信可能かどうかなどを判定しより積極的に行います。オフにすると単に文字列として正しいかどうかのみチェックされます。"
navbar: "ナビゲーションバー"
shuffle: "シャッフル"
@@ -938,6 +960,7 @@ didYouLikeMisskey: "Misskeyを気に入っていただけましたか"
pleaseDonate: "Misskeyは{host}が使用している無料のソフトウェアです。これからも開発を続けられるように、ぜひ寄付をお願いします!"
roles: "ロール"
role: "ロール"
noRole: "ロールはありません"
normalUser: "一般ユーザー"
undefined: "未定義"
assign: "アサイン"
@@ -947,6 +970,10 @@ manageCustomEmojis: "カスタム絵文字の管理"
youCannotCreateAnymore: "これ以上作成することはできません。"
cannotPerformTemporary: "一時的に利用できません"
cannotPerformTemporaryDescription: "操作回数が制限を超過するため一時的に利用できません。しばらく時間を置いてから再度お試しください。"
invalidParamError: "パラメータエラー"
invalidParamErrorDescription: "リクエストパラメータに問題があります。通常これはバグですが、入力した文字数が多すぎる等の可能性もあります。"
permissionDeniedError: "操作が拒否されました"
permissionDeniedErrorDescription: "このアカウントにはこの操作を行うための権限がありません。"
preset: "プリセット"
selectFromPresets: "プリセットから選択"
achievements: "実績"
@@ -972,11 +999,14 @@ postToTheChannel: "チャンネルに投稿"
cannotBeChangedLater: "後から変更できません。"
reactionAcceptance: "リアクションの受け入れ"
likeOnly: "いいねのみ"
likeOnlyForRemote: "リモートからはいいねのみ"
likeOnlyForRemote: "全て (リモートはいいねのみ)"
nonSensitiveOnly: "非センシティブのみ"
nonSensitiveOnlyForLocalLikeOnlyForRemote: "非センシティブのみ (リモートはいいねのみ)"
rolesAssignedToMe: "自分に割り当てられたロール"
resetPasswordConfirm: "パスワードリセットしますか?"
sensitiveWords: "センシティブワード"
sensitiveWordsDescription: "設定したワードが含まれるノートの公開範囲をホームにします。改行で区切って複数設定できます。"
sensitiveWordsDescription2: "スペースで区切るとAND指定になり、キーワードをスラッシュで囲むと正規表現になります。"
notesSearchNotAvailable: "ノート検索は利用できません。"
license: "ライセンス"
unfavoriteConfirm: "お気に入り解除しますか?"
@@ -990,18 +1020,95 @@ enableChartsForFederatedInstances: "リモートサーバーのチャートを
showClipButtonInNoteFooter: "ノートのアクションにクリップを追加"
largeNoteReactions: "ノートのリアクションを大きく表示"
noteIdOrUrl: "ートIDまたはURL"
accountMigration: "アカウントの引っ越し"
accountMoved: "このユーザーは新しいアカウントに引っ越しました:"
video: "動画"
videos: "動画"
dataSaver: "データセーバー"
accountMigration: "アカウントの移行"
accountMoved: "このユーザーは新しいアカウントに移行しました:"
accountMovedShort: "このアカウントは移行されています"
operationForbidden: "この操作はできません"
forceShowAds: "常に広告を表示する"
addMemo: "メモを追加"
editMemo: "メモを編集"
reactionsList: "リアクション一覧"
renotesList: "Renote一覧"
notificationDisplay: "通知の表示"
leftTop: "左上"
rightTop: "右上"
leftBottom: "左下"
rightBottom: "右下"
stackAxis: "スタック方向"
vertical: "縦"
horizontal: "横"
position: "位置"
serverRules: "サーバールール"
pleaseConfirmBelowBeforeSignup: "このサーバーに登録する前に、以下を確認してください。"
pleaseAgreeAllToContinue: "続けるには、全ての「同意する」にチェックが入っている必要があります。"
continue: "続ける"
preservedUsernames: "予約ユーザー名"
preservedUsernamesDescription: "予約するユーザー名を改行で列挙します。ここで指定されたユーザー名はアカウント作成時に使えなくなりますが、管理者によるアカウント作成時はこの制限を受けません。また、既に存在するアカウントも影響を受けません。"
createNoteFromTheFile: "このファイルからノートを作成"
archive: "アーカイブ"
channelArchiveConfirmTitle: "{name}をアーカイブしますか?"
channelArchiveConfirmDescription: "アーカイブすると、チャンネル一覧や検索結果に表示されなくなり、新たな書き込みもできなくなります。"
thisChannelArchived: "このチャンネルはアーカイブされています。"
displayOfNote: "ノートの表示"
initialAccountSetting: "初期設定"
youFollowing: "フォロー中"
preventAiLearning: "生成AIによる学習を拒否"
preventAiLearningDescription: "外部の文章生成AIや画像生成AIに対して、投稿したートや画像などのコンテンツを学習の対象にしないように要求します。これはnoaiフラグをHTMLレスポンスに含めることによって実現されますが、この要求に従うかはそのAI次第であるため、学習を完全に防止するものではありません。"
options: "オプション"
specifyUser: "ユーザー指定"
failedToPreviewUrl: "プレビューできません"
update: "更新"
rolesThatCanBeUsedThisEmojiAsReaction: "リアクションとして使えるロール"
rolesThatCanBeUsedThisEmojiAsReactionEmptyDescription: "ロールの指定が一つもない場合、誰でもリアクションとして使えます。"
rolesThatCanBeUsedThisEmojiAsReactionPublicRoleWarn: "ロールは公開ロールである必要があります。"
cancelReactionConfirm: "リアクションを取り消しますか?"
changeReactionConfirm: "リアクションを変更しますか?"
later: "あとで"
goToMisskey: "Misskeyへ"
additionalEmojiDictionary: "絵文字の追加辞書"
installed: "インストール済み"
branding: "ブランディング"
enableServerMachineStats: "サーバーのマシン情報を公開する"
enableIdenticonGeneration: "ユーザーごとのIdenticon生成を有効にする"
turnOffToImprovePerformance: "オフにするとパフォーマンスが向上します。"
_initialAccountSetting:
accountCreated: "アカウントの作成が完了しました!"
letsStartAccountSetup: "アカウントの初期設定を行いましょう。"
letsFillYourProfile: "まずはあなたのプロフィールを設定しましょう。"
profileSetting: "プロフィール設定"
privacySetting: "プライバシー設定"
theseSettingsCanEditLater: "これらの設定は後から変更できます。"
youCanEditMoreSettingsInSettingsPageLater: "この他にも様々な設定を「設定」ページから行えます。ぜひ後で確認してみてください。"
followUsers: "タイムラインを構築するため、気になるユーザーをフォローしてみましょう。"
pushNotificationDescription: "プッシュ通知を有効にすると{name}の通知をお使いのデバイスで受け取ることができます。"
initialAccountSettingCompleted: "初期設定が完了しました!"
haveFun: "{name}をお楽しみください!"
ifYouNeedLearnMore: "{name}(Misskey)の使い方などを詳しく知るには{link}をご覧ください。"
skipAreYouSure: "初期設定をスキップしますか?"
laterAreYouSure: "初期設定をあとでやり直しますか?"
_serverRules:
description: "新規登録前に表示する、サーバーの簡潔なルールを設定します。内容は利用規約の要約とすることを推奨します。"
_accountMigration:
moveTo: "のアカウントを新しいアカウントに引っ越す"
moveToLabel: "引っ越し先のアカウント"
moveAccountDescription: "この操作は取り消せません。まずは引っ越し先のアカウントでこのアカウントに対しエイリアスを作成したことを確認してください。エイリアス作成後、引っ越し先のアカウントをこのように入力してください:@person@instance.com"
moveFrom: "別のアカウントからこのアカウントに引っ越す"
moveFromLabel: "引っ越し元のアカウント"
moveFromDescription: "別のアカウントからこのアカウントにフォロワーを引き継いで引っ越したい場合、ここでエイリアスを作成しておく必要があります。必ず引っ越しを実行する前に作成してください!引っ越し元のアカウントをこのように入力してください:@person@instance.com"
migrationConfirm: "本当にこのアカウントを {account} に引っ越しますか?一度引っ越しを行うと取り消せず、二度とこのアカウントを元の状態で使用できなくなります。\nまた、引っ越し先のアカウントでエイリアスを作成したことを確認してください。"
moveFrom: "のアカウントからこのアカウントに移行"
moveFromSub: "のアカウントへエイリアスを作成"
moveFromLabel: "移行元のアカウント #{n}"
moveFromDescription: "別のアカウントからこのアカウントに移行したい場合、ここでエイリアスを作成しておく必要があります。\n移行元のアカウントをこのように入力してください: @username@server.example.com\n削除するには、入力欄を空にして保存します非推奨"
moveTo: "のアカウントを新しいアカウントへ移行"
moveToLabel: "移行先のアカウント:"
moveCannotBeUndone: "アカウントを移行すると、取り消すことはできません。"
moveAccountDescription: "新しいアカウントへ移行します。\n ・フォロワーが新しいアカウントを自動でフォローします\n ・このアカウントからのフォローは全て解除されます\n ・このアカウントではートの作成などができなくなります\n\nフォロワーの移行は自動ですが、フォローの移行は手動で行う必要があります。移行前にこのアカウントでフォローエクスポートし、移行後すぐに移行先アカウントでインポートを行なってください。\nリスト・ミュート・ブロックについても同様ですので、手動で移行する必要があります。\n\nこの説明はこのサーバーMisskey v13.12.0以降の仕様です。Mastodonなどの他のActivityPubソフトウェアでは挙動が異なる場合があります。"
moveAccountHowTo: "アカウントの移行には、まずは移行先のアカウントでこのアカウントに対しエイリアスを作成します。\nエイリアス作成後、移行先のアカウントを次のように入力してください: @username@server.example.com"
startMigration: "移行する"
migrationConfirm: "本当にこのアカウントを {account} に移行しますか?一度移行すると取り消せず、二度とこのアカウントを元の状態で使用できなくなります。"
movedAndCannotBeUndone: "\nアカウントは移行されています。\n移行を取り消すことはできません。"
postMigrationNote: "このアカウントからのフォロー解除は移行操作から24時間後に実行されます。\nこのアカウントのフォロー・フォロワー数は0になっています。フォロワーの解除はされないため、あなたのフォロワーはこのアカウントのフォロワー向け投稿を引き続き閲覧できます。"
movedTo: "移行先のアカウント:"
_achievements:
earnedAt: "獲得日時"
@@ -1174,6 +1281,9 @@ _achievements:
_client30min:
title: "ひとやすみ"
description: "クライアントを起動してから30分以上経過した"
_client60min:
title: "Misskeyの見すぎ"
description: "クライアントを起動してから60分以上経過した"
_noteDeletedWithin1min:
title: "いまのなし"
description: "投稿してから1分以内にその投稿を削除した"
@@ -1253,8 +1363,8 @@ _role:
conditional: "コンディショナル"
condition: "条件"
isConditionalRole: "これはコンディショナルロールです。"
isPublic: "ロールを公開"
descriptionOfIsPublic: "ロールにアサインされたユーザーを誰でも見ることができます。また、ユーザーのプロフィールでこのロールが表示されます。"
isPublic: "公開ロール"
descriptionOfIsPublic: "ユーザーのプロフィールでこのロールが表示されます。"
options: "オプション"
policies: "ポリシー"
baseRole: "ベースロール"
@@ -1263,6 +1373,8 @@ _role:
iconUrl: "アイコン画像のURL"
asBadge: "バッジとして表示"
descriptionOfAsBadge: "オンにすると、ユーザー名の横にロールのアイコンが表示されます。"
isExplorable: "ユーザーを見つけやすくする"
descriptionOfIsExplorable: "オンにすると、「みつける」でメンバー一覧が公開されるほか、ロールのタイムラインが利用可能になります。"
displayOrder: "表示順"
descriptionOfDisplayOrder: "数値が大きいほどUI上で先頭に表示されます。"
canEditMembersByModerator: "モデレーターのメンバー編集を許可"
@@ -1279,6 +1391,7 @@ _role:
canInvite: "サーバー招待コードの発行"
canManageCustomEmojis: "カスタム絵文字の管理"
driveCapacity: "ドライブ容量"
alwaysMarkNsfw: "ファイルにNSFWを常に付与"
pinMax: "ノートのピン留めの最大数"
antennaMax: "アンテナの作成可能数"
wordMuteMax: "ワードミュートの最大文字数"
@@ -1310,7 +1423,7 @@ _sensitiveMediaDetection:
description: "機械学習を使って自動でセンシティブなメディアを検出し、モデレーションに役立てることができます。サーバーの負荷が少し増えます。"
sensitivity: "検出感度"
sensitivityDescription: "感度を低くすると、誤検知(偽陽性)が減ります。感度を高くすると、検知漏れ(偽陰性)が減ります。"
setSensitiveFlagAutomatically: "NSFWフラグを設定する"
setSensitiveFlagAutomatically: "センシティブフラグを設定する"
setSensitiveFlagAutomaticallyDescription: "この設定をオフにしても内部的に判定結果は保持されます。"
analyzeVideos: "動画の解析を有効化"
analyzeVideosDescription: "静止画に加えて動画も解析するようにします。サーバーの負荷が少し増えます。"
@@ -1344,6 +1457,7 @@ _ad:
back: "戻る"
reduceFrequencyOfThisAd: "この広告の表示頻度を下げる"
hide: "表示しない"
timezoneinfo: "曜日はサーバーのタイムゾーンを元に指定されます。"
_forgotPassword:
enterEmail: "アカウントに登録したメールアドレスを入力してください。そのアドレス宛てに、パスワードリセット用のリンクが送信されます。"
@@ -1403,9 +1517,9 @@ _aboutMisskey:
morePatrons: "他にも多くの方が支援してくれています。ありがとうございます🥰"
patrons: "支援者"
_nsfw:
respect: "閲覧注意のメディア隠す"
ignore: "閲覧注意のメディアを隠さない"
_displayOfSensitiveMedia:
respect: "センシティブ設定されたメディア隠す"
ignore: "センシティブ設定されたメディアを隠さない"
force: "常にメディアを隠す"
_instanceTicker:
@@ -1556,32 +1670,16 @@ _time:
hour: "時間"
day: "日"
_tutorial:
_timelineTutorial:
title: "Misskeyの使い方"
step1_1: "ようこそ。"
step1_2: "この画面は「タイムライン」と呼ばれ、あなたや、あなたがフォロー」する人の「ノート」が時系列で表示されます。"
step1_3: "あなたはまだ何もノートを投稿しておらず、誰もフォローしていないので、タイムラインには何も表示されていないはずです。"
step2_1: "ノートを作成したり誰かをフォローしたりする前に、まずあなたのプロフィールを完成させましょう。"
step2_2: "あなたがどんな人かわかると、多くの人にノートを見てもらえたり、フォローしてもらいやすくなります。"
step3_1: "プロフィール設定はうまくできましたか?"
step3_2: "では試しに、何かノートを投稿してみてください。画面上にある鉛筆マークのボタンを押すとフォームが開きます。"
step3_3: "内容を書いたら、フォーム右上のボタンを押すと投稿できます。"
step3_4: "内容が思いつかない「Misskey始めました」というのはいかがでしょう。"
step4_1: "投稿できましたか?"
step4_2: "あなたのノートがタイムラインに表示されていれば成功です。"
step5_1: "次は、他の人をフォローしてタイムラインを賑やかにしたいところです。"
step5_2: "{featured}で人気のノートが見れるので、その中から気になった人を選んでフォローしたり、{explore}で人気のユーザーを探すこともできます。"
step5_3: "ユーザーをフォローするには、ユーザーのアイコンをクリックしてユーザーページを表示し、「フォロー」ボタンを押します。"
step5_4: "ユーザーによっては、フォローが承認されるまで時間がかかる場合があります。"
step6_1: "タイムラインに他のユーザーのノートが表示されていれば成功です。"
step6_2: "他の人のノートには、「リアクション」を付けることができ、簡単にあなたの反応を伝えられます。"
step6_3: "リアクションを付けるには、ノートの「+」マークをクリックして、好きなリアクションを選択します。"
step7_1: "これで、Misskeyの基本的な使い方の説明は終わりました。お疲れ様でした。"
step7_2: "もっとMisskeyについて知りたいときは、{help}を見てみてください。"
step7_3: "では、Misskeyをお楽しみください🚀"
step8_1: "最後に、プッシュ通知を有効化してみませんか?"
step8_2: "プッシュ通知を受け取ることで、Misskeyを開いていない時にもリアクションやフォロー、メンションなどに気づけます。"
step8_3: "通知の設定は後から変更できます。"
step1_1: "この画面は「タイムライン」です。{name}に投稿された「ノート」が時系列で表示されます。"
step1_2: "タイムラインにはいくつか種類があり、例えば「ホームタイムライン」にはあなたがフォローしている人のノートが流れ、「ローカルタイムライン」には{name}全体のノートが流れます。"
step2_1: "試しに、何かノートを投稿してみましょう。画面上にある鉛筆マークのボタンを押すとフォームが開きます。"
step2_2: "初めてのノートの内容は、あなたの自己紹介や「{name}始めました」などがおすすめです。"
step3_1: "投稿できましたか?"
step3_2: "あなたのノートがタイムラインに表示されていれば成功です。"
step4_1: "ノートには、「リアクション」を付けることができます。"
step4_2: "リアクションを付けるには、ノートの「+」マークをクリックして、好きな絵文字を選択します。"
_2fa:
alreadyRegistered: "既に設定は完了しています。"
@@ -1763,7 +1861,7 @@ _profile:
metadataDescription: "プロフィールに表として追加情報を表示することができます。"
metadataLabel: "ラベル"
metadataContent: "内容"
changeAvatar: "アバター画像を変更"
changeAvatar: "アイコン画像を変更"
changeBanner: "バナー画像を変更"
_exportOrImport:
@@ -1943,6 +2041,7 @@ _deck:
channel: "チャンネル"
mentions: "あなた宛て"
direct: "ダイレクト"
roleTimeline: "ロールタイムライン"
_dialog:
charactersExceeded: "最大文字数を超えています! 現在 {current} / 制限 {max}"

View File

@@ -1,14 +1,14 @@
---
_lang_: "日本語 (関西弁)"
headlineMisskey: "ノートでつながるネットワーク"
introMisskey: "ようお越しMisskeyは、オープンソースの分散型マイクロブログサービスやねん。\n「ート」を作って、いま起こっとることを共有したり、あんたについて皆に発信しよう📡\n「リアクション」機能で、皆のノートに素早く反応を追加したりもできるで✌\nほな新しい世界を探検しよか🚀"
introMisskey: "ようお越しMisskeyは、オープンソースの分散型マイクロブログサービスやねん。\n「ート」を作って、いま起こっとることを共有したり、あんたについて皆に発信しよう📡\n「ツッコミ」機能で、皆のノートに素早く反応を追加したりもできるで✌\nほな新しい世界を探検しよか🚀"
poweredByMisskeyDescription: "{name}は、オープンソースのプラットフォーム<b>Misskey</b>のサーバーのひとつなんやで。"
monthAndDay: "{month}月 {day}日"
search: "探す"
notifications: "通知"
username: "ユーザー名"
password: "パスワード"
forgotPassword: "パスワード忘れてもうた"
forgotPassword: "パスワード忘れたん?"
fetchingAsApObject: "今ちと連合に照会しとるで"
ok: "ええで"
gotIt: "ほい"
@@ -20,12 +20,13 @@ noNotes: "ノートはあらへん"
noNotifications: "通知はあらへん"
instance: "サーバー"
settings: "設定"
notificationSettings: "通知の設定"
basicSettings: "基本設定"
otherSettings: "ほかの設定"
openInWindow: "ウィンドウで開くで"
profile: "プロフィール"
timeline: "タイムライン"
noAccountDescription: "自己紹介はあらへん"
noAccountDescription: "自己紹介食ってもた"
login: "ログイン"
loggingIn: "ログインしよるで"
logout: "ログアウト"
@@ -37,20 +38,22 @@ addUser: "ユーザーを追加や"
favorite: "お気に入り"
favorites: "お気に入り"
unfavorite: "やっぱ気に入らん"
favorited: "お気に入りに登録したで"
favorited: "お気に入りに入れたで"
alreadyFavorited: "もうお気に入りに入れとるがな。"
cantFavorite: "アカン、お気に入り登録できへんかった。"
cantFavorite: "アカン、お気に入りに入れれんかった。"
pin: "ピン留めしとく"
unpin: "やっぱピン留めせん"
copyContent: "内容をコピー"
copyLink: "リンクをコピー"
delete: "ほかす"
deleteAndEdit: "ほかして直す"
deleteAndEditConfirm: "このノートをほかしてもっかい直す?このノートへのリアクション、Renote、返信も全部消えるんやけどそれでもええん"
deleteAndEditConfirm: "このノートをほかしてもっかい直す?このノートへのツッコミ、Renote、返信も全部消えるんやけどそれでもええん"
addToList: "リストに入れたる"
sendMessage: "メッセージを送る"
copyRSS: "RSSをコピー"
copyUsername: "ユーザー名をコピー"
copyUserId: "ユーザーIDをコピー"
copyNoteId: "ートIDをコピー"
searchUser: "ユーザーを検索"
reply: "返事"
loadMore: "まだまだあるで!"
@@ -60,7 +63,7 @@ youGotNewFollower: "フォローされたで"
receiveFollowRequest: "フォローリクエストされたで"
followRequestAccepted: "フォローが承認されたで"
mention: "メンション"
mentions: "うち宛て"
mentions: "自分宛て"
directNotes: "ダイレクト投稿"
importAndExport: "インポートとエクスポート"
import: "インポート"
@@ -108,12 +111,12 @@ inChannelQuote: "チャンネル内引用"
pinnedNote: "ピン留めされとるノート"
pinned: "ピン留めしとく"
you: "あんた"
clickToShow: "押したら出ら"
clickToShow: "押したら見えるで"
sensitive: "気いつけて見いや"
add: "増やす"
reaction: "リアクション"
reactions: "リアクション"
reactionSetting: "ピッカーに出しとくリアクション"
reaction: "ツッコミ"
reactions: "ツッコミ"
reactionSetting: "ピッカーに出しとくツッコミ"
reactionSettingDescription2: "ドラッグで並び替え、クリックで削除、+を押して追加やで。"
rememberNoteVisibility: "公開範囲覚えといて"
attachCancel: "のっけるのやめる"
@@ -133,8 +136,10 @@ unblockConfirm: "ブロックやめたるってほんまか?"
suspendConfirm: "凍結してしもうてええか?"
unsuspendConfirm: "解凍するけどええか?"
selectList: "リストを選ぶ"
editList: "リスト直すで"
selectChannel: "チャンネルを選ぶ"
selectAntenna: "アンテナを選ぶ"
editAntenna: "アンテナを編集"
selectWidget: "ウィジェットを選ぶ"
editWidgets: "ウィジェットをいじる"
editWidgetsExit: "編集終ったで"
@@ -262,14 +267,16 @@ noMoreHistory: "これより昔のんはあらへんで"
startMessaging: "チャットやるで"
nUsersRead: "{n}人が読んでもうた"
agreeTo: "{0}に同意したで"
agree: "せやな"
agreeBelow: "下記に同意したる"
basicNotesBeforeCreateAccount: "よう読んでやってや"
tos: "利用規約"
termsOfService: "使うための決め事"
start: "始める"
home: "ホーム"
remoteUserCaution: "リモートユーザーやから、足りひん情報あるかもしれへん。"
activity: "アクティビティ"
images: "画像"
image: "画像"
birthday: "生まれた日"
yearsOld: "{age}歳"
registeredDate: "始めた日"
@@ -306,7 +313,6 @@ copyUrl: "URLをコピー"
rename: "名前を変えるで"
avatar: "アイコン"
banner: "バナー"
nsfw: "見るんは気いつけてな"
whenServerDisconnected: "サーバーとの接続が失くなってしもうたとき"
disconnectedFromServer: "サーバーが機嫌悪いねん"
reload: "リロード"
@@ -321,7 +327,7 @@ instanceName: "サーバー名"
instanceDescription: "サーバーの紹介"
maintainerName: "管理者はんの名前"
maintainerEmail: "管理者はんのメールアドレス"
tosUrl: "利用規約のURL"
tosUrl: "使うための決め事のURL"
thisYear: "今年"
thisMonth: "今月"
today: "今日"
@@ -459,7 +465,7 @@ uiLanguage: "UIの表示言語"
aboutX: "{x}について"
emojiStyle: "絵文字のスタイル"
native: "ネイティブ"
disableDrawer: "メニューをドロワーで表示せへん"
disableDrawer: "メニューをドロワーで表示せへん"
showNoteActionsOnlyHover: "ノートの操作部をホバー時のみ表示するで"
noHistory: "履歴はないわ。"
signinHistory: "ログイン履歴"
@@ -473,6 +479,8 @@ createAccount: "アカウントを作るで"
existingAccount: "前に作ったアカウント"
regenerate: "もっぺん生成するで"
fontSize: "字の大きさ"
mediaListWithOneImageAppearance: "画像が1枚のみのメディアリストの高さ"
limitTo: "{x}をいっぱいに"
noFollowRequests: "フォロー申請はあらへんで"
openImageInNewTab: "画像を新しいタブで開くで"
dashboard: "ダッシュボード"
@@ -547,7 +555,7 @@ removeAllFollowingDescription: "{host}からのフォローをすべて解除す
userSuspended: "このユーザーは...凍結されとる。"
userSilenced: "このユーザーは...サイレンスされとる。"
yourAccountSuspendedTitle: "あんたのアカウント凍結されとるで"
yourAccountSuspendedDescription: "あんたのアカウントは、サーバーの利用規約に違反したとかの理由で、凍結されとるで。細かいことは管理者までお問い合わせたってなー。絶対に新しいアカウント作ったらあかんで。絶対やで。"
yourAccountSuspendedDescription: "あんたのアカウントは、サーバーの使うための決め事に違反したとかの理由で、凍結されとるで。細かいことは管理者までお問い合わせたってなー。絶対に新しいアカウント作ったらあかんで。絶対やで。"
tokenRevoked: "トークンが無効やで"
tokenRevokedDescription: "ログイントークンが失効しとるで。もっかいログインしてもろてもええか?"
accountDeleted: "アカウントは削除されとるで"
@@ -555,6 +563,7 @@ accountDeletedDescription: "このアカウントは削除されとるで。"
menu: "メニュー"
divider: "分割線"
addItem: "項目を追加"
rearrange: "並び替え"
relays: "リレー"
addRelay: "リレーの追加"
inboxUrl: "inboxのURL"
@@ -581,7 +590,7 @@ preferencesBackups: "設定のバックアップ"
deck: "デッキ"
undeck: "デッキ解除"
useBlurEffectForModal: "モーダルにぼかし効果を使用"
useFullReactionPicker: "フル機能にリアクションピッカーを使用"
useFullReactionPicker: "フル機能の突っ込みピッカーを使用"
width: "幅"
height: "高さ"
large: "大"
@@ -674,8 +683,8 @@ repliedCount: "返信された数やで"
renotedCount: "Renoteされた数やで"
followingCount: "フォロー数やで"
followersCount: "フォロワー数やで"
sentReactionsCount: "リアクションした数やで"
receivedReactionsCount: "リアクションされた数"
sentReactionsCount: "ツッコんだ数"
receivedReactionsCount: "ツッコまれた数"
pollVotesCount: "アンケートに投票した数"
pollVotedCount: "アンケートに投票された数"
yes: "ええで"
@@ -683,7 +692,7 @@ no: "あかん"
driveFilesCount: "ドライブのファイル数"
driveUsage: "ドライブ使用量やで"
noCrawle: "クローラーによるインデックスを拒否するで"
noCrawleDescription: "検索エンジンにあんたのユーザーページ、ート、Pagesとかのコンテンツを登録(インデックス)せんように頼むで。邪魔すんねんやったら帰って〜。"
noCrawleDescription: "検索エンジンにあんたのユーザーページ、ート、Pagesとかのコンテンツを登録(インデックス)せぇへんように頼むで。"
lockedAccountInfo: "フォローを承認制にしとっても、ノートの公開範囲を「フォロワー」にせぇへん限り、誰でもあんたのノートを見れるで。"
alwaysMarkSensitive: "デフォルトでメディアを閲覧注意にするで"
loadRawImages: "添付画像のサムネイルをオリジナル画質にするで"
@@ -698,6 +707,8 @@ contact: "連絡先"
useSystemFont: "システムのデフォルトのフォントを使うで"
clips: "クリップ"
experimentalFeatures: "おためし機能やで"
experimental: "実験的"
thisIsExperimentalFeature: "これは実験的な機能やで。仕様が変更になったりちゃんと動かなかったりするかもやで。"
developer: "開発者やで"
makeExplorable: "アカウントを見つけやすくするで"
makeExplorableDescription: "オフにすると、「みつける」にアカウントが載らんくなるで。"
@@ -744,7 +755,7 @@ receiveAnnouncementFromInstance: "サーバーからのお知らせを受け取
emailNotification: "メール通知"
publish: "公開"
inChannelSearch: "チャンネル内検索"
useReactionPickerForContextMenu: "右クリックでリアクションピッカーを開くようにする"
useReactionPickerForContextMenu: "右クリックでツッコミピッカーを開くようにする"
typingUsers: "{users}が今書きよるで"
jumpToSpecifiedDate: "特定の日付にジャンプ"
showingPastTimeline: "過去のタイムラインを表示してるで"
@@ -782,6 +793,7 @@ noMaintainerInformationWarning: "管理者情報が設定されてへんで"
noBotProtectionWarning: "Botプロテクションが設定されてへんで。"
configure: "設定する"
postToGallery: "ギャラリーへ投稿"
postToHashtag: "このハッシュタグで投稿"
gallery: "ギャラリー"
recentPosts: "最近の投稿"
popularPosts: "人気の投稿"
@@ -815,6 +827,7 @@ translatedFrom: "{x}から翻訳するで"
accountDeletionInProgress: "アカウント削除しとるで待っとってなー"
usernameInfo: "サーバー上であんたのアカウントをあんたやと分かるようにするための名前やで。アルファベット(a~z, A~Z)、数字(0~9)、それとアンダーバー(_)が使って考えてな。この名前は後から変更することはできへんからちゃんと考えるんやで。"
aiChanMode: "藍モードやで"
devMode: "開発者モード"
keepCw: "CWを維持するで"
pubSub: "Pub/Subのアカウント"
lastCommunication: "直近の通信"
@@ -824,13 +837,15 @@ breakFollow: "フォロワーを解除するで"
breakFollowConfirm: "フォロワー解除してもええか?"
itsOn: "オンになっとるよ"
itsOff: "オフになってるで"
on: "オン"
off: "オフ"
emailRequiredForSignup: "アカウント登録にメールアドレスを必須にするで"
unread: "未読"
filter: "フィルタ"
controlPanel: "コントロールパネル"
manageAccounts: "アカウントを管理"
makeReactionsPublic: "リアクション一覧を公開するで"
makeReactionsPublicDescription: "あんたがしたリアクション一覧を誰でも見れるようにするで。"
makeReactionsPublic: "ツッコミ一覧を公開するで"
makeReactionsPublicDescription: "あんたがしたツッコミ一覧を誰でも見れるようにするで。"
classic: "クラシック"
muteThread: "スレッドをミュート"
unmuteThread: "スレッドのミュートを解除"
@@ -904,6 +919,7 @@ remoteOnly: "リモートのみ"
failedToUpload: "アップロードに失敗してもうたわ…"
cannotUploadBecauseInappropriate: "不適切な内容を含むかもしれへんって判定されたからアップロードできへんわ。"
cannotUploadBecauseNoFreeSpace: "ドライブの空き容量が無いからアップロードできへんわ。"
cannotUploadBecauseExceedsFileSizeLimit: "ファイルが思うたよりも大きいさかいアップロードできへんでこれ。"
beta: "ベータ"
enableAutoSensitive: "自動NSFW判定"
enableAutoSensitiveDescription: "使える時は、機械学習を使って自動でメディアにNSFWフラグを設定するで。この機能をオフにしても、サーバーによっては自動で設定されることがあるで。"
@@ -937,6 +953,7 @@ didYouLikeMisskey: "Misskey気に入ってくれた"
pleaseDonate: "Misskeyは{host}が使用している無料のソフトウェアやで。これからも開発を続けれるように、寄付したってな~。"
roles: "ロール"
role: "ロール"
noRole: "ロールはありまへん"
normalUser: "一般ユーザー"
undefined: "未定義"
assign: "アサイン"
@@ -946,6 +963,10 @@ manageCustomEmojis: "カスタム絵文字の管理"
youCannotCreateAnymore: "これ以上作れなさそうやわ"
cannotPerformTemporary: "一時的に利用できへんで"
cannotPerformTemporaryDescription: "操作回数が制限を超えたから一時的に利用できへんくなったで。ちょっと時間置いてからもう一回やってやー。"
invalidParamError: "パラメータがエラー言うとりますわ"
invalidParamErrorDescription: "リクエストパラメータに問題があんねん。普通はバグやねんけど、もしかすると入力した文字数が多すぎるとかの可能性もあるから確認してや〜"
permissionDeniedError: "操作が拒否されてもうた。"
permissionDeniedErrorDescription: "自分のアカウントにはこの操作を行う権限があらへんねん"
preset: "プリセット"
selectFromPresets: "プリセットから選ぶ"
achievements: "実績"
@@ -969,13 +990,16 @@ invitationRequiredToRegister: "今このサーバー招待制になってもう
emailNotSupported: "このサーバーはメール配信がサポートされてへんみたいやわ"
postToTheChannel: "チャンネルに投稿"
cannotBeChangedLater: "後からは変えられへんで。"
reactionAcceptance: "リアクションの受け入れ"
reactionAcceptance: "ツッコミの受け入れ"
likeOnly: "いいねだけ"
likeOnlyForRemote: "リモートからはいいねだけな"
nonSensitiveOnly: "センシティブじゃないやつだけ"
nonSensitiveOnlyForLocalLikeOnlyForRemote: "センシティブじゃないやつだけ (リモートはいいねだけ)"
rolesAssignedToMe: "自分に割り当てられたロール"
resetPasswordConfirm: "パスワード作り直すんでええな?"
sensitiveWords: "けったいな単語"
sensitiveWordsDescription: "設定した単語が入っとるノートの公開範囲をホームにしたるわ。改行で区切ったら複数設定できるで。"
sensitiveWordsDescription2: "スペースで区切るとAND指定、キーワードをスラッシュで囲んだら正規表現や。"
notesSearchNotAvailable: "ノート検索は使われへんで。"
license: "ライセンス"
unfavoriteConfirm: "ほんまに気に入らんの?"
@@ -987,19 +1011,93 @@ retryAllQueuesConfirmText: "一時的にサーバー重なるかもしれへん
enableChartsForRemoteUser: "リモートユーザーのチャートを作る"
enableChartsForFederatedInstances: "リモートサーバーのチャートを作る"
showClipButtonInNoteFooter: "ノートのアクションにクリップを追加"
largeNoteReactions: "ノートのリアクションを大きする"
largeNoteReactions: "ノートのツッコミを大きする"
noteIdOrUrl: "ートIDかURL"
video: "動画"
videos: "動画"
dataSaver: "データケチケチ"
accountMigration: "アカウントのお引っ越し"
accountMoved: "このユーザーはさらのアカウントに引っ越したで:"
accountMovedShort: "このアカウントは移行されとるで"
operationForbidden: "この操作はできまへん"
forceShowAds: "常に広告を表示しとく"
addMemo: "メモを足す"
editMemo: "メモをいらう"
reactionsList: "ツッコミ一覧"
renotesList: "Renote一覧"
notificationDisplay: "通知見せる"
leftTop: "左上"
rightTop: "右上"
leftBottom: "左下"
rightBottom: "右下"
stackAxis: "重ねる方向"
vertical: "縦"
horizontal: "横"
position: "位置"
serverRules: "サーバールール"
pleaseConfirmBelowBeforeSignup: "このサーバーに登録する前に、下に書いてること確認してな。"
pleaseAgreeAllToContinue: "続けるんやったら、全ての「せやな」にチェック入れてる必要があるで。"
continue: "続けるで"
preservedUsernames: "予約ユーザー名"
preservedUsernamesDescription: "予約しとくユーザー名を行ごとに挙げるで。ここで指定されたユーザー名はアカウント作るときに使えへんくなるけど、管理者は例外や。あと、もうあるアカウントも例外やな。"
createNoteFromTheFile: "このファイル使うてノート作るで"
archive: "アーカイブ"
channelArchiveConfirmTitle: "{name}をアーカイブしてええか?"
channelArchiveConfirmDescription: "アーカイブしたら、チャンネル一覧とか検索結果からなくなるし、新しく書き込みもできへんなるで。"
thisChannelArchived: "このチャンネル、アーカイブされとるで。"
displayOfNote: "ノートの表示"
initialAccountSetting: "初期設定"
youFollowing: "フォロー中やで"
preventAiLearning: "生成AIの学習に使わんといて"
preventAiLearningDescription: "他の文章生成AIとか画像生成AIに、投稿したートとか画像なんかを勝手に使わんように頼むで。具体的にはnoaiフラグをHTMLレスポンスに含めるんやけど、これ聞いてくれるんはAIの気分次第やから、使われる可能性もちょっとはあるな。"
options: "オプション"
specifyUser: "ユーザー指定"
failedToPreviewUrl: "プレビューできへん"
update: "更新"
rolesThatCanBeUsedThisEmojiAsReaction: "ツッコミとして使えるロール"
rolesThatCanBeUsedThisEmojiAsReactionEmptyDescription: "ロールが一個も指定されてへんかったら、誰でもツッコミとして使えるで。"
rolesThatCanBeUsedThisEmojiAsReactionPublicRoleWarn: "ロールは公開ロールじゃないとアカンで。"
cancelReactionConfirm: "ツッコむんをやっぱやめるか?"
changeReactionConfirm: "ツッコミを別のに変えるか?"
later: "あとで"
goToMisskey: "Misskeyへ"
additionalEmojiDictionary: "絵文字の追加辞書"
installed: "インストール済み"
branding: "あ"
enableServerMachineStats: "サーバーのマシン情報見せびらかすで"
enableIdenticonGeneration: "ユーザーごとのIdenticon生成を有効にする"
_initialAccountSetting:
accountCreated: "アカウント作り終わったで。"
letsStartAccountSetup: "アカウントの初期設定をしよか。"
letsFillYourProfile: "最初はあんたのプロフィールを設定しよか。"
profileSetting: "プロフィール設定"
privacySetting: "プライバシー設定"
theseSettingsCanEditLater: "この設定はあとから変えれるで。"
youCanEditMoreSettingsInSettingsPageLater: "これ以外にもいろんな設定を「設定」ページからできるで。後で確認してみてな。"
followUsers: "タイムラインを構築するために、気になるユーザーをフォローしてみ。"
pushNotificationDescription: "プッシュ通知を有効にすると{name}の通知をあんたのデバイスで受け取れるで。"
initialAccountSettingCompleted: "初期設定が終わったで。"
haveFun: "{name}、楽しんでな~"
ifYouNeedLearnMore: "{name}(Misskey)の使い方とかをよー知りたいんやったら{link}をみてな。"
skipAreYouSure: "初期設定飛ばすか?"
laterAreYouSure: "初期設定あとでやり直すん?"
_serverRules:
description: "新規登録前に見せる、サーバーの簡潔なルールを設定すんで。内容は使うための決め事の要約とすることを推奨するわ。"
_accountMigration:
moveTo: "このアカウントをさらのアカウントに引っ越すで"
moveToLabel: "引っ越し先のアカウント:"
moveAccountDescription: "この操作は戻されへんで。まず引っ越し先のアカウントでこのアカウントへのエイリアスが作れたか確認してきなはれや。エイリアスができてたら、引っ越し先のアカウントをこんな風に入力してくれへんか?:@person@instance.com"
moveFrom: "別のアカウントからこのアカウントに引っ越す"
moveFromSub: "別のアカウントへエイリアスを作る"
moveFromLabel: "引っ越し元のアカウント:"
moveFromDescription: "別のアカウントからこのアカウントにフォロワーを引き継いで引っ越したかったら、ここでエイリアスを作っとく必要があるで。必ずお引っ越しを実行する前に作っとかなあかんで!引っ越し元のアカウントをこんな風に入力してくれへんか?:@person@instance.com"
moveTo: "このアカウントをさらのアカウントに引っ越すで"
moveToLabel: "引っ越し先のアカウント:"
moveCannotBeUndone: "アカウントを移行すると、取り消すことはできへんくなります。"
moveAccountDescription: "おニューのアカウントに移行すんで。\n ・フォロワーがおニューの方を勝手にフォローすんで。\n ・このアカウントからのフォローはまるまる全部解除されんで。\n ・このアカウントでート作れへんようになるで。\n\nフォロワーの移行は勝手にこっちでやっとくけど、フォローの移行は自分でしてや。移行前にこのアカウントでフォローエクスポートして、移行したあとすぐにおニューのところでインポートしてくれな。\nリストとかミュート、あとブロックもおんなじや。自分で移行してな。\n\nこの説明はこのサーバー、つまりMisskey v13.12.0から後の仕様や。Mastodonとか他のActivityPubソフトやとちょっと挙動が違うこともあんで。"
moveAccountHowTo: "アカウントの引っ越しには、まず引っ越し先のアカウントで自分のアカウントに対しエイリアスを作成しなはれや。\nエイリアス作成した後、引っ越し先のアカウントを次のように入力してくれへんか:@username@server.example.com"
startMigration: "引っ越しする"
migrationConfirm: "ほんまにこのアカウントを {account} に引っ越すんか?一回引っ越してもうたら取り消されへんし、二度とこのアカウントを元に戻されへんくなるで。\nそれと、引っ越し先のアカウントでエイリアスが作れたかちゃんと確認しーや"
movedAndCannotBeUndone: "\nアカウントはもう引っ越されてます。\n引っ越しを取り消すことはできまへん。"
postMigrationNote: "このアカウントからのフォロー解除は移行操作から丸一日経ったら実行されんで。\nこのアカウントのフォロー・フォロワー数はどっちも0や。フォローの解除はされへんから、あんたのフォロワーはこのアカウントのフォロワー向けの投稿をこの後も見れるで。"
movedTo: "引っ越し先のアカウント:"
_achievements:
earnedAt: "貰った日ぃ"
_types:
@@ -1171,6 +1269,9 @@ _achievements:
_client30min:
title: "ねんね"
description: "クライアントを起動してから30分以上経過した"
_client60min:
title: "Misskeyの見過ぎや"
description: "クライアント付けてから1時間経ってもうたで。"
_noteDeletedWithin1min:
title: "*おおっと*"
description: "投稿してから1分以内にその投稿を消した"
@@ -1202,7 +1303,7 @@ _achievements:
description: "ドライブのフォルダを再帰的な入れ子にしようとした"
_reactWithoutRead:
title: "ちゃんと読んだんか?"
description: "100文字以上のテキストを含むートに投稿されてから3秒以内にリアクションした"
description: "100文字以上のテキストを含むートに投稿されてから3秒以内にツッコんだ"
_clickedClickHere:
title: "ここをクリック"
description: "ここをクリックした"
@@ -1259,6 +1360,8 @@ _role:
iconUrl: "アイコン画像のURL"
asBadge: "バッジとして見せる"
descriptionOfAsBadge: "オンにすると、ユーザー名の横んとこにロールのアイコンが表示されるで。"
isExplorable: "ロールタイムラインを公開するで〜"
descriptionOfIsExplorable: "オンにしたらロールのタイムラインを公開するで〜。でもロールの公開をオフにしたら公開されへんよ。"
displayOrder: "表示順"
descriptionOfDisplayOrder: "数がでかいほど、UI上で先に表示されるで。"
canEditMembersByModerator: "モデレーターのメンバー編集を許可"
@@ -1275,6 +1378,7 @@ _role:
canInvite: "サーバー招待コードの発行"
canManageCustomEmojis: "カスタム絵文字の管理"
driveCapacity: "ドライブ容量"
alwaysMarkNsfw: "勝手にファイルにNSFWをくっつける"
pinMax: "ノートのピン留めの最大数"
antennaMax: "アンテナの作成可能数"
wordMuteMax: "ワードミュートの最大文字数"
@@ -1385,10 +1489,6 @@ _aboutMisskey:
donate: "Misskeyに寄付"
morePatrons: "他にもぎょうさんの人からサポートしてもろてんねん。ほんまおおきに🥰"
patrons: "支援者"
_nsfw:
respect: "閲覧注意のメディアは隠すで"
ignore: "閲覧注意のメディアは隠さへんで"
force: "常にメディアを隠すで"
_instanceTicker:
none: "表示せん"
remote: "リモートユーザーに表示"
@@ -1407,6 +1507,8 @@ _channel:
following: "フォロー中やで"
usersCount: "{n}人が参加中やで"
notesCount: "{n}こ投稿があるで"
nameAndDescription: "名前と説明"
nameOnly: "名前だけ"
_menuDisplay:
sideFull: "横"
sideIcon: "横(アイコン)"
@@ -1524,32 +1626,16 @@ _time:
minute: "分"
hour: "時間"
day: "日"
_tutorial:
title: "Misskeyの使い方"
step1_1: "よう来たなあ"
step1_2: "この画面は「タイムライン」って言って、あんたや、あんたが「フォロー」する人のノート」が時系列で表示されるんやで。"
step1_3: "あんたはまだ何もノートを投稿してなくて、誰もフォローしてへんから、タイムラインには何も表示されてないはずやで。"
step2_1: "ノートを作ったり誰かをフォローしたりする前に、まずあんたのプロフィールを完成させよか。"
step2_2: "あんたがどんな人かわかると、多くの人にノートを見てもらえたり、フォローしてもらいやすくなるで。"
step3_1: "プロフィール設定はええ感じにできたか?"
step3_2: "ほな試しに、何かノートを投稿してみてやー。画面上にある鉛筆マークのボタンを押すとフォームが開くはずやで。"
step3_3: "内容を書いたら、フォーム右上のボタンを押すと投稿できるで。"
step3_4: "内容が思いつかへん?ほな「関西人なら面白いこと言うてえ〜や〜」とかどうやろか。"
step4_1: "投稿できたん?"
step4_2: "あんたのノートがタイムラインに表示されていれば成功やで"
step5_1: "次は、ほかの人をフォローしてタイムラインを賑やかにしよか"
step5_2: "{featured}で人気のノートが見れるから、その中から気になった人を選んでフォローしたり、{explore}で人気のユーザーを探すこともできるで。"
step5_3: "ユーザーをフォローしたかったら、ユーザーのアイコンをクリックしてユーザーページを表示して、「フォロー」ボタンを押すんやで。"
step5_4: "ユーザーによっては、フォローが承認されるまでちょっと時間がかかることがあるで。"
step6_1: "タイムラインに他のユーザーのノートが表示されていれば成功やで。"
step6_2: "他の人のノートには、「リアクション」を付けることができて、簡単にあんたの反応を伝えられるで。"
step6_3: "リアクションを付けるんやったら、ノートの「+」マークをクリックして、好きなリアクションを選択してな。"
step7_1: "これで、Misskeyの基本的な使い方の説明は終わりやで。お疲れさん。"
step7_2: "もっとMisskeyについて知りたいときは、{help}を見るとええかもな。"
step7_3: "ほな、Misskeyを楽しんでなー🚀"
step8_1: "最後に、プッシュ通知を有効化してみやん?"
step8_2: "プッシュ通知を受け取ることで、Misskeyを開いていない時でもリアクションやフォロー、メンションとかに気づけるで。"
step8_3: "通知の設定はあとから変更できるで"
_timelineTutorial:
title: "Misskeyってなんや?"
step1_1: "これは「タイムライン」や。{name}に投稿された「ノート」が順番に表示されるで。"
step1_2: "タイムラインには何個か種類があってな、例えば「ホームタイムライン」だったらあんたフォローしてる人のノート、「ローカルタイムライン」には{name}全部のノートが流れてくるで。"
step2_1: "試しに、何かノートを投稿してみ。画面の鉛筆マークのボタンでフォームが開くで。"
step2_2: "最初のノートは、自己紹介とか「{name}始めてみたんや」とかがええと思うで。"
step3_1: "投稿できた?"
step3_2: "あんたのノートがタイムラインに出てきたら成功や。"
step4_1: "ノートには、「ツッコミ」を付けれるで。"
step4_2: "ツッコむんやったら、ノートの「+」マークを押して、好きな絵文字を選ぶんやで。"
_2fa:
alreadyRegistered: "もう設定終わっとるわ。"
registerTOTP: "認証アプリの設定はじめる"
@@ -1593,8 +1679,8 @@ _permissions:
"write:notes": "ノートを作成・削除するで"
"read:notifications": "通知を見るで"
"write:notifications": "通知を操作するで"
"read:reactions": "リアクションを見る"
"write:reactions": "リアクションを操作するで"
"read:reactions": "ツッコミを見る"
"write:reactions": "ツッコミを操作するで"
"write:votes": "投票する"
"read:pages": "ページを見る"
"write:pages": "ページを操作するで"
@@ -1850,7 +1936,7 @@ _notification:
reply: "リプライ"
renote: "Renote"
quote: "引用"
reaction: "リアクション"
reaction: "ツッコミ"
pollEnded: "アンケートが終了したで"
receiveFollowRequest: "フォロー許可してほしいみたいやで"
followRequestAccepted: "フォローが受理されたで"
@@ -1887,6 +1973,7 @@ _deck:
channel: "チャンネル"
mentions: "あんた宛て"
direct: "ダイレクト"
roleTimeline: "ロールタイムライン"
_dialog:
charactersExceeded: "最大の文字数を上回っとるで!今は {current} / 最大でも {max}"
charactersBelow: "最小の文字数を下回っとるで!今は {current} / 最低でも {min}"
@@ -1908,5 +1995,5 @@ _webhookSettings:
note: "ノートを投稿したとき~!"
reply: "返信があるとき~!"
renote: "Renoteされるとき"
reaction: "リアクションがあるとき~!"
reaction: "ツッコミがあるとき~!"
mention: "メンションがあるとき~!"

View File

@@ -2,7 +2,7 @@
_lang_: "한국어"
headlineMisskey: "노트로 연결되는 네트워크"
introMisskey: "환영합니다! Misskey는 오픈 소스 분산형 마이크로 블로그 서비스입니다.\n'노트'를 작성해서 지금 일어나고 있는 일을 공유하거나, 당신만의 이야기를 모두에게 발신하세요📡\n'리액션' 기능으로 친구의 노트에 총알같이 반응을 추가할 수도 있습니다👍\n새로운 세계를 탐험해 보세요🚀"
poweredByMisskeyDescription: "{name}은(는) 오픈소스 플랫폼<b>Misskey</b>를 사용한 서버 하나입니다."
poweredByMisskeyDescription: "{name}은(는) 오픈소스 플랫폼 <b>Misskey</b>를 사용한 서버 가운데 하나입니다."
monthAndDay: "{month}월 {day}일"
search: "검색"
notifications: "알림"
@@ -20,6 +20,7 @@ noNotes: "노트가 없습니다"
noNotifications: "표시할 알림이 없습니다"
instance: "서버"
settings: "설정"
notificationSettings: "알림 설정"
basicSettings: "기본 설정"
otherSettings: "기타 설정"
openInWindow: "창으로 열기"
@@ -51,6 +52,8 @@ addToList: "리스트에 추가"
sendMessage: "메시지 보내기"
copyRSS: "RSS 복사"
copyUsername: "유저명 복사"
copyUserId: "유저 ID 복사"
copyNoteId: "노트 ID 복사"
searchUser: "사용자 검색"
reply: "답글"
loadMore: "더 보기"
@@ -133,8 +136,10 @@ unblockConfirm: "이 계정의 차단을 해제하시겠습니까?"
suspendConfirm: "이 계정을 정지하시겠습니까?"
unsuspendConfirm: "이 계정의 정지를 해제하시겠습니까?"
selectList: "리스트 선택"
editList: "리스트 편집"
selectChannel: "채널 선택"
selectAntenna: "안테나 선택"
editAntenna: "안테나 편집"
selectWidget: "위젯 선택"
editWidgets: "위젯 편집"
editWidgetsExit: "편집 종료"
@@ -262,14 +267,16 @@ noMoreHistory: "이것보다 과거의 기록이 없습니다"
startMessaging: "대화 시작하기"
nUsersRead: "{n}명이 읽음"
agreeTo: "{0}에 동의"
agree: "동의합니다"
agreeBelow: "아래 내용에 동의합니다"
basicNotesBeforeCreateAccount: "기본적인 주의사항"
tos: "이용 약관"
termsOfService: "이용 약관"
start: "시작하기"
home: "홈"
remoteUserCaution: "리모트 유저이기 때문에, 정보가 정확하지 않을 수 있습니다."
activity: "활동"
images: "이미지"
image: "이미지"
birthday: "생일"
yearsOld: "{age}세"
registeredDate: "등록일"
@@ -306,7 +313,6 @@ copyUrl: "URL 복사"
rename: "이름 변경"
avatar: "아바타"
banner: "배너"
nsfw: "열람주의"
whenServerDisconnected: "서버와의 접속이 끊겼을 때"
disconnectedFromServer: "서버와의 연결이 끊어졌습니다"
reload: "새로고침"
@@ -473,6 +479,8 @@ createAccount: "계정 만들기"
existingAccount: "기존 계정"
regenerate: "재생성"
fontSize: "글자 크기"
mediaListWithOneImageAppearance: "이미지가 1개 뿐인 미디어 목록의 높이"
limitTo: "{x}로 제한"
noFollowRequests: "처리되지 않은 팔로우 요청이 없습니다"
openImageInNewTab: "새 탭에서 이미지 열기"
dashboard: "대시보드"
@@ -500,12 +508,13 @@ objectStoragePrefixDesc: "이 Prefix 의 디렉토리 아래에 파일이 저장
objectStorageEndpoint: "Endpoint"
objectStorageEndpointDesc: "AWS S3의 경우 공란, 다른 서비스의 경우 각 서비스의 가이드에 맞게 endpoint를 설정해주세요. '<host>' 혹은 '<host>:<port>' 와 같이 지정합니다."
objectStorageRegion: "Region"
objectStorageRegionDesc: "'xx-east-1'와 같이 region을 지정해주세요. 사용하는 서비스에 region 개념이 없는 경우, 비워 두거나 'us-east-1'으로 설정해 주세요."
objectStorageRegionDesc: "'xx-east-1'와 같이 region을 지정해 주세요. 사용하는 서비스에 region 개념이 없는 경우 'us-east-1'으로 설정해 주세요. AWS 설정 파일 또는 환경 변수를 참조할 경우에는 비워주세요."
objectStorageUseSSL: "SSL 사용"
objectStorageUseSSLDesc: "API 호출시 HTTPS 를 사용하지 않는 경우 OFF 로 설정해 주세요"
objectStorageUseProxy: "연결에 프록시를 사용"
objectStorageUseProxyDesc: "오브젝트 스토리지 API 호출시 프록시를 사용하지 않는 경우 OFF 로 설정해 주세요"
objectStorageSetPublicRead: "업로드할 때 'public-read'를 설정하기"
s3ForcePathStyleDesc: "s3ForcePathStyle을 활성화하면, 버킷 이름을 URL의 호스트명이 아닌 경로의 일부로써 취급합니다. 셀프 호스트 Minio와 같은 서비스를 사용할 경우 활성화해야 할 수 있습니다."
serverLogs: "서버 로그"
deleteAll: "모두 삭제"
showFixedPostForm: "타임라인 상단에 글 작성란을 표시"
@@ -547,11 +556,14 @@ userSuspended: "이 계정은 정지된 상태입니다."
userSilenced: "이 계정은 사일런스된 상태입니다."
yourAccountSuspendedTitle: "계정이 정지되었습니다"
yourAccountSuspendedDescription: "이 계정은 서버의 이용 약관을 위반하거나, 기타 다른 이유로 인해 정지되었습니다. 자세한 사항은 관리자에게 문의해 주십시오. 계정을 새로 생성하지 마십시오."
tokenRevoked: "유효하지 않은 토큰입니다"
tokenRevokedDescription: "로그인 토큰이 비활성화되었습니다. 다시 로그인하여 주십시오."
accountDeleted: "계정이 정지되었습니다"
accountDeletedDescription: "이 계정이 삭제되었습니다."
menu: "메뉴"
divider: "구분선"
addItem: "항목 추가"
rearrange: "정렬"
relays: "릴레이"
addRelay: "릴레이 추가"
inboxUrl: "Inbox 주소"
@@ -695,6 +707,8 @@ contact: "연락처"
useSystemFont: "시스템 기본 글꼴을 사용"
clips: "클립"
experimentalFeatures: "실험실"
experimental: "실험실"
thisIsExperimentalFeature: "이 기능은 실험적인 기능입니다. 사양이 변경되거나 정상적으로 동작하지 않을 가능성이 있습니다."
developer: "개발자"
makeExplorable: "\"발견하기\"에 내 계정 보이기"
makeExplorableDescription: "비활성화하면 \"발견하기\"에 나의 계정을 표시하지 않습니다."
@@ -779,6 +793,7 @@ noMaintainerInformationWarning: "관리자 정보가 설정되어 있지 않습
noBotProtectionWarning: "Bot 방어가 설정되어 있지 않습니다."
configure: "설정하기"
postToGallery: "갤러리에 업로드"
postToHashtag: "이 해시태그에 게시"
gallery: "갤러리"
recentPosts: "최근 포스트"
popularPosts: "인기 포스트"
@@ -812,6 +827,7 @@ translatedFrom: "{x}에서 번역"
accountDeletionInProgress: "계정 삭제 작업을 진행하고 있습니다"
usernameInfo: "서버상에서 계정을 식별하기 위한 이름. 알파벳(a~z, A~Z), 숫자(0~9) 및 언더바(_)를 사용할 수 있습니다. 사용자명은 나중에 변경할 수 없습니다."
aiChanMode: "아이 모드"
devMode: "개발자 모드"
keepCw: "CW 유지하기"
pubSub: "Pub/Sub 계정"
lastCommunication: "마지막 통신"
@@ -819,8 +835,10 @@ resolved: "해결됨"
unresolved: "해결되지 않음"
breakFollow: "팔로워 해제"
breakFollowConfirm: "팔로우를 해제하시겠습니까?"
itsOn: "켜"
itsOff: "꺼"
itsOn: "켜져 있습니다"
itsOff: "꺼져 있습니다"
on: "켜짐"
off: "꺼짐"
emailRequiredForSignup: "가입할 때 이메일 주소 입력을 필수로 하기"
unread: "읽지 않음"
filter: "필터"
@@ -853,7 +871,7 @@ instanceDefaultLightTheme: "서버 기본 라이트 테마"
instanceDefaultDarkTheme: "서버 기본 다크 테마"
instanceDefaultThemeDescription: "객체 형식의 테마 코드를 입력해 주세요."
mutePeriod: "뮤트할 기간"
period: "투표 기한"
period: "기간"
indefinitely: "무기한"
tenMinutes: "10분"
oneHour: "1시간"
@@ -901,6 +919,7 @@ remoteOnly: "리모트만"
failedToUpload: "업로드 실패"
cannotUploadBecauseInappropriate: "이 파일은 부적절한 내용을 포함한다고 판단되어 업로드할 수 없습니다."
cannotUploadBecauseNoFreeSpace: "드라이브 용량이 부족하여 업로드할 수 없습니다."
cannotUploadBecauseExceedsFileSizeLimit: "파일 크기가 너무 크기 때문에 업로드할 수 없습니다."
beta: "베타"
enableAutoSensitive: "자동 NSFW 탐지"
enableAutoSensitiveDescription: "이용 가능할 경우 기계학습을 통해 자동으로 미디어 NSFW를 설정합니다. 이 기능을 해제하더라도, 서버 정책에 따라 자동으로 설정될 수 있습니다."
@@ -917,6 +936,7 @@ pushNotificationNotSupported: "브라우저나 서버에서 푸시 알림이 지
sendPushNotificationReadMessage: "푸시 알림이나 메시지를 읽은 뒤 푸시 알림을 삭제"
sendPushNotificationReadMessageCaption: "「{emptyPushNotificationMessage}」이라는 알림이 잠깐 표시됩니다. 기기의 전력 소비량이 증가할 수 있습니다."
windowMaximize: "최대화"
windowMinimize: "최소화"
windowRestore: "복구"
caption: "캡션"
loggedInAsBot: "봇 계정으로 로그인중"
@@ -933,6 +953,7 @@ didYouLikeMisskey: "Misskey가 마음에 드시나요?"
pleaseDonate: "{host}은(는) 무료 소프트웨어 Misskey를 사용합니다. 후원을 통해 저희의 개발이 이어질 수 있게 도와주세요!"
roles: "역할"
role: "역할"
noRole: "역할이 없습니다"
normalUser: "일반 사용자"
undefined: "정의되지 않음"
assign: "할당"
@@ -942,6 +963,10 @@ manageCustomEmojis: "커스텀 이모지 관리"
youCannotCreateAnymore: "더 이상 생성할 수 없습니다."
cannotPerformTemporary: "일시적으로 사용할 수 없음"
cannotPerformTemporaryDescription: "조작 횟수 제한을 초과하여 일시적으로 사용이 불가합니다. 잠시 후 다시 시도해 주세요."
invalidParamError: "매개변수 오류"
invalidParamErrorDescription: "요청 매개변수에 문제가 있습니다. 대부분의 경우 Misskey의 버그가 원인이지만, 입력 문자수가 너무 많았을 가능성 등도 있습니다."
permissionDeniedError: "작업이 거부되었습니다"
permissionDeniedErrorDescription: "이 작업을 수행할 권한이 없습니다."
preset: "프리셋"
selectFromPresets: "프리셋에서 선택"
achievements: "도전 과제"
@@ -958,10 +983,121 @@ copyErrorInfo: "오류 정보 복사"
joinThisServer: "이 서버에 가입"
exploreOtherServers: "다른 서버 둘러보기"
letsLookAtTimeline: "타임라인 구경하기"
disableFederationConfirm: "정말로 연합을 끄시겠습니까?"
disableFederationConfirmWarn: "연합을 끄더라도 게시물이 비공개로 전환되는 것은 아닙니다. 대부분의 경우 연합을 비활성화할 필요가 없습니다."
disableFederationOk: "연합을 끄기"
invitationRequiredToRegister: "현재 이 서버는 비공개입니다. 회원가입을 하시려면 초대 코드가 필요합니다."
emailNotSupported: "이 서버에서는 메일 전송을 지원하지 않습니다"
postToTheChannel: "채널에 게시하기"
cannotBeChangedLater: "나중에 변경할 수 없습니다."
reactionAcceptance: "리액션 수신"
likeOnly: "좋아요만 받기"
likeOnlyForRemote: "리모트에서는 좋아요만 받기"
nonSensitiveOnly: "민감한 이모지를 제외하고 받기"
nonSensitiveOnlyForLocalLikeOnlyForRemote: "민감한 이모지를 제외하고 받기 (리모트에서는 좋아요만 받기)"
rolesAssignedToMe: "나에게 할당된 역할"
resetPasswordConfirm: "비밀번호를 재설정하시겠습니까?"
sensitiveWords: "민감한 단어"
sensitiveWordsDescription: "설정한 단어가 포함된 노트의 공개 범위를 '홈'으로 강제합니다. 개행으로 구분하여 여러 개를 지정할 수 있습니다."
sensitiveWordsDescription2: "공백으로 구분하면 AND 지정이 되며, 키워드를 슬래시로 둘러싸면 정규 표현식이 됩니다."
notesSearchNotAvailable: "노트 검색을 이용하실 수 없습니다."
license: "라이선스"
unfavoriteConfirm: "즐겨찾기를 해제하시겠습니까?"
myClips: "내 클립"
drivecleaner: "드라이브 정리"
retryAllQueuesNow: "모든 큐를 다시 시도"
retryAllQueuesConfirmTitle: "지금 다시 시도하시겠습니까?"
retryAllQueuesConfirmText: "일시적으로 서버의 부하가 증가할 수 있습니다."
enableChartsForRemoteUser: "리모트 유저의 차트를 생성"
enableChartsForFederatedInstances: "리모트 서버의 차트를 생성"
showClipButtonInNoteFooter: "노트 동작에 클립을 추가"
largeNoteReactions: "노트의 리액션을 크게 표시"
noteIdOrUrl: "노트 ID 및 URL"
video: "동영상"
videos: "동영상"
dataSaver: "데이터 절약 모드"
accountMigration: "계정 이동"
accountMoved: "이 사용자는 다음 계정으로 이사했습니다:"
accountMovedShort: "이사한 계정입니다"
operationForbidden: "사용할 수 없습니다"
forceShowAds: "광고를 항상 표시"
addMemo: "메모 추가"
editMemo: "메모 편집"
reactionsList: "리액션 목록"
renotesList: "Renote 목록"
notificationDisplay: "알림 표시"
leftTop: "왼쪽 상단"
rightTop: "오른쪽 상단"
leftBottom: "왼쪽 하단"
rightBottom: "오른쪽 하단"
stackAxis: "나열 방향"
vertical: "세로"
horizontal: "가로"
position: "위치"
serverRules: "서버 규칙"
pleaseConfirmBelowBeforeSignup: "이 서버에 가입하기 전에 아래 사항을 확인하여 주십시오."
pleaseAgreeAllToContinue: "계속하시려면 모든 항목에 동의하십시오."
continue: "계속"
preservedUsernames: "예약된 사용자명"
preservedUsernamesDescription: "예약할 사용자명을 한 줄에 하나씩 입력합니다. 여기에서 지정한 사용자명으로는 계정을 생성할 수 없게 됩니다. 단, 관리자 권한으로 계정을 생성할 때에는 해당되지 않으며, 이미 존재하는 계정도 영향을 받지 않습니다."
createNoteFromTheFile: "이 파일로 노트를 작성"
archive: "아카이브"
channelArchiveConfirmTitle: "{name} 을(를) 아카이브하시겠습니까?"
channelArchiveConfirmDescription: "아카이브한 채널은 채널 목록과 검색 결과에 표시되지 않으며, 채널에 새로운 노트를 작성할 수 없게 됩니다."
thisChannelArchived: "이 채널은 아카이브되었습니다."
displayOfNote: "노트 표시"
initialAccountSetting: "초기 설정"
youFollowing: "팔로잉"
preventAiLearning: "기계학습(생성형 AI)으로의 사용을 거부"
preventAiLearningDescription: "외부의 문장 생성 AI나 이미지 생성 AI에 대해 제출한 노트나 이미지 등의 콘텐츠를 학습의 대상으로 사용하지 않도록 요구합니다. 다만, 이 요구사항을 지킬 의무는 없기 때문에 학습을 완전히 방지하는 것은 아닙니다."
options: "옵션"
specifyUser: "사용자 지정"
failedToPreviewUrl: "미리 볼 수 없음"
update: "업데이트"
rolesThatCanBeUsedThisEmojiAsReaction: "이 이모지를 리액션으로 사용할 수 있는 역할"
rolesThatCanBeUsedThisEmojiAsReactionEmptyDescription: "역할을 지정하지 않으면, 누구나 이 이모지를 리액션으로 사용할 수 있습니다."
rolesThatCanBeUsedThisEmojiAsReactionPublicRoleWarn: "역할은 공개로 설정되어 있어야 합니다."
cancelReactionConfirm: "리액션을 취소하시겠습니까?"
changeReactionConfirm: "리액션을 변경하시겠습니까?"
later: "나중에"
goToMisskey: "Misskey로"
additionalEmojiDictionary: "이모지 추가 사전"
installed: "설치됨"
branding: "브랜딩"
enableServerMachineStats: "서버의 머신 사양을 공개하기"
enableIdenticonGeneration: "유저마다의 Identicon 생성 유효화"
_initialAccountSetting:
accountCreated: "계정 생성이 완료되었습니다!"
letsStartAccountSetup: "계정의 초기 설정을 진행합니다."
letsFillYourProfile: "우선 나의 프로필을 설정해 보아요."
profileSetting: "프로필 설정"
privacySetting: "프라이버시 설정"
theseSettingsCanEditLater: "이 설정들은 나중에도 변경할 수 있습니다."
youCanEditMoreSettingsInSettingsPageLater: "이 외에도 '설정' 페이지에서 다양한 설정을 나의 입맛에 맞게 조절할 수 있습니다. 꼭 확인해 보세요!"
followUsers: "관심사가 맞는 유저를 팔로우하여 타임라인을 가꾸어 봅시다."
pushNotificationDescription: "푸시 알림을 활성화하면 {name}의 알림을 나의 기기에서 받아볼 수 있게 됩니다."
initialAccountSettingCompleted: "초기 설정을 모두 마쳤습니다!"
haveFun: "{name}와 함께 즐거운 시간 보내세요!"
ifYouNeedLearnMore: "{name}(Misskey)의 사용 방법에 대해 자세히 알아보려면 {link}를 참고해 주세요."
skipAreYouSure: "초기 설정을 중단하시겠습니까?"
laterAreYouSure: "초기 설정을 나중에 진행하시겠습니까?"
_serverRules:
description: "회원 가입 이전에 간단하게 표시할 서버 규칙입니다. 이용 약관의 요약으로 구성하는 것을 추천합니다."
_accountMigration:
moveFrom: "다른 계정에서 이 계정으로 이사"
moveFromSub: "다른 계정에 대한 별칭을 생성"
moveFromLabel: "기존 계정 #{n}"
moveFromDescription: "다른 계정에서 이 계정으로 팔로워를 가져오려면, 우선 여기에서 별칭을 지정해야 합니다. 반드시 이사하기 전에 지정해야 합니다! 기존 계정을 다음과 같은 형식으로 입력해 주십시오: @person@instance.com"
moveTo: "이 계정에서 다른 계정으로 이사"
moveToLabel: "이사할 계정:"
moveCannotBeUndone: "한 번 이사하면, 두 번 다시 되돌릴 수 없습니다."
moveAccountDescription: "새 계정으로 이전합니다.\n ・팔로워가 새 계정을 자동으로 팔로우 합니다\n ・이 계정에서 팔로우는 모두 해제됩니다\n ・이 계정으로는 노트 작성 등을 할 수 없게 됩니다\n\n팔로워는 자동으로 이전되지만, 팔로우는 수동으로 진행해야 합니다. 이전하기 전에 이 계정에서 팔로우를 내보내고, 이전 후에는 즉시 이전한 계정에서 가져오기를 진행하십시오.\n리스트・뮤트・차단에 대해서도 마찬가지이므로 수동으로 이전해야 합니다.\n\n(이 설명은 이 서버(Misskey v13.12.0 이후)의 사양입니다. Mastodon 등의 다른 ActivityPub 소프트웨어에서는 작동이 다를 수 있습니다.)"
moveAccountHowTo: "계정을 이사하려면 우선 이사갈 계정에서 이 계정에 대한 별칭을 지정해야 합니다.\n별칭을 작성한 다음, 이사갈 계정을 다음과 같이 입력하십시오:\n@username@server.example.com"
startMigration: "이사하기"
migrationConfirm: "정말로 이 계정을 {account} 으로 이전하시겠습니까? 한 번 이전한 다음에는 취소할 수 없으며, 두 번 다시 원래 상태로 복구할 수 없습니다.\n이사할 계정에서 계정 별칭을 지정하였는지 다시 한 번 확인하십시오."
movedAndCannotBeUndone: "\n이사한 계정입니다.\n이사는 취소할 수 없습니다."
postMigrationNote: "이 계정의 팔로잉 해제는 이사 후 24시간 뒤에 실행됩니다.\n이 계정의 팔로우 및 팔로워 수는 0으로 표시됩니다. 팔로워 해제는 이루어지지 않으므로, 당신의 팔로워는 이 계정의 팔로워 한정 게시물을 계속해서 열람할 수 있습니다."
movedTo: "이사할 계정:"
_achievements:
earnedAt: "달성 일시"
_types:
@@ -1133,6 +1269,9 @@ _achievements:
_client30min:
title: "잠깐 쉬어"
description: "클라이언트를 시작하고 30분이 경과하였습니다"
_client60min:
title: "No \"Miss\" in Misskey"
description: "클라이언트를 시작하고 60분이 경과하였습니다"
_noteDeletedWithin1min:
title: "있었는데요 없었습니다"
description: "노트를 포스트한 후 1분 이내에 삭제했습니다"
@@ -1221,6 +1360,10 @@ _role:
iconUrl: "아이콘 URL"
asBadge: "뱃지로 표시"
descriptionOfAsBadge: "활성화하면 유저명 옆에 역할의 아이콘이 표시됩니다."
isExplorable: "역할 타임라인 공개"
descriptionOfIsExplorable: "활성화하면 역할 타임라인을 공개합니다. 비활성화 시 타임라인이 공개되지 않습니다."
displayOrder: "표시 순서"
descriptionOfDisplayOrder: "값이 클 수록 UI에서 먼저 표시됩니다."
canEditMembersByModerator: "모더레이터의 역할 수정 허용"
descriptionOfCanEditMembersByModerator: "이 옵션을 켜면 모더레이터도 이 역할에 사용자를 할당하거나 삭제할 수 있습니다. 꺼져 있으면 관리자만 할당이 가능합니다."
priority: "우선순위"
@@ -1235,6 +1378,7 @@ _role:
canInvite: "서버 초대 코드 발행"
canManageCustomEmojis: "커스텀 이모지 관리"
driveCapacity: "드라이브 용량"
alwaysMarkNsfw: "파일을 항상 NSFW로 지정"
pinMax: "고정할 수 있는 노트 수"
antennaMax: "최대 안테나 생성 허용 수"
wordMuteMax: "단어 뮤트할 수 있는 문자 수"
@@ -1246,15 +1390,18 @@ _role:
rateLimitFactor: "요청 빈도 제한"
descriptionOfRateLimitFactor: "작을수록 제한이 완화되고, 클수록 제한이 강화됩니다."
canHideAds: "광고 숨기기"
canSearchNotes: "노트 검색 이용 가능 여부"
_condition:
isLocal: "로컬 사용자"
isRemote: "리모트 사용자"
createdLessThan: "가한 지 다음 일수 이내인 유저"
createdLessThan: "가한 지 다음 일수 이내인 유저"
createdMoreThan: "가입한 지 다음 일수 이상인 유저"
followersLessThanOrEq: "팔로워 수가 다음 이하인 유저"
followersMoreThanOrEq: "팔로워 수가 다음 이상인 유저"
followingLessThanOrEq: "팔로잉 수가 다음 이하인 유저"
followingMoreThanOrEq: "팔로잉 수가 다음 이상인 유저"
notesLessThanOrEq: "노트 수가 다음 이하인 유저"
notesMoreThanOrEq: "노트 수가 다음 이상인 유저"
and: "다음을 모두 만족"
or: "다음을 하나라도 만족"
not: "다음을 만족하지 않음"
@@ -1278,8 +1425,8 @@ _ffVisibility:
private: "비공개"
_signup:
almostThere: "거의 다 끝났습니다"
emailAddressInfo: "당신이 사용하고 있는 이메일 주소를 입력해 주세요. 이메일 주소는 다른 유저에게 공개되지 않습니다."
emailSent: "입력하신 메일 주소({email})로 확인 메일을 보내드렸습니다. 가입을 완료하시려면 보내드린 메일에 있는 링크로 접속해 주세요."
emailAddressInfo: "당신이 사용하고 있는 이메일 주소를 입력해 주세요. 이메일 주소는 다른 유저에게 공개되지 않습니다."
emailSent: "입력하신 메일 주소({email})로 확인 메일을 보내드렸습니다. 가입을 완료하시려면 보내드린 메일에 있는 링크로 접속해 주세요."
_accountDelete:
accountDelete: "계정 삭제"
mayTakeTime: "계정 삭제는 서버에 부하를 가하기 때문에, 작성한 콘텐츠나 업로드한 파일의 수가 많으면 완료까지 시간이 걸릴 수 있습니다."
@@ -1342,10 +1489,6 @@ _aboutMisskey:
donate: "Misskey에 기부하기"
morePatrons: "이 외에도 다른 많은 분들이 도움을 주시고 계십니다. 감사합니다🥰"
patrons: "후원자"
_nsfw:
respect: "열람주의로 설정된 미디어 숨기기"
ignore: "열람 주의 미디어 항상 표시"
force: "미디어 항상 숨기기"
_instanceTicker:
none: "보이지 않음"
remote: "리모트 유저에게만 보이기"
@@ -1364,6 +1507,8 @@ _channel:
following: "팔로잉"
usersCount: "{n}명 참여 중"
notesCount: "{n}노트"
nameAndDescription: "이름과 설명"
nameOnly: "이름만"
_menuDisplay:
sideFull: "가로"
sideIcon: "가로(아이콘)"
@@ -1371,7 +1516,7 @@ _menuDisplay:
hide: "숨기기"
_wordMute:
muteWords: "뮤트할 단어"
muteWordsDescription: "공백으로 구분하는 경우 AND, 줄바꿈으로 구분하는 경우 OR로 지정됩니다"
muteWordsDescription: "공백으로 구분하는 경우 AND, 줄바꿈으로 구분하는 경우 OR로 지정됩니다."
muteWordsDescription2: "정규 표현식을 사용하려면 키워드를 빗금표(/)로 감싸 주세요."
softDescription: "지정한 조건의 노트를 타임라인에서 숨깁니다."
hardDescription: "지정한 조건의 노트를 타임라인에 추가하지 않습니다. 타임라인에 추가되지 않은 노트는 조건을 변경해도 표시되지 않습니다."
@@ -1481,32 +1626,16 @@ _time:
minute: "분"
hour: "시간"
day: "일"
_tutorial:
_timelineTutorial:
title: "Misskey의 사용 방법"
step1_1: "환영합니다!"
step1_2: "이 페이지는 \"타임라인\"이라고 불립니다. 당신이 \"팔로우\"하고 있는 사람\"노트\"가 시간순으로 나타납니다."
step1_3: "아직 아무 유저도 팔로우하고 있지 않기에 타임라인은 비어 있을 것입니다."
step2_1: " 노트를 작성하거나 다른 사람을 팔로우하기 전에, 먼저 프로필을 완성해보도록 합시다."
step2_2: "당신이 어떤 사람인지를 알린다면, 다른 사람들이 당신을 팔로우할 확률이 올라갈 것입니다."
step3_1: "프로필 설정은 잘 끝내셨나요?"
step3_2: "그럼 시험삼아 노트를 작성해 보세요. 화면에 있는 연필 버튼을 누르면 작성 폼이 열립니다."
step3_3: "내용을 작성한 후, 폼 오른쪽 상단의 버튼을 눌러 노트를 올릴 수 있습니다."
step3_4: "쓸 말이 없나요? \"Misskey 시작했어요!\" 같은 건 어떨까요? :>"
step4_1: "노트 작성을 끝내셨나요?"
step4_2: "당신의 노트가 타임라인에 표시되어 있다면 성공입니다."
step5_1: "이제, 다른 사람을 팔로우하여 타임라인을 활기차게 만들어보도록 합시다."
step5_2: "{featured}에서 이 서버의 인기 노트를 보실 수 있습니다. {explore}에서는 인기 사용자를 찾을 수 있구요. 마음에 드는 사람을 골라 팔로우해 보세요!"
step5_3: "다른 유저를 팔로우하려면 해당 유저의 아이콘을 클릭하여 프로필 페이지를 띄운 후, 팔로우 버튼을 눌러 주세요."
step5_4: "사용자에 따라 팔로우가 승인될 때까지 시간이 걸릴 수 있습니다."
step6_1: "타임라인에 다른 사용자의 노트가 나타난다면 성공입니다."
step6_2: "다른 유저의 노트에 \"리액션\"을 붙여 간단하게 당신의 반응을 전달할 수도 있습니다."
step6_3: "리액션을 붙이려면, 노트의 \"+\" 버튼을 클릭하고 원하는 이모지를 선택합니다."
step7_1: "이것으로 Misskey의 기본 튜토리얼을 마치겠습니다. 수고하셨습니다!"
step7_2: "Misskey에 대해 더 알고 싶으시다면 {help}를 참고해 주세요."
step7_3: "그럼 Misskey를 즐기세요! 🚀"
step8_1: "마지막으로, 푸시 알림을 활성화해 보지 않으실래요?"
step8_2: "푸시 알림을 활성화하면, Misskey를 열지 않았을 때에도 리액션이나 팔로우, 멘션 등을 확인할 수 있습니다."
step8_3: "알림 설정은 나중에도 변경할 수 있습니다."
step1_1: "이것은 '타임라인'입니다. {name}에 게시된 '노트'가 시간 순서대로 표시됩니다."
step1_2: "타임라인은 몇 가지 종류로 나뉩니다. 그 중에 '홈 타임라인'은 내가 팔로우한 사람의 노트가 표시되며, '로컬 타임라인'에는 {name} 의 모든 노트가 표시됩니다."
step2_1: "그럼 시험삼아 노트를 작성해 봅시다. 화면에 있는 연필 버튼을 눌러 보세요."
step2_2: " 노트이니까 자기소개, 혹은 가볍게 \"안녕 {name}\"라고 올려 보는 건 어떨까요?"
step3_1: "노트 작성을 끝내셨나요?"
step3_2: "당신의 노트가 타임라인에 표시되어 있다면 성공입니다."
step4_1: "노트에는 '리액션'을 붙일 수 있습니다."
step4_2: "리액션을 붙이려면, 노트의 \"+\" 버튼을 클릭하고 원하는 이모지를 선택합니다."
_2fa:
alreadyRegistered: "이미 설정이 완료되었습니다."
registerTOTP: "인증 앱 설정 시작"
@@ -1844,9 +1973,27 @@ _deck:
channel: "채널"
mentions: "받은 멘션"
direct: "다이렉트"
roleTimeline: "역할 타임라인"
_dialog:
charactersExceeded: "최대 글자수를 초과하였습니다! 현재 {current} / 최대 {min}"
charactersBelow: "최소 글자수 미만입니다! 현재 {current} / 최소 {min}"
_disabledTimeline:
title: "비활성화된 타임라인"
description: "현재 역할에서는 이 타임라인을 이용할 수 없습니다."
_drivecleaner:
orderBySizeDesc: "크기가 큰 순"
orderByCreatedAtAsc: "등록일이 오래된 순"
_webhookSettings:
createWebhook: "Webhook 생성"
name: "이름"
secret: "시크릿"
events: "Webhook을 실행할 타이밍"
active: "활성화"
_events:
follow: "누군가를 팔로우했을 때"
followed: "누군가 나를 팔로우했을 때"
note: "노트를 게시할 때"
reply: "답글을 받았을 때"
renote: "누군가 내 글을 Renote했을 때"
reaction: "누군가 내 노트에 리액션했을 때"
mention: "누군가 나를 멘션했을 때"

View File

@@ -211,11 +211,11 @@ uploadFromUrlRequested: "ຮ້ອງຂໍການອັບໂຫລດ"
messageRead: "ອ່ານແລ້ວ"
startMessaging: "ເລີ່ມການສົນທະນາໃໝ່"
nUsersRead: "ອ່ານໂດຍ {n}"
tos: "ເງື່ອນໄຂການໃຫ້ບໍລິການ"
start: "ເລີ່ມຕົ້ນນຳໃຊ້ເລີຍ"
home: "ໜ້າຫຼັກ"
activity: "ກິດຈະກຳ"
images: "ຮູບພາບ"
image: "ຮູບພາບ"
birthday: "ວັນເກີດ"
yearsOld: "{age} ປີ"
registeredDate: "ວັນທີ່ເປັນສະມາຊິກ"
@@ -248,7 +248,6 @@ inputNewDescription: "ໃສ່ຄຳບັນຍາຍໃໝ່"
inputNewFolderName: "ໃສ່ຊື່ໂຟນເດີໃໝ່"
circularReferenceFolder: "ໂຟນເດີປາຍທາງແມ່ນໂຟນເດີຍ່ອຍຂອງໂຟນເດີທີ່ທ່ານຕ້ອງການຍ້າຍ"
rename: "ປ່ຽນຊື່"
nsfw: "NSFW"
watch: "ເບິ່ງ"
unwatch: "ຢຸດເບິ່ງ"
accept: "ອະນຸຍາດ"

View File

@@ -254,12 +254,12 @@ noMoreHistory: "Er is geen verdere geschiedenis"
startMessaging: "Start een gesprek"
nUsersRead: "gelezen door {n}"
agreeTo: "Ik stem in met {0}"
tos: "Gebruiksvoorwaarden"
start: "Aan de slag"
home: "Startpagina"
remoteUserCaution: "Aangezien deze gebruiker van een externe server afkomstig is, kan de weergegeven informatie onvolledig zijn."
activity: "Activiteit"
images: "Afbeeldingen"
image: "Afbeeldingen"
birthday: "Geboortedatum"
yearsOld: "{age} jaar"
registeredDate: "Inschrijvingsdatum"
@@ -296,7 +296,6 @@ copyUrl: "URL kopiëren"
rename: "Hernoemen"
avatar: "Avatar"
banner: "Banner"
nsfw: "NSFW"
whenServerDisconnected: "Wanneer de verbinding met de server wordt onderbroken"
disconnectedFromServer: "Verbinding met de server onderbroken."
reload: "Verversen"

View File

@@ -1,2 +1,724 @@
---
_lang_: "Norsk Bokmål"
headlineMisskey: "Et nettverk forbundet med Notes"
introMisskey: "Velkommen! Misskey er en desentralisert mikrobloggtjeneste med åpen kildekode.\nOpprett \"Notes\" for å dele tankene dine med alle rundt deg. 📡\nMed \"reaksjoner\" kan du også raskt gi uttrykk for hva du synes om alles Notes. 👍\nLa oss utforske en ny verden! 🚀"
monthAndDay: "{day}-{month}"
search: "Søk"
notifications: "Varsler"
username: "Brukernavn"
password: "Passord"
forgotPassword: "Glemt passord"
fetchingAsApObject: "Henter fra Fediverse..."
ok: "OK"
gotIt: "Skjønner"
cancel: "Avbryt"
noThankYou: "Ikke nå"
enterUsername: "Skriv inn brukernavn"
renotedBy: "Renotes av {user}"
noNotes: "Ingen Notes"
noNotifications: "Ingen varsler"
instance: "Server"
settings: "Innstillinger"
notificationSettings: "Varslingsinnstillinger"
basicSettings: "Grunnleggende innstillinger"
otherSettings: "Andre innstillinger"
openInWindow: "Åpne i vindu"
profile: "Profil"
timeline: "Tidslinje"
noAccountDescription: "Denne brukeren har ikke skrevet sin biografi ennå."
login: "Logg inn"
loggingIn: "Logget inn"
logout: "Logg ut"
signup: "Bli med"
uploading: "Laster opp"
save: "Lagre"
users: "Brukere"
addUser: "Legg til bruker"
favorite: "Legg til i favoritter"
favorites: "Favoritter"
unfavorite: "Fjern fra favoritter"
favorited: "Lagt til i favoritter."
alreadyFavorited: "Allerede lagt til i favoritter."
cantFavorite: "Kunne ikke legge til i favoritter."
pin: "Fest til profil"
unpin: "Fjern fra profil"
copyContent: "Kopier innhold"
copyLink: "Kopier lenke"
delete: "Slett"
deleteAndEdit: "Slett og rediger"
deleteAndEditConfirm: "Er du sikker på at du vil slette denne Noten og redigere den? Du vil miste alle reaksjoner, Renotes og svar på den."
addToList: "Legg til i liste"
sendMessage: "Send en melding"
copyRSS: "Kopier RSS"
copyUsername: "Kopier brukernavn"
searchUser: "Søk brukere"
reply: "Svar"
loadMore: "Vis mer"
showMore: "Vis mer"
showLess: "Lukk"
youGotNewFollower: "fulgte deg"
followRequestAccepted: "Følgeforespørsel akseptert"
importAndExport: "Importer og eksporter"
import: "Importer"
export: "Eksporter"
files: "Filer"
download: "Nedlastinger"
driveFileDeleteConfirm: "Er du sikker på at du vil slette \"{name}\"? Det vil også forsvinne fra alt innhold som bruker det."
unfollowConfirm: "Er du sikker på at du vil slutte å følge {name}?"
importRequested: "Du har bedt om import. Dette kan ta en stund."
lists: "Lister"
noLists: "Ingen lister"
note: "Note"
notes: "Notes"
following: "Følger"
followers: "Følgere"
followsYou: "Følger deg"
createList: "Opprett liste"
error: "Feil"
somethingHappened: "En feil har oppstått"
retry: "Prøv igjen"
pageLoadError: "Kunne ikke hente side."
serverIsDead: "Denne serveren svarer ikke. Vennligst vent en stund og prøv igjen."
enterListName: "Skriv inn et navn på listen"
privacy: "Personvern"
defaultNoteVisibility: "Standard synlighet"
follow: "Følg"
followRequest: "Følgeforespørsel"
followRequests: "Følgeforespørsel"
unfollow: "Avfølg"
followRequestPending: "Venter på godkjenning"
enterEmoji: "Skriv inn en emoji"
renote: "Renote"
renoted: "Renotet."
cantRenote: "Dette innlegget kan ikke renotes."
cantReRenote: "En Renote kan ikke renotes."
quote: "Sitat"
inChannelRenote: "Renote kun for kanal"
inChannelQuote: "Sitat kun for kanal"
pinnedNote: "Festet Note"
pinned: "Fest til profil"
you: "Du"
clickToShow: "Klikk for å vise"
add: "Legg til"
reaction: "Reaksjon"
reactions: "Reaksjoner"
reactionSetting: "Reaksjoner som vises i reaksjonsvelgeren"
reactionSettingDescription2: "Dra for å endre rekkefølgen, klikk for å slette, trykk \"+\" for å legge til."
rememberNoteVisibility: "Husk innstillingene for synlighet av Notes"
attachCancel: "Fjern vedlegg"
enterFileName: "Skriv inn filnavn"
mute: "Skjul"
unmute: "Vis"
renoteMute: "Skjul Renotes"
renoteUnmute: "Vis Renotes"
block: "Blokker"
unblock: "Opphev blokkering"
suspend: "Suspender"
blockConfirm: "Er du sikker på at du vil blokke denne kontoen?"
unblockConfirm: "Er du sikker på at du vil oppheve blokkeringen av denne kontoen?"
suspendConfirm: "Er du sikker på at du vil suspendere denne kontoen?"
selectList: "Velg en liste"
selectChannel: "Velg en kanal"
selectAntenna: "Velg en antenne"
selectWidget: "Velg en widget"
editWidgets: "Rediger widgeter"
editWidgetsExit: "Ferdig"
emoji: "Emoji"
emojis: "Emojier"
addEmoji: "Legg til emoji"
settingGuide: "Anbefalte innstillinger"
flagAsBot: "Merk denne kontoen som en bot"
flagAsBotDescription: "Aktiver dette alternativet hvis denne kontoen styres av et program. Hvis det er aktivert, vil det fungere som et flagg for andre utviklere for å forhindre endeløse interaksjonskjeder med andre roboter og justere Misskeys interne systemer til å behandle denne kontoen som en bot."
flagAsCat: "Merk denne kontoen som en katt"
flagAsCatDescription: "Aktiver dette alternativet for å merke denne kontoen som en katt."
flagShowTimelineReplies: "Vis svar i tidslinje"
addAccount: "Legg til konto"
reloadAccountsList: "Last inn kontoliste på nytt"
loginFailed: "Kunne ikke logge inn"
general: "Generelt"
searchWith: "Søk: {q}"
youHaveNoLists: "Du har ingen lister"
followConfirm: "Er du sikker på at du vil følge {name}?"
host: "Vert"
selectUser: "Velg en bruker"
recipient: "Mottaker"
annotation: "Kommentarer"
federation: "Føderasjon"
instances: "Servere"
registeredAt: "Registrerte seg"
latestRequestReceivedAt: "Siste forespørsel mottatt"
latestStatus: "Siste status"
charts: "Diagrammer"
perHour: "Per time"
perDay: "Per dag"
stopActivityDelivery: "Slutt å sende aktiviteter"
blockThisInstance: "Blokker denne serveren"
operations: "Operasjoner"
software: "Programvare"
version: "Versjon"
metadata: "Metadata"
withNFiles: "{n} fil(er)"
network: "Nettverk"
instanceInfo: "Serverinformasjon"
statistics: "Statistikk"
clearQueue: "Tøm kø"
clearQueueConfirmTitle: "Er du sikker på at du vil tømme køen?"
blockedInstances: "Blokkerte severe"
blockedInstancesDescription: "Skriv opp vertsnavnene til serverne du vil blokkere, atskilt med linjeskift. Serverne i listen vil ikke lenger kunne kommunisere med denne serveren."
muteAndBlock: "Skjul og blokker"
mutedUsers: "Skjulte brukere"
blockedUsers: "Blokkerte brukere"
noUsers: "Det er ingen brukere"
editProfile: "Rediger profil"
noteDeleteConfirm: "Er du sikker på at du vil slette denne Noten?"
pinLimitExceeded: "Du kan ikke feste flere."
intro: "Installasjonen av Misskey er ferdig! Vennligst opprett en administratorkonto."
done: "Ferdig"
default: "Standard"
defaultValueIs: "Standard: {value}"
noCustomEmojis: "Det er ingen emoji"
noJobs: "Det er ingen jobber"
blocked: "Blokkert"
suspended: "Suspendert"
all: "Alle"
notResponding: "Svarer ikke"
changePassword: "Endre passord"
security: "Sikkerhet"
retypedNotMatch: "Inngangene stemmer ikke overens."
currentPassword: "Nåværende passord"
newPassword: "Nytt passord"
newPasswordRetype: "Nytt passord (gjenta)"
attachFile: "Legg ved filer"
more: "Mer!"
noSuchUser: "Bruker ikke funnet"
announcements: "Kunngjøringer"
remove: "Slett"
removed: "Vellykket slettet"
removeAreYouSure: "Er du sikker på at du vil fjerne \"{x}\"?"
deleteAreYouSure: "Er du sikker på at du vil slette \"{x}\"?"
saved: "Lagret"
upload: "Laste opp"
keepOriginalUploading: "Behold originalbildet"
fromUrl: "Fra URL"
uploadFromUrl: "Last opp fra en URL"
uploadFromUrlDescription: "URL til filen du vil laste opp"
explore: "Utforsk"
messageRead: "Lest"
nUsersRead: "lest av {n}"
agreeTo: "Jeg godtar {0}"
agree: "Godta"
agreeBelow: "Jeg godtar følgende"
basicNotesBeforeCreateAccount: "Viktige merknader"
termsOfService: "Vilkår for bruk"
home: "Hjem"
activity: "Aktivitet"
images: "Bilder"
image: "Bilde"
birthday: "Bursdag"
yearsOld: "{age} år gammel"
theme: "Temaer"
light: "Lys"
dark: "Mørk"
lightThemes: "Lyse temaer"
darkThemes: "Mørke temaer"
syncDeviceDarkMode: "Synkroniser mørkmodus med enhetens innstillinger"
fileName: "Filnavn"
selectFile: "Velg en fil"
selectFiles: "Velg filer"
selectFolder: "Velg en mappe"
selectFolders: "Velg mapper"
renameFile: "Endre filnavn"
folderName: "Mappenavn"
createFolder: "Opprett en mappe"
renameFolder: "Endre mappenavn"
deleteFolder: "Slett denne mappen"
addFile: "Legg til en fil"
emptyFolder: "Denne mappen er tom"
unableToDelete: "Kan ikke slette"
inputNewFileName: "Skriv inn et nytt filnavn"
inputNewDescription: "Skriv inn ny bildetekst"
inputNewFolderName: "Skriv inn et nytt mappenavn"
circularReferenceFolder: "Målmappen er en undermappe til mappen du ønsker å flytte."
hasChildFilesOrFolders: "Siden denne mappen ikke er tom, kan den ikke slettes."
copyUrl: "Kopier URL"
rename: "Endre navn"
avatar: "Avatar"
banner: "Banner"
doNothing: "Ignorer"
accept: "Tillatt"
reject: "Avslå"
instanceName: "Servernavn"
instanceDescription: "Serverbeskrivelse"
thisYear: "År"
thisMonth: "Måned"
today: "I dag"
dayX: "{day}"
monthX: "{month}"
yearX: "{year}"
pages: "Sider"
integration: "Integrasjon"
enableLocalTimeline: "Aktiver lokal tidslinje"
enableGlobalTimeline: "Aktiver global tidslinje"
disablingTimelinesInfo: "Administratorer og Moderatorer vil alltid ha tilgang til alle tidslinjer, selv om de ikke er aktivert."
registration: "Registrer"
enableRegistration: "Aktiver registrering av nye brukere"
invite: "Inviter"
basicInfo: "Grunnleggende informasjon"
pinnedUsers: "Festede brukrere"
pinnedUsersDescription: "Liste over brukernavn atskilt med linjeskift som skal festes i \"Utforsk\" fanen."
pinnedPages: "Festede sider"
pinnedNotes: "Festet Note"
hcaptcha: "hCaptcha"
enableHcaptcha: "Aktiver hCaptcha"
recaptcha: "reCAPTCHA"
enableRecaptcha: "Aktiver reCAPTCHA"
turnstile: "Turnstile"
enableTurnstile: "Aktiver Turnstile"
antennas: "Antenner"
name: "Navn"
antennaSource: "Antennekilde"
notifyAntenna: "Varsle om nye Notes"
withFileAntenna: "Bare Notes med filer"
notesAndReplies: "Notes og svar"
popularUsers: "Populære brukere"
exploreUsersCount: "Det finnes {count} brukere"
exploreFediverse: "Utforsk Fediverse"
userList: "Lister"
about: "Informasjon"
aboutMisskey: "Om Misskey"
newPasswordIs: "Det nye passordet er \"{password}\"."
share: "Del"
notFound: "Ikke funnet"
markAsReadAllNotifications: "Merk alle varsler som lest"
markAsReadAllUnreadNotes: "Merk alle Notes som lest"
help: "Hjelp"
inputMessageHere: "Skriv inn melding her"
close: "Lukk"
invites: "Inviter"
members: "Medlemmer"
title: "Tittel"
text: "Tekst"
next: "Neste"
retype: "Gjenta"
quoteAttached: "Sitat"
noMessagesYet: "Ingen meldinger ennå"
newMessageExists: "Det er nye meldinger"
onlyOneFileCanBeAttached: "Du kan bare legge ved én fil i en melding"
invitations: "Inviter"
available: "Tilgjengelig"
unavailable: "Utilgjengelig"
tooShort: "For kort"
tooLong: "For langt"
weakPassword: "Svakt passord"
normalPassword: "Gjennomsnittlig passord"
strongPassword: "Sterkt passord"
signinWith: "Logg inn med {x}"
signinFailed: "Kunne ikke logge inn. Det oppgitte brukernavnet eller passordet er feil."
or: "eller"
language: "Språk"
aboutX: "Om {x}"
category: "Kategori"
createAccount: "Opprett konto"
openImageInNewTab: "Åpne bilder i ny fane"
clientSettings: "Klientinnstillinger"
accountSettings: "Kontoinnstillinger"
objectStorageRegion: "Region"
objectStorageUseSSL: "Bruk SSL"
objectStorageUseProxy: "Bruk Proxy"
deleteAll: "Slett alt"
newNoteRecived: "Det er nye Notes"
listen: "Lytt"
none: "Ingen"
volume: "Volum"
chooseEmoji: "Velg emoji"
recentUsed: "Sist brukte"
install: "Installer"
uninstall: "Avinstaller"
nothing: "Ingenting"
deleteAllFiles: "Slett alle filer"
deleteAllFilesConfirm: "Er du sikker på at du vil slette alle filer?"
userSuspended: "Denne brukeren har blitt suspendert."
accountDeleted: "Kontoen blir slettet"
accountDeletedDescription: "Denne kontoen har blitt slettet."
menu: "Meny"
poll: "Avstemning"
description: "Beskrivelse"
author: "Forfatter"
height: "Høyde"
large: "Stor"
small: "Liten"
notificationType: "Varseltype"
edit: "Rediger"
email: "E-post"
smtpHost: "Vert"
smtpUser: "Brukernavn"
smtpPass: "Passord"
userSaysSomething: "{name} sa noe"
copy: "Kopier"
channel: "Kanaler"
create: "Opprett"
notificationSetting: "Varslingsinnstillinger"
other: "Andre"
behavior: "Oppførsel"
sample: "Eksempel"
abuseReports: "Rappoter"
reportAbuse: "Rappoter"
send: "Send"
openInNewTab: "Åpne i ny fane"
waitingFor: "Venter på {x}"
random: "Tilfeldig"
system: "System"
desktop: "Skrivebord"
i18nInfo: "Misskey oversettes til flere språk av frivillige. Du kan hjelpe til på {link}."
followingCount: "Følger"
followersCount: "Følgere"
yes: "Ja"
no: "Nei"
contact: "Kontakt"
developer: "Utvikler"
makeExplorable: "Gjør konto synlig i \"Utforsk\""
makeExplorableDescription: "Hvis du slår av dette, vises ikke kontoen din i \"Utforsk\" delen."
left: "Venstre"
nNotes: "{n} Notes"
saveAs: "Lagre som"
value: "Verdi"
deleteConfirm: "Vil du slette?"
invalidValue: "Verdien er ugyldig."
closeAccount: "Avslutt konto"
emailNotification: "E-postvarsler"
inChannelSearch: "Søk i kanal"
clear: "Tøm"
markAllAsRead: "Merk alt som lest"
addDescription: "Legg til beskrivelse"
info: "Infomasjon"
unknown: "Ukjent"
selectAccount: "Velg konto"
user: "Brukere"
accounts: "Kontoer"
switch: "Bytt"
gallery: "Galleri"
ads: "Annonser"
memo: "Notat"
high: "Høy"
low: "Lav"
sent: "Sendt"
received: "Mottatt"
learnMore: "Les mer"
misskeyUpdated: "Misskey har blitt oppdatert!"
translate: "Oversett"
translatedFrom: "Oversatt fra {x}"
unread: "Ulest"
manageAccounts: "Administrer konto"
classic: "Klassisk"
muteThread: "Skjul denne tråden"
unmuteThread: "Vis denne tråden"
continueThread: "Vis fortsettelse av tråden"
hide: "Skjul"
smartphone: "Smarttelefon"
tablet: "Nettbrett"
auto: "Automatisk"
size: "Størrelse"
searchByGoogle: "Søk"
tenMinutes: "10 minutter"
oneHour: "1 time"
oneDay: "1 dag"
oneWeek: "1 uke"
oneMonth: "1 måned"
file: "Filer"
recommended: "Anbefalt"
check: "Sjekk"
deleteAccount: "Slett konto"
document: "Dokumenter"
logoutConfirm: "Vil du logge ut?"
pleaseSelect: "Velg et alternativ"
type: "Type"
beta: "Beta"
account: "Konto"
move: "Flytt"
pushNotification: "Push-varsler"
tools: "Verktøy"
like: "Liker!"
unlike: "Liker ikke"
numberOfLikes: "Likerklikk"
show: "Vis"
neverShow: "Ikke vis igjen"
remindMeLater: "Kanskje senere"
didYouLikeMisskey: "Likte du Misskey?"
roles: "Roller"
role: "Rolle"
color: "Farge"
youCannotCreateAnymore: "Du kan ikke opprette flere."
cannotPerformTemporary: "Midlertidig utilgjengelig"
achievements: "Prestasjoner"
thisPostMayBeAnnoyingCancel: "Avbryt"
exploreOtherServers: "Utforsk andre severe"
letsLookAtTimeline: "La oss se på tidslinje"
cannotBeChangedLater: "Du kan ikke endre senere."
likeOnly: "Bare liker"
retryAllQueuesConfirmTitle: "Vil du prøve igjen akkurat nå?"
video: "Video"
videos: "Videoer"
continue: "Fortsett"
youFollowing: "Følger"
options: "Alternativ"
_initialAccountSetting:
theseSettingsCanEditLater: "Du kan endre disse innstillingene senere."
_achievements:
_types:
_notes10:
title: "Noen Notes"
_notes100:
title: "Mange Notes"
_notes500:
title: "Dekket i Notes"
_notes1000:
title: "Et fjell av Notes"
_notes5000:
title: "Overfylte Notes"
_notes10000:
title: "Super Notes"
_notes20000:
title: "Trenger... mer... Notes..."
_notes30000:
title: "Notes Notes Notes!"
_notes40000:
title: "Note fabrikk"
_notes50000:
title: "Planet av Notes"
_notes100000:
flavor: "Du har jammen mye å si."
_noteFavorited1:
title: "Stjernekikker"
_myNoteFavorited1:
title: "Jeg vil gjerne få en stjerne"
_following50:
title: "Mange venner"
_following100:
title: "100 venner"
_following300:
title: "For mange venner"
_followers10:
title: "Følg meg!"
_followers100:
title: "Populær"
_postedAtLateNight:
flavor: "Det er på tide å gå til sengs."
_driveFolderCircularReference:
title: "Rundskrivreferanse"
_reactWithoutRead:
title: "Leste du det virkelig?"
_clickedClickHere:
title: "Klikk her"
description: "Du har klikket her"
_justPlainLucky:
title: "Rett og slett heldig"
_setNameToSyuilo:
description: "Du satte navnet ditt til \"syuilo\""
_passedSinceAccountCreated1:
title: "Ett års jubileum"
description: "Det har gått ett år siden kontoen din ble opprettet"
_passedSinceAccountCreated2:
title: "To års jubileum"
description: "Det har gått to år siden kontoen din ble opprettet"
_passedSinceAccountCreated3:
title: "Tre års jubileum"
description: "Det har gått tre år siden kontoen din ble opprettet"
_loggedInOnBirthday:
title: "Gratulerer med dagen"
description: "Du logget inn på bursdagen din"
_loggedInOnNewYearsDay:
title: "Godt nytt år"
description: "Du logget inn på årets første dag"
_cookieClicked:
description: "Du klikket på kjeksen"
flavor: "Er du på riktig nettsted?"
_brainDiver:
title: "Brain Diver"
flavor: "Misskey-Misskey La-Tu-Ma"
_role:
options: "Alternativ"
_priority:
low: "Lav"
high: "Høy"
_emailUnavailable:
used: "Allerede brukt"
_accountDelete:
accountDelete: "Slett konto"
_ad:
hide: "Ikke vis"
_gallery:
like: "Liker!"
unlike: "Liker ikke"
_email:
_follow:
title: "fulgte deg"
_preferencesBackups:
saveNew: "Lagre som ny"
cannotSave: "Kunne ikke lagre"
_registry:
key: "Nøkkel"
keys: "Nøkler"
_aboutMisskey:
about: "Misskey er programvare med åpen kildekode som har blitt utviklet av syuilo siden 2014."
translation: "Oversett Misskey"
_instanceTicker:
none: "Ikke vis"
always: "Alltid vis"
_channel:
create: "Opprett kanal"
edit: "Rediger kanal"
featured: "Populært"
following: "Følger"
nameAndDescription: "Navn og beskrivelse"
_menuDisplay:
hide: "Skjul"
_wordMute:
soft: "Myk"
hard: "Hard"
_theme:
description: "Beskrivelse"
color: "Farge"
key: "Nøkkel"
keys:
link: "Lenke"
renote: "Renote"
_sfx:
note: "Notes"
notification: "Varsler"
_ago:
future: "Fremitid"
justNow: "Akkurat nå"
secondsAgo: "{n}s siden"
minutesAgo: "{n}m siden"
hoursAgo: "{n}t siden"
daysAgo: "{n}d siden"
weeksAgo: "{n} uker siden"
monthsAgo: "{n} måneder siden"
yearsAgo: "{n} år siden"
invalid: "Ingenting"
_time:
second: "Sekunder"
minute: "Minutter"
hour: "Timer"
day: "Dager"
_timelineTutorial:
title: "Hvordan bruke Misskey"
step2_2: "Hva med å skrive en selvpresentasjon, eller bare \"Hei {name}!\" hvis du ikke har lyst?"
_2fa:
renewTOTPCancel: "Avbryt"
_weekday:
sunday: "Søndag"
monday: "Mandag"
tuesday: "Tirsdag"
wednesday: "Onsdag"
thursday: "Torsdag"
friday: "Fredag"
saturday: "Lørdag"
_widgets:
profile: "Profil"
instanceInfo: "Serverinformasjon"
notifications: "Varsler"
timeline: "Tidslinje"
calendar: "Kalender"
trends: "Populært"
clock: "Klokke"
activity: "Aktivitet"
photos: "Bilder"
federation: "Føderasjon"
button: "Knapp"
aiscriptApp: "AiScript App"
userList: "Brukerliste"
_userList:
chooseList: "Velg liste"
_cw:
hide: "Skjul"
show: "Vis mer"
_poll:
noOnlyOneChoice: "Trenger minst to valger."
choiceN: "Valg {n}"
noMore: "Du kan ikke legge til flere."
deadlineTime: "Timer"
votesCount: "{n} stemmer"
vote: "Stem"
showResult: "Vis resultatet"
voted: "Stemt"
closed: "Avsluttet"
_visibility:
home: "Hjem"
followers: "Følgere"
_postForm:
_placeholders:
a: "Hva skjer?"
_profile:
name: "Navn"
username: "Brukernavn"
description: "Biografi"
metadataContent: "Innhold"
_exportOrImport:
followingList: "Følg"
muteList: "Skjul"
blockingList: "Blokker"
userLists: "Lister"
_charts:
federation: "Føderasjon"
filesIncDec: "Forskjell på antall filer"
_instanceCharts:
users: "Forskjell på antall brukere"
ff: "Forskjell på antall Følg/Følgere"
files: "Forskjell på antall filer"
_timelines:
home: "Hjem"
_play:
new: "Opprett Play"
edit: "Rediger Play"
featured: "Populært"
title: "Tittel"
summary: "Beskrivelse"
_pages:
invalidNameText: "Pass på at sidetittelen ikke er tom"
like: "Liker"
unlike: "Liker ikke"
my: "Mine sider"
featured: "Populært"
contents: "Innhold"
title: "Tittel"
url: "Side URL"
hideTitleWhenPinned: "Skjul sidetittel når festet til profil"
fontSerif: "Serif"
fontSansSerif: "Sans Serif"
selectType: "Velg type"
blocks:
text: "Tekst"
section: "Seksjon"
image: "Bilde"
button: "Knapp"
_notification:
youWereFollowed: "fulgte deg"
unreadAntennaNote: "Antenne {name}"
achievementEarned: "Prestasjon låst opp"
_types:
follow: "Nye følgere"
reply: "Svar"
renote: "Renotes"
quote: "Sitater"
reaction: "Reaksjoner"
_actions:
reply: "Svar"
renote: "Renote"
_deck:
swapLeft: "Flytt til venstre"
swapRight: "Flytt til høyre"
swapUp: "Flytt opp"
swapDown: "Flytt ned"
profile: "Profil"
newProfile: "Ny profil"
deleteProfile: "Slett profil"
_columns:
notifications: "Varsler"
tl: "Tidslinje"
antenna: "Antenner"
list: "Lister"
channel: "Kanaler"
direct: "Direkte"
_webhookSettings:
name: "Navn"

3
locales/package.json Normal file
View File

@@ -0,0 +1,3 @@
{
"type": "module"
}

View File

@@ -257,12 +257,12 @@ startMessaging: "Rozpocznij czat"
nUsersRead: "przeczytano przez {n}"
agreeTo: "Wyrażam zgodę na {0}"
agreeBelow: "Zaakceptuj poniżej"
tos: "Regulamin"
start: "Rozpocznij"
home: "Strona główna"
remoteUserCaution: "Te informacje mogą nie być aktualne, ponieważ użytkownik pochodzi ze zdalnej instancji."
activity: "Aktywność"
images: "Zdjęcia"
image: "Zdjęcia"
birthday: "Data urodzenia"
yearsOld: "{age} lat"
registeredDate: "Zarejestrowano"
@@ -299,7 +299,6 @@ copyUrl: "Skopiuj adres URL"
rename: "Zmień nazwę"
avatar: "Awatar"
banner: "Baner"
nsfw: "NSFW"
whenServerDisconnected: "Po utracie połączenia z serwerem"
disconnectedFromServer: "Utracono połączenie z serwerem."
reload: "Odśwież"
@@ -870,6 +869,7 @@ loggedInAsBot: "Jesteś obecnie zalogowany/a jako bot"
like: "Polub"
show: "Wyświetlanie"
color: "Kolor"
youFollowing: "Śledzeni"
_role:
priority: "Priorytet"
_priority:
@@ -954,10 +954,6 @@ _aboutMisskey:
donate: "Przekaż darowiznę na Misskey"
morePatrons: "Naprawdę doceniam wsparcie ze strony wielu niewymienionych tu osób. Dziękuję! 🥰"
patrons: "Wspierający"
_nsfw:
respect: "Ukrywaj media NSFW"
ignore: "Nie ukrywaj mediów NSFW"
force: "Ukrywaj wszystkie media"
_instanceTicker:
none: "Nigdy nie pokazuj"
remote: "Pokaż dla zdalnych użytkowników"
@@ -1086,32 +1082,6 @@ _time:
minute: "minuta"
hour: "godz."
day: "dzień"
_tutorial:
title: "Jak korzystać z Misskey"
step1_1: "Witaj!"
step1_2: "Ta strona nazywa się „oś czasu”. Pokazuje chronologicznie uporządkowane wpisy osób, które „śledzisz”."
step1_3: "Twoja oś czasu jest jeszcze pusta, ponieważ nie opublikowałeś(-aś) jeszcze żadnych wpisów i nie obserwujesz jeszcze nikogo."
step2_1: "Ukończmy konfigurację profilu zanim utworzymy wpis lub zaczniemy kogoś obserwować."
step2_2: "Podanie pewnych informacji o tym, kim jesteś, ułatwi innym określenie, czy chcą widzieć Twoje wpisy lub Cię obserwować."
step3_1: "Zakończyłeś(-aś) konfigurację profilu?"
step3_2: "Następnie spróbujmy opublikować wpis. Możesz to zrobić, naciskając przycisk z ikoną ołówka na ekranie."
step3_3: "Wypełnij pole i kliknij przycisk w prawym górnym rogu by wysłać post."
step3_4: "Nie masz nic do powiedzenia? Spróbuj \"ustawiam swój misskey\"!"
step4_1: "Zakończyłeś publikowanie pierwszego wpisu?"
step4_2: "Hurra! Teraz Twój pierwszy wpis powinien być wyświetlany na Twojej osi czasu."
step5_1: "Teraz spróbujmy ożywić Twoją oś czasu, przez zaobserwowanie innych ludzi."
step5_2: "{featured} pokaże Ci popularne wpisy na tej instancji. {explore} pozwoli Ci znaleźć popularnych użytkowników. Spróbuj znaleźć tam osoby, które chcesz obserwować!"
step5_3: "Aby obserwować innych użytkowników, kliknij ich ikonę i naciśnij przycisk \"Obserwuj\" na ich profilu."
step5_4: "Jeśli inny użytkownik ma ikonę kłódki obok swojej nazwy, może minąć trochę czasu, zanim ten użytkownik ręcznie zatwierdzi Twoją prośbę o obserwowanie."
step6_1: "Powinieneś teraz widzieć wpisy innych użytkowników na swojej osi czasu."
step6_2: "Możesz także umieścić „reakcje” na wpisach innych osób, aby szybko na nie odpowiedzieć."
step6_3: "Aby dodać \"reakcję\", naciśnij znak \"+\" na wpisie innego użytkownika i wybierz emotikonę, którą chcesz zareagować."
step7_1: "Gratulacje! Ukończyłeś podstawowy samouczek Misskey."
step7_2: "Jeśli chcesz dowiedzieć się więcej o Misskey, wypróbuj sekcję {help}."
step7_3: "A teraz powodzenia i baw się dobrze z Misskey! 🚀"
step8_1: "Na sam koniec, czy nie chciał(a)byś włączyć powiadomień push?"
step8_2: "Włączenie tej opcji pozwoli ci otrzymywać powiadomienia o reakcjach, śledzeniach i wzmiankach nawet wtedy, gdy Misskey nie będzie otwarty."
step8_3: "Ustawienia powiadomień można zmienić później."
_2fa:
alreadyRegistered: "Zarejestrowałeś już urządzenie do uwierzytelniania dwuskładnikowego."
step1: "Najpierw, zainstaluj aplikację uwierzytelniającą (taką jak {a} lub {b}) na swoim urządzeniu."

View File

@@ -252,12 +252,12 @@ noMoreHistory: "Sem mais história"
startMessaging: "Iniciar conversação"
nUsersRead: "{n} Pessoas leem"
agreeTo: "Eu concordo com {0}"
tos: "Termos de serviço"
start: "começar"
home: "casa"
remoteUserCaution: "As informações estão incompletas porque é um utilizador remoto."
activity: "atividade"
images: "imagem"
image: "imagem"
birthday: "aniversário"
yearsOld: "{age} anos"
registeredDate: "Data de registro"
@@ -294,7 +294,6 @@ copyUrl: "Copiar URL"
rename: "Renomear"
avatar: "Avatar"
banner: "Capa"
nsfw: "Conteúdo sensível"
whenServerDisconnected: "Quando a conexão com o servidor é perdida"
disconnectedFromServer: "Desconectado do servidor"
reload: "Recarregar"

View File

@@ -252,12 +252,12 @@ noMoreHistory: "Nu există mai mult istoric"
startMessaging: "Începe un chat nou"
nUsersRead: "citit de {n}"
agreeTo: "Sunt de acord cu {0}"
tos: "Termenii de utilizare"
start: "Să începem"
home: "Acasă"
remoteUserCaution: "Deoarece acest utilizator este dintr-o instanță externă, informația afișată poate fi incompletă."
activity: "Activitate"
images: "Imagini"
image: "Imagini"
birthday: "Zi de naștere"
yearsOld: "{age} ani"
registeredDate: "Data înregistrării"
@@ -294,7 +294,6 @@ copyUrl: "Copiază URL"
rename: "Redenumește"
avatar: "Avatar"
banner: "Banner"
nsfw: "NSFW"
whenServerDisconnected: "Când pierzi conexiunea cu serverul"
disconnectedFromServer: "Conecțiunea cu serverul a fost pierdută"
reload: "Reîncarcă"

View File

@@ -2,7 +2,7 @@
_lang_: "Русский"
headlineMisskey: "Сеть, сплетённая из заметок"
introMisskey: "Добро пожаловать! Misskey — это децентрализованный сервис микроблогов с открытым исходным кодом.\nПишите «заметки» — делитесь со всеми происходящим вокруг или рассказывайте о себе 📡\nСтавьте «реакции» — выражайте свои чувства и эмоции от заметок других 👍\nОткройте для себя новый мир 🚀"
poweredByMisskeyDescription: "{name} один из инстансов (также называемый экземпляром Misskey), использующий платформу с открытым исходным кодом <b>Misskey</b>."
poweredByMisskeyDescription: "{name} сервис на платформе с открытым исходным кодом <b>Misskey</b>, называемый инстансом Misskey."
monthAndDay: "{day}.{month}"
search: "Поиск"
notifications: "Уведомления"
@@ -20,6 +20,7 @@ noNotes: "Нет ни одной заметки"
noNotifications: "Нет ни одного уведомления"
instance: "Инстанс"
settings: "Настройки"
notificationSettings: "Настройки уведомлений"
basicSettings: "Основные настройки"
otherSettings: "Прочие настройки"
openInWindow: "Открыть в плавающем окне"
@@ -51,6 +52,8 @@ addToList: "Добавить в список"
sendMessage: "Отправить сообщение"
copyRSS: "Скопировать RSS"
copyUsername: "Скопировать имя пользователя"
copyUserId: "Скопировать ID пользователя"
copyNoteId: "Скопировать ID заметки"
searchUser: "Поиск людей"
reply: "Ответить"
loadMore: "Показать еще"
@@ -122,6 +125,8 @@ unmarkAsSensitive: "Снять отметку «не для всех»"
enterFileName: "Введите имя файла"
mute: "Скрыть"
unmute: "Отменить скрытие"
renoteMute: "Заглушить репосты"
renoteUnmute: "Включить репосты"
block: "Заблокировать"
unblock: "Разблокировать"
suspend: "Заморозить"
@@ -153,6 +158,7 @@ flagShowTimelineReplies: "Показывать ответы на заметки
flagShowTimelineRepliesDescription: "Если этот параметр включен, то в ленте, в дополнение к заметкам пользователя, отображаются ответы на другие заметки пользователя."
autoAcceptFollowed: "Принимать подписчиков автоматически"
addAccount: "Добавить учётную запись"
reloadAccountsList: "Обновить список учётных записей"
loginFailed: "Неудачная попытка входа"
showOnRemote: "Перейти к оригиналу на сайт"
general: "Общее"
@@ -259,14 +265,16 @@ noMoreHistory: "История закончилась"
startMessaging: "Начать общение"
nUsersRead: "Прочитали {n}"
agreeTo: "Я соглашаюсь с {0}"
agree: "Согласиться"
agreeBelow: "Согласен со следующими"
basicNotesBeforeCreateAccount: "Записи, перед созданием аккаунта"
tos: "Пользовательское соглашение"
termsOfService: "Условия использования"
start: "Начать"
home: "Главная"
remoteUserCaution: "Это пользователь с другого сайта, поэтому информация может быть неточной."
activity: "Активность"
images: "Изображения"
image: "Изображения"
birthday: "День рождения"
yearsOld: "Возраст: {age}"
registeredDate: "Дата регистрации"
@@ -303,7 +311,6 @@ copyUrl: "Копировать ссылку"
rename: "Переименовать"
avatar: "Аватар"
banner: "Шапка"
nsfw: "Содержимое не для всех"
whenServerDisconnected: "Когда соединение с сервером потеряно"
disconnectedFromServer: "Разорвано соединение с сервером"
reload: "Перезагрузить"
@@ -457,6 +464,7 @@ aboutX: "Описание {x}"
emojiStyle: "Стиль эмодзи"
native: "Системные"
disableDrawer: "Не использовать выдвижные меню"
showNoteActionsOnlyHover: "Показывать кнопки управления заметкой только при наведении"
noHistory: "История пока пуста"
signinHistory: "Журнал посещений"
enableAdvancedMfm: "Включить расширенный MFM"
@@ -469,6 +477,8 @@ createAccount: "Новая учётная запись"
existingAccount: "Существующая учётная запись"
regenerate: "Создать повторно"
fontSize: "Размер шрифта"
mediaListWithOneImageAppearance: "Показывать список медиа только одним изображением"
limitTo: "Обрезать до {x}"
noFollowRequests: "Нерассмотренные запросы на подписку отсутствуют"
openImageInNewTab: "Открыть изображение в новой вкладке"
dashboard: "Панель управления"
@@ -502,9 +512,11 @@ objectStorageUseSSLDesc: "Отключите, если не собираетес
objectStorageUseProxy: "Использовать прокси"
objectStorageUseProxyDesc: "Отключите, если не будете испоьзовать прокси для соединений по протоколу ObjectStorage."
objectStorageSetPublicRead: "Устанавливать public-read при загрузке на сервер"
s3ForcePathStyleDesc: "Включение s3ForcePathStyle принудительно указывает имя корзины как часть пути в URL-адресе вместо имени хоста. Может потребоваться активация при использовании таких вещей, как локальный Minio."
serverLogs: "Журнал сервера"
deleteAll: "Удалить всё"
showFixedPostForm: "Показывать поле для ввода новой заметки наверху ленты"
showFixedPostFormInChannel: "Показывать поле для ввода новой заметки наверху ленты (каналы)"
newNoteRecived: "Появилась новая заметка"
sounds: "Звуки"
sound: "Звуки"
@@ -542,9 +554,14 @@ userSuspended: "Эта учётная запись заморожена"
userSilenced: "Этот пользователь был заглушен"
yourAccountSuspendedTitle: "Эта учетная запись заблокирована"
yourAccountSuspendedDescription: "Эта учетная запись была заблокирована из-за нарушения условий предоставления услуг сервера. Свяжитесь с администратором, если вы хотите узнать более подробную причину. Пожалуйста, не создавайте новую учетную запись."
tokenRevoked: "Токен недействителен"
tokenRevokedDescription: "Срок действия вашего токена входа истек. Пожалуйста, войдите снова."
accountDeleted: "Эта учетная запись удалена"
accountDeletedDescription: "Эта учетная запись удалена"
menu: "Меню"
divider: "Линия-разделитель"
addItem: "Добавить элемент"
rearrange: "Сортировать по"
relays: "Ретрансляторы"
addRelay: "Добавить ретранслятор"
inboxUrl: "URL ящика входящих сообщений"
@@ -633,8 +650,8 @@ abuseReported: "Жалоба отправлена. Большое спасибо
reporter: "Сообщивший"
reporteeOrigin: "О ком сообщено"
reporterOrigin: "Кто сообщил"
forwardReport: "Перенаправление отчета на инстант."
forwardReportIsAnonymous: "Удаленный инстант не сможет увидеть вашу информацию и будет отображаться как анонимная системная учетная запись."
forwardReport: "Отправить жалобу на инстанс автора."
forwardReportIsAnonymous: "Жалоба на удалённый инстанс будет отправлена анонимно. Вместо ваших данных у получателя будет отображена системная учётная запись."
send: "Отправить"
abuseMarkAsResolved: "Отметить жалобу как решённую"
openInNewTab: "Открыть в новой вкладке"
@@ -688,6 +705,8 @@ contact: "Как связаться"
useSystemFont: "Использовать шрифт, предлагаемый системой"
clips: "Подборки"
experimentalFeatures: "Экспериментальные функции"
experimental: "Экспериментальные"
thisIsExperimentalFeature: "Это экспериментальная функция. Технические характеристики могут измениться или он может работать неправильно."
developer: "Разработчик"
makeExplorable: "Опубликовать профиль в «Обзоре»."
makeExplorableDescription: "Если выключить, ваш профиль не будет показан в разделе «Обзор»."
@@ -772,6 +791,7 @@ noMaintainerInformationWarning: "Не заполнены сведения об
noBotProtectionWarning: "Ботозащита не настроена"
configure: "Настроить"
postToGallery: "Опубликовать в галерею"
postToHashtag: "Опубликовать пост с этим хештегом"
gallery: "Галерея"
recentPosts: "Недавние публикации"
popularPosts: "Популярные публикации"
@@ -805,6 +825,7 @@ translatedFrom: "Перевод. Язык оригинала — {x}"
accountDeletionInProgress: "В настоящее время выполняется удаление учетной записи"
usernameInfo: "Имя, которое отличает вашу учетную запись от других на этом сервере. Вы можете использовать алфавит (a~z, A~Z), цифры (0~9) или символы подчеркивания (_). Имена пользователей не могут быть изменены позже."
aiChanMode: "Режим Ай"
devMode: "Режим разработчика"
keepCw: "Сохраняйте Предупреждения о содержимом"
pubSub: "Учётные записи Pub/Sub"
lastCommunication: "Последнее сообщение"
@@ -852,6 +873,7 @@ tenMinutes: "10 минут"
oneHour: "1 час"
oneDay: "1 день"
oneWeek: "1 неделя"
oneMonth: "1 месяц"
reflectMayTakeTime: "Изменения могут занять время для отображения"
failedToFetchAccountInformation: "Не удалось получить информацию об аккаунте"
rateLimitExceeded: "Ограничение скорости превышено"
@@ -893,9 +915,10 @@ remoteOnly: "Только удалённо"
failedToUpload: "Сбой выгрузки"
cannotUploadBecauseInappropriate: "Файл не может быть загружен, так как было установлено, что он может содержать неприемлемое содержимое."
cannotUploadBecauseNoFreeSpace: "Файл не может быть загружен, так как не осталось места на диске"
cannotUploadBecauseExceedsFileSizeLimit: "Файл не может быть загружен, так как он превышает лимит размера файла."
beta: "Бета"
enableAutoSensitive: "Автоматическое определение NSFW"
enableAutoSensitiveDescription: "Если доступно, используйте машинное обучение для автоматической установки флага NSFW на носителе. Даже если эта функция отключена, она может быть установлена ​​автоматически в зависимости от инстанта."
enableAutoSensitive: "Автоматическое определение содержимого не для всех"
enableAutoSensitiveDescription: "Позволяет определять наличие содержимого не для всех при помощи искусственного интеллекта там, где это возможно. Даже если эту опцию отключить, она всё равно может быть включена на весь инстанс."
activeEmailValidationDescription: "Если включено, будет проводиться более строгая проверка адреса электронной почты, в том числе на то, что он действительный и не временный. Если же отключено, то проверяется только корректность написания адреса."
navbar: "Панель навигации"
shuffle: "Перемешать"
@@ -909,6 +932,7 @@ pushNotificationNotSupported: "Push-уведмления не поддержив
sendPushNotificationReadMessage: "Удалять push-уведомления когда сообщение или прочитано"
sendPushNotificationReadMessageCaption: "На мгновение появится уведомление \"{emptyPushNotificationMessage}\". Расход заряда батареи может увеличиться "
windowMaximize: "Развернуть"
windowMinimize: "Свернуть"
windowRestore: "Восстановить"
caption: "Подпись (Automatic Translation)"
loggedInAsBot: "Вы под аккаунтом бота!"
@@ -925,6 +949,7 @@ didYouLikeMisskey: "Вам нравится Misskey?"
pleaseDonate: "Сайт {host} работает на Misskey. Это бесплатное программное обеспечение, и ваши пожертвования очень бы помогли продолжать его разработку!"
roles: "Роли"
role: "Роль"
noRole: "Нет роли"
normalUser: "Обычный пользователь"
undefined: "неопределён"
assign: "Назначить"
@@ -934,6 +959,10 @@ manageCustomEmojis: "Управлять пользовательскими эм
youCannotCreateAnymore: "Вы достигли лимита создания."
cannotPerformTemporary: "Временно недоступен"
cannotPerformTemporaryDescription: "Это действие временно невозможно выполнить из-за превышения лимита выполнения."
invalidParamError: "Ошибка параметра"
invalidParamErrorDescription: "Проблема с параметрами запроса. Обычно это ошибка, но это также может быть связано с тем, что вы набрали слишком много символов."
permissionDeniedError: "Операция запрещена"
permissionDeniedErrorDescription: "У этой учетной записи нет разрешения на выполнение этой операции."
preset: "Шаблоны"
selectFromPresets: "Выбрать из шаблонов"
achievements: "Достижения"
@@ -950,6 +979,40 @@ copyErrorInfo: "Скопировать код ошибки"
joinThisServer: "Присоединяйтесь к этому серверу"
exploreOtherServers: "Искать другие сервера"
letsLookAtTimeline: "Давайте посмотрим на ленту"
disableFederationConfirm: "Отключить федерацию?"
disableFederationConfirmWarn: "Дефедерация не делает заметку приватной. В большинстве случаев без федерации не обойтись."
disableFederationOk: "Не федерируется"
invitationRequiredToRegister: "Этот сервер в настоящее время только по приглашению. Зарегистрироваться могут только те, у кого есть код приглашения."
emailNotSupported: "Доставка почты не поддерживается на этом сервере"
postToTheChannel: "Отправить в канал"
cannotBeChangedLater: "Это нельзя изменить позже"
reactionAcceptance: "Принятие реакций"
likeOnly: "Только лайки"
likeOnlyForRemote: "Только лайки с удалённых серверов"
rolesAssignedToMe: "Мои роли"
resetPasswordConfirm: "Сбросить пароль?"
sensitiveWords: "Чувствительные слова"
sensitiveWordsDescription: "Установите общедоступный диапазон заметки, содержащей заданное слово, на домашний. Можно сделать несколько настроек, разделив их переносами строк."
sensitiveWordsDescription2: "Разделение пробелом создаёт спецификацию AND, а разделение косой чертой создаёт регулярное выражение."
notesSearchNotAvailable: "Поиск заметок недоступен"
license: "Лицензия"
unfavoriteConfirm: "Удалить избранное?"
myClips: "Мои клипы"
drivecleaner: "Очиститель дисков"
retryAllQueuesNow: "Повторить все очереди сейчас"
retryAllQueuesConfirmTitle: "Хотите попробовать ещё раз?"
retryAllQueuesConfirmText: "Нагрузка на сервер может увеличиться"
enableChartsForRemoteUser: "Создание диаграмм для удалённых пользователей"
enableChartsForFederatedInstances: "Создание диаграмм для удалённых серверов"
largeNoteReactions: "Показывать большие реакции на заметки"
noteIdOrUrl: "ID или ссылка на заметку"
video: "Видео"
videos: "Видео"
dataSaver: "Экономия трафика"
renotesList: "Репосты"
horizontal: "Сбоку"
youFollowing: "Подписки"
options: "Настройки ролей"
_achievements:
earnedAt: "Разблокировано в"
_types:
@@ -1121,6 +1184,9 @@ _achievements:
_client30min:
title: "Перерыв на обед"
description: "Прошло 30 минут с момента запуска клиента"
_client60min:
title: "Не наглядеться на Misskey"
description: "Misskey был открыт 60 минут подряд"
_noteDeletedWithin1min:
title: "Ой, нет!"
description: "Заметка удалена через минуту после публикации"
@@ -1223,6 +1289,7 @@ _role:
canInvite: "Может создавать пригласительные коды"
canManageCustomEmojis: "Управлять пользовательскими эмодзи"
driveCapacity: "Доступное пространство на «диске»"
alwaysMarkNsfw: "Всегда отмечать файлы как «не для всех»"
pinMax: "Доступное количество закреплённых заметок"
antennaMax: "Доступное количество антенн"
wordMuteMax: "Доступное количество знаков в списке скрытия слов"
@@ -1250,7 +1317,7 @@ _sensitiveMediaDetection:
description: "Машинное обучение может быть использовано для автоматического обнаружения чувствительных медиа для модерации. Нагрузка на сервер увеличивается незначительно."
sensitivity: "Чувствительность обнаружения"
sensitivityDescription: "Более низкая чувствительность уменьшает количество ложных срабатываний (false positives). Повышение чувствительности уменьшает утечку при обнаружении (ложноотрицательные результаты)."
setSensitiveFlagAutomatically: "Установить флаг NSFW"
setSensitiveFlagAutomatically: "Обозначить как не для всех"
setSensitiveFlagAutomaticallyDescription: "Даже если этот параметр отключен, результат оценки сохраняется внутри системы."
analyzeVideos: "Анализировать видео?"
analyzeVideosDescription: "Анализируйте видео в дополнение к неподвижным изображениям. Нагрузка на сервер немного увеличивается."
@@ -1330,10 +1397,6 @@ _aboutMisskey:
donate: "Пожертвование на Misskey"
morePatrons: "Большое спасибо и многим другим, кто принял участие в этом проекте! 🥰"
patrons: "Материальная поддержка"
_nsfw:
respect: "Скрывать содержимое не для всех"
ignore: "Показывать содержимое не для всех"
force: "Скрывать вообще все файлы"
_instanceTicker:
none: "Не показывать"
remote: "Только для других сайтов"
@@ -1469,32 +1532,16 @@ _time:
minute: "мин"
hour: "ч"
day: "сут"
_tutorial:
_timelineTutorial:
title: "Как пользоваться Misskey"
step1_1: "Добро пожаловать!"
step1_2: "Эта страница называется «лента». Здесь будут появляться «заметки»: ваши личные и тех, на кого вы «подписаны». Они будут располагаться в порядке времени их появления."
step1_3: "Правда, ваша лента пока пуста. Она начнёт заполняться, когда вы будете писать свои заметки и подписываться на других."
step2_1: "Давайте, заполним профиль, прежде чем начать писать заметки и подписываться на других."
step2_2: "То, что вы расскажете в профиле, поможет лучше вас узнать, а значит, многим будет легче присоединиться — вы скорее получите новых подписчиков и читателей."
step3_1: "Успешно заполнили профиль?"
step3_2: "Что ж, теперь самое время опубликовать заметку. Если нажать вверху страницы на изображение карандаша, появится форма для текста."
step3_3: "Напишите в неё, что хотите, и нажмите на кнопку в правом верхнем углу."
step3_4: "Ничего не приходит в голову? Как насчёт: «Я новенький, пока осваиваюсь в Misskey»?"
step4_1: "С написанием первой заметки покончено?"
step4_2: "Отлично, теперь она должна появиться в вашей ленте."
step5_1: "А теперь самое время немного оживить ленту, подписавшись на других."
step5_2: "На странице «{featured}» собраны популярные сегодня заметки, читая которые, вы можете найти кого-то вам интересного, а на странице «{explore}» можно посмотреть, кто популярен у остальных."
step5_3: "Чтобы подписаться на кого-нибудь, щёлкните по его аватару и в открывшемся профиле нажмите кнопку «Подписаться»."
step5_4: "Некоторые пользователи (около их имени «висит замок») вручную подтверждают чужие подписки. Так что иногда подписка начинает работать не сразу.\n"
step6_1: "Если теперь в ленте видны и чужие заметки, значит у вас получилось."
step6_2: "Здесь можно непринуждённо выразить свои чувства к чьей-то заметке, отметив «реакцию» под ней."
step6_3: "Отмечайте реакции, нажмая на символ «+» под заметкой и выбирая значок по душе."
step7_1: "На этом вводный урок по использованию Misskey закончен. Спасибо, что прошли его до конца!"
step7_2: "Хотите изучить Misskey глубже — добро пожаловать в раздел «{help}»."
step7_3: "Приятно вам провести время с Misskey🚀"
step8_1: "Ах, да, не хотите ли включить push-уведомления?"
step8_2: "С push-уведомлениями вы будете в курсе репостов, ответов, реакций и всего такого, даже когда закрыли Misskey."
step8_3: "Эту настройку вы всегда сможете поменять"
step1_1: "Это лицо Misskey, так называемая лента. Ваш инстанс, {name}, покажет тут все опубликованные на нём заметки в хронологическом порядке."
step1_2: "Здесь есть несколько лент. К примеру «персональная» лента отображает заметки тех, на кого вы подписаны. А «местная» — заметки тех, кого приютил {name}."
step2_1: "Что ж, теперь самое время опубликовать заметку. Если нажать вверху страницы на изображение карандаша, появится форма для текста."
step2_2: "Почему бы не написать немного о себе? Ну, или хотя бы «Привет, {name}»?"
step3_1: "Справились с первой заметкой?"
step3_2: "Отлично, теперь она должна появиться в вашей ленте."
step4_1: "А ещё здесь можно делиться своими реакциями на заметки."
step4_2: "Отмечайте реакции, нажимая на символ «+» под заметкой и выбирая значок по душе."
_2fa:
alreadyRegistered: "Двухфакторная аутентификация уже настроена."
registerTOTP: "Начните настраивать приложение-аутентификатор"
@@ -1835,6 +1882,9 @@ _deck:
_dialog:
charactersExceeded: "Превышено максимальное количество символов! У вас {current} / из {max}"
charactersBelow: "Это ниже минимального количества символов! У вас {current} / из {min}"
_disabledTimeline:
title: "Лента отключена"
description: "Ваша текущая роль не позволяет пользоваться этой лентой."
_webhookSettings:
name: "Название"
active: "Вкл."

View File

@@ -261,12 +261,12 @@ nUsersRead: "prečítané {n} používateľmi"
agreeTo: "Súhlasím s {0}"
agreeBelow: "Súhlasím s nasledovným"
basicNotesBeforeCreateAccount: "Základné bezpečnostné opatrenia"
tos: "Podmienky používania"
start: "Začať"
home: "Domov"
remoteUserCaution: "Tieto informácie nemusia byť aktuálne, keďže používateľ je na vzdialenom serveri."
activity: "Aktivita"
images: "Obrázky"
image: "Obrázky"
birthday: "Dátum narodenia"
yearsOld: "{age} rokov"
registeredDate: "Dátum registrácie"
@@ -303,7 +303,6 @@ copyUrl: "Kopírovať URL"
rename: "Premenovať"
avatar: "Avatar"
banner: "BAnner"
nsfw: "NSFW"
whenServerDisconnected: "Keď sa stratí spojenie so serverom"
disconnectedFromServer: "Spojenie so serverom bolo prerušené"
reload: "Obnoviť"
@@ -917,6 +916,8 @@ remindMeLater: "Pripomenúť neskôr"
didYouLikeMisskey: "Páči sa vám Misskey?"
pleaseDonate: "Misskey je bezplatný softvér, ktorý používa {host}. Prosím, prispejte, aby sme ho mohli ďalej rozvíjať!"
color: "Farba"
horizontal: "Strana"
youFollowing: "Sledované"
_role:
priority: "Priorita"
_priority:
@@ -1007,10 +1008,6 @@ _aboutMisskey:
donate: "Podporiť Misskey"
morePatrons: "Takisto oceňujeme podporu mnoých ďalších, ktorí tu nie sú uvedení. Ďakujeme! 🥰"
patrons: "Prispievatelia"
_nsfw:
respect: "Skryť NSFW médiá"
ignore: "Neskrývať NSFW médiá"
force: "Skryť všetky médiá"
_instanceTicker:
none: "Nikdy nezobrazovať"
remote: "Zobraziť pre vzdialených používateľov"
@@ -1146,32 +1143,6 @@ _time:
minute: "min"
hour: "hod"
day: "dní"
_tutorial:
title: "Ako používať Misskey"
step1_1: "Vitajte!"
step1_2: "Táto stránka sa volá \"časová os\". Zobrazuje chronologicky zoradené \"poznámky\" od ľudí, ktorých sledujete."
step1_3: "Vaša časová os je teraz prázdna pretože ste nepridali žiadne poznámky ani nikoho zatiaľ nesledujete."
step2_1: "Podˇme dokončiť nastavenia vášho profilu pred napísaním poznámky alebo sledovaním niekoho."
step2_2: "Poskytnutím informácií o vás uľahčíte ostatným, či chcú vidieť alebo sledovať vaše poznámky."
step3_1: "Dokončili ste nastavovanie svojho profilu?"
step3_2: "Poďme vyskúšať napísať poznámku. Môžete to spraviť stlačením ikony ceruzky na vrchu obrazovky."
step3_3: "Vyplňte polia a stlačte tlačítko vpravo hore."
step3_4: "Nemáte čo povedať? Skúste \"len si nastavujem môj msky\"!"
step4_1: "Napísali ste svoju prvú poznámku?"
step4_2: "Hurá! Teraz by vaša prvá poznámka mala byť na vašej časovej osi."
step5_1: "Teraz skúsme oživiť časovú os sledovaním nejakých ľudí."
step5_2: "{featured} zobrazí populárne poznámku na tomto serveri. {explore} môžete objavovať populárnych používateľov. Skúste tam nájsť ľudí, ktorých by ste radi sledovali!"
step5_3: "Ak chcete sledovať ďalších používateľov, kliknite na ich ikonu a stlačte tlačidlo \"Sledovať\" na ich profile."
step5_4: "Ak má niektorý používateľ ikonu zámku vedľa svojho mena, znamená to, že môže trvať určitý čas, kým daný používateľ schváli vašu žiadosť o sledovanie."
step6_1: "Teraz by ste mali vidieť poznámky ďalších používateľov na svojej časovej osi."
step6_2: "Môžete dať \"reakcie\" na poznámky ďalších ľudí ako rýchlu odpoveď."
step6_3: "Reakciu pridáte kliknutím na \"+\" niekoho poznámke a vybratím emoji, ktorou chcete reagovať."
step7_1: "Gralujeme! Dokončili ste základného sprievodcu Misskey."
step7_2: "Ak sa chcete naučiť viac o Misskey, skúste sekciu {help}."
step7_3: "A teraz, veľa šťastia, bavte sa s Misskey! 🚀"
step8_1: "A nakoniec, prečo si neaktivovať push oznámenia?"
step8_2: "Vďaka push notifikáciám sa dozviete o reakciách, sledovaniach a zmienkach, aj keď Misskey nie je otvorené."
step8_3: "Nastavenia notifikácií môžete neskôr zmeniť."
_2fa:
alreadyRegistered: "Už ste zaregistrovali 2-faktorové autentifikačné zariadenie."
step1: "Najprv si nainštalujte autentifikačnú aplikáciu (napríklad {a} alebo {b}) na svoje zariadenie."

View File

@@ -51,6 +51,8 @@ addToList: "Lägg till i lista"
sendMessage: "Skicka ett meddelande"
copyRSS: "Kopiera RSS"
copyUsername: "Kopiera användarnamn"
copyUserId: "Kopiera användar-ID"
copyNoteId: "Kopiera noter-ID"
searchUser: "Sök användare"
reply: "Svara"
loadMore: "Ladda mer"
@@ -103,6 +105,7 @@ renoted: "Omnoterad."
cantRenote: "Inlägget kunde inte bli omnoterat."
cantReRenote: "En omnotering kan inte bli omnoterad."
quote: "Citat"
inChannelRenote: "Omnotera inom kanalen"
pinnedNote: "Fästad not"
pinned: "Fäst till profil"
you: "Du"
@@ -129,7 +132,10 @@ unblockConfirm: "Är du säkert att du vill avblockera kontot?"
suspendConfirm: "Är du säker att du vill suspendera detta konto?"
unsuspendConfirm: "Är du säker att du vill avsuspendera detta konto?"
selectList: "Välj lista"
editList: "Redigera lista"
selectChannel: "Välj en kanal"
selectAntenna: "Välj en antenn"
editAntenna: "Redigera en antenn"
selectWidget: "Välj en widget"
editWidgets: "Redigera widgets"
editWidgetsExit: "Avsluta redigering"
@@ -256,11 +262,14 @@ noMoreHistory: "Det finns ingen mer historik"
startMessaging: "Starta en chatt"
nUsersRead: "läst av {n}"
agreeTo: "Jag accepterar {0}"
tos: "Användarvillkor"
agree: "Överens"
termsOfService: "Användarvillkor"
start: "Kom igång"
home: "Hem"
remoteUserCaution: "Då denna användaren kommer från en fjärrinstans, kan informationen visad vara ofullständig."
activity: "Aktivitet"
images: "Bilder"
image: "Bilder"
birthday: "Födelsedag"
yearsOld: "{age} år gammal"
registeredDate: "Gick med"
@@ -297,7 +306,6 @@ copyUrl: "Kopiera URL"
rename: "Byt namn"
avatar: "Profilbild"
banner: "Banner"
nsfw: "Känsligt innehåll"
reload: "Ladda om"
doNothing: "Ignorera"
reloadConfirm: "Vill du ladda om tidslinjen?"
@@ -320,16 +328,22 @@ connectService: "Anslut"
disconnectService: "Koppla från"
enableLocalTimeline: "Aktivera lokal tidslinje"
enableGlobalTimeline: "Aktivera global tidslinje"
registration: "Registrera"
enableRegistration: "Aktivera registrering av nya användare"
invite: "Inbjudan"
inMb: "I megabyte"
iconUrl: "URL till profilbilden"
bannerUrl: "URL till banner-bilden"
pinnedNotes: "Fästad not"
hcaptcha: "hCaptcha"
enableHcaptcha: "Aktivera hCaptcha"
hcaptchaSiteKey: "Webbplatsnyckel"
recaptcha: "reCAPTCHA"
enableRecaptcha: "Aktivera reCAPTCHA"
enableTurnstile: "Aktivera Turnstile"
antennas: "Antenner"
manageAntennas: "Hantera Antenner"
name: "Namn"
antennaSource: "Antennkälla"
antennaKeywords: "Nyckelord att lyssna efter"
antennaExcludeKeywords: "Nyckelord att exkludera"
@@ -338,9 +352,14 @@ notifyAntenna: "Notifiera om nya noter"
withFileAntenna: "Endast noter med filer"
enableServiceworker: "Aktivera pushnotiser i denna webbläsaren"
antennaUsersDescription: "Ange ett användarnamn per linje"
notesAndReplies: "Inlägg och svar"
silence: "Tystnad"
recentlyUpdatedUsers: "Nyligen aktiva användare"
recentlyRegisteredUsers: "Nyligen registrerade användare"
exploreFediverse: "Utforska Fediverse"
popularTags: "Populära taggar"
userList: "Listor"
about: "Om"
aboutMisskey: "Om Misskey"
administrator: "Administratör"
passwordLessLogin: "Lösenordsfri inloggning"
@@ -348,29 +367,90 @@ passwordLessLoginDescription: "Tillåter lösenordsfri inloggning med endast en
resetPassword: "Återställ Lösenord"
newPasswordIs: "Det nya lösenordet är \"{password}\""
share: "Dela"
help: "Hjälp"
close: "Stäng"
invites: "Inbjudan"
members: "Medlemmar"
text: "Text"
enable: "Aktivera"
next: "Nästa"
invitations: "Inbjudan"
weakPassword: "Svagt Lösenord"
normalPassword: "Medel Lösenord"
strongPassword: "Starkt Lösenord"
signinFailed: "Kan inte logga in. Det angivna användarnamnet eller lösenordet är felaktigt."
or: "eller"
language: "Språk"
aboutX: "Om {x}"
category: "Kategori"
tags: "Taggar"
createAccount: "Skapa ett konto"
existingAccount: "Existerande konto"
regenerate: "Regenerera"
fontSize: "Textstorlek"
openImageInNewTab: "Öppna bild i ny flik"
clientSettings: "Klientinställningar"
accountSettings: "Kontoinställningar"
numberOfDays: "Antal dagar"
deleteAll: "Radera alla"
sounds: "Ljud"
sound: "Ljud"
listen: "Lyssna"
none: "Ingen"
volume: "Volym"
chooseEmoji: "Välj en emoji"
recentUsed: "Senast använd"
install: "Installera"
uninstall: "Avinstallera"
menu: "Meny"
serviceworkerInfo: "Måste vara aktiverad för pushnotiser."
enableInfiniteScroll: "Ladda mer automatiskt"
enablePlayer: "Öppna videospelare"
permission: "Behörigheter"
enableAll: "Aktivera alla"
edit: "Ändra"
enableEmail: "Aktivera epost-utskick"
email: "E-post"
smtpHost: "Värd"
smtpUser: "Användarnamn"
smtpPass: "Lösenord"
emptyToDisableSmtpAuth: "Lämna användarnamn och lösenord tomt för att avaktivera SMTP verifiering"
logs: "Logg"
channel: "kanal"
create: "Skapa"
other: "Mer"
send: "Skicka"
openInNewTab: "Öppna i ny flik"
createNew: "Skapa ny"
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"
clips: "Klipp"
duplicate: "Duplicera"
reloadToApplySetting: "Inställningen tillämpas efter sidan laddas om. Vill du göra det nu?"
clearCache: "Rensa cache"
onlineUsersCount: "{n} användare är online"
nNotes: "{n} Noter"
backgroundColor: "Bakgrundsbild"
textColor: "Text"
youAreRunningUpToDateClient: "Klienten du använder är uppdaterat."
newVersionOfClientAvailable: "Ny version av klienten är tillgänglig."
publish: "Publicera"
typingUsers: "{users} skriver"
info: "Om"
enabled: "Aktiverad"
user: "Användare"
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"
squareAvatars: "Visa fyrkantiga profilbilder"
sent: "Skicka"
misskeyUpdated: "Misskey har uppdaterats!"
incorrectPassword: "Fel lösenord."
welcomeBackWithName: "Välkommen tillbaka, {name}"
clickToFinishEmailVerification: "Tryck på [{ok}] för att slutföra bekräftelsen på e-postadressen."
searchByGoogle: "Sök"
file: "Filer"
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."
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."
pushNotification: "Pushnotiser"
@@ -381,12 +461,15 @@ pushNotificationNotSupported: "Din webbläsare eller instans har inte stöd för
windowMaximize: "Maximera"
windowMinimize: "Minimera"
windowRestore: "Återställ"
pleaseDonate: "Misskey är en gratis programvara som används på {host}. Donera gärna för att göra utvecklingen ständigt, tack!"
resetPasswordConfirm: "Återställ verkligen ditt lösenord?"
_achievements:
_types:
_open3windows:
title: "Flera Fönster"
description: "Ha minst 3 fönster öppna samtidigt"
_ffVisibility:
public: "Publicera"
_email:
_follow:
title: "följde dig"
@@ -426,6 +509,7 @@ _visibility:
home: "Hem"
followers: "Följare"
_profile:
name: "Namn"
username: "Användarnamn"
changeAvatar: "Ändra profilbild"
changeBanner: "Ändra banner"
@@ -461,6 +545,8 @@ _deck:
tl: "Tidslinje"
antenna: "Antenner"
list: "Listor"
channel: "kanal"
mentions: "Omnämningar"
_webhookSettings:
name: "Namn"
active: "Aktiverad"

View File

@@ -18,8 +18,9 @@ enterUsername: "ใส่ชื่อผู้ใช้"
renotedBy: "รีโน้ตโดย {ผู้ใช้}"
noNotes: "ไม่มีโน้ต"
noNotifications: "ไม่มีการแจ้งเตือน"
instance: "ตัวอย่าง"
instance: "อินสแตนซ์"
settings: "การตั้งค่า"
notificationSettings: "ตั้งค่าการแจ้งเตือน"
basicSettings: "การตั้งค่าพื้นฐาน"
otherSettings: "การตั้งค่าอื่นๆ"
openInWindow: "เปิดในหน้าต่าง"
@@ -51,6 +52,8 @@ addToList: "เพิ่มในลิสต์"
sendMessage: "ส่งข้อความ"
copyRSS: "คัดลอก RSS"
copyUsername: "คัดลอกชื่อผู้ใช้"
copyUserId: "คัดลอก ID ผู้ใช้"
copyNoteId: "คัดลอก ID โน้ต "
searchUser: "ค้นหาผู้ใช้งาน"
reply: "ตอบกลับ"
loadMore: "โหลดเพิ่มเติม"
@@ -72,8 +75,8 @@ unfollowConfirm: "นายแน่ใจแล้วหรอว่าต้
exportRequested: "เมื่อคุณได้ร้องขอการส่งออก อาจจะต้องใช้เวลาสักครู่ และจะถูกเพิ่มในไดรฟ์ของคุณเมื่อเสร็จสิ้นแล้ว"
importRequested: "เมื่อคุณได้ร้องขอการนำเข้า อาจจะต้องใช้เวลาสักครู่นะ"
lists: "รายการ"
noLists: "คุณไม่มีลิสต์ใดๆนะ"
note: "ตัวโน้ต"
noLists: "คุณไม่มีลิสต์ใด ๆ"
note: " โน้ต"
notes: "ตัวโน้ต"
following: "กำลังติดตาม"
followers: "ผู้ติดตาม"
@@ -99,7 +102,7 @@ followRequestPending: "กำลังรอดำเนินการร้อ
enterEmoji: "ใส่อีโมจิ"
renote: "รีโน้ต"
unrenote: "เลิกรีโน้ต"
renoted: "รีโน้ตเอาไว้"
renoted: "รีโน้ตแล้ว"
cantRenote: "โพสต์นี้ไม่สามารถรีโน้ตไว้ใหม่ได้นะ"
cantReRenote: "ไม่สามารถรีโน้ตเอาไว้ใหม่ได้นะ"
quote: "อ้างคำพูด"
@@ -107,7 +110,7 @@ inChannelRenote: "รีโน้ตช่องแชลแนลเท่า
inChannelQuote: "อ้างช่องเท่านั้น"
pinnedNote: "โน้ตที่ปักหมุดเอาไว้"
pinned: "ปักหมุดไปยังโปรไฟล์"
you: "ตัวเอง"
you: "คุณ"
clickToShow: "คลิกเพื่อแสดง"
sensitive: "เนื้อหาที่ละเอียดอ่อน NSFW"
add: "เพิ่ม"
@@ -133,8 +136,10 @@ unblockConfirm: "คุณแน่ใจแล้วเหรอ? ว่าต
suspendConfirm: "นายแน่ใจแล้วเหรอว่าต้องการระงับบัญชีนี้อ่ะ?"
unsuspendConfirm: "นายแน่ใจแล้วหรอ? ว่าต้องการยกเลิกการระงับบัญชีนี้"
selectList: "เลือกรายการ"
editList: "แก้ไขรายการ"
selectChannel: "เลือกแชนแนล"
selectAntenna: "เลือกเสาอากาศ"
editAntenna: "แก้ไขเสาอากาศ"
selectWidget: "เลือกวิดเจ็ต"
editWidgets: "แก้ไขวิดเจ็ต"
editWidgetsExit: "เรียบร้อย"
@@ -163,7 +168,7 @@ wallpaper: "วอลล์เปเปอร์"
setWallpaper: "ตั้งวอลเปเปอร์"
removeWallpaper: "นำวอลเปเปอร์ออก"
searchWith: "ค้นหา: {q}"
youHaveNoLists: "รายการนี้ว่างเปล่า"
youHaveNoLists: "คุณไม่มีลิสต์ใด ๆ "
followConfirm: "คุณแน่ใจแล้วหรอว่าต้องการที่จะติดตาม {name}?"
proxyAccount: "บัญชี พร็อกซี่"
proxyAccountDescription: "บัญชีพร็อกซี่ คือ บัญชีที่จะทำหน้าที่เป็นผู้ติดตามระยะไกลสำหรับผู้ใช้งานที่อยู่ภายใต้ด้วยเงื่อนไขบางอย่าง ยกตัวอย่าง เช่น เมื่อมีผู้ใช้งานนั้นได้เพิ่มผู้ใช้งานจากระยะไกลลงในรายการ แต่กิจกรรมของผู้ใช้ในระยะไกลนั้นจะไม่ถูกส่งไปยังอินสแตนซ์หากไม่มีผู้ใช้งานในพื้นที่ติดตามผู้ใช้รายนั้น ดังนั้นบัญชีพร็อกซีนี้จะติดตามแทน"
@@ -185,7 +190,7 @@ blockThisInstance: "บล็อกอินสแตนซ์นี้"
operations: "ดำเนินการ"
software: "ซอฟต์แวร์"
version: "เวอร์ชั่น"
metadata: "ข้อมูลเมตา"
metadata: "Metadata"
withNFiles: "{n} ไฟล์(s)"
monitor: "มอนิเตอร์"
jobQueue: "คิวงาน"
@@ -212,7 +217,7 @@ intro: "การติดตั้ง Misskey เสร็จสิ้นแล
done: "เสร็จสิ้น"
processing: "กำลังประมวลผล..."
preview: "แสดงตัวอย่าง"
default: "ค่าตั้งต้น"
default: "ค่าเริ่มต้น"
defaultValueIs: "ค่าเริ่มต้น: {value}"
noCustomEmojis: "ไม่มีอีโมจิ"
noJobs: "ไม่มีชิ้นงาน"
@@ -233,10 +238,10 @@ currentPassword: "รหัสผ่านปัจจุบัน"
newPassword: "รหัสผ่านใหม่"
newPasswordRetype: "ใส่รหัสผ่านใหม่อีกครั้ง"
attachFile: "แนบไฟล์"
more: "เพิ่มเติม!"
more: "เพิ่มเติม"
featured: "ไฮไลท์"
usernameOrUserId: "ชื่อผู้ใช้หรือรหัสผู้ใช้งาน"
noSuchUser: "ไม่มีผู้ใช้นี้อยู่ในระบบ"
noSuchUser: "ไม่พบผู้ใช้"
lookup: "การค้นหา"
announcements: "ประกาศ"
imageUrl: "url รูปภาพ"
@@ -262,14 +267,16 @@ noMoreHistory: "ในนั้นไม่มีประวัติอีก
startMessaging: "เริ่มการสนทนา"
nUsersRead: "อ่านโดย {n}"
agreeTo: "ฉันยอมรับที่จะ {0}"
agree: "ยอมรับ"
agreeBelow: "ฉันยอมรับถึงด้านล่าง"
basicNotesBeforeCreateAccount: "หมายเหตุสำคัญ"
tos: "ข้อกำหนดและเงื่อนไข"
termsOfService: "เงื่อนไขการให้บริการ"
start: "เริ่มต้น​ใช้งาน​"
home: "หน้าแรก"
remoteUserCaution: "เนื่องจากผู้ใช้งานรายนี้นั้น มาจากอินสแตนซ์ระยะไกล ข้อมูลที่แสดงดังกล่าวนั้นอาจจะไม่สมบูรณ์ก็ได้นะ"
activity: "กิจกรรม"
images: "รูปภาพ"
image: "รูปภาพ"
birthday: "วันเกิด"
yearsOld: "{age} ปี"
registeredDate: "วันที่สมัครสมาชิก"
@@ -279,7 +286,7 @@ themeForLightMode: "ธีมที่จะใช้ในโหมดแสง
themeForDarkMode: "ธีมที่จะใช้ในโหมดมืด"
light: "สว่าง"
dark: "มืด"
lightThemes: "ธีมสีสว่าง"
lightThemes: "ธีมสว่าง"
darkThemes: "ธีมมืด"
syncDeviceDarkMode: "ซิงค์โหมดมืดด้วยการตั้งค่ากับอุปกรณ์"
drive: "ไดรฟ์"
@@ -306,7 +313,6 @@ copyUrl: "คัดลอก URL"
rename: "เปลี่ยนชื่อ"
avatar: "ไอคอน"
banner: "แบนเนอร์"
nsfw: "เนื้อหาที่ละเอียดอ่อน NSFW"
whenServerDisconnected: "สูญเสียการเชื่อมต่อกับเซิร์ฟเวอร์"
disconnectedFromServer: "ถูกตัดการเชื่อมต่อออกจากเซิร์ฟเวอร์"
reload: "รีโหลด"
@@ -316,7 +322,7 @@ watch: "ดู"
unwatch: "หยุดดู"
accept: "ยอมรับ"
reject: "ปฏิเสธ"
normal: "โหมดปกติ"
normal: "ปกติ"
instanceName: "ชื่อ อินสแตนซ์"
instanceDescription: "คำอธิบายอินสแตนซ์"
maintainerName: "ผู้ดูแล"
@@ -467,12 +473,14 @@ enableAdvancedMfm: "เปิดใช้งาน MFM ขั้นสูง"
enableAnimatedMfm: "เปิดการใช้งาน MFM ด้วยแอนิเมชั่น"
doing: "กำลังประมวลผล......"
category: "หมวดหมู่"
tags: "แท็ก"
tags: "นามแฝง"
docSource: "ที่มาของเอกสารนี้"
createAccount: "สร้างบัญชี"
existingAccount: "บัญชีที่มีอยู่"
regenerate: "สร้างอีกครั้ง"
fontSize: "ขนาดตัวอักษร"
mediaListWithOneImageAppearance: "ความสูงของลิสต์สื่อจะต้องมีรูปภาพเดียวเท่านั้น"
limitTo: "จำกัดไว้ที่ {x}"
noFollowRequests: "คุณไม่มีคำขอติดตามที่รอดำเนินการ"
openImageInNewTab: "เปิดรูปภาพในแท็บใหม่"
dashboard: "หน้ากระดานหลัก"
@@ -555,6 +563,7 @@ accountDeletedDescription: "บัญชีนี้ถูกลบไปแล
menu: "เมนู"
divider: "ตัวแบ่ง"
addItem: "เพิ่มรายการ"
rearrange: "จัดใหม่"
relays: "รีเลย์"
addRelay: "เพิ่มรีเลย์"
inboxUrl: "อินบ็อกซ์ URL"
@@ -671,7 +680,7 @@ notesCount: "จำนวนของโน้ต"
repliesCount: "จำนวนการตอบกลับที่ส่ง"
renotesCount: "จำนวนรีโน้ตที่ส่ง"
repliedCount: "จำนวนของการตอบกลับที่ได้รับ"
renotedCount: "จำนวนรีโน้ตที่ได้รับ"
renotedCount: "จำนวนรีโน้ตที่ได้รับแล้ว"
followingCount: "จำนวนบัญชีที่ติดตาม"
followersCount: "จำนวนผู้ติดตาม"
sentReactionsCount: "จำนวนปฏิกิริยาที่ส่ง"
@@ -698,6 +707,8 @@ contact: "ติดต่อ"
useSystemFont: "ใช้ฟอนต์เริ่มต้นของระบบ"
clips: "คลิป"
experimentalFeatures: "ฟังก์ชั่นทดสอบ"
experimental: "ทดลอง"
thisIsExperimentalFeature: "นี่คือฟีเจอร์ทดลองนะค่ะ ฟังก์ชันการทำงานบางอย่างอาจเปลี่ยนแปลงได้ และอาจไม่ทำงานหรือไม่เสถียรตามที่ตั้งใจไว้นะ"
developer: "สำหรับนักพัฒนา"
makeExplorable: "ทำให้บัญชีมองเห็นใน \"สำรวจ\""
makeExplorableDescription: "ถ้าหากคุณปิดการทำงานนี้ บัญชีของคุณนั้นจะไม่แสดงในส่วน \"สำรวจ\" นะ"
@@ -782,6 +793,7 @@ noMaintainerInformationWarning: "ข้อมูลผู้ดูแลไม
noBotProtectionWarning: "ไม่ได้กำหนดค่าการป้องกันบอทนะ"
configure: "กำหนดค่า"
postToGallery: "สร้างโพสต์แกลเลอรี่ใหม่"
postToHashtag: "โพสต์ไปที่แฮชแท็กนี้"
gallery: "แกลเลอรี่"
recentPosts: "โพสต์ล่าสุด"
popularPosts: "โพสต์ติดอันดับ"
@@ -815,6 +827,7 @@ translatedFrom: "แปลมาจาก {x}"
accountDeletionInProgress: "กำลังดำเนินการลบบัญชีอยู่"
usernameInfo: "ชื่อที่ระบุบัญชีของคุณจากผู้อื่นในเซิร์ฟเวอร์นี้ คุณสามารถใช้ตัวอักษร (a~z, A~Z), ตัวเลข (0~9) หรือขีดล่าง (_) ชื่อผู้ใช้ไม่สามารถเปลี่ยนแปลงได้ในภายหลัง"
aiChanMode: "โหมด Ai "
devMode: "โหมดนักพัฒนา"
keepCw: "เก็บคำเตือนเนื้อหา"
pubSub: "บัญชีผับ/ย่อย"
lastCommunication: "การสื่อสารครั้งสุดท้ายล่าสุด"
@@ -824,6 +837,8 @@ breakFollow: "ลบผู้ติดตาม"
breakFollowConfirm: "ลบผู้ติดตามนี้ออกจริงหรอ?"
itsOn: "เปิดใช้งาน"
itsOff: "ปิดใช้งาน"
on: "เปิด"
off: "ปิด"
emailRequiredForSignup: "จำเป็นต้องการใช้ที่อยู่อีเมลสำหรับการสมัคร"
unread: "ไม่ได้อ่าน"
filter: "กรอง"
@@ -842,7 +857,7 @@ incorrectPassword: "รหัสผ่านไม่ถูกต้อง"
voteConfirm: "ยืนยันการโหวต \"{choice}\" มั้ย?"
hide: "ซ่อน"
useDrawerReactionPickerForMobile: "แสดงผล ตัวเลือกปฏิกิริยาเป็นลิ้นชักบนมือถือ"
welcomeBackWithName: "ยินดีต้อนรับการกลับมานะคะ, {name}"
welcomeBackWithName: "ยินดีต้อนรับการกลับมานะคะ, {name}"
clickToFinishEmailVerification: "กรุณาคลิก [{ok}] เพื่อดำเนินการยืนยันอีเมลให้เสร็จสมบูรณ์นะ"
overridedDeviceKind: "ประเภทอุปกรณ์"
smartphone: "สมาร์ทโฟน"
@@ -904,6 +919,7 @@ remoteOnly: "รีโมทเท่านั้น"
failedToUpload: "การอัปโหลดล้มเหลว"
cannotUploadBecauseInappropriate: "ไม่สามารถอัปโหลดไฟล์นี้ได้เนื่องจากระบบตรวจพบบางส่วนของไฟล์ว่านี้อาจจะเป็น NSFW"
cannotUploadBecauseNoFreeSpace: "การอัปโหลดนั้นล้มเหลวเนื่องจากไม่มีความจุของไดรฟ์"
cannotUploadBecauseExceedsFileSizeLimit: "ไม่สามารถอัปโหลดไฟล์นี้ได้แล้วเนื่องจากเกินขีดจำกัดของขนาดไฟล์แล้ว"
beta: "เบต้า"
enableAutoSensitive: "ทำเครื่องหมาย NSFW อัตโนมัติ"
enableAutoSensitiveDescription: "อนุญาตให้ตรวจหาและทำเครื่องหมายสื่อ NSFW โดยอัตโนมัติผ่านการเรียนรู้ของเครื่องหากเป็นไปได้ แม้ว่าตัวเลือกนี้จะถูกปิดใช้งาน แต่ก็สามารถเปิดใช้งานได้ทั้งอินสแตนซ์นี้"
@@ -937,6 +953,7 @@ didYouLikeMisskey: "คุณเคยชอบ Misskey ไหม?"
pleaseDonate: "{host} ใช้ซอฟต์แวร์ฟรี Misskey เราขอขอบคุณการบริจาคของคุณอย่างสูงเพื่อให้การพัฒนา Misskey สามารถดำเนินต่อไปได้นะ!"
roles: "บทบาท"
role: "บทบาท"
noRole: "ไม่พบบทบาท"
normalUser: "ผู้ใช้มาตรฐาน"
undefined: "ไม่ได้กำหนด"
assign: "กำหนด"
@@ -945,7 +962,11 @@ color: "สี"
manageCustomEmojis: "จัดการอีโมจิแบบกำหนดเอง"
youCannotCreateAnymore: "คุณถึงขีดจํากัดการสร้างแล้วนะ"
cannotPerformTemporary: "ไม่สามารถใช้การได้ชั่วคราว"
cannotPerformTemporaryDescription: "การดําเนินการนี้ไม่สามารถดําเนินการได้ชั่วคราว เนื่องจากเกินขีดจํากัดการดําเนินการ กรุณารอสักครู่แล้วลองใหม่อีกครั้งนะค่ะ"
cannotPerformTemporaryDescription: "ไม่สามารถดําเนินการได้ชั่วคราว เนื่องจากเกินขีดจํากัดการดําเนินการ กรุณารอสักครู่แล้วลองใหม่อีกครั้ง"
invalidParamError: "ข้อผิดพลาดพารามิเตอร์"
invalidParamErrorDescription: "คำขอพารามิเตอร์ไม่ถูกต้อง สิ่งนี้มักจะเกิดจากข้อผิดพลาด แต่อาจเกิดจากอินพุตเกินขีดจำกัดของขนาดหรือที่คล้ายกัน"
permissionDeniedError: "การดำเนินถูกปฏิเสธ"
permissionDeniedErrorDescription: "บัญชีนี้ไม่มีสิทธิ์อนุญาตในการดำเนินการนี้"
preset: "พรีเซ็ต"
selectFromPresets: "เลือกจากการพรีเซ็ต"
achievements: "ความสำเร็จ"
@@ -963,20 +984,23 @@ joinThisServer: "ลงชื่อสมัครใช้ในอินสแ
exploreOtherServers: "มองหาอินสแตนซ์อื่น"
letsLookAtTimeline: "ลองดูที่ไทม์ไลน์"
disableFederationConfirm: "ปิดใช้งานสหพันธ์จริงๆหรอแน่ใจแล้วนะ?"
disableFederationConfirmWarn: "แม้ว่าจะถูกยกเลิกเอาไว้โพสต์ดังกล่าวนั้นจะยังคงเป็นสาธารณะต่อไป เว้นแต่ว่า...จะตั้งค่าเป็นอย่างอื่น โดยปกติคุณไม่จำเป็นต้องทำตรงนี้หรอกนะค่ะ"
disableFederationConfirmWarn: "โพสต์จะยังคงเป็นสาธารณะต่อไป เว้นแต่จะตั้งค่าเป็นอย่างอื่น"
disableFederationOk: "ปิดการใช้งาน"
invitationRequiredToRegister: "อินสแตนซ์นี้เป็นแบบรับเชิญเท่านั้น คุณต้องป้อนรหัสเชิญที่ถูกต้องถึงจะลงทะเบียนได้นะค่ะ"
emailNotSupported: "อินสแตนซ์นี้ไม่รองรับการส่งอีเมลนะค่ะ"
invitationRequiredToRegister: "อินสแตนซ์นี้เป็นแบบรับเชิญเท่านั้น คุณต้องป้อนรหัสเชิญ เพื่องลงทะเบียนเข้าใช้งาน"
emailNotSupported: "อินสแตนซ์นี้ไม่รองรับการส่งอีเมล"
postToTheChannel: "โพสต์ลงช่อง"
cannotBeChangedLater: "สิ่งนี้ไม่สามารถเปลี่ยนแปลงได้ในภายหลังนะ"
reactionAcceptance: "การยอมรับรีแอคชั่น"
likeOnly: "ที่ชอบเท่านั้น"
likeOnlyForRemote: "ไลค์สำหรับอินสแตนซ์ระยะไกลเท่านั้น"
nonSensitiveOnly: "ไม่มีความอ่อนไหวเท่านั้น"
nonSensitiveOnlyForLocalLikeOnlyForRemote: "ไม่มีความอ่อนไหวเท่านั้น (เฉพาะไลค์จากระยะไกลเท่านั้น)"
rolesAssignedToMe: "บทบาทที่ได้รับมอบหมายให้ฉัน"
resetPasswordConfirm: "รีเซ็ตรหัสผ่านของคุณจริงๆหรอ?"
sensitiveWords: "คำที่ละเอียดอ่อน"
sensitiveWordsDescription: "การเปิดเผยโน้ตทั้งหมดที่มีคำที่กำหนดค่าไว้จะถูกตั้งค่าเป็น \"หน้าแรก\" โดยอัตโนมัติ คุณยังสามารถแสดงหลายรายการได้โดยแยกรายการโดยใช้ตัวแบ่งบรรทัดได้นะ"
notesSearchNotAvailable: "การค้นหาโน้ตไม่พร้อมใช้งานนะค่ะ"
sensitiveWordsDescription2: "การใช้ช่องว่างนั้นอาจจะสร้างนิพจน์ AND และคำหลักที่มีเครื่องหมายทับล้อมรอบจะเปลี่ยนเป็นนิพจน์ทั่วไปนะ"
notesSearchNotAvailable: "การค้นหาโน้ตไม่พร้อมใช้งาน"
license: "ใบอนุญาต"
unfavoriteConfirm: "ลบออกจากรายการโปรดแน่ใจหรอ?"
myClips: "คลิปของฉัน"
@@ -989,17 +1013,85 @@ enableChartsForFederatedInstances: "สร้างแผนภูมิข้
showClipButtonInNoteFooter: "เพิ่ม \"คลิป\" เพื่อบันทึกเมนูการทำงาน"
largeNoteReactions: "ขยายรีแอคชั่นการแสดงผล"
noteIdOrUrl: "โน้ต ID หรือ URL"
video: "วีดีโอ"
videos: "วีดีโอ"
dataSaver: "ประหยัดข้อมูล"
accountMigration: "การโยกย้ายบัญชี"
accountMoved: "ผู้ใช้รายนี้ได้ย้ายไปยังบัญชีใหม่แล้ว:"
accountMovedShort: "บัญชีนี้ถูกโอนย้ายไปแล้วค่ะ"
operationForbidden: "ห้ามดำเนินการ"
forceShowAds: "แสดงโฆษณาเสมอ"
addMemo: "เพิ่มมีโม"
editMemo: "แก้ไขมีโม"
reactionsList: "ปฏิกิริยา"
renotesList: "Renotes รีโน้ต"
notificationDisplay: "การแจ้งเตือน"
leftTop: "บนซ้าย"
rightTop: "บนขวา"
leftBottom: "ล่างซ้าย"
rightBottom: "ล่างขวา"
stackAxis: "ทิศทางการซ้อน"
vertical: "แนวตั้ง"
horizontal: "ด้านข้าง"
position: "ตำแหน่ง"
serverRules: "กฎของเซิฟเวอร์"
pleaseConfirmBelowBeforeSignup: "โปรดยืนยันที่ด้านล่างก่อนสมัครใช้งาน"
pleaseAgreeAllToContinue: "คุณต้องยอมรับทุกช่องตรงด้านบนเพื่อดำเนินการต่อค่ะ"
continue: "ดำเนินการต่อ"
preservedUsernames: "ชื่อผู้ใช้ที่สงวนไว้"
preservedUsernamesDescription: "ลิสต์ชื่อผู้ใช้ที่จะสำรองโดยคั่นด้วยการแบ่งบรรทัดนั้น เพราะสิ่งเหล่านี้จะไม่สามารถทำได้ในระหว่างการสร้างบัญชีตามปกติ บัญชีที่มีอยู่แล้วนั้นโดยใช้ชื่อผู้ใช้เหล่านี้จะไม่ได้รับผลกระทบอะไร"
createNoteFromTheFile: "เรียบเรียงโน้ตจากไฟล์นี้"
archive: "เก็บถาวร"
channelArchiveConfirmTitle: "เก็บถาวรจริงๆ {name} มั้ย?"
thisChannelArchived: "ช่องนี้ถูกเก็บถาวรแล้วนะ"
displayOfNote: "การแสดงโน้ต"
initialAccountSetting: "ตั้งค่าโปรไฟล์"
youFollowing: "ติดตามแล้ว"
preventAiLearning: "ปฏิเสธการใช้งาน ในการเรียนรู้ของเครื่อง (Generative AI)"
options: "ตัวเลือกบทบาท"
specifyUser: "ผู้ใช้เฉพาะ"
failedToPreviewUrl: "ไม่สามารถดูตัวอย่างได้"
update: "อัปเดต"
rolesThatCanBeUsedThisEmojiAsReaction: "บทบาทที่สามารถใช้อิโมจินี้เป็นรีแอคชั่นได้"
rolesThatCanBeUsedThisEmojiAsReactionPublicRoleWarn: "บทบาทเหล่านี้ต้องเป็นสาธารณะ"
cancelReactionConfirm: "ต้องการลบรีแอคชั่นของคุณจริงๆหรอ?"
changeReactionConfirm: "ต้องการเปลี่ยนรีแอคชั่นของคุณจริงๆหรอ?"
later: "ไว้ทีหลัง"
goToMisskey: "ถึง Misskey"
additionalEmojiDictionary: "พจนานุกรมอีโมจิเพิ่มเติม"
installed: "ติดตั้งแล้ว"
branding: "แบรนดิ้ง"
enableServerMachineStats: "เผยแพร่สถานะฮาร์ดแวร์ของเซิร์ฟเวอร์"
enableIdenticonGeneration: "เปิดใช้งานผู้ใช้สร้างตัวระบุ"
turnOffToImprovePerformance: "การปิดส่วนนี้สามารถเพิ่มประสิทธิภาพได้"
_initialAccountSetting:
accountCreated: "คุณได้สร้างบัญชีของคุณสำเร็จเรียบร้อยแล้ว!"
letsStartAccountSetup: "สำหรับผู้เริ่มต้นมาตั้งค่าโปรไฟล์ของคุณกันเถอะ"
letsFillYourProfile: "ก่อนอื่นมาตั้งค่าโปรไฟล์ของคุณ"
profileSetting: "ตั้งค่าโปรไฟล์"
privacySetting: "ตั้งค่าความเป็นส่วนตัว"
theseSettingsCanEditLater: "คุณสามารถเปลี่ยนการตั้งค่าเหล่านี้ได้ในภายหลังได้ตลอดเวลานะ"
initialAccountSettingCompleted: "ตั้งค่าโปรไฟล์เสร็จสมบูรณ์แล้ว!"
haveFun: "สนุกกับ {name}!"
skipAreYouSure: "ต้องการข้ามการตั้งค่าโปรไฟล์จริงๆแบบนั้นหรอ?"
laterAreYouSure: "ต้องการตั้งค่าโปรไฟล์ในภายหลังจริงๆอย่างงั้นหรอ?"
_serverRules:
description: "ชุดของกฎที่จะแสดงก่อนการลงทะเบียนเราขอแนะนำให้ตั้งค่าสรุปข้อกำหนดในการให้บริการ"
_accountMigration:
moveFrom: "ย้ายข้อมูลบัญชีอื่นไปยังอีกบัญชีนี้หนึ่ง"
moveFromSub: "สร้างนามแฝงไปยังบัญชีอื่น"
moveFromLabel: "บัญชีที่จะย้ายจาก:"
moveFromDescription: "ถ้าหากคุณต้องการโอนข้อมูล คุณจำเป็นต้องสร้างบัญชีสำรองสำหรับการย้ายบัญชี หลังจากนั้นป้อนบัญชีที่จะย้ายไปในรูปแบบต่อไปนี้: @person@instance.com"
moveTo: "ย้ายข้อมูลบัญชีนี้ไปยังบัญชีอีกหนึ่ง"
moveToLabel: "บัญชีที่จะย้ายไปที่:"
moveCannotBeUndone: "ไม่สามารถยกเลิกการโอนย้ายบัญชีได้"
moveAccountDescription: "การกระทำนี้ไม่สามารถย้อนกลับได้นะ ขั้นตอนแรก ต้องสร้างนามแฝงสำหรับบัญชีนี้ในบัญชีที่คุณต้องการย้ายไป หลังจากนั้นแล้ว ป้อนบัญชีที่จะย้ายไปในรูปแบบดังต่อไปนี้: @person@instance.com"
moveFrom: "ย้ายข้อมูลบัญชีอื่นไปยังอีกบัญชีนี้หนึ่ง"
moveFromLabel: "บัญชีที่จะย้ายจาก:"
moveFromDescription: "สร้างนามแฝงสำหรับบัญชีที่จะย้ายจากบัญชีนี้ ถ้าหากคุณต้องการโอนผู้ติดตาม สิ่งนี้ต้องทำก่อนโอนก่อนนะค่ะ! หลังจากนั้น ป้อนบัญชีที่จะย้ายไปในรูปแบบต่อไปนี้: @person@instance.com"
migrationConfirm: "ย้ายข้อมูลบัญชีนี้ไปที่ {account} จริงๆนะ เมื่อมีการเริ่มต้นแล้ว กระบวนการนี้จะไม่สามารถหยุดหรือนกลับคืนมาได้ และคุณจะไม่สามารถใช้บัญชีนี้ในสถานะดั้งเดิมได้อีกต่อไป\n\nนอกจากนี้ เพื่อให้แน่ใจยืนยันว่าคุณได้สร้างนามแฝงในบัญชีที่จะย้ายข้อมูลนะค่ะ"
moveAccountHowTo: "หากต้องการย้ายข้อมูลก่อนอื่นให้สร้างชื่อแทนสำหรับบัญชีนี้ ในบัญชีที่จะต้องการย้ายไป\nหลังจากที่คุณสร้างนามแฝงนั้นแล้ว ให้ป้อนบัญชีที่ต้องการจะย้ายไปในรูปแบบดังต่อไปนี้: @username@server.example.com"
startMigration: "โอนย้าย"
migrationConfirm: "ยืนยันการย้ายข้อมูลบัญชีนี้ไปที่ {account} เมื่อเริ่มแล้วจะไม่สามารถหยุดหรือนำกลับคืนมาได้ และคุณจะไม่สามารถใช้บัญชีนี้ในสถานะดั้งเดิมได้อีกต่อไป\n\nนอกจากนี้ คุณจำเป็นต้องสร้างบัญชีสำรองสำหรับการย้ายบัญชี"
movedAndCannotBeUndone: "\nบัญชีนี้ถูกโอนย้ายไปแล้ว\nไม่สามารถย้อนกลับโอนย้ายข้อมูลได้"
postMigrationNote: "บัญชีนี้จะถูกเลิกติดตามบัญชีทั้งหมดที่กำลังติดตามภายใน 24 ชั่วโมงหลังจากการย้ายข้อมูลนั้นเสร็จสิ้น ทั้งจำนวนผู้ติดตามและผู้ติดตามนั้นจะกลายเป็นศูนย์ เพื่อหลีกเลี่ยงป้องกันไม่ให้ผู้ติดตามของคุณนั้นไม่สามารถเห็นโพสต์เฉพาะผู้ติดตามของบัญชีนี้ได้ แต่อย่างไรก็ตามแล้วพวกเขาจะยังคงติดตามบัญชีนี้ต่อไป"
movedTo: "บัญชีที่จะย้ายไปที่:"
_achievements:
earnedAt: "ได้รับเมื่อ"
_types:
@@ -1171,6 +1263,9 @@ _achievements:
_client30min:
title: "พักผ่อนสักหน่อย"
description: "ใช้เวลา 30 นาทีบน Misskey"
_client60min:
title: "ไม่พบ \"Miss\" ใน Misskey "
description: "เปิด Misskey ค้างไว้แล้วอย่างน้อย 60 นาที"
_noteDeletedWithin1min:
title: "ไม่เป็นไร"
description: "ลบโน้ตภายในหนึ่งนาทีหลังจากที่โพสต์"
@@ -1259,6 +1354,8 @@ _role:
iconUrl: "ไอคอน URL"
asBadge: "แสดงเป็นตรา"
descriptionOfAsBadge: "ไอคอนของบทบาทนี้จะปรากฏถัดจากชื่อผู้ใช้ของผู้ใช้งานด้วยบทบาทนี้ถ้าหากเปิดใช้งาน"
isExplorable: "บทบาทไทม์ไลน์เป็นแบบสาธารณะ"
descriptionOfIsExplorable: "ไทม์ไลน์ของบทบาทนี้จะสามารถเข้าถึงได้แบบสาธารณะถ้าหากเปิดใช้งาน เส้นเวลาของบทบาทนั้นจะไม่ถูกเปิดเผยต่อสาธารณะ ถึงแม้ว่าจะไม่เปิดเผยต่อสาธารณะแม้แต่ว่า...จะตั้งค่าไว้ยังไงก็ตาม"
displayOrder: "ตำแหน่ง"
descriptionOfDisplayOrder: "ยิ่งตัวเลขสูง ตำแหน่ง UI ก็ยิ่งสูงขึ้นนะ"
canEditMembersByModerator: "อนุญาตให้ผู้ดูแลแก้ไขสมาชิก"
@@ -1275,6 +1372,7 @@ _role:
canInvite: "สร้างรหัสเชิญอินสแตนซ์"
canManageCustomEmojis: "จัดการอีโมจิแบบกำหนดเอง"
driveCapacity: "ความจุของไดรฟ์"
alwaysMarkNsfw: "ทำเครื่องหมายไฟล์ว่าเป็น NSFW เสมอ"
pinMax: "จํานวนสูงสุดของโน้ตที่ปักหมุดไว้"
antennaMax: "จำนวนสูงสุดของเสาอากาศ"
wordMuteMax: "จำนวนอักขระสูงสุดที่อนุญาตในการปิดเสียงคำ"
@@ -1334,6 +1432,7 @@ _ad:
back: "ย้อนกลับ"
reduceFrequencyOfThisAd: "แสดงโฆษณานี้ให้น้อยลง"
hide: "ไม่ต้องแสดง"
timezoneinfo: "วันในสัปดาห์นี้จะถูกกำหนดจากโซนเวลาของเซิร์ฟเวอร์"
_forgotPassword:
enterEmail: "ป้อนที่อยู่อีเมลที่คุณเคยใช้ในการลงทะเบียนไว้ ลิงก์ที่คุณสามารถรีเซ็ตรหัสผ่านได้นั้นจะถูกส่งไปนะ"
ifNoEmail: "ถ้าหากคุณไม่ได้ใช้อีเมลระหว่างการลงทะเบียน กรุณาติดต่อผู้ดูแลระบบอินสแตนซ์แทนนะ"
@@ -1385,10 +1484,6 @@ _aboutMisskey:
donate: "บริจาคให้กับ Misskey"
morePatrons: "เราขอขอบคุณสำหรับความช่วยเหลือจากผู้ช่วยอื่นๆ ที่ไม่ได้ระบุไว้ที่นี่นะ ขอขอบคุณ! 🥰"
patrons: "สมาชิกพันธมิตร"
_nsfw:
respect: "ซ่อนสื่อ NSFW"
ignore: "อย่าซ่อนสื่อ NSFW"
force: "ซ่อนสื่อทั้งหมด"
_instanceTicker:
none: "ไม่ต้องแสดง"
remote: "แสดงสำหรับผู้ใช้ระยะไกล"
@@ -1407,6 +1502,8 @@ _channel:
following: "ติดตามแล้ว"
usersCount: "{n} ผู้เข้าร่วม"
notesCount: "{n} โน้ต"
nameAndDescription: "ชื่อและคำอธิบาย"
nameOnly: "ชื่อเท่านั้น"
_menuDisplay:
sideFull: "ด้านข้าง"
sideIcon: "ด้านข้าง (ไอคอน)"
@@ -1524,32 +1621,14 @@ _time:
minute: "นาที"
hour: "ชั่วโมง"
day: "วัน"
_tutorial:
title: "วิธีการใช้งาน Misskey"
step1_1: "ยินดีต้อนรับค่ะ!"
step1_2: "หน้านี้เรียกว่า \"ไทม์ไลน์\" มันจะแสดง \"โน้ตย่อ\" ที่เรียงลำดับตามลำดับเวลาของคนที่คุณ \"ติดตาม\""
step1_3: "ไทม์ไลน์ของคุณนั้นว่างเปล่า เนื่องจากคุณยังไม่ได้โพสต์โน้ตย่อหรือไม่ได้ติดตามใครเลย"
step2_1: "มาตั้งค่าโปรไฟล์ของคุณให้เสร็จก่อนเขียนโน้ตย่อหรือติดตามใครก็ได้"
step2_2: "การให้ข้อมูลบางอย่างเกี่ยวกับตัวคุณนั้น จะทำให้ผู้อื่นทราบว่าต้องการดูโน้ตย่อของคุณหรือติดตามคุณได้ง่ายขึ้น"
step3_1: "ตั้งค่าโปรไฟล์ของคุณเสร็จแล้ว?"
step3_2: "จากนั้นลองโพสต์โน้ตกันต่อไป คุณสามารถทำได้โดยกดปุ่มที่มีไอคอนดินสอบนหน้าจอนะ"
step3_3: "กรอกโมดอลแล้วกดปุ่มด้านบนขวาเพื่อโพสต์"
step3_4: "ไม่มีอะไรจะพูดงั้นหรอ ลอง \"เพียงแค่ตั้งค่าว่า Misskey ของฉัน\"!"
step4_1: "เสร็จสิ้นการโพสต์โน้ตย่อแรกของคุณแล้วอย่างงั้นหรอ?"
step4_2: "ไชโย! ตอนนี้โน้ตย่อแรกของคุณได้ปรากฏบนไทม์ไลน์ของคุณแล้วนะ"
step5_1: "ตอนนี้ มาลองทำไทม์ไลน์เพิ่มเติมของคุณให้ดูมีชีวิตชีวามากขึ้นโดยการติดตามคนอื่น"
step5_2: "{featured} จะแสดงโน้ตยอดนิยมให้คุณเห็นในกรณีนี้ {explore} จะช่วยให้คุณค้นหาผู้ใช้ยอดนิยมได้ ลองหาคนที่คุณต้องการติดตามที่นั่นสิ!"
step5_3: "หากต้องการติดตามผู้ใช้รายอื่น ให้คลิกที่ไอคอนและกดปุ่ม \"ติดตาม\" บนโปรไฟล์ของพวกเขาได้เลยจ้า"
step5_4: "หากผู้ใช้รายอื่นมีไอคอนแม่กุญแจที่อยู่ข้างชื่อ อาจต้องใช้เวลาสักระยะกว่าที่ผู้ใช้รายนั้นจะอนุมัติคำขอติดตามของคุณ"
step6_1: "คุณสามารถเห็นโน้ตย่อของผู้ใช้รายอื่นบนไทม์ไลน์ของคุณได้แล้วตอนนี้"
step6_2: "คุณยังสามารถใส่ \"ปฏิกิริยา\" ลงในโน้ตของคนอื่นเพื่อตอบกลับได้อย่างรวดเร็ว"
step6_3: "หากต้องการแนบ \"ปฏิกิริยา\" ให้กดเครื่องหมาย \"+\" ในโน้ตของผู้ใช้รายอื่นแล้วเลือกอีโมจิที่คุณต้องการโต้ตอบด้วย"
step7_1: "ยินดีด้วยนะ! คุณได้เสร็จสิ้นการกวดวิชาพื้นฐานของ Misskey แล้ว"
step7_2: "ถ้าหากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Misskey ให้ลองใช้ส่วน {help}"
step7_3: "ตอนนี้ ถ้าอย่างนั้นก็ขอให้โชคดีและสนุกกับ Misskey! 🚀"
step8_1: "สุดท้ายนี้นายต้องการเปิดใช้งานการแจ้งเตือนแบบพุชหรือป่าว?"
step8_2: "การเปิดใช้งานสิ่งเหล่านี้ จะช่วยให้คุณนั้นได้รับการแจ้งเตือนสำหรับการกล่าวถึง การแสดงรีแอคชั่น การติดตาม ฯลฯ เป็นต้น ถึงแม้ว่าจะไม่ได้เปิด Misskey ก็ตาม"
step8_3: "คุณสามารถเปลี่ยนการตั้งค่านี้ในภายหลังได้ตลอดเวลานะ"
_timelineTutorial:
title: "วิธีใช้งาน Misskey"
step2_1: "มาลองโพสต์โน้ตต่อไปกัน คุณสามารถทำได้โดยการกดปุ่มที่มีไอคอนดินสอ"
step2_2: "ยังไงไหนลองเขียนแนะนำตัวเองหรือแค่ \"สวัสดี {name}!\" ถ้าคุณไม่รู้สึกเหมือนมัน?"
step3_1: "เสร็จสิ้นการโพสต์โน้ตย่อแรกของคุณแล้วอย่างงั้นหรอ?"
step3_2: "ไชโย! ตอนนี้โน้ตย่อแรกของคุณได้ปรากฏบนไทม์ไลน์ของคุณแล้วนะ"
step4_1: "คุณสามารถเพิ่ม \"การตอบสนอง\" ในโน้ตได้"
step4_2: "หากต้องการแนบการแสดงความรู้สึก ให้กดเครื่องหมาย \"+\" บนโน้ตแล้วเลือกอิโมจิที่คุณต้องการแสดงความรู้สึกที่ตนเองชอบได้เลย"
_2fa:
alreadyRegistered: "คุณได้ลงทะเบียนอุปกรณ์ยืนยันตัวตนแบบ 2 ชั้นแล้ว"
registerTOTP: "ลงทะเบียนแอพตัวตรวจสอบสิทธิ์"
@@ -1887,6 +1966,7 @@ _deck:
channel: "แชนแนล"
mentions: "พูดถึง"
direct: "ไดเร็ค"
roleTimeline: "บทบาทไทม์ไลน์"
_dialog:
charactersExceeded: "คุณกำลังมีตัวอักขระเกินขีดจำกัดสูงสุดแล้วนะ! ปัจจุบันอยู่ที่ {current} จาก {max}"
charactersBelow: "คุณกำลังใช้อักขระต่ำกว่าขีดจำกัดขั้นต่ำเลยนะ! ปัจจุบันอยู่ที่ {current} จาก {min}"

View File

@@ -1,6 +1,7 @@
---
_lang_: "Türkçe"
introMisskey: "Açık kaynaklı bir dağıtılmış mikroblog hizmeti olan Misskey'e hoş geldiniz.\nMisskey, neler olup bittiğini paylaşmak ve herkese sizden bahsetmek için \"notlar\" oluşturmanıza olanak tanıyan, açık kaynaklı, dağıtılmış bir mikroblog hizmetidir.\nHerkesin notlarına kendi tepkilerinizi hızlıca eklemek için \"Tepkiler\" özelliğini de kullanabilirsiniz👍.\nYeni bir dünyayı keşfedin🚀."
poweredByMisskeyDescription: "name}Açık kaynak bir platform\n<b>Misskey</b>Dünya'nın en sunucularında biri。"
monthAndDay: "{month}Ay {day}Gün"
search: "Arama"
notifications: "Bildirim"
@@ -13,7 +14,9 @@ cancel: "İptal"
enterUsername: "Kullanıcı adınızı giriniz"
noNotes: "Notlar mevcut değil."
noNotifications: "Bildirim bulunmuyor"
instance: "Sunucu"
settings: "Ayarlar"
notificationSettings: "Bildirim Ayarları"
basicSettings: "Temel Ayarlar"
otherSettings: "Diğer Ayarlar"
openInWindow: "Bir pencere ile aç"
@@ -21,9 +24,11 @@ profile: "Profil"
timeline: "Zaman çizelgesi"
noAccountDescription: "Bu kullanıcı henüz biyografisini yazmadı"
login: "Giriş Yap "
loggingIn: "Oturum aç"
logout: ıkış Yap"
signup: "Kayıt Ol"
uploading: "Yükleniyor"
save: "Kaydet"
users: "Kullanıcı"
addUser: "Kullanıcı Ekle"
favorite: "Favoriler"
@@ -31,6 +36,7 @@ favorites: "Favoriler"
unfavorite: "Favorilerden Kaldır"
favorited: "Favorilerime eklendi."
alreadyFavorited: "Zaten favorilerinizde kayıtlı."
cantFavorite: "Favorilere kayıt yapılamadı"
pin: "Sabitlenmiş"
unpin: "Sabitlemeyi kaldır"
copyContent: "İçeriği kopyala"
@@ -40,23 +46,88 @@ deleteAndEdit: "Sil ve yeniden düzenle"
deleteAndEditConfirm: "Bu notu silip yeniden düzenlemek istiyor musunuz? Bu nota ilişkin tüm Tepkiler, Yeniden Notlar ve Yanıtlar da silinecektir."
addToList: "Listeye ekle"
sendMessage: "Mesaj Gönder"
copyRSS: "RSSKopyala"
copyUsername: "Kullanıcı Adını Kopyala"
copyUserId: "KullanıcıyıKopyala"
copyNoteId: "Kimlik notunu kopyala"
searchUser: "Kullanıcıları ara"
reply: "yanıt"
loadMore: "Devamını yükle"
showMore: "Devamını yükle"
lists: "Listeler"
noLists: "Liste yok"
note: "not"
notes: "notlar"
following: "takipçi"
followers: "takipçi"
followsYou: "seni takip ediyor"
createList: "Liste oluştur"
manageLists: "Yönetici Listeleri"
error: "hata"
follow: "takipçi"
followRequest: "Takip isteği"
followRequests: "Takip istekleri"
unfollow: "takip etmeyi bırak"
followRequestPending: "Bekleyen Takip Etme Talebi"
enterEmoji: "Emoji Giriniz"
renote: "vazgeçme"
unrenote: "not alma"
renoted: "yeniden adlandırılmış"
cantRenote: "Ayrılamama"
cantReRenote: "not alabilirmiyim"
quote: "alıntı"
pinnedNote: "Sabitlenen"
pinned: "Sabitlenmiş"
you: "sen"
unmute: "sesi aç"
renoteMute: "sesi kapat"
renoteUnmute: "sesi açmayı iptal et"
block: "engelle"
unblock: "engellemeyi kaldır"
suspend: "askıya al"
unsuspend: "askıya alma"
blockConfirm: "Onayı engelle"
unblockConfirm: "engellemeyi kaldır onayla"
selectChannel: "Kanal seç"
flagAsBot: "Bot olarak işaretle"
instances: "Sunucu"
remove: "Sil"
pinnedNotes: "Sabitlenen"
userList: "Listeler"
smtpUser: "Kullanıcı Adı"
smtpPass: "Şifre"
user: "Kullanıcı"
searchByGoogle: "Arama"
_theme:
keys:
renote: "vazgeçme"
_sfx:
note: "notlar"
notification: "Bildirim"
_widgets:
profile: "Profil"
notifications: "Bildirim"
timeline: "Zaman çizelgesi"
_cw:
show: "Devamını yükle"
_visibility:
followers: "takipçi"
_profile:
username: "Kullanıcı Adı"
_exportOrImport:
followingList: "takipçi"
blockingList: "engelle"
userLists: "Listeler"
_notification:
_types:
follow: "takipçi"
renote: "vazgeçme"
quote: "alıntı"
_actions:
reply: "yanıt"
renote: "vazgeçme"
_deck:
_columns:
notifications: "Bildirim"
tl: "Zaman çizelgesi"
list: "Listeler"

View File

@@ -258,12 +258,12 @@ startMessaging: "Розпочати діалог"
nUsersRead: "Прочитали {n}"
agreeTo: "Я погоджуюсь з {0}"
agreeBelow: "Я погоджуюся з наведеним нижче"
tos: "Умови використання"
start: "Розпочати"
home: "Домівка"
remoteUserCaution: "Інформація може бути неповною, оскільки це віддалений користувач."
activity: "Активність"
images: "Зображення"
image: "Зображення"
birthday: "День народження"
yearsOld: "{age} років"
registeredDate: "Приєднання"
@@ -300,7 +300,6 @@ copyUrl: "Копіювати URL"
rename: "Перейменувати"
avatar: "Аватар"
banner: "Банер"
nsfw: "NSFW"
whenServerDisconnected: "Коли зв’язок із сервером втрачено"
disconnectedFromServer: "Зв’язок із сервером було перервано"
reload: "Оновити"
@@ -899,6 +898,8 @@ achievements: "Досягнення"
joinThisServer: "Зареєструватися на цьому сервері"
exploreOtherServers: "Знайти інший сервер"
letsLookAtTimeline: "Перегляд історії"
horizontal: "Збоку"
youFollowing: "Підписки"
_achievements:
earnedAt: "Відкрито"
_types:
@@ -1198,10 +1199,6 @@ _aboutMisskey:
donate: "Пожертвувати Misskey"
morePatrons: "Ми дуже цінуємо підтримку багатьох інших помічників, не перелічених тут. Дякуємо! 🥰"
patrons: "Підтримали"
_nsfw:
respect: "Приховувати NSFW медіа"
ignore: "Не приховувати NSFW медіа"
force: "Приховувати всі медіа файли"
_instanceTicker:
none: "Не відображати"
remote: "Відображати для віддалених користувачів"
@@ -1330,31 +1327,6 @@ _time:
minute: "х"
hour: "г"
day: "д"
_tutorial:
title: "Як користуватись Misskey"
step1_1: "Ласкаво просимо!"
step1_2: "Ця сторінка має назву \"стрічка подій\". На ній з'являються записи користувачів на яких ви підписані."
step1_3: "Наразі ваша стрічка порожня, оскільки ви ще не написали жодної нотатки і не підписані на інших."
step2_1: "Перш ніж зробити запис або підписатись на когось, заповніть свій профіль."
step2_2: "Надання деякої інформації про себе допоможе іншим користувачам вирішити підписатись на вас."
step3_1: "Ви успішно налаштували свій обліковий запис?"
step3_2: "Наступним кроком є написання нотатки. Це можна зробити, натиснувши зображення олівця на екрані."
step3_3: "Після написання вмісту ви можете опублікувати його, натиснувши кнопку у верхньому правому куті форми."
step3_4: "Не знаєте що написати? Спробуйте \"Привіт, Misskey!\""
step4_1: "Ви розмістили свій перший запис?"
step4_2: "Ура! Ваш перший запис відображається на вашій стрічці подій."
step5_1: "Настав час оживити вашу стрічку подій підписавшись на інших користувачів."
step5_2: "{explore} допоможе вам знайти цікавих людей та підписатися на них."
step5_3: "Щоб підписатись на інших користувачів, нажміть на їхнє зображення, а потім на кнопку \"підписатись\"."
step5_4: "Якщо користувач має замок при імені, то йому потрібно буде вручну підтвердити вашу заявку на підписку."
step6_1: "Тепер ви повинні бачити записи інших користувачів на вашій стрічці подій."
step6_2: "Також ви можете швидко відповісти, або \"відреагувати\" на записи інших користувачів."
step6_3: "Щоб \"відреагувати\", нажміть на знак плюс \"+\" на записі і виберіть емоджі яким ви хочете \"відреагувати\"."
step7_1: "Вітаю! Ви пройшли ознайомлення з Misskey."
step7_2: "Якщо ви хочете більше дізнатись про Misskey, зайдіть в розділ {help}."
step7_3: "Насолоджуйтесь Misskey! 🚀"
step8_1: "Наостанку, чи бажаєте ви ввімкнути push-сповіщення?"
step8_3: "Ви завжди можете змінити цей параметр пізніше."
_2fa:
alreadyRegistered: "Двофакторна автентифікація вже налаштована."
step1: "Спершу встановіть на свій пристрій програму автентифікації (наприклад {a} або {b})."

View File

@@ -261,12 +261,12 @@ nUsersRead: "đọc bởi {n}"
agreeTo: "Tôi đồng ý {0}"
agreeBelow: "Đồng ý với nội dung dưới đây"
basicNotesBeforeCreateAccount: "Những điều cơ bản cần chú ý "
tos: "Điều khoản dịch vụ"
start: "Bắt đầu"
home: "Trang chính"
remoteUserCaution: "Vì người dùng này ở máy chủ khác, thông tin hiển thị có thể không đầy đủ."
activity: "Hoạt động"
images: "Hình ảnh"
image: "Hình ảnh"
birthday: "Sinh nhật"
yearsOld: "{age} tuổi"
registeredDate: "Tham gia"
@@ -303,7 +303,6 @@ copyUrl: "Sao chép URL"
rename: "Đổi tên"
avatar: "Ảnh đại diện"
banner: "Ảnh bìa"
nsfw: "Nhạy cảm"
whenServerDisconnected: "Khi mất kết nối tới máy chủ"
disconnectedFromServer: "Mất kết nối tới máy chủ"
reload: "Tải lại"
@@ -944,6 +943,8 @@ copyErrorInfo: "Sao chép thông tin lỗi"
joinThisServer: "Đăng ký trên chủ máy này"
exploreOtherServers: "Tìm chủ máy khác"
letsLookAtTimeline: "Thử xem Timeline"
horizontal: "Thanh bên"
youFollowing: "Đang theo dõi"
_achievements:
earnedAt: "Ngày thu nhận"
_types:
@@ -1210,10 +1211,6 @@ _aboutMisskey:
donate: "Ủng hộ Misskey"
morePatrons: "Chúng tôi cũng trân trọng sự hỗ trợ của nhiều người đóng góp khác không được liệt kê ở đây. Cảm ơn! 🥰"
patrons: "Người ủng hộ"
_nsfw:
respect: "Ẩn nội dung NSFW"
ignore: "Hiện nội dung NSFW"
force: "Ẩn mọi media"
_instanceTicker:
none: "Không hiển thị"
remote: "Hiện cho người dùng từ máy chủ khác"
@@ -1349,31 +1346,6 @@ _time:
minute: "phút"
hour: "giờ"
day: "ngày"
_tutorial:
title: "Cách dùng Misskey"
step1_1: "Xin chào!"
step1_2: "Trang này gọi là \"bảng tin\". Nó hiện \"tút\" từ những người mà bạn \"theo dõi\" theo thứ tự thời gian."
step1_3: "Bảng tin của bạn đang trống, bởi vì bạn chưa đăng tút nào hoặc chưa theo dõi ai."
step2_1: "Hãy hoàn thành việc thiết lập hồ sơ của bạn trước khi viết tút hoặc theo dõi bất kỳ ai."
step2_2: "Cung cấp một số thông tin giới thiệu bạn là ai sẽ giúp người khác dễ dàng biết được họ muốn đọc tút hay theo dõi bạn."
step3_1: "Hoàn thành thiết lập hồ sơ của bạn?"
step3_2: "Sau đó, hãy thử đăng một tút tiếp theo. Bạn có thể làm như vậy bằng cách nhấn vào nút có biểu tượng bút chì trên màn hình."
step3_3: "Nhập nội dung vào khung soạn thảo và nhấn nút đăng ở góc trên."
step3_4: "Chưa biết nói gì? Thử \"Tôi mới tham gia Misskey\"!"
step4_1: "Đăng xong tút đầu tiên của bạn?"
step4_2: "De! Tút đầu tiên của bạn đã hiện trên bảng tin."
step5_1: "Bây giờ, hãy thử làm cho bảng tin của bạn sinh động hơn bằng cách theo dõi những người khác."
step5_2: "{feature} sẽ hiển thị cho bạn các tút nổi bật trên máy chủ này. {explore} sẽ cho phép bạn tìm thấy những người dùng thú vị. Hãy thử tìm những người bạn muốn theo dõi ở đó!"
step5_3: "Để theo dõi những người dùng khác, hãy nhấn vào ảnh đại diện của họ và nhấn nút \"Theo dõi\" trên hồ sơ của họ."
step5_4: "Nếu người dùng khác có biểu tượng ổ khóa bên cạnh tên của họ, có thể mất một khoảng thời gian để người dùng đó phê duyệt yêu cầu theo dõi của bạn theo cách thủ công."
step6_1: "Bạn sẽ có thể xem tút của những người dùng khác trên bảng tin của mình ngay bây giờ."
step6_2: "Bạn cũng có thể đặt \"biểu cảm\" trên tút của người khác để phản hồi nhanh chúng."
step6_3: "Để đính kèm \"biểu cảm\", hãy nhấn vào dấu \"+\" trên tút của người dùng khác rồi chọn biểu tượng cảm xúc mà bạn muốn dùng."
step7_1: "Xin chúc mừng! Bây giờ bạn đã hoàn thành phần hướng dẫn cơ bản của Misskey."
step7_2: "Nếu bạn muốn tìm hiểu thêm về Misskey, hãy thử phần {help}."
step7_3: "Bây giờ, chúc may mắn và vui vẻ với Misskey! 🚀"
step8_1: "Cuối cùng, bạn hãy bật thông báo đẩy nha!"
step8_2: "Nhận thông báo đẩy bạn sẽ có thể thấy phản hồi, theo dõi, lượt nhắc được trong khi đóng Misskey"
_2fa:
alreadyRegistered: "Bạn đã đăng ký thiết bị xác minh 2 bước."
passwordToTOTP: "Nhắn mật mã"

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@
_lang_: "繁體中文"
headlineMisskey: "貼文連繫網路"
introMisskey: "歡迎! Misskey是一個開放原始碼且去中心化的社群網路。\n透過「貼文」分享周邊新鮮事並告訴其他人您的想法📡\n透過「反應」功能對大家的貼文表達情感👍\n一起來探索這個新的世界吧🚀"
poweredByMisskeyDescription: "{name}是使用開放原始碼平台<b>Misskey</b>的服務之一(稱為 Misskey 實例)。\n"
poweredByMisskeyDescription: "{name}是使用開放原始碼平台<b>Misskey</b>的服務之一(稱為 Misskey 伺服器)。\n"
monthAndDay: "{month}月 {day}日"
search: "搜尋"
notifications: "通知"
@@ -18,8 +18,9 @@ enterUsername: "輸入使用者名稱"
renotedBy: "{user} 轉發了"
noNotes: "無貼文。"
noNotifications: "沒有通知"
instance: "實例"
instance: "伺服器"
settings: "設定"
notificationSettings: "通知選項"
basicSettings: "基本設定"
otherSettings: "其他設定"
openInWindow: "在新視窗開啟"
@@ -51,6 +52,10 @@ addToList: "加入至清單"
sendMessage: "發送訊息"
copyRSS: "複製RSS"
copyUsername: "複製使用者名稱"
copyUserId: "複製使用者ID"
copyNoteId: "複製貼文ID"
copyFileId: "複製檔案ID"
copyFolderId: "複製資料夾ID"
searchUser: "搜尋使用者"
reply: "回覆"
loadMore: "載入更多"
@@ -85,7 +90,7 @@ somethingHappened: "發生錯誤"
retry: "重試"
pageLoadError: "載入頁面失敗"
pageLoadErrorDescription: "這通常是因為網路錯誤或是瀏覽器快取殘留的原因。請先清除瀏覽器快取,稍後再重試"
serverIsDead: "伺服器沒有回應。請稍等片刻,然後重試。"
serverIsDead: "伺服器沒有回應。請稍等片刻試。"
youShouldUpgradeClient: "請重新載入以使用新版本的客戶端顯示此頁面"
enterListName: "輸入清單名稱"
privacy: "隱私"
@@ -95,7 +100,7 @@ follow: "追隨"
followRequest: "追隨請求"
followRequests: "追隨請求"
unfollow: "取消追隨"
followRequestPending: "追隨許可批准"
followRequestPending: "追隨許可批准"
enterEmoji: "輸入表情符號"
renote: "轉發"
unrenote: "取消轉發"
@@ -133,8 +138,10 @@ unblockConfirm: "確定解除封鎖此用戶?"
suspendConfirm: "確定凍結此帳戶?"
unsuspendConfirm: "確定解凍此帳戶?"
selectList: "選擇清單"
editList: "編輯清單"
selectChannel: "選擇頻道"
selectAntenna: "選擇天線"
editAntenna: "編輯天線"
selectWidget: "選擇小工具"
editWidgets: "編輯小工具"
editWidgetsExit: "完成"
@@ -149,11 +156,11 @@ cacheRemoteFiles: "快取遠端檔案"
cacheRemoteFilesDescription: "禁用此設定會停止遠端檔案的緩存,從而節省儲存空間,但資料會因直接連線從而產生額外連接數據。"
flagAsBot: "此使用者是機器人"
flagAsBotDescription: "如果本帳戶是由程式控制請啟用此選項。啟用後會作為標示幫助其他開發者防止機器人之間產生無限互動的行為並會調整Misskey內部系統將本帳戶識別為機器人"
flagAsCat: "此使用者是貓"
flagAsCat: "喵~~~~~~~~~~~~~~!!!!!!!!!!!!"
flagAsCatDescription: "如果想將本帳戶標示為一隻貓,請開啟此標示"
flagShowTimelineReplies: "在時間軸上顯示貼文的回覆"
flagShowTimelineRepliesDescription: "啟用時,時間線除了顯示用戶的貼文以外,還會顯示用戶對其他貼文的回覆。"
autoAcceptFollowed: "自動追隨中使用者的追隨請求"
autoAcceptFollowed: "自動允許來自追隨中使用者的追隨請求"
addAccount: "添加帳戶"
reloadAccountsList: "更新帳戶清單的資訊"
loginFailed: "登入失敗"
@@ -166,7 +173,7 @@ searchWith: "搜尋: {q}"
youHaveNoLists: "你沒有任何清單"
followConfirm: "你真的要追隨{name}嗎?"
proxyAccount: "代理帳戶"
proxyAccountDescription: "代理帳戶是在某些情況下充當其他伺服器用戶的帳戶。例如,當使用者將一個來自其他伺服器的帳戶放在列表中時,由於沒有其他使用者追該帳戶,該指令不會傳送到該伺服器上,因此會由代理帳戶追。"
proxyAccountDescription: "代理帳戶是在某些情況下充當其他伺服器用戶的帳戶。例如,當使用者將一個來自其他伺服器的帳戶放在列表中時,由於沒有其他使用者追該帳戶,該指令不會傳送到該伺服器上,因此會由代理帳戶追。"
host: "主機"
selectUser: "選取使用者"
recipient: "收件人"
@@ -181,7 +188,7 @@ charts: "圖表"
perHour: "每小時"
perDay: "每日"
stopActivityDelivery: "停止發送活動"
blockThisInstance: "封鎖此實例"
blockThisInstance: "封鎖此伺服器"
operations: "操作"
software: "軟體"
version: "版本"
@@ -192,15 +199,15 @@ jobQueue: "佇列"
cpuAndMemory: "CPU及記憶體用量"
network: "網路"
disk: "硬碟"
instanceInfo: "實例資訊"
instanceInfo: "伺服器資訊"
statistics: "統計"
clearQueue: "清除佇列"
clearQueueConfirmTitle: "確定要清除佇列嗎?"
clearQueueConfirmText: "未發佈的貼文將不會發佈。您通常不需要確認。"
clearCachedFiles: "清除快取資料"
clearCachedFilesConfirm: "確定要清除所有遠端暫存資料嗎?"
blockedInstances: "已封鎖的實例"
blockedInstancesDescription: "請逐行輸入需要封鎖的實例。已封鎖的實例將無法與本實例進行通訊。"
blockedInstances: "已封鎖的伺服器"
blockedInstancesDescription: "請逐行輸入需要封鎖的伺服器。已封鎖的伺服器將無法與本伺服器進行通訊。"
muteAndBlock: "靜音和封鎖"
mutedUsers: "已靜音用戶"
blockedUsers: "已封鎖用戶"
@@ -223,8 +230,8 @@ all: "全部"
subscribing: "訂閱中"
publishing: "直播中"
notResponding: "沒有回應"
instanceFollowing: "追蹤實例"
instanceFollowers: "追蹤實例"
instanceFollowing: "追隨的伺服器"
instanceFollowers: "伺服器的追隨者"
instanceUsers: "用戶"
changePassword: "修改密碼"
security: "安全性"
@@ -262,14 +269,16 @@ noMoreHistory: "沒有更多歷史紀錄"
startMessaging: "開始聊天"
nUsersRead: "{n}人已讀"
agreeTo: "我同意{0}"
agree: "同意"
agreeBelow: "同意以下內容"
basicNotesBeforeCreateAccount: "基本注意事項"
tos: "使用條款"
termsOfService: "服務條款"
start: "開始"
home: "首頁"
remoteUserCaution: "由於該使用者來自遠端實例,因此資訊可能非即時的。"
activity: "動態"
images: "圖片"
image: "圖片"
birthday: "生日"
yearsOld: "{age}歲"
registeredDate: "註冊日期"
@@ -306,7 +315,7 @@ copyUrl: "複製URL"
rename: "重新命名"
avatar: "大頭貼"
banner: "橫幅"
nsfw: "敏感內容"
displayOfSensitiveMedia: "敏感性媒體的顯示"
whenServerDisconnected: "與伺服器的連接中斷時"
disconnectedFromServer: "與伺服器中斷連線"
reload: "重新整理"
@@ -317,8 +326,8 @@ unwatch: "取消追隨"
accept: "接受"
reject: "拒絕"
normal: "正常"
instanceName: "實例名稱"
instanceDescription: "實例說明"
instanceName: "伺服器名稱"
instanceDescription: "伺服器介紹"
maintainerName: "管理員名稱"
maintainerEmail: "管理員郵箱"
tosUrl: "服務條款URL"
@@ -389,7 +398,7 @@ recentlyUpdatedUsers: "最近發文的使用者"
recentlyRegisteredUsers: "新加入使用者"
recentlyDiscoveredUsers: "最近發現的使用者"
exploreUsersCount: "有{count}個使用者"
exploreFediverse: "探索聯邦世界"
exploreFediverse: "探索聯邦宇宙"
popularTags: "熱門標籤"
userList: "使用者清單"
about: "關於"
@@ -473,7 +482,9 @@ createAccount: "建立帳戶"
existingAccount: "現有帳戶"
regenerate: "再生"
fontSize: "字體大小"
noFollowRequests: "沒有跟隨您的請求"
mediaListWithOneImageAppearance: "僅1枚圖片的媒體列表高度"
limitTo: "上限為{x}"
noFollowRequests: "沒有追隨您的請求"
openImageInNewTab: "於新分頁中開啟圖片"
dashboard: "儀表板"
local: "本地"
@@ -482,7 +493,7 @@ total: "合計"
weekOverWeekChanges: "與上週相比"
dayOverDayChanges: "與前一日相比"
appearance: "外觀"
clientSettings: "戶端設定"
clientSettings: "戶端設定"
accountSettings: "帳戶設定"
promotion: "推廣"
promote: "推廣"
@@ -506,6 +517,7 @@ objectStorageUseSSLDesc: "如果不使用https進行API連接請關閉"
objectStorageUseProxy: "使用網路代理"
objectStorageUseProxyDesc: "如果不使用代理進行API連接請關閉"
objectStorageSetPublicRead: "上傳時設定為\"public-read\""
s3ForcePathStyleDesc: "啟用 s3ForcePathStyle 會強制將儲存槽名稱指定為 URL 中路徑的一部分,而不是主機名。 使用自託管 Minio 之類的可能需要啟用。"
serverLogs: "伺服器日誌"
deleteAll: "刪除所有記錄"
showFixedPostForm: "於時間軸頁頂顯示「發送貼文」方框"
@@ -541,8 +553,8 @@ disablePagesScript: "停用頁面的AiScript腳本"
updateRemoteUser: "更新遠端使用者資訊"
deleteAllFiles: "刪除所有檔案"
deleteAllFilesConfirm: "要删除所有檔案嗎?"
removeAllFollowing: "解除所有追"
removeAllFollowingDescription: "解除{host}所有的追。在實例不再存在時執行。"
removeAllFollowing: "解除所有追"
removeAllFollowingDescription: "解除{host}所有的追。在伺服器不再存在時執行。"
userSuspended: "該使用者已被停用"
userSilenced: "該用戶已被禁言。"
yourAccountSuspendedTitle: "帳戶已被凍結"
@@ -554,13 +566,14 @@ accountDeletedDescription: "這個帳戶已被刪除。"
menu: "選單"
divider: "分割線"
addItem: "新增項目"
rearrange: "排序方式"
relays: "中繼"
addRelay: "新增中繼"
inboxUrl: "收件夾URL"
addedRelays: "已加入的中繼"
serviceworkerInfo: "您需要啟用推送通知"
deletedNote: "已删除的貼文"
invisibleNote: "隱藏的貼文"
invisibleNote: "私密的貼文"
enableInfiniteScroll: "啟用自動滾動頁面模式"
visibility: "可見性"
poll: "投票"
@@ -671,8 +684,8 @@ repliesCount: "回覆數量"
renotesCount: "轉發數量"
repliedCount: "回覆數量"
renotedCount: "轉發次數"
followingCount: "正在隨的用戶數量"
followersCount: "隨者數量"
followingCount: "正在隨的用戶數量"
followersCount: "隨者數量"
sentReactionsCount: "反應發送次數"
receivedReactionsCount: "收到反應次數"
pollVotesCount: "已統計的投票數"
@@ -697,6 +710,8 @@ contact: "聯絡人"
useSystemFont: "使用系統預設的字型"
clips: "摘錄"
experimentalFeatures: "實驗中的功能"
experimental: "實驗性"
thisIsExperimentalFeature: "這是實驗性的功能。可能會有變更規格和不能正常動作的可能性。"
developer: "開發者"
makeExplorable: "使自己的帳戶能夠在「探索」頁面中顯示"
makeExplorableDescription: "如果關閉,帳戶將不會被顯示在「探索」頁面中。"
@@ -732,8 +747,8 @@ registry: "登錄表"
closeAccount: "停用帳戶"
currentVersion: "目前版本"
latestVersion: "最新版本"
youAreRunningUpToDateClient: "您所使用的戶端已經是最新的。"
newVersionOfClientAvailable: "新版本的戶端可用。"
youAreRunningUpToDateClient: "您所使用的戶端已經是最新的。"
newVersionOfClientAvailable: "新版本的戶端可用。"
usageAmount: "使用量"
capacity: "容量"
inUse: "已使用"
@@ -741,7 +756,7 @@ editCode: "編輯代碼"
apply: "套用"
receiveAnnouncementFromInstance: "接收由本實例發出的電郵通知"
emailNotification: "郵件通知"
publish: "發"
publish: "發"
inChannelSearch: "頻道内搜尋"
useReactionPickerForContextMenu: "點擊右鍵開啟反應工具欄"
typingUsers: "{users}輸入中..."
@@ -781,6 +796,7 @@ noMaintainerInformationWarning: "尚未設定管理員信息。"
noBotProtectionWarning: "尚未設定Bot防護。"
configure: "設定"
postToGallery: "發佈到相簿"
postToHashtag: "以此主題標籤發布"
gallery: "相簿"
recentPosts: "最新貼文"
popularPosts: "熱門的貼文"
@@ -798,7 +814,7 @@ ratio: "%"
previewNoteText: "預覽文本"
customCss: "自定義 CSS"
customCssWarn: "這個設定必須由具備相關知識的人員操作,不當的設定可能导致客戶端無法正常使用。"
global: "公開"
global: "全域"
squareAvatars: "頭像以方形顯示"
sent: "發送"
received: "收取"
@@ -814,15 +830,18 @@ translatedFrom: "從 {x} 翻譯"
accountDeletionInProgress: "正在刪除帳戶"
usernameInfo: "在伺服器上您的帳戶是唯一的識別名稱。您可以使用字母 (a ~ z, A ~ Z)、數字 (0 ~ 9) 和下底線 (_)。之後帳戶名是不能更改的。"
aiChanMode: "小藍模式"
devMode: "開發者模式"
keepCw: "保持CW"
pubSub: "Pub/Sub 帳戶"
lastCommunication: "最近的通信"
resolved: "已解決"
unresolved: "未解決"
breakFollow: "除追者"
breakFollow: "除追者"
breakFollowConfirm: "確定要取消被追隨嗎?"
itsOn: "已開啟"
itsOff: "已關閉"
on: "開啟"
off: "關閉"
emailRequiredForSignup: "註冊帳戶需要電子郵件地址"
unread: "未讀"
filter: "篩選"
@@ -833,7 +852,7 @@ makeReactionsPublicDescription: "將您做過的反應設為公開可見。"
classic: "經典"
muteThread: "將貼文串設為靜音"
unmuteThread: "將貼文串的靜音解除"
ffVisibility: "連接的公開範圍"
ffVisibility: "連繫的可見性"
ffVisibilityDescription: "您可以設定您的關注/關注者資訊的公開範圍"
continueThread: "查看更多貼文"
deleteAccountConfirm: "將要刪除帳戶。是否確定?"
@@ -903,6 +922,7 @@ remoteOnly: "僅限遠端"
failedToUpload: "上傳失敗"
cannotUploadBecauseInappropriate: "由於判定可能包含不適當的內容,因此無法上傳。"
cannotUploadBecauseNoFreeSpace: "由於雲端硬碟沒有可用空間,因此無法上傳。"
cannotUploadBecauseExceedsFileSizeLimit: "由於超過了檔案大小的限制,無法上傳。"
beta: "Beta"
enableAutoSensitive: "自動NSFW判定"
enableAutoSensitiveDescription: "如果可用,請利用機器學習在媒體上自動設置 NSFW 旗標。 即使關閉此功能,依實例而定也可能會自動設置。"
@@ -919,6 +939,7 @@ pushNotificationNotSupported: "瀏覽器或實例不支援推播通知"
sendPushNotificationReadMessage: "通知與訊息如果已讀的話,就將推播通知刪除"
sendPushNotificationReadMessageCaption: "「{emptyPushNotificationMessage}」通知將立刻顯示。可能會增加設備的電池消耗。"
windowMaximize: "最大化"
windowMinimize: "最小化"
windowRestore: "復原"
caption: "標題"
loggedInAsBot: "以機器人帳戶登入中"
@@ -935,6 +956,7 @@ didYouLikeMisskey: "您是否喜愛Misskey呢"
pleaseDonate: "Misskey是由{host}使用的免費軟體。請贊助我們,讓開發能夠持續!"
roles: "角色"
role: "角色"
noRole: "沒有角色"
normalUser: "一般使用者"
undefined: "未定義"
assign: "指派"
@@ -944,6 +966,10 @@ manageCustomEmojis: "管理自訂表情符號"
youCannotCreateAnymore: "您無法再建立更多了。"
cannotPerformTemporary: "暫時無法進行"
cannotPerformTemporaryDescription: "由於超過操作次數限制,暫時無法進行。請過一段時間之後再嘗試。"
invalidParamError: "參數錯誤"
invalidParamErrorDescription: "請求參數有問題。通常是bug造成的但也有輸入的字元數過多之類的可能性。"
permissionDeniedError: "操作被拒絕"
permissionDeniedErrorDescription: "本帳號沒有執行這個操作的權限。"
preset: "預設值"
selectFromPresets: "從預設值中選擇"
achievements: "成就"
@@ -960,6 +986,9 @@ copyErrorInfo: "複製錯誤資訊"
joinThisServer: "在此伺服器上註冊"
exploreOtherServers: "探索其他伺服器"
letsLookAtTimeline: "看看時間軸"
disableFederationConfirm: "要停止聯邦功能嗎?"
disableFederationConfirmWarn: "即使停止了聯邦功能,貼文也不會變成私密的。在大部分的情況下,沒有必要停止聯邦功能。"
disableFederationOk: "停止聯邦功能"
invitationRequiredToRegister: "目前這個伺服器為邀請制,必須擁有邀請碼才能註冊。"
emailNotSupported: "這個伺服器不支援寄送郵件"
postToTheChannel: "發布到頻道"
@@ -967,10 +996,13 @@ cannotBeChangedLater: "之後不能變更。"
reactionAcceptance: "接受表情反應"
likeOnly: "僅限讚"
likeOnlyForRemote: "遠端僅限讚"
nonSensitiveOnly: "僅限非敏感"
nonSensitiveOnlyForLocalLikeOnlyForRemote: "僅限非敏感(遠端僅限按讚)"
rolesAssignedToMe: "指派給自己的角色"
resetPasswordConfirm: "重設密碼?"
sensitiveWords: "敏感詞"
sensitiveWordsDescription: "將含有設定詞彙的貼文可見性設為發送至首頁。可以用換行來進行複數的設定。"
sensitiveWordsDescription2: "用空格分隔關鍵詞構成AND格式用斜線包圍關鍵字構成正規表達式。"
notesSearchNotAvailable: "無法使用搜尋貼文功能。"
license: "授權"
unfavoriteConfirm: "要取消收錄我的最愛嗎?"
@@ -984,16 +1016,92 @@ enableChartsForFederatedInstances: "生成遠端伺服器的圖表"
showClipButtonInNoteFooter: "將摘錄添加至貼文"
largeNoteReactions: "將貼文的反應放大顯示"
noteIdOrUrl: "貼文ID或URL"
video: "影片"
videos: "影片"
dataSaver: "數據節省模式"
accountMigration: "遷移帳戶"
accountMoved: "這個使用者已遷移至新的帳戶:"
accountMovedShort: "此帳戶已遷移"
operationForbidden: "不允許此操作"
forceShowAds: "總是顯示廣告"
addMemo: "新增備註"
editMemo: "編輯備註"
reactionsList: "反應列表"
renotesList: "轉發貼文列表"
notificationDisplay: "通知的顯示"
leftTop: "左上"
rightTop: "右上"
leftBottom: "左下"
rightBottom: "右下"
stackAxis: "堆疊方向"
vertical: "縱向"
horizontal: "側向"
position: "位置"
serverRules: "伺服器規則"
pleaseConfirmBelowBeforeSignup: "在本伺服器註冊之前,請確認下列事項。"
pleaseAgreeAllToContinue: "必須全部勾選「同意」才能繼續。"
continue: "繼續"
preservedUsernames: "保留的使用者名稱"
preservedUsernamesDescription: "換行列舉要保留的使用者名稱。此處指定的使用者名稱,在建立帳戶時無法使用,但由管理者所建立的帳戶不受此限。此外,既有的帳戶也不受影響。"
createNoteFromTheFile: "由此檔案建立貼文"
archive: "封存"
channelArchiveConfirmTitle: "要封存{name}嗎?"
channelArchiveConfirmDescription: "封存以後,在頻道列表與搜索結果中不會顯示,也無法發布新的貼文。"
thisChannelArchived: "這個頻道已被封存。"
displayOfNote: "顯示貼文"
initialAccountSetting: "初始設定"
youFollowing: "追隨中"
preventAiLearning: "拒絕接受生成式AI的訓練"
preventAiLearningDescription: "要求外部的文章生成式AI或圖像生成式AI不以發布的貼文和圖像等內容為學習對象。這是透過在HTML響應中包含noai旗標來實現的但不能完全防止AI的學習因為這要看該AI是否遵守這個要求。"
options: "選項"
specifyUser: "指定使用者"
failedToPreviewUrl: "無法預覽"
update: "更新"
rolesThatCanBeUsedThisEmojiAsReaction: "可以用這個做為反應的角色"
rolesThatCanBeUsedThisEmojiAsReactionEmptyDescription: "未指定角色的情況,則任何人都可以將它用做反應。"
rolesThatCanBeUsedThisEmojiAsReactionPublicRoleWarn: "角色必須是公開的角色。"
cancelReactionConfirm: "要取消做出的反應嗎?"
changeReactionConfirm: "要變更做出的反應嗎?"
later: "稍後再說"
goToMisskey: "往Misskey"
additionalEmojiDictionary: "表情符號的附加辭典"
installed: "已安裝"
branding: "品牌宣傳"
enableServerMachineStats: "公布伺服器的機器資訊"
enableIdenticonGeneration: "啟用每個使用者的Identicon"
turnOffToImprovePerformance: "關閉時會提高性能。"
_initialAccountSetting:
accountCreated: "帳戶已建立完成!"
letsStartAccountSetup: "來進行帳戶的初始設定吧。"
letsFillYourProfile: "首先,來設定您的個人檔案吧。"
profileSetting: "個人檔案設定"
privacySetting: "隱私設定"
theseSettingsCanEditLater: "這裡的設定可以在之後變更。"
youCanEditMoreSettingsInSettingsPageLater: "除此之外,還可以在「設定」頁面進行各種設定。之後請確認看看。"
followUsers: "為了構築時間軸,試著追蹤您感興趣的使用者吧。"
pushNotificationDescription: "啟用推送通知,就可以在設備上接收{name}的通知。"
initialAccountSettingCompleted: "初始設定完成了!"
haveFun: "盡情享受{name}吧!"
ifYouNeedLearnMore: "關於如何使用{name}(Misskey)的詳細資訊,請見{link}。"
skipAreYouSure: "要略過初始設定嗎?"
laterAreYouSure: "稍後再重新進行初始設定嗎?"
_serverRules:
description: "設定伺服器的簡要規則,在新的註冊之前顯示。建議的內容是使用條款的摘要。"
_accountMigration:
moveFrom: "從其他帳戶遷移到這個帳戶"
moveFromSub: "為另一個帳戶建立別名"
moveFromLabel: "要遷移過來的帳戶:"
moveFromDescription: "如果你想把追隨者從別的帳戶遷移過來,必須先在這裡建立別名。請務必在執行遷移之前建立別名!請像這樣輸入要遷移的帳戶:@person@instance.com"
moveTo: "將這個帳戶遷移至新的帳戶"
moveToLabel: "要遷移到的帳戶:"
moveCannotBeUndone: "一旦遷移帳戶,就無法取消。"
moveAccountDescription: "這個操作不可撤銷。首先,請確認已在要遷移到的帳戶中為這個帳戶建立了一個別名。建立別名之後,像這樣輸入你要遷移到的帳戶:@person@instance.com"
moveFrom: "從其他帳戶遷移到這個帳戶"
moveFromLabel: "遷移過來的帳戶:"
moveFromDescription: "如果你想把跟隨者從別的帳戶遷移過來,必須先在這裡建立別名。請務必在執行遷移之前建立別名!請像這樣輸入要遷移的帳戶:@person@instance.com"
moveAccountHowTo: "要遷移帳戶,首先要在目標帳戶中為此帳戶建立一個別名。\n 建立別名後,像這樣輸入目標帳戶:@username@server.example.com"
startMigration: "遷移"
migrationConfirm: "確定要將這個帳戶遷移至 {account} 嗎?一旦遷移就無法撤銷,也就無法以原來的狀態使用這個帳戶。\n另外請確認在要遷移到的帳戶已經建立了一個別名。"
movedAndCannotBeUndone: "帳戶已遷移。\n遷移無法撤消。"
postMigrationNote: "在遷移操作後的24小時之後解除此帳戶的追隨。此帳戶的追隨中、追隨者數量變為0。由於不會解除追隨者你的追隨者仍然可以繼續檢視這個帳戶發布給追隨者的貼文。"
movedTo: "要遷移到的帳戶:"
_achievements:
earnedAt: "獲得日期"
_types:
@@ -1118,31 +1226,31 @@ _achievements:
description: "首次追隨了"
_following10:
title: "跟著跟著"
description: "隨超過10人了"
description: "隨超過10人了"
_following50:
title: "朋友很多"
description: "隨超過50人了"
description: "隨超過50人了"
_following100:
title: "100位朋友"
description: "隨超過100人了"
description: "隨超過100人了"
_following300:
title: "朋友過多"
description: "隨超過300人了"
description: "隨超過300人了"
_followers1:
title: "第一個追隨者"
description: "第一次被追隨"
_followers10:
title: "Follow me!"
description: "隨者超過10人了"
description: "隨者超過10人了"
_followers50:
title: "成群結隊"
description: "隨者超過50人了"
description: "隨者超過50人了"
_followers100:
title: "熱門人物"
description: "隨者超過100人了"
description: "隨者超過100人了"
_followers300:
title: "請排成一排"
description: "隨者超過300人了"
description: "隨者超過300人了"
_followers500:
title: "基地台"
description: "超過500名追隨者了"
@@ -1164,7 +1272,10 @@ _achievements:
description: "發現了隱藏的寶藏"
_client30min:
title: "休息一下"
description: "戶端啟動已超過30分鐘"
description: "戶端啟動已超過30分鐘"
_client60min:
title: "Misskey看太多"
description: "客戶端啟動已超過60分鐘"
_noteDeletedWithin1min:
title: "現在沒有了"
description: "發文後1分鐘內刪文"
@@ -1253,6 +1364,8 @@ _role:
iconUrl: "圖示的URL"
asBadge: "顯示為徽章"
descriptionOfAsBadge: "開啟的話,角色圖示會顯示在用戶名旁邊。"
isExplorable: "讓使用者更容易找到您"
descriptionOfIsExplorable: "若開啟則公開角色時間軸。若角色不是公開的,則無法公開時間軸。"
displayOrder: "顯示順序"
descriptionOfDisplayOrder: "數字越大顯示在UI上的越上面。"
canEditMembersByModerator: "允許編輯審查員的成員"
@@ -1269,6 +1382,7 @@ _role:
canInvite: "發行實例邀請碼"
canManageCustomEmojis: "管理自訂表情符號"
driveCapacity: "雲端硬碟容量"
alwaysMarkNsfw: "總是將檔案標記為NSFW"
pinMax: "置頂貼文的最大數量"
antennaMax: "可建立的天線數量"
wordMuteMax: "靜音文字的最大字數"
@@ -1310,7 +1424,7 @@ _emailUnavailable:
mx: "郵件伺服器不正確"
smtp: "郵件伺服器沒有應答"
_ffVisibility:
public: "發佈"
public: "公開"
followers: "只有關注你的用戶能看到"
private: "私密"
_signup:
@@ -1328,6 +1442,7 @@ _ad:
back: "返回"
reduceFrequencyOfThisAd: "降低此廣告的頻率 "
hide: "隱藏"
timezoneinfo: "星期幾是由伺服器的時區指定的。"
_forgotPassword:
enterEmail: "請輸入您的帳戶註冊的電子郵件地址。 密碼重置連結將被發送到該電子郵件地址。"
ifNoEmail: "如果您還沒有註冊您的電子郵件地址,請聯繫管理員。 "
@@ -1379,10 +1494,10 @@ _aboutMisskey:
donate: "贊助Misskey"
morePatrons: "還有許許多多幫助我們的其他人,非常感謝你們。 🥰"
patrons: "贊助者"
_nsfw:
respect: "隱藏敏感內容"
ignore: "不隱藏敏感內容"
force: "隱藏所有內容"
_displayOfSensitiveMedia:
respect: "隱藏設定為敏感的媒體"
ignore: "不隱藏設定為敏感的媒體"
force: "隱藏所有媒體"
_instanceTicker:
none: "隱藏"
remote: "向遠端使用者顯示"
@@ -1398,9 +1513,11 @@ _channel:
removeBanner: "移除橫幅圖像"
featured: "熱門貼文"
owned: "管理中"
following: "關注中"
following: "追隨中"
usersCount: "有{n}人參與"
notesCount: "有{n}個貼文"
nameAndDescription: "名稱與說明"
nameOnly: "僅名稱"
_menuDisplay:
sideFull: "側向"
sideIcon: "側向(圖示)"
@@ -1518,32 +1635,16 @@ _time:
minute: "分鐘"
hour: "小時"
day: "日"
_tutorial:
title: "Misskey使用方法"
step1_1: "歡迎!"
step1_2: "此為「時間軸」頁面,它會按照時間順序顯示你「追隨」的人發出的「貼文」。"
step1_3: "由於你沒有發佈任何貼文,也沒有追隨任何人,所以你的時間軸目前是空的。"
step2_1: "在發文或追隨其他人之前先讓我們設定一下個人資料吧。"
step2_2: "提供一些關於自己的資訊來讓其他人更有追隨你的意願。"
step3_1: "個人資料都設定好了嗎?"
step3_2: "接下來,讓我們來試試看發個文,按一下畫面上的鉛筆圖示來開始"
step3_3: "輸入完內容後,按視窗右上角的按鈕來發文"
step3_4: "不知道該寫什麼內容嗎試試看「開始使用Misskey了」如何。"
step4_1: "貼文發出去了嗎?"
step4_2: "如果你的貼文出現在時間軸上,就代表發文成功。"
step5_1: "現在試試看追隨其他人來讓你的時間軸變得更生動吧。"
step5_2: "你會在{featured}上看到受歡迎的貼文,你也可以從列表中追隨你喜歡的人,或者在{explore}上找到熱門使用者。"
step5_3: "想要追隨其他人,只要點擊他們的大頭貼並按「追隨」即可。"
step5_4: "如果使用者的名字旁有鎖頭的圖示,代表他們需要手動核准你的追隨請求。"
step6_1: "現在你可以在時間軸上看到其他用戶的貼文。"
step6_2: "你也可以對別人的貼文作出「反應」,作出簡單的回覆。"
step6_3: "在他人的貼文按下\"+\"圖標,即可選擇喜好的表情符號進行回應。"
step7_1: "以上為Misskey的基本操作說明教學在此告一段落。辛苦了。"
step7_2: "歡迎到{help}來瞭解更多Misskey相關介紹。"
step7_3: "那麼祝您在Misskey玩的開心~ 🚀"
step8_1: "最後,要不要試試看啟用推播通知呢?"
step8_2: "透過接收推播通知即使沒有打開Misskey您也會知道反應、追隨與提及的情況。"
step8_3: "通知的設定可以在之後變更。"
_timelineTutorial:
title: "Misskey使用方法"
step1_1: "這個畫面是「時間軸」。發布到{name}的「貼文」按照時間順序顯示。"
step1_2: "時間軸有多種類型,例如在「首頁時間軸」中流動的是您追蹤的人的貼文;而在「本地時間軸」流動的是{name}全體的貼文。"
step2_1: "試試看,發布個貼文吧!按畫面上鉛筆圖示的按鈕開啟表格。"
step2_2: "初次貼文的內容,建議包括自我介紹以及「開始使用{name}」。"
step3_1: "貼文發出去了嗎?"
step3_2: "如果你的貼文出現在時間軸上,就代表發文成功。"
step4_1: "可以對貼文標記「反應」。"
step4_2: "點擊貼文的「+」圖示,即可選擇喜好的表情符號來標記反應。"
_2fa:
alreadyRegistered: "此設備已經被註冊過了"
registerTOTP: "開始設定驗證應用程式"
@@ -1686,11 +1787,11 @@ _visibility:
public: "公開"
publicDescription: "發布給所有用戶 "
home: "首頁"
homeDescription: "僅發至首頁的時間軸"
homeDescription: "僅發至首頁的時間軸"
followers: "追隨者"
followersDescription: "僅發至關注者"
followersDescription: "僅發至關注者"
specified: "指定使用者"
specifiedDescription: "僅發至指定使用者"
specifiedDescription: "僅發至指定使用者"
disableFederation: "停用聯邦"
disableFederationDescription: "不要傳遞給其他實例"
_postForm:
@@ -1881,6 +1982,7 @@ _deck:
channel: "頻道"
mentions: "提及"
direct: "指定使用者"
roleTimeline: "角色時間軸"
_dialog:
charactersExceeded: "已超過最大字數!現在 {current} / 限制 {max}"
charactersBelow: "低於最少字數!現在 {current} / 限制 {max}"

View File

@@ -1,12 +1,12 @@
{
"name": "misskey",
"version": "13.11.2",
"version": "13.14.0-beta.2",
"codename": "nasubi",
"repository": {
"type": "git",
"url": "https://github.com/misskey-dev/misskey.git"
},
"packageManager": "pnpm@8.1.1",
"packageManager": "pnpm@8.6.0",
"workspaces": [
"packages/frontend",
"packages/backend",
@@ -25,7 +25,7 @@
"migrateandstart": "pnpm migrate && pnpm start",
"gulp": "pnpm exec gulp build",
"watch": "pnpm dev",
"dev": "node ./scripts/dev.js",
"dev": "node ./scripts/dev.mjs",
"lint": "pnpm -r lint",
"cy:open": "pnpm cypress open --browser --e2e --config-file=cypress.config.ts",
"cy:run": "pnpm cypress run",
@@ -44,26 +44,26 @@
"lodash": "4.17.21"
},
"dependencies": {
"execa": "5.1.1",
"execa": "7.1.1",
"gulp": "4.0.2",
"gulp-cssnano": "2.1.3",
"gulp-rename": "2.0.0",
"gulp-replace": "1.1.4",
"gulp-terser": "2.1.0",
"js-yaml": "4.1.0",
"typescript": "5.0.3"
"typescript": "5.1.6"
},
"devDependencies": {
"@types/gulp": "4.0.10",
"@types/gulp-rename": "2.0.1",
"@typescript-eslint/eslint-plugin": "5.57.1",
"@typescript-eslint/parser": "5.57.1",
"@typescript-eslint/eslint-plugin": "5.61.0",
"@typescript-eslint/parser": "5.61.0",
"cross-env": "7.0.3",
"cypress": "12.9.0",
"eslint": "8.37.0",
"cypress": "12.17.0",
"eslint": "8.44.0",
"start-server-and-test": "2.0.0"
},
"optionalDependencies": {
"@tensorflow/tfjs-core": "4.2.0"
"@tensorflow/tfjs-core": "4.4.0"
}
}

View File

@@ -17,7 +17,7 @@
"paths": {
"@/*": ["*"]
},
"target": "es2021"
"target": "es2022"
},
"minify": false
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -0,0 +1,9 @@
export class ad1677054292210 {
name = 'ad1677054292210';
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "ad" ADD "dayOfWeek" integer NOT NULL Default 0`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "ad" DROP COLUMN "dayOfWeek"`);
}
}

View File

@@ -0,0 +1,18 @@
export class UserMemo1680702787050 {
name = 'UserMemo1680702787050'
async up(queryRunner) {
await queryRunner.query(`CREATE TABLE "user_memo" ("id" character varying(32) NOT NULL, "userId" character varying(32) NOT NULL, "targetUserId" character varying(32) NOT NULL, "memo" character varying(2048) NOT NULL, CONSTRAINT "PK_e9aaa58f7d3699a84d79078f4d9" PRIMARY KEY ("id")); COMMENT ON COLUMN "user_memo"."userId" IS 'The ID of author.'; COMMENT ON COLUMN "user_memo"."targetUserId" IS 'The ID of target user.'; COMMENT ON COLUMN "user_memo"."memo" IS 'Memo.'`);
await queryRunner.query(`CREATE INDEX "IDX_650b49c5639b5840ee6a2b8f83" ON "user_memo" ("userId") `);
await queryRunner.query(`CREATE INDEX "IDX_66ac4a82894297fd09ba61f3d3" ON "user_memo" ("targetUserId") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_faef300913c738265638ba3ebc" ON "user_memo" ("userId", "targetUserId") `);
await queryRunner.query(`ALTER TABLE "user_memo" ADD CONSTRAINT "FK_650b49c5639b5840ee6a2b8f83e" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "user_memo" ADD CONSTRAINT "FK_66ac4a82894297fd09ba61f3d35" FOREIGN KEY ("targetUserId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_memo" DROP CONSTRAINT "FK_66ac4a82894297fd09ba61f3d35"`);
await queryRunner.query(`ALTER TABLE "user_memo" DROP CONSTRAINT "FK_650b49c5639b5840ee6a2b8f83e"`);
await queryRunner.query(`DROP TABLE "user_memo"`);
}
}

View File

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

View File

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

View File

@@ -0,0 +1,13 @@
export class MovedAt1682190963894 {
name = 'MovedAt1682190963894'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "user" ADD "movedAt" TIMESTAMP WITH TIME ZONE`);
await queryRunner.query(`COMMENT ON COLUMN "user"."movedAt" IS 'When the user moved to another account'`);
}
async down(queryRunner) {
await queryRunner.query(`COMMENT ON COLUMN "user"."movedAt" IS 'When the user moved to another account'`);
await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "movedAt"`);
}
}

View File

@@ -0,0 +1,11 @@
export class PreservedUsernames1682754135458 {
name = 'PreservedUsernames1682754135458'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" ADD "preservedUsernames" character varying(1024) array NOT NULL DEFAULT '{ "admin", "administrator", "root", "system", "maintainer", "host", "mod", "moderator", "owner", "superuser", "staff", "auth", "i", "me", "everyone", "all", "mention", "mentions", "example", "user", "users", "account", "accounts", "official", "help", "helps", "support", "supports", "info", "information", "informations", "announce", "announces", "announcement", "announcements", "notice", "notification", "notifications", "dev", "developer", "developers", "tech", "misskey" }'`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "preservedUsernames"`);
}
}

View File

@@ -0,0 +1,11 @@
export class ChannelColor1682985520254 {
name = 'ChannelColor1682985520254'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "channel" ADD "color" character varying(16) NOT NULL DEFAULT '#86b300'`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "channel" DROP COLUMN "color"`);
}
}

View File

@@ -0,0 +1,13 @@
export class ChannelArchive1683328299359 {
name = 'ChannelArchive1683328299359'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "channel" ADD "isArchived" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`CREATE INDEX "IDX_cc7c72974f1b2f385a8921f094" ON "channel" ("isArchived") `);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "public"."IDX_cc7c72974f1b2f385a8921f094"`);
await queryRunner.query(`ALTER TABLE "channel" DROP COLUMN "isArchived"`);
}
}

View File

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

View File

@@ -0,0 +1,11 @@
export class PublicReactionsDefaultTrue1683683083083 {
name = 'PublicReactionsDefaultTrue1683683083083'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "publicReactions" SET DEFAULT true`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "publicReactions" SET DEFAULT false`);
}
}

View File

@@ -0,0 +1,11 @@
export class FixTypo1683789676867 {
name = 'FixTypo1683789676867'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" RENAME COLUMN "preventAiLarning" TO "preventAiLearning"`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" RENAME COLUMN "preventAiLearning" TO "preventAiLarning"`);
}
}

View File

@@ -0,0 +1,13 @@
export class UserList1683847157541 {
name = 'UserList1683847157541'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_list" ADD "isPublic" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`CREATE INDEX "IDX_48a00f08598662b9ca540521eb" ON "user_list" ("isPublic") `);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "public"."IDX_48a00f08598662b9ca540521eb"`);
await queryRunner.query(`ALTER TABLE "user_list" DROP COLUMN "isPublic"`);
}
}

View File

@@ -0,0 +1,19 @@
export class UserListFavorites1683869758873 {
name = 'UserListFavorites1683869758873'
async up(queryRunner) {
await queryRunner.query(`CREATE TABLE "user_list_favorite" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "userListId" character varying(32) NOT NULL, CONSTRAINT "PK_c0974b21e18502a4c8178e09fe6" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_016f613dc4feb807e03e3e7da9" ON "user_list_favorite" ("userId") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_d6765a8c2a4c17c33f9d7f948b" ON "user_list_favorite" ("userId", "userListId") `);
await queryRunner.query(`ALTER TABLE "user_list_favorite" ADD CONSTRAINT "FK_016f613dc4feb807e03e3e7da92" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "user_list_favorite" ADD CONSTRAINT "FK_4d52b20bfe32c8552e7a61e80d2" FOREIGN KEY ("userListId") REFERENCES "user_list"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_list_favorite" DROP CONSTRAINT "FK_4d52b20bfe32c8552e7a61e80d2"`);
await queryRunner.query(`ALTER TABLE "user_list_favorite" DROP CONSTRAINT "FK_016f613dc4feb807e03e3e7da92"`);
await queryRunner.query(`DROP INDEX "public"."IDX_d6765a8c2a4c17c33f9d7f948b"`);
await queryRunner.query(`DROP INDEX "public"."IDX_016f613dc4feb807e03e3e7da9"`);
await queryRunner.query(`DROP TABLE "user_list_favorite"`);
}
}

View File

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

View File

@@ -0,0 +1,15 @@
export class EmojiImprove1684386446061 {
name = 'EmojiImprove1684386446061'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "emoji" ADD "localOnly" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`ALTER TABLE "emoji" ADD "isSensitive" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`ALTER TABLE "emoji" ADD "roleIdsThatCanBeUsedThisEmojiAsReaction" character varying(128) array NOT NULL DEFAULT '{}'`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "emoji" DROP COLUMN "roleIdsThatCanBeUsedThisEmojiAsReaction"`);
await queryRunner.query(`ALTER TABLE "emoji" DROP COLUMN "isSensitive"`);
await queryRunner.query(`ALTER TABLE "emoji" DROP COLUMN "localOnly"`);
}
}

View File

@@ -0,0 +1,17 @@
export class ErrorImageUrl1685973839966 {
name = 'ErrorImageUrl1685973839966'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "errorImageUrl"`);
await queryRunner.query(`ALTER TABLE "meta" ADD "serverErrorImageUrl" character varying(1024)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "notFoundImageUrl" character varying(1024)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "infoImageUrl" character varying(1024)`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "infoImageUrl"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "notFoundImageUrl"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "serverErrorImageUrl"`);
await queryRunner.query(`ALTER TABLE "meta" ADD "errorImageUrl" character varying(1024) DEFAULT 'https://xn--931a.moe/aiart/yubitun.png'`);
}
}

View File

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

View File

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

View File

@@ -3,6 +3,9 @@
"main": "./index.js",
"private": true,
"type": "module",
"engines": {
"node": ">=18.16.0"
},
"scripts": {
"start": "node ./built/index.js",
"start:test": "NODE_ENV=test node ./built/index.js",
@@ -23,181 +26,194 @@
},
"optionalDependencies": {
"@swc/core-android-arm64": "1.3.11",
"@swc/core-darwin-arm64": "1.3.46",
"@swc/core-darwin-x64": "1.3.46",
"@swc/core-linux-arm-gnueabihf": "1.3.46",
"@swc/core-linux-arm64-gnu": "1.3.46",
"@swc/core-linux-arm64-musl": "1.3.46",
"@swc/core-linux-x64-gnu": "1.3.46",
"@swc/core-linux-x64-musl": "1.3.46",
"@swc/core-win32-arm64-msvc": "1.3.46",
"@swc/core-win32-ia32-msvc": "1.3.46",
"@swc/core-win32-x64-msvc": "1.3.46",
"@tensorflow/tfjs": "4.2.0",
"@tensorflow/tfjs-node": "4.2.0"
"@swc/core-darwin-arm64": "1.3.56",
"@swc/core-darwin-x64": "1.3.56",
"@swc/core-linux-arm-gnueabihf": "1.3.56",
"@swc/core-linux-arm64-gnu": "1.3.56",
"@swc/core-linux-arm64-musl": "1.3.56",
"@swc/core-linux-x64-gnu": "1.3.56",
"@swc/core-linux-x64-musl": "1.3.56",
"@swc/core-win32-arm64-msvc": "1.3.56",
"@swc/core-win32-ia32-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",
"slacc-android-arm-eabi": "0.0.9",
"slacc-android-arm64": "0.0.9",
"slacc-darwin-arm64": "0.0.9",
"slacc-darwin-universal": "0.0.9",
"slacc-darwin-x64": "0.0.9",
"slacc-freebsd-x64": "0.0.9",
"slacc-linux-arm-gnueabihf": "0.0.9",
"slacc-linux-arm64-gnu": "0.0.9",
"slacc-linux-arm64-musl": "0.0.9",
"slacc-linux-x64-gnu": "0.0.9",
"slacc-win32-arm64-msvc": "0.0.9",
"slacc-win32-x64-msvc": "0.0.9",
"utf-8-validate": "^6.0.3"
},
"dependencies": {
"@aws-sdk/client-s3": "3.306.0",
"@aws-sdk/lib-storage": "3.306.0",
"@aws-sdk/node-http-handler": "3.306.0",
"@bull-board/api": "5.0.0",
"@bull-board/fastify": "5.0.0",
"@bull-board/ui": "5.0.0",
"@aws-sdk/client-s3": "3.367.0",
"@aws-sdk/lib-storage": "3.367.0",
"@aws-sdk/node-http-handler": "3.360.0",
"@bull-board/api": "5.6.0",
"@bull-board/fastify": "5.6.0",
"@bull-board/ui": "5.6.0",
"@discordapp/twemoji": "14.1.2",
"@fastify/accepts": "4.1.0",
"@fastify/accepts": "4.2.0",
"@fastify/cookie": "8.3.0",
"@fastify/cors": "8.2.1",
"@fastify/http-proxy": "9.0.0",
"@fastify/multipart": "7.5.0",
"@fastify/static": "6.10.0",
"@fastify/view": "7.4.1",
"@nestjs/common": "9.4.0",
"@nestjs/core": "9.4.0",
"@nestjs/testing": "9.4.0",
"@fastify/cors": "8.3.0",
"@fastify/http-proxy": "9.2.1",
"@fastify/multipart": "7.7.0",
"@fastify/static": "6.10.2",
"@fastify/view": "8.0.0",
"@nestjs/common": "10.0.5",
"@nestjs/core": "10.0.5",
"@nestjs/testing": "10.0.5",
"@peertube/http-signature": "1.7.0",
"@sinonjs/fake-timers": "10.0.2",
"@sinonjs/fake-timers": "10.3.0",
"@swc/cli": "0.1.62",
"@swc/core": "1.3.46",
"@swc/core": "1.3.68",
"accepts": "1.3.8",
"ajv": "8.12.0",
"archiver": "5.3.1",
"async-mutex": "^0.4.0",
"autwh": "0.1.0",
"bcryptjs": "2.4.3",
"blurhash": "2.0.5",
"bull": "4.10.4",
"cacheable-lookup": "6.1.0",
"cbor": "8.1.0",
"bullmq": "4.2.0",
"cacheable-lookup": "7.0.0",
"cbor": "9.0.0",
"chalk": "5.2.0",
"chalk-template": "0.4.0",
"chokidar": "3.5.3",
"cli-highlight": "2.1.11",
"color-convert": "2.0.1",
"content-disposition": "0.5.4",
"date-fns": "2.29.3",
"date-fns": "2.30.0",
"deep-email-validator": "0.1.21",
"escape-regexp": "0.0.1",
"fastify": "4.15.0",
"fastify": "4.19.2",
"feed": "4.2.2",
"file-type": "18.2.1",
"file-type": "18.5.0",
"fluent-ffmpeg": "2.1.2",
"form-data": "4.0.0",
"got": "12.6.0",
"happy-dom": "8.9.0",
"got": "13.0.0",
"happy-dom": "10.0.3",
"hpagent": "1.2.0",
"ioredis": "4.28.5",
"ioredis": "5.3.2",
"ip-cidr": "3.1.0",
"is-svg": "4.3.2",
"ipaddr.js": "2.1.0",
"is-svg": "5.0.0",
"js-yaml": "4.1.0",
"jsdom": "21.1.1",
"jsdom": "22.1.0",
"json5": "2.2.3",
"jsonld": "8.1.1",
"jsrsasign": "10.7.0",
"jsonld": "8.2.0",
"jsrsasign": "10.8.6",
"meilisearch": "0.33.0",
"mfm-js": "0.23.3",
"mime-types": "2.1.35",
"misskey-js": "workspace:*",
"ms": "3.0.0-canary.1",
"nested-property": "4.0.0",
"node-fetch": "3.3.1",
"nodemailer": "6.9.1",
"nodemailer": "6.9.3",
"nsfwjs": "2.4.2",
"oauth": "0.10.0",
"os-utils": "0.0.14",
"otpauth": "9.1.1",
"otpauth": "9.1.3",
"parse5": "7.1.2",
"pg": "8.10.0",
"private-ip": "3.0.0",
"pg": "8.11.1",
"probe-image-size": "7.2.3",
"promise-limit": "2.7.0",
"pug": "3.0.2",
"punycode": "2.3.0",
"pureimage": "0.3.17",
"qrcode": "1.5.1",
"qrcode": "1.5.3",
"random-seed": "0.3.0",
"ratelimiter": "3.4.1",
"re2": "1.18.0",
"re2": "1.19.1",
"redis-lock": "0.1.4",
"reflect-metadata": "0.1.13",
"rename": "1.0.4",
"rndstr": "1.0.0",
"rss-parser": "3.12.0",
"rxjs": "7.8.0",
"rss-parser": "3.13.0",
"rxjs": "7.8.1",
"s-age": "1.1.2",
"sanitize-html": "2.10.0",
"seedrandom": "3.0.5",
"semver": "7.3.8",
"sharp": "0.32.0",
"sanitize-html": "2.11.0",
"semver": "7.5.3",
"sharp": "0.32.1",
"sharp-read-bmp": "github:misskey-dev/sharp-read-bmp",
"slacc": "0.0.9",
"strict-event-emitter-types": "2.0.0",
"stringz": "2.1.0",
"summaly": "github:misskey-dev/summaly",
"systeminformation": "5.17.12",
"systeminformation": "5.18.6",
"tinycolor2": "1.6.0",
"tmp": "0.2.1",
"tsc-alias": "1.8.5",
"tsc-alias": "1.8.7",
"tsconfig-paths": "4.2.0",
"twemoji-parser": "14.0.0",
"typeorm": "0.3.13",
"typescript": "5.0.3",
"typeorm": "0.3.17",
"typescript": "5.1.6",
"ulid": "2.3.0",
"unzipper": "0.10.11",
"unzipper": "0.10.14",
"uuid": "9.0.0",
"vary": "1.1.2",
"web-push": "3.5.0",
"websocket": "1.0.34",
"web-push": "3.6.3",
"ws": "8.13.0",
"xev": "3.0.2"
},
"devDependencies": {
"@jest/globals": "29.5.0",
"@swc/jest": "0.2.24",
"@jest/globals": "29.6.1",
"@swc/jest": "0.2.26",
"@types/accepts": "1.3.5",
"@types/archiver": "5.3.2",
"@types/bcryptjs": "2.4.2",
"@types/bull": "4.10.0",
"@types/cbor": "6.0.0",
"@types/color-convert": "2.0.0",
"@types/content-disposition": "0.5.5",
"@types/escape-regexp": "0.0.1",
"@types/fluent-ffmpeg": "2.1.21",
"@types/ioredis": "4.28.10",
"@types/jest": "29.5.0",
"@types/jest": "29.5.2",
"@types/js-yaml": "4.0.5",
"@types/jsdom": "21.1.1",
"@types/jsonld": "1.5.8",
"@types/jsonld": "1.5.9",
"@types/jsrsasign": "10.5.8",
"@types/mime-types": "2.1.1",
"@types/node": "18.15.11",
"@types/ms": "^0.7.31",
"@types/node": "20.4.0",
"@types/node-fetch": "3.0.3",
"@types/nodemailer": "6.4.7",
"@types/nodemailer": "6.4.8",
"@types/oauth": "0.9.1",
"@types/pg": "8.6.6",
"@types/pg": "8.10.2",
"@types/pug": "2.0.6",
"@types/punycode": "2.1.0",
"@types/qrcode": "1.5.0",
"@types/qrcode": "1.5.1",
"@types/random-seed": "0.3.3",
"@types/ratelimiter": "3.4.4",
"@types/redis": "4.0.11",
"@types/rename": "1.0.4",
"@types/sanitize-html": "2.9.0",
"@types/semver": "7.3.13",
"@types/sharp": "0.31.1",
"@types/semver": "7.5.0",
"@types/sharp": "0.32.0",
"@types/sinonjs__fake-timers": "8.1.2",
"@types/tinycolor2": "1.4.3",
"@types/tmp": "0.2.3",
"@types/unzipper": "0.10.5",
"@types/uuid": "9.0.1",
"@types/unzipper": "0.10.6",
"@types/uuid": "9.0.2",
"@types/vary": "1.1.0",
"@types/web-push": "3.3.2",
"@types/websocket": "1.0.5",
"@types/ws": "8.5.4",
"@typescript-eslint/eslint-plugin": "5.57.1",
"@typescript-eslint/parser": "5.57.1",
"aws-sdk-client-mock": "^2.1.1",
"@types/ws": "8.5.5",
"@typescript-eslint/eslint-plugin": "5.61.0",
"@typescript-eslint/parser": "5.61.0",
"aws-sdk-client-mock": "3.0.0",
"cross-env": "7.0.3",
"eslint": "8.37.0",
"eslint": "8.44.0",
"eslint-plugin-import": "2.27.5",
"execa": "6.1.0",
"jest": "29.5.0",
"jest-mock": "29.5.0"
"execa": "7.1.1",
"jest": "29.6.1",
"jest-mock": "29.6.1"
}
}

View File

@@ -1,9 +1,10 @@
import { setTimeout } from 'node:timers/promises';
import { Global, Inject, Module } from '@nestjs/common';
import Redis from 'ioredis';
import * as Redis from 'ioredis';
import { DataSource } from 'typeorm';
import { MeiliSearch } from 'meilisearch';
import { DI } from './di-symbols.js';
import { loadConfig } from './config.js';
import { Config, loadConfig } from './config.js';
import { createPostgresDataSource } from './postgres.js';
import { RepositoryModule } from './models/RepositoryModule.js';
import type { Provider, OnApplicationShutdown } from '@nestjs/common';
@@ -22,10 +23,25 @@ const $db: Provider = {
inject: [DI.config],
};
const $meilisearch: Provider = {
provide: DI.meilisearch,
useFactory: (config: Config) => {
if (config.meilisearch) {
return new MeiliSearch({
host: `${config.meilisearch.ssl ? 'https' : 'http' }://${config.meilisearch.host}:${config.meilisearch.port}`,
apiKey: config.meilisearch.apiKey,
});
} else {
return null;
}
},
inject: [DI.config],
};
const $redis: Provider = {
provide: DI.redis,
useFactory: (config) => {
return new Redis({
useFactory: (config: Config) => {
return new Redis.Redis({
port: config.redis.port,
host: config.redis.host,
family: config.redis.family == null ? 0 : config.redis.family,
@@ -39,8 +55,8 @@ const $redis: Provider = {
const $redisForPub: Provider = {
provide: DI.redisForPub,
useFactory: (config) => {
const redis = new Redis({
useFactory: (config: Config) => {
const redis = new Redis.Redis({
port: config.redisForPubsub.port,
host: config.redisForPubsub.host,
family: config.redisForPubsub.family == null ? 0 : config.redisForPubsub.family,
@@ -55,8 +71,8 @@ const $redisForPub: Provider = {
const $redisForSub: Provider = {
provide: DI.redisForSub,
useFactory: (config) => {
const redis = new Redis({
useFactory: (config: Config) => {
const redis = new Redis.Redis({
port: config.redisForPubsub.port,
host: config.redisForPubsub.host,
family: config.redisForPubsub.family == null ? 0 : config.redisForPubsub.family,
@@ -73,8 +89,8 @@ const $redisForSub: Provider = {
@Global()
@Module({
imports: [RepositoryModule],
providers: [$config, $db, $redis, $redisForPub, $redisForSub],
exports: [$config, $db, $redis, $redisForPub, $redisForSub, RepositoryModule],
providers: [$config, $db, $meilisearch, $redis, $redisForPub, $redisForSub],
exports: [$config, $db, $meilisearch, $redis, $redisForPub, $redisForSub, RepositoryModule],
})
export class GlobalModule implements OnApplicationShutdown {
constructor(
@@ -84,7 +100,7 @@ export class GlobalModule implements OnApplicationShutdown {
@Inject(DI.redisForSub) private redisForSub: Redis.Redis,
) {}
async onApplicationShutdown(signal: string): Promise<void> {
public async dispose(): Promise<void> {
if (process.env.NODE_ENV === 'test') {
// XXX:
// Shutting down the existing connections causes errors on Jest as
@@ -100,4 +116,8 @@ export class GlobalModule implements OnApplicationShutdown {
this.redisForSub.disconnect(),
]);
}
async onApplicationShutdown(signal: string): Promise<void> {
await this.dispose();
}
}

View File

@@ -18,10 +18,12 @@ export async function server() {
const serverService = app.get(ServerService);
await serverService.launch();
app.get(ChartManagementService).start();
app.get(JanitorService).start();
app.get(QueueStatsService).start();
app.get(ServerStatsService).start();
if (process.env.NODE_ENV !== 'test') {
app.get(ChartManagementService).start();
app.get(JanitorService).start();
app.get(QueueStatsService).start();
app.get(ServerStatsService).start();
}
return app;
}
@@ -34,4 +36,6 @@ export async function jobQueue() {
jobQueue.get(QueueProcessorService).start();
jobQueue.get(ChartManagementService).start();
return jobQueue;
}

View File

@@ -96,12 +96,6 @@ function showNodejsVersion(): void {
const nodejsLogger = bootLogger.createSubLogger('nodejs');
nodejsLogger.info(`Version ${process.version} detected.`);
const minVersion = fs.readFileSync(`${_dirname}/../../../../.node-version`, 'utf-8').trim();
if (semver.lt(process.version, minVersion)) {
nodejsLogger.error(`At least Node.js ${minVersion} required!`);
process.exit(1);
}
}
function loadConfigBoot(): Config {

View File

@@ -4,7 +4,7 @@
import * as fs from 'node:fs';
import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';
import { dirname, resolve } from 'node:path';
import * as yaml from 'js-yaml';
/**
@@ -57,13 +57,12 @@ export type Source = {
db?: number;
prefix?: string;
};
elasticsearch: {
meilisearch?: {
host: string;
port: number;
port: string;
apiKey: string;
ssl?: boolean;
user?: string;
pass?: string;
index?: string;
index: string;
};
proxy?: string;
@@ -84,8 +83,10 @@ export type Source = {
deliverJobConcurrency?: number;
inboxJobConcurrency?: number;
relashionshipJobConcurrency?: number;
deliverJobPerSec?: number;
inboxJobPerSec?: number;
relashionshipJobPerSec?: number;
deliverJobMaxAttempts?: number;
inboxJobMaxAttempts?: number;
@@ -132,16 +133,18 @@ const dir = `${_dirname}/../../../.config`;
/**
* Path of configuration file
*/
const path = process.env.NODE_ENV === 'test'
? `${dir}/test.yml`
: `${dir}/default.yml`;
const path = process.env.MISSKEY_CONFIG_YML
? resolve(dir, process.env.MISSKEY_CONFIG_YML)
: process.env.NODE_ENV === 'test'
? resolve(dir, 'test.yml')
: resolve(dir, 'default.yml');
export function loadConfig() {
const meta = JSON.parse(fs.readFileSync(`${_dirname}/../../../built/meta.json`, 'utf-8'));
const clientManifestExists = fs.existsSync(_dirname + '/../../../built/_vite_/manifest.json');
const clientManifest = clientManifestExists ?
JSON.parse(fs.readFileSync(`${_dirname}/../../../built/_vite_/manifest.json`, 'utf-8'))
: { 'src/init.ts': { file: 'src/init.ts' } };
: { 'src/_boot_.ts': { file: 'src/_boot_.ts' } };
const config = yaml.load(fs.readFileSync(path, 'utf-8')) as Source;
const mixin = {} as Mixin;
@@ -162,7 +165,7 @@ export function loadConfig() {
mixin.authUrl = `${mixin.scheme}://${mixin.host}/auth`;
mixin.driveUrl = `${mixin.scheme}://${mixin.host}/files`;
mixin.userAgent = `Misskey/${meta.version} (${config.url})`;
mixin.clientEntry = clientManifest['src/init.ts'];
mixin.clientEntry = clientManifest['src/_boot_.ts'];
mixin.clientManifestExists = clientManifestExists;
const externalMediaProxy = config.mediaProxy ?
@@ -187,6 +190,6 @@ function tryCreateUrl(url: string) {
try {
return new URL(url);
} catch (e) {
throw `url="${url}" is not a valid URL.`;
throw new Error(`url="${url}" is not a valid URL.`);
}
}

View File

@@ -56,6 +56,11 @@ export const FILE_TYPE_BROWSERSAFE = [
'audio/webm',
'audio/aac',
// see https://github.com/misskey-dev/misskey/pull/10686
'audio/flac',
'audio/wav',
// backward compatibility
'audio/x-flac',
'audio/vnd.wave',
];

View File

@@ -1,55 +1,90 @@
import { Inject, Injectable } from '@nestjs/common';
import { IsNull } from 'typeorm';
import { IsNull, In, MoreThan, Not } from 'typeorm';
import { bindThis } from '@/decorators.js';
import { DI } from '@/di-symbols.js';
import type { LocalUser } from '@/models/entities/User.js';
import { User } from '@/models/entities/User.js';
import type { FollowingsRepository, UsersRepository } from '@/models/index.js';
import type { Config } from '@/config.js';
import type { LocalUser, RemoteUser } from '@/models/entities/User.js';
import type { BlockingsRepository, FollowingsRepository, InstancesRepository, Muting, MutingsRepository, UserListJoiningsRepository, UsersRepository } from '@/models/index.js';
import type { RelationshipJobData, ThinUser } from '@/queue/types.js';
import type { User } from '@/models/entities/User.js';
import { IdService } from '@/core/IdService.js';
import { GlobalEventService } from '@/core/GlobalEventService.js';
import { UserFollowingService } from '@/core/UserFollowingService.js';
import { QueueService } from '@/core/QueueService.js';
import { RelayService } from '@/core/RelayService.js';
import { ApPersonService } from '@/core/activitypub/models/ApPersonService.js';
import { ApDeliverManagerService } from '@/core/activitypub/ApDeliverManagerService.js';
import { ApRendererService } from '@/core/activitypub/ApRendererService.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { AccountUpdateService } from '@/core/AccountUpdateService.js';
import { RelayService } from '@/core/RelayService.js';
import { CacheService } from '@/core/CacheService.js';
import { ProxyAccountService } from '@/core/ProxyAccountService.js';
import { FederatedInstanceService } from '@/core/FederatedInstanceService.js';
import { MetaService } from '@/core/MetaService.js';
import InstanceChart from '@/core/chart/charts/instance.js';
import PerUserFollowingChart from '@/core/chart/charts/per-user-following.js';
@Injectable()
export class AccountMoveService {
constructor(
@Inject(DI.config)
private config: Config,
@Inject(DI.usersRepository)
private usersRepository: UsersRepository,
@Inject(DI.followingsRepository)
private followingsRepository: FollowingsRepository,
@Inject(DI.blockingsRepository)
private blockingsRepository: BlockingsRepository,
@Inject(DI.mutingsRepository)
private mutingsRepository: MutingsRepository,
@Inject(DI.userListJoiningsRepository)
private userListJoiningsRepository: UserListJoiningsRepository,
@Inject(DI.instancesRepository)
private instancesRepository: InstancesRepository,
private userEntityService: UserEntityService,
private idService: IdService,
private apPersonService: ApPersonService,
private apRendererService: ApRendererService,
private apDeliverManagerService: ApDeliverManagerService,
private globalEventService: GlobalEventService,
private userFollowingService: UserFollowingService,
private accountUpdateService: AccountUpdateService,
private proxyAccountService: ProxyAccountService,
private perUserFollowingChart: PerUserFollowingChart,
private federatedInstanceService: FederatedInstanceService,
private instanceChart: InstanceChart,
private metaService: MetaService,
private relayService: RelayService,
private cacheService: CacheService,
private queueService: QueueService,
) {
}
/**
* Move a local account to a remote account.
* Move a local account to a new account.
*
* After delivering Move activity, its local followers unfollow the old account and then follow the new one.
*/
@bindThis
public async moveToRemote(src: LocalUser, dst: User): Promise<unknown> {
// Make sure that the destination is a remote account.
if (this.userEntityService.isLocalUser(dst)) throw new Error('move destiantion is not remote');
if (!dst.uri) throw new Error('destination uri is empty');
public async moveFromLocal(src: LocalUser, dst: LocalUser | RemoteUser): Promise<unknown> {
const srcUri = this.userEntityService.getUserUri(src);
const dstUri = this.userEntityService.getUserUri(dst);
// add movedToUri to indicate that the user has moved
const update = {} as Partial<User>;
update.alsoKnownAs = src.alsoKnownAs?.concat([dst.uri]) ?? [dst.uri];
update.movedToUri = dst.uri;
const update = {} as Partial<LocalUser>;
update.alsoKnownAs = src.alsoKnownAs?.includes(dstUri) ? src.alsoKnownAs : src.alsoKnownAs?.concat([dstUri]) ?? [dstUri];
update.movedToUri = dstUri;
update.movedAt = new Date();
await this.usersRepository.update(src.id, update);
Object.assign(src, update);
// Update cache
this.cacheService.uriPersonCache.set(srcUri, src);
const srcPerson = await this.apRendererService.renderPerson(src);
const updateAct = this.apRendererService.addContext(this.apRendererService.renderUpdate(srcPerson, src));
@@ -64,51 +99,249 @@ export class AccountMoveService {
const iObj = await this.userEntityService.pack<true, true>(src.id, src, { detail: true, includeSecrets: true });
this.globalEventService.publishMainStream(src.id, 'meUpdated', iObj);
// follow the new account and unfollow the old one
const followings = await this.followingsRepository.find({
relations: {
follower: true,
},
where: {
followeeId: src.id,
followerHost: IsNull(), // follower is local
},
// Unfollow after 24 hours
const followings = await this.followingsRepository.findBy({
followerId: src.id,
});
for (const following of followings) {
if (!following.follower) continue;
try {
await this.userFollowingService.follow(following.follower, dst);
await this.userFollowingService.unfollow(following.follower, src);
} catch {
/* empty */
}
}
this.queueService.createDelayedUnfollowJob(followings.map(following => ({
from: { id: src.id },
to: { id: following.followeeId },
})), process.env.NODE_ENV === 'test' ? 10000 : 1000 * 60 * 60 * 24);
await this.postMoveProcess(src, dst);
return iObj;
}
@bindThis
public async postMoveProcess(src: User, dst: User): Promise<void> {
// Copy blockings and mutings, and update lists
try {
await Promise.all([
this.copyBlocking(src, dst),
this.copyMutings(src, dst),
this.updateLists(src, dst),
]);
} catch {
/* skip if any error happens */
}
// follow the new account
const proxy = await this.proxyAccountService.fetch();
const followings = await this.followingsRepository.findBy({
followeeId: src.id,
followerHost: IsNull(), // follower is local
followerId: proxy ? Not(proxy.id) : undefined,
});
const followJobs = followings.map(following => ({
from: { id: following.followerId },
to: { id: dst.id },
})) as RelationshipJobData[];
// Decrease following count instead of unfollowing.
try {
await this.adjustFollowingCounts(followJobs.map(job => job.from.id), src);
} catch {
/* skip if any error happens */
}
// Should be queued because this can cause a number of follow per one move.
this.queueService.createFollowJob(followJobs);
}
@bindThis
public async copyBlocking(src: ThinUser, dst: ThinUser): Promise<void> {
// Followers shouldn't overlap with blockers, but the destination account, different from the blockee (i.e., old account), may have followed the local user before moving.
// So block the destination account here.
const srcBlockings = await this.blockingsRepository.findBy({ blockeeId: src.id });
const dstBlockings = await this.blockingsRepository.findBy({ blockeeId: dst.id });
const blockerIds = dstBlockings.map(blocking => blocking.blockerId);
// reblock the destination account
const blockJobs: RelationshipJobData[] = [];
for (const blocking of srcBlockings) {
if (blockerIds.includes(blocking.blockerId)) continue; // skip if already blocked
blockJobs.push({ from: { id: blocking.blockerId }, to: { id: dst.id } });
}
// no need to unblock the old account because it may be still functional
this.queueService.createBlockJob(blockJobs);
}
@bindThis
public async copyMutings(src: ThinUser, dst: ThinUser): Promise<void> {
// Insert new mutings with the same values except mutee
const oldMutings = await this.mutingsRepository.findBy([
{ muteeId: src.id, expiresAt: IsNull() },
{ muteeId: src.id, expiresAt: MoreThan(new Date()) },
]);
if (oldMutings.length === 0) return;
// Check if the destination account is already indefinitely muted by the muter
const existingMutingsMuterUserIds = await this.mutingsRepository.findBy(
{ muteeId: dst.id, expiresAt: IsNull() },
).then(mutings => mutings.map(muting => muting.muterId));
const newMutings: Map<string, { muterId: string; muteeId: string; createdAt: Date; expiresAt: Date | null; }> = new Map();
// 重複しないようにIDを生成
const genId = (): string => {
let id: string;
do {
id = this.idService.genId();
} while (newMutings.has(id));
return id;
};
for (const muting of oldMutings) {
if (existingMutingsMuterUserIds.includes(muting.muterId)) continue; // skip if already muted indefinitely
newMutings.set(genId(), {
...muting,
createdAt: new Date(),
muteeId: dst.id,
});
}
const arrayToInsert = Array.from(newMutings.entries()).map(entry => ({ ...entry[1], id: entry[0] }));
await this.mutingsRepository.insert(arrayToInsert);
}
/**
* Create an alias of an old remote account.
* Update lists while moving accounts.
* - No removal of the old account from the lists
* - Users number limit is not checked
*
* The user's new profile will be published to the followers.
* @param src ThinUser (old account)
* @param dst User (new account)
* @returns Promise<void>
*/
@bindThis
public async createAlias(me: LocalUser, updates: Partial<User>): Promise<unknown> {
await this.usersRepository.update(me.id, updates);
// Publish meUpdated event
const iObj = await this.userEntityService.pack<true, true>(me.id, me, {
detail: true,
includeSecrets: true,
public async updateLists(src: ThinUser, dst: User): Promise<void> {
// Return if there is no list to be updated.
const oldJoinings = await this.userListJoiningsRepository.find({
where: {
userId: src.id,
},
});
this.globalEventService.publishMainStream(me.id, 'meUpdated', iObj);
if (oldJoinings.length === 0) return;
if (me.isLocked === false) {
await this.userFollowingService.acceptAllFollowRequests(me);
const existingUserListIds = await this.userListJoiningsRepository.find({
where: {
userId: dst.id,
},
}).then(joinings => joinings.map(joining => joining.userListId));
const newJoinings: Map<string, { createdAt: Date; userId: string; userListId: string; }> = new Map();
// 重複しないようにIDを生成
const genId = (): string => {
let id: string;
do {
id = this.idService.genId();
} while (newJoinings.has(id));
return id;
};
for (const joining of oldJoinings) {
if (existingUserListIds.includes(joining.userListId)) continue; // skip if dst exists in this user's list
newJoinings.set(genId(), {
createdAt: new Date(),
userId: dst.id,
userListId: joining.userListId,
});
}
this.accountUpdateService.publishToFollowers(me.id);
const arrayToInsert = Array.from(newJoinings.entries()).map(entry => ({ ...entry[1], id: entry[0] }));
await this.userListJoiningsRepository.insert(arrayToInsert);
return iObj;
// Have the proxy account follow the new account in the same way as UserListService.push
if (this.userEntityService.isRemoteUser(dst)) {
const proxy = await this.proxyAccountService.fetch();
if (proxy) {
this.queueService.createFollowJob([{ from: { id: proxy.id }, to: { id: dst.id } }]);
}
}
}
@bindThis
private async adjustFollowingCounts(localFollowerIds: string[], oldAccount: User): Promise<void> {
if (localFollowerIds.length === 0) return;
// Set the old account's following and followers counts to 0.
await this.usersRepository.update({ id: oldAccount.id }, { followersCount: 0, followingCount: 0 });
// Decrease following counts of local followers by 1.
await this.usersRepository.decrement({ id: In(localFollowerIds) }, 'followingCount', 1);
// Decrease follower counts of local followees by 1.
const oldFollowings = await this.followingsRepository.findBy({ followerId: oldAccount.id });
if (oldFollowings.length > 0) {
await this.usersRepository.decrement({ id: In(oldFollowings.map(following => following.followeeId)) }, 'followersCount', 1);
}
// Update instance stats by decreasing remote followers count by the number of local followers who were following the old account.
if (this.userEntityService.isRemoteUser(oldAccount)) {
this.federatedInstanceService.fetch(oldAccount.host).then(async i => {
this.instancesRepository.decrement({ id: i.id }, 'followersCount', localFollowerIds.length);
if ((await this.metaService.fetch()).enableChartsForFederatedInstances) {
this.instanceChart.updateFollowers(i.host, false);
}
});
}
// FIXME: expensive?
for (const followerId of localFollowerIds) {
this.perUserFollowingChart.update({ id: followerId, host: null }, oldAccount, false);
}
}
/**
* dstユーザーのalsoKnownAsをfetchPersonしていき、本当にmovedToUrlをdstに指定するユーザーが存在するのかを調べる
*
* @param dst movedToUrlを指定するユーザー
* @param check
* @param instant checkがtrueであるユーザーが最初に見つかったら即座にreturnするかどうか
* @returns Promise<LocalUser | RemoteUser | null>
*/
@bindThis
public async validateAlsoKnownAs(
dst: LocalUser | RemoteUser,
check: (oldUser: LocalUser | RemoteUser | null, newUser: LocalUser | RemoteUser) => boolean | Promise<boolean> = () => true,
instant = false,
): Promise<LocalUser | RemoteUser | null> {
let resultUser: LocalUser | RemoteUser | null = null;
if (this.userEntityService.isRemoteUser(dst)) {
if ((new Date()).getTime() - (dst.lastFetchedAt?.getTime() ?? 0) > 10 * 1000) {
await this.apPersonService.updatePerson(dst.uri);
}
dst = await this.apPersonService.fetchPerson(dst.uri) ?? dst;
}
if (!dst.alsoKnownAs || dst.alsoKnownAs.length === 0) return null;
const dstUri = this.userEntityService.getUserUri(dst);
for (const srcUri of dst.alsoKnownAs) {
try {
let src = await this.apPersonService.fetchPerson(srcUri);
if (!src) continue; // oldAccountを探してもこのサーバーに存在しない場合はフォロー関係もないということなのでスルー
if (this.userEntityService.isRemoteUser(dst)) {
if ((new Date()).getTime() - (src.lastFetchedAt?.getTime() ?? 0) > 10 * 1000) {
await this.apPersonService.updatePerson(srcUri);
}
src = await this.apPersonService.fetchPerson(srcUri) ?? src;
}
if (src.movedToUri === dstUri) {
if (await check(resultUser, src)) {
resultUser = src;
}
if (instant && resultUser) return resultUser;
}
} catch {
/* skip if any error happens */
}
}
return resultUser;
}
}

View File

@@ -64,6 +64,7 @@ export const ACHIEVEMENT_TYPES = [
'iLoveMisskey',
'foundTreasure',
'client30min',
'client60min',
'noteDeletedWithin1min',
'postedAtLateNight',
'postedAt0min0sec',

View File

@@ -4,6 +4,7 @@ import { dirname } from 'node:path';
import { Inject, Injectable } from '@nestjs/common';
import * as nsfw from 'nsfwjs';
import si from 'systeminformation';
import { Mutex } from 'async-mutex';
import type { Config } from '@/config.js';
import { DI } from '@/di-symbols.js';
import { bindThis } from '@/decorators.js';
@@ -17,6 +18,7 @@ let isSupportedCpu: undefined | boolean = undefined;
@Injectable()
export class AiService {
private model: nsfw.NSFWJS;
private modelLoadMutex: Mutex = new Mutex();
constructor(
@Inject(DI.config)
@@ -31,16 +33,22 @@ export class AiService {
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) this.model = await nsfw.load(`file://${_dirname}/../../nsfw-model/`, { size: 299 });
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 {

View File

@@ -1,5 +1,5 @@
import { Inject, Injectable } from '@nestjs/common';
import Redis from 'ioredis';
import * as Redis from 'ioredis';
import type { Antenna } from '@/models/entities/Antenna.js';
import type { Note } from '@/models/entities/Note.js';
import type { User } from '@/models/entities/User.js';
@@ -55,11 +55,6 @@ export class AntennaService implements OnApplicationShutdown {
this.redisForSub.on('message', this.onRedisMessage);
}
@bindThis
public onApplicationShutdown(signal?: string | undefined) {
this.redisForSub.off('message', this.onRedisMessage);
}
@bindThis
private async onRedisMessage(_: string, data: string): Promise<void> {
const obj = JSON.parse(data);
@@ -91,14 +86,24 @@ export class AntennaService implements OnApplicationShutdown {
}
@bindThis
public async addNoteToAntenna(antenna: Antenna, note: Note, noteUser: { id: User['id']; }): Promise<void> {
this.redisClient.xadd(
`antennaTimeline:${antenna.id}`,
'MAXLEN', '~', '200',
'*',
'note', note.id);
this.globalEventService.publishAntennaStream(antenna.id, 'note', note);
public async addNoteToAntennas(note: Note, noteUser: { id: User['id']; username: string; host: string | null; }): Promise<void> {
const antennas = await this.getAntennas();
const antennasWithMatchResult = await Promise.all(antennas.map(antenna => this.checkHitAntenna(antenna, note, noteUser).then(hit => [antenna, hit] as const)));
const matchedAntennas = antennasWithMatchResult.filter(([, hit]) => hit).map(([antenna]) => antenna);
const redisPipeline = this.redisClient.pipeline();
for (const antenna of matchedAntennas) {
redisPipeline.xadd(
`antennaTimeline:${antenna.id}`,
'MAXLEN', '~', '200',
'*',
'note', note.id);
this.globalEventService.publishAntennaStream(antenna.id, 'note', note);
}
redisPipeline.exec();
}
// NOTE: フォローしているユーザーのノート、リストのユーザーのノート、グループのユーザーのノート指定はパフォーマンス上の理由で無効になっている
@@ -107,16 +112,16 @@ export class AntennaService implements OnApplicationShutdown {
public async checkHitAntenna(antenna: Antenna, note: (Note | Packed<'Note'>), noteUser: { id: User['id']; username: string; host: string | null; }): Promise<boolean> {
if (note.visibility === 'specified') return false;
if (note.visibility === 'followers') return false;
if (!antenna.withReplies && note.replyId != null) return false;
if (antenna.src === 'home') {
// TODO
} else if (antenna.src === 'list') {
const listUsers = (await this.userListJoiningsRepository.findBy({
userListId: antenna.userListId!,
})).map(x => x.userId);
if (!listUsers.includes(note.userId)) return false;
} else if (antenna.src === 'users') {
const accts = antenna.users.map(x => {
@@ -125,32 +130,32 @@ export class AntennaService implements OnApplicationShutdown {
});
if (!accts.includes(this.utilityService.getFullApAccount(noteUser.username, noteUser.host).toLowerCase())) return false;
}
const keywords = antenna.keywords
// Clean up
.map(xs => xs.filter(x => x !== ''))
.filter(xs => xs.length > 0);
if (keywords.length > 0) {
if (note.text == null && note.cw == null) return false;
const _text = (note.text ?? '') + '\n' + (note.cw ?? '');
const matched = keywords.some(and =>
and.every(keyword =>
antenna.caseSensitive
? _text.includes(keyword)
: _text.toLowerCase().includes(keyword.toLowerCase()),
));
if (!matched) return false;
}
const excludeKeywords = antenna.excludeKeywords
// Clean up
.map(xs => xs.filter(x => x !== ''))
.filter(xs => xs.length > 0);
if (excludeKeywords.length > 0) {
if (note.text == null && note.cw == null) return false;
@@ -162,16 +167,16 @@ export class AntennaService implements OnApplicationShutdown {
? _text.includes(keyword)
: _text.toLowerCase().includes(keyword.toLowerCase()),
));
if (matched) return false;
}
if (antenna.withFile) {
if (note.fileIds && note.fileIds.length === 0) return false;
}
// TODO: eval expression
return true;
}
@@ -183,7 +188,17 @@ export class AntennaService implements OnApplicationShutdown {
});
this.antennasFetched = true;
}
return this.antennas;
}
@bindThis
public dispose(): void {
this.redisForSub.off('message', this.onRedisMessage);
}
@bindThis
public onApplicationShutdown(signal?: string | undefined): void {
this.dispose();
}
}

View File

@@ -1,7 +1,7 @@
import { promisify } from 'node:util';
import { Inject, Injectable } from '@nestjs/common';
import redisLock from 'redis-lock';
import Redis from 'ioredis';
import * as Redis from 'ioredis';
import { DI } from '@/di-symbols.js';
import { bindThis } from '@/decorators.js';
@@ -32,11 +32,6 @@ export class AppLockService {
return this.lock(`ap-object:${uri}`, timeout);
}
@bindThis
public getFetchInstanceMetadataLock(host: string, timeout = 30 * 1000): Promise<() => void> {
return this.lock(`instance:${host}`, timeout);
}
@bindThis
public getChartInsertLock(lockKey: string, timeout = 30 * 1000): Promise<() => void> {
return this.lock(`chart-insert:${lockKey}`, timeout);

View File

@@ -1,5 +1,5 @@
import { Inject, Injectable } from '@nestjs/common';
import Redis from 'ioredis';
import * as Redis from 'ioredis';
import type { BlockingsRepository, ChannelFollowingsRepository, FollowingsRepository, MutingsRepository, RenoteMutingsRepository, UserProfile, UserProfilesRepository, UsersRepository } from '@/models/index.js';
import { MemoryKVCache, RedisKVCache } from '@/misc/cache.js';
import type { LocalUser, User } from '@/models/entities/User.js';
@@ -11,10 +11,10 @@ import type { OnApplicationShutdown } from '@nestjs/common';
@Injectable()
export class CacheService implements OnApplicationShutdown {
public userByIdCache: MemoryKVCache<User>;
public localUserByNativeTokenCache: MemoryKVCache<LocalUser | null>;
public userByIdCache: MemoryKVCache<User, User | string>;
public localUserByNativeTokenCache: MemoryKVCache<LocalUser | null, string | null>;
public localUserByIdCache: MemoryKVCache<LocalUser>;
public uriPersonCache: MemoryKVCache<User | null>;
public uriPersonCache: MemoryKVCache<User | null, string | null>;
public userProfileCache: RedisKVCache<UserProfile>;
public userMutingsCache: RedisKVCache<Set<string>>;
public userBlockingCache: RedisKVCache<Set<string>>;
@@ -55,10 +55,41 @@ export class CacheService implements OnApplicationShutdown {
) {
//this.onMessage = this.onMessage.bind(this);
this.userByIdCache = new MemoryKVCache<User>(Infinity);
this.localUserByNativeTokenCache = new MemoryKVCache<LocalUser | null>(Infinity);
this.localUserByIdCache = new MemoryKVCache<LocalUser>(Infinity);
this.uriPersonCache = new MemoryKVCache<User | null>(Infinity);
const localUserByIdCache = new MemoryKVCache<LocalUser>(1000 * 60 * 60 * 6 /* 6h */);
this.localUserByIdCache = localUserByIdCache;
// ローカルユーザーならlocalUserByIdCacheにデータを追加し、こちらにはid(文字列)だけを追加する
const userByIdCache = new MemoryKVCache<User, User | string>(1000 * 60 * 60 * 6 /* 6h */, {
toMapConverter: user => {
if (user.host === null) {
localUserByIdCache.set(user.id, user as LocalUser);
return user.id;
}
return user;
},
fromMapConverter: userOrId => typeof userOrId === 'string' ? localUserByIdCache.get(userOrId) : userOrId,
});
this.userByIdCache = userByIdCache;
this.localUserByNativeTokenCache = new MemoryKVCache<LocalUser | null, string | null>(Infinity, {
toMapConverter: user => {
if (user === null) return null;
localUserByIdCache.set(user.id, user);
return user.id;
},
fromMapConverter: id => id === null ? null : localUserByIdCache.get(id),
});
this.uriPersonCache = new MemoryKVCache<User | null, string | null>(Infinity, {
toMapConverter: user => {
if (user === null) return null;
userByIdCache.set(user.id, user);
return user.id;
},
fromMapConverter: id => id === null ? null : userByIdCache.get(id),
});
this.userProfileCache = new RedisKVCache<UserProfile>(this.redisClient, 'userProfile', {
lifetime: 1000 * 60 * 30, // 30m
@@ -131,7 +162,7 @@ export class CacheService implements OnApplicationShutdown {
const user = await this.usersRepository.findOneByOrFail({ id: body.id });
this.userByIdCache.set(user.id, user);
for (const [k, v] of this.uriPersonCache.cache.entries()) {
if (v.value?.id === user.id) {
if (v.value === user.id) {
this.uriPersonCache.set(k, user);
}
}
@@ -166,7 +197,23 @@ export class CacheService implements OnApplicationShutdown {
}
@bindThis
public onApplicationShutdown(signal?: string | undefined) {
public dispose(): void {
this.redisForSub.off('message', this.onMessage);
this.userByIdCache.dispose();
this.localUserByNativeTokenCache.dispose();
this.localUserByIdCache.dispose();
this.uriPersonCache.dispose();
this.userProfileCache.dispose();
this.userMutingsCache.dispose();
this.userBlockingCache.dispose();
this.userBlockedCache.dispose();
this.renoteMutingsCache.dispose();
this.userFollowingsCache.dispose();
this.userFollowingChannelsCache.dispose();
}
@bindThis
public onApplicationShutdown(signal?: string | undefined): void {
this.dispose();
}
}

View File

@@ -20,7 +20,7 @@ export class CaptchaService {
secret,
response,
});
const res = await this.httpRequestService.send(url, {
method: 'POST',
body: params.toString(),
@@ -28,59 +28,59 @@ export class CaptchaService {
'Content-Type': 'application/x-www-form-urlencoded',
},
}, { throwErrorWhenResponseNotOk: false });
if (!res.ok) {
throw `${res.status}`;
throw new Error(`${res.status}`);
}
return await res.json() as CaptchaResponse;
}
}
@bindThis
public async verifyRecaptcha(secret: string, response: string | null | undefined): Promise<void> {
if (response == null) {
throw 'recaptcha-failed: no response provided';
throw new Error('recaptcha-failed: no response provided');
}
const result = await this.getCaptchaResponse('https://www.recaptcha.net/recaptcha/api/siteverify', secret, response).catch(err => {
throw `recaptcha-request-failed: ${err}`;
throw new Error(`recaptcha-request-failed: ${err}`);
});
if (result.success !== true) {
const errorCodes = result['error-codes'] ? result['error-codes'].join(', ') : '';
throw `recaptcha-failed: ${errorCodes}`;
throw new Error(`recaptcha-failed: ${errorCodes}`);
}
}
@bindThis
public async verifyHcaptcha(secret: string, response: string | null | undefined): Promise<void> {
if (response == null) {
throw 'hcaptcha-failed: no response provided';
throw new Error('hcaptcha-failed: no response provided');
}
const result = await this.getCaptchaResponse('https://hcaptcha.com/siteverify', secret, response).catch(err => {
throw `hcaptcha-request-failed: ${err}`;
throw new Error(`hcaptcha-request-failed: ${err}`);
});
if (result.success !== true) {
const errorCodes = result['error-codes'] ? result['error-codes'].join(', ') : '';
throw `hcaptcha-failed: ${errorCodes}`;
throw new Error(`hcaptcha-failed: ${errorCodes}`);
}
}
@bindThis
public async verifyTurnstile(secret: string, response: string | null | undefined): Promise<void> {
if (response == null) {
throw 'turnstile-failed: no response provided';
throw new Error('turnstile-failed: no response provided');
}
const result = await this.getCaptchaResponse('https://challenges.cloudflare.com/turnstile/v0/siteverify', secret, response).catch(err => {
throw `turnstile-request-failed: ${err}`;
throw new Error(`turnstile-request-failed: ${err}`);
});
if (result.success !== true) {
const errorCodes = result['error-codes'] ? result['error-codes'].join(', ') : '';
throw `turnstile-failed: ${errorCodes}`;
throw new Error(`turnstile-failed: ${errorCodes}`);
}
}
}

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