Merge branch 'develop' of https://codeberg.org/calckey/calckey into keyboard-accessability

This commit is contained in:
Freeplay 2023-04-28 19:06:21 -04:00
commit 61d7cb173a
913 changed files with 90422 additions and 56056 deletions

View file

@ -62,6 +62,16 @@ redis:
#prefix: example-prefix
#db: 1
# ┌─────────────────────┐
#───┘ Sonic configuration └─────────────────────────────────────
#sonic:
# host: localhost
# port: 1491
# auth: SecretPassword
# collection: notes
# bucket: default
# ┌─────────────────────────────┐
#───┘ Elasticsearch configuration └─────────────────────────────
@ -96,6 +106,17 @@ id: 'aid'
# Max note length, should be < 8000.
#maxNoteLength: 3000
# Maximum lenght of an image caption or file comment (default 1500, max 8192)
#maxCaptionLength: 1500
# Reserved usernames that only the administrator can register with
reservedUsernames:
- root
- admin
- administrator
- me
- system
# Whether disable HSTS
#disableHsts: true
@ -126,6 +147,7 @@ id: 'aid'
#proxy: http://127.0.0.1:3128
#proxyBypassHosts: [
# 'web.kaiteki.app',
# 'example.com',
# '192.0.2.8'
#]

1
.gitignore vendored
View file

@ -44,6 +44,7 @@ ormconfig.json
packages/backend/assets/instance.css
packages/backend/assets/sounds/None.mp3
!packages/backend/src/db
# blender backups
*.blend1

1
.npmrc Normal file
View file

@ -0,0 +1 @@
use-lockfile-v6=true

View file

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

3
.weblate Normal file
View file

@ -0,0 +1,3 @@
[weblate]
url = https://hosted.weblate.org/api/
translation = calckey/locales

View file

@ -18,4 +18,4 @@ services:
image: redis
branches:
include: [ main, develop, feature/* ]
include: [ main, beta, develop, feature/* ]

View file

@ -3,27 +3,24 @@
## Planned
- Stucture
- [Sonic](https://crates.io/crates/sonic-server) support as an ElasticSearch alternative
- [DragonflyDB](https://dragonflydb.io/) support as a Redis alternative
- Optionally use [ScyllaDB](https://www.scylladb.com/open-source-nosql-database/) for storing notes
- Rewrite backend in Rust and [Axum](https://github.com/tokio-rs/axum)
- Rewrite backend in Rust and [Rocket](https://rocket.rs/)
- Use [Magic RegExP](https://regexp.dev/) for RegEx 🦄
- Function
- Federate with note edits
- Admin customizable max note length (100-8000)
- User "choices" (recommended users) like Mastodon and Soapbox
- Join Reason system like Mastodon/Pleroma
- Option to publicize instance blocks
- Backfill remote users
- Build flag to remove NSFW/AI stuff
- Timeline filters
- Filter notifications by user
- Non-nyaify cat mode
- Exclude self from antenna
- Form
- MFM button
- Personal notes for all accounts
- Fully revamp non-logged-in screen
- Classic mode make instance icon bring up new context menu
- Lookup/details for post/file/instance
- [Rat mode?](https://stop.voring.me/notes/933fx97bmd)
## Work in progress
@ -37,6 +34,7 @@
- Admin custom CSS
- Add back time machine (jump to date)
- Improve accesibility
- Timeline filters
## Implemented
@ -108,6 +106,22 @@
- Allows custom emoji
- Fix lint errors
- Use Rome instead of ESLint
- Mastodon API support
- More antenna options
- New dashboard
- Backfill follower counts
- Improved emoji licensing
- This feature was ported from Misskey.
- https://github.com/misskey-dev/misskey/commit/8ae9d2eaa8b0842671558370f787902e94b7f5a3: enhance: カスタム絵文字にライセンス情報を付与できるように
- https://github.com/misskey-dev/misskey/commit/ed51209172441927d24339f0759a5badbee3c9b6: 絵文字のライセンスを表示できるように
- Compile time compression
- Sonic search
- Popular color schemes, including Nord, Gruvbox, and Catppuccin
- Non-nyaify cat mode
## Implemented (remote)
- MissV: [fix Misskey Forkbomb](https://code.vtopia.live/Vtopia/MissV/commit/40b23c070bd4adbb3188c73546c6c625138fb3c1)
- [Make showing ads optional](https://github.com/misskey-dev/misskey/pull/8996)
- [Tapping avatar in mobile opens account modal](https://github.com/misskey-dev/misskey/pull/9056)
@ -121,32 +135,32 @@
- [Add additional background for acrylic popups if backdrop-filter is unsupported](https://github.com/misskey-dev/misskey/pull/8671)
- [Add parameters to MFM rotate](https://github.com/misskey-dev/misskey/pull/8549)
- Many changes from [Foundkey](https://akkoma.dev/FoundKeyGang/Foundkey)
- 0ece67b04c3f0365057624c1068808276ccab981: refactor pages/auth.form.vue to composition API
- 0ece67b04c3f0365057624c1068808276ccab981: refactor pages/auth.form.vue to composition API
- 4bc9610d8bf5af736b5e89e4782395705de45d7d: remove unnecessary joins
- 9ee609d70082f7a6dc119a5d83c0e7c5e1208676: enhance privacy of notes
- 0fec6e10477b1c1b95d9469fbaf4e249a3722f12: remove ms dependency
- 46fff77accbe8bf0fd3cc88170d67b997bf2bdc3: client uses new API for child notes depth
- c35372a20d22cddb75e93a0b407f2b652cd7faf0: pack children without detail
- aca724e0bfff3e58b4d273f3ee744e3f3aa9c39b: enable to fetch replies recursively
- 2fe64c11502fd8d89c126558cd715e095c83754e: Refactor components/page/page.textarea.vue to composition API
- 6d3181f9835955e5b79bde5484c74bd70e7f9535: Refactor components/page/page.text.vue to composition API
- b630cd7eacd695bb705e6748c87f38425ec4ed45: refactor: add NoteReactions.packMany
- 3fe351df6d4e21f7748c46adfa6ca165abd030c0: fix: catch errors from packing with detail
- 63591da33e233b2ed0ab331ae6bb3c9eff5020ae: refactor: colours in queue chart
- 0f6d94f1e7e1f58cfbf8d07e5f835f8de626842e: backend: improve mutes and blocks
- e2bf2715a6462ed377b033956d65260157f042ea: fix spelling error
- 09a7eabda137e77f81ab31f65d69329670693c8d: backend: fix lint "no-throw-literal"
- 4fbe2e065e75ed3e5b4dfdfd4be3baa03cc447c3: client: fix lint "quotes"
- 585e4f5c42cfafb6cdf7eb601ab435d6a4d85a96: fix textarea not updating properly
- 30d8bc9259cb6b72ed76d67b21dbb4cdceca8327: refactor: welcome.setup.vue to composition api
- 751921e24f37ed707fe44a40d88eebb1299efa35: make emoji picker case insensitive
- 298febeb9c9501e3e3df16982c08657d1da474e0: enhance: add re-collapsing to quoted notes
- b0fdedb264db87575063abed45e52ad71ce4a6af: fix lints in folder.vue
- 6fed87f85d132304eb84b0a59b84dce299a1822f: fix pagination.vue lints
- Tosti's security fixes
- 384e8c49b738f576ba8843296de6cebf01c1b247: server: allow to like own gallery posts
- 4c5aa9e53887cca5561fcec6ab0754e018f589a5: server: allow to like own pages
- 923c93da1228458dd65be47483c198a1a9191bcf: use await for notes.countBy
- ca90cedba0a0704b503c2778694230f5a7dfbace: server: reduce dead instance detection to 7 days
- e9ab42c10afb4e27516c2d2b5e3e06630efe9edd: Alt text in image viewer
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/0ece67b04c3f0365057624c1068808276ccab981: refactor pages/auth.form.vue to composition API
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/4bc9610d8bf5af736b5e89e4782395705de45d7d: remove unnecessary joins
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/9ee609d70082f7a6dc119a5d83c0e7c5e1208676: enhance privacy of notes
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/0fec6e10477b1c1b95d9469fbaf4e249a3722f12: remove ms dependency
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/46fff77accbe8bf0fd3cc88170d67b997bf2bdc3: client uses new API for child notes depth
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/c35372a20d22cddb75e93a0b407f2b652cd7faf0: pack children without detail
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/aca724e0bfff3e58b4d273f3ee744e3f3aa9c39b: enable to fetch replies recursively
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/2fe64c11502fd8d89c126558cd715e095c83754e: Refactor components/page/page.textarea.vue to composition API
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/6d3181f9835955e5b79bde5484c74bd70e7f9535: Refactor components/page/page.text.vue to composition API
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/b630cd7eacd695bb705e6748c87f38425ec4ed45: refactor: add NoteReactions.packMany
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/3fe351df6d4e21f7748c46adfa6ca165abd030c0: fix: catch errors from packing with detail
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/63591da33e233b2ed0ab331ae6bb3c9eff5020ae: refactor: colours in queue chart
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/0f6d94f1e7e1f58cfbf8d07e5f835f8de626842e: backend: improve mutes and blocks
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/e2bf2715a6462ed377b033956d65260157f042ea: fix spelling error
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/09a7eabda137e77f81ab31f65d69329670693c8d: backend: fix lint "no-throw-literal"
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/4fbe2e065e75ed3e5b4dfdfd4be3baa03cc447c3: client: fix lint "quotes"
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/585e4f5c42cfafb6cdf7eb601ab435d6a4d85a96: fix textarea not updating properly
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/30d8bc9259cb6b72ed76d67b21dbb4cdceca8327: refactor: welcome.setup.vue to composition api
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/751921e24f37ed707fe44a40d88eebb1299efa35: make emoji picker case insensitive
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/298febeb9c9501e3e3df16982c08657d1da474e0: enhance: add re-collapsing to quoted notes
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/b0fdedb264db87575063abed45e52ad71ce4a6af: fix lints in folder.vue
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/6fed87f85d132304eb84b0a59b84dce299a1822f: fix pagination.vue lints
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/384e8c49b738f576ba8843296de6cebf01c1b247: server: allow to like own gallery posts
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/4c5aa9e53887cca5561fcec6ab0754e018f589a5: server: allow to like own pages
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/923c93da1228458dd65be47483c198a1a9191bcf: use await for notes.countBy
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/ca90cedba0a0704b503c2778694230f5a7dfbace: server: reduce dead instance detection to 7 days
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/e9ab42c10afb4e27516c2d2b5e3e06630efe9edd: Alt text in image viewer
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/ed9d4023d41bba7c4ac53a1a3422246feed37de2: add argon2 support
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/c414f24a2c123774246c7eca65edda4d3afaf8b3: feat: per-user renote muting

View file

@ -48,8 +48,8 @@ Thank you for your PR! Before creating a PR, please check the following:
- If there is an Issue which will be resolved by this PR, please include a reference to the Issue in the text. Good examples include `Closing: #21` or `Resolves: #21`
- Check if there are any documents that need to be created or updated due to this change.
- If you have added a feature or fixed a bug, please add a test case if possible.
- Please make sure that tests and Lint are passed in advance.
- You can run it with `pnpm run test` and `pnpm run lint`. [See more info](#testing)
- Please make sure that formatting, tests and Lint are passed in advance.
- You can run it with `pnpm run format`, `pnpm run test` and `pnpm run lint`. [See more info](#testing)
- If this PR includes UI changes, please attach a screenshot in the text.
Thanks for your cooperation 🤗

View file

@ -3,13 +3,17 @@ FROM node:19-alpine as build
WORKDIR /calckey
# Install compilation dependencies
RUN apk add --no-cache --no-progress git alpine-sdk python3
RUN apk add --no-cache --no-progress git alpine-sdk python3 rust cargo vips
# Copy only the dependency-related files first, to cache efficiently
COPY package.json pnpm*.yaml ./
COPY packages/backend/package.json packages/backend/package.json
COPY packages/client/package.json packages/client/package.json
COPY packages/sw/package.json packages/sw/package.json
COPY packages/calckey-js/package.json packages/calckey-js/package.json
COPY packages/backend/native-utils/package.json packages/backend/native-utils/package.json
COPY packages/backend/native-utils/npm/linux-x64-musl/package.json packages/backend/native-utils/npm/linux-x64-musl/package.json
COPY packages/backend/native-utils/npm/linux-arm64-musl/package.json packages/backend/native-utils/npm/linux-arm64-musl/package.json
# Configure corepack and pnpm
RUN corepack enable
@ -31,7 +35,7 @@ FROM node:19-alpine
WORKDIR /calckey
# Install runtime dependencies
RUN apk add --no-cache --no-progress tini ffmpeg
RUN apk add --no-cache --no-progress tini ffmpeg vips-dev
COPY . ./
@ -40,11 +44,14 @@ COPY --from=build /calckey/node_modules /calckey/node_modules
COPY --from=build /calckey/packages/backend/node_modules /calckey/packages/backend/node_modules
COPY --from=build /calckey/packages/sw/node_modules /calckey/packages/sw/node_modules
COPY --from=build /calckey/packages/client/node_modules /calckey/packages/client/node_modules
COPY --from=build /calckey/packages/calckey-js/node_modules /calckey/packages/calckey-js/node_modules
# Copy the finished compiled files
COPY --from=build /calckey/built /calckey/built
COPY --from=build /calckey/packages/backend/built /calckey/packages/backend/built
COPY --from=build /calckey/packages/backend/assets/instance.css /calckey/packages/backend/assets/instance.css
COPY --from=build /calckey/packages/backend/native-utils/built /calckey/packages/backend/native-utils/built
COPY --from=build /calckey/packages/backend/native-utils/target /calckey/packages/backend/native-utils/target
RUN corepack enable
ENTRYPOINT [ "/sbin/tini", "--" ]

View file

@ -34,6 +34,9 @@
- OCR image captioning
- New and improved Groups
- Better intro tutorial
- Compatibility with Mastodon clients/apps
- Backfill user information
- Sonic search
- Many more user and admin settings
- [So much more!](./CALCKEY.md)
@ -66,7 +69,7 @@ If you have access to a server that supports one of the sources below, I recomme
### 🐋 Docker
[How to run Calckey with Docker](./docker-README.md).
[How to run Calckey with Docker](./docs/docker.md).
## 🧑‍💻 Dependencies
@ -78,8 +81,9 @@ If you have access to a server that supports one of the sources below, I recomme
### 😗 Optional dependencies
- [FFmpeg](https://ffmpeg.org/) for video transcoding
- [ElasticSearch](https://www.elastic.co/elasticsearch/) for full-text search
- OpenSearch/Sonic are not supported as of right now
- Full text search (choost one of the following)
- 🦔 [Sonic](https://crates.io/crates/sonic-server) (highly recommended!)
- [ElasticSearch](https://www.elastic.co/elasticsearch/)
- Management (choose one of the following)
- 🛰️ [pm2](https://pm2.io/)
- 🐳 [Docker](https://docker.com)
@ -87,6 +91,7 @@ If you have access to a server that supports one of the sources below, I recomme
### 🏗️ Build dependencies
- 🦀 [Rust toolchain](https://www.rust-lang.org/)
- 🦬 C/C++ compiler & build tools
- `build-essential` on Debian/Ubuntu Linux
- `base-devel` on Arch Linux
@ -119,6 +124,17 @@ Assuming you set up PostgreSQL correctly, all you have to run is:
psql postgres -c "create database calckey with encoding = 'UTF8';"
```
In Calckey's directory, fill out the `db` section of `.config/default.yml` with the correct information, where the `db` key is `calckey`.
## 🦔 Set up search
Follow sonic's [installation guide](https://github.com/valeriansaliou/sonic#installation)
If you use IPv4: in Sonic's directory, edit the `config.cfg` file to change `inet` to `"0.0.0.0:1491"`.
In Calckey's directory, fill out the `sonic` section of `.config/default.yml` with the correct information.
## 💅 Customize
- To add custom CSS for all users, edit `./custom/assets/instance.css`.
@ -136,12 +152,7 @@ psql postgres -c "create database calckey with encoding = 'UTF8';"
## 🚚 Migrating from Misskey to Calckey
> ⚠️ Because of their changes, migrating from Foundkey is not supported.
```sh
cp ../misskey/.config/default.yml ./.config/default.yml # replace `../misskey/` with misskey path, add `docker.env` if you use Docker
cp -r ../misskey/files .
```
For migrating from Misskey v13, Misskey v12, and Foundkey, read [this document](./docs/migrate.md).
## 🍀 NGINX
@ -160,7 +171,8 @@ cp -r ../misskey/files .
```sh
# git pull
NODE_ENV=production pnpm install && pnpm run build && pnpm run migrate
pnpm install
NODE_ENV=production pnpm run build && pnpm run migrate
pm2 start "NODE_ENV=production pnpm run start" --name Calckey
```

BIN
custom/assets/sounds/None.mp3 (Stored with Git LFS)

Binary file not shown.

View file

@ -8,7 +8,7 @@ services:
depends_on:
- db
- redis
# - es
- sonic
ports:
- "3000:3000"
networks:
@ -40,16 +40,14 @@ services:
volumes:
- ./db:/var/lib/postgresql/data
# es:
# restart: unless-stopped
# image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.4.2
# environment:
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
# - "TAKE_FILE_OWNERSHIP=111"
# networks:
# - calcnet
# volumes:
# - ./elasticsearch:/usr/share/elasticsearch/data
sonic:
restart: unless-stopped
image: docker.io/valeriansaliou/sonic:v1.4.0
networks:
- calcnet
volumes:
- ./sonic:/var/lib/sonic/store
- ./sonic/config.cfg:/etc/sonic.cfg
networks:
calcnet:

View file

@ -14,7 +14,7 @@ There is a `docker-compose.yml` in the root of the project that you can use to b
Rename the files:
`cp .config/default_example.yml .config/default.yml`
`cp .config/example.yml .config/default.yml`
`cp .config/example.env .config/docker.env`
@ -23,6 +23,7 @@ You can configure `docker.env` with anything you like, but you will have to pay
- `url` should be set to the URL you will be hosting the web interface for the instance at.
- `host`, `db`, `user`, `pass` will have to be configured in the `PostgreSQL configuration` section - `host` is the name of the postgres container (eg: *calckey_db_1*), and the others should match your `docker.env`.
- `host`will need to be configured in the *Redis configuration* section - it is the name of the redis container (eg: *calckey_redis_1*)
- `auth` will need to be configured in the *Sonic* section - cannot be the default `SecretPassword`
Everything else can be left as-is.

82
docs/migrate.md Normal file
View file

@ -0,0 +1,82 @@
# 🚚 Migrating from Misskey to Calckey
## Misskey v13 and above
```sh
wget -O mkv13.patch https://codeberg.org/calckey/calckey/raw/branch/develop/docs/mkv13.patch
git apply mkv13.patch
cd packages/backend
LINE_NUM="$(npx typeorm migration:show -d ormconfig.js | grep -n activeEmailValidation1657346559800 | cut -d ':' -f 1)"
NUM_MIGRATIONS="$(npx typeorm migration:show -d ormconfig.js | tail -n+"$LINE_NUM" | grep '\[X\]' | nl)"
for i in $(seq 1 $NUM_MIGRAIONS); do
npx typeorm migration:revert -d ormconfig.js
done
git remote set-url origin https://codeberg.org/calckey/calckey.git
git fetch
git checkout main # or beta or develop
git pull --ff
NODE_ENV=production pnpm run migrate
# build using prefered method
```
Depending on the version you're migrating from, you may have to open Postgres with `psql -d your_database` and run the following commands:
```sql
ALTER TABLE "meta" ADD COLUMN "disableLocalTimeline" boolean DEFAULT false;
ALTER TABLE "meta" ADD COLUMN "disableGlobalTimeline" boolean DEFAULT false;
ALTER TABLE "meta" ADD COLUMN "localDriveCapacityMb" integer DEFAULT 512;
ALTER TABLE "meta" ADD COLUMN "remoteDriveCapacityMb" integer DEFAULT 128;
ALTER TABLE "user" ADD COLUMN "isSilenced" boolean DEFAULT false;
ALTER TABLE "user" ADD COLUMN "isAdmin" boolean DEFAULT false;
ALTER TABLE "user" ADD COLUMN "isModerator" boolean DEFAULT false;
ALTER TABLE "user" ADD COLUMN "remoteDriveCapacityMb" integer DEFAULT 128;
ALTER TABLE "user" ADD COLUMN "driveCapacityOverrideMb" integer DEFAULT 128;
ALTER TABLE "instance" ADD COLUMN "caughtAt" date;
ALTER TABLE "instance" ADD COLUMN "latestRequestSentAt" date;
ALTER TABLE "instance" ADD COLUMN "latestStatus" character varying(512);
ALTER TABLE "instance" ADD COLUMN "lastCommunicatedAt" date;
```
then quit with `\q`, and restart Calckey.
## Misskey v12.119 and before
```sh
git remote set-url origin https://codeberg.org/calckey/calckey.git
git fetch
git checkout main # or beta or develop
git pull --ff
NODE_ENV=production pnpm run migrate
# build using prefered method
```
## Foundkey
```sh
cd packages/backend
LINE_NUM="$(npx typeorm migration:show -d ormconfig.js | grep -n uniformThemecolor1652859567549 | cut -d ':' -f 1)"
NUM_MIGRATIONS="$(npx typeorm migration:show -d ormconfig.js | tail -n+"$LINE_NUM" | grep '\[X\]' | nl)"
for i in $(seq 1 $NUM_MIGRAIONS); do
npx typeorm migration:revert -d ormconfig.js
done
git remote set-url origin https://codeberg.org/calckey/calckey.git
git fetch
git checkout main # or beta or develop
git pull --ff
NODE_ENV=production pnpm run migrate
# build using prefered method
```
## Reverse
You ***cannot*** migrate back to Misskey from Calckey due to re-hashing passwords on signin with argon2. You can migrate from Calckey to Foundkey, though.

45
docs/mkv13.patch Normal file
View file

@ -0,0 +1,45 @@
diff --git a/packages/backend/migration/1672704017999-remove-lastCommunicatedAt.js b/packages/backend/migration/1672704017999-remove-lastCommunicatedAt.js
index 38a676985..c4ae690e0 100644
--- a/packages/backend/migration/1672704017999-remove-lastCommunicatedAt.js
+++ b/packages/backend/migration/1672704017999-remove-lastCommunicatedAt.js
@@ -6,6 +6,8 @@ export class removeLastCommunicatedAt1672704017999 {
}
async down(queryRunner) {
- await queryRunner.query(`ALTER TABLE "instance" ADD "lastCommunicatedAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+ await queryRunner.query(`ALTER TABLE "instance" ADD "lastCommunicatedAt" TIMESTAMP WITH TIME ZONE`);
+ await queryRunner.query(`UPDATE "instance" SET "lastCommunicatedAt" = COALESCE("infoUpdatedAt", "caughtAt")`);
+ await queryRunner.query(`ALTER TABLE "instance" ALTER COLUMN "lastCommunicatedAt" SET NOT NULL`);
}
}
diff --git a/packages/backend/migration/1673336077243-PollChoiceLength.js b/packages/backend/migration/1673336077243-PollChoiceLength.js
index 810c626e0..5809528cb 100644
--- a/packages/backend/migration/1673336077243-PollChoiceLength.js
+++ b/packages/backend/migration/1673336077243-PollChoiceLength.js
@@ -6,6 +6,6 @@ export class PollChoiceLength1673336077243 {
}
async down(queryRunner) {
- await queryRunner.query(`ALTER TABLE "poll" ALTER COLUMN "choices" TYPE character varying(128) array`);
+ //await queryRunner.query(`ALTER TABLE "poll" ALTER COLUMN "choices" TYPE character varying(128) array`);
}
}
diff --git a/packages/backend/migration/1674118260469-achievement.js b/packages/backend/migration/1674118260469-achievement.js
index 131ab96f8..57a922f83 100644
--- a/packages/backend/migration/1674118260469-achievement.js
+++ b/packages/backend/migration/1674118260469-achievement.js
@@ -18,12 +18,13 @@ export class achievement1674118260469 {
async down(queryRunner) {
await queryRunner.query(`CREATE TYPE "public"."user_profile_mutingnotificationtypes_enum_old" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app', 'pollEnded')`);
+ await queryRunner.query(`CREATE TYPE "public"."notification_type_enum_old" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app')`);
await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "mutingNotificationTypes" DROP DEFAULT`);
await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "mutingNotificationTypes" TYPE "public"."user_profile_mutingnotificationtypes_enum_old"[] USING "mutingNotificationTypes"::"text"::"public"."user_profile_mutingnotificationtypes_enum_old"[]`);
await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "mutingNotificationTypes" SET DEFAULT '{}'`);
await queryRunner.query(`DROP TYPE "public"."user_profile_mutingnotificationtypes_enum"`);
await queryRunner.query(`ALTER TYPE "public"."user_profile_mutingnotificationtypes_enum_old" RENAME TO "user_profile_mutingnotificationtypes_enum"`);
- await queryRunner.query(`CREATE TYPE "public"."notification_type_enum_old" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app')`);
+ await queryRunner.query(`DELETE FROM "public"."notification" WHERE "type" = 'achievementEarned'`);
await queryRunner.query(`ALTER TABLE "notification" ALTER COLUMN "type" TYPE "public"."notification_type_enum_old" USING "type"::"text"::"public"."notification_type_enum_old"`);
await queryRunner.query(`DROP TYPE "public"."notification_type_enum"`);
await queryRunner.query(`ALTER TYPE "public"."notification_type_enum_old" RENAME TO "notification_type_enum"`);

View file

@ -24,10 +24,6 @@ gulp.task('copy:client:fonts', () =>
gulp.src('./packages/client/node_modules/three/examples/fonts/**/*').pipe(gulp.dest('./built/_client_dist_/fonts/'))
);
gulp.task('copy:client:phosphor', () =>
gulp.src('./node_modules/phosphor-icons/src/fonts/*').pipe(gulp.dest('./built/_client_dist_/phosphor/'))
);
gulp.task('copy:client:locales', cb => {
fs.mkdirSync('./built/_client_dist_/locales', { recursive: true });
@ -59,7 +55,7 @@ gulp.task('build:backend:style', () => {
});
gulp.task('build', gulp.parallel(
'copy:client:locales', 'copy:backend:views', 'copy:backend:custom', 'build:backend:script', 'build:backend:style', 'copy:client:fonts', 'copy:client:phosphor'
'copy:client:locales', 'copy:backend:views', 'copy:backend:custom', 'build:backend:script', 'build:backend:style', 'copy:client:fonts'
));
gulp.task('default', gulp.task('build'));

View file

@ -1027,27 +1027,6 @@ _time:
minute: "د"
hour: "سا"
day: "ي"
_tutorial:
title: "How to use Calckey"
step1_1: "Welcome!"
step1_2: "Let's get you set up. You'll be up and running in no time!"
step2_1: "First, please fill out your profile."
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: "Now time to follow some people!"
step3_2: "Your home and social timelines are based off of who you follow, so try following a couple accounts to get started.\nClick the plus circle on the top right of a profile to follow them."
step4_1: "Let's get you out there."
step4_2: "For your first post, some people like to made a {introduction} post or a simple \"Hello world!\""
step5_1: "Timelines, timelines everywhere!"
step5_2: "Your instance has {timelines} different timelines enabled."
step5_3: "The Home {icon} timeline is where you can see posts from your followers."
step5_4: "The Local {icon} timeline is where you can see posts from everyone else on this instance."
step5_5: "The Recommended {icon} timeline is where you can see posts from instances the admins recommend."
step5_6: "The Social {icon} timeline is where you can see posts from friends of your followers."
step5_7: "The Global {icon} timeline is where you can see posts from every other connected instance."
step6_1: "So, what is this place?"
step6_2: "Well, you didn't just join Calckey. You joined a portal to the Fediverse, an interconnected network of thousands of servers, called \"instances\"."
step6_3: "Each server works in different ways, and not all servers run Calckey. This one does though! It's a bit complicated, but you'll get the hang of it in no time."
step6_4: "Now go, explore, and have fun!"
_2fa:
alreadyRegistered: "سجلت سلفًا جهازًا للاستيثاق بعاملين."
registerDevice: "سجّل جهازًا جديدًا"

View file

@ -1108,27 +1108,6 @@ _time:
minute: "মিনিট"
hour: "ঘণ্টা"
day: "দিন"
_tutorial:
title: "How to use Calckey"
step1_1: "Welcome!"
step1_2: "Let's get you set up. You'll be up and running in no time!"
step2_1: "First, please fill out your profile."
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: "Now time to follow some people!"
step3_2: "Your home and social timelines are based off of who you follow, so try following a couple accounts to get started.\nClick the plus circle on the top right of a profile to follow them."
step4_1: "Let's get you out there."
step4_2: "For your first post, some people like to made a {introduction} post or a simple \"Hello world!\""
step5_1: "Timelines, timelines everywhere!"
step5_2: "Your instance has {timelines} different timelines enabled."
step5_3: "The Home {icon} timeline is where you can see posts from your followers."
step5_4: "The Local {icon} timeline is where you can see posts from everyone else on this instance."
step5_5: "The Recommended {icon} timeline is where you can see posts from instances the admins recommend."
step5_6: "The Social {icon} timeline is where you can see posts from friends of your followers."
step5_7: "The Global {icon} timeline is where you can see posts from every other connected instance."
step6_1: "So, what is this place?"
step6_2: "Well, you didn't just join Calckey. You joined a portal to the Fediverse, an interconnected network of thousands of servers, called \"instances\"."
step6_3: "Each server works in different ways, and not all servers run Calckey. This one does though! It's a bit complicated, but you'll get the hang of it in no time."
step6_4: "Now go, explore, and have fun!"
_2fa:
alreadyRegistered: "আপনি ইতিমধ্যে একটি 2-ফ্যাক্টর অথেনটিকেশন ডিভাইস নিবন্ধন করেছেন৷"
registerDevice: "নতুন ডিভাইস নিবন্ধন করুন"

View file

@ -1,7 +1,8 @@
---
_lang_: "Català"
headlineMisskey: "Una xarxa connectada per notes"
introMisskey: "Benvingut! Misskey és un servei de microblogging descentralitzat de codi obert.\nCrea \"notes\" per compartir els teus pensaments amb tots els que t'envolten. 📡\nAmb \"reaccions\", també pots expressar ràpidament els teus sentiments sobre les notes de tothom. 👍\nExplorem un món nou! 🚀"
headlineMisskey: "Una xarxa social de codi obert, descentralitzada i gratuita per\
\ sempre \U0001F680"
introMisskey: "Benvinguts! Calckey es una plataforma social de codi obert, descentralitzada\
\ i gratuita per sempre! \U0001F680"
monthAndDay: "{day}/{month}"
search: "Cercar"
notifications: "Notificacions"
@ -13,43 +14,44 @@ ok: "OK"
gotIt: "Ho he entès!"
cancel: "Cancel·lar"
enterUsername: "Introdueix el teu nom d'usuari"
renotedBy: "Resignat per {usuari}"
noNotes: "Cap nota"
renotedBy: "Resignat per {user}"
noNotes: "Cap publicació"
noNotifications: "Cap notificació"
instance: "Instàncies"
instance: "Instància"
settings: "Preferències"
basicSettings: "Configuració bàsica"
otherSettings: "Configuració avançada"
openInWindow: "Obrir en una nova finestra"
otherSettings: "Altres opcions"
openInWindow: "Obrir en una finestra nova"
profile: "Perfil"
timeline: "Línia de temps"
noAccountDescription: "Aquest usuari encara no ha escrit la seva biografia."
login: "Iniciar sessió"
loggingIn: "Identificant-se"
logout: "Tancar la sessió"
loggingIn: "Iniciant sessió"
logout: "Tancar sessió"
signup: "Registrar-se"
uploading: "Pujant..."
save: "Desar"
users: "Usuaris"
addUser: "Afegir un usuari"
favorite: "Afegir a preferits"
favorite: "Afegir a favorits"
favorites: "Favorits"
unfavorite: "Eliminar dels preferits"
favorited: "Afegit als preferits."
alreadyFavorited: "Ja s'ha afegit als preferits."
cantFavorite: "No s'ha pogut afegir als preferits."
unfavorite: "Eliminar de favorits"
favorited: "Afegit a favorits."
alreadyFavorited: "Ja s'ha afegit a favorits."
cantFavorite: "No s'ha pogut afegir a favorits."
pin: "Fixar al perfil"
unpin: "Para de fixar del perfil"
copyContent: "Copiar el contingut"
copyLink: "Copiar l'enllaç"
delete: "Eliminar"
deleteAndEdit: "Esborrar i editar"
deleteAndEditConfirm: "Estàs segur que vols suprimir aquesta nota i editar-la? Perdràs totes les reaccions, notes i respostes."
addToList: "Afegir a una llista"
unpin: "Deixar de fixar al perfil"
copyContent: "Còpia el contingut"
copyLink: "Còpia l'enllaç"
delete: "Esborra"
deleteAndEdit: "Esborrar i edita"
deleteAndEditConfirm: "Estàs segur que vols esborrar aquesta nota i editar-la? Perdràs\
\ totes les reaccions, resignats i respostes."
addToList: "Afegir a la llista"
sendMessage: "Enviar un missatge"
copyUsername: "Copiar nom d'usuari"
searchUser: "Cercar usuaris"
reply: "Respondre"
copyUsername: "Còpia nom d'usuari"
searchUser: "Cercar un usuari"
reply: "Respon"
loadMore: "Carregar més"
showMore: "Veure més"
youGotNewFollower: "t'ha seguit"
@ -57,20 +59,22 @@ receiveFollowRequest: "Sol·licitud de seguiment rebuda"
followRequestAccepted: "Sol·licitud de seguiment acceptada"
mention: "Menció"
mentions: "Mencions"
directNotes: "Notes directes"
importAndExport: "Importar / Exportar"
directNotes: "Missatges directes"
importAndExport: "Importar / Exportar Dades"
import: "Importar"
export: "Exportar"
files: "Fitxers"
download: "Baixar"
driveFileDeleteConfirm: "Estàs segur que vols suprimir el fitxer \"{name}\"? Les notes associades a aquest fitxer adjunt també se suprimiran."
download: "Descarregar"
driveFileDeleteConfirm: "Estàs segur que vols suprimir el fitxer \"{name}\"? Les publicacions\
\ associades a aquest fitxer adjunt també es suprimiran."
unfollowConfirm: "Estàs segur que vols deixar de seguir {name}?"
exportRequested: "Has sol·licitat una exportació. Això pot trigar una estona. S'afegirà a la teva unitat un cop completat."
exportRequested: "Has sol·licitat una exportació. Això pot trigar una estona. S'afegirà\
\ al teu Disc un cop completada."
importRequested: "Has sol·licitat una importació. Això pot trigar una estona."
lists: "Llistes"
noLists: "No tens cap llista"
note: "Nota"
notes: "Notes"
note: "Publicació"
notes: "Publicacions"
following: "Seguint"
followers: "Seguidors"
followsYou: "Et segueix"
@ -79,10 +83,13 @@ manageLists: "Gestionar les llistes"
error: "Error"
somethingHappened: "S'ha produït un error"
retry: "Torna-ho a intentar"
pageLoadError: "S'ha produït un error en carregar la pàgina"
pageLoadErrorDescription: "Això normalment es deu a errors de xarxa o a la memòria cau del navegador. Prova d'esborrar la memòria cau i torna-ho a provar després d'esperar una estona."
pageLoadError: "Alguna cosa a sortit malament al carregar la pàgina."
pageLoadErrorDescription: "Això normalment es deu a errors de xarxa o a la memòria\
\ cau del navegador. Prova d'esborrar la memòria cau i torna-ho a provar després\
\ d'esperar una estona."
serverIsDead: "Aquest servidor no respon. Espera una estona i torna-ho a provar."
youShouldUpgradeClient: "Per veure aquesta pàgina, actualitzeu-la per actualitzar el vostre client."
youShouldUpgradeClient: "Per veure aquesta pàgina, actualitzeu-la per actualitzar\
\ el vostre client."
enterListName: "Introdueix un nom per a la llista"
privacy: "Privadesa"
makeFollowManuallyApprove: "Les sol·licituds de seguiment requereixen aprovació"
@ -93,13 +100,13 @@ followRequests: "Sol·licituds de seguiment"
unfollow: "Deixar de seguir"
followRequestPending: "Sol·licituds de seguiment pendents"
enterEmoji: "Introduir un emoji"
renote: "Renotar"
unrenote: "Anul·lar renota"
renoted: "Renotat."
cantRenote: "Aquesta publicació no pot ser renotada."
cantReRenote: "Impossible renotar una renota."
renote: "Impulsà"
unrenote: "Anul·lar impuls"
renoted: "Impulsat."
cantRenote: "Aquesta publicació no pot ser impulsada."
cantReRenote: "No es pot impulsar un impuls."
quote: "Citar"
pinnedNote: "Nota fixada"
pinnedNote: "Publicació fixada"
pinned: "Fixar al perfil"
you: "Tu"
clickToShow: "Fes clic per mostrar"
@ -107,8 +114,9 @@ sensitive: "NSFW"
add: "Afegir"
reaction: "Reaccions"
reactionSetting: "Reaccions a mostrar al selector de reaccions"
reactionSettingDescription2: "Arrossega per reordenar, fes clic per suprimir, prem \"+\" per afegir."
rememberNoteVisibility: "Recorda la configuració de visibilitat de les notes"
reactionSettingDescription2: "Arrossega per reordenar, fes clic per suprimir, prem\
\ \"+\" per afegir."
rememberNoteVisibility: "Recorda la configuració de visibilitat de les publicacions"
attachCancel: "Eliminar el fitxer adjunt"
markAsSensitive: "Marcar com a NSFW"
unmarkAsSensitive: "Deixar de marcar com a sensible"
@ -122,7 +130,7 @@ unsuspend: "Deixa de suspendre"
instances: "Instàncies"
remove: "Eliminar"
nsfw: "NSFW"
pinnedNotes: "Nota fixada"
pinnedNotes: "Publicació fixada"
userList: "Llistes"
smtpUser: "Nom d'usuari"
smtpPass: "Contrasenya"
@ -139,9 +147,9 @@ _mfm:
_theme:
keys:
mention: "Menció"
renote: "Renotar"
renote: "Impulsar"
_sfx:
note: "Notes"
note: "Posts"
notification: "Notificacions"
_2fa:
step2Url: "També pots inserir aquest enllaç i utilitzes una aplicació d'escriptori:"
@ -183,15 +191,487 @@ _notification:
_types:
follow: "Seguint"
mention: "Menció"
renote: "Renotar"
renote: "Impulsos"
quote: "Citar"
reaction: "Reaccions"
_actions:
reply: "Respondre"
renote: "Renotar"
renote: "Impulsos"
_deck:
_columns:
notifications: "Notificacions"
tl: "Línia de temps"
list: "Llistes"
mentions: "Mencions"
blockConfirm: Estás segur que vols bloquejar aquest compte?
unsuspendConfirm: Estás segur que vols treure la suspensió d'aquesta compte?
unblockConfirm: Estás segur que vols treure el bloqueig d'aquesta compte?
suspendConfirm: Estás segur que vols suspendre aquesta compte?
selectList: Selecciona una llista
selectAntenna: Selecciona una antena
selectWidget: Selecciona un giny
editWidgets: Edita ginys
editWidgetsExit: Fet
customEmojis: Emoji personalitzat
cacheRemoteFilesDescription: Quant aquesta opció es deshabilitada, els fitxers remots
es carregant directament de l'instància remota. Deshabilitar això farà que baixi
l'ús d'emmagatzematge, però incrementa el tràfic, perquè les previsualitzacions
no es generarán.
flagAsBot: Marca aquest compte com un bot
flagAsBotDescription: Activa aquesta opció si aquest compte és controlat per un programa.
Si s'activa, això actuarà com una bandera per a altres desenvolupadors i prevenir
cadenes de interaccions infinites amb altres bots a més d'ajustar els sistemes interns
de Calckey per tractar aquest compte com un bot.
flagAsCat: Ets un gat? 🐱
flagShowTimelineReplies: Mostrar respostes a la línea de temps
flagAsCatDescription: Guanyaràs unes orelles de gat i parlares com un gat!
flagShowTimelineRepliesDescription: Mostrará respostes d'usuaris a notes d'altres
usuaris si s'activa.
general: General
autoAcceptFollowed: Aprova automàticament les peticions de seguiment d'usuaris que
segueixes
accountMoved: "L'usuari s'ha mogut a un compte nou:"
addAccount: Afegir compte
loginFailed: No s'ha pogut iniciar sessió
showOnRemote: Veure a l'instància remota
wallpaper: Fons de pantalla
setWallpaper: Estableix fons de pantalla
removeWallpaper: Esborra fons de pantalla
followConfirm: Segur que vols seguir a l'usuari {name}?
proxyAccount: Compte proxy
proxyAccountDescription: Un compte proxy es un compte que actua com un seguidor remot
per a usuaris sota determinades condicions. Per exemple, quant un usuari afegeix
un usuari remot a la llista, l'activitat de l'usuari remot no serà entregada a l'instància
si cap usuari local el segueix, així el compte proxy el seguirà.
host: Amfitrió
selectUser: Selecciona un usuari
latestStatus: Últim estat
storageUsage: Ús del emmagatzematge
metadata: Metadata
withNFiles: '{n} fitxer(s)'
monitor: Seguiment
software: Programari
version: Versió
jobQueue: Cua de Feina
cpuAndMemory: CPU i Memòria
network: Xarxa
disk: Disc
instanceInfo: Informació de l'instància
statistics: Estadístiques
clearCachedFiles: Neteja memòria cau
clearQueueConfirmText: Qualsevol nota que continuï a la cua sense entrega no será
federada. Normalment aquesta operació no es necessària.
clearCachedFilesConfirm: Segur que vols esborrar els fitxers remots de la memòria
cau?
blockedUsers: Usuaris blocats
noUsers: No hi han usuaris
editProfile: Editar perfil
noteDeleteConfirm: Segur que vols esborrar aquesta nota?
pinLimitExceeded: No pots fixar més notes
muteAndBlock: Silenciats i Bloquejats
mutedUsers: Usuaris silenciats
done: Fet
preview: Vista prèvia
default: Per defecte
intro: La instalació de Calckey a acabat! Si us plau crea un compte d'usuari.
processing: Processant...
noCustomEmojis: No hi ha emoji
noJobs: No hi han feines
federating: Federant
blocked: Bloquejat
subscribing: Subscrivint
publishing: Publicant
notResponding: Sense resposta
instanceUsers: Usuaris d'aquesta instància
instanceFollowing: Seguint a l'instància
instanceFollowers: Seguidors de l'instància
security: Seguretat
newPasswordRetype: Torna a entrar la nova contrasenya
more: Més!
featured: Destacat
usernameOrUserId: Nom d'usuari o id d'usuari
noSuchUser: No s'ha trobat l'usuari
lookup: Cercar
attachFile: Afegeix un arxiu
currentPassword: Contrasenya actual
newPassword: Nova contrasenya
announcements: Anuncis
imageUrl: URL de la imatge
removed: S'ha esborrat correctament
removeAreYouSure: Segur que vols esborrar "{x}"?
deleteAreYouSure: Segur que vols esborrar "{x}"?
resetAreYouSure: Restablir? Segur?
fromUrl: Des de URL
saved: Desat
messaging: Xat
upload: Pujar
keepOriginalUploading: Desa imatge original
keepOriginalUploadingDescription: Desa la imatge original pujada tal com es. Si es
desactiva, es generarà una versió per mostrar en la web al pujar.
fromDrive: Des de Drive
uploadFromUrl: Puja des de una adreça URL
uploadFromUrlDescription: Adreça URL del fitxer que vols pujar
uploadFromUrlRequested: Pujada demanada
noMoreHistory: S'ha acabat la historia
tos: Termes d'us
start: Començar
startMessaging: Comença un nou xat
manageGroups: Gestiona els grups
nUsersRead: llegit per {n}
agreeTo: Estic d'acord amb {0}
activity: Activitat
home: Inici
remoteUserCaution: L'informació d'usuaris remots pot estar incompleta.
themeForDarkMode: En Mode Fosc fes servir el tema
light: Clar
registeredDate: Data de registre
dark: Fosc
lightThemes: Temes clars
location: Lloc
theme: Temes
themeForLightMode: En Mode Clar fes servir el tema
drive: Disc
selectFile: Tria un fitxer
selectFiles: Tria fitxers
darkThemes: Temes foscos
syncDeviceDarkMode: Sincronitza el Mode Fosc amb la configuració del teu dispositiu
fileName: Nom del fitxer
createFolder: Crea una carpeta
renameFolder: Posa un nom nou a aquesta carpeta
deleteFolder: Esborra aquesta carpeta
selectFolder: Tria una carpeta
selectFolders: Tria carpetes
renameFile: Canvia el nom del fitxer
folderName: Nom de la carpeta
inputNewFolderName: Escriu un nou nom per la carpeta
addFile: Afegeix un fitxer
emptyDrive: El teu Disc és buit
emptyFolder: Aquesta carpeta és buida
unableToDelete: No es pot esborrar
inputNewFileName: Escriu un nou nom per al fitxer
inputNewDescription: Escriu una nova descripció
circularReferenceFolder: La carpeta de destí es una subcarpeta de la carpeta que vols
moure.
hasChildFilesOrFolders: Degut a que aquesta carpeta no es buida, no es pot esborrar.
whenServerDisconnected: Quant es perd la conexió amb el servidor
disconnectedFromServer: S'ha perdut la conexió al servidor
reload: Torna a carregar
avatar: Avatar
banner: Banner
doNothing: Ignora
reloadConfirm: Vols tornar a carregar la línea temporal?
watch: Veure
maintainerName: Administrador
maintainerEmail: Correu electrònic de l'administrador
instanceName: Nom de l'instància
instanceDescription: Descripció de l'instància
today: Avui
dayX: '{day}'
tosUrl: Adreça URL dels terminis d'ús
thisYear: Any
thisMonth: Mes
integration: Integracions
driveCapacityPerRemoteAccount: Capacitat del Disc per usuari remot
inMb: En megabytes
iconUrl: Adreça URL de la icona
enableRegistration: Activa el registre d'usuaris nous
invite: Convidar
driveCapacityPerLocalAccount: Capacitat del Disc per usuari local
bannerUrl: Adreça URL del banner
backgroundImageUrl: Adreça URL del fons de pantalla
basicInfo: Informació bàsica
pinnedPages: Pàgines fixades
pinnedUsersDescription: Llista de noms d'usuaris per fixar a la pestanya "Explorar"
Un nom per línea.
pinnedPagesDescription: Introdueix la ruta a les pàgines que vols fixar a la página
principal d'aquesta instància, una ruta per línea.
pinnedUsers: Usuaris fixats
enableHcaptcha: Activa hCaptcha
hcaptchaSiteKey: Clau del lloc
hcaptchaSecretKey: Clau secreta
recaptcha: reCAPTCHA
enableGlobalTimeline: Activa la línea de temps global
disablingTimelinesInfo: Els Administradors i Moderadors sempre tenen accés a totes
les líneas temporals, inclòs si hi són desactivades.
showLess: Tanca
clearQueue: Neteja cua
uploadFromUrlMayTakeTime: Pot trigar un temps fins que la pujada es completi.
noThankYou: No, gràcies
addInstance: Afegeix una instància
emoji: Emoji
emojis: Emoji
emojiName: Nom del emoji
emojiUrl: URL del emoji
addEmoji: Afegir
settingGuide: Configuració recomenada
searchWith: 'Buscar: {q}'
youHaveNoLists: No tens cap llista
flagSpeakAsCat: Parla com un gat
selectInstance: Selecciona una instància
flagSpeakAsCatDescription: Les teves notes es transformaran en miols quant estiguis
en mode gat
recipient: Destinatari(s)
annotation: Comentaris
blockedInstances: Instàncies Bloquejades
blockedInstancesDescription: Llista les adreces de les instàncies que vols bloquejar.
Les instàncies de la llista no podrán comunicarse amb aquesta instància.
hiddenTags: Etiquetes Ocultes
hiddenTagsDescription: 'Llista de les etiquetes (sense el #) que vulguis amagar de
les tendències i el explorador. Les etiquetes amagades es poden descobrir per altres
mitjans.'
noInstances: No hi han instàncies
defaultValueIs: 'Per defecte: {value}'
suspended: Suspès
all: Tot
changePassword: Canvia la contrasenya
clearQueueConfirmTitle: Segur que vols netejar la cua?
retypedNotMatch: Els camps no coincideixen.
normal: Normal
monthX: '{month}'
enableRecaptcha: Activa reCAPTCHA
recaptchaSiteKey: Clau del lloc
recaptchaSecretKey: Clau secreta
avoidMultiCaptchaConfirm: Fent servir diferents sistemes de Captcha pot causar interferències
entre ells. Vols desactivar els altres sistemes que es troben activats? Si vols
deixar-los activats fes clic a cancelar.
antennas: Antenes
enableEmojiReactions: Activa reaccions amb emojis
blockThisInstance: Bloqueja aquesta instància
registration: Registre
showEmojisInReactionNotifications: Mostra els emojis a les notificacions de les reaccions
renoteMute: Silencia les renotas
renoteUnmute: Treu el silenci a les renotas
cacheRemoteFiles: Fitxers remots a la memoria cau
federation: Federació
registeredAt: Registrat a
latestRequestSentAt: Última petició enviada
latestRequestReceivedAt: Última petició rebuda
charts: Gràfics
perHour: Per Hora
perDay: Per Dia
stopActivityDelivery: Para d'enviar activitats
operations: Operacions
explore: Explorar
messageRead: Llegir
images: Imatges
birthday: Aniversari
yearsOld: '{age} anys'
copyUrl: Copiar l'adreça URL
rename: Renombrar
unwatch: Deixa de veure
accept: Acceptar
reject: Rebutja
yearX: '{year}'
pages: Pàgines
disconnectService: Desconnectar
connectService: Connectar
enableLocalTimeline: Activa la línea de temps local
enableRecommendedTimeline: Activa la línea de temps de recomanats
pinnedClipId: ID del clip que vols fixar
hcaptcha: hCaptcha
manageAntennas: Gestiona les Antenes
name: Nom
notesAndReplies: Articles i respostes
silence: Posa en silenci
withFiles: Amb fitxers
popularUsers: Usuaris populars
exploreUsersCount: Hi han {count} usuaris
exploreFediverse: Explora el Fesiverse
popularTags: Etiquetes populars
about: Sobre
recentlyUpdatedUsers: Usuaris actius fa poc
recentlyRegisteredUsers: Usuaris registrats fa poc
recentlyDiscoveredUsers: Nous suaris descoberts
administrator: Administrador
token: Token
registerSecurityKey: Registra una clau de seguretat
securityKeyName: Nom clau
lastUsed: Feta servir per última vegada
unregister: Anul·lar el registre
passwordLessLogin: Identificació sense contrasenya
share: Comparteix
notFound: No s'ha trobat
newPasswordIs: La nova contrasenya és "{password}"
notFoundDescription: No es pot trobar cap pàgina que correspongui a aquesta adreça
URL.
uploadFolder: Carpeta per defecte per pujar arxius
cacheClear: Netejar la memòria cau
markAsReadAllNotifications: Marca totes les notificacions com llegides
markAsReadAllUnreadNotes: Marca totes les publicacions com a llegides
markAsReadAllTalkMessages: Marca tots els missatges com llegits
help: Ajuda
inputMessageHere: Escriu aquí el missatge
close: Tancar
group: Grup
groups: Grups
createGroup: Crea un grup
ownedGroups: Grups que et pertanyen
joinedGroups: Grups als que t'has unit
groupName: Nom del grup
members: Membres
transfer: Transferir
messagingWithUser: Conversa privada
title: Títol
text: Text
enable: Activar
next: Següent
retype: Torna a entrar
noteOf: Publicat per {user}
inviteToGroup: Invitar a un grup
quoteAttached: Cita
quoteQuestion: Adjuntar com a cita?
noMessagesYet: Encara no hi han missatges
signinRequired: Si us plau registrat o inicia sessió per continuar
invitations: Invitacions
invitationCode: Codi d'invitació
checking: Comprovant...
usernameInvalidFormat: Pots fer servir lletres en majúscules o minúscules, nombres
i guions baixos.
tooShort: Massa curt
tooLong: Massa llarg
weakPassword: Contrasenya amb seguretat feble
strongPassword: Contrasenya amb seguretat forta
passwordMatched: Coincidències
signinWith: Inicieu sessió com {x}
signinFailed: No es pot iniciar sessió. El nom d'usuari o la contrasenya són incorrectes.
or: O
language: Idioma
uiLanguage: Idioma de la interfície d'usuari
groupInvited: T'han invitat a un grup
aboutX: Sobre {x}
youHaveNoGroups: No tens grups
disableDrawer: No facis servir els menús amb estil de calaix
noHistory: No ha historial disponible
signinHistory: Historial d'inicis de sessió
disableAnimatedMfm: Desactiva les animacions amb MFM
doing: Processant...
category: Categoría
existingAccount: El compte ja existeix
regenerate: Regenerar
docSource: Font d'aquest document
createAccount: Crear compte
fontSize: Mida del text
noFollowRequests: No tens cap sol·licitud de seguiment per aprovar
openImageInNewTab: Obre les imatges en una pestanya nova
dashboard: Panell
local: Local
remote: Remot
total: Total
weekOverWeekChanges: Canvis d'ençà la passada setmana
dayOverDayChanges: Canvis d'ençà ahir
appearance: Aparença
clientSettings: Configuració del client
accountSettings: Configuració del compte
promotion: Promogut
promote: Promoure
numberOfDays: Nombre de dies
objectStorageBaseUrl: Adreça URL base
hideThisNote: Amaga aquest article
showFeaturedNotesInTimeline: Mostra els articles destacats a la línea de temps
objectStorage: Emmagatzematge d'objectes
useObjectStorage: Fes servir l'emmagatzema d'objectes
expandTweet: Amplia el tuit
themeEditor: Editor de temes
description: Descripció
leaveConfirm: Hi han canvis que no s'han desat. Els vols descartar?
manage: Administració
plugins: Afegits
preferencesBackups: Preferències de còpies de seguretat
undeck: Treure el Deck
useBlurEffectForModal: Fes servir efectes de difuminació en les finestres modals
useFullReactionPicker: Fes servir el selector de reaccions a tamany complert
deck: Deck
width: Amplada
generateAccessToken: Genera un token d'accés
medium: Mitja
small: Petit
permission: Permisos
enableAll: Activa tots
tokenRequested: Garantir accés al compte
pluginTokenRequestedDescription: Aquest afegit podrà fer servir els permisos configurats
aquí.
emailServer: Servidor de correu electrònic
notificationType: Tipus de notificació
edit: Editar
emailAddress: Adreça de Correu electrònic
smtpConfig: Configuració del servidor SMTP
smtpHost: Host
enableEmail: Activa la distribució de correu electrònic
smtpPort: Port
emailConfigInfo: Fet servir per confirmar les adreçats de correu electrònic al registrar-se
o si s'oblida la contrasenya
email: Correu electrònic
smtpSecure: Fes servir SSL/TLS implícit per connectar-se per SMTP
emptyToDisableSmtpAuth: Deixa el nom d'usuari i la contrasenya sense emplenar per
desactivar la verificació SMTP
smtpSecureInfo: Desactiva això quant facis servir STARTTLS
testEmail: Envia un correu electrònic de verificació
wordMute: Silenciar paraules
regexpError: Error a la Expressió Regular
regexpErrorDescription: 'Hi ha un error a la expressió regular a la línea {line} de
la teva {tab} de paraules silenciades:'
userSaysSomething: '{name} va dir alguna cosa'
instanceMute: Silenciar instàncies
logs: Registres
copy: Copiar
delayed: Retardat
metrics: Mètriques
overview: Vista general
database: Base de dades
regenerateLoginToken: Regenera el token d'inici de sessió
reduceUiAnimation: Redueix les animacions de la UI
messagingWithGroup: Conversa en grup
invites: Invitacions
unavailable: No disponible
newMessageExists: Tens nous missatges
onlyOneFileCanBeAttached: Només pots adjuntar un fitxer per missatge
normalPassword: Contrasenya amb seguretat mitjana
passwordNotMatched: No hi han coincidències
useOsNativeEmojis: Fes servir els emojis per defecte del Sistema Operatiu
joinOrCreateGroup: Fes que et convidin a un grup o crea el teu propi.
objectStorageBaseUrlDesc: "Es l'adreça URL que serveix com a referència. Específica\
\ la adreça URL del CDN o Proxy si fas servir.\nPer fer servir S3 'https://<bucket>.s3.amazonaws.com'\
\ i per GCS o serveis semblants 'https://storage.googleapis.com/<bucket>', etc."
height: Alçada
large: Gran
notificationSetting: Preferències de notificacions
makeActive: Activar
notificationSettingDesc: Tria el tipus de notificació que es veure.
notifyAntenna: Notificar noves articles
withFileAntenna: Només articles amb fitxers
enableServiceworker: Activa les notificacions push per al teu navegador
antennaUsersDescription: Escriu un nom d'usuari per línea
antennaInstancesDescription: Escriu la adreça d'una instància per línea
tags: Etiquetes
antennaSource: Font de la antena
antennaKeywords: Paraules claus a escolta
antennaExcludeKeywords: Paraules clau a excluir
antennaKeywordsDescription: Separades amb espais per fer una condició AND i amb una
línea nova per fer una condició OR.
caseSensitive: Sensible a majúscules i minúscules
withReplies: Inclou respostes
connectedTo: Aquest(s) compte(s) estan connectats
silenceConfirm: Segur que vols posa en silenci aquest usuari?
unsilence: Desfés posar en silenci
unsilenceConfirm: Segur que vols treure el silenci a aquest usuari?
aboutMisskey: Sobre Calckey
twoStepAuthentication: Autentificació de dos factors
moderator: Moderador
moderation: Moderació
available: Disponible
tapSecurityKey: Escriu la teva clau de seguretat
nUsersMentioned: Esmentat per {n} usuari(s)
securityKey: Clau de seguretat
resetPassword: Restablir contrasenya
describeFile: Afegeix un subtítol
enterFileDescription: Entra un subtítol
author: Autor
disableAll: Desactiva tots
userSaysSomethingReason: '{name} va dir {reason}'
display: Visualització
channel: Canals
create: Crear
useGlobalSetting: Fes servir els ajustos globals
useGlobalSettingDesc: Si s'activa, es faran servir els ajustos de notificacions del
teu compte. Si es desactiva , es poden fer configuracions individuals.
other: Altres

View file

@ -1,7 +1,10 @@
---
_lang_: "Deutsch"
headlineMisskey: "Ein durch Posts verbundenes Netzwerk"
introMisskey: "Willkommen! Calckey ist eine dezentralisierte Open-Source Microblogging-Platform.\nVerfasse „Posts“ um mitzuteilen, was gerade passiert oder um Ereignisse mit anderen zu teilen. 📡\nMit „Reaktionen“ kannst du außerdem schnell deine Gefühle über Posts anderer Benutzer zum Ausdruck bringen. 👍\nEine neue Welt wartet auf dich! 🚀"
introMisskey: "Willkommen! Calckey ist eine dezentralisierte Open-Source Microblogging-Platform.\n\
Verfasse „Posts“ um mitzuteilen, was gerade passiert oder um Ereignisse mit anderen\
\ zu teilen. \U0001F4E1\nMit „Reaktionen“ kannst du außerdem schnell deine Gefühle\
\ über Posts anderer Benutzer zum Ausdruck bringen. \U0001F44D\nEine neue Welt wartet\
\ auf dich! \U0001F680"
monthAndDay: "{day}.{month}."
search: "Suchen"
notifications: "Benachrichtigungen"
@ -44,7 +47,8 @@ copyContent: "Inhalt kopieren"
copyLink: "Link kopieren"
delete: "Löschen"
deleteAndEdit: "Löschen und Bearbeiten"
deleteAndEditConfirm: "Möchtest du diese Notiz wirklich löschen und bearbeiten? Alle Reaktionen, Renotes und Antworten dieser Notiz werden verloren gehen."
deleteAndEditConfirm: "Möchtest du diese Notiz wirklich löschen und bearbeiten? Alle\
\ Reaktionen, Renotes und Antworten dieser Notiz werden verloren gehen."
addToList: "Zu Liste hinzufügen"
sendMessage: "Nachricht senden"
copyUsername: "Benutzernamen kopieren"
@ -64,10 +68,13 @@ import: "Import"
export: "Export"
files: "Dateien"
download: "Herunterladen"
driveFileDeleteConfirm: "Möchtest du die Datei „{name}“ wirklich löschen? Notizen mit dieser Datei werden ebenso verschwinden."
driveFileDeleteConfirm: "Möchtest du die Datei „{name}“ wirklich löschen? Notizen\
\ mit dieser Datei werden ebenso verschwinden."
unfollowConfirm: "Möchtest du {name} nicht mehr folgen?"
exportRequested: "Du hast einen Export angefragt. Dies kann etwas Zeit in Anspruch nehmen. Sobald der Export abgeschlossen ist, wird er deiner Drive hinzugefügt."
importRequested: "Du hast einen Import angefragt. Dies kann etwas Zeit in Anspruch nehmen."
exportRequested: "Du hast einen Export angefragt. Dies kann etwas Zeit in Anspruch\
\ nehmen. Sobald der Export abgeschlossen ist, wird er deiner Drive hinzugefügt."
importRequested: "Du hast einen Import angefragt. Dies kann etwas Zeit in Anspruch\
\ nehmen."
lists: "Listen"
noLists: "Keine Listen gefunden"
note: "Notiz"
@ -81,9 +88,13 @@ error: "Fehler"
somethingHappened: "Ein Fehler ist aufgetreten"
retry: "Wiederholen"
pageLoadError: "Die Seite konnte nicht geladen werden."
pageLoadErrorDescription: "Dieser Fehler wird meist durch Netzwerkfehler oder den Browser-Cache verursacht. Bitte leere den Cache oder versuche es nach einiger Zeit erneut."
serverIsDead: "Dieser Server antwortet nicht. Bitte warte einen Moment und versuche es dann erneut."
youShouldUpgradeClient: "Bitte aktualisiere diese Seite, um eine neuere Version deines Clients zu verwenden."
pageLoadErrorDescription: "Dieser Fehler wird meist durch Netzwerkfehler oder den\
\ Browser-Cache verursacht. Bitte leere den Cache oder versuche es nach einiger\
\ Zeit erneut."
serverIsDead: "Dieser Server antwortet nicht. Bitte warte einen Moment und versuche\
\ es dann erneut."
youShouldUpgradeClient: "Bitte aktualisiere diese Seite, um eine neuere Version deines\
\ Clients zu verwenden."
enterListName: "Listennamen eingeben"
privacy: "Privatsphäre"
makeFollowManuallyApprove: "Follow-Anfragen benötigen Bestätigung"
@ -108,7 +119,8 @@ sensitive: "NSFW"
add: "Hinzufügen"
reaction: "Reaktionen"
reactionSetting: "In der Reaktionsauswahl anzuzeigende Reaktionen"
reactionSettingDescription2: "Ziehe um Anzuordnen, klicke um zu löschen, drücke „+“ um hinzuzufügen"
reactionSettingDescription2: "Ziehe um Anzuordnen, klicke um zu löschen, drücke „+“\
\ um hinzuzufügen"
rememberNoteVisibility: "Notizsichtbarkeit merken"
attachCancel: "Anhang entfernen"
markAsSensitive: "Als NSFW markieren"
@ -138,13 +150,21 @@ emojiUrl: "Emoji-URL"
addEmoji: "Emoji hinzufügen"
settingGuide: "Empfohlene Einstellung"
cacheRemoteFiles: "Dateien von fremden Instanzen im Cache speichern"
cacheRemoteFilesDescription: "Ist diese Einstellung deaktiviert, so werden Dateien fremder Instanzen direkt von dort geladen. Hierdurch wird Speicherplatz auf diesem Server gespart, aber durch fehlende Generierung von Vorschaubildern mehr Bandbreite verwendet."
cacheRemoteFilesDescription: "Ist diese Einstellung deaktiviert, so werden Dateien\
\ fremder Instanzen direkt von dort geladen. Hierdurch wird Speicherplatz auf diesem\
\ Server gespart, aber durch fehlende Generierung von Vorschaubildern mehr Bandbreite\
\ verwendet."
flagAsBot: "Als Bot markieren"
flagAsBotDescription: "Aktiviere diese Option, falls dieses Benutzerkonto durch ein Programm gesteuert wird. Falls aktiviert, agiert es als Flag für andere Entwickler zur Verhinderung von endlosen Kettenreaktionen mit anderen Bots und lässt Misskeys interne Systeme dieses Benutzerkonto als Bot behandeln."
flagAsBotDescription: "Aktiviere diese Option, falls dieses Benutzerkonto durch ein\
\ Programm gesteuert wird. Falls aktiviert, agiert es als Flag für andere Entwickler\
\ zur Verhinderung von endlosen Kettenreaktionen mit anderen Bots und lässt Misskeys\
\ interne Systeme dieses Benutzerkonto als Bot behandeln."
flagAsCat: "Als Katze markieren"
flagAsCatDescription: "Aktiviere diese Option, um dieses Benutzerkonto als Katze zu markieren."
flagAsCatDescription: "Aktiviere diese Option, um dieses Benutzerkonto als Katze zu\
\ markieren."
flagShowTimelineReplies: "Antworten in der Chronik anzeigen"
flagShowTimelineRepliesDescription: "Ist diese Option aktiviert, so werden Antworten von Benutzern auf die Notizen anderer Benutzer in der Chronik angezeigt."
flagShowTimelineRepliesDescription: "Ist diese Option aktiviert, so werden Antworten\
\ von Benutzern auf die Notizen anderer Benutzer in der Chronik angezeigt."
autoAcceptFollowed: "Follow-Anfragen von Benutzern, denen du folgst, automatisch akzeptieren"
addAccount: "Benutzerkonto hinzufügen"
loginFailed: "Anmeldung fehlgeschlagen"
@ -156,8 +176,13 @@ removeWallpaper: "Hintergrund entfernen"
searchWith: "Suchen: {q}"
youHaveNoLists: "Du hast keine Listen"
followConfirm: "Möchtest du {name} wirklich folgen?"
proxyAccount: "Proxy-Benutzerkonto"
proxyAccountDescription: "Ein Proxy-Benutzerkonto ist ein Benutzerkonto, das sich für Nutzer unter bestimmten Konditionen wie ein Follower aus einer fremden Instanz verhält. Zum Beispiel wird die Aktivität eines Nutzers aus einer fremden Instanz nicht an diese Instanz übermittelt, falls es keinen Benutzer dieser Instanz gibt, der diesem Nutzer aus fremder Instanz folgt. In diesem Fall folgt stattdessen das Proxy-Benutzerkonto."
proxyAccount: "Proxy-Konto"
proxyAccountDescription: "Ein Proxy-Benutzerkonto ist ein Benutzerkonto, das sich\
\ für Nutzer unter bestimmten Konditionen wie ein Follower aus einer fremden Instanz\
\ verhält. Zum Beispiel wird die Aktivität eines Nutzers aus einer fremden Instanz\
\ nicht an diese Instanz übermittelt, falls es keinen Benutzer dieser Instanz gibt,\
\ der diesem Nutzer aus fremder Instanz folgt. In diesem Fall folgt stattdessen\
\ das Proxy-Benutzerkonto."
host: "Hostname"
selectUser: "Benutzer auswählen"
recipient: "Empfänger"
@ -188,11 +213,15 @@ instanceInfo: "Instanzinformationen"
statistics: "Statistiken"
clearQueue: "Warteschlange leeren"
clearQueueConfirmTitle: "Möchtest du die Warteschlange wirklich leeren?"
clearQueueConfirmText: "Hierdurch werden jegliche noch nicht gesendete Notizen nicht förderiert. Normalerweise wird dies nicht benötigt."
clearQueueConfirmText: "Hierdurch werden jegliche noch nicht gesendete Notizen nicht\
\ förderiert. Normalerweise wird dies nicht benötigt."
clearCachedFiles: "Cache leeren"
clearCachedFilesConfirm: "Sollen alle im Cache gespeicherten Dateien von anderen Instanzen wirklich gelöscht werden?"
clearCachedFilesConfirm: "Sollen alle im Cache gespeicherten Dateien von anderen Instanzen\
\ wirklich gelöscht werden?"
blockedInstances: "Blockierte Instanzen"
blockedInstancesDescription: "Gib die Hostnamen der Instanzen, welche blockiert werden sollen, durch Zeilenumbrüche getrennt an. Blockierte Instanzen können mit dieser instanz nicht mehr kommunizieren."
blockedInstancesDescription: "Gib die Hostnamen der Instanzen, welche blockiert werden\
\ sollen, durch Zeilenumbrüche getrennt an. Blockierte Instanzen können mit dieser\
\ instanz nicht mehr kommunizieren."
muteAndBlock: "Stummschaltungen und Blockierungen"
mutedUsers: "Stummgeschaltete Benutzer"
blockedUsers: "Blockierte Benutzer"
@ -241,13 +270,15 @@ saved: "Erfolgreich gespeichert"
messaging: "Chat"
upload: "Hochladen"
keepOriginalUploading: "Originalbild speichern"
keepOriginalUploadingDescription: "Speichert das Originalbild so, wie es ist. Ist dies deaktiviert, wird eine Version zum Anzeigen im Internet generiert."
keepOriginalUploadingDescription: "Speichert das Originalbild so, wie es ist. Ist\
\ dies deaktiviert, wird eine Version zum Anzeigen im Internet generiert."
fromDrive: "Aus Drive"
fromUrl: "Von einer URL"
uploadFromUrl: "Von einer URL hochladen"
uploadFromUrlDescription: "URL der hochzuladenden Datei"
uploadFromUrlRequested: "Upload angefordert"
uploadFromUrlMayTakeTime: "Es kann eine Weile dauern, bis das Hochladen abgeschlossen ist."
uploadFromUrlMayTakeTime: "Es kann eine Weile dauern, bis das Hochladen abgeschlossen\
\ ist."
explore: "Erkunden"
messageRead: "Gelesen"
noMoreHistory: "Kein weiterer Verlauf vorhanden"
@ -290,8 +321,10 @@ unableToDelete: "Nicht löschbar"
inputNewFileName: "Gib einen neuen Dateinamen ein"
inputNewDescription: "Gib eine neue Beschreibung ein"
inputNewFolderName: "Gib einen neuen Ordnernamen ein"
circularReferenceFolder: "Der Zielordner ist ein Unterorder des Ordners, den du verschieben möchtest."
hasChildFilesOrFolders: "Dieser Ordner kann nicht gelöscht werden, da er nicht leer ist."
circularReferenceFolder: "Der Zielordner ist ein Unterorder des Ordners, den du verschieben\
\ möchtest."
hasChildFilesOrFolders: "Dieser Ordner kann nicht gelöscht werden, da er nicht leer\
\ ist."
copyUrl: "URL kopieren"
rename: "Umbenennen"
avatar: "Profilbild"
@ -324,7 +357,8 @@ connectService: "Verbinden"
disconnectService: "Trennen"
enableLocalTimeline: "Lokale Chronik aktivieren"
enableGlobalTimeline: "Globale Chronik aktivieren"
disablingTimelinesInfo: "Administratoren und Moderatoren haben immer Zugriff auf alle Chroniken, auch wenn diese deaktiviert sind."
disablingTimelinesInfo: "Administratoren und Moderatoren haben immer Zugriff auf alle\
\ Chroniken, auch wenn diese deaktiviert sind."
registration: "Registrieren"
enableRegistration: "Registration neuer Benutzer erlauben"
invite: "Einladen"
@ -336,9 +370,11 @@ bannerUrl: "Banner-URL"
backgroundImageUrl: "Hintergrundbild-URL"
basicInfo: "Grundlegende Informationen"
pinnedUsers: "Angeheftete Benutzer"
pinnedUsersDescription: "Gib durch Leerzeichen getrennte Benutzer an, die an die \"Erkunden\"-Seite angeheftet werden sollen."
pinnedUsersDescription: "Gib durch Leerzeichen getrennte Benutzer an, die an die \"\
Erkunden\"-Seite angeheftet werden sollen."
pinnedPages: "Angeheftete Seiten"
pinnedPagesDescription: "Gib durch Leerzeilen getrennte Pfäde zu Seiten an, die an die Startseite dieser Instanz angeheftet werden sollen.\n"
pinnedPagesDescription: "Gib durch Leerzeilen getrennte Pfäde zu Seiten an, die an\
\ die Startseite dieser Instanz angeheftet werden sollen.\n"
pinnedClipId: "ID des anzuheftenden Clips"
pinnedNotes: "Angeheftete Notizen"
hcaptcha: "hCaptcha"
@ -349,14 +385,18 @@ recaptcha: "reCAPTCHA"
enableRecaptcha: "reCAPTCHA aktivieren"
recaptchaSiteKey: "Site key"
recaptchaSecretKey: "Secret key"
avoidMultiCaptchaConfirm: "Das Verwenden von mehreren Captcha-Systemen kann zu Störungen führen. Sollen die anderen Systeme deaktiviert werden? Durch Abbrechen können mehrere Systeme aktiviert bleiben."
avoidMultiCaptchaConfirm: "Das Verwenden von mehreren Captcha-Systemen kann zu Störungen\
\ führen. Sollen die anderen Systeme deaktiviert werden? Durch Abbrechen können\
\ mehrere Systeme aktiviert bleiben."
antennas: "Antennen"
manageAntennas: "Antennen verwalten"
name: "Name"
antennaSource: "Antennenquelle"
antennaKeywords: "Zu beobachtende Schlüsselwörter"
antennaExcludeKeywords: "Zu ignorierende Schlüsselwörter"
antennaKeywordsDescription: "Zum Nutzen einer \"UND\"-Verknüpfung Einträge mit Leerzeichen trennen, zum Nutzen einer \"ODER\"-Verknüpfung Einträge mit einem Zeilenumbruch trennen"
antennaKeywordsDescription: "Zum Nutzen einer \"UND\"-Verknüpfung Einträge mit Leerzeichen\
\ trennen, zum Nutzen einer \"ODER\"-Verknüpfung Einträge mit einem Zeilenumbruch\
\ trennen"
notifyAntenna: "Über neue Notizen benachrichtigen"
withFileAntenna: "Nur Notizen mit Dateien"
enableServiceworker: "Push-Benachrichtigungen im Browser aktivieren"
@ -369,7 +409,8 @@ withFiles: "Notizen mit Dateien"
silence: "Instanzweit stummschalten"
silenceConfirm: "Möchtest du diesen Benutzer wirklich instanzweit stummschalten?"
unsilence: "Instanzweite Stummschaltung aufheben"
unsilenceConfirm: "Möchtest du die instanzweite Stummschaltung dieses Benutzers wirklich aufheben?"
unsilenceConfirm: "Möchtest du die instanzweite Stummschaltung dieses Benutzers wirklich\
\ aufheben?"
popularUsers: "Beliebte Benutzer"
recentlyUpdatedUsers: "Vor kurzem aktive Benutzer"
recentlyRegisteredUsers: "Vor kurzem registrierte Benutzer"
@ -435,7 +476,8 @@ invitationCode: "Einladungscode"
checking: "Wird überprüft …"
available: "Verfügbar"
unavailable: "Unverfügbar"
usernameInvalidFormat: "Du kannst Klein- und Großbuchstaben, Zahlen sowie Unterstriche verwenden"
usernameInvalidFormat: "Du kannst Klein- und Großbuchstaben, Zahlen sowie Unterstriche\
\ verwenden"
tooShort: "Zu kurz"
tooLong: "Zu lang"
weakPassword: "Schwaches Passwort"
@ -485,19 +527,27 @@ showFeaturedNotesInTimeline: "Beliebte Notizen in der Chronik anzeigen"
objectStorage: "Object Storage"
useObjectStorage: "Object Storage verwenden"
objectStorageBaseUrl: "Basis-URL"
objectStorageBaseUrlDesc: "Die als Referenz verwendete URL. Verwendest du einen CDN oder Proxy, gib dessen URL an. Für S3 verwende 'https://<bucket>.s3.amazonaws.com'. Für GCS o.ä. verwende 'https://storage.googleapis.com/<bucket>'."
objectStorageBaseUrlDesc: "Die als Referenz verwendete URL. Verwendest du einen CDN\
\ oder Proxy, gib dessen URL an. Für S3 verwende 'https://<bucket>.s3.amazonaws.com'.\
\ Für GCS o.ä. verwende 'https://storage.googleapis.com/<bucket>'."
objectStorageBucket: "Bucket"
objectStorageBucketDesc: "Bitte gib den Namen des Buckets an, der bei deinem Anbieter verwendet wird."
objectStorageBucketDesc: "Bitte gib den Namen des Buckets an, der bei deinem Anbieter\
\ verwendet wird."
objectStoragePrefix: "Prefix"
objectStoragePrefixDesc: "Dateien werden in Ordnern unter diesem Prefix gespeichert."
objectStorageEndpoint: "Endpoint"
objectStorageEndpointDesc: "Im Falle von S3 leerlassen, für andere Anbieter den relevanten Endpoint im Format „<host>“ oder „<host>:<port>“ angeben."
objectStorageEndpointDesc: "Im Falle von S3 leerlassen, für andere Anbieter den relevanten\
\ Endpoint im Format „<host>“ oder „<host>:<port>“ angeben."
objectStorageRegion: "Region"
objectStorageRegionDesc: "Gib eine Region wie z.B. „xx-east-1“ an. Falls dein Anbieter nicht zwischen Regionen unterscheidet, lass dieses Feld leer oder gib „us-east-1“ an."
objectStorageRegionDesc: "Gib eine Region wie z.B. „xx-east-1“ an. Falls dein Anbieter\
\ nicht zwischen Regionen unterscheidet, lass dieses Feld leer oder gib „us-east-1“\
\ an."
objectStorageUseSSL: "SSL verwenden"
objectStorageUseSSLDesc: "Deaktiviere dies, falls du für API-Verbindungen kein HTTPS verwenden wirst"
objectStorageUseSSLDesc: "Deaktiviere dies, falls du für API-Verbindungen kein HTTPS\
\ verwenden wirst"
objectStorageUseProxy: "Über Proxy verbinden"
objectStorageUseProxyDesc: "Deaktiviere dies, falls du keinen Proxy für den Objektspeicher verwenden wirst"
objectStorageUseProxyDesc: "Deaktiviere dies, falls du keinen Proxy für den Objektspeicher\
\ verwenden wirst"
objectStorageSetPublicRead: "Bei Upload auf \"public-read\" stellen"
serverLogs: "Serverprotokolle"
deleteAll: "Alle löschen"
@ -525,7 +575,9 @@ sort: "Sortieren"
ascendingOrder: "Aufsteigende Reihenfolge"
descendingOrder: "Absteigende Reihenfolge"
scratchpad: "Testumgebung"
scratchpadDescription: "Die Testumgebung bietet einen Bereich für AiScript-Experimente. Dort kannst du AiScript schreiben, ausführen sowie dessen Auswirkungen auf Misskey überprüfen."
scratchpadDescription: "Die Testumgebung bietet einen Bereich für AiScript-Experimente.\
\ Dort kannst du AiScript schreiben, ausführen sowie dessen Auswirkungen auf Misskey\
\ überprüfen."
output: "Ausgabe"
script: "Skript"
disablePagesScript: "AiScript auf Seiten deaktivieren"
@ -533,11 +585,15 @@ updateRemoteUser: "Benutzerinformationen aktualisieren"
deleteAllFiles: "Alle Dateien löschen"
deleteAllFilesConfirm: "Möchtest du wirklich alle Dateien löschen?"
removeAllFollowing: "Allen gefolgten Benutzern entfolgen"
removeAllFollowingDescription: "Dies entfolgt allen Benutzerkonten von {host}. Bitte führe dies durch, falls diese Instanz z.B. nicht mehr existiert."
removeAllFollowingDescription: "Dies entfolgt allen Benutzerkonten von {host}. Bitte\
\ führe dies durch, falls diese Instanz z.B. nicht mehr existiert."
userSuspended: "Dieser Benutzer wurde gesperrt."
userSilenced: "Dieser Benutzer wurde instanzweit stummgeschaltet."
yourAccountSuspendedTitle: "Dieses Benutzerkonto ist gesperrt"
yourAccountSuspendedDescription: "Dieses Benutzerkonto wurde gesperrt, da es gegen die Nutzungsbedingungen dieses Servers verstoßen hat. Trete mit dem Betreiber in Kontakt, falls du weitere Details erfahren möchtest. Bitte erstelle kein neues Benutzerkonto."
yourAccountSuspendedDescription: "Dieses Benutzerkonto wurde gesperrt, da es gegen\
\ die Nutzungsbedingungen dieses Servers verstoßen hat. Trete mit dem Betreiber\
\ in Kontakt, falls du weitere Details erfahren möchtest. Bitte erstelle kein neues\
\ Benutzerkonto."
menu: "Menü"
divider: "Trenner"
addItem: "Element hinzufügen"
@ -578,12 +634,14 @@ permission: "Berechtigungen"
enableAll: "Alle aktivieren"
disableAll: "Alle deaktivieren"
tokenRequested: "Zugriff zum Benutzerkonto gewähren"
pluginTokenRequestedDescription: "Dieses Plugin wird die hier konfigurierten Berechtigungen verwenden können."
pluginTokenRequestedDescription: "Dieses Plugin wird die hier konfigurierten Berechtigungen\
\ verwenden können."
notificationType: "Art der Benachrichtigung"
edit: "Bearbeiten"
emailServer: "Email-Server"
enableEmail: "Email-Versand aktivieren"
emailConfigInfo: "Zur Email-Bestätigung bei Registrierung oder zum Zurücksetzen des Passworts verwendet"
emailConfigInfo: "Zur Email-Bestätigung bei Registrierung oder zum Zurücksetzen des\
\ Passworts verwendet"
email: "Email"
emailAddress: "Email-Adresse"
smtpConfig: "SMTP-Server Konfiguration"
@ -591,13 +649,15 @@ smtpHost: "Host"
smtpPort: "Port"
smtpUser: "Benutzername"
smtpPass: "Passwort"
emptyToDisableSmtpAuth: "Benutzername und Passwort leer lassen, um SMTP-Verifizierung zu deaktivieren"
emptyToDisableSmtpAuth: "Benutzername und Passwort leer lassen, um SMTP-Verifizierung\
\ zu deaktivieren"
smtpSecure: "Für SMTP-Verbindungen implizit SSL/TLS verwenden"
smtpSecureInfo: "Schalte dies aus, falls du STARTTLS verwendest."
testEmail: "Emailversand testen"
wordMute: "Wortstummschaltung"
regexpError: "Fehler in einem regulären Ausdruck"
regexpErrorDescription: "Im regulären Ausdruck deiner {tab}en Wortstummschaltungen ist ein Fehler aufgetreten:"
regexpErrorDescription: "Im regulären Ausdruck deiner {tab}en Wortstummschaltungen\
\ ist ein Fehler aufgetreten:"
instanceMute: "Instanzstummschaltungen"
userSaysSomething: "{name} hat etwas gesagt"
makeActive: "Aktivieren"
@ -613,44 +673,53 @@ create: "Erstellen"
notificationSetting: "Benachrichtigungseinstellungen"
notificationSettingDesc: "Wähle die Art der anzuzeigenden Benachrichtigungen."
useGlobalSetting: "Globale Einstellung verwenden"
useGlobalSettingDesc: "Ist diese Option aktiviert, werden die Benachrichtigungseinstellungen deines Benutzerkontos verwendet. Durch ausschalten dieser Option können individuelle Einstellungen vorgenommen werden."
useGlobalSettingDesc: "Ist diese Option aktiviert, werden die Benachrichtigungseinstellungen\
\ deines Benutzerkontos verwendet. Durch ausschalten dieser Option können individuelle\
\ Einstellungen vorgenommen werden."
other: "Anderes"
regenerateLoginToken: "Anmeldetoken regenerieren"
regenerateLoginTokenDescription: "Den zur Anmeldung intern verwendeten Token regenerieren. Normalerweise wird dies nicht benötigt. Bei Regeneration werden alle Geräte ausgeloggt."
setMultipleBySeparatingWithSpace: "Trenne Elemente durch ein Leerzeichen um mehrere Einstellungen zu kofigurieren."
regenerateLoginTokenDescription: "Den zur Anmeldung intern verwendeten Token regenerieren.\
\ Normalerweise wird dies nicht benötigt. Bei Regeneration werden alle Geräte ausgeloggt."
setMultipleBySeparatingWithSpace: "Trenne Elemente durch ein Leerzeichen um mehrere\
\ Einstellungen zu kofigurieren."
fileIdOrUrl: "Datei-ID oder URL"
behavior: "Verhalten"
sample: "Beispiel"
abuseReports: "Meldungen"
reportAbuse: "Melden"
reportAbuseOf: "{name} melden"
fillAbuseReportDescription: "Bitte gib zusätzliche Informationen zu dieser Meldung an. Falls es sich um eine spezielle Notiz handelt, bitte gib dessen URL an."
fillAbuseReportDescription: "Bitte gib zusätzliche Informationen zu dieser Meldung\
\ an. Falls es sich um eine spezielle Notiz handelt, bitte gib dessen URL an."
abuseReported: "Deine Meldung wurde versendet. Vielen Dank."
reporter: "Melder"
reporteeOrigin: "Herkunft des Gemeldeten"
reporterOrigin: "Herkunft des Meldenden"
forwardReport: "Meldung an fremde Instanz weiterleiten"
forwardReportIsAnonymous: "Anstatt deines Benutzerkontos wird bei der fremden Instanz ein anonymes Systemkonto als Melder angezeigt."
forwardReportIsAnonymous: "Anstatt deines Benutzerkontos wird bei der fremden Instanz\
\ ein anonymes Systemkonto als Melder angezeigt."
send: "Senden"
abuseMarkAsResolved: "Meldung als gelöst markieren"
openInNewTab: "In neuem Tab öffnen"
openInSideView: "In Seitenansicht öffnen"
defaultNavigationBehaviour: "Standardnavigationsverhalten"
editTheseSettingsMayBreakAccount: "Bei Bearbeitung dieser Einstellungen besteht die Gefahr, dein Benutzerkonto zu beschädigen."
editTheseSettingsMayBreakAccount: "Bei Bearbeitung dieser Einstellungen besteht die\
\ Gefahr, dein Benutzerkonto zu beschädigen."
instanceTicker: "Instanz-Informationen von Notizen"
waitingFor: "Warte auf {x} …"
random: "Zufällig"
system: "System"
switchUi: "UI wechseln"
switchUi: "Layout"
desktop: "Desktop"
clip: "Clip erstellen"
createNew: "Neu erstellen"
optional: "Optional"
createNewClip: "Neuen Clip erstellen"
unclip: "Aus Clip entfernen"
confirmToUnclipAlreadyClippedNote: "Diese Notiz ist bereits im \"{name}\" Clip enthalten. Möchtest du sie aus diesem Clip entfernen?"
confirmToUnclipAlreadyClippedNote: "Diese Notiz ist bereits im \"{name}\" Clip enthalten.\
\ Möchtest du sie aus diesem Clip entfernen?"
public: "Öffentlich"
i18nInfo: "Calckey wird durch freiwillige Helfer in viele verschiedene Sprachen übersetzt. Auf {link} kannst du mithelfen."
i18nInfo: "Calckey wird durch freiwillige Helfer in viele verschiedene Sprachen übersetzt.\
\ Auf {link} kannst du mithelfen."
manageAccessTokens: "Zugriffstokens verwalten"
accountInfo: "Benutzerkonto-Informationen"
notesCount: "Anzahl der Notizen"
@ -669,12 +738,16 @@ no: "Nein"
driveFilesCount: "Anzahl der Dateien in Drive"
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."
noCrawleDescription: "Suchmaschinen bitten, die eigene Profilseite, Notizen, Seiten\
\ usw. nicht zu indexieren."
lockedAccountInfo: "Auch wenn du Follow-Anfragen auf manuelle Bestätigung setzt, wird\
\ jeder deiner Posts öffentlich sichtbar sein, sofern du ihre Sichtbarkeit nicht\
\ auf \"Nur Follower\" setzt."
alwaysMarkSensitive: "Medien standardmäßig als NSFW 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."
verificationEmailSent: "Eine Bestätigungsmail wurde an deine Email-Adresse versendet.\
\ Besuche den dort enthaltenen Link, um die Verifizierung abzuschließen."
notSet: "Nicht konfiguriert"
emailVerified: "Email-Adresse bestätigt"
noteFavoritesCount: "Anzahl an als Favorit markierter Notizen"
@ -686,22 +759,29 @@ clips: "Clips"
experimentalFeatures: "Experimentelle Funktionalitäten"
developer: "Entwickler"
makeExplorable: "Benutzerkonto in „Erkunden“ sichtbar machen"
makeExplorableDescription: "Wenn diese Option deaktiviert ist, ist dein Benutzerkonto nicht im „Erkunden“-Bereich sichtbar."
makeExplorableDescription: "Wenn diese Option deaktiviert ist, ist dein Benutzerkonto\
\ nicht im „Erkunden“-Bereich sichtbar."
showGapBetweenNotesInTimeline: "Abstände zwischen Notizen auf der Chronik anzeigen"
duplicate: "Duplizieren"
left: "Links"
center: "Mittig"
wide: "Breit"
narrow: "Schmal"
reloadToApplySetting: "Diese Einstellung tritt nach einer Aktualisierung der Seite in Kraft. Jetzt aktualisieren?"
needReloadToApply: "Diese Einstellung tritt nach einer Aktualisierung der Seite in Kraft."
reloadToApplySetting: "Diese Einstellung tritt nach einer Aktualisierung der Seite\
\ in Kraft. Jetzt aktualisieren?"
needReloadToApply: "Diese Einstellung tritt nach einer Aktualisierung der Seite in\
\ Kraft."
showTitlebar: "Titelleiste anzeigen"
clearCache: "Cache leeren"
onlineUsersCount: "{n} Benutzer sind online"
nUsers: "{n} Benutzer"
nNotes: "{n} Notizen"
sendErrorReports: "Fehlerberichte senden"
sendErrorReportsDescription: "Ist diese Option aktiviert, so werden beim Auftreten von Fehlern detaillierte Fehlerinformationen an Misskey weitergegeben, was zur Verbesserung der Qualität von Misskey beiträgt.\nEnthalten in diesen Informationen sind u.a. die Version deines Betriebssystems, welchen Browser du verwendest und ein Verlauf deiner Aktivitäten innerhalb Misskey."
sendErrorReportsDescription: "Ist diese Option aktiviert, so werden beim Auftreten\
\ von Fehlern detaillierte Fehlerinformationen an Calckey weitergegeben, was zur\
\ Verbesserung der Qualität von Calckey beiträgt.\nEnthalten in diesen Informationen\
\ sind u.a. die Version deines Betriebssystems, welchen Browser du verwendest und\
\ ein Verlauf deiner Aktivitäten innerhalb Calckey."
myTheme: "Mein Farbschema"
backgroundColor: "Hintergrundfarbe"
accentColor: "Akzentfarbe"
@ -740,14 +820,17 @@ unlikeConfirm: "\"Gefällt mir\" wirklich entfernen?"
fullView: "Vollansicht"
quitFullView: "Vollansicht verlassen"
addDescription: "Beschreibung hinzufügen"
userPagePinTip: "Um Notizen hier erscheinen zu lassen, drücke \"An dein Profil anheften\" im Menü individueller Notizen."
notSpecifiedMentionWarning: "Diese Notiz enthält Erwähnungen von Nutzern, die nicht als Empfänger ausgewählt sind"
userPagePinTip: "Um Notizen hier erscheinen zu lassen, drücke \"An dein Profil anheften\"\
\ im Menü individueller Notizen."
notSpecifiedMentionWarning: "Diese Notiz enthält Erwähnungen von Nutzern, die nicht\
\ als Empfänger ausgewählt sind"
info: "Über"
userInfo: "Benutzerinformation"
unknown: "Unbekannt"
onlineStatus: "Onlinestatus"
hideOnlineStatus: "Onlinestatus verbergen"
hideOnlineStatusDescription: "Das Verbergen deines Onlinestatuses reduziert die Nützlichkeit von Funktionen wie der Suche."
hideOnlineStatusDescription: "Das Verbergen deines Onlinestatuses reduziert die Nützlichkeit\
\ von Funktionen wie der Suche."
online: "Online"
active: "Aktiv"
offline: "Offline"
@ -782,7 +865,8 @@ emailNotConfiguredWarning: "Keine Email-Adresse hinterlegt."
ratio: "Verhältnis"
previewNoteText: "Vorschau anzeigen"
customCss: "Benutzerdefiniertes CSS"
customCssWarn: "Verwende diese Einstellung nur, wenn du weißt, was sie tut. Ungültige Eingaben können dazu führen, dass der Client nicht mehr normal funktioniert."
customCssWarn: "Verwende diese Einstellung nur, wenn du weißt, was sie tut. Ungültige\
\ Eingaben können dazu führen, dass der Client nicht mehr normal funktioniert."
global: "Global"
squareAvatars: "Profilbilder quadratisch anzeigen"
sent: "Gesendet"
@ -797,7 +881,9 @@ whatIsNew: "Änderungen anzeigen"
translate: "Übersetzen"
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."
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"
keepCw: "Inhaltswarnungen beibehalten"
pubSub: "Pub/Sub Benutzerkonten"
@ -813,12 +899,14 @@ filter: "Filter"
controlPanel: "Systemsteuerung"
manageAccounts: "Benutzerkonten verwalten"
makeReactionsPublic: "Reaktionsverlauf veröffentlichen"
makeReactionsPublicDescription: "Jeder wird die Liste deiner gesendeten Reaktionen einsehen können."
makeReactionsPublicDescription: "Jeder wird die Liste deiner gesendeten Reaktionen\
\ einsehen können."
classic: "Classic"
muteThread: "Thread stummschalten"
unmuteThread: "Threadstummschaltung aufheben"
ffVisibility: "Sichtbarkeit von Gefolgten/Followern"
ffVisibilityDescription: "Konfiguriere wer sehen kann, wem du folgst sowie wer dir folgt."
ffVisibilityDescription: "Konfiguriere wer sehen kann, wem du folgst sowie wer dir\
\ folgt."
continueThread: "Weiteren Threadverlauf anzeigen"
deleteAccountConfirm: "Dein Benutzerkonto wird unwiderruflich gelöscht. Trotzdem fortfahren?"
incorrectPassword: "Falsches Passwort."
@ -826,9 +914,11 @@ voteConfirm: "Wirklich für „{choice}“ abstimmen?"
hide: "Inhalt verbergen"
leaveGroup: "Gruppe verlassen"
leaveGroupConfirm: "Möchtest du „{name}“ wirklich verlassen?"
useDrawerReactionPickerForMobile: "Auf mobilen Geräten ausfahrbare Reaktionsauswahl anzeigen"
useDrawerReactionPickerForMobile: "Auf mobilen Geräten ausfahrbare Reaktionsauswahl\
\ anzeigen"
welcomeBackWithName: "Willkommen zurück, {name}"
clickToFinishEmailVerification: "Drücke bitte auf [{ok}], um die Email-Bestätigung abzuschließen."
clickToFinishEmailVerification: "Drücke bitte auf [{ok}], um die Email-Bestätigung\
\ abzuschließen."
overridedDeviceKind: "Gerätetyp"
smartphone: "Smartphone"
tablet: "Tablet"
@ -847,7 +937,8 @@ oneHour: "Eine Stunde"
oneDay: "Einen Tag"
oneWeek: "Eine Woche"
reflectMayTakeTime: "Es kann etwas dauern, bis sich dies widerspiegelt."
failedToFetchAccountInformation: "Benutzerkontoinformationen konnten nicht abgefragt werden"
failedToFetchAccountInformation: "Benutzerkontoinformationen konnten nicht abgefragt\
\ werden"
rateLimitExceeded: "Versuchsanzahl überschritten"
cropImage: "Bild zuschneiden"
cropImageAsk: "Möchtest du das Bild zuschneiden?"
@ -859,14 +950,17 @@ thereIsUnresolvedAbuseReportWarning: "Es liegen ungelöste Meldungen vor."
recommended: "Empfehlung"
check: "Check"
driveCapOverrideLabel: "Die Drive-Kapazität dieses Nutzers verändern"
driveCapOverrideCaption: "Gib einen Wert von 0 oder weniger ein, um die Kapazität auf den Standard zurückzusetzen."
driveCapOverrideCaption: "Gib einen Wert von 0 oder weniger ein, um die Kapazität\
\ auf den Standard zurückzusetzen."
requireAdminForView: "Melde dich mit einem Administratorkonto an, um dies einzusehen."
isSystemAccount: "Ein Benutzerkonto, dass durch das System erstellt und automatisch kontrolliert wird."
isSystemAccount: "Ein Benutzerkonto, dass durch das System erstellt und automatisch\
\ kontrolliert wird."
typeToConfirm: "Bitte gib zur Bestätigung {x} ein"
deleteAccount: "Benutzerkonto löschen"
document: "Dokumentation"
numberOfPageCache: "Seitencachegröße"
numberOfPageCacheDescription: "Das Erhöhen dieses Caches führt zu einer angenehmerern Benutzererfahrung, erhöht aber Serverlast und Arbeitsspeicherauslastung."
numberOfPageCacheDescription: "Das Erhöhen dieses Caches führt zu einer angenehmerern\
\ Benutzererfahrung, erhöht aber Serverlast und Arbeitsspeicherauslastung."
logoutConfirm: "Wirklich abmelden?"
lastActiveDate: "Zuletzt verwendet am"
statusbar: "Statusleiste"
@ -883,24 +977,37 @@ sensitiveMediaDetection: "Erkennung von NSFW-Medien"
localOnly: "Nur Lokal"
remoteOnly: "Nur für fremde Instanzen"
failedToUpload: "Hochladen fehlgeschlagen"
cannotUploadBecauseInappropriate: "Diese Datei kann nicht hochgeladen werden, da Anteile der Datei als möglicherweise NSFW festgestellt wurden."
cannotUploadBecauseNoFreeSpace: "Die Datei konnte nicht hochgeladen werden, da dein Drive-Speicherplatz aufgebraucht ist."
cannotUploadBecauseInappropriate: "Diese Datei kann nicht hochgeladen werden, da Anteile\
\ der Datei als möglicherweise NSFW festgestellt wurden."
cannotUploadBecauseNoFreeSpace: "Die Datei konnte nicht hochgeladen werden, da dein\
\ Drive-Speicherplatz aufgebraucht ist."
beta: "Beta"
enableAutoSensitive: "NSFW-Automarkierung"
enableAutoSensitiveDescription: "Setzt soweit möglich durch Verwendung von Machine Learning automatisch NSFW-Markierungen für Medien, die NSFW-Anteile beinhalten. Auch wenn du diese Option deaktiviert hast, ist sie möglicherweise auf Instanzebene aktiviert."
activeEmailValidationDescription: "Aktivert strengere Überprüfung von E-Mail-Adressen, d.h. Testen auf Wegwerfadressen und darauf, ob mit der Adresse tatsächlich kommuniziert werden kann. Ist dies deaktiviert, so wird nur das Format der E-Mail überprüft."
enableAutoSensitiveDescription: "Setzt soweit möglich durch Verwendung von Machine\
\ Learning automatisch NSFW-Markierungen für Medien, die NSFW-Anteile beinhalten.\
\ Auch wenn du diese Option deaktiviert hast, ist sie möglicherweise auf Instanzebene\
\ aktiviert."
activeEmailValidationDescription: "Aktivert strengere Überprüfung von E-Mail-Adressen,\
\ d.h. Testen auf Wegwerfadressen und darauf, ob mit der Adresse tatsächlich kommuniziert\
\ werden kann. Ist dies deaktiviert, so wird nur das Format der E-Mail überprüft."
navbar: "Navigationsleiste"
shuffle: "Mischen"
account: "Benutzerkonto"
move: "Verschieben"
_sensitiveMediaDetection:
description: "Ermöglicht eine Erleichterung der Servermoderation durch die automatische Erkennungen von NSFW-Medien unter Verwendung von Machine Learning. Hierdurch wird die Serverlast etwas erhöht."
description: "Ermöglicht eine Erleichterung der Servermoderation durch die automatische\
\ Erkennungen von NSFW-Medien unter Verwendung von Machine Learning. Hierdurch\
\ wird die Serverlast etwas erhöht."
sensitivity: "Erkennungssensitivität"
sensitivityDescription: "Durch das Senken der Sensitivität kann die Anzahl an Fehlerkennungen (sog. false positives) reduziert werden. Durch ein Erhöhen dieser kann die Anzahl an verpassten Erkennungen (sog. false negatives) reduziert werden."
sensitivityDescription: "Durch das Senken der Sensitivität kann die Anzahl an Fehlerkennungen\
\ (sog. false positives) reduziert werden. Durch ein Erhöhen dieser kann die Anzahl\
\ an verpassten Erkennungen (sog. false negatives) reduziert werden."
setSensitiveFlagAutomatically: "Als NSFW markieren"
setSensitiveFlagAutomaticallyDescription: "Die Resultate der internen Erkennung werden beibehalten, auch wenn diese Option deaktiviert ist."
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."
analyzeVideosDescription: "Analysiert zusätzlich zu Bildern auch Videos. Die Last\
\ des Servers wird hierdurch etwas erhöht."
_emailUnavailable:
used: "Diese Email-Adresse wird bereits verwendet"
format: "Das Format dieser Email-Adresse ist ungültig"
@ -913,12 +1020,18 @@ _ffVisibility:
private: "Privat"
_signup:
almostThere: "Fast geschafft"
emailAddressInfo: "Bitte gib deine Email-Adresse ein. Sie wird nicht öffentlich einsehbar sein."
emailSent: "An deine Email-Adresse ({email}) wurde soeben eine Bestätigungsmail geschickt. Bitte klicke auf den enthaltenen Link, um die Erstellung deines Benutzerkontos abzuschließen."
emailAddressInfo: "Bitte gib deine Email-Adresse ein. Sie wird nicht öffentlich\
\ einsehbar sein."
emailSent: "An deine Email-Adresse ({email}) wurde soeben eine Bestätigungsmail\
\ geschickt. Bitte klicke auf den enthaltenen Link, um die Erstellung deines Benutzerkontos\
\ abzuschließen."
_accountDelete:
accountDelete: "Benutzerkonto löschen"
mayTakeTime: "Da die Löschung eines Benutzerkontos ein aufwendiger Prozess ist, kann dessen Dauer davon abhängen, wie viel Inhalt von diesem erstellt wurde oder wie viele Dateien von diesem hochgeladen wurden."
sendEmail: "Sobald die Löschung abgeschlossen ist, wird an die mit ihm verknüpfte Email-Adresse eine Benachrichtigung versendet."
mayTakeTime: "Da die Löschung eines Benutzerkontos ein aufwendiger Prozess ist,\
\ kann dessen Dauer davon abhängen, wie viel Inhalt von diesem erstellt wurde\
\ oder wie viele Dateien von diesem hochgeladen wurden."
sendEmail: "Sobald die Löschung abgeschlossen ist, wird an die mit ihm verknüpfte\
\ Email-Adresse eine Benachrichtigung versendet."
requestAccountDelete: "Löschung deines Benutzerkontos anfordern"
started: "Die Löschung wurde eingeleitet."
inProgress: "Löschung in Bearbeitung"
@ -926,9 +1039,12 @@ _ad:
back: "Zurück"
reduceFrequencyOfThisAd: "Diese Werbung weniger anzeigen"
_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."
contactAdmin: "Diese Instanz unterstützt die Verwendung von Email-Adressen nicht. Wende dich an den Administrator, um dein Passwort zurückzusetzen."
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."
contactAdmin: "Diese Instanz unterstützt die Verwendung von Email-Adressen nicht.\
\ Wende dich an den Administrator, um dein Passwort zurückzusetzen."
_gallery:
my: "Meine Galerie"
liked: "Mit \"Gefällt mir\" markierte Beiträge"
@ -951,12 +1067,15 @@ _preferencesBackups:
save: "Speichern"
inputName: "Gib einen Namen für dieses Backup ein"
cannotSave: "Speichern fehlgeschlagen"
nameAlreadyExists: "Es existiert bereits ein Backup unter dem Namen \"{name}\". Bitte gib einen anderen Namen ein."
applyConfirm: "Wirklich das Backup \"{name}\" auf dieses Gerät anwenden? Bestehende Einstellungen darauf werden überschrieben."
nameAlreadyExists: "Es existiert bereits ein Backup unter dem Namen \"{name}\".\
\ Bitte gib einen anderen Namen ein."
applyConfirm: "Wirklich das Backup \"{name}\" auf dieses Gerät anwenden? Bestehende\
\ Einstellungen darauf werden überschrieben."
saveConfirm: "Als {name} speichern?"
deleteConfirm: "Das Backup {name} löschen?"
renameConfirm: "Soll dieses Backup von \"{old}\" zu \"{new}\" umbenannt werden?"
noBackups: "Keine Backups existieren. Backups können über \"Neu erstellen\" erstelllt werden."
noBackups: "Keine Backups existieren. Backups können über \"Neu erstellen\" erstelllt\
\ werden."
createdAt: "Erstellt am: {date} {time}"
updatedAt: "Aktualisiert am: {date} {time}"
cannotLoad: "Laden fehlgeschlagen"
@ -968,13 +1087,15 @@ _registry:
domain: "Domain"
createKey: "Schlüssel erstellen"
_aboutMisskey:
about: "Misskey ist Open-Source-Software, welche von syuilo seit 2014 entwickelt wird."
about: "Misskey ist Open-Source-Software, welche von syuilo seit 2014 entwickelt\
\ wird."
contributors: "Hauptmitwirkende"
allContributors: "Alle Mitwirkenden"
source: "Quellcode"
translation: "Misskey übersetzen"
donate: "An Misskey spenden"
morePatrons: "Wir schätzen ebenso die Unterstützung vieler anderer hier nicht gelisteter Personen sehr. Danke! 🥰"
morePatrons: "Wir schätzen ebenso die Unterstützung vieler anderer hier nicht gelisteter\
\ Personen sehr. Danke! \U0001F970"
patrons: "UnterstützerInnen"
_nsfw:
respect: "Als NSFW markierte Bilder verbergen"
@ -982,10 +1103,13 @@ _nsfw:
force: "Alle Medien verbergen"
_mfm:
cheatSheet: "MFM Spickzettel"
intro: "MFM ist eine Misskey-exklusive Markup-Sprache, die in Misskey an vielen Stellen verwendet werden kann. Hier kannst du eine Liste von verfügbarer MFM-Syntax einsehen."
intro: "MFM ist eine Misskey-exklusive Markup-Sprache, die in Misskey an vielen\
\ Stellen verwendet werden kann. Hier kannst du eine Liste von verfügbarer MFM-Syntax\
\ einsehen."
dummy: "Misskey erweitert die Welt des Fediverse"
mention: "Erwähnung"
mentionDescription: "Mit At-Zeichen und Benutzername kann ein individueller Nutzer angegeben werden."
mentionDescription: "Mit At-Zeichen und Benutzername kann ein individueller Nutzer\
\ angegeben werden."
hashtag: "Hashtag"
hashtagDescription: "Mit einer Raute und Text kann ein Hashtag angegeben werden."
url: "URL"
@ -1001,7 +1125,8 @@ _mfm:
inlineCode: "Code (Eingebettet)"
inlineCodeDescription: "Syntax-Hervorhebung für (Programm-)Code eingebettet anzeigen."
blockCode: "Code (Block)"
blockCodeDescription: "Syntax-Hervorhebung für mehrzeiligen (Programm-)Code als Block anzeigen."
blockCodeDescription: "Syntax-Hervorhebung für mehrzeiligen (Programm-)Code als\
\ Block anzeigen."
inlineMath: "Mathe (Eingebettet)"
inlineMathDescription: "Mathematische Formeln (KaTeX) eingebettet anzeigen."
blockMath: "Mathe (Block)"
@ -1009,7 +1134,8 @@ _mfm:
quote: "Zitationen"
quoteDescription: "Inhalt als Zitat anzeigen."
emoji: "Benutzerdefinierte Emojis"
emojiDescription: "Durch das Umschließen von Emoji-Namen durch Doppelpunkte können benutzerdefinierte Emojis angezeigt werden."
emojiDescription: "Durch das Umschließen von Emoji-Namen durch Doppelpunkte können\
\ benutzerdefinierte Emojis angezeigt werden."
search: "Suche"
searchDescription: "Eine vorgefertige Suchanfragebox anzeigen."
flip: "Spiegelung"
@ -1035,7 +1161,8 @@ _mfm:
x4: "Unglaublich groß"
x4Description: "Lässt Inhalte noch größer als größer als groß angezeigt werden."
blur: "Weichzeichnen"
blurDescription: "Inhalte durch Weihzeichnung verschwimmen lassen. Durch das Bewegen des Mauszeigers über den Inhalt wird er klar angezeigt."
blurDescription: "Inhalte durch Weihzeichnung verschwimmen lassen. Durch das Bewegen\
\ des Mauszeigers über den Inhalt wird er klar angezeigt."
font: "Schriftart"
fontDescription: "Setzt die Schriftart des Inhaltes fest."
rainbow: "Regenbogen"
@ -1045,7 +1172,8 @@ _mfm:
rotate: "Drehen"
rotateDescription: "Dreht den Inhalt um einen angegebenen Winkel."
plain: "Schlicht"
plainDescription: "Deaktiviert jegliche MFM-Syntax, die sich innerhalb dieses MFM-Effekts befindet."
plainDescription: "Deaktiviert jegliche MFM-Syntax, die sich innerhalb dieses MFM-Effekts\
\ befindet."
_instanceTicker:
none: "Nie anzeigen"
remote: "Für Benutzer fremder Instanzen anzeigen"
@ -1071,15 +1199,23 @@ _menuDisplay:
hide: "Ausblenden"
_wordMute:
muteWords: "Stummgeschaltete Wörter"
muteWordsDescription: "Zum Nutzen einer \"UND\"-Verknüpfung Einträge mit Leerzeichen trennen, zum Nutzen einer \"ODER\"-Verknüpfung Einträge mit einem Zeilenumbruch trennen."
muteWordsDescription2: "Umgib Schlüsselworter mit Schrägstrichen, um Reguläre Ausdrücke zu verwenden."
softDescription: "Notizen, die die angegebenen Konditionen erfüllen, in der Chronik ausblenden."
hardDescription: "Verhindern, dass Notizen, die die angegebenen Konditionen erfüllen, der Chronik hinzugefügt werden. Zudem werden diese Notizen auch nicht der Chronik hinzugefügt, falls die Konditionen geändert werden."
muteWordsDescription: "Zum Nutzen einer \"UND\"-Verknüpfung Einträge mit Leerzeichen\
\ trennen, zum Nutzen einer \"ODER\"-Verknüpfung Einträge mit einem Zeilenumbruch\
\ trennen."
muteWordsDescription2: "Umgib Schlüsselworter mit Schrägstrichen, um Reguläre Ausdrücke\
\ zu verwenden."
softDescription: "Notizen, die die angegebenen Konditionen erfüllen, in der Chronik\
\ ausblenden."
hardDescription: "Verhindern, dass Notizen, die die angegebenen Konditionen erfüllen,\
\ der Chronik hinzugefügt werden. Zudem werden diese Notizen auch nicht der Chronik\
\ hinzugefügt, falls die Konditionen geändert werden."
soft: "Leicht"
hard: "Schwer"
mutedNotes: "Stummgeschaltete Notizen"
_instanceMute:
instanceMuteDescription: "Schaltet alle Notizen/Renotes stumm, die von den gelisteten Instanzen stammen, inklusive Antworten von Benutzern an einen Benutzer einer stummgeschalteten Instanz."
instanceMuteDescription: "Schaltet alle Notizen/Renotes stumm, die von den gelisteten\
\ Instanzen stammen, inklusive Antworten von Benutzern an einen Benutzer einer\
\ stummgeschalteten Instanz."
instanceMuteDescription2: "Instanzen getrennt durch Zeilenumbrüchen angeben"
title: "Blendet Notizen von stummgeschalteten Instanzen aus."
heading: "Liste der stummzuschaltenden Instanzen"
@ -1185,32 +1321,49 @@ _tutorial:
step1_1: "Willkommen!"
step1_2: "Wir werden Sie einrichten. Sie werden im Handumdrehen einsatzbereit sein!"
step2_1: "Bitte füllen Sie zuerst Ihr Profil aus."
step2_2: "Wenn du ein paar Angaben zu deiner Person machst, können andere leichter erkennen, ob sie deine Notizen sehen oder dir folgen wollen."
step2_2: "Wenn du ein paar Angaben zu deiner Person machst, können andere leichter\
\ erkennen, ob sie deine Notizen sehen oder dir folgen wollen."
step3_1: "Jetzt ist es Zeit, einigen Leuten zu folgen!"
step3_2: "Deine Home- und Social-Timeline basiert darauf, wem du folgst, also folge für den Anfang ein paar Accounts."
step3_2: "Deine Home- und Social-Timeline basiert darauf, wem du folgst, also folge\
\ für den Anfang ein paar Accounts."
step4_1: "Wir bringen dich nach draußen."
step4_2: "Für deinen ersten Beitrag machen manche Leute gerne einen {introduction} Beitrag oder ein einfaches \"Hallo Welt!\""
step4_2: "Für deinen ersten Beitrag machen manche Leute gerne einen {introduction}\
\ Beitrag oder ein einfaches \"Hallo Welt!\""
step5_1: "Timelines, Timelines überall!"
step5_2: "Deine Instanz hat {Zeitleisten} verschiedene Zeitleisten aktiviert."
step5_3: "Die Zeitleiste Home {icon} ist die Zeitleiste, in der du die Beiträge deiner Follower sehen kannst."
step5_4: "In der lokalen {Icon} Zeitleiste kannst du die Beiträge aller anderen Mitglieder dieser Instanz sehen."
step5_5: "In der Zeitleiste Empfohlen {icon} kannst du Beiträge von Instanzen sehen, die von den Administratoren empfohlen werden."
step5_6: "In der sozialen {icon} Zeitleiste kannst du Beiträge von Freunden deiner Follower sehen."
step5_7: "In der globalen {icon} Zeitleiste kannst du Beiträge von allen anderen verbundenen Instanzen sehen."
step5_3: "Die Zeitleiste Home {icon} ist die Zeitleiste, in der du die Beiträge\
\ deiner Follower sehen kannst."
step5_4: "In der lokalen {Icon} Zeitleiste kannst du die Beiträge aller anderen\
\ Mitglieder dieser Instanz sehen."
step5_5: "In der Zeitleiste Empfohlen {icon} kannst du Beiträge von Instanzen sehen,\
\ die von den Administratoren empfohlen werden."
step5_6: "In der sozialen {icon} Zeitleiste kannst du Beiträge von Freunden deiner\
\ Follower sehen."
step5_7: "In der globalen {icon} Zeitleiste kannst du Beiträge von allen anderen\
\ verbundenen Instanzen sehen."
step6_1: "Also, was ist das hier?"
step6_2: "Nun, du bist nicht nur Calckey beigetreten. Du bist einem Portal zum Fediversum beigetreten, einem zusammenhängenden Netzwerk von Tausenden von Servern, genannt \"Instanzen\"."
step6_3: "Jeder Server funktioniert auf unterschiedliche Weise, und nicht auf allen Servern läuft Calckey. Dieser hier aber schon! Es ist ein bisschen kompliziert, aber du wirst den Dreh schnell raus haben."
step6_2: "Nun, du bist nicht nur Calckey beigetreten. Du bist einem Portal zum Fediversum\
\ beigetreten, einem zusammenhängenden Netzwerk von Tausenden von Servern, genannt\
\ \"Instanzen\"."
step6_3: "Jeder Server funktioniert auf unterschiedliche Weise, und nicht auf allen\
\ Servern läuft Calckey. Dieser hier aber schon! Es ist ein bisschen kompliziert,\
\ aber du wirst den Dreh schnell raus haben."
step6_4: "Jetzt geh, erkunde und hab Spaß!"
_2fa:
alreadyRegistered: "Du hast bereits ein Gerät für Zwei-Faktor-Authentifizierung registriert."
alreadyRegistered: "Du hast bereits ein Gerät für Zwei-Faktor-Authentifizierung\
\ registriert."
registerDevice: "Neues Gerät registrieren"
registerKey: "Neuen Sicherheitsschlüssel registrieren"
step1: "Installiere zuerst eine Authentifizierungsapp (z.B. {a} oder {b}) auf deinem Gerät."
step1: "Installiere zuerst eine Authentifizierungsapp (z.B. {a} oder {b}) auf deinem\
\ Gerät."
step2: "Dann, scanne den angezeigten QR-Code mit deinem Gerät."
step2Url: "Nutzt du ein Desktopprogramm kannst du alternativ diese URL eingeben:"
step3: "Gib zum Abschluss den Token ein, der von deiner App angezeigt wird."
step4: "Alle folgenden Anmeldungsversuche werden ab sofort die Eingabe eines solchen Tokens benötigen."
securityKeyInfo: "Du kannst neben Fingerabdruck- oder PIN-Authentifizierung auf deinem Gerät auch Anmeldung mit Hilfe eines FIDO2-kompatiblen Hardware-Sicherheitsschlüssels einrichten."
step4: "Alle folgenden Anmeldungsversuche werden ab sofort die Eingabe eines solchen\
\ Tokens benötigen."
securityKeyInfo: "Du kannst neben Fingerabdruck- oder PIN-Authentifizierung auf\
\ deinem Gerät auch Anmeldung mit Hilfe eines FIDO2-kompatiblen Hardware-Sicherheitsschlüssels\
\ einrichten."
_permissions:
"read:account": "Deine Benutzerkontoinformationen lesen"
"write:account": "Deine Benutzerkontoinformationen bearbeiten"
@ -1242,11 +1395,15 @@ _permissions:
"write:channels": "Kanäle bedienen"
"read:gallery": "Beiträge deiner Galerie lesen"
"write:gallery": "Deine Galerie bearbeiten"
"read:gallery-likes": "Liste deiner mit \"Gefällt mir\" markierten Galerie-Beiträge lesen"
"write:gallery-likes": "Liste deiner mit \"Gefällt mir\" markierten Galerie-Beiträge bearbeiten"
"read:gallery-likes": "Liste deiner mit \"Gefällt mir\" markierten Galerie-Beiträge\
\ lesen"
"write:gallery-likes": "Liste deiner mit \"Gefällt mir\" markierten Galerie-Beiträge\
\ bearbeiten"
_auth:
shareAccess: "Möchtest du „{name}“ authorisieren, auf dieses Benutzerkonto zugreifen zu können?"
shareAccessAsk: "Bist du dir sicher, dass du diese Anwendung authorisieren möchtest, auf dein Benutzerkonto zugreifen zu können?"
shareAccess: "Möchtest du „{name}“ authorisieren, auf dieses Benutzerkonto zugreifen\
\ zu können?"
shareAccessAsk: "Bist du dir sicher, dass du diese Anwendung authorisieren möchtest,\
\ auf dein Benutzerkonto zugreifen zu können?"
permissionAsk: "Diese Anwendung fordert folgende Berechtigungen"
pleaseGoBack: "Bitte kehre zur Anwendung zurück"
callback: "Es wird zur Anwendung zurückgekehrt"
@ -1344,7 +1501,8 @@ _profile:
youCanIncludeHashtags: "Du kannst auch Hashtags in deiner Profilbeschreibung verwenden."
metadata: "Zusätzliche Informationen"
metadataEdit: "Zusätzliche Informationen bearbeiten"
metadataDescription: "Hierdurch kannst du auf deinem Profil zusätzliche Informationsblöcke anzeigen lassen."
metadataDescription: "Hierdurch kannst du auf deinem Profil zusätzliche Informationsblöcke\
\ anzeigen lassen."
metadataLabel: "Beschriftung"
metadataContent: "Inhalt"
changeAvatar: "Profilbild ändern"
@ -1424,7 +1582,8 @@ _pages:
chooseBlock: "Block hinzufügen"
selectType: "Typ auswählen"
enterVariableName: "Gib einen Variablennamen ein"
variableNameIsAlreadyUsed: "Dieser Name wird bereits von einer anderen Variable verwendet"
variableNameIsAlreadyUsed: "Dieser Name wird bereits von einer anderen Variable\
\ verwendet"
contentBlocks: "Inhalt"
inputBlocks: "Eingabe"
specialBlocks: "Spezial"
@ -1665,7 +1824,8 @@ _pages:
_for:
arg1: "Anzahl der Schleifendurchläufe"
arg2: "Aktion"
typeError: "Slot {slot} akzeptiert Werte vom Typ „{expect}“, aber es wurde ein „{actual}“ Wert angegeben!"
typeError: "Slot {slot} akzeptiert Werte vom Typ „{expect}“, aber es wurde ein\
\ „{actual}“ Wert angegeben!"
thereIsEmptySlot: "Slot {slot} ist leer!"
types:
string: "Text"
@ -1689,7 +1849,8 @@ _notification:
youRenoted: "Renote deiner Notiz von {name}"
youGotPoll: "{name} hat in deiner Umfrage abgestimmt"
youGotMessagingMessageFromUser: "{name} hat dir eine Chatnachricht gesendet"
youGotMessagingMessageFromGroup: "In die Gruppe {name} wurde eine Chatnachricht gesendet"
youGotMessagingMessageFromGroup: "In die Gruppe {name} wurde eine Chatnachricht\
\ gesendet"
youWereFollowed: "ist dir gefolgt"
youReceivedFollowRequest: "Du hast eine Follow-Anfrage erhalten"
yourFollowRequestAccepted: "Deine Follow-Anfrage wurde akzeptiert"
@ -1728,9 +1889,11 @@ _deck:
profile: "Profil"
newProfile: "Neues Profil"
deleteProfile: "Profil löschen"
introduction: "Erstelle eine auf dich zugeschneiderte Benutzeroberfläche durch das Aneinanderreihen von Spalten!"
introduction: "Erstelle eine auf dich zugeschneiderte Benutzeroberfläche durch das\
\ Aneinanderreihen von Spalten!"
introduction2: "Klicke auf das + rechts um wann immer du möchtest neue Spalten hinzuzufügen."
widgetsIntroduction: "Drücke bitte \"Widgets bearbeiten\" im Spaltenmenü und füge ein Widget hinzu."
widgetsIntroduction: "Drücke bitte \"Widgets bearbeiten\" im Spaltenmenü und füge\
\ ein Widget hinzu."
_columns:
main: "Hauptspalte"
widgets: "Widgets"
@ -1740,3 +1903,27 @@ _deck:
list: "Listen"
mentions: "Erwähnungen"
direct: "Direktnachrichten"
enableRecommendedTimeline: Empfohlenen Zeitplan aktivieren
secureMode: Sicherer Modus (Autorisierter Abruf)
instanceSecurity: Instanzsicherheit
manageGroups: Gruppen verwalten
noThankYou: Nein, danke
privateMode: Privater Modus
enableEmojiReactions: Emoji-Reaktionen aktivieren
flagSpeakAsCat: Wie eine Katze sprechen
showEmojisInReactionNotifications: Emojis in Reaktionsbenachrichtigungen anzeigen
userSaysSomethingReason: '{name} sagte {reason}'
hiddenTagsDescription: 'Liste die Hashtags (ohne #) welche du von Trending und Explore
verstecken möchtest. Versteckte Hashtags sind durch andere Wege weiterhin auffindbar.'
addInstance: Instanz hinzufügen
flagSpeakAsCatDescription: Deine Posts werden im Katzenmodus "nya-ifiziert"
hiddenTags: Versteckte Hashtags
antennaInstancesDescription: Nenne einen Instanzen-Host pro Zeile
secureModeInfo: Bei Anfragen an andere Instanzen nicht ohne Nachweis zurücksenden.
renoteMute: Boosts stummschalten
renoteUnmute: Boosts aktivieren
noInstances: Es gibt keine Instanzen
privateModeInfo: Wenn diese Option aktiviert ist, können nur Instanzen auf der Whitelist
mit Deinen Instanzen föderieren. Alle Beiträge werden für die Öffentlichkeit verborgen.
allowedInstances: Instanzen auf der Whitelist
selectInstance: Wähle eine Instanz

View file

@ -1,22 +1,21 @@
---
_lang_: "Ελληνικά"
monthAndDay: "{μήνας}/{ημέρα}"
monthAndDay: "{day}/{month}"
search: "Αναζήτηση"
notifications: "Ειδοποιήσεις"
username: "Όνομα μέλους"
password: "Κωδικός πρόσβασης"
forgotPassword: "Ξέχασα τον κωδικό πρόσβασης"
fetchingAsApObject: "Μαζεύοντας από το Fediverse..."
fetchingAsApObject: "Άντληση από το Fediverse"
ok: "Εντάξει"
gotIt: "Τό'πιασα!"
cancel: "Ακύρωση"
enterUsername: "Εισάγετε το όνομα μέλους"
renotedBy: "Κοινοποιήθηκε από {user}"
noNotes: "Δεν υπάρχουν σημειώματα"
enterUsername: "Εισαγωγή ονόματος μέλους"
renotedBy: "Προωθήθηκε από {user}"
noNotes: "Δεν υπάρχουν δημοσιεύσεις"
noNotifications: "Δεν υπάρχουν ειδοποιήσεις"
settings: "Ρυθμίσεις"
basicSettings: "Βασικές ρυθμίσεις"
otherSettings: "Άλλες ρυθμίσεις"
basicSettings: "Βασικές Ρυθμίσεις"
otherSettings: "Άλλες Ρυθμίσεις"
openInWindow: "Άνοιγμα σε παράθυρο"
profile: "Προφίλ"
timeline: "Χρονολόγιο"
@ -24,24 +23,25 @@ noAccountDescription: "Αυτό το μέλος δεν έχει γράψει β
login: "Σύνδεση"
loggingIn: "Συνδέεστε"
logout: "Αποσύνδεση"
signup: "Δημιουργία λογαριασμού"
signup: "Εγγραφή"
uploading: "Ανέβασμα..."
save: "Αποθήκευση"
users: "Μέλη"
addUser: "Προσθήκη μέλους"
favorite: "Προσθήκη στα αγαπημένα"
favorites: "Αγαπημένα"
unfavorite: "Αφαίρεση από αγαπημένα"
favorited: "Προστέθηκε στα αγαπημένα."
alreadyFavorited: "Έχει ήδη προστεθεί στα αγαπημένα."
cantFavorite: "Αδυναμία προσθήκης στα αγαπημένα."
favorite: "Προσθήκη στους σελιδοδείκτες"
favorites: "Σελιδοδείκτες"
unfavorite: "Αφαίρεση από τους σελιδοδείκτες"
favorited: "Προστέθηκε στους σελιδοδείκτες."
alreadyFavorited: "Έχει ήδη προστεθεί στους σελιδοδείκτες."
cantFavorite: "Αδυναμία προσθήκης στους σελιδοδείκτες."
pin: "Καρφίτσωμα στο προφίλ"
unpin: "Ξεκαρφίτσωμα από το προφίλ"
copyContent: "Αντιγραφή περιεχομένων"
copyLink: "Αντιγραφή συνδέσμου"
delete: "Διαγραφή"
deleteAndEdit: "Διαγραφή και επεξεργασία"
deleteAndEditConfirm: "Σίγουρα θέλετε να διαγράψετε αυτό το σημείωμα και να το επεξεργαστείτε; Θα χάσετε όλες τις αντιδράσεις, κοινοποιήσεις και απαντήσεις σε αυτό."
deleteAndEditConfirm: "Σίγουρα θέλετε να διαγράψετε αυτή τη δημοσίευση και να την\
\ επεξεργαστείτε; Θα χάσετε όλες τις αντιδράσεις, προωθήσεις και απαντήσεις σε αυτήν."
addToList: "Προσθήκη στη λίστα"
sendMessage: "Αποστολή μηνύματος"
copyUsername: "Αντιγραφή ονόματος μέλους"
@ -55,20 +55,22 @@ receiveFollowRequest: "Λάβατε αίτημα ακολούθησης"
followRequestAccepted: "Το αίτημα ακολούθησης έγινε δεκτό"
mention: "Επισήμανση"
mentions: "Επισημάνσεις"
directNotes: "Απευθείας σημειώματα"
importAndExport: "Εισαγωγή / Εξαγωγή"
directNotes: "Απευθείας μηνύματα"
importAndExport: "Εισαγωγή/Εξαγωγή Δεδομένων"
import: "Εισαγωγή"
export: "Εξαγωγή"
files: "Αρχεία"
download: "Λήψη"
driveFileDeleteConfirm: "Θέλετε σίγουρα να διαγράψετε το αρχείο \"{name}\"; Τα σημειώματα με αυτό το συνημμένο αρχείο επίσης θα διαγραφούν."
download: "Κατέβασμα"
driveFileDeleteConfirm: "Θέλετε σίγουρα να διαγράψετε το αρχείο \"{name}\"; Οι δημοσιεύσεις\
\ με αυτό το συνημμένο αρχείο επίσης θα διαγραφούν."
unfollowConfirm: "Θέλετε σίγουρα να σταματήσετε να ακολουθείτε το μέλος {name};"
exportRequested: "Ζητήσατε μία εξαγωγή. Αυτό μπορεί να πάρει κάποιον χρόνο. Επίσης θα προστεθεί στον Δίσκο σας μόλις ολοκληρωθεί."
importRequested: "Ζητήσατε μία εισαγωγή. Αυτό μπορεί να πάρει κάποιον χρόνο."
exportRequested: "Ζητήσατε μία εξαγωγή. Αυτό μπορεί να πάρει κάποιον χρόνο. Θα προστεθεί\
\ στον Αποθηκευτικό Χώρο σας μόλις ολοκληρωθεί."
importRequested: "Ζητήσατε μια εισαγωγή. Αυτό μπορεί να πάρει κάποιον χρόνο."
lists: "Λίστες"
noLists: "Δεν έχετε λίστες"
note: "Σημείωμα"
notes: "Σημειώματα"
note: "Δημοσίευση"
notes: "Δημοσιεύσεις"
following: "Ακολουθεί"
followers: "Ακολουθούν"
followsYou: "Σε ακολουθεί"
@ -78,69 +80,74 @@ error: "Σφάλμα"
somethingHappened: "Προέκυψε ένα σφάλμα"
retry: "Προσπάθεια ξανά"
pageLoadError: "Ένα σφάλμα προέκυψε φορτώνοντας τη σελίδα."
pageLoadErrorDescription: "Αυτό κανονικά προκαλείται από σφάλματα δικτύου ή από την προσωρινή μνήμη του προγράμματος περιήγησης. Δοκιμάστε να σβήσετε την προσωρινή μνήμη (cache) και ξαναδοκιμάστε μετά από λίγο."
serverIsDead: "Αυτός ο server δεν αποκρίνεται. Παρακαλώ περιμέντε λίγο και δοκιμάστε ξανά."
youShouldUpgradeClient: "Για να δείτε αυτή τη σελίδα, παρακαλώ επαναφορτώστε για να ενημερωθεί το πρόγραμμα."
pageLoadErrorDescription: "Αυτό κανονικά προκαλείται από σφάλματα δικτύου ή από την\
\ προσωρινή μνήμη του προγράμματος περιήγησης. Δοκιμάστε να σβήσετε την προσωρινή\
\ μνήμη (cache) και να δοκιμάσετε ξανά μετά από λίγο."
serverIsDead: "Αυτός ο διακομιστής (server) δεν αποκρίνεται. Παρακαλώ περιμένετε λίγο\
\ και δοκιμάστε ξανά."
youShouldUpgradeClient: "Για να δείτε αυτή τη σελίδα, παρακαλώ επαναφορτώστε για να\
\ γίνει ενημέρωση."
enterListName: "Πληκτρολογήστε ένα όνομα για τη λίστα"
privacy: "Ιδιωτικότητα"
makeFollowManuallyApprove: "Τα αιτήματα ακολούθησης χρειάζονται έγκριση"
defaultNoteVisibility: "Προεπιλεγμένη ορατότητα"
follow: "Ακολουθήστε"
followRequest: "Στείλτε αίτημα ακολούθησης"
followRequest: "Ακολουθήστε"
followRequests: "Αιτήματα ακολούθησης"
unfollow: "Να μην ακολουθώ"
followRequestPending: "Το αίτημα ακολούθησης εκκρεμεί"
enterEmoji: "Εισάγετε ένα emoji"
renote: "Κοινοποίηση σημειώματος"
unrenote: "Ακύρωση κοινοποίησης"
renoted: "Κοινοποιήθηκε."
cantRenote: "Αυτή η δημοσίευση δεν μπορεί να κοινοποιηθεί."
cantReRenote: "Μία κοινοποίηση δεν μπορεί να κοινοποιηθεί."
renote: "Προώθηση"
unrenote: "Αναίρεση προώθησης"
renoted: "Προωθήθηκε."
cantRenote: "Αυτή η δημοσίευση δεν μπορεί να προωθηθεί."
cantReRenote: "Μία προώθηση δεν μπορεί να προωθηθεί."
quote: "Παράθεση"
pinnedNote: "Καρφιτσωμένο σημείωμα"
pinnedNote: "Καρφιτσωμένη δημοσίευση"
pinned: "Καρφίτσωμα στο προφίλ"
you: "Εσύ"
clickToShow: "Κάντε κλικ για εμφάνιση"
add: "Προσθέστε"
add: "Προσθήκη"
reaction: "Αντιδράσεις"
reactionSetting: "Αντιδράσεις για εμφάνιση στην επιλογή αντίδρασης"
reactionSettingDescription2: "Σύρετε για να αλλάξετε τη σειρά, κάντε κλικ για να διαγράψετε, πατήστε \"+\" για να προσθέσετε."
rememberNoteVisibility: "Θυμήσου τις ρυθμίσεις ορατότητας σημειώματος"
attachCancel: "Διαγραφή αρχείου"
reactionSetting: "Αντιδράσεις που θα εμφανίζονται στον επιλογέα"
reactionSettingDescription2: "Σύρετε για να αλλάξετε τη σειρά, κάντε κλικ για να διαγράψετε,\
\ πατήστε \"+\" για να προσθέσετε."
rememberNoteVisibility: "Θυμήσου τις ρυθμίσεις ορατότητας για τις δημοσιεύσεις"
attachCancel: "Αφαίρεση επισυναπτόμενου"
enterFileName: "Πληκτρολογήστε όνομα αρχείου"
mute: "Σίγαση"
unmute: "Άρση σίγασης"
unmute: "Διακοπή σίγασης"
block: "Μπλοκάρισμα"
unblock: "Άρση μπλοκαρίσματος"
unblock: "Διακοπή μπλοκαρίσματος"
suspend: "Αποβολή"
unsuspend: "Άρση αποβολής"
unsuspend: "Διακοπή αποβολής"
blockConfirm: "Θέλετε σίγουρα να μπλοκάρετε αυτόν τον λογαριασμό;"
unblockConfirm: "Θέλετε σίγουρα να ξεμπλοκάρετε αυτόν τον λογαριασμό;"
suspendConfirm: "Θέλετε σίγουρα να αποβάλλετε αυτόν τον λογαριασμό;"
suspendConfirm: "Θέλετε σίγουρα να αποβάλετε αυτόν τον λογαριασμό;"
unsuspendConfirm: "Θέλετε σίγουρα να άρετε την αποβολή αυτού του λογαριασμού;"
selectList: "Επιλέξτε μία λίστα"
selectAntenna: "Επιλέξτε μία αντένα"
selectWidget: "Επιλέξτε ένα μαραφέτι"
editWidgets: "Επεξεργασία μαραφετίων"
selectList: "Επιλέξτε μια λίστα"
selectAntenna: "Επιλέξτε μια αντένα"
selectWidget: "Επιλέξτε ένα πρόσθετο"
editWidgets: "Επεξεργασία πρόσθετων"
editWidgetsExit: "Ολοκληρώθηκε"
customEmojis: "Επιπλέον emoji"
customEmojis: "Προσαρμοσμένα Emoji"
emojiName: "Όνομα emoji"
addEmoji: "Προσθήκη emoji"
settingGuide: "Συνιστώμενες ρυθμίσεις"
flagAsBot: "Αυτός ο λογαριασμός είναι bot"
flagAsCat: "Αυτός ο λογαριασμός είναι γάτα"
addEmoji: "Προσθήκη"
settingGuide: "Προτεινόμενες ρυθμίσεις"
flagAsBot: "Δήλωση αυτού του λογαριασμού ως bot"
flagAsCat: "Είσαι γατί; \U0001F63A"
flagShowTimelineReplies: "Εμφάνιση απαντήσεων στο χρονολόγιο"
addAccount: "Προσθήκη λογαριασμού"
general: "Γενικές"
wallpaper: "Ταπετσαρία"
setWallpaper: "Ορισμός ταπετσαρίας"
removeWallpaper: "Διαγραφή ταπετσαρίας"
removeWallpaper: "Αφαίρεση ταπετσαρίας"
searchWith: "Αναζήτηση: {q}"
youHaveNoLists: "Δεν έχετε λίστες"
followConfirm: "Θέλετε σίγουρα να ακολουθήσετε τον λογαριασμό {name};"
host: "Φιλοξενεί"
host: "Φιλοξενεί (Host)"
selectUser: "Επιλέξτε ένα μέλος"
recipient: "Αποδέκτης-τρια"
recipient: "Αποδέκτης-τρια(-ες)"
annotation: "Σχόλια"
federation: "Ομοσπονδία"
storageUsage: "Χρήση χώρου"
@ -148,11 +155,11 @@ version: "Έκδοση"
metadata: "Μεταδεδομένα"
network: "Δίκτυο"
disk: "Δίσκος"
instanceInfo: "Πληροφορίες του instance"
instanceInfo: "Πληροφορίες Instance"
statistics: "Στατιστικά"
clearQueue: "Εκκαθάριση ουράς"
clearQueueConfirmTitle: "Θέλετε να διαγράψετε την ουρά;"
clearCachedFiles: "Εκκαθάριση προσωρινής μνήμης"
clearCachedFiles: "Εκκαθάριση προσωρινής μνήμης (cache)"
done: "Ολοκληρώθηκε"
attachFile: "Επισύναψη αρχείων"
more: "Περισσότερα!"
@ -166,12 +173,12 @@ messaging: "Συνομιλία"
upload: "Ανεβάστε"
fromDrive: "Από τον Αποθηκευτικό Χώρο"
fromUrl: "Από URL"
uploadFromUrl: "Ανεβάστε από URL"
explore: "Εξερευνήστε"
uploadFromUrl: "Ανέβασμα από URL"
explore: "Εξερεύνηση"
messageRead: "Διαβάστηκε"
startMessaging: "Ξεκινήστε μία συνομιλία"
startMessaging: "Ξεκινήστε μια νέα συνομιλία"
nUsersRead: "διαβάστηκε από {n}"
tos: "Όροι χρήσης"
tos: "Όροι Χρήσης"
start: "Ας αρχίσουμε"
home: "Κεντρικό"
activity: "Δραστηριότητα"
@ -180,8 +187,8 @@ birthday: "Γενέθλια"
registeredDate: "Έγινε μέλος στις"
location: "Τοποθεσία"
theme: "Θέματα"
light: "Ανοιχτόχρωμο"
dark: "Σκούρο"
light: "Φωτεινό"
dark: "Σκοτεινό"
drive: "Αποθηκευτικός Χώρος"
fileName: "Όνομα αρχείου"
selectFile: "Επιλέξτε ένα αρχείο"
@ -189,16 +196,16 @@ selectFiles: "Επιλέξτε αρχεία"
selectFolder: "Επιλέξτε φάκελο"
selectFolders: "Επιλέξτε φακέλους"
renameFile: "Μετονομασία αρχείου"
addFile: "Προσθήκη αρχείου"
addFile: "Προσθέστε ένα αρχείο"
emptyDrive: "Ο Αποθηκευτικός Χώρος σας είναι άδειος"
copyUrl: "Αντιγραφή URL"
rename: "Αλλαγή ονόματος"
avatar: "Εικονίδιο"
banner: "Πανό"
copyUrl: "Αντιγραφή διεύθυνσης URL"
rename: "Μετονομασία"
avatar: "Άβαταρ"
banner: "Εξώφυλλο"
reload: "Ανανέωση"
doNothing: "Αγνόηση"
watch: "Παρακολούθηση"
unwatch: "Τέλος παρακολούθησης"
unwatch: "Διακοπή παρακολούθησης"
accept: "Αποδοχή"
reject: "Απόρριψη"
normal: "Κανονικό"
@ -212,23 +219,23 @@ connectService: "Σύνδεση"
disconnectService: "Αποσύνδεση"
registration: "Εγγραφή"
pinnedPages: "Καρφιτσωμένες Σελίδες"
pinnedNotes: "Καρφιτσωμένα σημειώματα"
pinnedNotes: "Καρφιτσωμένες δημοσιεύσεις"
antennas: "Αντένες"
manageAntennas: "Διαχείριση αντενών"
manageAntennas: "Διαχείριση Αντενών"
name: "Όνομα"
antennaSource: "Πηγή αντένας"
antennaSource: "Πηγή Αντένας"
antennaKeywords: "Λέξεις-κλειδιά για παρακολούθηση"
antennaExcludeKeywords: "Λέξεις-κλειδιά για αποκλεισμό"
notifyAntenna: "Ειδοποίηση για νέα σημειώματα"
withFileAntenna: "Μόνο σημειώματα με αρχεία"
antennaExcludeKeywords: "Λέξεις-κλειδιά για εξαίρεση"
notifyAntenna: "Ειδοποίηση για νέες δημοσιεύσεις"
withFileAntenna: "Μόνο δημοσιεύσεις με αρχεία"
caseSensitive: "Διάκριση Πεζών-Κεφαλαίων"
popularTags: "Δημοφιλείς ετικέτες"
userList: "Λίστες"
about: "Πληροφορίες"
moderator: "Συντονιστής"
about: "Σχετικά με"
moderator: "Συντονιστής/στρια"
moderation: "Συντονισμός"
cacheClear: "Εκκαθάριση προσωρινής μνήμης"
markAsReadAllNotifications: "Όλες οι ειδοποιήσεις διαβάστηκαν"
cacheClear: "Εκκαθάριση προσωρινής μνήμης (cache)"
markAsReadAllNotifications: "Σημειώστε όλες τις ειδοποιήσεις ως διαβασμένες"
group: "Ομάδα"
groups: "Ομάδες"
createGroup: "Δημιουργία ομάδας"
@ -236,13 +243,13 @@ ownedGroups: "Οι ομάδες σας"
groupName: "Όνομα ομάδας"
members: "Μέλη"
transfer: "Μεταφορά"
messagingWithUser: "Ιδιωτική συνομιλία"
messagingWithUser: "Προσωπική συνομιλία"
messagingWithGroup: "Ομαδική συνομιλία"
title: "Τίτλος"
text: "Κείμενο"
enable: "Ενεργοποίηση"
next: "Επόμενο"
noteOf: "Σημείωμα από {user}"
noteOf: "Δημοσίευση από {user}"
inviteToGroup: "Πρόσκληση στην ομάδα"
quoteAttached: "Παράθεση"
signinRequired: "Παρακαλούμε δημιουργήστε λογαριασμό ή συνδεθείτε πριν συνεχίσετε"
@ -250,26 +257,26 @@ category: "Κατηγορία"
tags: "Ετικέτες"
createAccount: "Δημιουργία λογαριασμού"
local: "Τοπικό"
remote: "Απομακρυσμένo"
remote: "Απομακρυσμένο"
total: "Σύνολο"
appearance: "Εμφάνιση"
accountSettings: "Ρυθμίσεις λογαριασμού"
accountSettings: "Ρυθμίσεις Λογαριασμού"
sounds: "Ήχοι"
sound: "Ήχοι"
listen: "Ακρόαση"
showInPage: "Εμφάνιση στη σελίδα"
volume: "Ένταση"
masterVolume: "Κύρια ένταση"
masterVolume: "Κεντρική ένταση"
details: "Λεπτομέρειες"
install: "Εγκατάσταση"
uninstall: "Κατάργηση εγκατάστασης"
install: "Εγκαταστήστε"
uninstall: "Απεγκατάσταση"
manage: "Διαχείριση"
smtpHost: "Φιλοξενεί"
smtpHost: "Φιλοξενεί (Host)"
smtpUser: "Όνομα μέλους"
smtpPass: "Κωδικός πρόσβασης"
smtpPass: "Κωδικός"
notificationSetting: "Ρυθμίσεις ειδοποιήσεων"
notificationSettingDesc: "Επιλέξτε τους τύπους ειδοποιήσεων που εμφανίζονται"
switchUi: "Αλλαγή UI"
notificationSettingDesc: "Επιλέξτε τους τύπους ειδοποιήσεων για προβολή."
switchUi: "Διάταξη"
clip: "Κλιπ"
driveFilesCount: "Αριθμός αρχείων Αποθηκευτικού Χώρου"
driveUsage: "Χρήση Αποθηκευτικού Χώρου"
@ -293,7 +300,8 @@ manageAccounts: "Διαχείριση Λογαριασμών"
searchByGoogle: "Αναζήτηση"
file: "Αρχεία"
recommended: "Προτεινόμενα"
cannotUploadBecauseNoFreeSpace: "Το ανέβασμα απέτυχε λόγω ανεπαρκούς Αποθηκευτικού Χώρου"
cannotUploadBecauseNoFreeSpace: "Το ανέβασμα απέτυχε λόγω ανεπαρκούς Αποθηκευτικού\
\ Χώρου."
_email:
_follow:
title: "Έχετε ένα νέο ακόλουθο"
@ -327,15 +335,20 @@ _ago:
monthsAgo: "{n} μήνα(ες) πριν"
yearsAgo: "{n} έτος(η) πριν"
_permissions:
"write:drive": "Επεξεργαστείτε ή διαγράψτε τα αρχεία και τους φακέλους του Αποθηκευτικού Χώρου σας"
"read:favorites": "Δείτε τη λίστα των αγαπημένων σας"
"write:favorites": "Επεξεργαστείτε τη λίστα των αγαπημένων σας"
"write:drive": "Επεξεργαστείτε ή διαγράψτε τα αρχεία και τους φακέλους του Αποθηκευτικού\
\ Χώρου σας"
"read:favorites": "Δείτε τη λίστα με τους σελιδοδείκτες σας"
"write:favorites": "Επεξεργαστείτε τη λίστα με τους σελιδοδείκτες σας"
"read:messaging": "Δείτε τις συνομιλίες σας"
"write:messaging": "Γράψτε ή διαγράψτε μηνύματα συνομιλίας"
"read:notifications": "Δείτε τις ειδοποιήσεις σας"
"write:notifications": "Διαχειριστείτε τις ειδοποιήσεις σας"
"read:pages": "Δείτε τις Σελίδες σας"
"write:pages": "Επεξεργαστείτε ή διαγράψτε τις σελίδες σας"
"write:gallery-likes": Επεξεργασία της λίστας των αγαπημένων σας δημοσιεύσεων γκαλερί
"read:gallery": Δείτε την γκαλερί σας
"write:gallery": Επεξεργασία της γκαλερί σας
"read:gallery-likes": Δείτε τη λίστα των αγαπημένων σας δημοσιεύσεων γκαλερί
_antennaSources:
all: "Όλα τα σημειώματα"
homeTimeline: "Σημειώματα από μέλη που ακολουθείτε"
@ -368,6 +381,7 @@ _visibility:
_profile:
name: "Όνομα"
username: "Όνομα μέλους"
changeAvatar: Αλλαγή άβαταρ
_exportOrImport:
allNotes: "Όλα τα σημειώματα"
followingList: "Ακολουθεί"
@ -398,11 +412,409 @@ _notification:
reply: "Απάντηση"
renote: "Κοινοποίηση σημειώματος"
_deck:
widgetsIntroduction: "Παρακαλούμε επιλέξτε \"Επεξεργασία μαραφετίων\" στο μενού και προσθέστε μαραφέτι."
widgetsIntroduction: "Παρακαλούμε επιλέξτε \"Επεξεργασία πρόσθετων\" στο μενού και\
\ προσθέστε μαραφέτι."
_columns:
widgets: "Μαραφέτια"
widgets: "Πρόσθετα"
notifications: "Ειδοποιήσεις"
tl: "Χρονολόγιο"
antenna: "Αντένες"
list: "Λίστα"
mentions: "Επισημάνσεις"
sensitive: Ευαίσθητο περιεχόμενο (NSFW)
createFolder: Δημιουργία φακέλου
uploadFromUrlDescription: Το URL του αρχείου που θέλετε να ανεβάσετε
emptyFolder: Αυτός ο φάκελος είναι άδειος
unableToDelete: Αδυναμία διαγραφής
recentlyUpdatedUsers: Πρόσφατα ενεργά μέλη
recentlyRegisteredUsers: Νέα μέλη
exploreUsersCount: Υπάρχουν {count} μέλη
help: Βοήθεια
inputNewFileName: Πληκτρολογήστε ένα νέο όνομα αρχείου
nothing: Δεν υπάρχει τίποτα να δείτε εδώ
newNoteRecived: Υπάρχουν νέες δημοσιεύσεις
passwordMatched: Ταιριάζει
unmarkAsSensitive: Αναίρεση επισήμανσης ως Ευαίσθητο Περιεχόμενο (NSFW)
withNFiles: '{n} αρχείο(-α)'
blockedUsers: Μπλοκαρισμένα μέλη
noteDeleteConfirm: Θέλετε σίγουρα να διαγράψετε αυτή τη δημοσίευση;
preview: Προεπισκόπηση
noCustomEmojis: Δεν υπάρχουν emoji
tosUrl: URL Όρων Χρήσης
monthX: '{month}'
markAsReadAllTalkMessages: Σημειώστε όλα τα μηνύματα ως διαβασμένα
inputMessageHere: Γράψτε εδώ το μήνυμά σας
close: Κλείσιμο
newMessageExists: Υπάρχουν νέα μηνύματα
usernameInvalidFormat: Μπορείτε να χρησιμοποιήσετε κεφαλαία και μικρά γράμματα, αριθμούς,
και κάτω παύλες.
tooShort: Πολύ σύντομο
passwordNotMatched: Δεν ταιριάζει
existingAccount: Υπάρχων λογαριασμός
deleteAll: Διαγραφή όλων
chooseEmoji: Επιλέξτε ένα emoji
sort: Ταξινόμηση
descendingOrder: Φθίνουσα
deleteAllFiles: Διαγραφή όλων των αρχείων
userSuspended: Αυτό το μέλος έχει αποβληθεί.
menu: Μενού
divider: Χώρισμα
deletedNote: Διαγραμμένη δημοσίευση
useCw: Απόκρυψη περιεχομένου
description: Περιγραφή
width: Πλάτος
disableAll: Απενεργοποίηση όλων
notificationType: Τύπος ειδοποίησης
wordMute: Σίγαση λέξεων
userSaysSomething: '{name} είπε κάτι'
metrics: Μετρήσεις
overview: Γενική εικόνα
database: Βάση δεδομένων
channel: Κανάλια
other: Άλλα
abuseReports: Αναφορές
reportAbuse: Αναφορά
unclip: Ακύρωση κλιπ
public: Δημόσιο
renotedCount: Αριθμός προωθήσεων που ελήφθησαν
alwaysMarkSensitive: Επισήμανση ως ευαίσθητο περιεχόμενο (NSFW) ως προεπιλογή
markAllAsRead: Σημειώστε τα όλα ως διαβασμένα
_gallery:
like: Μου αρέσει
liked: Αγαπημένες δημοσιεύσεις
my: Η Γκαλερί μου
unlike: Δεν μου αρέσει
showOnRemote: Δείτε στο απομακρυσμένο instance
perDay: Ανά Ημέρα
software: Λογισμικό
cpuAndMemory: CPU και Μνήμη
noUsers: Δεν υπάρχουν μέλη
processing: Επεξεργασία...
changePassword: Αλλαγή κωδικού
security: Ασφάλεια
featured: Προτεινόμενα
keepOriginalUploading: Διατήρηση πρωτότυπης εικόνας
manageGroups: Διαχείριση ομάδων
deleteFolder: Διαγραφή φακέλου
nsfw: Ευαίσθητο περιεχόμενο (NSFW)
nUsersMentioned: Έχει αναφερθεί από {n} μέλη
notFound: Δεν βρέθηκε
markAsReadAllUnreadNotes: Σημειώστε όλες τις δημοσιεύσεις ως διαβασμένες
invites: Προσκλήσεις
quoteQuestion: Να προστεθεί ως Παράθεση;
noMessagesYet: Δεν υπάρχουν μηνύματα ακόμη
onlyOneFileCanBeAttached: Μπορείτε να επισυνάψετε μόνο ένα αρχείο σε ένα μήνυμα
tooLong: Υπερβολικά μακροσκελές
or: Ή
language: Γλώσσα
groupInvited: Προσκληθήκατε σε μία ομάδα
ascendingOrder: Αύξουσα
visibility: Ορατότητα
invisibleNote: Αόρατη δημοσίευση
enableInfiniteScroll: Αυτόματη φόρτωση περισσοτέρων
poll: Ψηφοφορία
enablePlayer: Άνοιγμα προβολής βίντεο
large: Μεγάλο
medium: Μεσαίο
small: Μικρό
postToGallery: Δημιουργία νέας δημοσίευσης γκαλερί
reloadConfirm: Θα θέλατε να ανανεώσετε το χρονολόγιο;
enableAll: Ενεργοποίηση όλων
permission: Εξουσιοδοτήσεις
sample: Δείγμα
copy: Αντιγραφή
display: Προβολή
send: Αποστολή
behavior: Συμπεριφορά
useGlobalSetting: Χρήση παγκόσμιων ρυθμίσεων
abuseMarkAsResolved: Επισήμανση της αναφοράς ως επιλυμένης
openInNewTab: Άνοιγμα σε νέα καρτέλα
_sensitiveMediaDetection:
setSensitiveFlagAutomatically: Επισήμανση ως ευαίσθητο περιεχόμενο (NSFW)
defaultNavigationBehaviour: Προεπιλεγμένη συμπεριφορά περιήγησης
system: Σύστημα
createNew: Δημιουργία νέου
createNewClip: Δημιουργία νέου κλιπ
repliesCount: Αριθμός απεσταλμένων απαντήσεων
optional: Προαιρετικό
renotesCount: Αριθμός προωθήσεων σε δημοσιεύσεις άλλων
addItem: Προσθήκη αντικειμένου
disablePlayer: Κλείσιμο προβολής βίντεο
describeFile: Προσθήκη περιγραφής
enterFileDescription: Πληκτρολογήστε περιγραφή
author: Συντάκτης/τρια
setMultipleBySeparatingWithSpace: Διαχωρίστε πολλαπλές καταχωρήσεις με κενά.
random: Τυχαίο
accountInfo: Πληροφορίες Λογαριασμού
notesCount: Αριθμός δημοσιεύσεων
repliedCount: Αριθμός απαντήσεων που ελήφθησαν
flagAsCatDescription: Θα έχεις γατοαυτιά και θα μιλάς σαν γατί!
muteAndBlock: Σιγάσεις και Μπλοκαρίσματα
mutedUsers: Σιγασμένα μέλη
editProfile: Επεξεργασία προφίλ
pinLimitExceeded: Δεν μπορείτε να καρφιτσώσετε άλλες δημοσιεύσεις
currentPassword: Τρέχων κωδικός
newPassword: Νέος κωδικός
newPasswordRetype: Ξαναπληκτρολογήστε τον νέο κωδικό
notesAndReplies: Δημοσιεύσεις και απαντήσεις
popularUsers: Δημοφιλή μέλη
share: Κοινοποίηση
retype: Πληκτρολογήστε ξανά
invitations: Προσκλήσεις
available: Διαθέσιμο
unavailable: Μη διαθέσιμο
youHaveNoGroups: Δεν έχετε ομάδες
doing: Επεξεργασία...
yourAccountSuspendedTitle: Αυτός ο λογαριασμός έχει αποβληθεί
leaveConfirm: Υπάρχουν αλλαγές που δεν έχουν σωθεί. Θέλετε να τις απορρίψετε;
height: Ύψος
edit: Επεξεργασία
headlineMisskey: Μία ανοιχτού λογισμικού, αποκεντρωμένη πλατφόρμα κοινωνικής δικτύωσης
που θα είναι για πάντα ελεύθερη! 🚀
introMisskey: Καλώς ήρθατε! Το Calckey είναι μία ανοιχτού λογισμικού, αποκεντρωμένη
πλατφόρμα κοινωνικής δικτύωσης που θα είναι για πάντα ελεύθερη! 🚀
markAsSensitive: Επισήμανση ως Ευαίσθητο Περιεχόμενο (NSFW)
autoAcceptFollowed: Αυτόματη έγκριση αιτημάτων ακολούθησης από λογαριασμούς που ακολουθείτε
loginFailed: Αποτυχία σύνδεσης
accountMoved: 'Έχει μεταφερθεί σε νέο λογαριασμό:'
perHour: Ανά Ώρα
remoteUserCaution: Οι πληροφορίες από απομακρυσμένους λογαριασμούς μπορεί να είναι
ατελείς.
folderName: Όνομα φακέλου
renameFolder: Μετονομασία φακέλου
recentUsed: Χρησιμοποιήθηκαν πρόσφατα
deleteAllFilesConfirm: Σίγουρα θέλετε να διαγράψετε όλα τα αρχεία;
removeAllFollowing: Διακοπή ακολούθησης όλων των ακολουθούμενων μελών
userSilenced: Αυτό το μέλος είναι υπό σιώπηση.
makeActive: Ενεργοποίηση
create: Δημιουργία
reportAbuseOf: Αναφορά {name}
cacheRemoteFilesDescription: Όταν αυτή η ρύθμιση είναι απενεργοποιημένη, τα απομακρυσμένα
αρχεία φορτώνονται απευθείας από το απομακρυσμένο instance. Η απενεργοποίηση θα
μειώσει τη χρήση του δίσκου σας, αλλά θα αυξήσει την κίνηση δεδομένων, καθώς δεν
θα δημιουργούνται σμικρύνσεις αρχείων (thumbnails).
registeredAt: Εγγράφηκε στις
latestStatus: Τελευταία κατάσταση
charts: Πίνακες
stopActivityDelivery: Σταμάτα να στέλνεις δραστηριότητες
operations: Λειτουργίες
monitor: Παρακολούθηση
jobQueue: Ουρά εργασιών
blockedInstances: Μπλοκαρισμένα Instances
blockedInstancesDescription: Παραθέστε τις διευθύνσεις (hostnames) των instances που
θέλετε να μπλοκάρετε. Τα παρακάτω instances δεν θα μπορούν πλέον να επικοινωνούν
με αυτό το instance.
intro: Η εγκατάσταση του Calckey τελείωσε! Παρακαλώ δημιουργήστε ένα μέλος διαχειριστή/στρια.
noThankYou: Όχι, ευχαριστώ
addInstance: Προσθήκη instance
renoteMute: Σίγαση προωθήσεων
emojiUrl: Διεύθυνση emoji (URL)
cacheRemoteFiles: Προσωρινή αποθήκευση απομακρυσμένων αρχείων
flagSpeakAsCat: Να μιλάς σαν γατί
flagSpeakAsCatDescription: Οι δημοσιεύσεις σου θα nyaοποιούνται όταν είσαι γατί
selectInstance: Επιλέξτε ένα instance
latestRequestSentAt: Τελευταίο αίτημα στάλθηκε
hiddenTags: Κρυμμένες Ετικέτες (Hashtags)
noInstances: Δεν υπάρχουν instances
renoteUnmute: Διακοπή σίγασης προωθήσεων
flagAsBotDescription: Ενεργοποιήστε αυτή την επιλογή αν αυτός ο λογαριασμός ελέγχεται
από ένα πρόγραμμα. Αν ενεργοποιηθεί, θα λειτουργεί σαν σημάδι για τους προγραμματιστές,
ώστε να αποφύγουν ατέρμονη αλληλεπίδραση με άλλα bots και για να ρυθμίσει τα εσωτερικά
συστήματα του Calckey ώστε να αντιμετωπίζουν αυτόν τον λογαριασμό ως bot.
flagShowTimelineRepliesDescription: Εμφάνιση απαντήσεων μελών σε δημοσιεύσεις άλλων
μελών στο χρονολόγιο.
latestRequestReceivedAt: Τελευταίο αίτημα ελήφθη
blockThisInstance: Μπλοκάρισμα αυτού του instance
clearQueueConfirmText: Τυχόν δημοσιεύσεις στην ουρά που δεν έχουν αποσταλεί δεν θα
ομοσπονδοποιηθούν. Συνήθως αυτή η λειτουργία δεν χρειάζεται.
clearCachedFilesConfirm: Σίγουρα θέλετε να διαγράψετε όλα τα προσωρινά αποθηκευμένα
απομακρυσμένα αρχεία;
default: Προεπιλεγμένο
defaultValueIs: 'Προεπιλεγμένο: {value}'
noJobs: Δεν υπάρχουν εργασίες (jobs)
federating: Ομοσπονδοποιείται
blocked: Μπλοκαρισμένο
suspended: Σε αποβολή
instanceFollowing: Ακολουθεί στο instance
instanceFollowers: Ακόλουθοι του instance
instanceUsers: Μέλη αυτού του instance
retypedNotMatch: Οι καταχωρήσεις δεν ταιριάζουν.
usernameOrUserId: Όνομα μέλους ή ταυτότητα μέλους (id)
removeAreYouSure: Θέλετε σίγουρα να αφαιρέσετε το "{x}";
deleteAreYouSure: Θέλετε σίγουρα να διαγράψετε το "{x}";
resetAreYouSure: Σίγουρα επανεκκίνηση;
uploadFromUrlMayTakeTime: Ίσως πάρει λίγο χρόνο μέχρι το ανέβασμα να ολοκληρωθεί.
noMoreHistory: Δεν υπάρχει περαιτέρω ιστορικό
agreeTo: Συμφωνώ στο {0}
yearsOld: '{age} ετών'
themeForDarkMode: Θέμα για τη Σκοτεινή Λειτουργία
syncDeviceDarkMode: Συγχρονισμός της Σκοτεινής Λειτουργίας με τις ρυθμίσεις της συσκευής
σας
inputNewDescription: Προσθέστε νέα περιγραφή
whenServerDisconnected: Όταν χάνεται η σύνδεση στον σέρβερ
disconnectedFromServer: Η σύνδεση στον σέρβερ έχει χαθεί
instanceDescription: Περιγραφή instance
maintainerEmail: Διεύθυνση email προγραμματιστή/στριας
yearX: '{year}'
enableGlobalTimeline: Ενεργοποίηση παγκόσμιου χρονολογίου
enableLocalTimeline: Ενεργοποίηση τοπικού χρονολογίου
enableRegistration: Ενεργοποίηση εγγραφής νέων μελών
invite: Πρόσκληση
disablingTimelinesInfo: Οι Διαχειρίστριες-ες και οι Συντονιστές-στριες θα έχουν πάντα
πρόσβαση σε όλα τα χρονολόγια, ακόμα κι αν δεν είναι ενεργοποιημένα.
inMb: Σε megabytes
iconUrl: Διεύθυνση URL εικονιδίου
bannerUrl: Διεύθυνση URL εικόνας Εξώφυλλου
pinnedUsers: Καρφιτσωμένα μέλη
hcaptchaSiteKey: Κλειδί του site
recaptcha: Προστασία reCAPTCHA
enableServiceworker: Ενεργοποίηση Ειδοποιήσεων Push για τον browser σας
recentlyDiscoveredUsers: Μέλη που ανακαλύφθηκαν πρόσφατα
twoStepAuthentication: Επαλήθευση δύο παραγόντων
securityKey: Κλειδί ασφάλειας
registerSecurityKey: Καταχωρήστε ένα κλειδί ασφάλειας
resetPassword: Επαναφορά κωδικού
newPasswordIs: Ο νέος κωδικός είναι "{password}"
uploadFolder: Προεπιλεγμένος φάκελος για ανέβασμα αρχείων
joinedGroups: Οι ομάδες που είστε μέλος
checking: Έλεγχος...
invitationCode: Κωδικός πρόσκλησης
normalPassword: Μέτριος κωδικός
weakPassword: Αδύναμος κωδικός
strongPassword: Δυνατός κωδικός
signinWith: Συνδεθείτε με {x}
tapSecurityKey: Βάλτε το κλειδί ασφάλειας
signinFailed: Αδυναμία σύνδεσης. Το όνομα μέλους ή ο κωδικός είναι λάθος.
aboutX: Σχετικά με {x}
useOsNativeEmojis: Χρήση των Emoji του λειτουργικού συστήματος
uiLanguage: Γλώσσα διεπαφής
disableDrawer: Να μη χρησιμοποιούνται μενού σε στιλ συρταριού
noHistory: Δεν υπάρχει διαθέσιμο ιστορικό
joinOrCreateGroup: Λάβετε πρόσκληση για μία ομάδα ή δημιουργήστε τη δική σας.
docSource: Πηγή αυτού του εγγράφου
regenerate: Επαναδημιουργία
fontSize: Μέγεθος γραμματοσειράς
noFollowRequests: Δεν έχετε αιτήματα ακολούθησης σε αναμονή
dashboard: Ταμπλό
clientSettings: Ρυθμίσεις διεπαφής
numberOfDays: Αριθμός ημερών
hideThisNote: Απόκρυψη αυτής της δημοσίευσης
showFeaturedNotesInTimeline: Εμφάνιση προτεινόμενων δημοσιεύσεων στα χρονολόγια
objectStorage: Αποθήκευση Object Storage
useObjectStorage: Χρήση object storage
objectStorageBucket: ''
showFixedPostForm: Εμφάνιση της φόρμας δημοσίευσης στο πάνω μέρος των χρονολογίων
none: Κανένα
unableToProcess: Η επιχείρηση ήταν αδύνατο να ολοκληρωθεί
installedApps: Εφαρμογές με εξουσιοδότηση
state: Κατάσταση
installedDate: Εξουσιοδοτήθηκε στις
lastUsedDate: Χρησιμοποιήθηκε τελευταία φορά στις
scratchpadDescription: Το σημειωματάριο παρέχει ένα περιβάλλον για πειραματισμό με
AiScript. Σε αυτό μπορείτε να γράψετε, να εκτελέσετε, και να δοκιμάσετε τα αποτελέσματα
της αλληλεπίδρασης του AiScript με το Calckey.
scratchpad: Σημειωματάριο
output: Αποτέλεσμα
updateRemoteUser: Ανανέωση πληροφοριών απομακρυσμένου μέλους
disablePagesScript: Απενεργοποίηση του AiScript στις Σελίδες
removeAllFollowingDescription: Η εκτέλεση θα διακόψη την ακολούθηση όλων των μελών
από {host}. Παρακαλούμε εκτελέστε το αν το instance π.χ. δεν υπάρχει πια.
caption: Αυτόματη Περιγραφή
all: Όλα
subscribing: Εγγραφή σε συνδρομή
publishing: Δημοσιεύεται
notResponding: Δεν αποκρίνεται
keepOriginalUploadingDescription: Αποθηκεύει το πρωτότυπο αρχείο όπως είναι. Αν απενεργοποιηθεί,
μία έκδοση για προβολή στο ίντερνετ θα δημιουργηθεί κατά το ανέβασμα.
lookup: Αναζήτηση
lightThemes: Φωτεινά θέματα
darkThemes: Σκοτεινά θέματα
inputNewFolderName: Πληκτρολογήστε ένα νέο όνομα φακέλου
hasChildFilesOrFolders: Εφόσον αυτός ο φάκελος δεν είναι άδειος, δεν μπορεί να διαγραφεί.
integration: Ενσωματώσεις
enableRecommendedTimeline: Ενεργοποίηση χρονολογίου προτεινόμενων
driveCapacityPerLocalAccount: Μέγεθος Αποθηκευτικού Χώρου ανά τοπικό μέλος
driveCapacityPerRemoteAccount: Μέγεθος Αποθηκευτικού Χώρου ανά απομακρυσμένο μέλος
basicInfo: Βασικές πληροφορίες
pinnedClipId: Ταυτότητα (id) του κλιπ για καρφίτσωμα
hcaptcha: Προστασία hCaptcha
enableHcaptcha: Ενεργοποίηση hCaptcha
hcaptchaSecretKey: Μυστικό κλειδί
enableRecaptcha: Ενεργοποίηση reCAPTCHA
recaptchaSiteKey: Κλειδί του site
recaptchaSecretKey: Μυστικό κλειδί
antennaKeywordsDescription: Διαχωρίστε με κενά για συνθήκη ΚΑΙ ή με αλλαγή γραμμής
για συνθήκη Ή.
antennaUsersDescription: Παραθέστε ένα όνομα μέλους ανά γραμμή
antennaInstancesDescription: Παραθέστε ένα instance host ανά γραμμή
withReplies: Να περιλαμβάνονται οι απαντήσεις
withFiles: Να περιλαμβάνουν αρχεία
silence: Σιώπηση
silenceConfirm: Θέλετε σίγουρα να σιωπήσετε αυτό το μέλος;
unsilenceConfirm: Σίγουρα θέλετε να αναιρέσετε τη σιώπηση αυτού του μέλους;
securityKeyName: Όνομα κλειδιού
lastUsed: Τελευταία χρήση
unregister: Απεγγραφή
notFoundDescription: Δεν ήταν δυνατό να βρεθεί σελίδα που να ανταποκρίνεται σε αυτή
τη διεύθυνση URL.
signinHistory: Ιστορικό συνδέσεων
disableAnimatedMfm: Απενεργοποίηση του MFM με κίνηση
dayOverDayChanges: Αλλαγές την τελευταία ημέρα
promotion: Προμοταρισμένα
promote: Προμοτάρισμα
squareAvatars: Εμφάνιση τετραγωνισμένων άβαταρ
aboutMisskey: Σχετικά με το Calckey
maintainerName: Προγραμματιστής/στρια
uploadFromUrlRequested: Το ανέβασμα ζητήθηκε
themeForLightMode: Θέμα για τη Φωτεινή Λειτουργία
circularReferenceFolder: Ο φάκελος του προορισμού είναι υποφάκελος του φακέλου που
θέλετε να μετακινήσετε.
backgroundImageUrl: Διεύθυνση URL εικόνας φόντου
pinnedUsersDescription: Παραθέστε τα ονόματα μελών που θα είναι καρφιτσωμένα στην
καρτέλα "Εξερεύνηση" χωρίζοντάς τα με αλλαγή γραμμής.
openImageInNewTab: Άνοιγμα εικόνων σε νέα καρτέλα
weekOverWeekChanges: Αλλαγές την τελευταία εβδομάδα
exploreFediverse: Εξερευνήστε το Fediverse
unsilence: Αναίρεση σιώπησης
administrator: Διαχειριστής/στρια
passwordLessLogin: Σύνδεση χωρίς κωδικό
reduceUiAnimation: Ελάττωση των κινούμενων εικόνων
serviceworkerInfo: Πρέπει να είναι ενεργοποιημένο για ειδοποιήσεις push.
expandTweet: Διεύρυνση τουιτ
themeEditor: Επεξεργασία θεμάτων
deck: Ντεκ
undeck: Έξοδος από το Ντεκ
useFullReactionPicker: Χρήση επιλογέα αντιδράσεων πλήρους μεγέθους
tokenRequested: Παροχή πρόσβασης στον λογαριασμό
emailServer: Σέρβερ email
enableEmail: Ενεργοποίηση του email distribution
emailAddress: Διεύθυνση email
emailConfigInfo: Χρησιμοποιείται για επιβεβαίωση του email σας κατά την εγγραφή ή
αν ξεχάσετε τον κωδικό σας
regenerateLoginToken: Επαναδημιουργία token σύνδεσης
fileIdOrUrl: Ταυτότητα αρχείου (ID) ή διεύθυνση URL
typingUsers: '{users} πληκτρολογεί'
yourAccountSuspendedDescription: Αυτός ο λογαριασμός έχει αποβληθεί λόγω μη συμμόρφωσης
με τους κανόνες του σέρβερ ή κάτι παρόμοιο. Επικοινωνήστε με τον διαχειριστή/στρια
αν θα θέλατε έναν πιο λεπτομερή λόγο. Παρακαλούμε μη δημιουργήσετε νέο λογαριασμό.
inboxUrl: Διεύθυνση URL των Εισερχομένων
generateAccessToken: Δημιουργία token πρόσβασης
emptyToDisableSmtpAuth: Αφήστε το όνομα μέλους και τον κωδικό άδεια για να απενεργοποιήσετε
την επαλήθευση SMTP
instanceMute: Σιγάσεις instance
userSaysSomethingReason: '{name} είπε {reason}'
logs: Αρχεία καταγραφής
abuseReported: Η αναφορά σας στάλθηκε. Ευχαριστούμε πολύ.
reporter: Έκανε την αναφορά
reporteeOrigin: Καταγωγή αναφερόμενου λογαριασμού
reporterOrigin: Καταγωγή λογαριασμού που έκανε την αναφορά
forwardReport: Προώθηση της αναφοράς στο απομακρυσμένο instance
openInSideView: Άνοιγμα σε προβολή παράθεσης
delayed: Με καθυστέρηση
useGlobalSettingDesc: Αν ενεργοποιηθεί, οι ρυθμίσεις ειδοποιήσεων του λογαριασμού
σας θα χρησιμοποιηθούν. Αν απενεργοποιηθεί, μπορούν να γίνουν ανεξάρτητες ρυθμίσεις.
fillAbuseReportDescription: Παρακαλούμε συμπληρώστε λεπτομέρειες σχετικά με αυτή την
αναφορά. Αν πρόκειται για συγκεκριμένη δημοσίευση, παρακαλούμε συμπεριλάβετε τη
διεύθυνση URL της δημοσίευσης.
forwardReportIsAnonymous: Αντί για τον λογαριασμό σας, μία ανώνυμη αναφορά από λογαριασμό
του συστήματος θα εμφανιστεί στο απομακρυσμένο instance.

View file

@ -1,7 +1,8 @@
---
_lang_: "English"
headlineMisskey: "An open source, decentralized social media platform that's free forever! 🚀"
introMisskey: "Welcome! Calckey is an open source, decentralized social media platform that's free forever! 🚀"
headlineMisskey: "An open source, decentralized social media platform that's free\
\ forever! \U0001F680"
introMisskey: "Welcome! Calckey is an open source, decentralized social media platform\
\ that's free forever! \U0001F680"
monthAndDay: "{month}/{day}"
search: "Search"
notifications: "Notifications"
@ -12,6 +13,7 @@ fetchingAsApObject: "Fetching from the Fediverse"
ok: "OK"
gotIt: "Got it!"
cancel: "Cancel"
noThankYou: "No thank you"
enterUsername: "Enter username"
renotedBy: "Boosted by {user}"
noNotes: "No posts"
@ -45,7 +47,8 @@ copyContent: "Copy contents"
copyLink: "Copy link"
delete: "Delete"
deleteAndEdit: "Delete and edit"
deleteAndEditConfirm: "Are you sure you want to delete this post and edit it? You will lose all reactions, boosts and replies to it."
deleteAndEditConfirm: "Are you sure you want to delete this post and edit it? You\
\ will lose all reactions, boosts and replies to it."
addToList: "Add to list"
sendMessage: "Send a message"
copyUsername: "Copy username"
@ -65,9 +68,11 @@ import: "Import"
export: "Export"
files: "Files"
download: "Download"
driveFileDeleteConfirm: "Are you sure you want to delete the file \"{name}\"? Posts with this file attached will also be deleted."
driveFileDeleteConfirm: "Are you sure you want to delete the file \"{name}\"? Posts\
\ with this file attached will also be deleted."
unfollowConfirm: "Are you sure that you want to unfollow {name}?"
exportRequested: "You've requested an export. This may take a while. It will be added to your Drive once completed."
exportRequested: "You've requested an export. This may take a while. It will be added\
\ to your Drive once completed."
importRequested: "You've requested an import. This may take a while."
lists: "Lists"
noLists: "You don't have any lists"
@ -82,7 +87,8 @@ error: "Error"
somethingHappened: "An error has occurred"
retry: "Retry"
pageLoadError: "An error occurred loading the page."
pageLoadErrorDescription: "This is normally caused by network errors or the browser's cache. Try clearing the cache and then try again after waiting a little while."
pageLoadErrorDescription: "This is normally caused by network errors or the browser's\
\ cache. Try clearing the cache and then try again after waiting a little while."
serverIsDead: "This server is not responding. Please wait for a while and try again."
youShouldUpgradeClient: "To view this page, please refresh to update your client."
enterListName: "Enter a name for the list"
@ -108,6 +114,8 @@ clickToShow: "Click to show"
sensitive: "NSFW"
add: "Add"
reaction: "Reactions"
enableEmojiReactions: "Enable emoji reactions"
showEmojisInReactionNotifications: "Show emojis in reaction notifications"
reactionSetting: "Reactions to show in the reaction picker"
reactionSettingDescription2: "Drag to reorder, click to delete, press \"+\" to add."
rememberNoteVisibility: "Remember post visibility settings"
@ -117,6 +125,8 @@ unmarkAsSensitive: "Unmark as NSFW"
enterFileName: "Enter filename"
mute: "Mute"
unmute: "Unmute"
renoteMute: "Mute boosts"
renoteUnmute: "Unmute boosts"
block: "Block"
unblock: "Unblock"
suspend: "Suspend"
@ -138,13 +148,21 @@ emojiUrl: "Emoji URL"
addEmoji: "Add"
settingGuide: "Recommended settings"
cacheRemoteFiles: "Cache remote files"
cacheRemoteFilesDescription: "When this setting is disabled, remote files are loaded directly from the remote instance. Disabling this will decrease storage usage, but increase traffic, as thumbnails will not be generated."
cacheRemoteFilesDescription: "When this setting is disabled, remote files are loaded\
\ directly from the remote instance. Disabling this will decrease storage usage,\
\ but increase traffic, as thumbnails will not be generated."
flagAsBot: "Mark this account as a bot"
flagAsBotDescription: "Enable this option if this account is controlled by a program. If enabled, it will act as a flag for other developers to prevent endless interaction chains with other bots and adjust Calckey's internal systems to treat this account as a bot."
flagAsCat: "Are you a cat? 😺"
flagAsBotDescription: "Enable this option if this account is controlled by a program.\
\ If enabled, it will act as a flag for other developers to prevent endless interaction\
\ chains with other bots and adjust Calckey's internal systems to treat this account\
\ as a bot."
flagAsCat: "Are you a cat? \U0001F63A"
flagAsCatDescription: "You'll get cat ears and speak like a cat!"
flagSpeakAsCat: "Speak as a cat"
flagSpeakAsCatDescription: "Your posts will get nyanified when in cat mode"
flagShowTimelineReplies: "Show replies in timeline"
flagShowTimelineRepliesDescription: "Shows replies of users to posts of other users in the timeline if turned on."
flagShowTimelineRepliesDescription: "Shows replies of users to posts of other users\
\ in the timeline if turned on."
autoAcceptFollowed: "Automatically approve follow requests from users you're following"
addAccount: "Add account"
loginFailed: "Failed to sign in"
@ -157,8 +175,11 @@ removeWallpaper: "Remove wallpaper"
searchWith: "Search: {q}"
youHaveNoLists: "You don't have any lists"
followConfirm: "Are you sure that you want to follow {name}?"
proxyAccount: "Proxy account"
proxyAccountDescription: "A proxy account is an account that acts as a remote follower for users under certain conditions. For example, when a user adds a remote user to the list, the remote user's activity will not be delivered to the instance if no local user is following that user, so the proxy account will follow instead."
proxyAccount: "Proxy Account"
proxyAccountDescription: "A proxy account is an account that acts as a remote follower\
\ for users under certain conditions. For example, when a user adds a remote user\
\ to the list, the remote user's activity will not be delivered to the instance\
\ if no local user is following that user, so the proxy account will follow instead."
host: "Host"
selectUser: "Select a user"
selectInstance: "Select an instance"
@ -190,11 +211,17 @@ instanceInfo: "Instance Information"
statistics: "Statistics"
clearQueue: "Clear queue"
clearQueueConfirmTitle: "Are you sure that you want to clear the queue?"
clearQueueConfirmText: "Any undelivered posts remaining in the queue will not be federated. Usually this operation is not needed."
clearQueueConfirmText: "Any undelivered posts remaining in the queue will not be federated.\
\ Usually this operation is not needed."
clearCachedFiles: "Clear cache"
clearCachedFilesConfirm: "Are you sure that you want to delete all cached remote files?"
blockedInstances: "Blocked Instances"
blockedInstancesDescription: "List the hostnames of the instances that you want to block. Listed instances will no longer be able to communicate with this instance."
blockedInstancesDescription: "List the hostnames of the instances that you want to\
\ block. Listed instances will no longer be able to communicate with this instance."
hiddenTags: "Hidden Hashtags"
hiddenTagsDescription: "List the hashtags (without the #) of the hashtags you wish\
\ to hide from trending and explore. Hidden hashtags are still discoverable via\
\ other means."
muteAndBlock: "Mutes and Blocks"
mutedUsers: "Muted users"
blockedUsers: "Blocked users"
@ -244,7 +271,8 @@ saved: "Saved"
messaging: "Chat"
upload: "Upload"
keepOriginalUploading: "Keep original image"
keepOriginalUploadingDescription: "Saves the originally uploaded image as-is. If turned off, a version to display on the web will be generated on upload."
keepOriginalUploadingDescription: "Saves the originally uploaded image as-is. If turned\
\ off, a version to display on the web will be generated on upload."
fromDrive: "From Drive"
fromUrl: "From URL"
uploadFromUrl: "Upload from a URL"
@ -294,7 +322,8 @@ unableToDelete: "Unable to delete"
inputNewFileName: "Enter a new filename"
inputNewDescription: "Enter new caption"
inputNewFolderName: "Enter a new folder name"
circularReferenceFolder: "The destination folder is a subfolder of the folder you wish to move."
circularReferenceFolder: "The destination folder is a subfolder of the folder you\
\ wish to move."
hasChildFilesOrFolders: "Since this folder is not empty, it can not be deleted."
copyUrl: "Copy URL"
rename: "Rename"
@ -323,13 +352,14 @@ dayX: "{day}"
monthX: "{month}"
yearX: "{year}"
pages: "Pages"
integration: "Integration"
integration: "Integrations"
connectService: "Connect"
disconnectService: "Disconnect"
enableLocalTimeline: "Enable local timeline"
enableGlobalTimeline: "Enable global timeline"
enableRecommendedTimeline: "Enable recommended timeline"
disablingTimelinesInfo: "Adminstrators and Moderators will always have access to all timelines, even if they are not enabled."
disablingTimelinesInfo: "Adminstrators and Moderators will always have access to all\
\ timelines, even if they are not enabled."
registration: "Register"
enableRegistration: "Enable new user registration"
invite: "Invite"
@ -341,9 +371,11 @@ bannerUrl: "Banner image URL"
backgroundImageUrl: "Background image URL"
basicInfo: "Basic info"
pinnedUsers: "Pinned users"
pinnedUsersDescription: "List usernames separated by line breaks to be pinned in the \"Explore\" tab."
pinnedUsersDescription: "List usernames separated by line breaks to be pinned in the\
\ \"Explore\" tab."
pinnedPages: "Pinned Pages"
pinnedPagesDescription: "Enter the paths of the Pages you want to pin to the top page of this instance, separated by line breaks."
pinnedPagesDescription: "Enter the paths of the Pages you want to pin to the top page\
\ of this instance, separated by line breaks."
pinnedClipId: "ID of the clip to pin"
pinnedNotes: "Pinned posts"
hcaptcha: "hCaptcha"
@ -354,14 +386,17 @@ recaptcha: "reCAPTCHA"
enableRecaptcha: "Enable reCAPTCHA"
recaptchaSiteKey: "Site key"
recaptchaSecretKey: "Secret key"
avoidMultiCaptchaConfirm: "Using multiple Captcha systems may cause interference between them. Would you like to disable the other Captcha systems currently active? If you would like them to stay enabled, press cancel."
avoidMultiCaptchaConfirm: "Using multiple Captcha systems may cause interference between\
\ them. Would you like to disable the other Captcha systems currently active? If\
\ you would like them to stay enabled, press cancel."
antennas: "Antennas"
manageAntennas: "Manage Antennas"
name: "Name"
antennaSource: "Antenna source"
antennaKeywords: "Keywords to listen to"
antennaExcludeKeywords: "Keywords to exclude"
antennaKeywordsDescription: "Separate with spaces for an AND condition or with line breaks for an OR condition."
antennaKeywordsDescription: "Separate with spaces for an AND condition or with line\
\ breaks for an OR condition."
notifyAntenna: "Notify about new posts"
withFileAntenna: "Only posts with files"
enableServiceworker: "Enable Push-Notifications for your Browser"
@ -491,19 +526,27 @@ showFeaturedNotesInTimeline: "Show featured posts in timelines"
objectStorage: "Object Storage"
useObjectStorage: "Use object storage"
objectStorageBaseUrl: "Base URL"
objectStorageBaseUrlDesc: "The URL used as reference. Specify the URL of your CDN or Proxy if you are using either.\nFor S3 use 'https://<bucket>.s3.amazonaws.com' and for GCS or equivalent services use 'https://storage.googleapis.com/<bucket>', etc."
objectStorageBaseUrlDesc: "The URL used as reference. Specify the URL of your CDN\
\ or Proxy if you are using either.\nFor S3 use 'https://<bucket>.s3.amazonaws.com'\
\ and for GCS or equivalent services use 'https://storage.googleapis.com/<bucket>',\
\ etc."
objectStorageBucket: "Bucket"
objectStorageBucketDesc: "Please specify the bucket name used at your provider."
objectStoragePrefix: "Prefix"
objectStoragePrefixDesc: "Files will be stored under directories with this prefix."
objectStorageEndpoint: "Endpoint"
objectStorageEndpointDesc: "Leave this empty if you are using AWS S3, otherwise specify the endpoint as '<host>' or '<host>:<port>', depending on the service you are using."
objectStorageEndpointDesc: "Leave this empty if you are using AWS S3, otherwise specify\
\ the endpoint as '<host>' or '<host>:<port>', depending on the service you are\
\ using."
objectStorageRegion: "Region"
objectStorageRegionDesc: "Specify a region like 'xx-east-1'. If your service does not distinguish between regions, leave this blank or enter 'us-east-1'."
objectStorageRegionDesc: "Specify a region like 'xx-east-1'. If your service does\
\ not distinguish between regions, leave this blank or enter 'us-east-1'."
objectStorageUseSSL: "Use SSL"
objectStorageUseSSLDesc: "Turn this off if you are not going to use HTTPS for API connections"
objectStorageUseSSLDesc: "Turn this off if you are not going to use HTTPS for API\
\ connections"
objectStorageUseProxy: "Connect over Proxy"
objectStorageUseProxyDesc: "Turn this off if you are not going to use a Proxy for API connections"
objectStorageUseProxyDesc: "Turn this off if you are not going to use a Proxy for\
\ API connections"
objectStorageSetPublicRead: "Set \"public-read\" on upload"
serverLogs: "Server logs"
deleteAll: "Delete all"
@ -531,7 +574,9 @@ sort: "Sort"
ascendingOrder: "Ascending"
descendingOrder: "Descending"
scratchpad: "Scratchpad"
scratchpadDescription: "The scratchpad provides an environment for AiScript experiments. You can write, execute, and check the results of it interacting with Calckey in it."
scratchpadDescription: "The scratchpad provides an environment for AiScript experiments.\
\ You can write, execute, and check the results of it interacting with Calckey in\
\ it."
output: "Output"
script: "Script"
disablePagesScript: "Disable AiScript on Pages"
@ -539,11 +584,14 @@ updateRemoteUser: "Update remote user information"
deleteAllFiles: "Delete all files"
deleteAllFilesConfirm: "Are you sure that you want to delete all files?"
removeAllFollowing: "Unfollow all followed users"
removeAllFollowingDescription: "Executing this unfollows all accounts from {host}. Please run this if the instance e.g. no longer exists."
removeAllFollowingDescription: "Executing this unfollows all accounts from {host}.\
\ Please run this if the instance e.g. no longer exists."
userSuspended: "This user has been suspended."
userSilenced: "This user is being silenced."
yourAccountSuspendedTitle: "This account is suspended"
yourAccountSuspendedDescription: "This account has been suspended due to breaking the server's terms of services or similar. Contact the administrator if you would like to know a more detailed reason. Please do not create a new account."
yourAccountSuspendedDescription: "This account has been suspended due to breaking\
\ the server's terms of services or similar. Contact the administrator if you would\
\ like to know a more detailed reason. Please do not create a new account."
menu: "Menu"
divider: "Divider"
addItem: "Add Item"
@ -584,12 +632,14 @@ permission: "Permissions"
enableAll: "Enable all"
disableAll: "Disable all"
tokenRequested: "Grant access to account"
pluginTokenRequestedDescription: "This plugin will be able to use the permissions set here."
pluginTokenRequestedDescription: "This plugin will be able to use the permissions\
\ set here."
notificationType: "Notification type"
edit: "Edit"
emailServer: "Email server"
enableEmail: "Enable email distribution"
emailConfigInfo: "Used to confirm your email during sign-up or if you forget your password"
emailConfigInfo: "Used to confirm your email during sign-up or if you forget your\
\ password"
email: "Email"
emailAddress: "Email address"
smtpConfig: "SMTP Server Configuration"
@ -603,9 +653,11 @@ smtpSecureInfo: "Turn this off when using STARTTLS"
testEmail: "Test email delivery"
wordMute: "Word mute"
regexpError: "Regular Expression error"
regexpErrorDescription: "An error occurred in the regular expression on line {line} of your {tab} word mutes:"
regexpErrorDescription: "An error occurred in the regular expression on line {line}\
\ of your {tab} word mutes:"
instanceMute: "Instance Mutes"
userSaysSomething: "{name} said something"
userSaysSomethingReason: "{name} said {reason}"
makeActive: "Activate"
display: "Display"
copy: "Copy"
@ -619,10 +671,13 @@ create: "Create"
notificationSetting: "Notification settings"
notificationSettingDesc: "Select the types of notification to display."
useGlobalSetting: "Use global settings"
useGlobalSettingDesc: "If turned on, your account's notification settings will be used. If turned off, individual configurations can be made."
useGlobalSettingDesc: "If turned on, your account's notification settings will be\
\ used. If turned off, individual configurations can be made."
other: "Other"
regenerateLoginToken: "Regenerate login token"
regenerateLoginTokenDescription: "Regenerates the token used internally during login. Normally this action is not necessary. If regenerated, all devices will be logged out."
regenerateLoginTokenDescription: "Regenerates the token used internally during login.\
\ Normally this action is not necessary. If regenerated, all devices will be logged\
\ out."
setMultipleBySeparatingWithSpace: "Separate multiple entries with spaces."
fileIdOrUrl: "File ID or URL"
behavior: "Behavior"
@ -630,13 +685,15 @@ sample: "Sample"
abuseReports: "Reports"
reportAbuse: "Report"
reportAbuseOf: "Report {name}"
fillAbuseReportDescription: "Please fill in details regarding this report. If it is about a specific post, please include its URL."
fillAbuseReportDescription: "Please fill in details regarding this report. If it is\
\ about a specific post, please include its URL."
abuseReported: "Your report has been sent. Thank you very much."
reporter: "Reporter"
reporteeOrigin: "Reportee Origin"
reporterOrigin: "Reporter Origin"
forwardReport: "Forward report to remote instance"
forwardReportIsAnonymous: "Instead of your account, an anonymous system account will be displayed as reporter at the remote instance."
forwardReportIsAnonymous: "Instead of your account, an anonymous system account will\
\ be displayed as reporter at the remote instance."
send: "Send"
abuseMarkAsResolved: "Mark report as resolved"
openInNewTab: "Open in new tab"
@ -654,9 +711,11 @@ createNew: "Create new"
optional: "Optional"
createNewClip: "Create new clip"
unclip: "Unclip"
confirmToUnclipAlreadyClippedNote: "This post is already part of the \"{name}\" clip. Do you want to remove it from this clip instead?"
confirmToUnclipAlreadyClippedNote: "This post is already part of the \"{name}\" clip.\
\ Do you want to remove it from this clip instead?"
public: "Public"
i18nInfo: "Calckey is being translated into various languages by volunteers. You can help at {link}."
i18nInfo: "Calckey is being translated into various languages by volunteers. You can\
\ help at {link}."
manageAccessTokens: "Manage access tokens"
accountInfo: "Account Info"
notesCount: "Number of posts"
@ -675,12 +734,16 @@ no: "No"
driveFilesCount: "Number of Drive files"
driveUsage: "Drive space usage"
noCrawle: "Reject crawler indexing"
noCrawleDescription: "Ask search engines to not index your profile page, posts, Pages, etc."
lockedAccountInfo: "Unless you set your post visiblity to \"Followers only\", your posts will be visible to anyone, even if you require followers to be manually approved."
noCrawleDescription: "Ask search engines to not index your profile page, posts, Pages,\
\ etc."
lockedAccountInfo: "Unless you set your post visiblity to \"Followers only\", your\
\ posts will be visible to anyone, even if you require followers to be manually\
\ approved."
alwaysMarkSensitive: "Mark as NSFW 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."
verificationEmailSent: "A verification email has been sent. Please follow the included\
\ link to complete verification."
notSet: "Not set"
emailVerified: "Email has been verified"
noteFavoritesCount: "Number of bookmarked posts"
@ -692,7 +755,8 @@ clips: "Clips"
experimentalFeatures: "Experimental features"
developer: "Developer"
makeExplorable: "Make account visible in \"Explore\""
makeExplorableDescription: "If you turn this off, your account will not show up in the \"Explore\" section."
makeExplorableDescription: "If you turn this off, your account will not show up in\
\ the \"Explore\" section."
showGapBetweenNotesInTimeline: "Show a gap between posts on the timeline"
duplicate: "Duplicate"
left: "Left"
@ -707,7 +771,10 @@ onlineUsersCount: "{n} users are online"
nUsers: "{n} Users"
nNotes: "{n} Posts"
sendErrorReports: "Send error reports"
sendErrorReportsDescription: "When turned on, detailed error information will be shared with Calckey when a problem occurs, helping to improve the quality of Misskey.\nThis will include information such the version of your OS, what browser you're using, your activity in Calckey, etc."
sendErrorReportsDescription: "When turned on, detailed error information will be shared\
\ with Calckey when a problem occurs, helping to improve the quality of Calckey.\n\
This will include information such the version of your OS, what browser you're using,\
\ your activity in Calckey, etc."
myTheme: "My theme"
backgroundColor: "Background color"
accentColor: "Accent color"
@ -746,14 +813,17 @@ unlikeConfirm: "Really remove your like?"
fullView: "Full view"
quitFullView: "Exit full view"
addDescription: "Add description"
userPagePinTip: "You can display posts here by selecting \"Pin to profile\" from the menu of individual posts."
notSpecifiedMentionWarning: "This post contains mentions of users not included as recipients"
userPagePinTip: "You can display posts here by selecting \"Pin to profile\" from the\
\ menu of individual posts."
notSpecifiedMentionWarning: "This post contains mentions of users not included as\
\ recipients"
info: "About"
userInfo: "User information"
unknown: "Unknown"
onlineStatus: "Online status"
hideOnlineStatus: "Hide online status"
hideOnlineStatusDescription: "Hiding your online status reduces the convenience of some features such as the search."
hideOnlineStatusDescription: "Hiding your online status reduces the convenience of\
\ some features such as the search."
online: "Online"
active: "Active"
offline: "Offline"
@ -790,16 +860,19 @@ secureMode: "Secure Mode (Authorized Fetch)"
instanceSecurity: "Instance Security"
secureModeInfo: "When requesting from other instances, do not send back without proof."
privateMode: "Private Mode"
privateModeInfo: "When enabled, only whitelisted instances can federate with your instances. All posts will be hidden from the public."
privateModeInfo: "When enabled, only whitelisted instances can federate with your\
\ instances. All posts will be hidden from the public."
allowedInstances: "Whitelisted Instances"
allowedInstancesDescription: "Hosts of instances to be whitelisted for federation, each seperated by a new line (only applies in private mode)."
allowedInstancesDescription: "Hosts of instances to be whitelisted for federation,\
\ each separated by a new line (only applies in private mode)."
previewNoteText: "Show preview"
customCss: "Custom CSS"
customCssWarn: "This setting should only be used if you know what it does. Entering improper values may cause the client to stop functioning normally."
customCssWarn: "This setting should only be used if you know what it does. Entering\
\ improper values may cause the client to stop functioning normally."
global: "Global"
recommended: "Recommended"
squareAvatars: "Display squared avatars"
seperateRenoteQuote: "Seperate boost and quote buttons"
seperateRenoteQuote: "Separate boost and quote buttons"
sent: "Sent"
received: "Received"
searchResult: "Search results"
@ -812,7 +885,9 @@ whatIsNew: "Show changes"
translate: "Translate"
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."
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-chan in Classic UI"
keepCw: "Keep content warnings"
pubSub: "Pub/Sub Accounts"
@ -829,13 +904,15 @@ filter: "Filter"
controlPanel: "Control Panel"
manageAccounts: "Manage Accounts"
makeReactionsPublic: "Set reaction history to public"
makeReactionsPublicDescription: "This will make the list of all your past reactions publicly visible."
makeReactionsPublicDescription: "This will make the list of all your past reactions\
\ publicly visible."
classic: "Classic"
muteThread: "Mute thread"
unmuteThread: "Unmute thread"
ffVisibility: "Follows/Followers Visibility"
ffVisibilityDescription: "Allows you to configure who can see who you follow and who follows you."
continueThread: "View thread continuation"
ffVisibilityDescription: "Allows you to configure who can see who you follow and who\
\ follows you."
continueThread: "Continue thread"
deleteAccountConfirm: "This will irreversibly delete your account. Proceed?"
incorrectPassword: "Incorrect password."
voteConfirm: "Confirm your vote for \"{choice}\"?"
@ -849,6 +926,9 @@ overridedDeviceKind: "Device type"
smartphone: "Smartphone"
tablet: "Tablet"
auto: "Auto"
showLocalPosts: "Show local posts in:"
homeTimeline: "Home Timeline"
socialTimeline: "Social Timeline"
themeColor: "Instance Ticker Color"
size: "Size"
numberOfColumn: "Number of columns"
@ -874,14 +954,16 @@ noEmailServerWarning: "Email server not configured."
thereIsUnresolvedAbuseReportWarning: "There are unsolved reports."
check: "Check"
driveCapOverrideLabel: "Change the drive capacity for this user"
driveCapOverrideCaption: "Reset the capacity to default by inputting a value of 0 or lower."
driveCapOverrideCaption: "Reset the capacity to default by inputting a value of 0\
\ or lower."
requireAdminForView: "You must log in with an administrator account to view this."
isSystemAccount: "An account created and automatically operated by the system."
typeToConfirm: "Please enter {x} to confirm"
deleteAccount: "Delete account"
document: "Documentation"
numberOfPageCache: "Number of cached pages"
numberOfPageCacheDescription: "Increasing this number will improve convenience for users but cause more server load as well as more memory to be used."
numberOfPageCacheDescription: "Increasing this number will improve convenience for\
\ users but cause more server load as well as more memory to be used."
logoutConfirm: "Really log out?"
lastActiveDate: "Last used at"
statusbar: "Status bar"
@ -898,26 +980,49 @@ sensitiveMediaDetection: "Detection of NSFW media"
localOnly: "Local only"
remoteOnly: "Remote only"
failedToUpload: "Upload failed"
cannotUploadBecauseInappropriate: "This file could not be uploaded because parts of it have been detected as potentially NSFW."
cannotUploadBecauseInappropriate: "This file could not be uploaded because parts of\
\ it have been detected as potentially NSFW."
cannotUploadBecauseNoFreeSpace: "Upload failed due to lack of Drive capacity."
cannotUploadBecauseExceedsFileSizeLimit: "This file could not be uploaded because\
\ it exceeds the maximum allowed size."
beta: "Beta"
enableAutoSensitive: "Automatic NSFW-Marking"
enableAutoSensitiveDescription: "Allows automatic detection and marking of NSFW media through Machine Learning where possible. Even if this option is disabled, it may be enabled instance-wide."
activeEmailValidationDescription: "Enables stricter validation of email addresses, which includes checking for disposable addresses and by whether it can actually be communicated with. When unchecked, only the format of the email is validated."
enableAutoSensitiveDescription: "Allows automatic detection and marking of NSFW media\
\ through Machine Learning where possible. Even if this option is disabled, it may\
\ be enabled instance-wide."
activeEmailValidationDescription: "Enables stricter validation of email addresses,\
\ which includes checking for disposable addresses and by whether it can actually\
\ be communicated with. When unchecked, only the format of the email is validated."
navbar: "Navigation bar"
shuffle: "Shuffle"
account: "Account"
move: "Move"
pushNotification: "Push notifications"
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 battery usage of your\
\ device, if applicable."
showAds: "Show ads"
enterSendsMessage: "Press Return in Messaging to send message (off is Ctrl + Return)"
adminCustomCssWarn: "This setting should only be used if you know what it does. Entering improper values may cause EVERYONE'S clients to stop functioning normally. Please ensure your CSS works properly by testing it in your user settings."
adminCustomCssWarn: "This setting should only be used if you know what it does. Entering\
\ improper values may cause EVERYONE'S clients to stop functioning normally. Please\
\ ensure your CSS works properly by testing it in your user settings."
customMOTD: "Custom MOTD (splash screen messages)"
customMOTDDescription: "Custom messages for the MOTD (splash screen) separated by line breaks to be shown randomly every time a user loads/reloads the page."
customMOTDDescription: "Custom messages for the MOTD (splash screen) separated by\
\ line breaks to be shown randomly every time a user loads/reloads the page."
customSplashIcons: "Custom splash screen icons (urls)"
customSplashIconsDescription: "URLs for custom splash screen icons separated by line breaks to be shown randomly every time a user loads/reloads the page. Please make sure the images are on a static URL, preferably all resized to 192x192."
customSplashIconsDescription: "URLs for custom splash screen icons separated by line\
\ breaks to be shown randomly every time a user loads/reloads the page. Please make\
\ sure the images are on a static URL, preferably all resized to 192x192."
showUpdates: "Show a popup when Calckey updates"
recommendedInstances: "Recommended instances"
recommendedInstancesDescription: "Recommended instances seperated by line breaks to appear in the recommended timeline. Do NOT add `https://`, ONLY the domain."
recommendedInstancesDescription: "Recommended instances separated by line breaks to\
\ appear in the recommended timeline. Do NOT add `https://`, ONLY the domain."
caption: "Auto Caption"
splash: "Splash Screen"
updateAvailable: "There might be an update available!"
@ -929,21 +1034,51 @@ migration: "Migration"
moveTo: "Move current account to new account"
moveToLabel: "Account you're moving to:"
moveAccount: "Move account!"
moveAccountDescription: "This process is irreversible. Make sure you've set up an alias for this account on your new account before moving. Please enter the tag of the account formatted like @person@instance.com"
moveAccountDescription: "This process is irreversible. Make sure you've set up an\
\ alias for this account on your new account before moving. Please enter the tag\
\ of the account formatted like @person@instance.com"
moveFrom: "Move to this account from an older account"
moveFromLabel: "Account you're moving from:"
moveFromDescription: "This will set an alias of your old account so that you can move from that account to this current one. Do this BEFORE moving from your older account. Please enter the tag of the account formatted like @person@instance.com"
migrationConfirm: "Are you absolutely sure you want to migrate your acccount to {account}? Once you do this, you won't be able to reverse it, and you won't be able to use your account normally again.\nAlso, please ensure that you've set this current account as the account you're moving from."
moveFromDescription: "This will set an alias of your old account so that you can move\
\ from that account to this current one. Do this BEFORE moving from your older account.\
\ Please enter the tag of the account formatted like @person@instance.com"
migrationConfirm: "Are you absolutely sure you want to migrate your acccount to {account}?\
\ Once you do this, you won't be able to reverse it, and you won't be able to use\
\ your account normally again.\nAlso, please ensure that you've set this current\
\ account as the account you're moving from."
defaultReaction: "Default emoji reaction for outgoing and incoming posts"
license: "License"
indexPosts: "Index Posts"
indexFrom: "Index from Post ID onwards (leave blank to index every post)"
indexNotice: "Now indexing. This will probably take a while, please don't restart\
\ your server for at least an hour."
customKaTeXMacro: "Custom KaTeX macros"
customKaTeXMacroDescription: "Set up macros to write mathematical expressions easily!\
\ The notation conforms to the LaTeX command definitions and is written as \\newcommand{\\\
name}{content} or \\newcommand{\\name}[number of arguments]{content}. For example,\
\ \\newcommand{\\add}[2]{#1 + #2} will expand \\add{3}{foo} to 3 + foo. The curly\
\ brackets surrounding the macro name can be changed to round or square brackets.\
\ This affects the brackets used for arguments. One (and only one) macro can be\
\ defined per line, and you can't break the line in the middle of the definition.\
\ Invalid lines are simply ignored. Only simple string substitution functions are\
\ supported; advanced syntax, such as conditional branching, cannot be used here."
enableCustomKaTeXMacro: "Enable custom KaTeX macros"
noteId: "Post ID"
_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\
\ NSFW media via Machine Learning. This will slightly increase the load on the\
\ server."
sensitivity: "Detection sensitivity"
sensitivityDescription: "Reducing the sensitivity will lead to fewer misdetections (false positives) whereas increasing it will lead to fewer missed detections (false negatives)."
sensitivityDescription: "Reducing the sensitivity will lead to fewer misdetections\
\ (false positives) whereas increasing it will lead to fewer missed detections\
\ (false negatives)."
setSensitiveFlagAutomatically: "Mark as NSFW"
setSensitiveFlagAutomaticallyDescription: "The results of the internal detection will be retained even if this option is turned off."
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."
analyzeVideosDescription: "Analyzes videos in addition to images. This will slightly\
\ increase the load on the server."
_emailUnavailable:
used: "This email address is already being used"
format: "The format of this email address is invalid"
@ -957,11 +1092,15 @@ _ffVisibility:
_signup:
almostThere: "Almost there"
emailAddressInfo: "Please enter your email address. It will not be made public."
emailSent: "A confirmation email has been sent to your email address ({email}). Please click the included link to complete account creation."
emailSent: "A confirmation email has been sent to your email address ({email}).\
\ Please click the included link to complete account creation."
_accountDelete:
accountDelete: "Delete account"
mayTakeTime: "As account deletion is a resource-heavy process, it may take some time to complete depending on how much content you have created and how many files you have uploaded."
sendEmail: "Once account deletion has been completed, an email will be sent to the email address registered to this account."
mayTakeTime: "As account deletion is a resource-heavy process, it may take some\
\ time to complete depending on how much content you have created and how many\
\ files you have uploaded."
sendEmail: "Once account deletion has been completed, an email will be sent to the\
\ email address registered to this account."
requestAccountDelete: "Request account deletion"
started: "Deletion has been started."
inProgress: "Deletion is currently in progress"
@ -969,9 +1108,12 @@ _ad:
back: "Back"
reduceFrequencyOfThisAd: "Show this ad less"
_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."
contactAdmin: "This instance does not support using email addresses, please contact the instance administrator to reset your password instead."
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."
contactAdmin: "This instance does not support using email addresses, please contact\
\ the instance administrator to reset your password instead."
_gallery:
my: "My Gallery"
liked: "Liked Posts"
@ -994,12 +1136,15 @@ _preferencesBackups:
save: "Save changes"
inputName: "Please enter a name for this backup"
cannotSave: "Saving failed"
nameAlreadyExists: "A backup called \"{name}\" already exists. Please enter a different name."
applyConfirm: "Do you really want to apply the \"{name}\" backup to this device? Existing settings of this device will be overwritten."
nameAlreadyExists: "A backup called \"{name}\" already exists. Please enter a different\
\ name."
applyConfirm: "Do you really want to apply the \"{name}\" backup to this device?\
\ Existing settings of this device will be overwritten."
saveConfirm: "Save backup as {name}?"
deleteConfirm: "Delete the {name} backup?"
renameConfirm: "Rename this backup from \"{old}\" to \"{new}\"?"
noBackups: "No backups exist. You may backup your client settings on this server by using \"Create new backup\"."
noBackups: "No backups exist. You may backup your client settings on this server\
\ by using \"Create new backup\"."
createdAt: "Created at: {date} {time}"
updatedAt: "Updated at: {date} {time}"
cannotLoad: "Loading failed"
@ -1011,13 +1156,15 @@ _registry:
domain: "Domain"
createKey: "Create key"
_aboutMisskey:
about: "Calckey is a fork of Misskey made by ThatOneCalculator, which has been in development since 2022."
about: "Calckey is a fork of Misskey made by ThatOneCalculator, which has been in\
\ development since 2022."
contributors: "Main contributors"
allContributors: "All contributors"
source: "Source code"
translation: "Translate Calckey"
donate: "Donate to Calckey"
morePatrons: "We also appreciate the support of many other helpers not listed here. Thank you! 🥰"
morePatrons: "We also appreciate the support of many other helpers not listed here.\
\ Thank you! \U0001F970"
patrons: "Calckey patrons"
_nsfw:
respect: "Hide NSFW media"
@ -1025,7 +1172,8 @@ _nsfw:
force: "Hide all media"
_mfm:
cheatSheet: "MFM Cheatsheet"
intro: "MFM is a markup language used on Misskey, Calckey, Akkoma, and more that can be used in many places. Here you can view a list of all available MFM syntax."
intro: "MFM is a markup language used on Misskey, Calckey, Akkoma, and more that\
\ can be used in many places. Here you can view a list of all available MFM syntax."
dummy: "Calckey expands the world of the Fediverse"
mention: "Mention"
mentionDescription: "You can specify a user by using an At-Symbol and a username."
@ -1044,7 +1192,8 @@ _mfm:
inlineCode: "Code (Inline)"
inlineCodeDescription: "Displays inline syntax highlighting for (program) code."
blockCode: "Code (Block)"
blockCodeDescription: "Displays syntax highlighting for multi-line (program) code in a block."
blockCodeDescription: "Displays syntax highlighting for multi-line (program) code\
\ in a block."
inlineMath: "Math (Inline)"
inlineMathDescription: "Display math formulas (KaTeX) in-line"
blockMath: "Math (Block)"
@ -1052,7 +1201,8 @@ _mfm:
quote: "Quote"
quoteDescription: "Displays content as a quote."
emoji: "Custom Emoji"
emojiDescription: "By surrounding a custom emoji name with colons, custom emoji can be displayed."
emojiDescription: "By surrounding a custom emoji name with colons, custom emoji\
\ can be displayed."
search: "Search"
searchDescription: "Displays a search box with pre-entered text."
flip: "Flip"
@ -1087,8 +1237,17 @@ _mfm:
sparkleDescription: "Gives content a sparkling particle effect."
rotate: "Rotate"
rotateDescription: "Turns content by a specified angle."
position: "Position"
positionDescription: "Move content by a specified amount."
scale: "Scale"
scaleDescription: "Scale content by a specified amount."
foreground: "Foreground color"
foregroundDescription: "Change the foreground color of text."
background: "Background color"
backgroundDescription: "Change the background color of text."
plain: "Plain"
plainDescription: "Deactivates the effects of all MFM contained within this MFM effect."
plainDescription: "Deactivates the effects of all MFM contained within this MFM\
\ effect."
_instanceTicker:
none: "Never show"
remote: "Show for remote users"
@ -1118,15 +1277,19 @@ _menuDisplay:
hide: "Hide"
_wordMute:
muteWords: "Muted words"
muteWordsDescription: "Separate with spaces for an AND condition or with line breaks for an OR condition."
muteWordsDescription: "Separate with spaces for an AND condition or with line breaks\
\ for an OR condition."
muteWordsDescription2: "Surround keywords with slashes to use regular expressions."
softDescription: "Hide posts that fulfil the set conditions from the timeline."
hardDescription: "Prevents posts fulfilling the set conditions from being added to the timeline. In addition, these posts will not be added to the timeline even if the conditions are changed."
hardDescription: "Prevents posts fulfilling the set conditions from being added\
\ to the timeline. In addition, these posts will not be added to the timeline\
\ even if the conditions are changed."
soft: "Soft"
hard: "Hard"
mutedNotes: "Muted posts"
_instanceMute:
instanceMuteDescription: "This will mute any posts/boosts from the listed instances, including those of users replying to a user from a muted instance."
instanceMuteDescription: "This will mute any posts/boosts from the listed instances,\
\ including those of users replying to a user from a muted instance."
instanceMuteDescription2: "Separate with newlines"
title: "Hides posts from listed instances."
heading: "List of instances to be muted"
@ -1215,13 +1378,13 @@ _sfx:
_ago:
future: "Future"
justNow: "Just now"
secondsAgo: "{n} second(s) ago"
minutesAgo: "{n} minute(s) ago"
hoursAgo: "{n} hour(s) ago"
daysAgo: "{n} day(s) ago"
weeksAgo: "{n} week(s) ago"
monthsAgo: "{n} month(s) ago"
yearsAgo: "{n} year(s) ago"
secondsAgo: "{n}s ago"
minutesAgo: "{n}m ago"
hoursAgo: "{n}h ago"
daysAgo: "{n}d ago"
weeksAgo: "{n}w ago"
monthsAgo: "{n}mo ago"
yearsAgo: "{n}y ago"
_time:
second: "Second(s)"
minute: "Minute(s)"
@ -1232,21 +1395,35 @@ _tutorial:
step1_1: "Welcome!"
step1_2: "Let's get you set up. You'll be up and running in no time!"
step2_1: "First, please fill out your profile."
step2_2: "Providing some information about who you are will make it easier for others to tell if they want to see your posts or follow you."
step2_2: "Providing some information about who you are will make it easier for others\
\ to tell if they want to see your posts or follow you."
step3_1: "Now time to follow some people!"
step3_2: "Your home and social timelines are based off of who you follow, so try following a couple accounts to get started.\nClick the plus circle on the top right of a profile to follow them."
step3_2: "Your home and social timelines are based off of who you follow, so try\
\ following a couple accounts to get started.\nClick the plus circle on the top\
\ right of a profile to follow them."
step4_1: "Let's get you out there."
step4_2: "For your first post, some people like to made a {introduction} post or a simple \"Hello world!\""
step4_2: "For your first post, some people like to made a {introduction} post or\
\ a simple \"Hello world!\""
step5_1: "Timelines, timelines everywhere!"
step5_2: "Your instance has {timelines} different timelines enabled."
step5_3: "The Home {icon} timeline is where you can see posts from your followers."
step5_4: "The Local {icon} timeline is where you can see posts from everyone else on this instance."
step5_5: "The Recommended {icon} timeline is where you can see posts from instances the admins recommend."
step5_6: "The Social {icon} timeline is your home + local."
step5_7: "The Global {icon} timeline is where you can see posts from every other connected instance."
step5_3: "The Home {icon} timeline is where you can see posts from the accounts\
\ you follow and from everyone else on this instance. If you prefer your Home\
\ timeline to only display posts from accounts you follow, you can easily change\
\ this in Settings!"
step5_4: "The Local {icon} timeline is where you can see posts from everyone else\
\ on this instance."
step5_5: "The Social {icon} timeline is where you can see posts only from the accounts\
\ you follow."
step5_6: "The Recommended {icon} timeline is where you can see posts from instances\
\ the admins recommend."
step5_7: "The Global {icon} timeline is where you can see posts from every other\
\ connected instance."
step6_1: "So, what is this place?"
step6_2: "Well, you didn't just join Calckey. You joined a portal to the Fediverse, an interconnected network of thousands of servers, called \"instances\"."
step6_3: "Each server works in different ways, and not all servers run Calckey. This one does though! It's a bit complicated, but you'll get the hang of it in no time."
step6_2: "Well, you didn't just join Calckey. You joined a portal to the Fediverse,\
\ an interconnected network of thousands of servers, called \"instances\"."
step6_3: "Each server works in different ways, and not all servers run Calckey.\
\ This one does though! It's a bit complicated, but you'll get the hang of it\
\ in no time."
step6_4: "Now go, explore, and have fun!"
_2fa:
alreadyRegistered: "You have already registered a 2-factor authentication device."
@ -1257,7 +1434,9 @@ _2fa:
step2Url: "You can also enter this URL if you're using a desktop program:"
step3: "Enter the token provided by your app to finish setup."
step4: "From now on, any future login attempts will ask for such a login token."
securityKeyInfo: "Besides fingerprint or PIN authentication, you can also setup authentication via hardware security keys that support FIDO2 to further secure your account."
securityKeyInfo: "Besides fingerprint or PIN authentication, you can also setup\
\ authentication via hardware security keys that support FIDO2 to further secure\
\ your account."
_permissions:
"read:account": "View your account information"
"write:account": "Edit your account information"
@ -1293,7 +1472,8 @@ _permissions:
"write:gallery-likes": "Edit your list of liked gallery posts"
_auth:
shareAccess: "Would you like to authorize \"{name}\" to access this account?"
shareAccessAsk: "Are you sure you want to authorize this application to access your account?"
shareAccessAsk: "Are you sure you want to authorize this application to access your\
\ account?"
permissionAsk: "This application requests the following permissions"
pleaseGoBack: "Please go back to the application"
callback: "Returning to the application"
@ -1369,7 +1549,7 @@ _poll:
_visibility:
public: "Public"
publicDescription: "Your post will be visible for all users"
home: "Home"
home: "Unlisted"
homeDescription: "Post to home timeline only"
followers: "Followers"
followersDescription: "Make visible to your followers only"
@ -1395,11 +1575,14 @@ _profile:
youCanIncludeHashtags: "You can also include hashtags in your bio."
metadata: "Additional Information"
metadataEdit: "Edit additional Information"
metadataDescription: "Using these, you can display additional information fields in your profile."
metadataDescription: "Using these, you can display additional information fields\
\ in your profile."
metadataLabel: "Label"
metadataContent: "Content"
changeAvatar: "Change avatar"
changeBanner: "Change banner"
locationDescription: "If you enter your city first, it will display your local time\
\ to other users."
_exportOrImport:
allNotes: "All posts"
followingList: "Followed users"
@ -1717,7 +1900,8 @@ _pages:
_for:
arg1: "Number of times to repeat"
arg2: "Action"
typeError: "Slot {slot} accepts values of type \"{expect}\", but the provided value is of type \"{actual}\"!"
typeError: "Slot {slot} accepts values of type \"{expect}\", but the provided\
\ value is of type \"{actual}\"!"
thereIsEmptySlot: "Slot {slot} is empty!"
types:
string: "Text"
@ -1777,12 +1961,16 @@ _deck:
swapDown: "Swap with the below column"
stackLeft: "Stack with the left column"
popRight: "Pop column to the right"
profile: "Profile"
newProfile: "New profile"
deleteProfile: "Delete profile"
profile: "Workspace"
newProfile: "New workspace"
renameProfile: "Rename workspace"
deleteProfile: "Delete workspace"
nameAlreadyExists: "This workspace name already exists."
introduction: "Create the perfect interface for you by arranging columns freely!"
introduction2: "Click on the + on the right of the screen to add new colums whenever you want."
widgetsIntroduction: "Please select \"Edit widgets\" in the column menu and add a widget."
introduction2: "Click on the + on the right of the screen to add new colums whenever\
\ you want."
widgetsIntroduction: "Please select \"Edit widgets\" in the column menu and add\
\ a widget."
_columns:
main: "Main"
widgets: "Widgets"
@ -1805,7 +1993,7 @@ _apps:
pwa: "Install PWA"
kaiteki: "Kaiteki"
milktea: "Milktea"
subwayTooter: "Subway Tooter"
kimis: "Kimis"
missLi: "MissLi"
mona: "Mona"
theDesk: "TheDesk"
lesskey: "Lesskey"

View file

@ -1,7 +1,8 @@
---
_lang_: "Español"
headlineMisskey: "Red conectada por notas"
introMisskey: "¡Bienvenido/a! Misskey es un servicio de microblogging descentralizado de código abierto.\nEscribe \"notas\" para compartir lo que te ocurre ahora o para contar sobre ti a todos 📡\nCon la función de \"reacciones\", puedes también añadir una reacción rápida a las notas de todos 👍\n¡Exploremos juntos un nuevo mundo! 🚀"
headlineMisskey: "¡Un proyecto de código abierto y una plataforma de medios de comunicación\
\ descentralizada que es gratis para siempre! \U0001F680"
introMisskey: "¡Bienvenido! ¡Calckey es un proyecto de código abierto, plataforma\
\ descentralizado medios de comunicación social que es gratis para siempre! \U0001F680"
monthAndDay: "{day}/{month}"
search: "Buscar"
notifications: "Notificaciones"
@ -13,8 +14,8 @@ ok: "OK"
gotIt: "¡Lo tengo!"
cancel: "Cancelar"
enterUsername: "Introduce el nombre de usuario"
renotedBy: "Renotado por {user}"
noNotes: "No hay notas"
renotedBy: "Reposteado por {user}"
noNotes: "No hay publicaciones"
noNotifications: "No hay notificaciones"
instance: "Instancia"
settings: "Configuración"
@ -23,7 +24,7 @@ otherSettings: "Configuración avanzada"
openInWindow: "Abrir en una ventana"
profile: "Perfil"
timeline: "Línea de tiempo"
noAccountDescription: "Este usuario no ha escrito su biografía aún"
noAccountDescription: "Este usuario no ha escrito su biografía aún."
login: "Iniciar sesión"
loggingIn: "Iniciando sesión"
logout: "Cerrar sesión"
@ -36,7 +37,7 @@ favorite: "Añadir a favoritos"
favorites: "Favoritos"
unfavorite: "Quitar de favoritos"
favorited: "Añadido a favoritos."
alreadyFavorited: "Ya había sido añadido a favoritos"
alreadyFavorited: "Ya había sido añadido a favoritos."
cantFavorite: "No se puede añadir a favoritos."
pin: "Fijar al perfil"
unpin: "Desfijar"
@ -44,7 +45,8 @@ copyContent: "Copiar contenido"
copyLink: "Copiar enlace"
delete: "Borrar"
deleteAndEdit: "Borrar y editar"
deleteAndEditConfirm: "¿Estás seguro de que quieres borrar esta nota y editarla? Perderás todas las reacciones, renotas y respuestas."
deleteAndEditConfirm: "¿Estás seguro de que quieres borrar esta publicación y editarla?\
\ Perderás todas las reacciones, impulsados y respuestas."
addToList: "Agregar a lista"
sendMessage: "Enviar un mensaje"
copyUsername: "Copiar nombre de usuario"
@ -58,20 +60,22 @@ receiveFollowRequest: "Recibiste una solicitud de seguimiento"
followRequestAccepted: "La solicitud de seguimiento fue aceptada"
mention: "Menciones"
mentions: "Menciones"
directNotes: "Notas directas"
directNotes: "Mensajes Directos"
importAndExport: "Importar y Exportar"
import: "Importar"
export: "Exportar"
files: "Archivos"
download: "Descargar"
driveFileDeleteConfirm: "¿Desea borrar el archivo \"{name}\"? Las notas que tengan este archivo como adjunto serán eliminadas"
driveFileDeleteConfirm: "¿Desea borrar el archivo \"{name}\"? Las publicaciones que\
\ tengan este archivo como adjunto serán eliminadas."
unfollowConfirm: "¿Desea dejar de seguir a {name}?"
exportRequested: "Se ha solicitado la exportación. Puede tomar un tiempo. Cuando termine la exportación, se añadirá en el drive"
exportRequested: "Se ha solicitado la exportación. Puede tomar un tiempo. Cuando termine\
\ la exportación, se añadirá en el drive."
importRequested: "Se ha solicitado la importación. Puede tomar un tiempo."
lists: "Listas"
noLists: "No tiene listas"
note: "Notas"
notes: "Notas"
note: "Publicación"
notes: "Publicaciones"
following: "Siguiendo"
followers: "Seguidores"
followsYou: "Te sigue"
@ -80,10 +84,12 @@ manageLists: "Administrar listas"
error: "Error"
somethingHappened: "Ocurrió un error"
retry: "Reintentar"
pageLoadError: "Error al leer la página"
pageLoadErrorDescription: "Normalmente es debido a la red o al caché del navegador. Por favor limpie el caché o intente más tarde."
pageLoadError: "Error al cargar la página."
pageLoadErrorDescription: "Normalmente es debido a la red o al caché del navegador.\
\ Por favor limpie el caché o intente más tarde."
serverIsDead: "No hay respuesta del servidor. Espere un momento y vuelva a intentarlo."
youShouldUpgradeClient: "Para ver esta página, por favor refrezca el navegador y utiliza una versión más reciente del cliente."
youShouldUpgradeClient: "Para ver esta página, por favor refrezca el navegador y utiliza\
\ una versión más reciente del cliente."
enterListName: "Ingrese nombre de lista"
privacy: "Privacidad"
makeFollowManuallyApprove: "Aprobar manualmente las solicitudes de seguimiento"
@ -94,13 +100,13 @@ followRequests: "Solicitudes de seguimiento"
unfollow: "Dejar de seguir"
followRequestPending: "Solicitudes de seguimiento pendiente"
enterEmoji: "Ingresar emojis"
renote: "Renotar"
unrenote: "Quitar renota"
renoted: "Renotado"
cantRenote: "No se puede renotar este post"
cantReRenote: "No se puede renotar una renota"
renote: "Impulsar"
unrenote: "Quitar impulso"
renoted: "Impulsado."
cantRenote: "No se puede impulsar esta publicación."
cantReRenote: "No se puede impulsar un impulso."
quote: "Citar"
pinnedNote: "Nota fijada"
pinnedNote: "Publicación fijada"
pinned: "Fijar al perfil"
you: "Tú"
clickToShow: "Click para ver"
@ -108,8 +114,9 @@ sensitive: "Marcado como sensible"
add: "Agregar"
reaction: "Reacción"
reactionSetting: "Reacciones para mostrar en el menú de reacciones"
reactionSettingDescription2: "Arrastre para reordenar, click para borrar, apriete la tecla + para añadir."
rememberNoteVisibility: "Recordar visibilidad"
reactionSettingDescription2: "Arrastre para reordenar, click para borrar, apriete\
\ la tecla + para añadir."
rememberNoteVisibility: "Recordar la configuración de visibilidad de la publicación"
attachCancel: "Quitar adjunto"
markAsSensitive: "Marcar como sensible"
unmarkAsSensitive: "Desmarcar como sensible"
@ -137,16 +144,23 @@ emojiUrl: "URL de la imágen del emoji"
addEmoji: "Agregar emoji"
settingGuide: "Configuración sugerida"
cacheRemoteFiles: "Mantener en cache los archivos remotos"
cacheRemoteFilesDescription: "Si desactiva esta configuración, Los archivos remotos se cargarán desde el link directo sin usar la caché. Con eso se puede ahorrar almacenamiento del servidor, pero eso aumentará el tráfico al no crear miniaturas."
cacheRemoteFilesDescription: "Si desactiva esta configuración, Los archivos remotos\
\ se cargarán desde el link directo sin usar la caché. Con eso se puede ahorrar\
\ almacenamiento del servidor, pero eso aumentará el tráfico al no crear miniaturas."
flagAsBot: "Esta cuenta es un bot"
flagAsBotDescription: "En caso de que esta cuenta fuera usada por un programa, active esta opción. Al hacerlo, esta opción servirá para otros desarrolladores para evitar cadenas infinitas de reacciones, y ajustará los sistemas internos de Misskey para que trate a esta cuenta como un bot."
flagAsBotDescription: "En caso de que esta cuenta fuera usada por un programa, active\
\ esta opción. Al hacerlo, esta opción servirá para otros desarrolladores para evitar\
\ cadenas infinitas de reacciones, y ajustará los sistemas internos de Calckey para\
\ que trate a esta cuenta como un bot."
flagAsCat: "Esta cuenta es un gato"
flagAsCatDescription: "En caso de que declare que esta cuenta es de un gato, active esta opción."
flagAsCatDescription: "Vas a tener orejas de gato y hablar como un gato!"
flagShowTimelineReplies: "Mostrar respuestas a las notas en la biografía"
flagShowTimelineRepliesDescription: "Cuando se marca, la línea de tiempo muestra respuestas a otras notas además de las notas del usuario"
autoAcceptFollowed: "Aceptar automáticamente las solicitudes de seguimiento de los usuarios que sigues"
flagShowTimelineRepliesDescription: "Cuando se marca, la línea de tiempo muestra respuestas\
\ a otras publicaciones además de las publicaciones del usuario."
autoAcceptFollowed: "Aceptar automáticamente las solicitudes de seguimiento de los\
\ usuarios que sigues"
addAccount: "Agregar Cuenta"
loginFailed: "Error al iniciar sesión."
loginFailed: "Error al iniciar sesión"
showOnRemote: "Ver en una instancia remota"
general: "General"
wallpaper: "Fondo de pantalla"
@ -156,7 +170,11 @@ searchWith: "Buscar: {q}"
youHaveNoLists: "No tienes listas"
followConfirm: "¿Desea seguir a {name}?"
proxyAccount: "Cuenta proxy"
proxyAccountDescription: "Una cuenta proxy es una cuenta que actúa como un seguidor remoto de un usuario bajo ciertas condiciones. Por ejemplo, cuando un usuario añade un usuario remoto a una lista, si ningún usuario local sigue al usuario agregado a la lista, la instancia no puede obtener su actividad. Así que la cuenta proxy sigue al usuario añadido a la lista"
proxyAccountDescription: "Una cuenta proxy es una cuenta que actúa como un seguidor\
\ remoto de un usuario bajo ciertas condiciones. Por ejemplo, cuando un usuario\
\ añade un usuario remoto a una lista, si ningún usuario local sigue al usuario\
\ agregado a la lista, la instancia no puede obtener su actividad. Así que la cuenta\
\ proxy sigue al usuario añadido a la lista."
host: "Host"
selectUser: "Elegir usuario"
recipient: "Recipiente"
@ -187,21 +205,24 @@ instanceInfo: "información de la instancia"
statistics: "Estadísticas"
clearQueue: "Limpiar cola"
clearQueueConfirmTitle: "¿Desea limpiar la cola?"
clearQueueConfirmText: "Las notas aún no entregadas no se federarán. Normalmente no se necesita ejecutar esta operación"
clearQueueConfirmText: "Las publicaciones aún no entregadas no se federarán. Normalmente\
\ no se necesita ejecutar esta operación."
clearCachedFiles: "Limpiar caché"
clearCachedFilesConfirm: "¿Desea borrar todos los archivos remotos cacheados?"
blockedInstances: "Instancias bloqueadas"
blockedInstancesDescription: "Seleccione los hosts de las instancias que desea bloquear, separadas por una linea nueva. Las instancias bloqueadas no podrán comunicarse con esta instancia."
blockedInstancesDescription: "Seleccione los hosts de las instancias que desea bloquear,\
\ separadas por una linea nueva. Las instancias bloqueadas no podrán comunicarse\
\ con esta instancia."
muteAndBlock: "Silenciar y bloquear"
mutedUsers: "Usuarios silenciados"
blockedUsers: "Usuarios bloqueados"
noUsers: "No hay usuarios"
editProfile: "Editar perfil"
noteDeleteConfirm: "¿Desea borrar esta nota?"
pinLimitExceeded: "Ya no se pueden fijar más posts"
intro: "¡La instalación de Misskey ha terminado! Crea el usuario administrador."
noteDeleteConfirm: "¿Desea borrar esta publicación?"
pinLimitExceeded: "Ya no se pueden fijar más publicaciones"
intro: "¡La instalación de Calckey ha terminado! Crea el usuario administrador."
done: "Terminado"
processing: "Procesando"
processing: "Procesando..."
preview: "Vista previa"
default: "Predeterminado"
defaultValueIs: "Predeterminado"
@ -219,7 +240,7 @@ instanceFollowers: "Seguidores de la instancia"
instanceUsers: "Usuarios de la instancia"
changePassword: "Cambiar contraseña"
security: "Seguridad"
retypedNotMatch: "No hay coincidencia"
retypedNotMatch: "No hay coincidencia."
currentPassword: "Contraseña actual"
newPassword: "Contraseña nueva"
newPasswordRetype: "Contraseña nueva (repetir)"
@ -240,7 +261,9 @@ saved: "Guardado"
messaging: "Chat"
upload: "Subir"
keepOriginalUploading: "Mantener la imagen original"
keepOriginalUploadingDescription: "Mantener la versión original al cargar imágenes. Si está desactivado, el navegador generará imágenes para la publicación web en el momento de recargar la página"
keepOriginalUploadingDescription: "Mantener la versión original al cargar imágenes.\
\ Si está desactivado, el navegador generará imágenes para la publicación web en\
\ el momento de recargar la página."
fromDrive: "Desde el drive"
fromUrl: "Desde la URL"
uploadFromUrl: "Subir desde una URL"
@ -256,7 +279,7 @@ agreeTo: "De acuerdo con {0}"
tos: "Términos de uso"
start: "Comenzar"
home: "Inicio"
remoteUserCaution: "Para el usuario remoto, la información está incompleta"
remoteUserCaution: "La información del usuario remoto tal vez esta incompleta."
activity: "Actividad"
images: "Imágenes"
birthday: "Fecha de nacimiento"
@ -289,7 +312,8 @@ unableToDelete: "No se puede borrar"
inputNewFileName: "Ingrese un nuevo nombre de archivo"
inputNewDescription: "Ingrese nueva descripción"
inputNewFolderName: "Ingrese un nuevo nombre de la carpeta"
circularReferenceFolder: "La carpeta de destino es una sub-carpeta de la carpeta que quieres mover."
circularReferenceFolder: "La carpeta de destino es una sub-carpeta de la carpeta que\
\ quieres mover."
hasChildFilesOrFolders: "No se puede borrar esta carpeta. No está vacía."
copyUrl: "Copiar URL"
rename: "Renombrar"
@ -323,7 +347,8 @@ connectService: "Conectar"
disconnectService: "Desconectar"
enableLocalTimeline: "Habilitar linea de tiempo local"
enableGlobalTimeline: "Habilitar linea de tiempo global"
disablingTimelinesInfo: "Aunque se desactiven estas lineas de tiempo, por conveniencia el administrador y los moderadores pueden seguir usándolos"
disablingTimelinesInfo: "Aunque se desactiven estas lineas de tiempo, por conveniencia\
\ el administrador y los moderadores pueden seguir usándolos"
registration: "Registro"
enableRegistration: "Permitir nuevos registros"
invite: "Invitar"
@ -335,9 +360,11 @@ bannerUrl: "URL de la imagen del banner"
backgroundImageUrl: "URL de la imagen de fondo"
basicInfo: "Información básica"
pinnedUsers: "Usuarios fijados"
pinnedUsersDescription: "Describir los usuarios que quiere fijar en la página \"Descubrir\" separados por una linea nueva"
pinnedUsersDescription: "Describir los usuarios que quiere fijar en la página \"Descubrir\"\
\ separados por una linea nueva"
pinnedPages: "Páginas fijadas"
pinnedPagesDescription: "Describa las rutas de las páginas que desea fijar a la página principal de la instancia, separadas por lineas nuevas"
pinnedPagesDescription: "Describa las rutas de las páginas que desea fijar a la página\
\ principal de la instancia, separadas por lineas nuevas"
pinnedClipId: "Id del clip fijado"
pinnedNotes: "Nota fijada"
hcaptcha: "hCaptcha"
@ -348,14 +375,17 @@ recaptcha: "reCAPTCHA"
enableRecaptcha: "activar reCAPTCHA"
recaptchaSiteKey: "Clave del sitio"
recaptchaSecretKey: "Clave secreta"
avoidMultiCaptchaConfirm: "El uso de múltiples Captchas puede causar interferencia. ¿Desea desactivar el otro Captcha? Puede dejar múltiples Captchas habilitadas presionando cancelar."
avoidMultiCaptchaConfirm: "El uso de múltiples Captchas puede causar interferencia.\
\ ¿Desea desactivar el otro Captcha? Puede dejar múltiples Captchas habilitadas\
\ presionando cancelar."
antennas: "Antenas"
manageAntennas: "Administrar antenas"
name: "Nombre"
antennaSource: "Origen de la antena"
antennaKeywords: "Palabras clave para recibir"
antennaExcludeKeywords: "Palabras clave para excluir"
antennaKeywordsDescription: "Separar con espacios es una declaración AND, separar con una linea nueva es una declaración OR"
antennaKeywordsDescription: "Separar con espacios es una declaración AND, separar\
\ con una linea nueva es una declaración OR"
notifyAntenna: "Notificar nueva nota"
withFileAntenna: "Sólo notas con archivos adjuntados"
enableServiceworker: "Activar ServiceWorker"
@ -378,7 +408,7 @@ exploreFediverse: "Explorar fediverso"
popularTags: "Etiquetas populares"
userList: "Lista"
about: "Información"
aboutMisskey: "Sobre Misskey"
aboutMisskey: "Sobre Calckey"
administrator: "Administrador"
token: "Token"
twoStepAuthentication: "Autenticación de dos factores"
@ -443,7 +473,8 @@ strongPassword: "Muy buena contraseña"
passwordMatched: "Correcto"
passwordNotMatched: "Las contraseñas no son las mismas"
signinWith: "Inicie sesión con {x}"
signinFailed: "Autenticación fallida. Asegúrate de haber usado el nombre de usuario y contraseña correctos."
signinFailed: "Autenticación fallida. Asegúrate de haber usado el nombre de usuario\
\ y contraseña correctos."
tapSecurityKey: "Toque la clave de seguridad"
or: "O"
language: "Idioma"
@ -453,7 +484,8 @@ aboutX: "Acerca de {x}"
useOsNativeEmojis: "Usa los emojis nativos de la plataforma"
disableDrawer: "No mostrar los menús en cajones"
youHaveNoGroups: "Sin grupos"
joinOrCreateGroup: "Obtenga una invitación para unirse al grupos o puede crear su propio grupo."
joinOrCreateGroup: "Obtenga una invitación para unirse al grupos o puede crear su\
\ propio grupo."
noHistory: "No hay datos en el historial"
signinHistory: "Historial de ingresos"
disableAnimatedMfm: "Deshabilitar MFM que tiene animaciones"
@ -484,19 +516,28 @@ showFeaturedNotesInTimeline: "Mostrar notas destacadas en la línea de tiempo"
objectStorage: "Almacenamiento de objetos"
useObjectStorage: "Usar almacenamiento de objetos"
objectStorageBaseUrl: "Base URL"
objectStorageBaseUrlDesc: "Prefijo de URL utilizado para construir URL para hacer referencia a objetos (medios). Especifique su URL si está utilizando un CDN o Proxy; de lo contrario, especifique la dirección a la que se puede acceder públicamente de acuerdo con la guía de servicio que va a utilizar. i.g 'https://<bucket>.s3.amazonaws.com' para AWS S3 y 'https://storage.googleapis.com/<bucket>' para GCS."
objectStorageBaseUrlDesc: "Prefijo de URL utilizado para construir URL para hacer\
\ referencia a objetos (medios). Especifique su URL si está utilizando un CDN o\
\ Proxy; de lo contrario, especifique la dirección a la que se puede acceder públicamente\
\ de acuerdo con la guía de servicio que va a utilizar. i.g 'https://<bucket>.s3.amazonaws.com'\
\ para AWS S3 y 'https://storage.googleapis.com/<bucket>' para GCS."
objectStorageBucket: "Bucket"
objectStorageBucketDesc: "Especifique el nombre del depósito utilizado en el servicio configurado."
objectStorageBucketDesc: "Especifique el nombre del depósito utilizado en el servicio\
\ configurado."
objectStoragePrefix: "Prefix"
objectStoragePrefixDesc: "Los archivos se almacenarán en el directorio de este prefijo."
objectStorageEndpoint: "Endpoint"
objectStorageEndpointDesc: "Deje esto en blanco si está utilizando AWS S3; de lo contrario, especifique el punto final como '<host>' o '<host>: <port>' de acuerdo con la guía de servicio que va a utilizar."
objectStorageEndpointDesc: "Deje esto en blanco si está utilizando AWS S3; de lo contrario,\
\ especifique el punto final como '<host>' o '<host>: <port>' de acuerdo con la\
\ guía de servicio que va a utilizar."
objectStorageRegion: "Region"
objectStorageRegionDesc: "Especifique una región como 'xx-east-1'. Si su servicio no tiene distinción sobre regiones, déjelo en blanco o complete con 'us-east-1'."
objectStorageRegionDesc: "Especifique una región como 'xx-east-1'. Si su servicio\
\ no tiene distinción sobre regiones, déjelo en blanco o complete con 'us-east-1'."
objectStorageUseSSL: "Usar SSL"
objectStorageUseSSLDesc: "Desactive esto si no va a usar HTTPS para la conexión API"
objectStorageUseProxy: "Conectarse a través de Proxy"
objectStorageUseProxyDesc: "Desactive esto si no va a usar Proxy para la conexión de Almacenamiento de objetos"
objectStorageUseProxyDesc: "Desactive esto si no va a usar Proxy para la conexión\
\ de Almacenamiento de objetos"
objectStorageSetPublicRead: "Seleccionar \"public-read\" al subir "
serverLogs: "Registros del servidor"
deleteAll: "Eliminar todos"
@ -524,7 +565,8 @@ sort: "Ordenar"
ascendingOrder: "Ascendente"
descendingOrder: "Descendente"
scratchpad: "Scratch pad"
scratchpadDescription: "Scratchpad proporciona un entorno experimental para AiScript. Puede escribir, ejecutar y verificar los resultados que interactúan con Misskey."
scratchpadDescription: "Scratchpad proporciona un entorno experimental para AiScript.\
\ Puede escribir, ejecutar y verificar los resultados que interactúan con Calckey."
output: "Salida"
script: "Script"
disablePagesScript: "Deshabilitar AiScript en Páginas"
@ -532,11 +574,14 @@ updateRemoteUser: "Actualizar información de usuario remoto"
deleteAllFiles: "Borrar todos los archivos"
deleteAllFilesConfirm: "¿Desea borrar todos los archivos?"
removeAllFollowing: "Retener todos los siguientes"
removeAllFollowingDescription: "Cancelar todos los siguientes del servidor {host}. Ejecutar en caso de que esta instancia haya dejado de existir"
removeAllFollowingDescription: "Cancelar todos los siguientes del servidor {host}.\
\ Ejecutar en caso de que esta instancia haya dejado de existir"
userSuspended: "Este usuario ha sido suspendido."
userSilenced: "Este usuario ha sido silenciado."
yourAccountSuspendedTitle: "Esta cuenta ha sido suspendida"
yourAccountSuspendedDescription: "Esta cuenta ha sido suspendida debido a violaciones de los términos de servicio del servidor y otras razones. Para más información, póngase en contacto con el administrador. Por favor, no cree una nueva cuenta."
yourAccountSuspendedDescription: "Esta cuenta ha sido suspendida debido a violaciones\
\ de los términos de servicio del servidor y otras razones. Para más información,\
\ póngase en contacto con el administrador. Por favor, no cree una nueva cuenta."
menu: "Menú"
divider: "Divisor"
addItem: "Agregar elemento"
@ -590,13 +635,15 @@ smtpHost: "Host"
smtpPort: "Puerto"
smtpUser: "Nombre de usuario"
smtpPass: "Contraseña"
emptyToDisableSmtpAuth: "Deje el nombre del usuario y la contraseña en blanco para deshabilitar la autenticación SMTP"
emptyToDisableSmtpAuth: "Deje el nombre del usuario y la contraseña en blanco para\
\ deshabilitar la autenticación SMTP"
smtpSecure: "Usar SSL/TLS implícito en la conexión SMTP"
smtpSecureInfo: "Apagar cuando se use STARTTLS"
testEmail: "Prueba de envío"
wordMute: "Silenciar palabras"
regexpError: "Error de la expresión regular"
regexpErrorDescription: "Ocurrió un error en la expresión regular en la linea {line} de las palabras muteadas {tab}"
regexpErrorDescription: "Ocurrió un error en la expresión regular en la linea {line}\
\ de las palabras muteadas {tab}"
instanceMute: "Instancias silenciadas"
userSaysSomething: "{name} dijo algo"
makeActive: "Activar"
@ -612,10 +659,13 @@ create: "Crear"
notificationSetting: "Ajustes de Notificaciones"
notificationSettingDesc: "Por favor elija el tipo de notificación a mostrar"
useGlobalSetting: "Usar ajustes globales"
useGlobalSettingDesc: "Al activarse, se usará la configuración de notificaciones de la cuenta, al desactivarse se pueden hacer configuraciones particulares."
useGlobalSettingDesc: "Al activarse, se usará la configuración de notificaciones de\
\ la cuenta, al desactivarse se pueden hacer configuraciones particulares."
other: "Otro"
regenerateLoginToken: "Regenerar token de login"
regenerateLoginTokenDescription: "Regenerar el token usado internamente durante el login. No siempre es necesario hacerlo. Al hacerlo de nuevo, se deslogueará en todos los dispositivos."
regenerateLoginTokenDescription: "Regenerar el token usado internamente durante el\
\ login. No siempre es necesario hacerlo. Al hacerlo de nuevo, se deslogueará en\
\ todos los dispositivos."
setMultipleBySeparatingWithSpace: "Puedes añadir mas de uno, separado por espacios."
fileIdOrUrl: "Id del archivo o URL"
behavior: "Comportamiento"
@ -623,13 +673,15 @@ sample: "Muestra"
abuseReports: "Reportes"
reportAbuse: "Reportar"
reportAbuseOf: "Reportar a {name}"
fillAbuseReportDescription: "Ingrese los detalles del reporte. Si hay una nota en particular, ingrese la URL de esta."
fillAbuseReportDescription: "Ingrese los detalles del reporte. Si hay una nota en\
\ particular, ingrese la URL de esta."
abuseReported: "Se ha enviado el reporte. Muchas gracias."
reporter: "Reportador"
reporteeOrigin: "Reportar a"
reporterOrigin: "Origen del reporte"
forwardReport: "Transferir un informe a una instancia remota"
forwardReportIsAnonymous: "No puede ver su información de la instancia remota y aparecerá como una cuenta anónima del sistema"
forwardReportIsAnonymous: "No puede ver su información de la instancia remota y aparecerá\
\ como una cuenta anónima del sistema"
send: "Enviar"
abuseMarkAsResolved: "Marcar reporte como resuelto"
openInNewTab: "Abrir en una Nueva Pestaña"
@ -647,9 +699,11 @@ createNew: "Crear"
optional: "Opcional"
createNewClip: "Crear clip nuevo"
unclip: "Quitar clip"
confirmToUnclipAlreadyClippedNote: "Esta nota ya está incluida en el clip \"{name}\". ¿Quiere quitar la nota del clip?"
confirmToUnclipAlreadyClippedNote: "Esta nota ya está incluida en el clip \"{name}\"\
. ¿Quiere quitar la nota del clip?"
public: "Público"
i18nInfo: "Calckey está siendo traducido a varios idiomas gracias a voluntarios. Se puede colaborar traduciendo en {link}"
i18nInfo: "Calckey está siendo traducido a varios idiomas gracias a voluntarios. Se\
\ puede colaborar traduciendo en {link}"
manageAccessTokens: "Administrar tokens de acceso"
accountInfo: "Información de la Cuenta"
notesCount: "Cantidad de notas"
@ -668,12 +722,18 @@ no: "No"
driveFilesCount: "Cantidad de archivos en el drive"
driveUsage: "Uso del drive"
noCrawle: "Rechazar indexación del crawler"
noCrawleDescription: "Pedir a los motores de búsqueda que no indexen tu perfil, notas, páginas, etc."
lockedAccountInfo: "A menos que configures la visibilidad de tus notas como \"Sólo seguidores\", tus notas serán visibles para cualquiera, incluso si requieres que los seguidores sean aprobados manualmente."
alwaysMarkSensitive: "Marcar los medios de comunicación como contenido sensible por defecto"
noCrawleDescription: "Pedir a los motores de búsqueda que no indexen tu perfil, notas,\
\ páginas, etc."
lockedAccountInfo: "A menos que configures la visibilidad de tus notas como \"Sólo\
\ seguidores\", tus notas serán visibles para cualquiera, incluso si requieres que\
\ los seguidores sean aprobados manualmente."
alwaysMarkSensitive: "Marcar los medios de comunicación como contenido sensible por\
\ defecto"
loadRawImages: "Cargar las imágenes originales en lugar de mostrar las miniaturas"
disableShowingAnimatedImages: "No reproducir imágenes animadas"
verificationEmailSent: "Se le ha enviado un correo electrónico de confirmación. Por favor, acceda al enlace proporcionado en el correo electrónico para completar la configuración."
verificationEmailSent: "Se le ha enviado un correo electrónico de confirmación. Por\
\ favor, acceda al enlace proporcionado en el correo electrónico para completar\
\ la configuración."
notSet: "Sin especificar"
emailVerified: "Su dirección de correo electrónico ha sido verificada."
noteFavoritesCount: "Número de notas favoritas"
@ -685,14 +745,16 @@ clips: "Clip"
experimentalFeatures: "Características experimentales"
developer: "Desarrolladores"
makeExplorable: "Hacer visible la cuenta en \"Explorar\""
makeExplorableDescription: "Si desactiva esta opción, su cuenta no aparecerá en la sección \"Explorar\"."
makeExplorableDescription: "Si desactiva esta opción, su cuenta no aparecerá en la\
\ sección \"Explorar\"."
showGapBetweenNotesInTimeline: "Mostrar un intervalo entre notas en la línea de tiempo"
duplicate: "Duplicar"
left: "Izquierda"
center: "Centrar"
wide: "Ancho"
narrow: "Estrecho"
reloadToApplySetting: "Esta configuración sólo se aplicará después de recargar la página. ¿Recargar ahora?"
reloadToApplySetting: "Esta configuración sólo se aplicará después de recargar la\
\ página. ¿Recargar ahora?"
needReloadToApply: "Se requiere un reinicio para la aplicar los cambios"
showTitlebar: "Mostrar la barra de título"
clearCache: "Limpiar caché"
@ -700,7 +762,11 @@ onlineUsersCount: "{n} usuarios en línea"
nUsers: "{n} Usuarios"
nNotes: "{n} Notas"
sendErrorReports: "Envíar informe de errores"
sendErrorReportsDescription: "Si habilita esta opción, ayudará a mejorar la calidad de Misskey compartiendo información detallada sobre los errores cuando se produzca un problema.\nEsto incluye información como la versión de su sistema operativo, el tipo de navegador que utiliza, su historial de actividad, etc."
sendErrorReportsDescription: "Si habilita esta opción, los detalles de los errores\
\ serán compartidos con Calckey cuando ocurra un problema, lo que ayudará a mejorar\
\ la calidad de Calckey. \nEsto incluye información como la versión del sistema\
\ operativo, el tipo de navegador que está utilizando y su historial en Calckey,\
\ entre otros datos."
myTheme: "Mi Tema"
backgroundColor: "Fondo"
accentColor: "Acento"
@ -728,7 +794,8 @@ receiveAnnouncementFromInstance: "Recibir notificaciones de la instancia"
emailNotification: "Notificaciones por correo electrónico"
publish: "Publicar"
inChannelSearch: "Buscar en el canal"
useReactionPickerForContextMenu: "Haga clic con el botón derecho para abrir el menu de reacciones"
useReactionPickerForContextMenu: "Haga clic con el botón derecho para abrir el menu\
\ de reacciones"
typingUsers: "{users} está escribiendo"
jumpToSpecifiedDate: "Saltar a una fecha específica"
showingPastTimeline: "Mostrar líneas de tiempo antiguas"
@ -739,14 +806,16 @@ unlikeConfirm: "¿Quitar como favorito?"
fullView: "Vista completa"
quitFullView: "quitar vista completa"
addDescription: "Agregar descripción"
userPagePinTip: "Puede mantener sus notas visibles aquí seleccionando Pin en el menú de notas individuales"
userPagePinTip: "Puede mantener sus notas visibles aquí seleccionando Pin en el menú\
\ de notas individuales"
notSpecifiedMentionWarning: "Algunas menciones no están incluidas en el destino"
info: "Información"
userInfo: "Información del usuario"
unknown: "Desconocido"
onlineStatus: "En línea"
hideOnlineStatus: "mostrarse como desconectado"
hideOnlineStatusDescription: "Ocultar su estado en línea puede reducir la eficacia de algunas funciones, como la búsqueda"
hideOnlineStatusDescription: "Ocultar su estado en línea puede reducir la eficacia\
\ de algunas funciones, como la búsqueda"
online: "En línea"
active: "Activo"
offline: "Sin conexión"
@ -781,7 +850,8 @@ emailNotConfiguredWarning: "No se ha configurado una dirección de correo electr
ratio: "Proporción"
previewNoteText: "Mostrar vista preliminar"
customCss: "CSS personalizado"
customCssWarn: "Este ajuste sólo debe utilizarse si se sabe lo que hace. Introducir valores inadecuados puede hacer que el cliente deje de funcionar con normalidad."
customCssWarn: "Este ajuste sólo debe utilizarse si se sabe lo que hace. Introducir\
\ valores inadecuados puede hacer que el cliente deje de funcionar con normalidad."
global: "Global"
squareAvatars: "Mostrar iconos cuadrados"
sent: "Enviar"
@ -791,12 +861,14 @@ hashtags: "Hashtag"
troubleshooting: "Solución de problemas"
useBlurEffect: "Utilizar efecto de desenfoque en la interfaz de usuario"
learnMore: "Ver más"
misskeyUpdated: Misskey ha sido actualizado!"
misskeyUpdated: Calckey ha sido actualizado!"
whatIsNew: "Mostrar cambios"
translate: "Traducir"
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."
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"
keepCw: "Mantener la advertencia de contenido"
pubSub: "Cuentas Pub/Sub"
@ -806,18 +878,21 @@ unresolved: "Sin resolver"
breakFollow: "Dejar de seguir"
itsOn: "¡Está encendido!"
itsOff: "¡Está apagado!"
emailRequiredForSignup: "Se requere una dirección de correo electrónico para el registro de la cuenta"
emailRequiredForSignup: "Se requere una dirección de correo electrónico para el registro\
\ de la cuenta"
unread: "No leído"
filter: "Filtro"
controlPanel: "Panel de control"
manageAccounts: "Administrar cuenta"
makeReactionsPublic: "Hacer el historial de reacciones público"
makeReactionsPublicDescription: "Todas las reacciones que hayas hecho serán públicamente visibles."
makeReactionsPublicDescription: "Todas las reacciones que hayas hecho serán públicamente\
\ visibles."
classic: "Clásico"
muteThread: "Ocultar hilo"
unmuteThread: "Mostrar hilo"
ffVisibility: "Visibilidad de seguidores y seguidos"
ffVisibilityDescription: "Puedes configurar quien puede ver a quienes sigues y quienes te siguen"
ffVisibilityDescription: "Puedes configurar quien puede ver a quienes sigues y quienes\
\ te siguen"
continueThread: "Ver la continuación del hilo"
deleteAccountConfirm: "La cuenta será borrada. ¿Está seguro?"
incorrectPassword: "La contraseña es incorrecta"
@ -858,14 +933,16 @@ thereIsUnresolvedAbuseReportWarning: "Hay reportes sin resolver"
recommended: "Recomendado"
check: "Verificar"
driveCapOverrideLabel: "Cambiar la capacidad de la unidad para este usuario"
driveCapOverrideCaption: "Restablecer la capacidad a su predeterminado ingresando un valor de 0 o menos"
driveCapOverrideCaption: "Restablecer la capacidad a su predeterminado ingresando\
\ un valor de 0 o menos"
requireAdminForView: "Necesitas iniciar sesión como administrador para ver esto."
isSystemAccount: "Cuenta creada y operada automáticamente por el sistema"
typeToConfirm: "Ingrese {x} para confirmar"
deleteAccount: "Borrar cuenta"
document: "Documento"
numberOfPageCache: "Cantidad de páginas cacheadas"
numberOfPageCacheDescription: "Al aumentar el número mejora la conveniencia pero tambien puede aumentar la carga y la memoria a usarse"
numberOfPageCacheDescription: "Al aumentar el número mejora la conveniencia pero tambien\
\ puede aumentar la carga y la memoria a usarse"
logoutConfirm: "¿Cerrar sesión?"
lastActiveDate: "Utilizado por última vez el"
statusbar: "Barra de estado"
@ -882,42 +959,59 @@ sensitiveMediaDetection: "Detección de contenido NSFW"
localOnly: "Solo local"
remoteOnly: "Sólo remoto"
failedToUpload: "La subida falló"
cannotUploadBecauseInappropriate: "Este archivo no se puede subir debido a que algunas partes han sido detectadas comoNSFW."
cannotUploadBecauseNoFreeSpace: "La subida falló debido a falta de espacio libre en la unidad del usuario."
cannotUploadBecauseInappropriate: "Este archivo no se puede subir debido a que algunas\
\ partes han sido detectadas comoNSFW."
cannotUploadBecauseNoFreeSpace: "La subida falló debido a falta de espacio libre en\
\ la unidad del usuario."
beta: "Beta"
enableAutoSensitive: "Marcar automáticamente contenido NSFW"
enableAutoSensitiveDescription: "Permite la detección y marcado automático de contenido NSFW usando 'Machine Learning' cuando sea posible. Incluso si esta opción está desactivada, puede ser activado para toda la instancia."
activeEmailValidationDescription: "Habilita la validación estricta de direcciones de correo electrónico, lo cual incluye la revisión de direcciones desechables y si se puede comunicar con éstas. Cuando está deshabilitado, sólo el formato de la dirección es validado."
enableAutoSensitiveDescription: "Permite la detección y marcado automático de contenido\
\ NSFW usando 'Machine Learning' cuando sea posible. Incluso si esta opción está\
\ desactivada, puede ser activado para toda la instancia."
activeEmailValidationDescription: "Habilita la validación estricta de direcciones\
\ de correo electrónico, lo cual incluye la revisión de direcciones desechables\
\ y si se puede comunicar con éstas. Cuando está deshabilitado, sólo el formato\
\ de la dirección es validado."
navbar: "Barra de navegación"
shuffle: "Aleatorio"
account: "Cuentas"
move: "Mover"
_sensitiveMediaDetection:
description: "Reduce el esfuerzo de la moderación el el servidor a través del reconocimiento automático de contenido NSFW usando 'Machine Learning'. Esto puede incrementar ligeramente la carga en el servidor."
description: "Reduce el esfuerzo de la moderación el el servidor a través del reconocimiento\
\ automático de contenido NSFW usando 'Machine Learning'. Esto puede incrementar\
\ ligeramente la carga en el servidor."
sensitivity: "Sensibilidad de detección"
sensitivityDescription: "Reducir la sensibilidad puede acarrear a varios falsos positivos, mientras que incrementarla puede reducir las detecciones (falsos negativos)."
sensitivityDescription: "Reducir la sensibilidad puede acarrear a varios falsos\
\ positivos, mientras que incrementarla puede reducir las detecciones (falsos\
\ negativos)."
setSensitiveFlagAutomatically: "Marcar como NSFW"
setSensitiveFlagAutomaticallyDescription: "Los resultados de la detección interna pueden ser retenidos incluso si la opción está desactivada."
setSensitiveFlagAutomaticallyDescription: "Los resultados de la detección interna\
\ pueden ser retenidos incluso si la opción está desactivada."
analyzeVideos: "Habilitar el análisis de videos"
analyzeVideosDescription: "Analizar videos en adición a las imágenes. Esto puede incrementar ligeramente la carga del servidor."
analyzeVideosDescription: "Analizar videos en adición a las imágenes. Esto puede\
\ incrementar ligeramente la carga del servidor."
_emailUnavailable:
used: "Ya fue usado"
format: "Formato no válido."
disposable: "No es un correo reutilizable"
format: "El formato de este correo electrónico no es válido"
disposable: "No se pueden utilizar direcciones de correo electrónico desechables"
mx: "Servidor de correo inválido"
smtp: "Servidor de correo no disponible"
_ffVisibility:
public: "Publicar"
public: "Público"
followers: "Visible solo para seguidores"
private: "Privado"
_signup:
almostThere: "Ya falta poco"
emailAddressInfo: "Ingrese el correo electrónico que usa. Este no se hará público."
emailSent: "Se envió un correo de verificación a la dirección {email}. Acceda al link enviado en el correo para completar el ingreso."
emailSent: "Se envió un correo de verificación a la dirección {email}. Acceda al\
\ link enviado en el correo para completar el ingreso."
_accountDelete:
accountDelete: "Eliminar Cuenta"
mayTakeTime: "La eliminación de la cuenta es un proceso que precisa de carga. Puede pasar un tiempo hasta que se complete si es mucho el contenido creado y los archivos subidos."
sendEmail: "Cuando se termine de borrar la cuenta, se enviará un correo a la dirección usada para el registro."
mayTakeTime: "La eliminación de la cuenta es un proceso que precisa de carga. Puede\
\ pasar un tiempo hasta que se complete si es mucho el contenido creado y los\
\ archivos subidos."
sendEmail: "Cuando se termine de borrar la cuenta, se enviará un correo a la dirección\
\ usada para el registro."
requestAccountDelete: "Pedir la eliminación de la cuenta."
started: "El proceso de eliminación ha comenzado."
inProgress: "La eliminación está en proceso."
@ -925,9 +1019,12 @@ _ad:
back: "Deseleccionar"
reduceFrequencyOfThisAd: "Mostrar menos este anuncio."
_forgotPassword:
enterEmail: "Ingrese el correo usado para registrar la cuenta. Se enviará un link para resetear la contraseña."
enterEmail: "Ingrese el correo usado para registrar la cuenta. Se enviará un link\
\ para resetear la contraseña."
ifNoEmail: "Si no utilizó un correo para crear la cuenta, contáctese con el administrador."
contactAdmin: "Esta instancia no admite el uso de direcciones de correo electrónico, póngase en contacto con el administrador de la instancia para restablecer su contraseña"
contactAdmin: "Esta instancia no admite el uso de direcciones de correo electrónico,\
\ póngase en contacto con el administrador de la instancia para restablecer su\
\ contraseña"
_gallery:
my: "Mi galería"
liked: "Publicaciones que me gustan"
@ -950,12 +1047,15 @@ _preferencesBackups:
save: "Guardar cambios"
inputName: "Por favor, ingresa un nombre para este respaldo"
cannotSave: "Fallo al guardar"
nameAlreadyExists: "Un respaldo llamado \"{name}\" ya existe. Por favor ingresa un nombre diferente"
applyConfirm: "¿Realmente quieres aplicar los cambios desde el archivo \"{name}\" a este dispositivo? Las configuraciones existentes serán sobreescritas. "
nameAlreadyExists: "Un respaldo llamado \"{name}\" ya existe. Por favor ingresa\
\ un nombre diferente"
applyConfirm: "¿Realmente quieres aplicar los cambios desde el archivo \"{name}\"\
\ a este dispositivo? Las configuraciones existentes serán sobreescritas. "
saveConfirm: "¿Guardar respaldo como \"{name}\"?"
deleteConfirm: "¿Borrar el respaldo \"{name}\"?"
renameConfirm: "¿Renombrar este respaldo de \"{old}\" a \"{new}\"?"
noBackups: "No existen respaldos. Deberás respaldar las configuraciones del cliente en este servidor usando \"Crear nuevo respaldo\""
noBackups: "No existen respaldos. Deberás respaldar las configuraciones del cliente\
\ en este servidor usando \"Crear nuevo respaldo\""
createdAt: "Creado: {date} {time}"
updatedAt: "Actualizado: {date} {time}"
cannotLoad: "La carga falló"
@ -967,24 +1067,29 @@ _registry:
domain: "Dominio"
createKey: "Crear una llave"
_aboutMisskey:
about: "Misskey es un software de código abierto, desarrollado por syuilo desde el 2014"
about: "Calckey es una bifurcación de Misskey creada por ThatOneCalculator, que\
\ ha estado en desarrollo desde el 2022."
contributors: "Principales colaboradores"
allContributors: "Todos los colaboradores"
source: "Código fuente"
translation: "Traducir Misskey"
donate: "Donar a Misskey"
morePatrons: "Muchas más personas nos apoyan. Muchas gracias🥰"
patrons: "Patrocinadores"
translation: "Traducir Calckey"
donate: "Donar a Calckey"
morePatrons: "También apreciamos el apoyo de muchos más que no están enlistados\
\ aquí. ¡Gracias! \U0001F970"
patrons: "Mecenas de Calckey"
_nsfw:
respect: "Ocultar medios NSFW"
ignore: "No esconder medios NSFW "
force: "Ocultar todos los medios"
_mfm:
cheatSheet: "Hoja de referencia de MFM"
intro: "MFM es un lenguaje de marcado dedicado que se puede usar en varios lugares dentro de Misskey. Aquí puede ver una lista de sintaxis disponibles en MFM."
dummy: "Misskey expande el mundo de la Fediverso"
intro: "MFM es un lenguaje de marcado dedicado que se puede usar en varios lugares\
\ dentro de Misskey, Calckey, Akkoma, y mucho más. Aquí puede ver una lista de\
\ sintaxis disponibles en MFM."
dummy: "Calckey expande el mundo de la Fediverso"
mention: "Menciones"
mentionDescription: "El signo @ seguido de un nombre de usuario se puede utilizar para notificar a un usuario en particular."
mentionDescription: "El signo @ seguido de un nombre de usuario se puede utilizar\
\ para notificar a un usuario en particular."
hashtag: "Hashtag"
hashtagDescription: "Puede especificar un hashtag con un numeral y el texto."
url: "URL"
@ -1000,7 +1105,8 @@ _mfm:
inlineCode: "Código (insertado)"
inlineCodeDescription: "Muestra el código de un programa resaltando su sintaxis"
blockCode: "Código (bloque)"
blockCodeDescription: "Código de resaltado de sintaxis, como programas de varias líneas con bloques."
blockCodeDescription: "Código de resaltado de sintaxis, como programas de varias\
\ líneas con bloques."
inlineMath: "Fórmula (insertado)"
inlineMathDescription: "Muestra fórmulas (KaTeX) insertadas"
blockMath: "Fórmula (bloque)"
@ -1012,7 +1118,8 @@ _mfm:
search: "Buscar"
searchDescription: "Muestra una caja de búsqueda con texto pre-escrito"
flip: "Echar de un capirotazo"
flipDescription: "Voltea el contenido hacia arriba / abajo o hacia la izquierda / derecha."
flipDescription: "Voltea el contenido hacia arriba / abajo o hacia la izquierda\
\ / derecha."
jelly: "Animación (gelatina)"
jellyDescription: "Aplica un efecto de animación tipo gelatina"
tada: "Animación (tadá)"
@ -1034,7 +1141,8 @@ _mfm:
x4: "Totalmente grande"
x4Description: "Muestra el contenido totalmente grande"
blur: "Desenfoque"
blurDescription: "Para desenfocar el contenido. Se muestra claramente al colocar el puntero encima."
blurDescription: "Para desenfocar el contenido. Se muestra claramente al colocar\
\ el puntero encima."
font: "Fuente"
fontDescription: "Elegir la fuente del contenido"
rainbow: "Arcoíris"
@ -1044,7 +1152,8 @@ _mfm:
rotate: "Rotar"
rotateDescription: "Rota el contenido a un ángulo especificado."
plain: "Plano"
plainDescription: "Desactiva los efectos de todo el contenido MFM con este efecto MFM."
plainDescription: "Desactiva los efectos de todo el contenido MFM con este efecto\
\ MFM."
_instanceTicker:
none: "No mostrar"
remote: "Mostrar a usuarios remotos"
@ -1053,6 +1162,7 @@ _serverDisconnectedBehavior:
reload: "Recargar automáticamente"
dialog: "Mostrar diálogo de advertencia"
quiet: "Advertencia discreta"
nothing: Hacer nada
_channel:
create: "Crear canal"
edit: "Editar canal"
@ -1070,15 +1180,20 @@ _menuDisplay:
hide: "Ocultar"
_wordMute:
muteWords: "Palabras que silenciar"
muteWordsDescription: "Separar con espacios indica una declaracion And, separar con lineas nuevas indica una declaracion Or。"
muteWordsDescription2: "Encerrar las palabras clave entre numerales para usar expresiones regulares"
muteWordsDescription: "Separar con espacios indica una declaracion And, separar\
\ con lineas nuevas indica una declaracion Or。"
muteWordsDescription2: "Encerrar las palabras clave entre numerales para usar expresiones\
\ regulares"
softDescription: "Ocultar en la linea de tiempo las notas que cumplen las condiciones"
hardDescription: "Evitar que se agreguen a la linea de tiempo las notas que cumplen las condiciones. Las notas no agregadas seguirán quitadas aunque cambien las condiciones."
hardDescription: "Evitar que se agreguen a la linea de tiempo las notas que cumplen\
\ las condiciones. Las notas no agregadas seguirán quitadas aunque cambien las\
\ condiciones."
soft: "Suave"
hard: "Duro"
mutedNotes: "Notas silenciadas"
_instanceMute:
instanceMuteDescription: "Silencia todas las notas y reposts de la instancias seleccionadas, incluyendo respuestas a los usuarios de las mismas"
instanceMuteDescription: "Silencia todas las notas y reposts de la instancias seleccionadas,\
\ incluyendo respuestas a los usuarios de las mismas"
instanceMuteDescription2: "Separar por líneas"
title: "Oculta las notas de las instancias listadas."
heading: "Instancias a silenciar"
@ -1184,32 +1299,47 @@ _tutorial:
step1_1: "¡Bienvenido!"
step1_2: "Vamos a configurarte. Estarás listo y funcionando en poco tiempo"
step2_1: "En primer lugar, rellena tu perfil"
step2_2: "Proporcionar algo de información sobre quién eres hará que sea más fácil para los demás saber si quieren ver tus notas o seguirte."
step2_2: "Proporcionar algo de información sobre quién eres hará que sea más fácil\
\ para los demás saber si quieren ver tus notas o seguirte."
step3_1: "¡Ahora es el momento de seguir a algunas personas!"
step3_2: "Tu página de inicio y tus líneas de tiempo sociales se basan en quién sigues, así que intenta seguir un par de cuentas para empezar.\nHaz clic en el círculo más en la parte superior derecha de un perfil para seguirlos."
step3_2: "Tu página de inicio y tus líneas de tiempo sociales se basan en quién\
\ sigues, así que intenta seguir un par de cuentas para empezar.\nHaz clic en\
\ el círculo más en la parte superior derecha de un perfil para seguirlos."
step4_1: "Vamos a salir a la calle"
step4_2: "Para tu primer post, a algunas personas les gusta hacer un post de {introduction} o un simple \"¡Hola mundo!\""
step4_2: "Para tu primer post, a algunas personas les gusta hacer un post de {introduction}\
\ o un simple \"¡Hola mundo!\""
step5_1: "¡Líneas de tiempo, líneas de tiempo por todas partes!"
step5_2: "Su instancia tiene {timelines} diferentes líneas de tiempo habilitadas"
step5_3: "La línea de tiempo Inicio {icon} es donde puedes ver las publicaciones de tus seguidores."
step5_4: "La línea de tiempo Local {icon} es donde puedes ver las publicaciones de todos los demás en esta instancia."
step5_5: "La línea de tiempo {icon} recomendada es donde puedes ver las publicaciones de las instancias que los administradores recomiendan."
step5_6: "La línea de tiempo Social {icon} es donde puedes ver las publicaciones de los amigos de tus seguidores."
step5_7: "La línea de tiempo Global {icon} es donde puedes ver las publicaciones de todas las demás instancias conectadas."
step5_3: "La línea de tiempo Inicio {icon} es donde puedes ver las publicaciones\
\ de tus seguidores."
step5_4: "La línea de tiempo Local {icon} es donde puedes ver las publicaciones\
\ de todos los demás en esta instancia."
step5_5: "La línea de tiempo {icon} recomendada es donde puedes ver las publicaciones\
\ de las instancias que los administradores recomiendan."
step5_6: "La línea de tiempo Social {icon} es donde puedes ver las publicaciones\
\ de los amigos de tus seguidores."
step5_7: "La línea de tiempo Global {icon} es donde puedes ver las publicaciones\
\ de todas las demás instancias conectadas."
step6_1: "Entonces, ¿qué es este lugar?"
step6_2: "Bueno, no sólo te has unido a Calckey. Te has unido a un portal del Fediverso, una red interconectada de miles de servidores, llamada \"instancias\""
step6_3: "Cada servidor funciona de forma diferente, y no todos los servidores ejecutan Calckey. Sin embargo, ¡éste lo hace! Es un poco complicado, pero le cogerás el tranquillo enseguida"
step6_2: "Bueno, no sólo te has unido a Calckey. Te has unido a un portal del Fediverso,\
\ una red interconectada de miles de servidores, llamada \"instancias\""
step6_3: "Cada servidor funciona de forma diferente, y no todos los servidores ejecutan\
\ Calckey. Sin embargo, ¡éste lo hace! Es un poco complicado, pero le cogerás\
\ el tranquillo enseguida"
step6_4: "¡Ahora ve, explora y diviértete!"
_2fa:
alreadyRegistered: "Ya has completado la configuración."
registerDevice: "Registrar dispositivo"
registerKey: "Registrar clave"
step1: "Primero, instale en su dispositivo la aplicación de autenticación {a} o {b} u otra."
step1: "Primero, instale en su dispositivo la aplicación de autenticación {a} o\
\ {b} u otra."
step2: "Luego, escanee con la aplicación el código QR mostrado en pantalla."
step2Url: "En una aplicación de escritorio se puede ingresar la siguiente URL:"
step3: "Para terminar, ingrese el token mostrado en la aplicación."
step4: "Ahora cuando inicie sesión, ingrese el mismo token"
securityKeyInfo: "Se puede configurar el inicio de sesión usando una clave de seguridad de hardware que soporte FIDO2 o con un certificado de huella digital o con un PIN"
securityKeyInfo: "Se puede configurar el inicio de sesión usando una clave de seguridad\
\ de hardware que soporte FIDO2 o con un certificado de huella digital o con un\
\ PIN"
_permissions:
"read:account": "Ver información de la cuenta"
"write:account": "Editar información de la cuenta"
@ -1245,7 +1375,8 @@ _permissions:
"write:gallery-likes": "Editar favoritos de la galería"
_auth:
shareAccess: "¿Desea permitir el acceso a la cuenta \"{name}\"?"
shareAccessAsk: "¿Está seguro de que desea autorizar esta aplicación para acceder a su cuenta?"
shareAccessAsk: "¿Está seguro de que desea autorizar esta aplicación para acceder\
\ a su cuenta?"
permissionAsk: "Esta aplicación requiere los siguientes permisos"
pleaseGoBack: "Por favor, vuelve a la aplicación"
callback: "Volviendo a la aplicación"
@ -1287,6 +1418,9 @@ _widgets:
serverMetric: "Estadísticas del servidor"
aiscript: "Consola de AiScript"
aichan: "indigo"
userList: Lista Usuarios
_userList:
chooseList: Seleccione una lista
_cw:
hide: "Ocultar"
show: "Ver más"
@ -1348,6 +1482,8 @@ _profile:
metadataContent: "Contenido"
changeAvatar: "Cambiar avatar"
changeBanner: "Cambiar banner"
locationDescription: Si ingresas tu ciudad primero, el tiempo local tuyo será visible
para otros usuarios.
_exportOrImport:
allNotes: "Todas las notas"
followingList: "Siguiendo"
@ -1387,6 +1523,7 @@ _timelines:
local: "Local"
social: "Social"
global: "Global"
recommended: Recomendado
_pages:
newPage: "Crear página"
editPage: "Editar página"
@ -1633,7 +1770,8 @@ _pages:
_seedRandomPick:
arg1: "Semilla"
arg2: "Listas"
DRPWPM: "Elegir aleatoriamente de la lista ponderada (Diariamente para cada usuario)"
DRPWPM: "Elegir aleatoriamente de la lista ponderada (Diariamente para cada\
\ usuario)"
_DRPWPM:
arg1: "Lista de texto"
pick: "Elegir de la lista"
@ -1664,7 +1802,8 @@ _pages:
_for:
arg1: "Cantidad de repeticiones"
arg2: "Acción"
typeError: "El slot {slot} acepta el tipo {expect} pero fue ingresado el tipo {actual}"
typeError: "El slot {slot} acepta el tipo {expect} pero fue ingresado el tipo\
\ {actual}"
thereIsEmptySlot: "El slot {slot} está vacío"
types:
string: "Texto"
@ -1728,8 +1867,10 @@ _deck:
newProfile: "Nuevo perfil"
deleteProfile: "Eliminar perfil"
introduction: "¡Crea la interfaz perfecta para tí organizando las columnas libremente!"
introduction2: "Presiona en la + de la derecha de la pantalla para añadir nuevas columnas donde quieras."
widgetsIntroduction: "Por favor selecciona \"Editar Widgets\" en el menú columna y agrega un widget."
introduction2: "Presiona en la + de la derecha de la pantalla para añadir nuevas\
\ columnas donde quieras."
widgetsIntroduction: "Por favor selecciona \"Editar Widgets\" en el menú columna\
\ y agrega un widget."
_columns:
main: "Principal"
widgets: "Widgets"
@ -1739,3 +1880,51 @@ _deck:
list: "Listas"
mentions: "Menciones"
direct: "Mensaje directo"
manageGroups: Administrar grupos
replayTutorial: Repetir Tutorial
privateMode: Modo privado
addInstance: Añadir una instancia
renoteMute: Silenciar impulsos
renoteUnmute: Dejar de silenciar impulsos
flagSpeakAsCat: Habla como un gato
selectInstance: Selectiona una instancia
flagSpeakAsCatDescription: Tu publicación se "nyanified" cuando esté en modo gato
allowedInstances: Instancias en la lista blanca
breakFollowConfirm: ¿Estás seguro de que quieres eliminar el seguidor?
subscribePushNotification: Habilitar notificaciones
unsubscribePushNotification: Desactivar notificaciones
pushNotificationAlreadySubscribed: Las notificaciones ya están activados
pushNotificationNotSupported: Su navegador o instancia no admite notificaciones
moveAccount: ¡Mover cuenta!
moveFrom: Mueve a esta cuenta de una cuenta antigua
moveFromLabel: 'La cuenta que estás moviendo de:'
moveAccountDescription: ''
license: Licencia
_apps:
apps: Aplicaciones
crossPlatform: Plataforma Cruzada
mobile: Teléfono móvil
secondClass: Segunda clase
lesskey: ''
firstClass: Primera clase
thirdClass: Tercera clase
theDesk: ''
pwa: Instalar PWA
free: Gratis
paid: Pagado
noThankYou: No gracias
userSaysSomethingReason: '{name} dijo {reason}'
hiddenTags: Etiquetas Ocultas
noInstances: No hay instancias
accountMoved: 'Usuario ha movido a una cuenta nueva:'
caption: Auto Subtítulos
showAds: Mostrar Anuncios
enterSendsMessage: Presione "RETORNO" en los mensajes para enviar el mensaje (para
apagarlo es Ctrl + RETORNO)
recommendedInstances: Instancias Recomendadas
instanceSecurity: Seguridad de la instancia
seperateRenoteQuote: Separar impulsados y Citar botones
_messaging:
groups: Grupos
dms: Privado
pushNotification: Notificaciones

View file

@ -1,7 +1,10 @@
---
_lang_: "Français"
headlineMisskey: "Réseau relié par des notes"
introMisskey: "Bienvenue ! Misskey est un service de microblogage décentralisé, libre et ouvert.\nÉcrivez des « notes » et partagez ce qui se passe à linstant présent, autour de vous avec les autres 📡\nLa fonction « réactions », vous permet également dajouter une réaction rapide aux notes des autres utilisateur·rice·s 👍\nExplorons un nouveau monde 🚀"
introMisskey: "Bienvenue ! Misskey est un service de microblogage décentralisé, libre\
\ et ouvert.\nÉcrivez des « notes » et partagez ce qui se passe à linstant présent,\
\ autour de vous avec les autres \U0001F4E1\nLa fonction « réactions », vous permet\
\ également dajouter une réaction rapide aux notes des autres utilisateur·rice·s\
\ \U0001F44D\nExplorons un nouveau monde \U0001F680"
monthAndDay: "{day}/{month}"
search: "Rechercher"
notifications: "Notifications"
@ -23,7 +26,8 @@ otherSettings: "Paramètres avancés"
openInWindow: "Ouvrir dans une nouvelle fenêtre"
profile: "Profil"
timeline: "Fil"
noAccountDescription: "Lutilisateur·rice na pas encore renseigné de biographie de présentation sur son profil."
noAccountDescription: "Lutilisateur·rice na pas encore renseigné de biographie de\
\ présentation sur son profil."
login: "Se connecter"
loggingIn: "Connexion en cours"
logout: "Se déconnecter"
@ -44,7 +48,8 @@ copyContent: "Copier le contenu"
copyLink: "Copier le lien"
delete: "Supprimer"
deleteAndEdit: "Supprimer et réécrire"
deleteAndEditConfirm: "Êtes-vous sûr·e de vouloir supprimer cette note et la reformuler ? Vous perdrez toutes les réactions, renotes et réponses y afférentes."
deleteAndEditConfirm: "Êtes-vous sûr·e de vouloir supprimer cette note et la reformuler\
\ ? Vous perdrez toutes les réactions, renotes et réponses y afférentes."
addToList: "Ajouter à une liste"
sendMessage: "Envoyer un message"
copyUsername: "Copier le nom dutilisateur·rice"
@ -64,14 +69,16 @@ import: "Importer"
export: "Exporter"
files: "Fichiers"
download: "Télécharger"
driveFileDeleteConfirm: "Êtes-vous sûr·e de vouloir supprimer le fichier \"{name}\" ? Les notes liées à ce fichier seront aussi supprimées."
driveFileDeleteConfirm: "Êtes-vous sûr·e de vouloir supprimer le fichier \"{name}\"\
\ ? Les notes liées à ce fichier seront aussi supprimées."
unfollowConfirm: "Désirez-vous vous désabonner de {name} ?"
exportRequested: "Vous avez demandé une exportation. Lopération pourrait prendre un peu de temps. Une terminée, le fichier résultant sera ajouté au Drive."
exportRequested: "Vous avez demandé une exportation. Lopération pourrait prendre\
\ un peu de temps. Une terminée, le fichier résultant sera ajouté au Drive."
importRequested: "Vous avez initié un import. Cela pourrait prendre un peu de temps."
lists: "Listes"
noLists: "Vous navez aucune liste"
note: "Notes"
notes: "Notes"
note: "Post"
notes: "Posts"
following: "Abonnements"
followers: "Abonné·e·s"
followsYou: "Vous suit"
@ -81,9 +88,12 @@ error: "Erreur"
somethingHappened: "Une erreur est survenue"
retry: "Réessayer"
pageLoadError: "Le chargement de la page a échoué"
pageLoadErrorDescription: "Cela est généralement causé par le cache du navigateur ou par un problème réseau. Veuillez vider votre cache ou attendre un peu et réessayer."
serverIsDead: "Le serveur ne répond pas. Patientez quelques instants puis essayez à nouveau."
youShouldUpgradeClient: "Si la page ne s'affiche pas correctement, rechargez-la pour mettre votre client à jour."
pageLoadErrorDescription: "Cela est généralement causé par le cache du navigateur\
\ ou par un problème réseau. Veuillez vider votre cache ou attendre un peu et réessayer."
serverIsDead: "Le serveur ne répond pas. Patientez quelques instants puis essayez\
\ à nouveau."
youShouldUpgradeClient: "Si la page ne s'affiche pas correctement, rechargez-la pour\
\ mettre votre client à jour."
enterListName: "Nom de la liste"
privacy: "Confidentialité"
makeFollowManuallyApprove: "Accepter manuellement les demandes dabonnement"
@ -108,8 +118,11 @@ sensitive: "Contenu sensible"
add: "Ajouter"
reaction: "Réactions"
reactionSetting: "Réactions à afficher dans le sélecteur de réactions"
reactionSettingDescription2: "Déplacer pour réorganiser, cliquer pour effacer, utiliser « + » pour ajouter."
rememberNoteVisibility: "Activer l'option \" se souvenir de la visibilité des notes \" vous permet de réutiliser automatiquement la visibilité utilisée lors de la publication de votre note précédente."
reactionSettingDescription2: "Déplacer pour réorganiser, cliquer pour effacer, utiliser\
\ « + » pour ajouter."
rememberNoteVisibility: "Activer l'option \" se souvenir de la visibilité des notes\
\ \" vous permet de réutiliser automatiquement la visibilité utilisée lors de la\
\ publication de votre note précédente."
attachCancel: "Supprimer le fichier attaché"
markAsSensitive: "Marquer comme sensible"
unmarkAsSensitive: "Supprimer le marquage comme sensible"
@ -137,13 +150,20 @@ emojiUrl: "URL de lémoji"
addEmoji: "Ajouter un émoji"
settingGuide: "Configuration proposée"
cacheRemoteFiles: "Mise en cache des fichiers distants"
cacheRemoteFilesDescription: "Lorsque cette option est désactivée, les fichiers distants sont chargés directement depuis linstance distante. La désactiver diminuera certes lutilisation de lespace de stockage local mais augmentera le trafic réseau puisque les miniatures ne seront plus générées."
cacheRemoteFilesDescription: "Lorsque cette option est désactivée, les fichiers distants\
\ sont chargés directement depuis linstance distante. La désactiver diminuera certes\
\ lutilisation de lespace de stockage local mais augmentera le trafic réseau puisque\
\ les miniatures ne seront plus générées."
flagAsBot: "Ce compte est un robot"
flagAsBotDescription: "Si ce compte est géré de manière automatisée, choisissez cette option. Si elle est activée, elle agira comme un marqueur pour les autres développeurs afin d'éviter des chaînes d'interaction sans fin avec d'autres robots et d'ajuster les systèmes internes de Misskey pour traiter ce compte comme un robot."
flagAsBotDescription: "Si ce compte est géré de manière automatisée, choisissez cette\
\ option. Si elle est activée, elle agira comme un marqueur pour les autres développeurs\
\ afin d'éviter des chaînes d'interaction sans fin avec d'autres robots et d'ajuster\
\ les systèmes internes de Misskey pour traiter ce compte comme un robot."
flagAsCat: "Ce compte est un chat"
flagAsCatDescription: "Activer l'option \" Je suis un chat \" pour ce compte."
flagShowTimelineReplies: "Afficher les réponses dans le fil"
autoAcceptFollowed: "Accepter automatiquement les demandes dabonnement venant dutilisateur·rice·s que vous suivez"
autoAcceptFollowed: "Accepter automatiquement les demandes dabonnement venant dutilisateur·rice·s\
\ que vous suivez"
addAccount: "Ajouter un compte"
loginFailed: "Échec de la connexion"
showOnRemote: "Voir sur linstance distante"
@ -155,7 +175,12 @@ searchWith: "Recherche : {q}"
youHaveNoLists: "Vous navez aucune liste"
followConfirm: "Êtes-vous sûr·e de vouloir suivre {name} ?"
proxyAccount: "Compte proxy"
proxyAccountDescription: "Un compte proxy se comporte, dans certaines conditions, comme un·e abonné·e distant·e pour les utilisateurs d'autres instances. Par exemple, quand un·e utilisateur·rice ajoute un·e utilisateur·rice distant·e à une liste, ses notes ne seront pas visibles sur l'instance si personne ne suit cet·te utilisateur·rice. Le compte proxy va donc suivre cet·te utilisateur·rice pour que ses notes soient acheminées."
proxyAccountDescription: "Un compte proxy se comporte, dans certaines conditions,\
\ comme un·e abonné·e distant·e pour les utilisateurs d'autres instances. Par exemple,\
\ quand un·e utilisateur·rice ajoute un·e utilisateur·rice distant·e à une liste,\
\ ses notes ne seront pas visibles sur l'instance si personne ne suit cet·te utilisateur·rice.\
\ Le compte proxy va donc suivre cet·te utilisateur·rice pour que ses notes soient\
\ acheminées."
host: "Serveur distant"
selectUser: "Sélectionner un·e utilisateur·rice"
recipient: "Destinataire"
@ -186,11 +211,14 @@ instanceInfo: "Informations sur linstance"
statistics: "Statistiques"
clearQueue: "Vider la file dattente"
clearQueueConfirmTitle: "Êtes-vous sûr·e de vouloir vider la file dattente ?"
clearQueueConfirmText: "Les notes non distribuées ne seront pas délivrées. Normalement, vous n'avez pas besoin d'effectuer cette opération."
clearQueueConfirmText: "Les notes non distribuées ne seront pas délivrées. Normalement,\
\ vous n'avez pas besoin d'effectuer cette opération."
clearCachedFiles: "Vider le cache"
clearCachedFilesConfirm: "Êtes-vous sûr·e de vouloir vider tout le cache de fichiers distants ?"
clearCachedFilesConfirm: "Êtes-vous sûr·e de vouloir vider tout le cache de fichiers\
\ distants ?"
blockedInstances: "Instances bloquées"
blockedInstancesDescription: "Listez les instances que vous désirez bloquer, une par ligne. Ces instances ne seront plus en capacité d'interagir avec votre instance."
blockedInstancesDescription: "Listez les instances que vous désirez bloquer, une par\
\ ligne. Ces instances ne seront plus en capacité d'interagir avec votre instance."
muteAndBlock: "Masqué·e·s / Bloqué·e·s"
mutedUsers: "Utilisateur·rice·s en sourdine"
blockedUsers: "Utilisateur·rice·s bloqué·e·s"
@ -243,7 +271,8 @@ fromUrl: "Depuis une URL"
uploadFromUrl: "Téléverser via une URL"
uploadFromUrlDescription: "URL du fichier que vous souhaitez téléverser"
uploadFromUrlRequested: "Téléversement demandé"
uploadFromUrlMayTakeTime: "Le téléversement de votre fichier peut prendre un certain temps."
uploadFromUrlMayTakeTime: "Le téléversement de votre fichier peut prendre un certain\
\ temps."
explore: "Découvrir"
messageRead: "Lu"
noMoreHistory: "Il ny a plus dhistorique"
@ -253,7 +282,8 @@ 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."
remoteUserCaution: "Les informations de ce compte risqueraient dêtre incomplètes\
\ du fait que lutilisateur·rice provient dune instance distante."
activity: "Activité"
images: "Images"
birthday: "Date de naissance"
@ -286,7 +316,8 @@ unableToDelete: "Suppression impossible"
inputNewFileName: "Entrez un nouveau nom de fichier"
inputNewDescription: "Veuillez entrer une nouvelle description"
inputNewFolderName: "Entrez un nouveau nom de dossier"
circularReferenceFolder: "Le dossier de destination est un sous-dossier du dossier que vous souhaitez déplacer."
circularReferenceFolder: "Le dossier de destination est un sous-dossier du dossier\
\ que vous souhaitez déplacer."
hasChildFilesOrFolders: "Impossible de supprimer ce dossier car il n'est pas vide."
copyUrl: "Copier lURL"
rename: "Renommer"
@ -320,7 +351,8 @@ connectService: "Connexion"
disconnectService: "Déconnexion"
enableLocalTimeline: "Activer le fil local"
enableGlobalTimeline: "Activer le fil global"
disablingTimelinesInfo: "Même si vous désactivez ces fils, les administrateur·rice·s et les modérateur·rice·s pourront toujours y accéder."
disablingTimelinesInfo: "Même si vous désactivez ces fils, les administrateur·rice·s\
\ et les modérateur·rice·s pourront toujours y accéder."
registration: "Sinscrire"
enableRegistration: "Autoriser les nouvelles inscriptions"
invite: "Inviter"
@ -332,9 +364,11 @@ bannerUrl: "URL de limage de la bannière"
backgroundImageUrl: "URL de l'image d'arrière-plan"
basicInfo: "Informations basiques"
pinnedUsers: "Utilisateur·rice épinglé·e"
pinnedUsersDescription: "Listez les utilisateur·rice·s que vous souhaitez voir épinglé·e·s sur la page \"Découvrir\", un·e par ligne."
pinnedUsersDescription: "Listez les utilisateur·rice·s que vous souhaitez voir épinglé·e·s\
\ sur la page \"Découvrir\", un·e par ligne."
pinnedPages: "Pages épinglées"
pinnedPagesDescription: "Inscrivez le chemin des pages que vous souhaitez épingler en haut de la page de l'instance. Séparez les pages d'un retour à la ligne."
pinnedPagesDescription: "Inscrivez le chemin des pages que vous souhaitez épingler\
\ en haut de la page de l'instance. Séparez les pages d'un retour à la ligne."
pinnedClipId: "Identifiant du clip épinglé"
pinnedNotes: "Note épinglée"
hcaptcha: "hCaptcha"
@ -345,14 +379,17 @@ recaptcha: "reCAPTCHA"
enableRecaptcha: "Activer reCAPTCHA"
recaptchaSiteKey: "Clé du site"
recaptchaSecretKey: "Clé secrète"
avoidMultiCaptchaConfirm: "Lutilisation de plusieurs Captchas peut provoquer des interférences. Souhaitez-vous désactiver lautre Captcha ? Vous pouvez laisser plusieurs Captcha activés en appuyant sur Annuler."
avoidMultiCaptchaConfirm: "Lutilisation de plusieurs Captchas peut provoquer des\
\ interférences. Souhaitez-vous désactiver lautre Captcha ? Vous pouvez laisser\
\ plusieurs Captcha activés en appuyant sur Annuler."
antennas: "Antennes"
manageAntennas: "Gestion des antennes"
name: "Nom"
antennaSource: "Source de lantenne"
antennaKeywords: "Mots clés à recevoir"
antennaExcludeKeywords: "Mots clés à exclure"
antennaKeywordsDescription: "Séparer avec des espaces pour la condition AND. Séparer avec un saut de ligne pour une condition OR."
antennaKeywordsDescription: "Séparer avec des espaces pour la condition AND. Séparer\
\ avec un saut de ligne pour une condition OR."
notifyAntenna: "Je souhaite recevoir les notifications des nouvelles notes"
withFileAntenna: "Notes ayant des attachements uniquement"
enableServiceworker: "Activer ServiceWorker"
@ -363,9 +400,11 @@ connectedTo: "Vous êtes connectés aux services suivants"
notesAndReplies: "Notes et Réponses"
withFiles: "Avec fichiers joints"
silence: "Mettre en sourdine"
silenceConfirm: "Êtes-vous sûr·e de vouloir mettre lutilisateur·rice en sourdine ?"
silenceConfirm: "Êtes-vous sûr·e de vouloir mettre lutilisateur·rice en sourdine\
\ ?"
unsilence: "Annuler la sourdine"
unsilenceConfirm: "Êtes-vous sûr·e de vouloir annuler la mise en sourdine de cet·te utilisateur·rice ?"
unsilenceConfirm: "Êtes-vous sûr·e de vouloir annuler la mise en sourdine de cet·te\
\ utilisateur·rice ?"
popularUsers: "Utilisateur·rice·s populaires"
recentlyUpdatedUsers: "Utilisateur·rice·s actif·ve·s récemment"
recentlyRegisteredUsers: "Utilisateur·rice·s récemment inscrit·e·s"
@ -430,7 +469,8 @@ invitationCode: "Code dinvitation"
checking: "Vérification en cours..."
available: "Disponible"
unavailable: "Non disponible"
usernameInvalidFormat: "Le nom d'utilisateur peut contenir uniquement des lettres (minuscules et/ou majuscules), des chiffres et des _"
usernameInvalidFormat: "Le nom d'utilisateur peut contenir uniquement des lettres\
\ (minuscules et/ou majuscules), des chiffres et des _"
tooShort: "Trop court"
tooLong: "Trop long"
weakPassword: "Mot de passe faible"
@ -439,7 +479,8 @@ strongPassword: "Mot de passe fort"
passwordMatched: "Les mots de passe correspondent"
passwordNotMatched: "Les mots de passe ne correspondent pas"
signinWith: "Se connecter avec {x}"
signinFailed: "Échec dauthentification. Veuillez vérifier que votre nom dutilisateur et mot de passe sont corrects."
signinFailed: "Échec dauthentification. Veuillez vérifier que votre nom dutilisateur\
\ et mot de passe sont corrects."
tapSecurityKey: "Appuyez sur votre clé de sécurité"
or: "OU"
language: "Langue"
@ -448,7 +489,8 @@ groupInvited: "Invité au groupe"
aboutX: "À propos de {x}"
useOsNativeEmojis: "Utiliser les émojis natifs du système"
youHaveNoGroups: "Vous navez aucun groupe"
joinOrCreateGroup: "Vous pouvez être invité·e à rejoindre des groupes existants ou créer votre propre nouveau groupe."
joinOrCreateGroup: "Vous pouvez être invité·e à rejoindre des groupes existants ou\
\ créer votre propre nouveau groupe."
noHistory: "Pas d'historique"
signinHistory: "Historique de connexion"
disableAnimatedMfm: "Désactiver MFM ayant des animations"
@ -479,19 +521,29 @@ showFeaturedNotesInTimeline: "Afficher les notes des Tendances dans le fil d'act
objectStorage: "Stockage d'objets"
useObjectStorage: "Utiliser le stockage d'objets"
objectStorageBaseUrl: "Base URL"
objectStorageBaseUrlDesc: "Préfixe dURL utilisé pour construire lURL vers le référencement dobjet (média). Spécifiez son URL si vous utilisez un CDN ou un proxy, sinon spécifiez ladresse accessible au public selon le guide de service que vous allez utiliser. P.ex. 'https://<bucket>.s3.amazonaws.com' pour AWS S3 et 'https://storage.googleapis.com/<bucket>' pour GCS."
objectStorageBaseUrlDesc: "Préfixe dURL utilisé pour construire lURL vers le référencement\
\ dobjet (média). Spécifiez son URL si vous utilisez un CDN ou un proxy, sinon\
\ spécifiez ladresse accessible au public selon le guide de service que vous allez\
\ utiliser. P.ex. 'https://<bucket>.s3.amazonaws.com' pour AWS S3 et 'https://storage.googleapis.com/<bucket>'\
\ pour GCS."
objectStorageBucket: "Bucket"
objectStorageBucketDesc: "Veuillez spécifier le nom du compartiment utilisé sur le service configuré."
objectStorageBucketDesc: "Veuillez spécifier le nom du compartiment utilisé sur le\
\ service configuré."
objectStoragePrefix: "Prefix"
objectStoragePrefixDesc: "Les fichiers seront stockés sous le répertoire de ce préfixe."
objectStorageEndpoint: "Endpoint"
objectStorageEndpointDesc: "Laissez ce champ vide si vous utilisez AWS S3, sinon spécifiez le point de terminaison comme '<host>' ou '<host>: <port>' selon le guide de service que vous allez utiliser."
objectStorageEndpointDesc: "Laissez ce champ vide si vous utilisez AWS S3, sinon spécifiez\
\ le point de terminaison comme '<host>' ou '<host>: <port>' selon le guide de service\
\ que vous allez utiliser."
objectStorageRegion: "Région"
objectStorageRegionDesc: "Spécifiez une région comme 'xx-east-1'. Si votre service ne fait pas de distinction entre les régions, laissez-le vide ou remplissez 'us-east-1'."
objectStorageRegionDesc: "Spécifiez une région comme 'xx-east-1'. Si votre service\
\ ne fait pas de distinction entre les régions, laissez-le vide ou remplissez 'us-east-1'."
objectStorageUseSSL: "Utiliser SSL"
objectStorageUseSSLDesc: "Désactivez cette option si vous n'utilisez pas HTTPS pour la connexion API"
objectStorageUseSSLDesc: "Désactivez cette option si vous n'utilisez pas HTTPS pour\
\ la connexion API"
objectStorageUseProxy: "Se connecter via proxy"
objectStorageUseProxyDesc: "Désactivez cette option si vous n'utilisez pas de proxy pour la connexion API"
objectStorageUseProxyDesc: "Désactivez cette option si vous n'utilisez pas de proxy\
\ pour la connexion API"
objectStorageSetPublicRead: "Régler sur « public » lors de l'envoi"
serverLogs: "Journal du serveur"
deleteAll: "Supprimer tout"
@ -519,7 +571,9 @@ sort: "Trier"
ascendingOrder: "Ascendant"
descendingOrder: "Descendant"
scratchpad: "ScratchPad"
scratchpadDescription: "ScratchPad fournit un environnement expérimental pour AiScript. Vous pouvez vérifier la rédaction de votre code, sa bonne exécution et le résultat de son interaction avec Misskey."
scratchpadDescription: "ScratchPad fournit un environnement expérimental pour AiScript.\
\ Vous pouvez vérifier la rédaction de votre code, sa bonne exécution et le résultat\
\ de son interaction avec Misskey."
output: "Sortie"
script: "Script"
disablePagesScript: "Désactiver AiScript sur les Pages"
@ -527,11 +581,15 @@ updateRemoteUser: "Mettre à jour les informations de lutilisateur·rice dist
deleteAllFiles: "Supprimer tous les fichiers"
deleteAllFilesConfirm: "Êtes-vous sûr·e de vouloir supprimer tous les fichiers ?"
removeAllFollowing: "Retenir tous les abonnements"
removeAllFollowingDescription: "Se désabonner de tous les comptes de {host}. Veuillez lancer cette action uniquement si linstance nexiste plus."
removeAllFollowingDescription: "Se désabonner de tous les comptes de {host}. Veuillez\
\ lancer cette action uniquement si linstance nexiste plus."
userSuspended: "Cet·te utilisateur·rice a été suspendu·e."
userSilenced: "Cette utilisateur·trice a été mis·e en sourdine."
yourAccountSuspendedTitle: "Ce compte est suspendu"
yourAccountSuspendedDescription: "Ce compte est suspendu car vous avez enfreint les conditions d'utilisation de l'instance, ou pour un motif similaire. Si vous souhaitez connaître en détail les raisons de cette suspension, renseignez-vous auprès de l'administrateur·rice de votre instance. Merci de ne pas créer de nouveau compte."
yourAccountSuspendedDescription: "Ce compte est suspendu car vous avez enfreint les\
\ conditions d'utilisation de l'instance, ou pour un motif similaire. Si vous souhaitez\
\ connaître en détail les raisons de cette suspension, renseignez-vous auprès de\
\ l'administrateur·rice de votre instance. Merci de ne pas créer de nouveau compte."
menu: "Menu"
divider: "Séparateur"
addItem: "Ajouter un élément"
@ -554,7 +612,8 @@ description: "Description"
describeFile: "Ajouter une description d'image"
enterFileDescription: "Saisissez une description"
author: "Auteur·rice"
leaveConfirm: "Vous avez des modifications non-sauvegardées. Voulez-vous les ignorer ?"
leaveConfirm: "Vous avez des modifications non-sauvegardées. Voulez-vous les ignorer\
\ ?"
manage: "Gestion"
plugins: "Extensions"
deck: "Deck"
@ -571,12 +630,14 @@ permission: "Autorisations"
enableAll: "Tout activer"
disableAll: "Tout désactiver"
tokenRequested: "Autoriser l'accès au compte"
pluginTokenRequestedDescription: "Ce plugin pourra utiliser les autorisations définies ici."
pluginTokenRequestedDescription: "Ce plugin pourra utiliser les autorisations définies\
\ ici."
notificationType: "Type de notifications"
edit: "Editer"
emailServer: "Serveur mail"
enableEmail: "Activer la distribution de courriel"
emailConfigInfo: "Utilisé pour confirmer votre adresse de courriel et la réinitialisation de votre mot de passe en cas doubli."
emailConfigInfo: "Utilisé pour confirmer votre adresse de courriel et la réinitialisation\
\ de votre mot de passe en cas doubli."
email: "E-mail "
emailAddress: "Adresses e-mail"
smtpConfig: "Paramètres du serveur SMTP"
@ -584,7 +645,8 @@ smtpHost: "Serveur distant"
smtpPort: "Port"
smtpUser: "Nom dutilisateur·rice"
smtpPass: "Mot de passe"
emptyToDisableSmtpAuth: "Laisser le nom dutilisateur et le mot de passe vides pour désactiver la vérification SMTP"
emptyToDisableSmtpAuth: "Laisser le nom dutilisateur et le mot de passe vides pour\
\ désactiver la vérification SMTP"
smtpSecure: "Utiliser SSL/TLS implicitement dans les connexions SMTP"
smtpSecureInfo: "Désactiver cette option lorsque STARTTLS est utilisé"
testEmail: "Tester la distribution de courriel"
@ -605,18 +667,24 @@ create: "Créer"
notificationSetting: "Paramètres des notifications "
notificationSettingDesc: "Sélectionnez le type de notification à afficher"
useGlobalSetting: "Utiliser paramètre général"
useGlobalSettingDesc: "S'il est activé, les paramètres de notification de votre compte seront utilisés. S'il est désactivé, des configurations individuelles peuvent être effectuées."
useGlobalSettingDesc: "S'il est activé, les paramètres de notification de votre compte\
\ seront utilisés. S'il est désactivé, des configurations individuelles peuvent\
\ être effectuées."
other: "Autre"
regenerateLoginToken: "Régénérer le jeton de connexion"
regenerateLoginTokenDescription: "Générer un nouveau jeton d'authentification. Cette opération ne devrait pas être nécessaire ; lors de la génération d'un nouveau jeton, tous les appareils seront déconnectés. "
setMultipleBySeparatingWithSpace: "Vous pouvez en définir plusieurs, en les séparant par des espaces."
regenerateLoginTokenDescription: "Générer un nouveau jeton d'authentification. Cette\
\ opération ne devrait pas être nécessaire ; lors de la génération d'un nouveau\
\ jeton, tous les appareils seront déconnectés. "
setMultipleBySeparatingWithSpace: "Vous pouvez en définir plusieurs, en les séparant\
\ par des espaces."
fileIdOrUrl: "ID du fichier ou URL"
behavior: "Comportement"
sample: "Exemple"
abuseReports: "Signalements"
reportAbuse: "Signaler"
reportAbuseOf: "Signaler {name}"
fillAbuseReportDescription: "Veuillez expliquer les raisons du signalement. S'il s'agit d'une note précise, veuillez en donner le lien."
fillAbuseReportDescription: "Veuillez expliquer les raisons du signalement. S'il s'agit\
\ d'une note précise, veuillez en donner le lien."
abuseReported: "Le rapport est envoyé. Merci."
reporter: "Signalé par"
reporteeOrigin: "Origine du signalement"
@ -627,7 +695,8 @@ abuseMarkAsResolved: "Marquer le signalement comme résolu"
openInNewTab: "Ouvrir dans un nouvel onglet"
openInSideView: "Ouvrir en vue latérale"
defaultNavigationBehaviour: "Navigation par défaut"
editTheseSettingsMayBreakAccount: "La modification de ces paramètres peut endommager votre compte."
editTheseSettingsMayBreakAccount: "La modification de ces paramètres peut endommager\
\ votre compte."
instanceTicker: "Nom de l'instance d'origine des notes"
waitingFor: "En attente de {x}"
random: "Aléatoire"
@ -639,7 +708,8 @@ createNew: "Créer nouveau"
optional: "Facultatif"
createNewClip: "Créer un nouveau clip"
public: "Public"
i18nInfo: "Calckey est traduit dans différentes langues par des bénévoles. Vous pouvez contribuer à {link}."
i18nInfo: "Calckey est traduit dans différentes langues par des bénévoles. Vous pouvez\
\ contribuer à {link}."
manageAccessTokens: "Gérer les jetons d'accès"
accountInfo: " Informations du compte "
notesCount: "Nombre de notes"
@ -658,12 +728,16 @@ no: "Non"
driveFilesCount: "Nombre de fichiers dans le Drive"
driveUsage: "Utilisation du Drive"
noCrawle: "Refuser l'indexation par les robots"
noCrawleDescription: "Demandez aux moteurs de recherche de ne pas indexer votre page de profil, vos notes, vos pages, etc."
lockedAccountInfo: "À moins que vous ne définissiez la visibilité de votre note sur \"Abonné-e-s\", vos notes sont visibles par tous, même si vous exigez que les demandes d'abonnement soient approuvées manuellement."
noCrawleDescription: "Demandez aux moteurs de recherche de ne pas indexer votre page\
\ de profil, vos notes, vos pages, etc."
lockedAccountInfo: "À moins que vous ne définissiez la visibilité de votre note sur\
\ \"Abonné-e-s\", vos notes sont visibles par tous, même si vous exigez que les\
\ demandes d'abonnement soient approuvées manuellement."
alwaysMarkSensitive: "Marquer les médias comme contenu sensible par défaut"
loadRawImages: "Affichage complet des images jointes au lieu des vignettes"
disableShowingAnimatedImages: "Désactiver l'animation des images"
verificationEmailSent: "Un e-mail de vérification a été envoyé. Veuillez accéder au lien pour compléter la vérification."
verificationEmailSent: "Un e-mail de vérification a été envoyé. Veuillez accéder au\
\ lien pour compléter la vérification."
notSet: "Non défini"
emailVerified: "Votre adresse e-mail a été vérifiée."
noteFavoritesCount: "Nombre de notes dans les favoris"
@ -675,14 +749,16 @@ clips: "Clips"
experimentalFeatures: "Fonctionnalités expérimentales"
developer: "Développeur"
makeExplorable: "Rendre le compte visible sur la page \"Découvrir\"."
makeExplorableDescription: "Si vous désactivez cette option, votre compte n'apparaîtra pas sur la page \"Découvrir\"."
makeExplorableDescription: "Si vous désactivez cette option, votre compte n'apparaîtra\
\ pas sur la page \"Découvrir\"."
showGapBetweenNotesInTimeline: "Afficher un écart entre les notes sur la Timeline"
duplicate: "Duliquer"
left: "Gauche"
center: "Centrer"
wide: "Large"
narrow: "Condensé"
reloadToApplySetting: "Vos paramètres seront appliqués lorsque vous rechargerez la page. Souhaitez-vous recharger ?"
reloadToApplySetting: "Vos paramètres seront appliqués lorsque vous rechargerez la\
\ page. Souhaitez-vous recharger ?"
needReloadToApply: "Ce paramètre s'appliquera après un rechargement."
showTitlebar: "Afficher la barre de titre"
clearCache: "Vider le cache"
@ -690,7 +766,11 @@ onlineUsersCount: "{n} utilisateur(s) en ligne"
nUsers: "{n} utilisateur·rice·s"
nNotes: "{n} Notes"
sendErrorReports: "Envoyer les rapports derreur"
sendErrorReportsDescription: "Si vous activez l'envoi des rapports d'erreur, vous contribuerez à améliorer la qualité de Misskey grâce au partage d'informations détaillées sur les erreurs lorsqu'un problème survient.\nCela inclut des informations telles que la version de votre système d'exploitation, le type de navigateur que vous utilisez, votre historique d'activité, etc."
sendErrorReportsDescription: "Si vous activez l'envoi des rapports d'erreur, vous\
\ contribuerez à améliorer la qualité de Misskey grâce au partage d'informations\
\ détaillées sur les erreurs lorsqu'un problème survient.\nCela inclut des informations\
\ telles que la version de votre système d'exploitation, le type de navigateur que\
\ vous utilisez, votre historique d'activité, etc."
myTheme: "Mes thèmes"
backgroundColor: "Arrière-plan"
accentColor: "Accentuation"
@ -729,14 +809,17 @@ unlikeConfirm: "Êtes-vous sûr·e de ne plus vouloir aimer cette publication ?"
fullView: "Plein écran"
quitFullView: "Quitter le plein écran"
addDescription: "Ajouter une description"
userPagePinTip: "Vous pouvez afficher des notes ici en sélectionnant l'option « Épingler au profil » dans le menu de chaque note."
notSpecifiedMentionWarning: "Vous avez mentionné des utilisateur·rice·s qui ne font pas partie de la liste des destinataires"
userPagePinTip: "Vous pouvez afficher des notes ici en sélectionnant l'option « Épingler\
\ au profil » dans le menu de chaque note."
notSpecifiedMentionWarning: "Vous avez mentionné des utilisateur·rice·s qui ne font\
\ pas partie de la liste des destinataires"
info: "Informations"
userInfo: "Informations sur l'utilisateur"
unknown: "Inconnu"
onlineStatus: "Statut"
hideOnlineStatus: "Se rendre invisible"
hideOnlineStatusDescription: "Rendre votre statut invisible peut diminuer les performances de certaines fonctionnalités, telles que la Recherche."
hideOnlineStatusDescription: "Rendre votre statut invisible peut diminuer les performances\
\ de certaines fonctionnalités, telles que la Recherche."
online: "En ligne"
active: "Actif·ve"
offline: "Hors ligne"
@ -771,7 +854,9 @@ emailNotConfiguredWarning: "Vous n'avez pas configuré d'adresse e-mail."
ratio: "Ratio"
previewNoteText: "Voir l'aperçu"
customCss: "CSS personnalisé"
customCssWarn: "Utilisez cette fonctionnalité uniquement si vous savez exactement ce que vous faites. Une configuration inadaptée peut empêcher le client de s'exécuter normalement."
customCssWarn: "Utilisez cette fonctionnalité uniquement si vous savez exactement\
\ ce que vous faites. Une configuration inadaptée peut empêcher le client de s'exécuter\
\ normalement."
global: "Global"
squareAvatars: "Avatars carrés"
sent: "Envoyer"
@ -786,7 +871,10 @@ whatIsNew: "Voir les derniers changements"
translate: "Traduire"
translatedFrom: "Traduit depuis {x}"
accountDeletionInProgress: "La suppression de votre compte est en cours"
usernameInfo: "C'est un nom qui identifie votre compte sur l'instance de manière unique. Vous pouvez utiliser des lettres de l'alphabet (minuscules et majuscules), des chiffres (de 0 à 9), ou bien le tiret « _ ». Vous ne pourrez pas modifier votre nom d'utilisateur·rice par la suite."
usernameInfo: "C'est un nom qui identifie votre compte sur l'instance de manière unique.\
\ Vous pouvez utiliser des lettres de l'alphabet (minuscules et majuscules), des\
\ chiffres (de 0 à 9), ou bien le tiret « _ ». Vous ne pourrez pas modifier votre\
\ nom d'utilisateur·rice par la suite."
aiChanMode: "Mode Ai"
keepCw: "Garder le CW"
pubSub: "Comptes Pub/Sub"
@ -802,12 +890,14 @@ filter: "Filtre"
controlPanel: "Panneau de contrôle"
manageAccounts: "Gérer les comptes"
makeReactionsPublic: "Rendre les réactions publiques"
makeReactionsPublicDescription: "Ceci rendra la liste de toutes vos réactions données publique."
makeReactionsPublicDescription: "Ceci rendra la liste de toutes vos réactions données\
\ publique."
classic: "Classique"
muteThread: "Masquer cette discussion"
unmuteThread: "Ne plus masquer le fil"
ffVisibility: "Visibilité des abonnés/abonnements"
ffVisibilityDescription: "Permet de configurer qui peut voir les personnes que tu suis et les personnes qui te suivent."
ffVisibilityDescription: "Permet de configurer qui peut voir les personnes que tu\
\ suis et les personnes qui te suivent."
continueThread: "Afficher la suite du fil"
deleteAccountConfirm: "Votre compte sera supprimé. Êtes vous certain ?"
incorrectPassword: "Le mot de passe est incorrect."
@ -815,9 +905,11 @@ voteConfirm: "Confirmez-vous votre vote pour « {choice} » ?"
hide: "Masquer"
leaveGroup: "Quitter le groupe"
leaveGroupConfirm: "Êtes vous sûr de vouloir quitter \"{name}\" ?"
useDrawerReactionPickerForMobile: "Afficher le sélecteur de réactions en tant que panneau sur mobile"
useDrawerReactionPickerForMobile: "Afficher le sélecteur de réactions en tant que\
\ panneau sur mobile"
welcomeBackWithName: "Heureux de vous revoir, {name}"
clickToFinishEmailVerification: "Veuillez cliquer sur [{ok}] afin de compléter la vérification par courriel."
clickToFinishEmailVerification: "Veuillez cliquer sur [{ok}] afin de compléter la\
\ vérification par courriel."
overridedDeviceKind: "Type dappareil"
smartphone: "Smartphone"
tablet: "Tablette"
@ -857,11 +949,16 @@ _ffVisibility:
_signup:
almostThere: "Bientôt fini"
emailAddressInfo: "Insérez votre adresse e-mail."
emailSent: "Un courriel de confirmation vient d'être envoyé à l'adresse que vous avez renseignée ({email}). Cliquez sur le lien contenu dans le message pour terminer la création de votre compte."
emailSent: "Un courriel de confirmation vient d'être envoyé à l'adresse que vous\
\ avez renseignée ({email}). Cliquez sur le lien contenu dans le message pour\
\ terminer la création de votre compte."
_accountDelete:
accountDelete: "Supprimer le compte"
mayTakeTime: "La suppression de compte nécessitant beaucoup de ressources, l'exécution du processus peut prendre du temps, en fonction de la quantité de contenus que vous avez créés et du nombre de fichiers que vous avez téléversés."
sendEmail: "Une fois la suppression de votre compte effectuée, un courriel sera envoyé à l'adresse que vous aviez enregistrée."
mayTakeTime: "La suppression de compte nécessitant beaucoup de ressources, l'exécution\
\ du processus peut prendre du temps, en fonction de la quantité de contenus que\
\ vous avez créés et du nombre de fichiers que vous avez téléversés."
sendEmail: "Une fois la suppression de votre compte effectuée, un courriel sera\
\ envoyé à l'adresse que vous aviez enregistrée."
requestAccountDelete: "Demander la suppression de votre compte"
started: "La procédure de suppression a commencé."
inProgress: "Suppression en cours"
@ -869,9 +966,14 @@ _ad:
back: "Retour"
reduceFrequencyOfThisAd: "Voir cette publicité moins souvent"
_forgotPassword:
enterEmail: "Entrez ici l'adresse e-mail que vous avez enregistrée pour votre compte. Un lien vous permettant de réinitialiser votre mot de passe sera envoyé à cette adresse."
ifNoEmail: "Si vous n'avez pas enregistré d'adresse e-mail, merci de contacter l'administrateur·rice de votre instance."
contactAdmin: "Cette instance ne permettant pas l'utilisation d'adresses e-mail, prenez contact avec l'administrateur·rice pour procéder à la réinitialisation de votre mot de passe."
enterEmail: "Entrez ici l'adresse e-mail que vous avez enregistrée pour votre compte.\
\ Un lien vous permettant de réinitialiser votre mot de passe sera envoyé à cette\
\ adresse."
ifNoEmail: "Si vous n'avez pas enregistré d'adresse e-mail, merci de contacter l'administrateur·rice\
\ de votre instance."
contactAdmin: "Cette instance ne permettant pas l'utilisation d'adresses e-mail,\
\ prenez contact avec l'administrateur·rice pour procéder à la réinitialisation\
\ de votre mot de passe."
_gallery:
my: "Mes publications"
liked: " Publications que j'ai aimées"
@ -899,7 +1001,8 @@ _aboutMisskey:
source: "Code source"
translation: "Traduire Misskey"
donate: "Soutenir Misskey"
morePatrons: "Nous apprécions vraiment le soutien de nombreuses autres personnes non mentionnées ici. Merci à toutes et à tous ! 🥰"
morePatrons: "Nous apprécions vraiment le soutien de nombreuses autres personnes\
\ non mentionnées ici. Merci à toutes et à tous ! \U0001F970"
patrons: "Contributeurs"
_nsfw:
respect: "Cacher les médias marqués comme contenu sensible"
@ -907,18 +1010,22 @@ _nsfw:
force: "Cacher tous les médias"
_mfm:
cheatSheet: "Antisèche MFM"
intro: "MFM est un langage Markdown spécifique utilisable ici et là dans Misskey. Vous pouvez vérifier ici les structures utilisables avec MFM."
intro: "MFM est un langage Markdown spécifique utilisable ici et là dans Misskey.\
\ Vous pouvez vérifier ici les structures utilisables avec MFM."
dummy: "La Fédiverse s'agrandit avec Misskey"
mention: "Mentionner"
mentionDescription: "Vous pouvez afficher un utilisateur spécifique en indiquant une arobase suivie d'un nom d'utilisateur"
mentionDescription: "Vous pouvez afficher un utilisateur spécifique en indiquant\
\ une arobase suivie d'un nom d'utilisateur"
hashtag: "Hashtags"
hashtagDescription: "Vous pouvez afficher un mot-dièse en utilisant un croisillon et du texte"
hashtagDescription: "Vous pouvez afficher un mot-dièse en utilisant un croisillon\
\ et du texte"
url: "URL"
urlDescription: "L'adresse web peut être affichée."
link: "Lien"
linkDescription: "Une partie précise d'une phrase peut être liée à l'adresse web."
bold: "Gras"
boldDescription: "Il est possible de mettre le texte en exergue en le mettant en gras."
boldDescription: "Il est possible de mettre le texte en exergue en le mettant en\
\ gras."
small: "Diminuer l'emphase"
smallDescription: "Le contenu peut être affiché en petit et fin."
center: "Centrer"
@ -930,7 +1037,8 @@ _mfm:
inlineMath: "Formule mathématique (inline)"
inlineMathDescription: "Afficher les formules mathématiques (KaTeX)."
blockMath: "Formule mathématique (bloc)"
blockMathDescription: "Afficher les formules mathématiques (KaTeX) multi-lignes dans un bloc."
blockMathDescription: "Afficher les formules mathématiques (KaTeX) multi-lignes\
\ dans un bloc."
quote: "Citer"
quoteDescription: "Affiche le contenu sous forme de citation."
emoji: "Émojis personnalisés"
@ -960,7 +1068,8 @@ _mfm:
x4: "Plus grand"
x4Description: "Afficher le contenu en plus grand."
blur: "Flou"
blurDescription: "Le contenu peut être flouté ; il sera visible en le survolant avec le curseur."
blurDescription: "Le contenu peut être flouté ; il sera visible en le survolant\
\ avec le curseur."
font: "Police de caractères"
fontDescription: "Il est possible de choisir la police."
rainbow: "Arc-en-ciel"
@ -968,6 +1077,9 @@ _mfm:
sparkle: "Paillettes"
sparkleDescription: "Ajoute un effet scintillant au contenu."
rotate: "Pivoter"
plainDescription: Désactiver les effets de tous les MFM contenus dans cet effet
MFM.
rotateDescription: Pivoter le contenu d'un angle spécifique.
_instanceTicker:
none: "Cacher "
remote: "Montrer pour les utilisateur·ice·s distant·e·s"
@ -976,6 +1088,7 @@ _serverDisconnectedBehavior:
reload: "Rechargement automatique"
dialog: "Ouvrir une boîte de dialogue pour l'avertissement"
quiet: "Afficher un avertissement discret"
nothing: Ne rien faire
_channel:
create: "Créer un canal"
edit: "Éditer le canal"
@ -993,10 +1106,14 @@ _menuDisplay:
hide: "Masquer"
_wordMute:
muteWords: "Mots à filtrer"
muteWordsDescription: "Séparer avec des espaces pour la condition AND. Séparer avec un saut de ligne pour une condition OR."
muteWordsDescription2: "Pour utiliser des expressions régulières (regex), mettez les mots-clés entre barres obliques."
muteWordsDescription: "Séparer avec des espaces pour la condition AND. Séparer avec\
\ un saut de ligne pour une condition OR."
muteWordsDescription2: "Pour utiliser des expressions régulières (regex), mettez\
\ les mots-clés entre barres obliques."
softDescription: "Masquez les notes de votre fil selon les paramètres que vous définissez."
hardDescription: "Empêchez votre fil de charger les notes selon les paramètres que vous définissez. Cette action est irréversible : si vous modifiez ces paramètres plus tard, les notes précédemment filtrées ne seront pas récupérées."
hardDescription: "Empêchez votre fil de charger les notes selon les paramètres que\
\ vous définissez. Cette action est irréversible : si vous modifiez ces paramètres\
\ plus tard, les notes précédemment filtrées ne seront pas récupérées."
soft: "Doux"
hard: "Strict"
mutedNotes: "Notes filtrées"
@ -1004,6 +1121,9 @@ _instanceMute:
instanceMuteDescription2: "Séparer avec de nouvelles lignes"
title: "Masque les notes venant des instances listées."
heading: "Instances à mettre en sourdine"
instanceMuteDescription: Ceci va masquer toute publication ou partage des instances
listées, incluant celles des personnes répondant à des personnes des instances
masquées.
_theme:
explore: "Explorer les thèmes"
install: "Installer un thème"
@ -1032,8 +1152,10 @@ _theme:
darken: "Sombre"
lighten: "Clair"
inputConstantName: "Insérez un nom de constante"
importInfo: "Vous pouvez importer un thème vers léditeur de thèmes en saisissant son code ici."
deleteConstantConfirm: "Êtes-vous sûr·e de vouloir supprimer la constante {const} ?"
importInfo: "Vous pouvez importer un thème vers léditeur de thèmes en saisissant\
\ son code ici."
deleteConstantConfirm: "Êtes-vous sûr·e de vouloir supprimer la constante {const}\
\ ?"
keys:
accent: "Accentuation"
bg: "Arrière-plan"
@ -1106,32 +1228,51 @@ _tutorial:
step1_1: "Bienvenue!"
step1_2: "On va vous installer. Vous serez opérationnel en un rien de temps"
step2_1: "Tout d'abord, remplissez votre profil"
step2_2 : "En fournissant quelques informations sur qui vous êtes, il sera plus facile pour les autres de savoir s'ils veulent voir vos notes ou vous suivre."
step2_2: "En fournissant quelques informations sur qui vous êtes, il sera plus facile\
\ pour les autres de savoir s'ils veulent voir vos notes ou vous suivre."
step3_1: "Maintenant il est temps de suivre des gens !"
step3_2 : "Votre page d'accueil et vos timelines sociales sont basées sur les personnes que vous suivez, alors essayez de suivre quelques comptes pour commencer.\nCliquez sur le cercle plus en haut à droite d'un profil pour le suivre."
step3_2: "Votre page d'accueil et vos timelines sociales sont basées sur les personnes\
\ que vous suivez, alors essayez de suivre quelques comptes pour commencer.\n\
Cliquez sur le cercle plus en haut à droite d'un profil pour le suivre."
step4_1: "On y va."
step4_2 : "Pour votre premier post, certaines personnes aiment faire un post {introduction} ou un simple post 'Hello world'."
step4_2: "Pour votre premier post, certaines personnes aiment faire un post {introduction}\
\ ou un simple post 'Hello world'."
step5_1: "Lignes de temps, lignes de temps partout !"
step5_2: "Votre instance a {timelines} différentes chronologies activées !"
step5_3 : "La timeline Home {icon} est l'endroit où vous pouvez voir les publications de vos followers."
step5_4 : "La timeline locale {icon} est l'endroit où vous pouvez voir les messages de tout le monde sur cette instance."
step5_5 : "La timeline {icon} recommandée est l'endroit où vous pouvez voir les messages des instances que les administrateurs recommandent."
step5_6 : "La timeline {icon} sociale est l'endroit où vous pouvez voir les publications des amis de vos followers."
step5_7 : "La timeline globale {icon} est l'endroit où vous pouvez voir les messages de toutes les autres instances connectées."
step5_3: "La timeline Home {icon} est l'endroit où vous pouvez voir les publications\
\ de vos followers."
step5_4: "La timeline locale {icon} est l'endroit où vous pouvez voir les messages\
\ de tout le monde sur cette instance."
step5_5: "La timeline {icon} recommandée est l'endroit où vous pouvez voir les messages\
\ des instances que les administrateurs recommandent."
step5_6: "La timeline {icon} sociale est l'endroit où vous pouvez voir les publications\
\ des amis de vos followers."
step5_7: "La timeline globale {icon} est l'endroit où vous pouvez voir les messages\
\ de toutes les autres instances connectées."
step6_1: "Alors quel est cet endroit ?"
step6_2 : "Eh bien, vous ne venez pas de rejoindre Calckey. Vous avez rejoint un portail vers le Fediverse, un réseau interconnecté de milliers de serveurs, appelés \"instances\"."
step6_3 : "Chaque serveur fonctionne différemment, et tous les serveurs n'utilisent pas Calckey. Cependant, celui-ci le fait ! C'est un peu délicat, mais vous aurez le coup de main en un rien de temps."
step6_2: "Eh bien, vous ne venez pas de rejoindre Calckey. Vous avez rejoint un\
\ portail vers le Fediverse, un réseau interconnecté de milliers de serveurs,\
\ appelés \"instances\"."
step6_3: "Chaque serveur fonctionne différemment, et tous les serveurs n'utilisent\
\ pas Calckey. Cependant, celui-ci le fait ! C'est un peu délicat, mais vous aurez\
\ le coup de main en un rien de temps."
step6_4: "Maintenant, allez-y, explorez et amusez-vous !"
_2fa:
alreadyRegistered: "Configuration déjà achevée."
registerDevice: "Ajouter un nouvel appareil"
registerKey: "Enregistrer une clef"
step1: "Tout d'abord, installez une application d'authentification, telle que {a} ou {b}, sur votre appareil."
step1: "Tout d'abord, installez une application d'authentification, telle que {a}\
\ ou {b}, sur votre appareil."
step2: "Ensuite, scannez le code QR affiché sur lécran."
step2Url: "Vous pouvez également saisir cette URL si vous utilisez un programme de bureau :"
step2Url: "Vous pouvez également saisir cette URL si vous utilisez un programme\
\ de bureau :"
step3: "Entrez le jeton affiché sur votre application pour compléter la configuration."
step4: "À partir de maintenant, ce même jeton vous sera demandé à chacune de vos connexions."
securityKeyInfo: "Vous pouvez configurer l'authentification WebAuthN pour sécuriser davantage le processus de connexion grâce à une clé de sécurité matérielle qui prend en charge FIDO2, ou bien en configurant l'authentification par empreinte digitale ou par code PIN sur votre appareil."
step4: "À partir de maintenant, ce même jeton vous sera demandé à chacune de vos\
\ connexions."
securityKeyInfo: "Vous pouvez configurer l'authentification WebAuthN pour sécuriser\
\ davantage le processus de connexion grâce à une clé de sécurité matérielle qui\
\ prend en charge FIDO2, ou bien en configurant l'authentification par empreinte\
\ digitale ou par code PIN sur votre appareil."
_permissions:
"read:account": "Afficher les informations du compte"
"write:account": "Mettre à jour les informations de votre compte"
@ -1167,11 +1308,13 @@ _permissions:
"write:gallery-likes": "Gérer les mentions « J'aime » dans la galerie"
_auth:
shareAccess: "Autoriser \"{name}\" à accéder à votre compte ?"
shareAccessAsk: "Voulez-vous vraiment autoriser cette application à accéder à votre compte?"
shareAccessAsk: "Voulez-vous vraiment autoriser cette application à accéder à votre\
\ compte?"
permissionAsk: "Cette application nécessite les autorisations suivantes :"
pleaseGoBack: "Veuillez retourner à lapplication"
callback: "Retour vers lapplication"
denied: "Accès refusé"
copyAsk: Veuillez coller le code dautorisation à l'application
_antennaSources:
all: "Toutes les notes"
homeTimeline: "Notes venant des utilisateur·rice·s auxquel·les je suis abonné"
@ -1262,7 +1405,8 @@ _profile:
youCanIncludeHashtags: "Vous pouvez également inclure des hashtags."
metadata: "Informations supplémentaires"
metadataEdit: "Éditer les informations supplémentaires"
metadataDescription: "Vous pouvez afficher jusqu'à quatre informations supplémentaires dans votre profil."
metadataDescription: "Vous pouvez afficher jusqu'à quatre informations supplémentaires\
\ dans votre profil."
metadataLabel: "Étiquette"
metadataContent: "Contenu"
changeAvatar: "Changer l'image de profil"
@ -1333,7 +1477,8 @@ _pages:
url: "URL de la page"
summary: "Résumé de page"
alignCenter: "Centrée"
hideTitleWhenPinned: "Masquer le titre de la page lorsque celle-ci est épinglée au profil"
hideTitleWhenPinned: "Masquer le titre de la page lorsque celle-ci est épinglée\
\ au profil"
font: "Police de caractères"
fontSerif: "Serif"
fontSansSerif: "Sans Serif"
@ -1383,7 +1528,8 @@ _pages:
note: "Note intégrée"
_note:
id: "Identifiant de la note"
idDescription: "Pour configurer la note, vous pouvez aussi coller ici l'URL correspondante."
idDescription: "Pour configurer la note, vous pouvez aussi coller ici l'URL\
\ correspondante."
detailed: "Afficher les détails"
switch: "Interrupteur"
_switch:
@ -1536,7 +1682,8 @@ _pages:
_dailyRannum:
arg1: "Minimum"
arg2: "Maximum"
dailyRandomPick: "Sélectionné au hasard dans la liste (Quotidien pour chaque utilisateur)"
dailyRandomPick: "Sélectionné au hasard dans la liste (Quotidien pour chaque\
\ utilisateur)"
_dailyRandomPick:
arg1: "Listes"
seedRandom: "Aléatoire (graine)"
@ -1552,7 +1699,8 @@ _pages:
_seedRandomPick:
arg1: "Graine"
arg2: "Listes"
DRPWPM: "Sélectionné au hasard dans une liste de probabilités (Quotidien pour chaque utilisateur)"
DRPWPM: "Sélectionné au hasard dans une liste de probabilités (Quotidien pour\
\ chaque utilisateur)"
_DRPWPM:
arg1: "Liste de texte"
pick: "Sélectionner dans la liste"
@ -1651,3 +1799,204 @@ _deck:
list: "Listes"
mentions: "Mentions"
direct: "Direct"
keepOriginalUploadingDescription: Enregistrer l'image originale telle quelle. Si désactivé,
une version à afficher sur le web sera générée au chargement.
manageGroups: Gérer les groupes
moderation: Modération
disableDrawer: Ne pas utiliser des menus à tiroir
preferencesBackups: Sauvegarde des préférences
confirmToUnclipAlreadyClippedNote: Ce message fait déjà partie du clip "{name}". Voudriez-vous
plutôt le supprimer du clip ?
instanceSecurity: Sécurité de l'instance
recommended: Recommandé
recentNDays: Les derniers {n} jours
recentNHours: Les dernières {n} heures
check: Vérifier
thereIsUnresolvedAbuseReportWarning: Il y a des signalements non résolus.
numberOfPageCacheDescription: Augmenter ce nombre augmentera le confort des utilisateur⋅rice⋅s
mais augmentera la charge de travail du serveur, plus de mémoire sera utilisée.
logoutConfirm: Confirmer la déconnexion ?
lastActiveDate: Dernière utilisation le
cannotUploadBecauseNoFreeSpace: Mise en ligne échouée faute de place sur le Drive.
remoteOnly: Distant seulement
showUpdates: Afficher une fenêtre en sur-impression quand Calckey se met à jour
recommendedInstances: Instances recommandées
caption: Description automatique
migration: Migration
showAdminUpdates: Indiquer qu'une nouvelle version de Calckey est disponible (admin
seulement)
replayTutorial: Relancer le tutoriel
moveTo: Migrer le compte courant vers un nouveau compte
moveFromDescription: Ceci va configurer un alias pour votre ancien compte afin que
vous puissiez migrer de cet ancien compte à l'actuel. Faites ceci AVANT de migrer
de votre ancien compte. Merci d'entrer la mention de l'ancien compte sous ce format
@personne@instance.com
_sensitiveMediaDetection:
sensitivityDescription: Réduire la sensibilité conduira à moins de mauvaises détections
(faux positifs) alors que l'augmenter mènera à moins de détection manquées (faux
négatifs).
analyzeVideosDescription: Analyser les vidéos en plus des images. Cela augmentera
légèrement la charge du serveur.
setSensitiveFlagAutomatically: Marquer comme sensible (NSFW)
sensitivity: Sensibilité de la détection
analyzeVideos: Activer l'analyse des vidéos
setSensitiveFlagAutomaticallyDescription: Les résultats de la détection interne
seront conservés même si cette option est désactivée.
description: Réduit potentiellement l'effort de la modération du serveur en reconnaissant
automatiquement les médias sensibles (NSFW) via de l'intelligence artificielle.
Cela va augmenter légèrement la charge du serveur.
_messaging:
dms: Privé
groups: Groupes
cannotUploadBecauseExceedsFileSizeLimit: Le fichier n'a pas pu être chargé car il
dépasse la taille maximum autorisée.
moveAccountDescription: Ce processus est irréversible. Soyez sûr⋅e que vous avez préparé
un alias pour ce compte sur votre nouveau compte avant de migrer. Merci d'entrer
la mention du compte formaté comme ceci @personne@instance.com
moveAccount: Déplacer le compte !
seperateRenoteQuote: Séparer les renotes et les boutons de citation
failedToFetchAccountInformation: Impossible de récupérer les informations de compte
noEmailServerWarning: Serveur mail non configuré.
deleteAccount: Supprimer le compte
document: Documentation
numberOfPageCache: Nombre de pages mise en cache
fast: Rapide
failedToUpload: Mise en ligne échouée
enableAutoSensitiveDescription: Permet la détection automatique des médias sensibles
(NSFW) via une intelligence artificielle, quand c'est possible. Même si cette option
est désactivée, elle peut être enclenchée au niveau de l'instance.
activeEmailValidationDescription: Active une vérification plus poussée des adresses
e-mail, ce qui inclut de vérifier la présence de-mail jetables et s'il est possible
de communiquer avec ces adresses. Si désactivé, seul le format de le-mail est vérifié.
adminCustomCssWarn: Ce paramètre ne devrait être utilisé que si vous savez ce qu'il
fait. Entrer des valeurs impropres pourraient empêcher les clients de TOUT LE MONDE
de fonctionner. Assurez-vous que votre CSS fonctionne correctement en l'essayant
dans vos paramètres utilisateur.
swipeOnDesktop: Permettre le style de glissement de fenêtre de mobile sur PC
moveFromLabel: 'Compte depuis lequel vous migrez:'
migrationConfirm: "Êtes-vous absolument certain⋅e que vous voulez migrer votre compte\
\ vers {account} ? Une fois fait, vous ne pourrez pas revenir en arrière, et vous\
\ ne pourrez plus utiliser le compte actuel normalement à nouveau.\nAussi, assurez-vous\
\ d'avoir configuré le compte courant comme le compte depuis lequel vous migrez."
_preferencesBackups:
updatedAt: 'Mis à jour le : {date} {time}'
cannotLoad: Le chargement a échoué
invalidFile: Format de fichier invalide
saveConfirm: Enregistrer la sauvegarde sous le nom {name} ?
deleteConfirm: Supprimer la sauvegarde {name} ?
nameAlreadyExists: Une sauvegarde nommée "{name}" existe déjà. Merci d'entrer un
autre nom.
applyConfirm: Voulez-vous vraiment appliquer la sauvegarde "{name} à cet appareil
? Les réglages existants de cet appareil seront écrasés.
noBackups: Aucune sauvegarde n'existe. Vous pouvez sauvegarder les paramètres de
votre client sur ce serveur en utilisant "Créer une nouvelle sauvegarde".
createdAt: 'Crée le : {date} {time}'
renameConfirm: Renommer la sauvegarde "{old}" à "{new}" ?
list: Sauvegardes créées
saveNew: Faire une nouvelle sauvegarde
loadFile: Charger depuis le fichier
apply: Appliquer à l'appareil
save: Enregistrer les changements
inputName: Merci d'entrer un nom pour cette sauvegarde
cannotSave: La sauvegarde a échoué
privateMode: Mode privé
privateModeInfo: Si activé, seules les instances autorisées peuvent fédérer avec votre
instance. Toutes les publications seront masquées de la visibilité publique.
allowedInstances: Instances autorisées
driveCapOverrideLabel: Changer la capacité du drive pour cet utilisateur
driveCapOverrideCaption: Réinitialiser la capacité à la valeur par défaut en entrant
0 ou moins.
pleaseSelect: Sélectionner une option
customMOTD: Message du jour personnalisé (Message d'écran de démarrage)
refreshInterval: 'Intervalle de mise à jour '
type: Type
speed: Vitesse
slow: Lent
move: Déplacer
showAds: Afficher les annonces
enterSendsMessage: Appuyer sur Entrée pendant la rédaction pour envoyer le message
(sinon Ctrl+Entrée)
allowedInstancesDescription: Hôtes des instances autorisées pour la fédération, chacun
séparé par une nouvelle ligne (s'applique uniquement en mode privé).
enableAutoSensitive: Marquage automatique du contenu sensible (NSFW)
regexpErrorDescription: "Il y a eu une erreur dans l'expression régulière à la ligne\
\ {line} de votre {tab} des mots masqués:"
forwardReportIsAnonymous: À la place de votre compte, un compte système anonyme sera
affiché comme rapporteur à l'instance distante.
noThankYou: Non merci
addInstance: Ajouter une instance
renoteMute: Mettre en silence les renotes
flagSpeakAsCat: Parler comme un chat
flagSpeakAsCatDescription: Vos messages seront nyanifiés en mode chat
hiddenTags: Hashtags cachés
hiddenTagsDescription: "Lister les hashtags (sans le #) que vous souhaitez cacher\
\ de tendances et explorer. Les hashtags cachés sont toujours découvrables par d'autres\
\ moyens."
antennaInstancesDescription: Lister un hôte d'instance par ligne
userSaysSomethingReason: '{name} a dit {reason}'
breakFollowConfirm: Êtes vous sur de vouloir retirer l'abonné ?
recommendedInstancesDescription: Instances recommandées séparées par une nouvelle
ligne pour apparaître dans la timeline recommandée. Ne PAS ajouter `https://`, SEULEMENT
le domaine.
sendPushNotificationReadMessage: Supprimer les notifications push une fois que les
notifications ou messages concernés ont été lus
sendPushNotificationReadMessageCaption: Une notification contenant le texte "{emptyPushNotificationMessage}"
sera affichée pendant un court instant. Cela peut augmenter la consommation de batterie
de votre appareil.
splash: Écran dAccueil
pushNotificationNotSupported: Votre navigateur ou instance ne supporte pas les notifications
push
customMOTDDescription: Messages personnalisé pour le message du jour (sur l'écran
daccueil), séparés par des retours à la ligne, affichés au hasard à chaque (re)chargement
de page.
customSplashIcons: Icônes de l'écran daccueil personnalisées (urls)
customSplashIconsDescription: URLs pour les icônes personnalisées de l'écran daccueil,
séparés par des retours à la ligne, qui seront affichées aléatoirement à chaque
(re)chargement de page. Assurez-vous que les images sont sur des URL statiques,
de préférence toutes de taille 192x192.
updateAvailable: Une mise à jour est peut-être disponible !
accountMoved: "L'utilisateur a migré vers un nouveau compte:"
enableEmojiReactions: Activer les réactions par émojis
showEmojisInReactionNotifications: Montrer les émojis dans les notifications de réaction
renoteUnmute: Notifier les renotes
selectInstance: Choisir une instance
noInstances: Il n'y a aucune instance
showLocalPosts: 'Montrer les notes locales dans :'
homeTimeline: Timeline d'Accueil
socialTimeline: Timeline Sociale
requireAdminForView: Vous avez besoin d'un compte d'administration pour voir cela.
isSystemAccount: Un compte créé et géré automatiquement par le système.
typeToConfirm: Entrer {x} pour confirmer
statusbar: Barre d'état
sensitiveMediaDetection: Détection des médias sensibles (NSFW)
cannotUploadBecauseInappropriate: Ce fichier n'a pas pu être mis en ligne, car il
a été détecté comme potentiellement sensible (NSFW).
beta: Beta
navbar: Barre de navigation
shuffle: Mélanger
pushNotification: Notifications push
subscribePushNotification: Activer les notifications push
unsubscribePushNotification: Désactiver les notifications push
pushNotificationAlreadySubscribed: Notifications push déjà activées
logoImageUrl: URL de l'image du logo
moveToLabel: 'Compte vers lequel vous migrez:'
moveFrom: Migrer vers ce compte depuis un ancien compte
defaultReaction: Émoji de réaction par défaut pour les notes entrantes et sortantes
license: Licence
indexPosts: Indexer les Notes
indexNotice: Indexation en cours. Cela prendra certainement du temps, veuillez ne
pas redémarrer votre serveur pour au moins une heure.
customKaTeXMacro: Macros KaTeX personnalisées
enableCustomKaTeXMacro: Activer les macros KaTeX personnalisées
noteId: ID de note
customKaTeXMacroDescription: "Définissez des macros pour écrire des expressions mathématiques\
\ simplement ! La notation se conforme aux définitions de commandes LaTeX et s'écrit\
\ \\newcommand{\\name}{content} ou \\newcommand{\\name}[number of arguments]{content}.\
\ Par exemple, \\newcommand{\\add}[2]{#1 + #2} étendra \\add{3}{foo} en 3 + foo.\
\ Les accolades entourant le nom de la macro peuvent être changés pour des parenthèses\
\ ou des crochets. Cela affectera les types de parenthèses utilisées pour les arguments.\
\ Une (et une seule) macro peut être définie par ligne, et vous ne pouvez pas couper\
\ la ligne au milieu d'une définition. Les lignes invalides sont simplement ignorées.\
\ Seulement de simples fonctions de substitution de chaines sont supportées; la\
\ syntaxe avancée, telle que la ramification conditionnelle, ne peut pas être utilisée\
\ ici."

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1174,27 +1174,6 @@ _time:
minute: "min"
hour: "hod"
day: "dní"
_tutorial:
title: "How to use Calckey"
step1_1: "Welcome!"
step1_2: "Let's get you set up. You'll be up and running in no time!"
step2_1: "First, please fill out your profile."
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: "Now time to follow some people!"
step3_2: "Your home and social timelines are based off of who you follow, so try following a couple accounts to get started.\nClick the plus circle on the top right of a profile to follow them."
step4_1: "Let's get you out there."
step4_2: "For your first post, some people like to made a {introduction} post or a simple \"Hello world!\""
step5_1: "Timelines, timelines everywhere!"
step5_2: "Your instance has {timelines} different timelines enabled."
step5_3: "The Home {icon} timeline is where you can see posts from your followers."
step5_4: "The Local {icon} timeline is where you can see posts from everyone else on this instance."
step5_5: "The Recommended {icon} timeline is where you can see posts from instances the admins recommend."
step5_6: "The Social {icon} timeline is where you can see posts from friends of your followers."
step5_7: "The Global {icon} timeline is where you can see posts from every other connected instance."
step6_1: "So, what is this place?"
step6_2: "Well, you didn't just join Calckey. You joined a portal to the Fediverse, an interconnected network of thousands of servers, called \"instances\"."
step6_3: "Each server works in different ways, and not all servers run Calckey. This one does though! It's a bit complicated, but you'll get the hang of it in no time."
step6_4: "Now go, explore, and have fun!"
_2fa:
alreadyRegistered: "Už ste zaregistrovali 2-faktorové autentifikačné zariadenie."
registerDevice: "Registrovať nové zariadenie"

View file

@ -1179,27 +1179,6 @@ _time:
minute: "phút"
hour: "giờ"
day: "ngày"
_tutorial:
title: "How to use Calckey"
step1_1: "Welcome!"
step1_2: "Let's get you set up. You'll be up and running in no time!"
step2_1: "First, please fill out your profile."
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: "Now time to follow some people!"
step3_2: "Your home and social timelines are based off of who you follow, so try following a couple accounts to get started.\nClick the plus circle on the top right of a profile to follow them."
step4_1: "Let's get you out there."
step4_2: "For your first post, some people like to made a {introduction} post or a simple \"Hello world!\""
step5_1: "Timelines, timelines everywhere!"
step5_2: "Your instance has {timelines} different timelines enabled."
step5_3: "The Home {icon} timeline is where you can see posts from your followers."
step5_4: "The Local {icon} timeline is where you can see posts from everyone else on this instance."
step5_5: "The Recommended {icon} timeline is where you can see posts from instances the admins recommend."
step5_6: "The Social {icon} timeline is where you can see posts from friends of your followers."
step5_7: "The Global {icon} timeline is where you can see posts from every other connected instance."
step6_1: "So, what is this place?"
step6_2: "Well, you didn't just join Calckey. You joined a portal to the Fediverse, an interconnected network of thousands of servers, called \"instances\"."
step6_3: "Each server works in different ways, and not all servers run Calckey. This one does though! It's a bit complicated, but you'll get the hang of it in no time."
step6_4: "Now go, explore, and have fun!"
_2fa:
alreadyRegistered: "Bạn đã đăng ký thiết bị xác minh 2 bước."
registerDevice: "Đăng ký một thiết bị"

View file

@ -1,5 +1,5 @@
---
_lang_: "中文(简体)"
_lang_: "简体中文"
headlineMisskey: "通过帖子连接在一起的网络"
introMisskey: "欢迎Misskey是一个开源的、去中心化的“微博客”服务。\n通过编写「帖文」来和大家分享你的以及你周围的事情吧📡\n通过「回应」功能可以让你快速地对大家的帖文表达反馈👍\n来探索新的世界吧🚀"
monthAndDay: "{month}月 {day}日"
@ -107,6 +107,8 @@ clickToShow: "点击以显示"
sensitive: "敏感内容"
add: "添加"
reaction: "回应"
enableEmojiReaction: "启用表情符号回应"
showEmojisInReactionNotifications: "在回应通知中显示表情符号"
reactionSetting: "在选择器中显示的回应"
reactionSettingDescription2: "拖动重新排序,单击删除,点击 + 添加。"
rememberNoteVisibility: "保存上次设置的可见性"
@ -116,6 +118,8 @@ unmarkAsSensitive: "取消标记为敏感内容"
enterFileName: "请输入文件名"
mute: "屏蔽"
unmute: "解除屏蔽"
renoteMute: "屏蔽转帖"
renoteUnmute: "解除屏蔽转帖"
block: "拉黑"
unblock: "取消拉黑"
suspend: "冻结"
@ -892,6 +896,9 @@ navbar: "导航栏"
shuffle: "随机"
account: "账户"
move: "移动"
customKaTeXMacro: "自定义 KaTeX 宏"
customKaTeXMacroDescription: "使用宏来轻松的输入数学表达式吧!宏的用法与 LaTeX 中的命令定义相同。你可以使用 \\newcommand{\\name}{content} 或 \\newcommand{\\name}[number of arguments]{content} 来输入数学表达式。举个例子,\\newcommand{\\add}[2]{#1 + #2} 会将 \\add{3}{foo} 展开为 3 + foo。此外宏名称外的花括号 {} 可以被替换为圆括号 () 和方括号 [],这会影响用于参数的括号。每行只能够定义一个宏,无法在中间换行,且无效的行将被忽略。只支持简单字符串替换功能,不支持高级语法,如条件分支等。"
enableCustomKaTeXMacro: "启用自定义 KaTeX 宏"
_sensitiveMediaDetection:
description: "可以使用机器学习技术自动检测敏感媒体,以便进行审核。服务器负载将略微增加。"
sensitivity: "检测敏感度"
@ -1726,7 +1733,9 @@ _deck:
popRight: "向右弹出"
profile: "配置文件"
newProfile: "新建配置文件"
renameProfile: "重命名配置文件"
deleteProfile: "删除配置文件"
nameAlreadyExists: "该配置文件名已存在。"
introduction: "将各列进行组合以创建您自己的界面!"
introduction2: "您可以随时通过屏幕右侧的 + 来添加列"
widgetsIntroduction: "从列菜单中,选择“小工具编辑”来添加小工具"

View file

@ -1,7 +1,7 @@
---
_lang_: "繁體中文"
headlineMisskey: "貼文連繫網路"
introMisskey: "歡迎! Misskey是一個開放原始碼且去中心化的社群網路。\n透過「貼文」分享周邊新鮮事並告訴其他人您的想法📡\n透過「反應」功能對大家的貼文表達情感👍\n一起來探索這個新的世界吧🚀"
introMisskey: "歡迎! Misskey是一個開放原始碼且去中心化的社群網路。\n透過「貼文」分享周邊新鮮事並告訴其他人您的想法\U0001F4E1\
\n透過「反應」功能對大家的貼文表達情感\U0001F44D\n一起來探索這個新的世界吧\U0001F680"
monthAndDay: "{month}月 {day}日"
search: "搜尋"
notifications: "通知"
@ -14,7 +14,7 @@ gotIt: "知道了"
cancel: "取消"
enterUsername: "輸入使用者名稱"
renotedBy: "{user} 轉傳了"
noNotes: "無貼文"
noNotes: "無貼文"
noNotifications: "沒有通知"
instance: "實例"
settings: "設定"
@ -23,19 +23,19 @@ otherSettings: "其他設定"
openInWindow: "在新視窗開啟"
profile: "個人檔案"
timeline: "時間軸"
noAccountDescription: "此用戶還沒有自我介紹"
noAccountDescription: "此用戶還沒有自我介紹"
login: "登入"
loggingIn: "登入中"
logout: "登出"
signup: "註冊"
uploading: "上傳中"
uploading: "上傳中..."
save: "儲存"
users: "使用者"
addUser: "新增使用者"
favorite: "我的最愛"
favorites: "我的最愛"
unfavorite: "從我的最愛中移除"
favorited: "已添加至我的最愛"
favorited: "已添加至我的最愛"
alreadyFavorited: "我的最愛中已存在。"
cantFavorite: "無法加入至我的最愛。"
pin: "置頂"
@ -64,7 +64,7 @@ import: "匯入"
export: "匯出"
files: "檔案"
download: "下載"
driveFileDeleteConfirm: "確定要刪除檔案「{name}」嗎?使用此附件的貼文也會跟著消失。\n"
driveFileDeleteConfirm: "確定要刪除檔案「{name}」嗎?使用此附件的貼文也會跟著消失。"
unfollowConfirm: "確定要取消追隨{name}嗎?"
exportRequested: "已請求匯出。這可能會花一點時間。結束後檔案將會被放到雲端裡。"
importRequested: "已請求匯入。這可能會花一點時間"
@ -107,6 +107,8 @@ clickToShow: "按一下以顯示"
sensitive: "敏感內容"
add: "新增"
reaction: "情感"
enableEmojiReaction: "啟用表情符號反應"
showEmojisInReactionNotifications: "在反應通知中顯示表情符號"
reactionSetting: "在選擇器中顯示反應"
reactionSettingDescription2: "拖動以重新列序,點擊以刪除,按下 + 添加。"
rememberNoteVisibility: "記住貼文可見性"
@ -116,6 +118,8 @@ unmarkAsSensitive: "取消標記為敏感內容"
enterFileName: "請輸入檔案名稱"
mute: "靜音"
unmute: "解除靜音"
renoteMute: "靜音轉發貼文"
renoteUnmute: "解除靜音轉發貼文"
block: "封鎖"
unblock: "解除封鎖"
suspend: "凍結"
@ -139,7 +143,7 @@ settingGuide: "推薦設定"
cacheRemoteFiles: "快取遠端檔案"
cacheRemoteFilesDescription: "禁用此設定會停止遠端檔案的緩存,從而節省儲存空間,但資料會因直接連線從而產生額外連接數據。"
flagAsBot: "此使用者是機器人"
flagAsBotDescription: "如果本帳戶是由程式控制,請啟用此選項。啟用後,會作為標示幫助其他開發者防止機器人之間產生無限互動的行為,並會調整Misskey內部系統將本帳戶識別為機器人"
flagAsBotDescription: "如果本帳戶是由程式控制,請啟用此選項。啟用後,會作為標示幫助其他開發者防止機器人之間產生無限互動的行為,並會調整Calckey內部系統將本帳戶識別為機器人"
flagAsCat: "此使用者是貓"
flagAsCatDescription: "如果想將本帳戶標示為一隻貓,請開啟此標示"
flagShowTimelineReplies: "在時間軸上顯示貼文的回覆"
@ -199,7 +203,7 @@ noUsers: "沒有任何使用者"
editProfile: "編輯個人檔案"
noteDeleteConfirm: "確定刪除此貼文嗎?"
pinLimitExceeded: "不能置頂更多貼文了"
intro: "Misskey 部署完成!請建立管理員帳戶。"
intro: "Calckey 部署完成!請建立管理員帳戶。"
done: "完成"
processing: "處理中"
preview: "預覽"
@ -378,7 +382,7 @@ exploreFediverse: "探索聯邦世界"
popularTags: "熱門標籤"
userList: "清單"
about: "資訊"
aboutMisskey: "關於 Misskey"
aboutMisskey: "關於 Calckey"
administrator: "管理員"
token: "權杖"
twoStepAuthentication: "兩階段驗證"
@ -524,7 +528,7 @@ sort: "排序"
ascendingOrder: "昇冪"
descendingOrder: "降冪"
scratchpad: "暫存記憶體"
scratchpadDescription: "AiScript控制台為AiScript提供了實驗環境。您可以在此編寫、執行和確認代碼與Misskey互動的结果。"
scratchpadDescription: "AiScript控制台為AiScript提供了實驗環境。您可以在此編寫、執行和確認代碼與Calckey互動的结果。"
output: "輸出"
script: "腳本"
disablePagesScript: "停用頁面的AiScript腳本"
@ -640,7 +644,7 @@ instanceTicker: "貼文的實例來源"
waitingFor: "等待{x}"
random: "隨機"
system: "系統"
switchUi: "切換界面"
switchUi: "界面"
desktop: "桌面"
clip: "摘錄"
createNew: "新建"
@ -791,7 +795,7 @@ hashtags: "#tag"
troubleshooting: "故障排除"
useBlurEffect: "在 UI 上使用模糊效果"
learnMore: "更多資訊"
misskeyUpdated: "Misskey 更新完成!"
misskeyUpdated: "Calckey 更新完成!"
whatIsNew: "顯示更新資訊"
translate: "翻譯"
translatedFrom: "從 {x} 翻譯"
@ -892,6 +896,12 @@ navbar: "導覽列"
shuffle: "隨機"
account: "帳戶"
move: "移動"
customKaTeXMacro: "自定義 KaTeX 宏"
customKaTeXMacroDescription: "使用宏來輕鬆的輸入數學表達式吧!宏的用法與 LaTeX 中的命令定義相同。你可以使用 \\newcommand{\\\
name}{content} 或 \\newcommand{\\name}[number of arguments]{content} 來輸入數學表達式。舉個例子,\\\
newcommand{\\add}[2]{#1 + #2} 會將 \\add{3}{foo} 展開為 3 + foo。此外宏名稱外的花括號 {} 可以被替換為圓括號\
\ () 和方括號 [],這會影響用於參數的括號。每行只能夠定義一個宏,無法在中間換行,且無效的行將被忽略。只支持簡單字符串替換功能,不支持高級語法,如條件分支等。"
enableCustomKaTeXMacro: "啟用自定義 KaTeX 宏"
_sensitiveMediaDetection:
description: "您可以使用機器學習自動檢測敏感媒體並將其用於審核。 伺服器的負荷會稍微增加。"
sensitivity: "檢測敏感度"
@ -967,13 +977,13 @@ _registry:
domain: "域"
createKey: "新增機碼"
_aboutMisskey:
about: "Misskey是由syuilo自2014年起開發的開源軟體。"
about: "Calckey是由ThatOneCalculator自2022年起開發的Misskey分支。"
contributors: "主要貢獻者"
allContributors: "全體貢獻人員"
source: "原始碼"
translation: "翻譯Misskey"
donate: "贊助Misskey"
morePatrons: "還有許許多多幫助我們的其他人,非常感謝你們。 🥰"
translation: "翻譯Calckey"
donate: "贊助Calckey"
morePatrons: "還有許許多多幫助我們的其他人,非常感謝你們。 \U0001F970"
patrons: "贊助者"
_nsfw:
respect: "隱藏敏感內容"
@ -982,7 +992,7 @@ _nsfw:
_mfm:
cheatSheet: "MFM代碼小抄"
intro: "MFM是Misskey專用的標記語言可以在Misskey中的各個位置使用。 您可以這裏看到MFM可用語法列表。"
dummy: "Misskey拓展了Fediverse的世界"
dummy: "Calckey拓展了Fediverse的世界"
mention: "提及"
mentionDescription: "透過 @+用戶名 來標示特定使用者。"
hashtag: "#tag"
@ -1387,6 +1397,7 @@ _timelines:
local: "本地"
social: "社群"
global: "公開"
recommended: 推薦
_pages:
newPage: "建立頁面"
editPage: "編輯頁面"
@ -1726,7 +1737,9 @@ _deck:
popRight: "向右彈出"
profile: "個人檔案"
newProfile: "新建個人檔案"
renameProfile: "重新命名個人檔案"
deleteProfile: "刪除個人檔案"
nameAlreadyExists: "該個人檔案名已經存在。"
introduction: "組合欄位來製作屬於自己的介面吧!"
introduction2: "您可以隨時透過按畫面右方的 + 來添加欄位。"
widgetsIntroduction: "請從欄位的選單中,選擇「編輯小工具」來添加小工具"
@ -1739,3 +1752,59 @@ _deck:
list: "清單"
mentions: "提及"
direct: "指定使用者"
secureMode: 安全模式(授權獲取)
instanceSecurity: 實例安全性
privateMode: 私人模式
allowedInstances: 列入白名單的實例
secureModeInfo: 當從其他實例請求時,不要在沒有證據的情況下發回。
_messaging:
dms: 私訊
groups: 群組
manageGroups: 管理群組
replayTutorial: 重新播放教程
moveFromLabel: '您想遷移的舊帳戶:'
customMOTDDescription: 每次用戶加載/重新加載頁面時,由換行符號分隔的 MOTD啟動畫面的自定信息將隨機顯示。
privateModeInfo: 啟用後,只有列入白名單的實例才能與您的實例聯合。所有貼文都將對公眾隱藏。
adminCustomCssWarn: 除非你知道它的作用,否則請不要使用此設定。 輸入不正確的值可能會導致每個人的客戶端無法正常運行。你可在你的的用戶設定中測試,確保你的
CSS 正常工作。
showUpdates: Calckey 更新時顯示彈出視窗
recommendedInstances: 建議的實例
caption: 自動字幕
enterSendsMessage: 在 Messaging 中按 Return 發送消息 (如關閉則是 Ctrl + Return)
migrationConfirm: "您確定要將你的帳戶遷移到 {account} 嗎? 一旦這樣做,你將無法復原,而你將無法再次正常使用您的帳戶。\n另外請確保你已將此當前帳戶設置為您要遷移的帳戶。"
customSplashIconsDescription: 每次用戶加載/重新加載頁面時,以換行符號分隔的自定啟動畫面圖標的網址將隨機顯示。請確保圖片位於靜態網址上,最好所有圖片解析度調整為
192x192。
accountMoved: '該使用者已移至新帳戶:'
showAds: 顯示廣告
noThankYou: 不用了,謝謝
selectInstance: 選擇實例
enableRecommendedTimeline: 啟用推薦時間軸
antennaInstancesDescription: 分行列出一個實例
moveTo: 遷移此帳戶到新帳戶
moveToLabel: '請輸入你將會遷移到的帳戶:'
moveAccount: 遷移帳戶!
moveAccountDescription: '這個過程是不可逆的。 在遷移前,請確保您已在新帳戶上為此帳戶設置了別名(Alias)。 請輸入帳戶標籤 (格式:
@person@instance.com)'
moveFrom: 由舊帳戶移至此帳戶
moveFromDescription: '這將為你的舊帳戶設置一個別名(Alias),以便你可以從該帳戶轉移到當前帳戶。 在你的舊帳戶移動之前請執行此操作。 請輸入帳戶標籤
(格式: @person@instance.com)'
_apps:
crossPlatform: 跨平台
free: 免費
paid: 付費
enableEmojiReactions: 啟用表情符號反應
breakFollowConfirm: 您確定要移除該關注者嗎?
socialTimeline: 社交時間軸
cannotUploadBecauseExceedsFileSizeLimit: 因檔案太大而無法上傳。
customMOTD: 自定義MOTD (網頁載入時顯示的信息)
customSplashIcons: 啟動畫面圖標 (網址)
splash: 啟動畫面
updateAvailable: 可能有可用的更新!
showAdminUpdates: 表明新的 Calckey 版本可用(只限管理員)
migration: 遷移
homeTimeline: 主頁時間軸
swipeOnDesktop: 允許在桌面上進行手機式滑動
logoImageUrl: 圖標網址
addInstance: 增加一個實例
noInstances: 沒有實例
flagSpeakAsCat: 像貓一樣地說話

View file

@ -1,12 +1,12 @@
{
"name": "calckey",
"version": "13.2.0-dev4",
"version": "13.2.0-dev38",
"codename": "aqua",
"repository": {
"type": "git",
"url": "https://codeberg.org/calckey/calckey.git"
},
"packageManager": "pnpm@7.27.0",
"packageManager": "pnpm@8.3.1",
"private": true,
"scripts": {
"rebuild": "pnpm run clean && pnpm -r run build && pnpm run gulp",
@ -27,7 +27,7 @@
"e2e": "start-server-and-test start:test http://localhost:61812 cy:run",
"mocha": "pnpm --filter backend run mocha",
"test": "pnpm run mocha",
"format": "gulp format",
"format": "pnpm rome format packages/**/* --write && pnpm --filter client run format",
"clean": "pnpm node ./scripts/clean.js",
"clean-all": "pnpm node ./scripts/clean-all.js",
"cleanall": "pnpm run clean-all"
@ -38,12 +38,11 @@
"dependencies": {
"@bull-board/api": "^4.10.2",
"@bull-board/ui": "^4.10.2",
"@napi-rs/cli": "^2.15.0",
"@tensorflow/tfjs": "^3.21.0",
"calckey-js": "^0.0.22",
"focus-trap": "^7.2.0",
"focus-trap-vue": "^4.0.1",
"js-yaml": "4.1.0",
"phosphor-icons": "^1.4.2",
"seedrandom": "^3.0.5"
},
"devDependencies": {

View file

@ -0,0 +1,10 @@
import { loadConfig } from "./built/config.js";
import { createRedisConnection } from "./built/redis.js";
const config = loadConfig();
const redis = createRedisConnection(config);
redis.on("connect", () => redis.disconnect());
redis.on("error", (e) => {
throw e;
});

File diff suppressed because it is too large Load diff

View file

@ -1,21 +1,43 @@
export class Pages1556348509290 {
async up(queryRunner) {
await queryRunner.query(`CREATE TYPE "page_visibility_enum" AS ENUM('public', 'followers', 'specified')`);
await queryRunner.query(`CREATE TABLE "page" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, "title" character varying(256) NOT NULL, "name" character varying(256) NOT NULL, "summary" character varying(256), "alignCenter" boolean NOT NULL, "font" character varying(32) NOT NULL, "userId" character varying(32) NOT NULL, "eyeCatchingImageId" character varying(32), "content" jsonb NOT NULL DEFAULT '[]', "variables" jsonb NOT NULL DEFAULT '[]', "visibility" "page_visibility_enum" NOT NULL, "visibleUserIds" character varying(32) array NOT NULL DEFAULT '{}'::varchar[], CONSTRAINT "PK_742f4117e065c5b6ad21b37ba1f" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_fbb4297c927a9b85e9cefa2eb1" ON "page" ("createdAt") `);
await queryRunner.query(`CREATE INDEX "IDX_af639b066dfbca78b01a920f8a" ON "page" ("updatedAt") `);
await queryRunner.query(`CREATE INDEX "IDX_b82c19c08afb292de4600d99e4" ON "page" ("name") `);
await queryRunner.query(`CREATE INDEX "IDX_ae1d917992dd0c9d9bbdad06c4" ON "page" ("userId") `);
await queryRunner.query(`CREATE INDEX "IDX_90148bbc2bf0854428786bfc15" ON "page" ("visibleUserIds") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_2133ef8317e4bdb839c0dcbf13" ON "page" ("userId", "name") `);
await queryRunner.query(`ALTER TABLE "page" ADD CONSTRAINT "FK_ae1d917992dd0c9d9bbdad06c4a" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "page" ADD CONSTRAINT "FK_3126dd7c502c9e4d7597ef7ef10" FOREIGN KEY ("eyeCatchingImageId") REFERENCES "drive_file"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(
`CREATE TYPE "page_visibility_enum" AS ENUM('public', 'followers', 'specified')`,
);
await queryRunner.query(
`CREATE TABLE "page" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, "title" character varying(256) NOT NULL, "name" character varying(256) NOT NULL, "summary" character varying(256), "alignCenter" boolean NOT NULL, "font" character varying(32) NOT NULL, "userId" character varying(32) NOT NULL, "eyeCatchingImageId" character varying(32), "content" jsonb NOT NULL DEFAULT '[]', "variables" jsonb NOT NULL DEFAULT '[]', "visibility" "page_visibility_enum" NOT NULL, "visibleUserIds" character varying(32) array NOT NULL DEFAULT '{}'::varchar[], CONSTRAINT "PK_742f4117e065c5b6ad21b37ba1f" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`CREATE INDEX "IDX_fbb4297c927a9b85e9cefa2eb1" ON "page" ("createdAt") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_af639b066dfbca78b01a920f8a" ON "page" ("updatedAt") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_b82c19c08afb292de4600d99e4" ON "page" ("name") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_ae1d917992dd0c9d9bbdad06c4" ON "page" ("userId") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_90148bbc2bf0854428786bfc15" ON "page" ("visibleUserIds") `,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_2133ef8317e4bdb839c0dcbf13" ON "page" ("userId", "name") `,
);
await queryRunner.query(
`ALTER TABLE "page" ADD CONSTRAINT "FK_ae1d917992dd0c9d9bbdad06c4a" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "page" ADD CONSTRAINT "FK_3126dd7c502c9e4d7597ef7ef10" FOREIGN KEY ("eyeCatchingImageId") REFERENCES "drive_file"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "page" DROP CONSTRAINT "FK_3126dd7c502c9e4d7597ef7ef10"`);
await queryRunner.query(`ALTER TABLE "page" DROP CONSTRAINT "FK_ae1d917992dd0c9d9bbdad06c4a"`);
await queryRunner.query(
`ALTER TABLE "page" DROP CONSTRAINT "FK_3126dd7c502c9e4d7597ef7ef10"`,
);
await queryRunner.query(
`ALTER TABLE "page" DROP CONSTRAINT "FK_ae1d917992dd0c9d9bbdad06c4a"`,
);
await queryRunner.query(`DROP INDEX "IDX_2133ef8317e4bdb839c0dcbf13"`);
await queryRunner.query(`DROP INDEX "IDX_90148bbc2bf0854428786bfc15"`);
await queryRunner.query(`DROP INDEX "IDX_ae1d917992dd0c9d9bbdad06c4"`);

View file

@ -1,13 +1,21 @@
export class UserProfile1556746559567 {
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "githubId" TYPE VARCHAR(64) USING "githubId"::VARCHAR(64)`);
await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "discordExpiresDate" TYPE VARCHAR(64) USING "discordExpiresDate"::VARCHAR(64)`);
await queryRunner.query(
`ALTER TABLE "user_profile" ALTER COLUMN "githubId" TYPE VARCHAR(64) USING "githubId"::VARCHAR(64)`,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ALTER COLUMN "discordExpiresDate" TYPE VARCHAR(64) USING "discordExpiresDate"::VARCHAR(64)`,
);
}
async down(queryRunner) {
await queryRunner.query(`UPDATE "user_profile" SET github = FALSE, discord = FALSE`);
await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "githubId" TYPE INTEGER USING NULL`);
await queryRunner.query(`ALTER TABLE "user_profile" ALTER COLUMN "discordExpiresDate" TYPE INTEGER USING NULL`);
await queryRunner.query(
`UPDATE "user_profile" SET github = FALSE, discord = FALSE`,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ALTER COLUMN "githubId" TYPE INTEGER USING NULL`,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ALTER COLUMN "discordExpiresDate" TYPE INTEGER USING NULL`,
);
}
}

View file

@ -1,8 +1,8 @@
export class PinnedUsers1557476068003 {
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" ADD "pinnedUsers" character varying(256) array NOT NULL DEFAULT '{}'::varchar[]`);
await queryRunner.query(
`ALTER TABLE "meta" ADD "pinnedUsers" character varying(256) array NOT NULL DEFAULT '{}'::varchar[]`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "pinnedUsers"`);

View file

@ -1,10 +1,14 @@
export class AddSomeUrls1557761316509 {
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" ADD "ToSUrl" character varying(512)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "repositoryUrl" character varying(512) NOT NULL DEFAULT 'https://github.com/misskey-dev/misskey'`);
await queryRunner.query(`ALTER TABLE "meta" ADD "feedbackUrl" character varying(512) DEFAULT 'https://github.com/misskey-dev/misskey/issues/new'`);
await queryRunner.query(
`ALTER TABLE "meta" ADD "ToSUrl" character varying(512)`,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "repositoryUrl" character varying(512) NOT NULL DEFAULT 'https://github.com/misskey-dev/misskey'`,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "feedbackUrl" character varying(512) DEFAULT 'https://github.com/misskey-dev/misskey/issues/new'`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "feedbackUrl"`);

View file

@ -1,28 +1,66 @@
export class ObjectStorageSetting1557932705754 {
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" ADD "useObjectStorage" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageBucket" character varying(512)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStoragePrefix" character varying(512)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageBaseUrl" character varying(512)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageEndpoint" character varying(512)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageRegion" character varying(512)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageAccessKey" character varying(512)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageSecretKey" character varying(512)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStoragePort" integer`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageUseSSL" boolean NOT NULL DEFAULT true`);
await queryRunner.query(
`ALTER TABLE "meta" ADD "useObjectStorage" boolean NOT NULL DEFAULT false`,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "objectStorageBucket" character varying(512)`,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "objectStoragePrefix" character varying(512)`,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "objectStorageBaseUrl" character varying(512)`,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "objectStorageEndpoint" character varying(512)`,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "objectStorageRegion" character varying(512)`,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "objectStorageAccessKey" character varying(512)`,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "objectStorageSecretKey" character varying(512)`,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "objectStoragePort" integer`,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "objectStorageUseSSL" boolean NOT NULL DEFAULT true`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageUseSSL"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStoragePort"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageSecretKey"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageAccessKey"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageRegion"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageEndpoint"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageBaseUrl"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStoragePrefix"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageBucket"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "useObjectStorage"`);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "objectStorageUseSSL"`,
);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "objectStoragePort"`,
);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "objectStorageSecretKey"`,
);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "objectStorageAccessKey"`,
);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "objectStorageRegion"`,
);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "objectStorageEndpoint"`,
);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "objectStorageBaseUrl"`,
);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "objectStoragePrefix"`,
);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "objectStorageBucket"`,
);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "useObjectStorage"`,
);
}
}

View file

@ -1,17 +1,31 @@
export class PageLike1558072954435 {
async up(queryRunner) {
await queryRunner.query(`CREATE TABLE "page_like" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "pageId" character varying(32) NOT NULL, CONSTRAINT "PK_813f034843af992d3ae0f43c64c" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_0e61efab7f88dbb79c9166dbb4" ON "page_like" ("userId") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_4ce6fb9c70529b4c8ac46c9bfa" ON "page_like" ("userId", "pageId") `);
await queryRunner.query(`ALTER TABLE "page" ADD "likedCount" integer NOT NULL DEFAULT 0`);
await queryRunner.query(`ALTER TABLE "page_like" ADD CONSTRAINT "FK_0e61efab7f88dbb79c9166dbb48" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "page_like" ADD CONSTRAINT "FK_cf8782626dced3176038176a847" FOREIGN KEY ("pageId") REFERENCES "page"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(
`CREATE TABLE "page_like" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "pageId" character varying(32) NOT NULL, CONSTRAINT "PK_813f034843af992d3ae0f43c64c" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`CREATE INDEX "IDX_0e61efab7f88dbb79c9166dbb4" ON "page_like" ("userId") `,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_4ce6fb9c70529b4c8ac46c9bfa" ON "page_like" ("userId", "pageId") `,
);
await queryRunner.query(
`ALTER TABLE "page" ADD "likedCount" integer NOT NULL DEFAULT 0`,
);
await queryRunner.query(
`ALTER TABLE "page_like" ADD CONSTRAINT "FK_0e61efab7f88dbb79c9166dbb48" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "page_like" ADD CONSTRAINT "FK_cf8782626dced3176038176a847" FOREIGN KEY ("pageId") REFERENCES "page"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "page_like" DROP CONSTRAINT "FK_cf8782626dced3176038176a847"`);
await queryRunner.query(`ALTER TABLE "page_like" DROP CONSTRAINT "FK_0e61efab7f88dbb79c9166dbb48"`);
await queryRunner.query(
`ALTER TABLE "page_like" DROP CONSTRAINT "FK_cf8782626dced3176038176a847"`,
);
await queryRunner.query(
`ALTER TABLE "page_like" DROP CONSTRAINT "FK_0e61efab7f88dbb79c9166dbb48"`,
);
await queryRunner.query(`ALTER TABLE "page" DROP COLUMN "likedCount"`);
await queryRunner.query(`DROP INDEX "IDX_4ce6fb9c70529b4c8ac46c9bfa"`);
await queryRunner.query(`DROP INDEX "IDX_0e61efab7f88dbb79c9166dbb4"`);

View file

@ -1,33 +1,77 @@
export class UserGroup1558103093633 {
async up(queryRunner) {
await queryRunner.query(`CREATE TABLE "user_group" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "name" character varying(256) NOT NULL, "userId" character varying(32) NOT NULL, "isPrivate" boolean NOT NULL DEFAULT false, CONSTRAINT "PK_3c29fba6fe013ec8724378ce7c9" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_20e30aa35180e317e133d75316" ON "user_group" ("createdAt") `);
await queryRunner.query(`CREATE INDEX "IDX_3d6b372788ab01be58853003c9" ON "user_group" ("userId") `);
await queryRunner.query(`CREATE TABLE "user_group_joining" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "userGroupId" character varying(32) NOT NULL, CONSTRAINT "PK_15f2425885253c5507e1599cfe7" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_f3a1b4bd0c7cabba958a0c0b23" ON "user_group_joining" ("userId") `);
await queryRunner.query(`CREATE INDEX "IDX_67dc758bc0566985d1b3d39986" ON "user_group_joining" ("userGroupId") `);
await queryRunner.query(`ALTER TABLE "messaging_message" ADD "groupId" character varying(32)`);
await queryRunner.query(`ALTER TABLE "messaging_message" ADD "reads" character varying(32) array NOT NULL DEFAULT '{}'::varchar[]`);
await queryRunner.query(`ALTER TABLE "messaging_message" ALTER COLUMN "recipientId" DROP NOT NULL`);
await queryRunner.query(`COMMENT ON COLUMN "messaging_message"."recipientId" IS 'The recipient user ID.'`);
await queryRunner.query(`CREATE INDEX "IDX_2c4be03b446884f9e9c502135b" ON "messaging_message" ("groupId") `);
await queryRunner.query(`ALTER TABLE "messaging_message" ADD CONSTRAINT "FK_2c4be03b446884f9e9c502135be" FOREIGN KEY ("groupId") REFERENCES "user_group"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "user_group" ADD CONSTRAINT "FK_3d6b372788ab01be58853003c93" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "user_group_joining" ADD CONSTRAINT "FK_f3a1b4bd0c7cabba958a0c0b231" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "user_group_joining" ADD CONSTRAINT "FK_67dc758bc0566985d1b3d399865" FOREIGN KEY ("userGroupId") REFERENCES "user_group"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(
`CREATE TABLE "user_group" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "name" character varying(256) NOT NULL, "userId" character varying(32) NOT NULL, "isPrivate" boolean NOT NULL DEFAULT false, CONSTRAINT "PK_3c29fba6fe013ec8724378ce7c9" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`CREATE INDEX "IDX_20e30aa35180e317e133d75316" ON "user_group" ("createdAt") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_3d6b372788ab01be58853003c9" ON "user_group" ("userId") `,
);
await queryRunner.query(
`CREATE TABLE "user_group_joining" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "userGroupId" character varying(32) NOT NULL, CONSTRAINT "PK_15f2425885253c5507e1599cfe7" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`CREATE INDEX "IDX_f3a1b4bd0c7cabba958a0c0b23" ON "user_group_joining" ("userId") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_67dc758bc0566985d1b3d39986" ON "user_group_joining" ("userGroupId") `,
);
await queryRunner.query(
`ALTER TABLE "messaging_message" ADD "groupId" character varying(32)`,
);
await queryRunner.query(
`ALTER TABLE "messaging_message" ADD "reads" character varying(32) array NOT NULL DEFAULT '{}'::varchar[]`,
);
await queryRunner.query(
`ALTER TABLE "messaging_message" ALTER COLUMN "recipientId" DROP NOT NULL`,
);
await queryRunner.query(
`COMMENT ON COLUMN "messaging_message"."recipientId" IS 'The recipient user ID.'`,
);
await queryRunner.query(
`CREATE INDEX "IDX_2c4be03b446884f9e9c502135b" ON "messaging_message" ("groupId") `,
);
await queryRunner.query(
`ALTER TABLE "messaging_message" ADD CONSTRAINT "FK_2c4be03b446884f9e9c502135be" FOREIGN KEY ("groupId") REFERENCES "user_group"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "user_group" ADD CONSTRAINT "FK_3d6b372788ab01be58853003c93" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "user_group_joining" ADD CONSTRAINT "FK_f3a1b4bd0c7cabba958a0c0b231" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "user_group_joining" ADD CONSTRAINT "FK_67dc758bc0566985d1b3d399865" FOREIGN KEY ("userGroupId") REFERENCES "user_group"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_group_joining" DROP CONSTRAINT "FK_67dc758bc0566985d1b3d399865"`);
await queryRunner.query(`ALTER TABLE "user_group_joining" DROP CONSTRAINT "FK_f3a1b4bd0c7cabba958a0c0b231"`);
await queryRunner.query(`ALTER TABLE "user_group" DROP CONSTRAINT "FK_3d6b372788ab01be58853003c93"`);
await queryRunner.query(`ALTER TABLE "messaging_message" DROP CONSTRAINT "FK_2c4be03b446884f9e9c502135be"`);
await queryRunner.query(
`ALTER TABLE "user_group_joining" DROP CONSTRAINT "FK_67dc758bc0566985d1b3d399865"`,
);
await queryRunner.query(
`ALTER TABLE "user_group_joining" DROP CONSTRAINT "FK_f3a1b4bd0c7cabba958a0c0b231"`,
);
await queryRunner.query(
`ALTER TABLE "user_group" DROP CONSTRAINT "FK_3d6b372788ab01be58853003c93"`,
);
await queryRunner.query(
`ALTER TABLE "messaging_message" DROP CONSTRAINT "FK_2c4be03b446884f9e9c502135be"`,
);
await queryRunner.query(`DROP INDEX "IDX_2c4be03b446884f9e9c502135b"`);
await queryRunner.query(`COMMENT ON COLUMN "messaging_message"."recipientId" IS ''`);
await queryRunner.query(`ALTER TABLE "messaging_message" ALTER COLUMN "recipientId" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "messaging_message" DROP COLUMN "reads"`);
await queryRunner.query(`ALTER TABLE "messaging_message" DROP COLUMN "groupId"`);
await queryRunner.query(
`COMMENT ON COLUMN "messaging_message"."recipientId" IS ''`,
);
await queryRunner.query(
`ALTER TABLE "messaging_message" ALTER COLUMN "recipientId" SET NOT NULL`,
);
await queryRunner.query(
`ALTER TABLE "messaging_message" DROP COLUMN "reads"`,
);
await queryRunner.query(
`ALTER TABLE "messaging_message" DROP COLUMN "groupId"`,
);
await queryRunner.query(`DROP INDEX "IDX_67dc758bc0566985d1b3d39986"`);
await queryRunner.query(`DROP INDEX "IDX_f3a1b4bd0c7cabba958a0c0b23"`);
await queryRunner.query(`DROP TABLE "user_group_joining"`);

View file

@ -1,18 +1,34 @@
export class UserGroupInvite1558257926829 {
async up(queryRunner) {
await queryRunner.query(`CREATE TABLE "user_group_invite" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "userGroupId" character varying(32) NOT NULL, CONSTRAINT "PK_3893884af0d3a5f4d01e7921a97" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_1039988afa3bf991185b277fe0" ON "user_group_invite" ("userId") `);
await queryRunner.query(`CREATE INDEX "IDX_e10924607d058004304611a436" ON "user_group_invite" ("userGroupId") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_78787741f9010886796f2320a4" ON "user_group_invite" ("userId", "userGroupId") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_d9ecaed8c6dc43f3592c229282" ON "user_group_joining" ("userId", "userGroupId") `);
await queryRunner.query(`ALTER TABLE "user_group_invite" ADD CONSTRAINT "FK_1039988afa3bf991185b277fe03" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "user_group_invite" ADD CONSTRAINT "FK_e10924607d058004304611a436a" FOREIGN KEY ("userGroupId") REFERENCES "user_group"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(
`CREATE TABLE "user_group_invite" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "userGroupId" character varying(32) NOT NULL, CONSTRAINT "PK_3893884af0d3a5f4d01e7921a97" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`CREATE INDEX "IDX_1039988afa3bf991185b277fe0" ON "user_group_invite" ("userId") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_e10924607d058004304611a436" ON "user_group_invite" ("userGroupId") `,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_78787741f9010886796f2320a4" ON "user_group_invite" ("userId", "userGroupId") `,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_d9ecaed8c6dc43f3592c229282" ON "user_group_joining" ("userId", "userGroupId") `,
);
await queryRunner.query(
`ALTER TABLE "user_group_invite" ADD CONSTRAINT "FK_1039988afa3bf991185b277fe03" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "user_group_invite" ADD CONSTRAINT "FK_e10924607d058004304611a436a" FOREIGN KEY ("userGroupId") REFERENCES "user_group"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_group_invite" DROP CONSTRAINT "FK_e10924607d058004304611a436a"`);
await queryRunner.query(`ALTER TABLE "user_group_invite" DROP CONSTRAINT "FK_1039988afa3bf991185b277fe03"`);
await queryRunner.query(
`ALTER TABLE "user_group_invite" DROP CONSTRAINT "FK_e10924607d058004304611a436a"`,
);
await queryRunner.query(
`ALTER TABLE "user_group_invite" DROP CONSTRAINT "FK_1039988afa3bf991185b277fe03"`,
);
await queryRunner.query(`DROP INDEX "IDX_d9ecaed8c6dc43f3592c229282"`);
await queryRunner.query(`DROP INDEX "IDX_78787741f9010886796f2320a4"`);
await queryRunner.query(`DROP INDEX "IDX_e10924607d058004304611a436"`);

View file

@ -1,8 +1,8 @@
export class UserListJoining1558266512381 {
async up(queryRunner) {
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_90f7da835e4c10aca6853621e1" ON "user_list_joining" ("userId", "userListId") `);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_90f7da835e4c10aca6853621e1" ON "user_list_joining" ("userId", "userListId") `,
);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "IDX_90f7da835e4c10aca6853621e1"`);

View file

@ -1,21 +1,43 @@
export class webauthn1561706992953 {
async up(queryRunner) {
await queryRunner.query(`CREATE TABLE "attestation_challenge" ("id" character varying(32) NOT NULL, "userId" character varying(32) NOT NULL, "challenge" character varying(64) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "registrationChallenge" boolean NOT NULL DEFAULT false, CONSTRAINT "PK_d0ba6786e093f1bcb497572a6b5" PRIMARY KEY ("id", "userId"))`);
await queryRunner.query(`CREATE INDEX "IDX_f1a461a618fa1755692d0e0d59" ON "attestation_challenge" ("userId") `);
await queryRunner.query(`CREATE INDEX "IDX_47efb914aed1f72dd39a306c7b" ON "attestation_challenge" ("challenge") `);
await queryRunner.query(`CREATE TABLE "user_security_key" ("id" character varying NOT NULL, "userId" character varying(32) NOT NULL, "publicKey" character varying NOT NULL, "lastUsed" TIMESTAMP WITH TIME ZONE NOT NULL, "name" character varying(30) NOT NULL, CONSTRAINT "PK_3e508571121ab39c5f85d10c166" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_ff9ca3b5f3ee3d0681367a9b44" ON "user_security_key" ("userId") `);
await queryRunner.query(`CREATE INDEX "IDX_0d7718e562dcedd0aa5cf2c9f7" ON "user_security_key" ("publicKey") `);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "securityKeysAvailable" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`ALTER TABLE "attestation_challenge" ADD CONSTRAINT "FK_f1a461a618fa1755692d0e0d592" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "user_security_key" ADD CONSTRAINT "FK_ff9ca3b5f3ee3d0681367a9b447" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(
`CREATE TABLE "attestation_challenge" ("id" character varying(32) NOT NULL, "userId" character varying(32) NOT NULL, "challenge" character varying(64) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "registrationChallenge" boolean NOT NULL DEFAULT false, CONSTRAINT "PK_d0ba6786e093f1bcb497572a6b5" PRIMARY KEY ("id", "userId"))`,
);
await queryRunner.query(
`CREATE INDEX "IDX_f1a461a618fa1755692d0e0d59" ON "attestation_challenge" ("userId") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_47efb914aed1f72dd39a306c7b" ON "attestation_challenge" ("challenge") `,
);
await queryRunner.query(
`CREATE TABLE "user_security_key" ("id" character varying NOT NULL, "userId" character varying(32) NOT NULL, "publicKey" character varying NOT NULL, "lastUsed" TIMESTAMP WITH TIME ZONE NOT NULL, "name" character varying(30) NOT NULL, CONSTRAINT "PK_3e508571121ab39c5f85d10c166" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`CREATE INDEX "IDX_ff9ca3b5f3ee3d0681367a9b44" ON "user_security_key" ("userId") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_0d7718e562dcedd0aa5cf2c9f7" ON "user_security_key" ("publicKey") `,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "securityKeysAvailable" boolean NOT NULL DEFAULT false`,
);
await queryRunner.query(
`ALTER TABLE "attestation_challenge" ADD CONSTRAINT "FK_f1a461a618fa1755692d0e0d592" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "user_security_key" ADD CONSTRAINT "FK_ff9ca3b5f3ee3d0681367a9b447" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_security_key" DROP CONSTRAINT "FK_ff9ca3b5f3ee3d0681367a9b447"`);
await queryRunner.query(`ALTER TABLE "attestation_challenge" DROP CONSTRAINT "FK_f1a461a618fa1755692d0e0d592"`);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "securityKeysAvailable"`);
await queryRunner.query(
`ALTER TABLE "user_security_key" DROP CONSTRAINT "FK_ff9ca3b5f3ee3d0681367a9b447"`,
);
await queryRunner.query(
`ALTER TABLE "attestation_challenge" DROP CONSTRAINT "FK_f1a461a618fa1755692d0e0d592"`,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "securityKeysAvailable"`,
);
await queryRunner.query(`DROP INDEX "IDX_0d7718e562dcedd0aa5cf2c9f7"`);
await queryRunner.query(`DROP INDEX "IDX_ff9ca3b5f3ee3d0681367a9b44"`);
await queryRunner.query(`DROP TABLE "user_security_key"`);

View file

@ -1,97 +1,275 @@
export class ChartIndexes1561873850023 {
async up(queryRunner) {
await queryRunner.query(`CREATE INDEX "IDX_0ad37b7ef50f4ddc84363d7ccc" ON "__chart__active_users" ("date") `);
await queryRunner.query(`CREATE INDEX "IDX_15e91a03aeeac9dbccdf43fc06" ON "__chart__active_users" ("span") `);
await queryRunner.query(`CREATE INDEX "IDX_00ed5f86db1f7efafb1978bf21" ON "__chart__active_users" ("group") `);
await queryRunner.query(`CREATE INDEX "IDX_20f57cc8f142c131340ee16742" ON "__chart__active_users" ("span", "date") `);
await queryRunner.query(`CREATE INDEX "IDX_9a3ed15a30ab7e3a37702e6e08" ON "__chart__active_users" ("date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_c26e2c1cbb6e911e0554b27416" ON "__chart__active_users" ("span", "date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_13565815f618a1ff53886c5b28" ON "__chart__drive" ("date") `);
await queryRunner.query(`CREATE INDEX "IDX_3fa0d0f17ca72e3dc80999a032" ON "__chart__drive" ("span") `);
await queryRunner.query(`CREATE INDEX "IDX_7a170f67425e62a8fabb76c872" ON "__chart__drive" ("group") `);
await queryRunner.query(`CREATE INDEX "IDX_6e1df243476e20cbf86572ecc0" ON "__chart__drive" ("span", "date") `);
await queryRunner.query(`CREATE INDEX "IDX_3313d7288855ec105b5bbf6c21" ON "__chart__drive" ("date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_06690fc959f1c9fdaf21928222" ON "__chart__drive" ("span", "date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_36cb699c49580d4e6c2e6159f9" ON "__chart__federation" ("date") `);
await queryRunner.query(`CREATE INDEX "IDX_e447064455928cf627590ef527" ON "__chart__federation" ("span") `);
await queryRunner.query(`CREATE INDEX "IDX_76e87c7bfc5d925fcbba405d84" ON "__chart__federation" ("group") `);
await queryRunner.query(`CREATE INDEX "IDX_2d416e6af791a82e338c79d480" ON "__chart__federation" ("span", "date") `);
await queryRunner.query(`CREATE INDEX "IDX_dd907becf76104e4b656659e6b" ON "__chart__federation" ("date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_e9cd07672b37d8966cf3709283" ON "__chart__federation" ("span", "date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_07747a1038c05f532a718fe1de" ON "__chart__hashtag" ("date") `);
await queryRunner.query(`CREATE INDEX "IDX_fcc181fb8283009c61cc4083ef" ON "__chart__hashtag" ("span") `);
await queryRunner.query(`CREATE INDEX "IDX_99a7d2faaef84a6f728d714ad6" ON "__chart__hashtag" ("group") `);
await queryRunner.query(`CREATE INDEX "IDX_49975586f50ed7b800fdd88fbd" ON "__chart__hashtag" ("span", "date") `);
await queryRunner.query(`CREATE INDEX "IDX_25a97c02003338124b2b75fdbc" ON "__chart__hashtag" ("date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_6d6f156ceefc6bc5f273a0e370" ON "__chart__hashtag" ("span", "date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_6b8f34a1a64b06014b6fb66824" ON "__chart__instance" ("date") `);
await queryRunner.query(`CREATE INDEX "IDX_c12f0af4a66cdd30c2287ce8aa" ON "__chart__instance" ("span") `);
await queryRunner.query(`CREATE INDEX "IDX_da8a46ba84ca1d8bb5a29bfb63" ON "__chart__instance" ("group") `);
await queryRunner.query(`CREATE INDEX "IDX_d0a4f79af5a97b08f37b547197" ON "__chart__instance" ("span", "date") `);
await queryRunner.query(`CREATE INDEX "IDX_39ee857ab2f23493037c6b6631" ON "__chart__instance" ("date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_f5448d9633cff74208d850aabe" ON "__chart__instance" ("span", "date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_a1efd3e0048a5f2793a47360dc" ON "__chart__network" ("date") `);
await queryRunner.query(`CREATE INDEX "IDX_f8dd01baeded2ffa833e0a610a" ON "__chart__network" ("span") `);
await queryRunner.query(`CREATE INDEX "IDX_7b5da130992ec9df96712d4290" ON "__chart__network" ("group") `);
await queryRunner.query(`CREATE INDEX "IDX_08fac0eb3b11f04c200c0b40dd" ON "__chart__network" ("span", "date") `);
await queryRunner.query(`CREATE INDEX "IDX_0a905b992fecd2b5c3fb98759e" ON "__chart__network" ("date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_9ff6944f01acb756fdc92d7563" ON "__chart__network" ("span", "date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_42eb716a37d381cdf566192b2b" ON "__chart__notes" ("date") `);
await queryRunner.query(`CREATE INDEX "IDX_e69096589f11e3baa98ddd64d0" ON "__chart__notes" ("span") `);
await queryRunner.query(`CREATE INDEX "IDX_7036f2957151588b813185c794" ON "__chart__notes" ("group") `);
await queryRunner.query(`CREATE INDEX "IDX_0c9a159c5082cbeef3ca6706b5" ON "__chart__notes" ("span", "date") `);
await queryRunner.query(`CREATE INDEX "IDX_f09d543e3acb16c5976bdb31fa" ON "__chart__notes" ("date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_924fc196c80ca24bae01dd37e4" ON "__chart__notes" ("span", "date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_5f86db6492274e07c1a3cdf286" ON "__chart__per_user_drive" ("date") `);
await queryRunner.query(`CREATE INDEX "IDX_328f259961e60c4fa0bfcf55ca" ON "__chart__per_user_drive" ("span") `);
await queryRunner.query(`CREATE INDEX "IDX_e496ca8096d28f6b9b509264dc" ON "__chart__per_user_drive" ("group") `);
await queryRunner.query(`CREATE INDEX "IDX_42ea9381f0fda8dfe0fa1c8b53" ON "__chart__per_user_drive" ("span", "date") `);
await queryRunner.query(`CREATE INDEX "IDX_30bf67687f483ace115c5ca642" ON "__chart__per_user_drive" ("date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_f2aeafde2ae6fbad38e857631b" ON "__chart__per_user_drive" ("span", "date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_7af07790712aa3438ff6773f3b" ON "__chart__per_user_following" ("date") `);
await queryRunner.query(`CREATE INDEX "IDX_f92dd6d03f8d994f29987f6214" ON "__chart__per_user_following" ("span") `);
await queryRunner.query(`CREATE INDEX "IDX_4b3593098b6edc9c5afe36b18b" ON "__chart__per_user_following" ("group") `);
await queryRunner.query(`CREATE INDEX "IDX_57b5458d0d3d6d1e7f13d4e57f" ON "__chart__per_user_following" ("span", "date") `);
await queryRunner.query(`CREATE INDEX "IDX_b77d4dd9562c3a899d9a286fcd" ON "__chart__per_user_following" ("date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_4db3b84c7be0d3464714f3e0b1" ON "__chart__per_user_following" ("span", "date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_84234bd1abb873f07329681c83" ON "__chart__per_user_notes" ("date") `);
await queryRunner.query(`CREATE INDEX "IDX_8d2cbbc8114d90d19b44d626b6" ON "__chart__per_user_notes" ("span") `);
await queryRunner.query(`CREATE INDEX "IDX_55bf20f366979f2436de99206b" ON "__chart__per_user_notes" ("group") `);
await queryRunner.query(`CREATE INDEX "IDX_046feeb12e9ef5f783f409866a" ON "__chart__per_user_notes" ("span", "date") `);
await queryRunner.query(`CREATE INDEX "IDX_5048e9daccbbbc6d567bb142d3" ON "__chart__per_user_notes" ("date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_f68a5ab958f9f5fa17a32ac23b" ON "__chart__per_user_notes" ("span", "date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_f7bf4c62059764c2c2bb40fdab" ON "__chart__per_user_reaction" ("date") `);
await queryRunner.query(`CREATE INDEX "IDX_65633a106bce43fc7c5c30a5c7" ON "__chart__per_user_reaction" ("span") `);
await queryRunner.query(`CREATE INDEX "IDX_8cf3156fd7a6b15c43459c6e3b" ON "__chart__per_user_reaction" ("group") `);
await queryRunner.query(`CREATE INDEX "IDX_edeb73c09c3143a81bcb34d569" ON "__chart__per_user_reaction" ("span", "date") `);
await queryRunner.query(`CREATE INDEX "IDX_229a41ad465f9205f1f5703291" ON "__chart__per_user_reaction" ("date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_e316f01a6d24eb31db27f88262" ON "__chart__per_user_reaction" ("span", "date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_0c641990ecf47d2545df4edb75" ON "__chart__test_grouped" ("date") `);
await queryRunner.query(`CREATE INDEX "IDX_2be7ec6cebddc14dc11e206686" ON "__chart__test_grouped" ("span") `);
await queryRunner.query(`CREATE INDEX "IDX_234dff3c0b56a6150b95431ab9" ON "__chart__test_grouped" ("group") `);
await queryRunner.query(`CREATE INDEX "IDX_a5133470f4825902e170328ca5" ON "__chart__test_grouped" ("span", "date") `);
await queryRunner.query(`CREATE INDEX "IDX_b14489029e4b3aaf4bba5fb524" ON "__chart__test_grouped" ("date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_84e661abb7bd1e51b690d4b017" ON "__chart__test_grouped" ("span", "date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_437bab3c6061d90f6bb65fd2cc" ON "__chart__test_unique" ("date") `);
await queryRunner.query(`CREATE INDEX "IDX_5c73bf61da4f6e6f15bae88ed1" ON "__chart__test_unique" ("span") `);
await queryRunner.query(`CREATE INDEX "IDX_bbfa573a8181018851ed0b6357" ON "__chart__test_unique" ("group") `);
await queryRunner.query(`CREATE INDEX "IDX_d70c86baedc68326be11f9c0ce" ON "__chart__test_unique" ("span", "date") `);
await queryRunner.query(`CREATE INDEX "IDX_a0cd75442dd10d0643a17c4a49" ON "__chart__test_unique" ("date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_66e1e1ecd2f29e57778af35b59" ON "__chart__test_unique" ("span", "date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_b070a906db04b44c67c6c2144d" ON "__chart__test" ("date") `);
await queryRunner.query(`CREATE INDEX "IDX_92255988735563f0fe4aba1f05" ON "__chart__test" ("span") `);
await queryRunner.query(`CREATE INDEX "IDX_d41cce6aee1a50bfc062038f9b" ON "__chart__test" ("group") `);
await queryRunner.query(`CREATE INDEX "IDX_c5870993e25c3d5771f91f5003" ON "__chart__test" ("span", "date") `);
await queryRunner.query(`CREATE INDEX "IDX_a319e5dbf47e8a17497623beae" ON "__chart__test" ("date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_f170de677ea75ad4533de2723e" ON "__chart__test" ("span", "date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_845254b3eaf708ae8a6cac3026" ON "__chart__users" ("date") `);
await queryRunner.query(`CREATE INDEX "IDX_7c184198ecf66a8d3ecb253ab3" ON "__chart__users" ("span") `);
await queryRunner.query(`CREATE INDEX "IDX_ed9b95919c672a13008e9487ee" ON "__chart__users" ("group") `);
await queryRunner.query(`CREATE INDEX "IDX_f091abb24193d50c653c6b77fc" ON "__chart__users" ("span", "date") `);
await queryRunner.query(`CREATE INDEX "IDX_337e9599f278bd7537fe30876f" ON "__chart__users" ("date", "group") `);
await queryRunner.query(`CREATE INDEX "IDX_a770a57c70e668cc61590c9161" ON "__chart__users" ("span", "date", "group") `);
await queryRunner.query(
`CREATE INDEX "IDX_0ad37b7ef50f4ddc84363d7ccc" ON "__chart__active_users" ("date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_15e91a03aeeac9dbccdf43fc06" ON "__chart__active_users" ("span") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_00ed5f86db1f7efafb1978bf21" ON "__chart__active_users" ("group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_20f57cc8f142c131340ee16742" ON "__chart__active_users" ("span", "date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_9a3ed15a30ab7e3a37702e6e08" ON "__chart__active_users" ("date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_c26e2c1cbb6e911e0554b27416" ON "__chart__active_users" ("span", "date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_13565815f618a1ff53886c5b28" ON "__chart__drive" ("date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_3fa0d0f17ca72e3dc80999a032" ON "__chart__drive" ("span") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_7a170f67425e62a8fabb76c872" ON "__chart__drive" ("group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_6e1df243476e20cbf86572ecc0" ON "__chart__drive" ("span", "date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_3313d7288855ec105b5bbf6c21" ON "__chart__drive" ("date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_06690fc959f1c9fdaf21928222" ON "__chart__drive" ("span", "date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_36cb699c49580d4e6c2e6159f9" ON "__chart__federation" ("date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_e447064455928cf627590ef527" ON "__chart__federation" ("span") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_76e87c7bfc5d925fcbba405d84" ON "__chart__federation" ("group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_2d416e6af791a82e338c79d480" ON "__chart__federation" ("span", "date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_dd907becf76104e4b656659e6b" ON "__chart__federation" ("date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_e9cd07672b37d8966cf3709283" ON "__chart__federation" ("span", "date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_07747a1038c05f532a718fe1de" ON "__chart__hashtag" ("date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_fcc181fb8283009c61cc4083ef" ON "__chart__hashtag" ("span") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_99a7d2faaef84a6f728d714ad6" ON "__chart__hashtag" ("group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_49975586f50ed7b800fdd88fbd" ON "__chart__hashtag" ("span", "date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_25a97c02003338124b2b75fdbc" ON "__chart__hashtag" ("date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_6d6f156ceefc6bc5f273a0e370" ON "__chart__hashtag" ("span", "date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_6b8f34a1a64b06014b6fb66824" ON "__chart__instance" ("date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_c12f0af4a66cdd30c2287ce8aa" ON "__chart__instance" ("span") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_da8a46ba84ca1d8bb5a29bfb63" ON "__chart__instance" ("group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_d0a4f79af5a97b08f37b547197" ON "__chart__instance" ("span", "date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_39ee857ab2f23493037c6b6631" ON "__chart__instance" ("date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_f5448d9633cff74208d850aabe" ON "__chart__instance" ("span", "date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_a1efd3e0048a5f2793a47360dc" ON "__chart__network" ("date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_f8dd01baeded2ffa833e0a610a" ON "__chart__network" ("span") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_7b5da130992ec9df96712d4290" ON "__chart__network" ("group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_08fac0eb3b11f04c200c0b40dd" ON "__chart__network" ("span", "date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_0a905b992fecd2b5c3fb98759e" ON "__chart__network" ("date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_9ff6944f01acb756fdc92d7563" ON "__chart__network" ("span", "date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_42eb716a37d381cdf566192b2b" ON "__chart__notes" ("date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_e69096589f11e3baa98ddd64d0" ON "__chart__notes" ("span") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_7036f2957151588b813185c794" ON "__chart__notes" ("group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_0c9a159c5082cbeef3ca6706b5" ON "__chart__notes" ("span", "date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_f09d543e3acb16c5976bdb31fa" ON "__chart__notes" ("date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_924fc196c80ca24bae01dd37e4" ON "__chart__notes" ("span", "date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_5f86db6492274e07c1a3cdf286" ON "__chart__per_user_drive" ("date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_328f259961e60c4fa0bfcf55ca" ON "__chart__per_user_drive" ("span") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_e496ca8096d28f6b9b509264dc" ON "__chart__per_user_drive" ("group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_42ea9381f0fda8dfe0fa1c8b53" ON "__chart__per_user_drive" ("span", "date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_30bf67687f483ace115c5ca642" ON "__chart__per_user_drive" ("date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_f2aeafde2ae6fbad38e857631b" ON "__chart__per_user_drive" ("span", "date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_7af07790712aa3438ff6773f3b" ON "__chart__per_user_following" ("date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_f92dd6d03f8d994f29987f6214" ON "__chart__per_user_following" ("span") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_4b3593098b6edc9c5afe36b18b" ON "__chart__per_user_following" ("group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_57b5458d0d3d6d1e7f13d4e57f" ON "__chart__per_user_following" ("span", "date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_b77d4dd9562c3a899d9a286fcd" ON "__chart__per_user_following" ("date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_4db3b84c7be0d3464714f3e0b1" ON "__chart__per_user_following" ("span", "date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_84234bd1abb873f07329681c83" ON "__chart__per_user_notes" ("date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_8d2cbbc8114d90d19b44d626b6" ON "__chart__per_user_notes" ("span") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_55bf20f366979f2436de99206b" ON "__chart__per_user_notes" ("group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_046feeb12e9ef5f783f409866a" ON "__chart__per_user_notes" ("span", "date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_5048e9daccbbbc6d567bb142d3" ON "__chart__per_user_notes" ("date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_f68a5ab958f9f5fa17a32ac23b" ON "__chart__per_user_notes" ("span", "date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_f7bf4c62059764c2c2bb40fdab" ON "__chart__per_user_reaction" ("date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_65633a106bce43fc7c5c30a5c7" ON "__chart__per_user_reaction" ("span") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_8cf3156fd7a6b15c43459c6e3b" ON "__chart__per_user_reaction" ("group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_edeb73c09c3143a81bcb34d569" ON "__chart__per_user_reaction" ("span", "date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_229a41ad465f9205f1f5703291" ON "__chart__per_user_reaction" ("date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_e316f01a6d24eb31db27f88262" ON "__chart__per_user_reaction" ("span", "date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_0c641990ecf47d2545df4edb75" ON "__chart__test_grouped" ("date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_2be7ec6cebddc14dc11e206686" ON "__chart__test_grouped" ("span") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_234dff3c0b56a6150b95431ab9" ON "__chart__test_grouped" ("group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_a5133470f4825902e170328ca5" ON "__chart__test_grouped" ("span", "date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_b14489029e4b3aaf4bba5fb524" ON "__chart__test_grouped" ("date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_84e661abb7bd1e51b690d4b017" ON "__chart__test_grouped" ("span", "date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_437bab3c6061d90f6bb65fd2cc" ON "__chart__test_unique" ("date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_5c73bf61da4f6e6f15bae88ed1" ON "__chart__test_unique" ("span") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_bbfa573a8181018851ed0b6357" ON "__chart__test_unique" ("group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_d70c86baedc68326be11f9c0ce" ON "__chart__test_unique" ("span", "date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_a0cd75442dd10d0643a17c4a49" ON "__chart__test_unique" ("date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_66e1e1ecd2f29e57778af35b59" ON "__chart__test_unique" ("span", "date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_b070a906db04b44c67c6c2144d" ON "__chart__test" ("date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_92255988735563f0fe4aba1f05" ON "__chart__test" ("span") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_d41cce6aee1a50bfc062038f9b" ON "__chart__test" ("group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_c5870993e25c3d5771f91f5003" ON "__chart__test" ("span", "date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_a319e5dbf47e8a17497623beae" ON "__chart__test" ("date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_f170de677ea75ad4533de2723e" ON "__chart__test" ("span", "date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_845254b3eaf708ae8a6cac3026" ON "__chart__users" ("date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_7c184198ecf66a8d3ecb253ab3" ON "__chart__users" ("span") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_ed9b95919c672a13008e9487ee" ON "__chart__users" ("group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_f091abb24193d50c653c6b77fc" ON "__chart__users" ("span", "date") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_337e9599f278bd7537fe30876f" ON "__chart__users" ("date", "group") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_a770a57c70e668cc61590c9161" ON "__chart__users" ("span", "date", "group") `,
);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "IDX_a770a57c70e668cc61590c9161"`);

View file

@ -1,10 +1,12 @@
export class PasswordLessLogin1562422242907 {
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" ADD COLUMN "usePasswordLessLogin" boolean DEFAULT false NOT NULL`);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD COLUMN "usePasswordLessLogin" boolean DEFAULT false NOT NULL`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "usePasswordLessLogin"`);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "usePasswordLessLogin"`,
);
}
}

View file

@ -1,14 +1,24 @@
export class PinnedPage1562444565093 {
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" ADD "pinnedPageId" character varying(32)`);
await queryRunner.query(`ALTER TABLE "user_profile" ADD CONSTRAINT "UQ_6dc44f1ceb65b1e72bacef2ca27" UNIQUE ("pinnedPageId")`);
await queryRunner.query(`ALTER TABLE "user_profile" ADD CONSTRAINT "FK_6dc44f1ceb65b1e72bacef2ca27" FOREIGN KEY ("pinnedPageId") REFERENCES "page"("id") ON DELETE SET NULL ON UPDATE NO ACTION`);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "pinnedPageId" character varying(32)`,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD CONSTRAINT "UQ_6dc44f1ceb65b1e72bacef2ca27" UNIQUE ("pinnedPageId")`,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD CONSTRAINT "FK_6dc44f1ceb65b1e72bacef2ca27" FOREIGN KEY ("pinnedPageId") REFERENCES "page"("id") ON DELETE SET NULL ON UPDATE NO ACTION`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" DROP CONSTRAINT "FK_6dc44f1ceb65b1e72bacef2ca27"`);
await queryRunner.query(`ALTER TABLE "user_profile" DROP CONSTRAINT "UQ_6dc44f1ceb65b1e72bacef2ca27"`);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "pinnedPageId"`);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP CONSTRAINT "FK_6dc44f1ceb65b1e72bacef2ca27"`,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP CONSTRAINT "UQ_6dc44f1ceb65b1e72bacef2ca27"`,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "pinnedPageId"`,
);
}
}

View file

@ -1,10 +1,12 @@
export class PageTitleHideOption1562448332510 {
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "page" ADD "hideTitleWhenPinned" boolean NOT NULL DEFAULT false`);
await queryRunner.query(
`ALTER TABLE "page" ADD "hideTitleWhenPinned" boolean NOT NULL DEFAULT false`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "page" DROP COLUMN "hideTitleWhenPinned"`);
await queryRunner.query(
`ALTER TABLE "page" DROP COLUMN "hideTitleWhenPinned"`,
);
}
}

View file

@ -1,13 +1,19 @@
export class ModerationLog1562869971568 {
async up(queryRunner) {
await queryRunner.query(`CREATE TABLE "moderation_log" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "type" character varying(128) NOT NULL, "info" jsonb NOT NULL, CONSTRAINT "PK_d0adca6ecfd068db83e4526cc26" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_a08ad074601d204e0f69da9a95" ON "moderation_log" ("userId") `);
await queryRunner.query(`ALTER TABLE "moderation_log" ADD CONSTRAINT "FK_a08ad074601d204e0f69da9a954" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(
`CREATE TABLE "moderation_log" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "type" character varying(128) NOT NULL, "info" jsonb NOT NULL, CONSTRAINT "PK_d0adca6ecfd068db83e4526cc26" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`CREATE INDEX "IDX_a08ad074601d204e0f69da9a95" ON "moderation_log" ("userId") `,
);
await queryRunner.query(
`ALTER TABLE "moderation_log" ADD CONSTRAINT "FK_a08ad074601d204e0f69da9a954" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "moderation_log" DROP CONSTRAINT "FK_a08ad074601d204e0f69da9a954"`);
await queryRunner.query(
`ALTER TABLE "moderation_log" DROP CONSTRAINT "FK_a08ad074601d204e0f69da9a954"`,
);
await queryRunner.query(`DROP INDEX "IDX_a08ad074601d204e0f69da9a95"`);
await queryRunner.query(`DROP TABLE "moderation_log"`);
}

View file

@ -1,8 +1,8 @@
export class UsedUsername1563757595828 {
async up(queryRunner) {
await queryRunner.query(`CREATE TABLE "used_username" ("username" character varying(128) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, CONSTRAINT "PK_78fd79d2d24c6ac2f4cc9a31a5d" PRIMARY KEY ("username"))`);
await queryRunner.query(
`CREATE TABLE "used_username" ("username" character varying(128) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, CONSTRAINT "PK_78fd79d2d24c6ac2f4cc9a31a5d" PRIMARY KEY ("username"))`,
);
}
async down(queryRunner) {
await queryRunner.query(`DROP TABLE "used_username"`);

View file

@ -1,8 +1,8 @@
export class room1565634203341 {
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" ADD "room" jsonb NOT NULL DEFAULT '{}'`);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "room" jsonb NOT NULL DEFAULT '{}'`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "room"`);

View file

@ -1,10 +1,14 @@
export class CustomEmojiCategory1571220798684 {
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "emoji" ADD "category" character varying(128)`, undefined);
await queryRunner.query(
`ALTER TABLE "emoji" ADD "category" character varying(128)`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "emoji" DROP COLUMN "category"`, undefined);
await queryRunner.query(
`ALTER TABLE "emoji" DROP COLUMN "category"`,
undefined,
);
}
}

View file

@ -1,26 +1,78 @@
export class nodeinfo1572760203493 {
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "instance" DROP COLUMN "system"`, undefined);
await queryRunner.query(`ALTER TABLE "instance" ADD "softwareName" character varying(64) DEFAULT null`, undefined);
await queryRunner.query(`ALTER TABLE "instance" ADD "softwareVersion" character varying(64) DEFAULT null`, undefined);
await queryRunner.query(`ALTER TABLE "instance" ADD "openRegistrations" boolean DEFAULT null`, undefined);
await queryRunner.query(`ALTER TABLE "instance" ADD "name" character varying(256) DEFAULT null`, undefined);
await queryRunner.query(`ALTER TABLE "instance" ADD "description" character varying(4096) DEFAULT null`, undefined);
await queryRunner.query(`ALTER TABLE "instance" ADD "maintainerName" character varying(128) DEFAULT null`, undefined);
await queryRunner.query(`ALTER TABLE "instance" ADD "maintainerEmail" character varying(256) DEFAULT null`, undefined);
await queryRunner.query(`ALTER TABLE "instance" ADD "infoUpdatedAt" TIMESTAMP WITH TIME ZONE`, undefined);
await queryRunner.query(
`ALTER TABLE "instance" DROP COLUMN "system"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" ADD "softwareName" character varying(64) DEFAULT null`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" ADD "softwareVersion" character varying(64) DEFAULT null`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" ADD "openRegistrations" boolean DEFAULT null`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" ADD "name" character varying(256) DEFAULT null`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" ADD "description" character varying(4096) DEFAULT null`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" ADD "maintainerName" character varying(128) DEFAULT null`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" ADD "maintainerEmail" character varying(256) DEFAULT null`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" ADD "infoUpdatedAt" TIMESTAMP WITH TIME ZONE`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "instance" DROP COLUMN "infoUpdatedAt"`, undefined);
await queryRunner.query(`ALTER TABLE "instance" DROP COLUMN "maintainerEmail"`, undefined);
await queryRunner.query(`ALTER TABLE "instance" DROP COLUMN "maintainerName"`, undefined);
await queryRunner.query(`ALTER TABLE "instance" DROP COLUMN "description"`, undefined);
await queryRunner.query(`ALTER TABLE "instance" DROP COLUMN "name"`, undefined);
await queryRunner.query(`ALTER TABLE "instance" DROP COLUMN "openRegistrations"`, undefined);
await queryRunner.query(`ALTER TABLE "instance" DROP COLUMN "softwareVersion"`, undefined);
await queryRunner.query(`ALTER TABLE "instance" DROP COLUMN "softwareName"`, undefined);
await queryRunner.query(`ALTER TABLE "instance" ADD "system" character varying(64)`, undefined);
await queryRunner.query(
`ALTER TABLE "instance" DROP COLUMN "infoUpdatedAt"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" DROP COLUMN "maintainerEmail"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" DROP COLUMN "maintainerName"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" DROP COLUMN "description"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" DROP COLUMN "name"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" DROP COLUMN "openRegistrations"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" DROP COLUMN "softwareVersion"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" DROP COLUMN "softwareName"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" ADD "system" character varying(64)`,
undefined,
);
}
}

View file

@ -1,13 +1,17 @@
export class TalkFederationId1576269851876 {
constructor() {
this.name = 'TalkFederationId1576269851876';
this.name = "TalkFederationId1576269851876";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "messaging_message" ADD "uri" character varying(512)`, undefined);
await queryRunner.query(
`ALTER TABLE "messaging_message" ADD "uri" character varying(512)`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "messaging_message" DROP COLUMN "uri"`, undefined);
await queryRunner.query(
`ALTER TABLE "messaging_message" DROP COLUMN "uri"`,
undefined,
);
}
}

View file

@ -1,13 +1,17 @@
export class ProxyRemoteFiles1576869585998 {
constructor() {
this.name = 'ProxyRemoteFiles1576869585998';
this.name = "ProxyRemoteFiles1576869585998";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" ADD "proxyRemoteFiles" boolean NOT NULL DEFAULT false`, undefined);
await queryRunner.query(
`ALTER TABLE "meta" ADD "proxyRemoteFiles" boolean NOT NULL DEFAULT false`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "proxyRemoteFiles"`, undefined);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "proxyRemoteFiles"`,
undefined,
);
}
}

View file

@ -1,33 +1,91 @@
export class v121579267006611 {
constructor() {
this.name = 'v121579267006611';
this.name = "v121579267006611";
}
async up(queryRunner) {
await queryRunner.query(`CREATE TABLE "announcement" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "text" character varying(8192) NOT NULL, "title" character varying(256) NOT NULL, "imageUrl" character varying(1024), CONSTRAINT "PK_e0ef0550174fd1099a308fd18a0" PRIMARY KEY ("id"))`, undefined);
await queryRunner.query(`CREATE INDEX "IDX_118ec703e596086fc4515acb39" ON "announcement" ("createdAt") `, undefined);
await queryRunner.query(`CREATE TABLE "announcement_read" ("id" character varying(32) NOT NULL, "userId" character varying(32) NOT NULL, "announcementId" character varying(32) NOT NULL, CONSTRAINT "PK_4b90ad1f42681d97b2683890c5e" PRIMARY KEY ("id"))`, undefined);
await queryRunner.query(`CREATE INDEX "IDX_8288151386172b8109f7239ab2" ON "announcement_read" ("userId") `, undefined);
await queryRunner.query(`CREATE INDEX "IDX_603a7b1e7aa0533c6c88e9bfaf" ON "announcement_read" ("announcementId") `, undefined);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_924fa71815cfa3941d003702a0" ON "announcement_read" ("userId", "announcementId") `, undefined);
await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "isVerified"`, undefined);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "announcements"`, undefined);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "enableEmojiReaction"`, undefined);
await queryRunner.query(`ALTER TABLE "announcement_read" ADD CONSTRAINT "FK_8288151386172b8109f7239ab28" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(`ALTER TABLE "announcement_read" ADD CONSTRAINT "FK_603a7b1e7aa0533c6c88e9bfafe" FOREIGN KEY ("announcementId") REFERENCES "announcement"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(
`CREATE TABLE "announcement" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "text" character varying(8192) NOT NULL, "title" character varying(256) NOT NULL, "imageUrl" character varying(1024), CONSTRAINT "PK_e0ef0550174fd1099a308fd18a0" PRIMARY KEY ("id"))`,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_118ec703e596086fc4515acb39" ON "announcement" ("createdAt") `,
undefined,
);
await queryRunner.query(
`CREATE TABLE "announcement_read" ("id" character varying(32) NOT NULL, "userId" character varying(32) NOT NULL, "announcementId" character varying(32) NOT NULL, CONSTRAINT "PK_4b90ad1f42681d97b2683890c5e" PRIMARY KEY ("id"))`,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_8288151386172b8109f7239ab2" ON "announcement_read" ("userId") `,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_603a7b1e7aa0533c6c88e9bfaf" ON "announcement_read" ("announcementId") `,
undefined,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_924fa71815cfa3941d003702a0" ON "announcement_read" ("userId", "announcementId") `,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user" DROP COLUMN "isVerified"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "announcements"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "enableEmojiReaction"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "announcement_read" ADD CONSTRAINT "FK_8288151386172b8109f7239ab28" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "announcement_read" ADD CONSTRAINT "FK_603a7b1e7aa0533c6c88e9bfafe" FOREIGN KEY ("announcementId") REFERENCES "announcement"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "announcement_read" DROP CONSTRAINT "FK_603a7b1e7aa0533c6c88e9bfafe"`, undefined);
await queryRunner.query(`ALTER TABLE "announcement_read" DROP CONSTRAINT "FK_8288151386172b8109f7239ab28"`, undefined);
await queryRunner.query(`ALTER TABLE "meta" ADD "enableEmojiReaction" boolean NOT NULL DEFAULT true`, undefined);
await queryRunner.query(`ALTER TABLE "meta" ADD "announcements" jsonb NOT NULL DEFAULT '[]'`, undefined);
await queryRunner.query(`ALTER TABLE "user" ADD "isVerified" boolean NOT NULL DEFAULT false`, undefined);
await queryRunner.query(`DROP INDEX "IDX_924fa71815cfa3941d003702a0"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_603a7b1e7aa0533c6c88e9bfaf"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_8288151386172b8109f7239ab2"`, undefined);
await queryRunner.query(
`ALTER TABLE "announcement_read" DROP CONSTRAINT "FK_603a7b1e7aa0533c6c88e9bfafe"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "announcement_read" DROP CONSTRAINT "FK_8288151386172b8109f7239ab28"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "enableEmojiReaction" boolean NOT NULL DEFAULT true`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "announcements" jsonb NOT NULL DEFAULT '[]'`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user" ADD "isVerified" boolean NOT NULL DEFAULT false`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_924fa71815cfa3941d003702a0"`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_603a7b1e7aa0533c6c88e9bfaf"`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_8288151386172b8109f7239ab2"`,
undefined,
);
await queryRunner.query(`DROP TABLE "announcement_read"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_118ec703e596086fc4515acb39"`, undefined);
await queryRunner.query(
`DROP INDEX "IDX_118ec703e596086fc4515acb39"`,
undefined,
);
await queryRunner.query(`DROP TABLE "announcement"`, undefined);
}
}

View file

@ -1,13 +1,17 @@
export class v1221579270193251 {
constructor() {
this.name = 'v1221579270193251';
this.name = "v1221579270193251";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "announcement_read" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`, undefined);
await queryRunner.query(
`ALTER TABLE "announcement_read" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "announcement_read" DROP COLUMN "createdAt"`, undefined);
await queryRunner.query(
`ALTER TABLE "announcement_read" DROP COLUMN "createdAt"`,
undefined,
);
}
}

View file

@ -1,13 +1,17 @@
export class v1231579282808087 {
constructor() {
this.name = 'v1231579282808087';
this.name = "v1231579282808087";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "announcement" ADD "updatedAt" TIMESTAMP WITH TIME ZONE`, undefined);
await queryRunner.query(
`ALTER TABLE "announcement" ADD "updatedAt" TIMESTAMP WITH TIME ZONE`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "announcement" DROP COLUMN "updatedAt"`, undefined);
await queryRunner.query(
`ALTER TABLE "announcement" DROP COLUMN "updatedAt"`,
undefined,
);
}
}

View file

@ -1,15 +1,25 @@
export class v1241579544426412 {
constructor() {
this.name = 'v1241579544426412';
this.name = "v1241579544426412";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "notification" ADD "followRequestId" character varying(32)`, undefined);
await queryRunner.query(`ALTER TABLE "notification" ADD CONSTRAINT "FK_bd7fab507621e635b32cd31892c" FOREIGN KEY ("followRequestId") REFERENCES "follow_request"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(
`ALTER TABLE "notification" ADD "followRequestId" character varying(32)`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" ADD CONSTRAINT "FK_bd7fab507621e635b32cd31892c" FOREIGN KEY ("followRequestId") REFERENCES "follow_request"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "notification" DROP CONSTRAINT "FK_bd7fab507621e635b32cd31892c"`, undefined);
await queryRunner.query(`ALTER TABLE "notification" DROP COLUMN "followRequestId"`, undefined);
await queryRunner.query(
`ALTER TABLE "notification" DROP CONSTRAINT "FK_bd7fab507621e635b32cd31892c"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" DROP COLUMN "followRequestId"`,
undefined,
);
}
}

View file

@ -1,53 +1,156 @@
export class v1251579977526288 {
constructor() {
this.name = 'v1251579977526288';
this.name = "v1251579977526288";
}
async up(queryRunner) {
await queryRunner.query(`CREATE TABLE "clip" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "name" character varying(128) NOT NULL, "isPublic" boolean NOT NULL DEFAULT false, CONSTRAINT "PK_f0685dac8d4dd056d7255670b75" PRIMARY KEY ("id"))`, undefined);
await queryRunner.query(`CREATE INDEX "IDX_2b5ec6c574d6802c94c80313fb" ON "clip" ("userId") `, undefined);
await queryRunner.query(`CREATE TABLE "clip_note" ("id" character varying(32) NOT NULL, "noteId" character varying(32) NOT NULL, "clipId" character varying(32) NOT NULL, CONSTRAINT "PK_e94cda2f40a99b57e032a1a738b" PRIMARY KEY ("id"))`, undefined);
await queryRunner.query(`CREATE INDEX "IDX_a012eaf5c87c65da1deb5fdbfa" ON "clip_note" ("noteId") `, undefined);
await queryRunner.query(`CREATE INDEX "IDX_ebe99317bbbe9968a0c6f579ad" ON "clip_note" ("clipId") `, undefined);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_6fc0ec357d55a18646262fdfff" ON "clip_note" ("noteId", "clipId") `, undefined);
await queryRunner.query(`CREATE TYPE "antenna_src_enum" AS ENUM('home', 'all', 'list')`, undefined);
await queryRunner.query(`CREATE TABLE "antenna" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "name" character varying(128) NOT NULL, "src" "antenna_src_enum" NOT NULL, "userListId" character varying(32), "keywords" jsonb NOT NULL DEFAULT '[]', "withFile" boolean NOT NULL, "expression" character varying(2048), "notify" boolean NOT NULL, "hasNewNote" boolean NOT NULL DEFAULT false, CONSTRAINT "PK_c170b99775e1dccca947c9f2d5f" PRIMARY KEY ("id"))`, undefined);
await queryRunner.query(`CREATE INDEX "IDX_6446c571a0e8d0f05f01c78909" ON "antenna" ("userId") `, undefined);
await queryRunner.query(`CREATE TABLE "antenna_note" ("id" character varying(32) NOT NULL, "noteId" character varying(32) NOT NULL, "antennaId" character varying(32) NOT NULL, CONSTRAINT "PK_fb28d94d0989a3872df19fd6ef8" PRIMARY KEY ("id"))`, undefined);
await queryRunner.query(`CREATE INDEX "IDX_bd0397be22147e17210940e125" ON "antenna_note" ("noteId") `, undefined);
await queryRunner.query(`CREATE INDEX "IDX_0d775946662d2575dfd2068a5f" ON "antenna_note" ("antennaId") `, undefined);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_335a0bf3f904406f9ef3dd51c2" ON "antenna_note" ("noteId", "antennaId") `, undefined);
await queryRunner.query(
`CREATE TABLE "clip" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "name" character varying(128) NOT NULL, "isPublic" boolean NOT NULL DEFAULT false, CONSTRAINT "PK_f0685dac8d4dd056d7255670b75" PRIMARY KEY ("id"))`,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_2b5ec6c574d6802c94c80313fb" ON "clip" ("userId") `,
undefined,
);
await queryRunner.query(
`CREATE TABLE "clip_note" ("id" character varying(32) NOT NULL, "noteId" character varying(32) NOT NULL, "clipId" character varying(32) NOT NULL, CONSTRAINT "PK_e94cda2f40a99b57e032a1a738b" PRIMARY KEY ("id"))`,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_a012eaf5c87c65da1deb5fdbfa" ON "clip_note" ("noteId") `,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_ebe99317bbbe9968a0c6f579ad" ON "clip_note" ("clipId") `,
undefined,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_6fc0ec357d55a18646262fdfff" ON "clip_note" ("noteId", "clipId") `,
undefined,
);
await queryRunner.query(
`CREATE TYPE "antenna_src_enum" AS ENUM('home', 'all', 'list')`,
undefined,
);
await queryRunner.query(
`CREATE TABLE "antenna" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "name" character varying(128) NOT NULL, "src" "antenna_src_enum" NOT NULL, "userListId" character varying(32), "keywords" jsonb NOT NULL DEFAULT '[]', "withFile" boolean NOT NULL, "expression" character varying(2048), "notify" boolean NOT NULL, "hasNewNote" boolean NOT NULL DEFAULT false, CONSTRAINT "PK_c170b99775e1dccca947c9f2d5f" PRIMARY KEY ("id"))`,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_6446c571a0e8d0f05f01c78909" ON "antenna" ("userId") `,
undefined,
);
await queryRunner.query(
`CREATE TABLE "antenna_note" ("id" character varying(32) NOT NULL, "noteId" character varying(32) NOT NULL, "antennaId" character varying(32) NOT NULL, CONSTRAINT "PK_fb28d94d0989a3872df19fd6ef8" PRIMARY KEY ("id"))`,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_bd0397be22147e17210940e125" ON "antenna_note" ("noteId") `,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_0d775946662d2575dfd2068a5f" ON "antenna_note" ("antennaId") `,
undefined,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_335a0bf3f904406f9ef3dd51c2" ON "antenna_note" ("noteId", "antennaId") `,
undefined,
);
await queryRunner.query(`ALTER TABLE "note" DROP COLUMN "geo"`, undefined);
await queryRunner.query(`ALTER TABLE "clip" ADD CONSTRAINT "FK_2b5ec6c574d6802c94c80313fb2" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(`ALTER TABLE "clip_note" ADD CONSTRAINT "FK_a012eaf5c87c65da1deb5fdbfa3" FOREIGN KEY ("noteId") REFERENCES "note"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(`ALTER TABLE "clip_note" ADD CONSTRAINT "FK_ebe99317bbbe9968a0c6f579adf" FOREIGN KEY ("clipId") REFERENCES "clip"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" ADD CONSTRAINT "FK_6446c571a0e8d0f05f01c789096" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" ADD CONSTRAINT "FK_709d7d32053d0dd7620f678eeb9" FOREIGN KEY ("userListId") REFERENCES "user_list"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(`ALTER TABLE "antenna_note" ADD CONSTRAINT "FK_bd0397be22147e17210940e125b" FOREIGN KEY ("noteId") REFERENCES "note"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(`ALTER TABLE "antenna_note" ADD CONSTRAINT "FK_0d775946662d2575dfd2068a5f5" FOREIGN KEY ("antennaId") REFERENCES "antenna"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(
`ALTER TABLE "clip" ADD CONSTRAINT "FK_2b5ec6c574d6802c94c80313fb2" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "clip_note" ADD CONSTRAINT "FK_a012eaf5c87c65da1deb5fdbfa3" FOREIGN KEY ("noteId") REFERENCES "note"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "clip_note" ADD CONSTRAINT "FK_ebe99317bbbe9968a0c6f579adf" FOREIGN KEY ("clipId") REFERENCES "clip"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" ADD CONSTRAINT "FK_6446c571a0e8d0f05f01c789096" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" ADD CONSTRAINT "FK_709d7d32053d0dd7620f678eeb9" FOREIGN KEY ("userListId") REFERENCES "user_list"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna_note" ADD CONSTRAINT "FK_bd0397be22147e17210940e125b" FOREIGN KEY ("noteId") REFERENCES "note"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna_note" ADD CONSTRAINT "FK_0d775946662d2575dfd2068a5f5" FOREIGN KEY ("antennaId") REFERENCES "antenna"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "antenna_note" DROP CONSTRAINT "FK_0d775946662d2575dfd2068a5f5"`, undefined);
await queryRunner.query(`ALTER TABLE "antenna_note" DROP CONSTRAINT "FK_bd0397be22147e17210940e125b"`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" DROP CONSTRAINT "FK_709d7d32053d0dd7620f678eeb9"`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" DROP CONSTRAINT "FK_6446c571a0e8d0f05f01c789096"`, undefined);
await queryRunner.query(`ALTER TABLE "clip_note" DROP CONSTRAINT "FK_ebe99317bbbe9968a0c6f579adf"`, undefined);
await queryRunner.query(`ALTER TABLE "clip_note" DROP CONSTRAINT "FK_a012eaf5c87c65da1deb5fdbfa3"`, undefined);
await queryRunner.query(`ALTER TABLE "clip" DROP CONSTRAINT "FK_2b5ec6c574d6802c94c80313fb2"`, undefined);
await queryRunner.query(
`ALTER TABLE "antenna_note" DROP CONSTRAINT "FK_0d775946662d2575dfd2068a5f5"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna_note" DROP CONSTRAINT "FK_bd0397be22147e17210940e125b"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" DROP CONSTRAINT "FK_709d7d32053d0dd7620f678eeb9"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" DROP CONSTRAINT "FK_6446c571a0e8d0f05f01c789096"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "clip_note" DROP CONSTRAINT "FK_ebe99317bbbe9968a0c6f579adf"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "clip_note" DROP CONSTRAINT "FK_a012eaf5c87c65da1deb5fdbfa3"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "clip" DROP CONSTRAINT "FK_2b5ec6c574d6802c94c80313fb2"`,
undefined,
);
await queryRunner.query(`ALTER TABLE "note" ADD "geo" jsonb`, undefined);
await queryRunner.query(`DROP INDEX "IDX_335a0bf3f904406f9ef3dd51c2"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_0d775946662d2575dfd2068a5f"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_bd0397be22147e17210940e125"`, undefined);
await queryRunner.query(
`DROP INDEX "IDX_335a0bf3f904406f9ef3dd51c2"`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_0d775946662d2575dfd2068a5f"`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_bd0397be22147e17210940e125"`,
undefined,
);
await queryRunner.query(`DROP TABLE "antenna_note"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_6446c571a0e8d0f05f01c78909"`, undefined);
await queryRunner.query(
`DROP INDEX "IDX_6446c571a0e8d0f05f01c78909"`,
undefined,
);
await queryRunner.query(`DROP TABLE "antenna"`, undefined);
await queryRunner.query(`DROP TYPE "antenna_src_enum"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_6fc0ec357d55a18646262fdfff"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_ebe99317bbbe9968a0c6f579ad"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_a012eaf5c87c65da1deb5fdbfa"`, undefined);
await queryRunner.query(
`DROP INDEX "IDX_6fc0ec357d55a18646262fdfff"`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_ebe99317bbbe9968a0c6f579ad"`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_a012eaf5c87c65da1deb5fdbfa"`,
undefined,
);
await queryRunner.query(`DROP TABLE "clip_note"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_2b5ec6c574d6802c94c80313fb"`, undefined);
await queryRunner.query(
`DROP INDEX "IDX_2b5ec6c574d6802c94c80313fb"`,
undefined,
);
await queryRunner.query(`DROP TABLE "clip"`, undefined);
}
}

View file

@ -1,17 +1,33 @@
export class v1261579993013959 {
constructor() {
this.name = 'v1261579993013959';
this.name = "v1261579993013959";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "antenna" DROP COLUMN "hasNewNote"`, undefined);
await queryRunner.query(`ALTER TABLE "antenna_note" ADD "read" boolean NOT NULL DEFAULT false`, undefined);
await queryRunner.query(`CREATE INDEX "IDX_9937ea48d7ae97ffb4f3f063a4" ON "antenna_note" ("read") `, undefined);
await queryRunner.query(
`ALTER TABLE "antenna" DROP COLUMN "hasNewNote"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna_note" ADD "read" boolean NOT NULL DEFAULT false`,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_9937ea48d7ae97ffb4f3f063a4" ON "antenna_note" ("read") `,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "IDX_9937ea48d7ae97ffb4f3f063a4"`, undefined);
await queryRunner.query(`ALTER TABLE "antenna_note" DROP COLUMN "read"`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" ADD "hasNewNote" boolean NOT NULL DEFAULT false`, undefined);
await queryRunner.query(
`DROP INDEX "IDX_9937ea48d7ae97ffb4f3f063a4"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna_note" DROP COLUMN "read"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" ADD "hasNewNote" boolean NOT NULL DEFAULT false`,
undefined,
);
}
}

View file

@ -1,23 +1,51 @@
export class v1271580069531114 {
constructor() {
this.name = 'v1271580069531114';
this.name = "v1271580069531114";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "antenna" ADD "users" character varying(1024) array NOT NULL DEFAULT '{}'::varchar[]`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" ADD "caseSensitive" boolean NOT NULL DEFAULT false`, undefined);
await queryRunner.query(`ALTER TYPE "public"."antenna_src_enum" RENAME TO "antenna_src_enum_old"`, undefined);
await queryRunner.query(`CREATE TYPE "antenna_src_enum" AS ENUM('home', 'all', 'users', 'list')`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" ALTER COLUMN "src" TYPE "antenna_src_enum" USING "src"::"text"::"antenna_src_enum"`, undefined);
await queryRunner.query(
`ALTER TABLE "antenna" ADD "users" character varying(1024) array NOT NULL DEFAULT '{}'::varchar[]`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" ADD "caseSensitive" boolean NOT NULL DEFAULT false`,
undefined,
);
await queryRunner.query(
`ALTER TYPE "public"."antenna_src_enum" RENAME TO "antenna_src_enum_old"`,
undefined,
);
await queryRunner.query(
`CREATE TYPE "antenna_src_enum" AS ENUM('home', 'all', 'users', 'list')`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" ALTER COLUMN "src" TYPE "antenna_src_enum" USING "src"::"text"::"antenna_src_enum"`,
undefined,
);
await queryRunner.query(`DROP TYPE "antenna_src_enum_old"`, undefined);
}
async down(queryRunner) {
await queryRunner.query(`CREATE TYPE "antenna_src_enum_old" AS ENUM('home', 'all', 'list')`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" ALTER COLUMN "src" TYPE "antenna_src_enum_old" USING "src"::"text"::"antenna_src_enum_old"`, undefined);
await queryRunner.query(
`CREATE TYPE "antenna_src_enum_old" AS ENUM('home', 'all', 'list')`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" ALTER COLUMN "src" TYPE "antenna_src_enum_old" USING "src"::"text"::"antenna_src_enum_old"`,
undefined,
);
await queryRunner.query(`DROP TYPE "antenna_src_enum"`, undefined);
await queryRunner.query(`ALTER TYPE "antenna_src_enum_old" RENAME TO "antenna_src_enum"`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" DROP COLUMN "caseSensitive"`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" DROP COLUMN "users"`, undefined);
await queryRunner.query(
`ALTER TYPE "antenna_src_enum_old" RENAME TO "antenna_src_enum"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" DROP COLUMN "caseSensitive"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" DROP COLUMN "users"`,
undefined,
);
}
}

View file

@ -1,15 +1,25 @@
export class v1281580148575182 {
constructor() {
this.name = 'v1281580148575182';
this.name = "v1281580148575182";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "note" DROP CONSTRAINT "FK_ec5c201576192ba8904c345c5cc"`, undefined);
await queryRunner.query(`ALTER TABLE "note" DROP COLUMN "appId"`, undefined);
await queryRunner.query(
`ALTER TABLE "note" DROP CONSTRAINT "FK_ec5c201576192ba8904c345c5cc"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "note" DROP COLUMN "appId"`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "note" ADD "appId" character varying(32)`, undefined);
await queryRunner.query(`ALTER TABLE "note" ADD CONSTRAINT "FK_ec5c201576192ba8904c345c5cc" FOREIGN KEY ("appId") REFERENCES "app"("id") ON DELETE SET NULL ON UPDATE NO ACTION`, undefined);
await queryRunner.query(
`ALTER TABLE "note" ADD "appId" character varying(32)`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "note" ADD CONSTRAINT "FK_ec5c201576192ba8904c345c5cc" FOREIGN KEY ("appId") REFERENCES "app"("id") ON DELETE SET NULL ON UPDATE NO ACTION`,
undefined,
);
}
}

View file

@ -1,13 +1,17 @@
export class v1291580154400017 {
constructor() {
this.name = 'v1291580154400017';
this.name = "v1291580154400017";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "antenna" ADD "withReplies" boolean NOT NULL DEFAULT false`, undefined);
await queryRunner.query(
`ALTER TABLE "antenna" ADD "withReplies" boolean NOT NULL DEFAULT false`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "antenna" DROP COLUMN "withReplies"`, undefined);
await queryRunner.query(
`ALTER TABLE "antenna" DROP COLUMN "withReplies"`,
undefined,
);
}
}

View file

@ -1,18 +1,31 @@
export class v12101580276619901 {
constructor() {
this.name = 'v12101580276619901';
this.name = "v12101580276619901";
}
async up(queryRunner) {
await queryRunner.query(`TRUNCATE TABLE "notification"`, undefined);
await queryRunner.query(`ALTER TABLE "notification" DROP COLUMN "type"`, undefined);
await queryRunner.query(`CREATE TYPE "notification_type_enum" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted')`, undefined);
await queryRunner.query(`ALTER TABLE "notification" ADD "type" "notification_type_enum" NOT NULL`, undefined);
await queryRunner.query(
`ALTER TABLE "notification" DROP COLUMN "type"`,
undefined,
);
await queryRunner.query(
`CREATE TYPE "notification_type_enum" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted')`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" ADD "type" "notification_type_enum" NOT NULL`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "notification" DROP COLUMN "type"`, undefined);
await queryRunner.query(
`ALTER TABLE "notification" DROP COLUMN "type"`,
undefined,
);
await queryRunner.query(`DROP TYPE "notification_type_enum"`, undefined);
await queryRunner.query(`ALTER TABLE "notification" ADD "type" character varying(32) NOT NULL`, undefined);
await queryRunner.query(
`ALTER TABLE "notification" ADD "type" character varying(32) NOT NULL`,
undefined,
);
}
}

View file

@ -1,17 +1,33 @@
export class v12111580331224276 {
constructor() {
this.name = 'v12111580331224276';
this.name = "v12111580331224276";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "instance" DROP COLUMN "isMarkedAsClosed"`, undefined);
await queryRunner.query(`ALTER TABLE "instance" ADD "isSuspended" boolean NOT NULL DEFAULT false`, undefined);
await queryRunner.query(`CREATE INDEX "IDX_34500da2e38ac393f7bb6b299c" ON "instance" ("isSuspended") `, undefined);
await queryRunner.query(
`ALTER TABLE "instance" DROP COLUMN "isMarkedAsClosed"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" ADD "isSuspended" boolean NOT NULL DEFAULT false`,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_34500da2e38ac393f7bb6b299c" ON "instance" ("isSuspended") `,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "IDX_34500da2e38ac393f7bb6b299c"`, undefined);
await queryRunner.query(`ALTER TABLE "instance" DROP COLUMN "isSuspended"`, undefined);
await queryRunner.query(`ALTER TABLE "instance" ADD "isMarkedAsClosed" boolean NOT NULL DEFAULT false`, undefined);
await queryRunner.query(
`DROP INDEX "IDX_34500da2e38ac393f7bb6b299c"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" DROP COLUMN "isSuspended"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "instance" ADD "isMarkedAsClosed" boolean NOT NULL DEFAULT false`,
undefined,
);
}
}

View file

@ -1,45 +1,145 @@
export class v12121580508795118 {
constructor() {
this.name = 'v12121580508795118';
this.name = "v12121580508795118";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "twitter"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "twitterAccessToken"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "twitterAccessTokenSecret"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "twitterUserId"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "twitterScreenName"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "github"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "githubAccessToken"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "githubId"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "githubLogin"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "discord"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "discordAccessToken"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "discordRefreshToken"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "discordExpiresDate"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "discordId"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "discordUsername"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "discordDiscriminator"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "integrations" jsonb NOT NULL DEFAULT '{}'`, undefined);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "twitter"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "twitterAccessToken"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "twitterAccessTokenSecret"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "twitterUserId"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "twitterScreenName"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "github"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "githubAccessToken"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "githubId"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "githubLogin"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "discord"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "discordAccessToken"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "discordRefreshToken"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "discordExpiresDate"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "discordId"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "discordUsername"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "discordDiscriminator"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "integrations" jsonb NOT NULL DEFAULT '{}'`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "integrations"`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "discordDiscriminator" character varying(64) DEFAULT NULL`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "discordUsername" character varying(64) DEFAULT NULL`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "discordId" character varying(64) DEFAULT NULL`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "discordExpiresDate" character varying(64)`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "discordRefreshToken" character varying(64) DEFAULT NULL`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "discordAccessToken" character varying(64) DEFAULT NULL`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "discord" boolean NOT NULL DEFAULT false`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "githubLogin" character varying(64) DEFAULT NULL`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "githubId" character varying(64)`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "githubAccessToken" character varying(64) DEFAULT NULL`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "github" boolean NOT NULL DEFAULT false`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "twitterScreenName" character varying(64) DEFAULT NULL`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "twitterUserId" character varying(64) DEFAULT NULL`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "twitterAccessTokenSecret" character varying(64) DEFAULT NULL`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "twitterAccessToken" character varying(64) DEFAULT NULL`, undefined);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "twitter" boolean NOT NULL DEFAULT false`, undefined);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "integrations"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "discordDiscriminator" character varying(64) DEFAULT NULL`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "discordUsername" character varying(64) DEFAULT NULL`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "discordId" character varying(64) DEFAULT NULL`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "discordExpiresDate" character varying(64)`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "discordRefreshToken" character varying(64) DEFAULT NULL`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "discordAccessToken" character varying(64) DEFAULT NULL`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "discord" boolean NOT NULL DEFAULT false`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "githubLogin" character varying(64) DEFAULT NULL`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "githubId" character varying(64)`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "githubAccessToken" character varying(64) DEFAULT NULL`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "github" boolean NOT NULL DEFAULT false`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "twitterScreenName" character varying(64) DEFAULT NULL`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "twitterUserId" character varying(64) DEFAULT NULL`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "twitterAccessTokenSecret" character varying(64) DEFAULT NULL`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "twitterAccessToken" character varying(64) DEFAULT NULL`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "twitter" boolean NOT NULL DEFAULT false`,
undefined,
);
}
}

View file

@ -1,11 +1,12 @@
export class v12131580543501339 {
constructor() {
this.name = 'v12131580543501339';
this.name = "v12131580543501339";
}
async up(queryRunner) {
await queryRunner.query(`CREATE INDEX "IDX_NOTE_TAGS" ON "note" USING gin ("tags")`, undefined);
await queryRunner.query(
`CREATE INDEX "IDX_NOTE_TAGS" ON "note" USING gin ("tags")`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "IDX_NOTE_TAGS"`, undefined);

View file

@ -1,19 +1,41 @@
export class v12141580864313253 {
constructor() {
this.name = 'v12141580864313253';
this.name = "v12141580864313253";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" RENAME COLUMN "proxyAccount" TO "proxyAccountId"`, undefined);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "proxyAccountId"`, undefined);
await queryRunner.query(`ALTER TABLE "meta" ADD "proxyAccountId" character varying(32)`, undefined);
await queryRunner.query(`ALTER TABLE "meta" ADD CONSTRAINT "FK_ab1bc0c1e209daa77b8e8d212ad" FOREIGN KEY ("proxyAccountId") REFERENCES "user"("id") ON DELETE SET NULL ON UPDATE NO ACTION`, undefined);
await queryRunner.query(
`ALTER TABLE "meta" RENAME COLUMN "proxyAccount" TO "proxyAccountId"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "proxyAccountId"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "proxyAccountId" character varying(32)`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD CONSTRAINT "FK_ab1bc0c1e209daa77b8e8d212ad" FOREIGN KEY ("proxyAccountId") REFERENCES "user"("id") ON DELETE SET NULL ON UPDATE NO ACTION`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP CONSTRAINT "FK_ab1bc0c1e209daa77b8e8d212ad"`, undefined);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "proxyAccountId"`, undefined);
await queryRunner.query(`ALTER TABLE "meta" ADD "proxyAccountId" character varying(128)`, undefined);
await queryRunner.query(`ALTER TABLE "meta" RENAME COLUMN "proxyAccountId" TO "proxyAccount"`, undefined);
await queryRunner.query(
`ALTER TABLE "meta" DROP CONSTRAINT "FK_ab1bc0c1e209daa77b8e8d212ad"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "proxyAccountId"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "proxyAccountId" character varying(128)`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "meta" RENAME COLUMN "proxyAccountId" TO "proxyAccount"`,
undefined,
);
}
}

View file

@ -1,37 +1,107 @@
export class userGroupInvitation1581526429287 {
constructor() {
this.name = 'userGroupInvitation1581526429287';
this.name = "userGroupInvitation1581526429287";
}
async up(queryRunner) {
await queryRunner.query(`CREATE TABLE "user_group_invitation" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "userGroupId" character varying(32) NOT NULL, CONSTRAINT "PK_160c63ec02bf23f6a5c5e8140d6" PRIMARY KEY ("id"))`, undefined);
await queryRunner.query(`CREATE INDEX "IDX_bfbc6305547539369fe73eb144" ON "user_group_invitation" ("userId") `, undefined);
await queryRunner.query(`CREATE INDEX "IDX_5cc8c468090e129857e9fecce5" ON "user_group_invitation" ("userGroupId") `, undefined);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_e9793f65f504e5a31fbaedbf2f" ON "user_group_invitation" ("userId", "userGroupId") `, undefined);
await queryRunner.query(`ALTER TABLE "notification" ADD "userGroupInvitationId" character varying(32)`, undefined);
await queryRunner.query(`ALTER TYPE "public"."notification_type_enum" RENAME TO "notification_type_enum_old"`, undefined);
await queryRunner.query(`CREATE TYPE "notification_type_enum" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited')`, undefined);
await queryRunner.query(`ALTER TABLE "notification" ALTER COLUMN "type" TYPE "notification_type_enum" USING "type"::"text"::"notification_type_enum"`, undefined);
await queryRunner.query(`DROP TYPE "notification_type_enum_old"`, undefined);
await queryRunner.query(`COMMENT ON COLUMN "notification"."type" IS 'The type of the Notification.'`, undefined);
await queryRunner.query(`ALTER TABLE "user_group_invitation" ADD CONSTRAINT "FK_bfbc6305547539369fe73eb144a" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(`ALTER TABLE "user_group_invitation" ADD CONSTRAINT "FK_5cc8c468090e129857e9fecce5a" FOREIGN KEY ("userGroupId") REFERENCES "user_group"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(`ALTER TABLE "notification" ADD CONSTRAINT "FK_8fe87814e978053a53b1beb7e98" FOREIGN KEY ("userGroupInvitationId") REFERENCES "user_group_invitation"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(
`CREATE TABLE "user_group_invitation" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "userGroupId" character varying(32) NOT NULL, CONSTRAINT "PK_160c63ec02bf23f6a5c5e8140d6" PRIMARY KEY ("id"))`,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_bfbc6305547539369fe73eb144" ON "user_group_invitation" ("userId") `,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_5cc8c468090e129857e9fecce5" ON "user_group_invitation" ("userGroupId") `,
undefined,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_e9793f65f504e5a31fbaedbf2f" ON "user_group_invitation" ("userId", "userGroupId") `,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" ADD "userGroupInvitationId" character varying(32)`,
undefined,
);
await queryRunner.query(
`ALTER TYPE "public"."notification_type_enum" RENAME TO "notification_type_enum_old"`,
undefined,
);
await queryRunner.query(
`CREATE TYPE "notification_type_enum" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited')`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" ALTER COLUMN "type" TYPE "notification_type_enum" USING "type"::"text"::"notification_type_enum"`,
undefined,
);
await queryRunner.query(
`DROP TYPE "notification_type_enum_old"`,
undefined,
);
await queryRunner.query(
`COMMENT ON COLUMN "notification"."type" IS 'The type of the Notification.'`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_group_invitation" ADD CONSTRAINT "FK_bfbc6305547539369fe73eb144a" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_group_invitation" ADD CONSTRAINT "FK_5cc8c468090e129857e9fecce5a" FOREIGN KEY ("userGroupId") REFERENCES "user_group"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" ADD CONSTRAINT "FK_8fe87814e978053a53b1beb7e98" FOREIGN KEY ("userGroupInvitationId") REFERENCES "user_group_invitation"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "notification" DROP CONSTRAINT "FK_8fe87814e978053a53b1beb7e98"`, undefined);
await queryRunner.query(`ALTER TABLE "user_group_invitation" DROP CONSTRAINT "FK_5cc8c468090e129857e9fecce5a"`, undefined);
await queryRunner.query(`ALTER TABLE "user_group_invitation" DROP CONSTRAINT "FK_bfbc6305547539369fe73eb144a"`, undefined);
await queryRunner.query(`COMMENT ON COLUMN "notification"."type" IS ''`, undefined);
await queryRunner.query(`CREATE TYPE "notification_type_enum_old" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted')`, undefined);
await queryRunner.query(`ALTER TABLE "notification" ALTER COLUMN "type" TYPE "notification_type_enum_old" USING "type"::"text"::"notification_type_enum_old"`, undefined);
await queryRunner.query(
`ALTER TABLE "notification" DROP CONSTRAINT "FK_8fe87814e978053a53b1beb7e98"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_group_invitation" DROP CONSTRAINT "FK_5cc8c468090e129857e9fecce5a"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "user_group_invitation" DROP CONSTRAINT "FK_bfbc6305547539369fe73eb144a"`,
undefined,
);
await queryRunner.query(
`COMMENT ON COLUMN "notification"."type" IS ''`,
undefined,
);
await queryRunner.query(
`CREATE TYPE "notification_type_enum_old" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted')`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" ALTER COLUMN "type" TYPE "notification_type_enum_old" USING "type"::"text"::"notification_type_enum_old"`,
undefined,
);
await queryRunner.query(`DROP TYPE "notification_type_enum"`, undefined);
await queryRunner.query(`ALTER TYPE "notification_type_enum_old" RENAME TO "notification_type_enum"`, undefined);
await queryRunner.query(`ALTER TABLE "notification" DROP COLUMN "userGroupInvitationId"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_e9793f65f504e5a31fbaedbf2f"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_5cc8c468090e129857e9fecce5"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_bfbc6305547539369fe73eb144"`, undefined);
await queryRunner.query(
`ALTER TYPE "notification_type_enum_old" RENAME TO "notification_type_enum"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" DROP COLUMN "userGroupInvitationId"`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_e9793f65f504e5a31fbaedbf2f"`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_5cc8c468090e129857e9fecce5"`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_bfbc6305547539369fe73eb144"`,
undefined,
);
await queryRunner.query(`DROP TABLE "user_group_invitation"`, undefined);
}
}

View file

@ -1,27 +1,67 @@
export class userGroupAntenna1581695816408 {
constructor() {
this.name = 'userGroupAntenna1581695816408';
this.name = "userGroupAntenna1581695816408";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "antenna" ADD "userGroupJoiningId" character varying(32)`, undefined);
await queryRunner.query(`ALTER TYPE "public"."antenna_src_enum" RENAME TO "antenna_src_enum_old"`, undefined);
await queryRunner.query(`CREATE TYPE "antenna_src_enum" AS ENUM('home', 'all', 'users', 'list', 'group')`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" ALTER COLUMN "src" TYPE "antenna_src_enum" USING "src"::"text"::"antenna_src_enum"`, undefined);
await queryRunner.query(
`ALTER TABLE "antenna" ADD "userGroupJoiningId" character varying(32)`,
undefined,
);
await queryRunner.query(
`ALTER TYPE "public"."antenna_src_enum" RENAME TO "antenna_src_enum_old"`,
undefined,
);
await queryRunner.query(
`CREATE TYPE "antenna_src_enum" AS ENUM('home', 'all', 'users', 'list', 'group')`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" ALTER COLUMN "src" TYPE "antenna_src_enum" USING "src"::"text"::"antenna_src_enum"`,
undefined,
);
await queryRunner.query(`DROP TYPE "antenna_src_enum_old"`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" DROP COLUMN "users"`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" ADD "users" character varying(1024) array NOT NULL DEFAULT '{}'::varchar[]`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" ADD CONSTRAINT "FK_ccbf5a8c0be4511133dcc50ddeb" FOREIGN KEY ("userGroupJoiningId") REFERENCES "user_group_joining"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(
`ALTER TABLE "antenna" DROP COLUMN "users"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" ADD "users" character varying(1024) array NOT NULL DEFAULT '{}'::varchar[]`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" ADD CONSTRAINT "FK_ccbf5a8c0be4511133dcc50ddeb" FOREIGN KEY ("userGroupJoiningId") REFERENCES "user_group_joining"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "antenna" DROP CONSTRAINT "FK_ccbf5a8c0be4511133dcc50ddeb"`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" DROP COLUMN "users"`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" ADD "users" character varying array NOT NULL DEFAULT '{}'`, undefined);
await queryRunner.query(`CREATE TYPE "antenna_src_enum_old" AS ENUM('home', 'all', 'users', 'list')`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" ALTER COLUMN "src" TYPE "antenna_src_enum_old" USING "src"::"text"::"antenna_src_enum_old"`, undefined);
await queryRunner.query(
`ALTER TABLE "antenna" DROP CONSTRAINT "FK_ccbf5a8c0be4511133dcc50ddeb"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" DROP COLUMN "users"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" ADD "users" character varying array NOT NULL DEFAULT '{}'`,
undefined,
);
await queryRunner.query(
`CREATE TYPE "antenna_src_enum_old" AS ENUM('home', 'all', 'users', 'list')`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" ALTER COLUMN "src" TYPE "antenna_src_enum_old" USING "src"::"text"::"antenna_src_enum_old"`,
undefined,
);
await queryRunner.query(`DROP TYPE "antenna_src_enum"`, undefined);
await queryRunner.query(`ALTER TYPE "antenna_src_enum_old" RENAME TO "antenna_src_enum"`, undefined);
await queryRunner.query(`ALTER TABLE "antenna" DROP COLUMN "userGroupJoiningId"`, undefined);
await queryRunner.query(
`ALTER TYPE "antenna_src_enum_old" RENAME TO "antenna_src_enum"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "antenna" DROP COLUMN "userGroupJoiningId"`,
undefined,
);
}
}

View file

@ -1,13 +1,17 @@
export class driveUserFolderIdIndex1581708415836 {
constructor() {
this.name = 'driveUserFolderIdIndex1581708415836';
this.name = "driveUserFolderIdIndex1581708415836";
}
async up(queryRunner) {
await queryRunner.query(`CREATE INDEX "IDX_55720b33a61a7c806a8215b825" ON "drive_file" ("userId", "folderId", "id") `, undefined);
await queryRunner.query(
`CREATE INDEX "IDX_55720b33a61a7c806a8215b825" ON "drive_file" ("userId", "folderId", "id") `,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "IDX_55720b33a61a7c806a8215b825"`, undefined);
await queryRunner.query(
`DROP INDEX "IDX_55720b33a61a7c806a8215b825"`,
undefined,
);
}
}

View file

@ -1,27 +1,67 @@
export class promo1581979837262 {
constructor() {
this.name = 'promo1581979837262';
this.name = "promo1581979837262";
}
async up(queryRunner) {
await queryRunner.query(`CREATE TABLE "promo_note" ("noteId" character varying(32) NOT NULL, "expiresAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, CONSTRAINT "REL_e263909ca4fe5d57f8d4230dd5" UNIQUE ("noteId"), CONSTRAINT "PK_e263909ca4fe5d57f8d4230dd5c" PRIMARY KEY ("noteId"))`, undefined);
await queryRunner.query(`CREATE INDEX "IDX_83f0862e9bae44af52ced7099e" ON "promo_note" ("userId") `, undefined);
await queryRunner.query(`CREATE TABLE "promo_read" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "noteId" character varying(32) NOT NULL, CONSTRAINT "PK_61917c1541002422b703318b7c9" PRIMARY KEY ("id"))`, undefined);
await queryRunner.query(`CREATE INDEX "IDX_9657d55550c3d37bfafaf7d4b0" ON "promo_read" ("userId") `, undefined);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_2882b8a1a07c7d281a98b6db16" ON "promo_read" ("userId", "noteId") `, undefined);
await queryRunner.query(`ALTER TABLE "promo_note" ADD CONSTRAINT "FK_e263909ca4fe5d57f8d4230dd5c" FOREIGN KEY ("noteId") REFERENCES "note"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(`ALTER TABLE "promo_read" ADD CONSTRAINT "FK_9657d55550c3d37bfafaf7d4b05" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(`ALTER TABLE "promo_read" ADD CONSTRAINT "FK_a46a1a603ecee695d7db26da5f4" FOREIGN KEY ("noteId") REFERENCES "note"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(
`CREATE TABLE "promo_note" ("noteId" character varying(32) NOT NULL, "expiresAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, CONSTRAINT "REL_e263909ca4fe5d57f8d4230dd5" UNIQUE ("noteId"), CONSTRAINT "PK_e263909ca4fe5d57f8d4230dd5c" PRIMARY KEY ("noteId"))`,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_83f0862e9bae44af52ced7099e" ON "promo_note" ("userId") `,
undefined,
);
await queryRunner.query(
`CREATE TABLE "promo_read" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "noteId" character varying(32) NOT NULL, CONSTRAINT "PK_61917c1541002422b703318b7c9" PRIMARY KEY ("id"))`,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_9657d55550c3d37bfafaf7d4b0" ON "promo_read" ("userId") `,
undefined,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_2882b8a1a07c7d281a98b6db16" ON "promo_read" ("userId", "noteId") `,
undefined,
);
await queryRunner.query(
`ALTER TABLE "promo_note" ADD CONSTRAINT "FK_e263909ca4fe5d57f8d4230dd5c" FOREIGN KEY ("noteId") REFERENCES "note"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "promo_read" ADD CONSTRAINT "FK_9657d55550c3d37bfafaf7d4b05" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "promo_read" ADD CONSTRAINT "FK_a46a1a603ecee695d7db26da5f4" FOREIGN KEY ("noteId") REFERENCES "note"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "promo_read" DROP CONSTRAINT "FK_a46a1a603ecee695d7db26da5f4"`, undefined);
await queryRunner.query(`ALTER TABLE "promo_read" DROP CONSTRAINT "FK_9657d55550c3d37bfafaf7d4b05"`, undefined);
await queryRunner.query(`ALTER TABLE "promo_note" DROP CONSTRAINT "FK_e263909ca4fe5d57f8d4230dd5c"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_2882b8a1a07c7d281a98b6db16"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_9657d55550c3d37bfafaf7d4b0"`, undefined);
await queryRunner.query(
`ALTER TABLE "promo_read" DROP CONSTRAINT "FK_a46a1a603ecee695d7db26da5f4"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "promo_read" DROP CONSTRAINT "FK_9657d55550c3d37bfafaf7d4b05"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "promo_note" DROP CONSTRAINT "FK_e263909ca4fe5d57f8d4230dd5c"`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_2882b8a1a07c7d281a98b6db16"`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_9657d55550c3d37bfafaf7d4b0"`,
undefined,
);
await queryRunner.query(`DROP TABLE "promo_read"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_83f0862e9bae44af52ced7099e"`, undefined);
await queryRunner.query(
`DROP INDEX "IDX_83f0862e9bae44af52ced7099e"`,
undefined,
);
await queryRunner.query(`DROP TABLE "promo_note"`, undefined);
}
}

View file

@ -1,13 +1,17 @@
export class featuredInjecttion1582019042083 {
constructor() {
this.name = 'featuredInjecttion1582019042083';
this.name = "featuredInjecttion1582019042083";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" ADD "injectFeaturedNote" boolean NOT NULL DEFAULT true`, undefined);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "injectFeaturedNote" boolean NOT NULL DEFAULT true`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "injectFeaturedNote"`, undefined);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "injectFeaturedNote"`,
undefined,
);
}
}

View file

@ -1,13 +1,17 @@
export class antennaExclude1582210532752 {
constructor() {
this.name = 'antennaExclude1582210532752';
this.name = "antennaExclude1582210532752";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "antenna" ADD "excludeKeywords" jsonb NOT NULL DEFAULT '[]'`, undefined);
await queryRunner.query(
`ALTER TABLE "antenna" ADD "excludeKeywords" jsonb NOT NULL DEFAULT '[]'`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "antenna" DROP COLUMN "excludeKeywords"`, undefined);
await queryRunner.query(
`ALTER TABLE "antenna" DROP COLUMN "excludeKeywords"`,
undefined,
);
}
}

View file

@ -1,13 +1,17 @@
export class noteReactionLength1582875306439 {
constructor() {
this.name = 'noteReactionLength1582875306439';
this.name = "noteReactionLength1582875306439";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "note_reaction" ALTER COLUMN "reaction" TYPE character varying(130)`, undefined);
await queryRunner.query(
`ALTER TABLE "note_reaction" ALTER COLUMN "reaction" TYPE character varying(130)`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "note_reaction" ALTER COLUMN "reaction" TYPE character varying(128)`, undefined);
await queryRunner.query(
`ALTER TABLE "note_reaction" ALTER COLUMN "reaction" TYPE character varying(128)`,
undefined,
);
}
}

View file

@ -1,35 +1,105 @@
export class miauth1585361548360 {
constructor() {
this.name = 'miauth1585361548360';
this.name = "miauth1585361548360";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "access_token" ADD "lastUsedAt" TIMESTAMP WITH TIME ZONE DEFAULT null`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" ADD "session" character varying(128) DEFAULT null`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" ADD "name" character varying(128) DEFAULT null`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" ADD "description" character varying(512) DEFAULT null`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" ADD "iconUrl" character varying(512) DEFAULT null`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" ADD "permission" character varying(64) array NOT NULL DEFAULT '{}'::varchar[]`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" ADD "fetched" boolean NOT NULL DEFAULT false`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" DROP CONSTRAINT "FK_a3ff16c90cc87a82a0b5959e560"`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" ALTER COLUMN "appId" DROP NOT NULL`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" ALTER COLUMN "appId" SET DEFAULT null`, undefined);
await queryRunner.query(`CREATE INDEX "IDX_bf3a053c07d9fb5d87317c56ee" ON "access_token" ("session") `, undefined);
await queryRunner.query(`ALTER TABLE "access_token" ADD CONSTRAINT "FK_a3ff16c90cc87a82a0b5959e560" FOREIGN KEY ("appId") REFERENCES "app"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(
`ALTER TABLE "access_token" ADD "lastUsedAt" TIMESTAMP WITH TIME ZONE DEFAULT null`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" ADD "session" character varying(128) DEFAULT null`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" ADD "name" character varying(128) DEFAULT null`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" ADD "description" character varying(512) DEFAULT null`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" ADD "iconUrl" character varying(512) DEFAULT null`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" ADD "permission" character varying(64) array NOT NULL DEFAULT '{}'::varchar[]`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" ADD "fetched" boolean NOT NULL DEFAULT false`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" DROP CONSTRAINT "FK_a3ff16c90cc87a82a0b5959e560"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" ALTER COLUMN "appId" DROP NOT NULL`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" ALTER COLUMN "appId" SET DEFAULT null`,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_bf3a053c07d9fb5d87317c56ee" ON "access_token" ("session") `,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" ADD CONSTRAINT "FK_a3ff16c90cc87a82a0b5959e560" FOREIGN KEY ("appId") REFERENCES "app"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "access_token" DROP CONSTRAINT "FK_a3ff16c90cc87a82a0b5959e560"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_bf3a053c07d9fb5d87317c56ee"`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" ALTER COLUMN "appId" DROP DEFAULT`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" ALTER COLUMN "appId" SET NOT NULL`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" ADD CONSTRAINT "FK_a3ff16c90cc87a82a0b5959e560" FOREIGN KEY ("appId") REFERENCES "app"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" DROP COLUMN "fetched"`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" DROP COLUMN "permission"`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" DROP COLUMN "iconUrl"`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" DROP COLUMN "description"`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" DROP COLUMN "name"`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" DROP COLUMN "session"`, undefined);
await queryRunner.query(`ALTER TABLE "access_token" DROP COLUMN "lastUsedAt"`, undefined);
await queryRunner.query(
`ALTER TABLE "access_token" DROP CONSTRAINT "FK_a3ff16c90cc87a82a0b5959e560"`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_bf3a053c07d9fb5d87317c56ee"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" ALTER COLUMN "appId" DROP DEFAULT`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" ALTER COLUMN "appId" SET NOT NULL`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" ADD CONSTRAINT "FK_a3ff16c90cc87a82a0b5959e560" FOREIGN KEY ("appId") REFERENCES "app"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" DROP COLUMN "fetched"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" DROP COLUMN "permission"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" DROP COLUMN "iconUrl"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" DROP COLUMN "description"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" DROP COLUMN "name"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" DROP COLUMN "session"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "access_token" DROP COLUMN "lastUsedAt"`,
undefined,
);
}
}

View file

@ -1,47 +1,150 @@
export class customNotification1585385921215 {
constructor() {
this.name = 'customNotification1585385921215';
this.name = "customNotification1585385921215";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "notification" ADD "customBody" character varying(2048)`, undefined);
await queryRunner.query(`ALTER TABLE "notification" ADD "customHeader" character varying(256)`, undefined);
await queryRunner.query(`ALTER TABLE "notification" ADD "customIcon" character varying(1024)`, undefined);
await queryRunner.query(`ALTER TABLE "notification" ADD "appAccessTokenId" character varying(32)`, undefined);
await queryRunner.query(`ALTER TABLE "notification" DROP CONSTRAINT "FK_3b4e96eec8d36a8bbb9d02aa710"`, undefined);
await queryRunner.query(`ALTER TABLE "notification" ALTER COLUMN "notifierId" DROP NOT NULL`, undefined);
await queryRunner.query(`COMMENT ON COLUMN "notification"."notifierId" IS 'The ID of sender user of the Notification.'`, undefined);
await queryRunner.query(`ALTER TYPE "public"."notification_type_enum" RENAME TO "notification_type_enum_old"`, undefined);
await queryRunner.query(`CREATE TYPE "notification_type_enum" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app')`, undefined);
await queryRunner.query(`ALTER TABLE "notification" ALTER COLUMN "type" TYPE "notification_type_enum" USING "type"::"text"::"notification_type_enum"`, undefined);
await queryRunner.query(`DROP TYPE "notification_type_enum_old"`, undefined);
await queryRunner.query(`COMMENT ON COLUMN "notification"."type" IS 'The type of the Notification.'`, undefined);
await queryRunner.query(`CREATE INDEX "IDX_3b4e96eec8d36a8bbb9d02aa71" ON "notification" ("notifierId") `, undefined);
await queryRunner.query(`CREATE INDEX "IDX_33f33cc8ef29d805a97ff4628b" ON "notification" ("type") `, undefined);
await queryRunner.query(`CREATE INDEX "IDX_080ab397c379af09b9d2169e5b" ON "notification" ("isRead") `, undefined);
await queryRunner.query(`CREATE INDEX "IDX_e22bf6bda77b6adc1fd9e75c8c" ON "notification" ("appAccessTokenId") `, undefined);
await queryRunner.query(`ALTER TABLE "notification" ADD CONSTRAINT "FK_3b4e96eec8d36a8bbb9d02aa710" FOREIGN KEY ("notifierId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(`ALTER TABLE "notification" ADD CONSTRAINT "FK_e22bf6bda77b6adc1fd9e75c8c9" FOREIGN KEY ("appAccessTokenId") REFERENCES "access_token"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(
`ALTER TABLE "notification" ADD "customBody" character varying(2048)`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" ADD "customHeader" character varying(256)`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" ADD "customIcon" character varying(1024)`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" ADD "appAccessTokenId" character varying(32)`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" DROP CONSTRAINT "FK_3b4e96eec8d36a8bbb9d02aa710"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" ALTER COLUMN "notifierId" DROP NOT NULL`,
undefined,
);
await queryRunner.query(
`COMMENT ON COLUMN "notification"."notifierId" IS 'The ID of sender user of the Notification.'`,
undefined,
);
await queryRunner.query(
`ALTER TYPE "public"."notification_type_enum" RENAME TO "notification_type_enum_old"`,
undefined,
);
await queryRunner.query(
`CREATE TYPE "notification_type_enum" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app')`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" ALTER COLUMN "type" TYPE "notification_type_enum" USING "type"::"text"::"notification_type_enum"`,
undefined,
);
await queryRunner.query(
`DROP TYPE "notification_type_enum_old"`,
undefined,
);
await queryRunner.query(
`COMMENT ON COLUMN "notification"."type" IS 'The type of the Notification.'`,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_3b4e96eec8d36a8bbb9d02aa71" ON "notification" ("notifierId") `,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_33f33cc8ef29d805a97ff4628b" ON "notification" ("type") `,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_080ab397c379af09b9d2169e5b" ON "notification" ("isRead") `,
undefined,
);
await queryRunner.query(
`CREATE INDEX "IDX_e22bf6bda77b6adc1fd9e75c8c" ON "notification" ("appAccessTokenId") `,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" ADD CONSTRAINT "FK_3b4e96eec8d36a8bbb9d02aa710" FOREIGN KEY ("notifierId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" ADD CONSTRAINT "FK_e22bf6bda77b6adc1fd9e75c8c9" FOREIGN KEY ("appAccessTokenId") REFERENCES "access_token"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "notification" DROP CONSTRAINT "FK_e22bf6bda77b6adc1fd9e75c8c9"`, undefined);
await queryRunner.query(`ALTER TABLE "notification" DROP CONSTRAINT "FK_3b4e96eec8d36a8bbb9d02aa710"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_e22bf6bda77b6adc1fd9e75c8c"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_080ab397c379af09b9d2169e5b"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_33f33cc8ef29d805a97ff4628b"`, undefined);
await queryRunner.query(`DROP INDEX "IDX_3b4e96eec8d36a8bbb9d02aa71"`, undefined);
await queryRunner.query(`COMMENT ON COLUMN "notification"."type" IS ''`, undefined);
await queryRunner.query(`CREATE TYPE "notification_type_enum_old" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited')`, undefined);
await queryRunner.query(`ALTER TABLE "notification" ALTER COLUMN "type" TYPE "notification_type_enum_old" USING "type"::"text"::"notification_type_enum_old"`, undefined);
await queryRunner.query(
`ALTER TABLE "notification" DROP CONSTRAINT "FK_e22bf6bda77b6adc1fd9e75c8c9"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" DROP CONSTRAINT "FK_3b4e96eec8d36a8bbb9d02aa710"`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_e22bf6bda77b6adc1fd9e75c8c"`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_080ab397c379af09b9d2169e5b"`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_33f33cc8ef29d805a97ff4628b"`,
undefined,
);
await queryRunner.query(
`DROP INDEX "IDX_3b4e96eec8d36a8bbb9d02aa71"`,
undefined,
);
await queryRunner.query(
`COMMENT ON COLUMN "notification"."type" IS ''`,
undefined,
);
await queryRunner.query(
`CREATE TYPE "notification_type_enum_old" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited')`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" ALTER COLUMN "type" TYPE "notification_type_enum_old" USING "type"::"text"::"notification_type_enum_old"`,
undefined,
);
await queryRunner.query(`DROP TYPE "notification_type_enum"`, undefined);
await queryRunner.query(`ALTER TYPE "notification_type_enum_old" RENAME TO "notification_type_enum"`, undefined);
await queryRunner.query(`COMMENT ON COLUMN "notification"."notifierId" IS ''`, undefined);
await queryRunner.query(`ALTER TABLE "notification" ALTER COLUMN "notifierId" SET NOT NULL`, undefined);
await queryRunner.query(`ALTER TABLE "notification" ADD CONSTRAINT "FK_3b4e96eec8d36a8bbb9d02aa710" FOREIGN KEY ("notifierId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, undefined);
await queryRunner.query(`ALTER TABLE "notification" DROP COLUMN "appAccessTokenId"`, undefined);
await queryRunner.query(`ALTER TABLE "notification" DROP COLUMN "customIcon"`, undefined);
await queryRunner.query(`ALTER TABLE "notification" DROP COLUMN "customHeader"`, undefined);
await queryRunner.query(`ALTER TABLE "notification" DROP COLUMN "customBody"`, undefined);
await queryRunner.query(
`ALTER TYPE "notification_type_enum_old" RENAME TO "notification_type_enum"`,
undefined,
);
await queryRunner.query(
`COMMENT ON COLUMN "notification"."notifierId" IS ''`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" ALTER COLUMN "notifierId" SET NOT NULL`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" ADD CONSTRAINT "FK_3b4e96eec8d36a8bbb9d02aa710" FOREIGN KEY ("notifierId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" DROP COLUMN "appAccessTokenId"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" DROP COLUMN "customIcon"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" DROP COLUMN "customHeader"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "notification" DROP COLUMN "customBody"`,
undefined,
);
}
}

View file

@ -1,11 +1,12 @@
export class apUrl1585772678853 {
constructor() {
this.name = 'apUrl1585772678853';
this.name = "apUrl1585772678853";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "note" ADD "url" character varying(512)`, undefined);
await queryRunner.query(
`ALTER TABLE "note" ADD "url" character varying(512)`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "note" DROP COLUMN "url"`, undefined);

View file

@ -1,13 +1,17 @@
export class AddObjectStorageUseProxy1586624197029 {
constructor() {
this.name = 'AddObjectStorageUseProxy1586624197029';
this.name = "AddObjectStorageUseProxy1586624197029";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageUseProxy" boolean NOT NULL DEFAULT true`, undefined);
await queryRunner.query(
`ALTER TABLE "meta" ADD "objectStorageUseProxy" boolean NOT NULL DEFAULT true`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageUseProxy"`, undefined);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "objectStorageUseProxy"`,
undefined,
);
}
}

View file

@ -1,13 +1,17 @@
export class remoteReaction1586641139527 {
constructor() {
this.name = 'remoteReaction1586641139527';
this.name = "remoteReaction1586641139527";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "note_reaction" ALTER COLUMN "reaction" TYPE character varying(260)`, undefined);
await queryRunner.query(
`ALTER TABLE "note_reaction" ALTER COLUMN "reaction" TYPE character varying(260)`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "note_reaction" ALTER COLUMN "reaction" TYPE character varying(130)`, undefined);
await queryRunner.query(
`ALTER TABLE "note_reaction" ALTER COLUMN "reaction" TYPE character varying(130)`,
undefined,
);
}
}

View file

@ -1,13 +1,17 @@
export class pageAiScript1586708940386 {
constructor() {
this.name = 'pageAiScript1586708940386';
this.name = "pageAiScript1586708940386";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "page" ADD "script" character varying(16384) NOT NULL DEFAULT ''`, undefined);
await queryRunner.query(
`ALTER TABLE "page" ADD "script" character varying(16384) NOT NULL DEFAULT ''`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "page" DROP COLUMN "script"`, undefined);
await queryRunner.query(
`ALTER TABLE "page" DROP COLUMN "script"`,
undefined,
);
}
}

View file

@ -1,17 +1,33 @@
export class hCaptcha1588044505511 {
constructor() {
this.name = 'hCaptcha1588044505511';
this.name = "hCaptcha1588044505511";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" ADD "enableHcaptcha" boolean NOT NULL DEFAULT false`, undefined);
await queryRunner.query(`ALTER TABLE "meta" ADD "hcaptchaSiteKey" character varying(64)`, undefined);
await queryRunner.query(`ALTER TABLE "meta" ADD "hcaptchaSecretKey" character varying(64)`, undefined);
await queryRunner.query(
`ALTER TABLE "meta" ADD "enableHcaptcha" boolean NOT NULL DEFAULT false`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "hcaptchaSiteKey" character varying(64)`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "meta" ADD "hcaptchaSecretKey" character varying(64)`,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "hcaptchaSecretKey"`, undefined);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "hcaptchaSiteKey"`, undefined);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "enableHcaptcha"`, undefined);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "hcaptchaSecretKey"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "hcaptchaSiteKey"`,
undefined,
);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "enableHcaptcha"`,
undefined,
);
}
}

View file

@ -1,16 +1,26 @@
export class pubRelay1589023282116 {
constructor() {
this.name = 'pubRelay1589023282116';
this.name = "pubRelay1589023282116";
}
async up(queryRunner) {
await queryRunner.query(`CREATE TYPE "relay_status_enum" AS ENUM('requesting', 'accepted', 'rejected')`, undefined);
await queryRunner.query(`CREATE TABLE "relay" ("id" character varying(32) NOT NULL, "inbox" character varying(512) NOT NULL, "status" "relay_status_enum" NOT NULL, CONSTRAINT "PK_78ebc9cfddf4292633b7ba57aee" PRIMARY KEY ("id"))`, undefined);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_0d9a1738f2cf7f3b1c3334dfab" ON "relay" ("inbox") `, undefined);
await queryRunner.query(
`CREATE TYPE "relay_status_enum" AS ENUM('requesting', 'accepted', 'rejected')`,
undefined,
);
await queryRunner.query(
`CREATE TABLE "relay" ("id" character varying(32) NOT NULL, "inbox" character varying(512) NOT NULL, "status" "relay_status_enum" NOT NULL, CONSTRAINT "PK_78ebc9cfddf4292633b7ba57aee" PRIMARY KEY ("id"))`,
undefined,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_0d9a1738f2cf7f3b1c3334dfab" ON "relay" ("inbox") `,
undefined,
);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "IDX_0d9a1738f2cf7f3b1c3334dfab"`, undefined);
await queryRunner.query(
`DROP INDEX "IDX_0d9a1738f2cf7f3b1c3334dfab"`,
undefined,
);
await queryRunner.query(`DROP TABLE "relay"`, undefined);
await queryRunner.query(`DROP TYPE "relay_status_enum"`, undefined);
}

View file

@ -1,11 +1,11 @@
export class blurhash1595075960584 {
constructor() {
this.name = 'blurhash1595075960584';
this.name = "blurhash1595075960584";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "drive_file" ADD "blurhash" character varying(128)`);
await queryRunner.query(
`ALTER TABLE "drive_file" ADD "blurhash" character varying(128)`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "drive_file" DROP COLUMN "blurhash"`);

View file

@ -1,19 +1,25 @@
export class blurhashForAvatarBanner1595077605646 {
constructor() {
this.name = 'blurhashForAvatarBanner1595077605646';
this.name = "blurhashForAvatarBanner1595077605646";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "avatarColor"`);
await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "bannerColor"`);
await queryRunner.query(`ALTER TABLE "user" ADD "avatarBlurhash" character varying(128)`);
await queryRunner.query(`ALTER TABLE "user" ADD "bannerBlurhash" character varying(128)`);
await queryRunner.query(
`ALTER TABLE "user" ADD "avatarBlurhash" character varying(128)`,
);
await queryRunner.query(
`ALTER TABLE "user" ADD "bannerBlurhash" character varying(128)`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "bannerBlurhash"`);
await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "avatarBlurhash"`);
await queryRunner.query(`ALTER TABLE "user" ADD "bannerColor" character varying(32)`);
await queryRunner.query(`ALTER TABLE "user" ADD "avatarColor" character varying(32)`);
await queryRunner.query(
`ALTER TABLE "user" ADD "bannerColor" character varying(32)`,
);
await queryRunner.query(
`ALTER TABLE "user" ADD "avatarColor" character varying(32)`,
);
}
}

View file

@ -1,11 +1,11 @@
export class instanceIconUrl1595676934834 {
constructor() {
this.name = 'instanceIconUrl1595676934834';
this.name = "instanceIconUrl1595676934834";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "instance" ADD "iconUrl" character varying(256) DEFAULT null`);
await queryRunner.query(
`ALTER TABLE "instance" ADD "iconUrl" character varying(256) DEFAULT null`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "instance" DROP COLUMN "iconUrl"`);

View file

@ -1,26 +1,50 @@
export class wordMute1595771249699 {
constructor() {
this.name = 'wordMute1595771249699';
this.name = "wordMute1595771249699";
}
async up(queryRunner) {
await queryRunner.query(`CREATE TABLE "muted_note" ("id" character varying(32) NOT NULL, "noteId" character varying(32) NOT NULL, "userId" character varying(32) NOT NULL, CONSTRAINT "PK_897e2eff1c0b9b64e55ca1418a4" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_70ab9786313d78e4201d81cdb8" ON "muted_note" ("noteId") `);
await queryRunner.query(`CREATE INDEX "IDX_d8e07aa18c2d64e86201601aec" ON "muted_note" ("userId") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_a8c6bfd637d3f1d67a27c48e27" ON "muted_note" ("noteId", "userId") `);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "enableWordMute" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "mutedWords" jsonb NOT NULL DEFAULT '[]'`);
await queryRunner.query(`CREATE INDEX "IDX_3befe6f999c86aff06eb0257b4" ON "user_profile" ("enableWordMute") `);
await queryRunner.query(`ALTER TABLE "muted_note" ADD CONSTRAINT "FK_70ab9786313d78e4201d81cdb89" FOREIGN KEY ("noteId") REFERENCES "note"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "muted_note" ADD CONSTRAINT "FK_d8e07aa18c2d64e86201601aec1" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(
`CREATE TABLE "muted_note" ("id" character varying(32) NOT NULL, "noteId" character varying(32) NOT NULL, "userId" character varying(32) NOT NULL, CONSTRAINT "PK_897e2eff1c0b9b64e55ca1418a4" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`CREATE INDEX "IDX_70ab9786313d78e4201d81cdb8" ON "muted_note" ("noteId") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_d8e07aa18c2d64e86201601aec" ON "muted_note" ("userId") `,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_a8c6bfd637d3f1d67a27c48e27" ON "muted_note" ("noteId", "userId") `,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "enableWordMute" boolean NOT NULL DEFAULT false`,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "mutedWords" jsonb NOT NULL DEFAULT '[]'`,
);
await queryRunner.query(
`CREATE INDEX "IDX_3befe6f999c86aff06eb0257b4" ON "user_profile" ("enableWordMute") `,
);
await queryRunner.query(
`ALTER TABLE "muted_note" ADD CONSTRAINT "FK_70ab9786313d78e4201d81cdb89" FOREIGN KEY ("noteId") REFERENCES "note"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "muted_note" ADD CONSTRAINT "FK_d8e07aa18c2d64e86201601aec1" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "muted_note" DROP CONSTRAINT "FK_d8e07aa18c2d64e86201601aec1"`);
await queryRunner.query(`ALTER TABLE "muted_note" DROP CONSTRAINT "FK_70ab9786313d78e4201d81cdb89"`);
await queryRunner.query(
`ALTER TABLE "muted_note" DROP CONSTRAINT "FK_d8e07aa18c2d64e86201601aec1"`,
);
await queryRunner.query(
`ALTER TABLE "muted_note" DROP CONSTRAINT "FK_70ab9786313d78e4201d81cdb89"`,
);
await queryRunner.query(`DROP INDEX "IDX_3befe6f999c86aff06eb0257b4"`);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "mutedWords"`);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "enableWordMute"`);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "mutedWords"`,
);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "enableWordMute"`,
);
await queryRunner.query(`DROP INDEX "IDX_a8c6bfd637d3f1d67a27c48e27"`);
await queryRunner.query(`DROP INDEX "IDX_d8e07aa18c2d64e86201601aec"`);
await queryRunner.query(`DROP INDEX "IDX_70ab9786313d78e4201d81cdb8"`);

View file

@ -1,13 +1,17 @@
export class wordMute21595782306083 {
constructor() {
this.name = 'wordMute21595782306083';
this.name = "wordMute21595782306083";
}
async up(queryRunner) {
await queryRunner.query(`CREATE TYPE "muted_note_reason_enum" AS ENUM('word', 'manual', 'spam', 'other')`);
await queryRunner.query(`ALTER TABLE "muted_note" ADD "reason" "muted_note_reason_enum" NOT NULL`);
await queryRunner.query(`CREATE INDEX "IDX_636e977ff90b23676fb5624b25" ON "muted_note" ("reason") `);
await queryRunner.query(
`CREATE TYPE "muted_note_reason_enum" AS ENUM('word', 'manual', 'spam', 'other')`,
);
await queryRunner.query(
`ALTER TABLE "muted_note" ADD "reason" "muted_note_reason_enum" NOT NULL`,
);
await queryRunner.query(
`CREATE INDEX "IDX_636e977ff90b23676fb5624b25" ON "muted_note" ("reason") `,
);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "IDX_636e977ff90b23676fb5624b25"`);

View file

@ -1,42 +1,100 @@
export class channel1596548170836 {
constructor() {
this.name = 'channel1596548170836';
this.name = "channel1596548170836";
}
async up(queryRunner) {
await queryRunner.query(`CREATE TABLE "channel" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "lastNotedAt" TIMESTAMP WITH TIME ZONE, "userId" character varying(32) NOT NULL, "name" character varying(128) NOT NULL, "description" character varying(2048), "bannerId" character varying(32), "notesCount" integer NOT NULL DEFAULT 0, "usersCount" integer NOT NULL DEFAULT 0, CONSTRAINT "PK_590f33ee6ee7d76437acf362e39" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_71cb7b435b7c0d4843317e7e16" ON "channel" ("createdAt") `);
await queryRunner.query(`CREATE INDEX "IDX_29ef80c6f13bcea998447fce43" ON "channel" ("lastNotedAt") `);
await queryRunner.query(`CREATE INDEX "IDX_823bae55bd81b3be6e05cff438" ON "channel" ("userId") `);
await queryRunner.query(`CREATE INDEX "IDX_0f58c11241e649d2a638a8de94" ON "channel" ("notesCount") `);
await queryRunner.query(`CREATE INDEX "IDX_094b86cd36bb805d1aa1e8cc9a" ON "channel" ("usersCount") `);
await queryRunner.query(`CREATE TABLE "channel_following" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "followeeId" character varying(32) NOT NULL, "followerId" character varying(32) NOT NULL, CONSTRAINT "PK_8b104be7f7415113f2a02cd5bdd" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_11e71f2511589dcc8a4d3214f9" ON "channel_following" ("createdAt") `);
await queryRunner.query(`CREATE INDEX "IDX_0e43068c3f92cab197c3d3cd86" ON "channel_following" ("followeeId") `);
await queryRunner.query(`CREATE INDEX "IDX_6d8084ec9496e7334a4602707e" ON "channel_following" ("followerId") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_2e230dd45a10e671d781d99f3e" ON "channel_following" ("followerId", "followeeId") `);
await queryRunner.query(`CREATE TABLE "channel_note_pining" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "channelId" character varying(32) NOT NULL, "noteId" character varying(32) NOT NULL, CONSTRAINT "PK_44f7474496bcf2e4b741681146d" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_8125f950afd3093acb10d2db8a" ON "channel_note_pining" ("channelId") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_f36fed37d6d4cdcc68c803cd9c" ON "channel_note_pining" ("channelId", "noteId") `);
await queryRunner.query(`ALTER TABLE "note" ADD "channelId" character varying(32) DEFAULT null`);
await queryRunner.query(`CREATE INDEX "IDX_f22169eb10657bded6d875ac8f" ON "note" ("channelId") `);
await queryRunner.query(`ALTER TABLE "channel" ADD CONSTRAINT "FK_823bae55bd81b3be6e05cff4383" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE SET NULL ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "channel" ADD CONSTRAINT "FK_999da2bcc7efadbfe0e92d3bc19" FOREIGN KEY ("bannerId") REFERENCES "drive_file"("id") ON DELETE SET NULL ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "note" ADD CONSTRAINT "FK_f22169eb10657bded6d875ac8f9" FOREIGN KEY ("channelId") REFERENCES "channel"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "channel_following" ADD CONSTRAINT "FK_0e43068c3f92cab197c3d3cd86e" FOREIGN KEY ("followeeId") REFERENCES "channel"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "channel_following" ADD CONSTRAINT "FK_6d8084ec9496e7334a4602707e1" FOREIGN KEY ("followerId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "channel_note_pining" ADD CONSTRAINT "FK_8125f950afd3093acb10d2db8a8" FOREIGN KEY ("channelId") REFERENCES "channel"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "channel_note_pining" ADD CONSTRAINT "FK_10b19ef67d297ea9de325cd4502" FOREIGN KEY ("noteId") REFERENCES "note"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(
`CREATE TABLE "channel" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "lastNotedAt" TIMESTAMP WITH TIME ZONE, "userId" character varying(32) NOT NULL, "name" character varying(128) NOT NULL, "description" character varying(2048), "bannerId" character varying(32), "notesCount" integer NOT NULL DEFAULT 0, "usersCount" integer NOT NULL DEFAULT 0, CONSTRAINT "PK_590f33ee6ee7d76437acf362e39" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`CREATE INDEX "IDX_71cb7b435b7c0d4843317e7e16" ON "channel" ("createdAt") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_29ef80c6f13bcea998447fce43" ON "channel" ("lastNotedAt") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_823bae55bd81b3be6e05cff438" ON "channel" ("userId") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_0f58c11241e649d2a638a8de94" ON "channel" ("notesCount") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_094b86cd36bb805d1aa1e8cc9a" ON "channel" ("usersCount") `,
);
await queryRunner.query(
`CREATE TABLE "channel_following" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "followeeId" character varying(32) NOT NULL, "followerId" character varying(32) NOT NULL, CONSTRAINT "PK_8b104be7f7415113f2a02cd5bdd" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`CREATE INDEX "IDX_11e71f2511589dcc8a4d3214f9" ON "channel_following" ("createdAt") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_0e43068c3f92cab197c3d3cd86" ON "channel_following" ("followeeId") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_6d8084ec9496e7334a4602707e" ON "channel_following" ("followerId") `,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_2e230dd45a10e671d781d99f3e" ON "channel_following" ("followerId", "followeeId") `,
);
await queryRunner.query(
`CREATE TABLE "channel_note_pining" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "channelId" character varying(32) NOT NULL, "noteId" character varying(32) NOT NULL, CONSTRAINT "PK_44f7474496bcf2e4b741681146d" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`CREATE INDEX "IDX_8125f950afd3093acb10d2db8a" ON "channel_note_pining" ("channelId") `,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_f36fed37d6d4cdcc68c803cd9c" ON "channel_note_pining" ("channelId", "noteId") `,
);
await queryRunner.query(
`ALTER TABLE "note" ADD "channelId" character varying(32) DEFAULT null`,
);
await queryRunner.query(
`CREATE INDEX "IDX_f22169eb10657bded6d875ac8f" ON "note" ("channelId") `,
);
await queryRunner.query(
`ALTER TABLE "channel" ADD CONSTRAINT "FK_823bae55bd81b3be6e05cff4383" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE SET NULL ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "channel" ADD CONSTRAINT "FK_999da2bcc7efadbfe0e92d3bc19" FOREIGN KEY ("bannerId") REFERENCES "drive_file"("id") ON DELETE SET NULL ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "note" ADD CONSTRAINT "FK_f22169eb10657bded6d875ac8f9" FOREIGN KEY ("channelId") REFERENCES "channel"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "channel_following" ADD CONSTRAINT "FK_0e43068c3f92cab197c3d3cd86e" FOREIGN KEY ("followeeId") REFERENCES "channel"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "channel_following" ADD CONSTRAINT "FK_6d8084ec9496e7334a4602707e1" FOREIGN KEY ("followerId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "channel_note_pining" ADD CONSTRAINT "FK_8125f950afd3093acb10d2db8a8" FOREIGN KEY ("channelId") REFERENCES "channel"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "channel_note_pining" ADD CONSTRAINT "FK_10b19ef67d297ea9de325cd4502" FOREIGN KEY ("noteId") REFERENCES "note"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "channel_note_pining" DROP CONSTRAINT "FK_10b19ef67d297ea9de325cd4502"`);
await queryRunner.query(`ALTER TABLE "channel_note_pining" DROP CONSTRAINT "FK_8125f950afd3093acb10d2db8a8"`);
await queryRunner.query(`ALTER TABLE "channel_following" DROP CONSTRAINT "FK_6d8084ec9496e7334a4602707e1"`);
await queryRunner.query(`ALTER TABLE "channel_following" DROP CONSTRAINT "FK_0e43068c3f92cab197c3d3cd86e"`);
await queryRunner.query(`ALTER TABLE "note" DROP CONSTRAINT "FK_f22169eb10657bded6d875ac8f9"`);
await queryRunner.query(`ALTER TABLE "channel" DROP CONSTRAINT "FK_999da2bcc7efadbfe0e92d3bc19"`);
await queryRunner.query(`ALTER TABLE "channel" DROP CONSTRAINT "FK_823bae55bd81b3be6e05cff4383"`);
await queryRunner.query(
`ALTER TABLE "channel_note_pining" DROP CONSTRAINT "FK_10b19ef67d297ea9de325cd4502"`,
);
await queryRunner.query(
`ALTER TABLE "channel_note_pining" DROP CONSTRAINT "FK_8125f950afd3093acb10d2db8a8"`,
);
await queryRunner.query(
`ALTER TABLE "channel_following" DROP CONSTRAINT "FK_6d8084ec9496e7334a4602707e1"`,
);
await queryRunner.query(
`ALTER TABLE "channel_following" DROP CONSTRAINT "FK_0e43068c3f92cab197c3d3cd86e"`,
);
await queryRunner.query(
`ALTER TABLE "note" DROP CONSTRAINT "FK_f22169eb10657bded6d875ac8f9"`,
);
await queryRunner.query(
`ALTER TABLE "channel" DROP CONSTRAINT "FK_999da2bcc7efadbfe0e92d3bc19"`,
);
await queryRunner.query(
`ALTER TABLE "channel" DROP CONSTRAINT "FK_823bae55bd81b3be6e05cff4383"`,
);
await queryRunner.query(`DROP INDEX "IDX_f22169eb10657bded6d875ac8f"`);
await queryRunner.query(`ALTER TABLE "note" DROP COLUMN "channelId"`);
await queryRunner.query(`DROP INDEX "IDX_f36fed37d6d4cdcc68c803cd9c"`);

View file

@ -1,13 +1,15 @@
export class channel21596786425167 {
constructor() {
this.name = 'channel21596786425167';
this.name = "channel21596786425167";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "channel_following" ADD "readCursor" TIMESTAMP WITH TIME ZONE NOT NULL`);
await queryRunner.query(
`ALTER TABLE "channel_following" ADD "readCursor" TIMESTAMP WITH TIME ZONE NOT NULL`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "channel_following" DROP COLUMN "readCursor"`);
await queryRunner.query(
`ALTER TABLE "channel_following" DROP COLUMN "readCursor"`,
);
}
}

View file

@ -1,13 +1,15 @@
export class objectStorageSetPublicRead1597230137744 {
constructor() {
this.name = 'objectStorageSetPublicRead1597230137744';
this.name = "objectStorageSetPublicRead1597230137744";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageSetPublicRead" boolean NOT NULL DEFAULT false`);
await queryRunner.query(
`ALTER TABLE "meta" ADD "objectStorageSetPublicRead" boolean NOT NULL DEFAULT false`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageSetPublicRead"`);
await queryRunner.query(
`ALTER TABLE "meta" DROP COLUMN "objectStorageSetPublicRead"`,
);
}
}

View file

@ -1,15 +1,21 @@
export class IncludingNotificationTypes1597236229720 {
constructor() {
this.name = 'IncludingNotificationTypes1597236229720';
this.name = "IncludingNotificationTypes1597236229720";
}
async up(queryRunner) {
await queryRunner.query(`CREATE TYPE "user_profile_includingnotificationtypes_enum" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app')`);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "includingNotificationTypes" "user_profile_includingnotificationtypes_enum" array`);
await queryRunner.query(
`CREATE TYPE "user_profile_includingnotificationtypes_enum" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app')`,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "includingNotificationTypes" "user_profile_includingnotificationtypes_enum" array`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "includingNotificationTypes"`);
await queryRunner.query(`DROP TYPE "user_profile_includingnotificationtypes_enum"`);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "includingNotificationTypes"`,
);
await queryRunner.query(
`DROP TYPE "user_profile_includingnotificationtypes_enum"`,
);
}
}

View file

@ -1,11 +1,11 @@
export class addSensitiveIndex1597385880794 {
constructor() {
this.name = 'addSensitiveIndex1597385880794';
this.name = "addSensitiveIndex1597385880794";
}
async up(queryRunner) {
await queryRunner.query(`CREATE INDEX "IDX_a7eba67f8b3fa27271e85d2e26" ON "drive_file" ("isSensitive") `);
await queryRunner.query(
`CREATE INDEX "IDX_a7eba67f8b3fa27271e85d2e26" ON "drive_file" ("isSensitive") `,
);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "IDX_a7eba67f8b3fa27271e85d2e26"`);

View file

@ -1,26 +1,44 @@
export class channelUnread1597459042300 {
constructor() {
this.name = 'channelUnread1597459042300';
this.name = "channelUnread1597459042300";
}
async up(queryRunner) {
await queryRunner.query(`TRUNCATE TABLE "note_unread"`, undefined);
await queryRunner.query(`ALTER TABLE "channel_following" DROP COLUMN "readCursor"`);
await queryRunner.query(`ALTER TABLE "note_unread" ADD "isMentioned" boolean NOT NULL`);
await queryRunner.query(`ALTER TABLE "note_unread" ADD "noteChannelId" character varying(32)`);
await queryRunner.query(`CREATE INDEX "IDX_25b1dd384bec391b07b74b861c" ON "note_unread" ("isMentioned") `);
await queryRunner.query(`CREATE INDEX "IDX_89a29c9237b8c3b6b3cbb4cb30" ON "note_unread" ("isSpecified") `);
await queryRunner.query(`CREATE INDEX "IDX_29e8c1d579af54d4232939f994" ON "note_unread" ("noteUserId") `);
await queryRunner.query(`CREATE INDEX "IDX_6a57f051d82c6d4036c141e107" ON "note_unread" ("noteChannelId") `);
await queryRunner.query(
`ALTER TABLE "channel_following" DROP COLUMN "readCursor"`,
);
await queryRunner.query(
`ALTER TABLE "note_unread" ADD "isMentioned" boolean NOT NULL`,
);
await queryRunner.query(
`ALTER TABLE "note_unread" ADD "noteChannelId" character varying(32)`,
);
await queryRunner.query(
`CREATE INDEX "IDX_25b1dd384bec391b07b74b861c" ON "note_unread" ("isMentioned") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_89a29c9237b8c3b6b3cbb4cb30" ON "note_unread" ("isSpecified") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_29e8c1d579af54d4232939f994" ON "note_unread" ("noteUserId") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_6a57f051d82c6d4036c141e107" ON "note_unread" ("noteChannelId") `,
);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "IDX_6a57f051d82c6d4036c141e107"`);
await queryRunner.query(`DROP INDEX "IDX_29e8c1d579af54d4232939f994"`);
await queryRunner.query(`DROP INDEX "IDX_89a29c9237b8c3b6b3cbb4cb30"`);
await queryRunner.query(`DROP INDEX "IDX_25b1dd384bec391b07b74b861c"`);
await queryRunner.query(`ALTER TABLE "note_unread" DROP COLUMN "noteChannelId"`);
await queryRunner.query(`ALTER TABLE "note_unread" DROP COLUMN "isMentioned"`);
await queryRunner.query(`ALTER TABLE "channel_following" ADD "readCursor" TIMESTAMP WITH TIME ZONE NOT NULL`);
await queryRunner.query(
`ALTER TABLE "note_unread" DROP COLUMN "noteChannelId"`,
);
await queryRunner.query(
`ALTER TABLE "note_unread" DROP COLUMN "isMentioned"`,
);
await queryRunner.query(
`ALTER TABLE "channel_following" ADD "readCursor" TIMESTAMP WITH TIME ZONE NOT NULL`,
);
}
}

View file

@ -1,15 +1,17 @@
export class ChannelNoteIdDescIndex1597893996136 {
constructor() {
this.name = 'ChannelNoteIdDescIndex1597893996136';
this.name = "ChannelNoteIdDescIndex1597893996136";
}
async up(queryRunner) {
await queryRunner.query(`DROP INDEX "IDX_f22169eb10657bded6d875ac8f"`);
await queryRunner.query(`CREATE INDEX "IDX_note_on_channelId_and_id_desc" ON "note" ("channelId", "id" desc)`);
await queryRunner.query(
`CREATE INDEX "IDX_note_on_channelId_and_id_desc" ON "note" ("channelId", "id" desc)`,
);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "IDX_note_on_channelId_and_id_desc"`);
await queryRunner.query(`CREATE INDEX "IDX_f22169eb10657bded6d875ac8f" ON "note" ("channelId") `);
await queryRunner.query(
`CREATE INDEX "IDX_f22169eb10657bded6d875ac8f" ON "note" ("channelId") `,
);
}
}

View file

@ -1,19 +1,33 @@
export class mutingNotificationTypes1600353287890 {
constructor() {
this.name = 'mutingNotificationTypes1600353287890';
this.name = "mutingNotificationTypes1600353287890";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "includingNotificationTypes"`);
await queryRunner.query(`DROP TYPE "public"."user_profile_includingnotificationtypes_enum"`);
await queryRunner.query(`CREATE TYPE "user_profile_mutingnotificationtypes_enum" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app')`);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "mutingNotificationTypes" "user_profile_mutingnotificationtypes_enum" array NOT NULL DEFAULT '{}'`);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "includingNotificationTypes"`,
);
await queryRunner.query(
`DROP TYPE "public"."user_profile_includingnotificationtypes_enum"`,
);
await queryRunner.query(
`CREATE TYPE "user_profile_mutingnotificationtypes_enum" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app')`,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "mutingNotificationTypes" "user_profile_mutingnotificationtypes_enum" array NOT NULL DEFAULT '{}'`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "mutingNotificationTypes"`);
await queryRunner.query(`DROP TYPE "user_profile_mutingnotificationtypes_enum"`);
await queryRunner.query(`CREATE TYPE "public"."user_profile_includingnotificationtypes_enum" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app')`);
await queryRunner.query(`ALTER TABLE "user_profile" ADD "includingNotificationTypes" "user_profile_includingnotificationtypes_enum" array`);
await queryRunner.query(
`ALTER TABLE "user_profile" DROP COLUMN "mutingNotificationTypes"`,
);
await queryRunner.query(
`DROP TYPE "user_profile_mutingnotificationtypes_enum"`,
);
await queryRunner.query(
`CREATE TYPE "public"."user_profile_includingnotificationtypes_enum" AS ENUM('follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app')`,
);
await queryRunner.query(
`ALTER TABLE "user_profile" ADD "includingNotificationTypes" "user_profile_includingnotificationtypes_enum" array`,
);
}
}

View file

@ -1,31 +1,63 @@
export class refineAbuseUserReport1603094348345 {
constructor() {
this.name = 'refineAbuseUserReport1603094348345';
this.name = "refineAbuseUserReport1603094348345";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP CONSTRAINT "FK_d049123c413e68ca52abe734203"`);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" DROP CONSTRAINT "FK_d049123c413e68ca52abe734203"`,
);
await queryRunner.query(`DROP INDEX "IDX_d049123c413e68ca52abe73420"`);
await queryRunner.query(`DROP INDEX "IDX_5cd442c3b2e74fdd99dae20243"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" RENAME COLUMN "userId" TO "targetUserId"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD "assigneeId" character varying(32)`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD "resolved" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP COLUMN "comment"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD "comment" character varying(2048) NOT NULL DEFAULT '{}'::varchar[]`);
await queryRunner.query(`CREATE INDEX "IDX_2b15aaf4a0dc5be3499af7ab6a" ON "abuse_user_report" ("resolved") `);
await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD CONSTRAINT "FK_08b883dd5fdd6f9c4c1572b36de" FOREIGN KEY ("assigneeId") REFERENCES "user"("id") ON DELETE SET NULL ON UPDATE NO ACTION`);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" RENAME COLUMN "userId" TO "targetUserId"`,
);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" ADD "assigneeId" character varying(32)`,
);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" ADD "resolved" boolean NOT NULL DEFAULT false`,
);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" DROP COLUMN "comment"`,
);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" ADD "comment" character varying(2048) NOT NULL DEFAULT '{}'::varchar[]`,
);
await queryRunner.query(
`CREATE INDEX "IDX_2b15aaf4a0dc5be3499af7ab6a" ON "abuse_user_report" ("resolved") `,
);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" ADD CONSTRAINT "FK_08b883dd5fdd6f9c4c1572b36de" FOREIGN KEY ("assigneeId") REFERENCES "user"("id") ON DELETE SET NULL ON UPDATE NO ACTION`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP CONSTRAINT "FK_08b883dd5fdd6f9c4c1572b36de"`);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" DROP CONSTRAINT "FK_08b883dd5fdd6f9c4c1572b36de"`,
);
await queryRunner.query(`DROP INDEX "IDX_2b15aaf4a0dc5be3499af7ab6a"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP COLUMN "comment"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD "comment" character varying(512) NOT NULL DEFAULT '{}'::varchar[]`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP COLUMN "resolved"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP COLUMN "assigneeId"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" RENAME COLUMN "targetUserId" TO "userId"`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_5cd442c3b2e74fdd99dae20243" ON "abuse_user_report" ("userId", "reporterId") `);
await queryRunner.query(`CREATE INDEX "IDX_d049123c413e68ca52abe73420" ON "abuse_user_report" ("userId") `);
await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD CONSTRAINT "FK_d049123c413e68ca52abe734203" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" DROP COLUMN "comment"`,
);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" ADD "comment" character varying(512) NOT NULL DEFAULT '{}'::varchar[]`,
);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" DROP COLUMN "resolved"`,
);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" DROP COLUMN "assigneeId"`,
);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" RENAME COLUMN "targetUserId" TO "userId"`,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_5cd442c3b2e74fdd99dae20243" ON "abuse_user_report" ("userId", "reporterId") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_d049123c413e68ca52abe73420" ON "abuse_user_report" ("userId") `,
);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" ADD CONSTRAINT "FK_d049123c413e68ca52abe734203" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
}

View file

@ -1,19 +1,29 @@
export class refineAbuseUserReport21603095701770 {
constructor() {
this.name = 'refineAbuseUserReport21603095701770';
this.name = "refineAbuseUserReport21603095701770";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD "targetUserHost" character varying(128)`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD "reporterHost" character varying(128)`);
await queryRunner.query(`CREATE INDEX "IDX_4ebbf7f93cdc10e8d1ef2fc6cd" ON "abuse_user_report" ("targetUserHost") `);
await queryRunner.query(`CREATE INDEX "IDX_f8d8b93740ad12c4ce8213a199" ON "abuse_user_report" ("reporterHost") `);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" ADD "targetUserHost" character varying(128)`,
);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" ADD "reporterHost" character varying(128)`,
);
await queryRunner.query(
`CREATE INDEX "IDX_4ebbf7f93cdc10e8d1ef2fc6cd" ON "abuse_user_report" ("targetUserHost") `,
);
await queryRunner.query(
`CREATE INDEX "IDX_f8d8b93740ad12c4ce8213a199" ON "abuse_user_report" ("reporterHost") `,
);
}
async down(queryRunner) {
await queryRunner.query(`DROP INDEX "IDX_f8d8b93740ad12c4ce8213a199"`);
await queryRunner.query(`DROP INDEX "IDX_4ebbf7f93cdc10e8d1ef2fc6cd"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP COLUMN "reporterHost"`);
await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP COLUMN "targetUserHost"`);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" DROP COLUMN "reporterHost"`,
);
await queryRunner.query(
`ALTER TABLE "abuse_user_report" DROP COLUMN "targetUserHost"`,
);
}
}

View file

@ -1,11 +1,11 @@
export class instanceThemeColor1603776877564 {
constructor() {
this.name = 'instanceThemeColor1603776877564';
this.name = "instanceThemeColor1603776877564";
}
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "instance" ADD "themeColor" character varying(64) DEFAULT null`);
await queryRunner.query(
`ALTER TABLE "instance" ADD "themeColor" character varying(64) DEFAULT null`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "instance" DROP COLUMN "themeColor"`);

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