Merge branch 'develop' into beta
This commit is contained in:
commit
389734e5a6
|
@ -10,8 +10,12 @@ packages/backend/.idea/vcs.xml
|
||||||
|
|
||||||
# Node.js
|
# Node.js
|
||||||
node_modules
|
node_modules
|
||||||
|
**/node_modules
|
||||||
report.*.json
|
report.*.json
|
||||||
|
|
||||||
|
# Rust
|
||||||
|
packages/backend/native-utils/target/*
|
||||||
|
|
||||||
# Cypress
|
# Cypress
|
||||||
cypress/screenshots
|
cypress/screenshots
|
||||||
cypress/videos
|
cypress/videos
|
||||||
|
@ -24,9 +28,6 @@ coverage
|
||||||
!/.config/example.yml
|
!/.config/example.yml
|
||||||
!/.config/docker_example.env
|
!/.config/docker_example.env
|
||||||
|
|
||||||
#docker dev config
|
|
||||||
/dev/docker-compose.yml
|
|
||||||
|
|
||||||
# misskey
|
# misskey
|
||||||
built
|
built
|
||||||
db
|
db
|
||||||
|
@ -46,3 +47,4 @@ packages/backend/assets/instance.css
|
||||||
# dockerignore custom
|
# dockerignore custom
|
||||||
.git
|
.git
|
||||||
Dockerfile
|
Dockerfile
|
||||||
|
docker-compose.yml
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
{
|
|
||||||
"eslint.packageManager": "pnpm",
|
|
||||||
"workspace.workspaceFolderCheckCwd": false
|
|
||||||
}
|
|
33
CALCKEY.md
33
CALCKEY.md
|
@ -1,5 +1,8 @@
|
||||||
# All the changes to Calckey from stock Misskey
|
# All the changes to Calckey from stock Misskey
|
||||||
|
|
||||||
|
> **Warning**
|
||||||
|
> This list is incomplete. Please check the [Releases](https://codeberg.org/calckey/calckey/releases) and [Changelog](https://codeberg.org/calckey/calckey/src/branch/develop/CHANGELOG.md) for a more complete list of changes. There have been [>4000 commits (laggy link)](https://codeberg.org/calckey/calckey/compare/700a7110f7e34f314b070987aa761c451ec34efc...develop) since we forked Misskey!
|
||||||
|
|
||||||
## Planned
|
## Planned
|
||||||
|
|
||||||
- Stucture
|
- Stucture
|
||||||
|
@ -8,32 +11,25 @@
|
||||||
- Rewrite backend in Rust and [Rocket](https://rocket.rs/)
|
- Rewrite backend in Rust and [Rocket](https://rocket.rs/)
|
||||||
- Use [Magic RegExP](https://regexp.dev/) for RegEx 🦄
|
- Use [Magic RegExP](https://regexp.dev/) for RegEx 🦄
|
||||||
- Function
|
- Function
|
||||||
- Federate with note edits
|
- User "choices" (recommended users) and featured hashtags like Mastodon and Soapbox
|
||||||
- User "choices" (recommended users) like Mastodon and Soapbox
|
|
||||||
- Join Reason system like Mastodon/Pleroma
|
- Join Reason system like Mastodon/Pleroma
|
||||||
- Option to publicize server blocks
|
- Option to publicize server blocks
|
||||||
- Build flag to remove NSFW/AI stuff
|
- More antenna options
|
||||||
- Filter notifications by user
|
- Groups
|
||||||
- Exclude self from antenna
|
|
||||||
- Form
|
- Form
|
||||||
- MFM button
|
|
||||||
- Personal notes for all accounts
|
|
||||||
- Fully revamp non-logged-in screen
|
|
||||||
- Lookup/details for post/file/server
|
- Lookup/details for post/file/server
|
||||||
- [Rat mode?](https://stop.voring.me/notes/933fx97bmd)
|
- [Rat mode?](https://stop.voring.me/notes/933fx97bmd)
|
||||||
|
|
||||||
## Work in progress
|
## Work in progress
|
||||||
|
|
||||||
- Weblate project
|
|
||||||
- Customizable max note length
|
|
||||||
- Link verification
|
- Link verification
|
||||||
- Better Messaging UI
|
- Better Messaging UI
|
||||||
- Better API Documentation
|
- Better API Documentation
|
||||||
- Remote follow button
|
- Remote follow button
|
||||||
- Admin custom CSS
|
|
||||||
- Add back time machine (jump to date)
|
|
||||||
- Improve accesibility
|
- Improve accesibility
|
||||||
- Timeline filters
|
- Timeline filters
|
||||||
|
- Events
|
||||||
|
- Fully revamp non-logged-in screen
|
||||||
|
|
||||||
## Implemented
|
## Implemented
|
||||||
|
|
||||||
|
@ -74,7 +70,6 @@
|
||||||
- Raw server info only for moderators
|
- Raw server info only for moderators
|
||||||
- New spinner animation
|
- New spinner animation
|
||||||
- Spinner instead of "Loading..."
|
- Spinner instead of "Loading..."
|
||||||
- SearchX instead of Google
|
|
||||||
- Always signToActivityPubGet
|
- Always signToActivityPubGet
|
||||||
- Spacing on group items
|
- Spacing on group items
|
||||||
- Quotes have solid border
|
- Quotes have solid border
|
||||||
|
@ -109,10 +104,6 @@
|
||||||
- More antenna options
|
- More antenna options
|
||||||
- New dashboard
|
- New dashboard
|
||||||
- Backfill follower counts
|
- 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
|
- Compile time compression
|
||||||
- Sonic search
|
- Sonic search
|
||||||
- Popular color schemes, including Nord, Gruvbox, and Catppuccin
|
- Popular color schemes, including Nord, Gruvbox, and Catppuccin
|
||||||
|
@ -124,10 +115,16 @@
|
||||||
- Improve system emails
|
- Improve system emails
|
||||||
- Mod mail
|
- Mod mail
|
||||||
- Focus trapping and button labels
|
- Focus trapping and button labels
|
||||||
|
- Meilisearch with filters
|
||||||
|
- Post editing
|
||||||
|
- Display remaining time on rate-limits
|
||||||
|
- Proper 2FA input dialog
|
||||||
|
- Let moderators see moderation nodes
|
||||||
|
- Non-mangled unicode emojis
|
||||||
|
- Skin tone selection support
|
||||||
|
|
||||||
## Implemented (remote)
|
## Implemented (remote)
|
||||||
|
|
||||||
|
|
||||||
- MissV: [fix Misskey Forkbomb](https://code.vtopia.live/Vtopia/MissV/commit/40b23c070bd4adbb3188c73546c6c625138fb3c1)
|
- MissV: [fix Misskey Forkbomb](https://code.vtopia.live/Vtopia/MissV/commit/40b23c070bd4adbb3188c73546c6c625138fb3c1)
|
||||||
- [Make showing ads optional](https://github.com/misskey-dev/misskey/pull/8996)
|
- [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)
|
- [Tapping avatar in mobile opens account modal](https://github.com/misskey-dev/misskey/pull/9056)
|
||||||
|
|
46
Dockerfile
46
Dockerfile
|
@ -1,10 +1,19 @@
|
||||||
## Install dev and compilation dependencies, build files
|
## Install dev and compilation dependencies, build files
|
||||||
FROM node:19-alpine as build
|
FROM alpine:3.18 as build
|
||||||
WORKDIR /calckey
|
WORKDIR /calckey
|
||||||
|
|
||||||
# Install compilation dependencies
|
# Install compilation dependencies
|
||||||
RUN apk update
|
RUN apk add --no-cache --no-progress git alpine-sdk python3 nodejs-current npm rust cargo vips
|
||||||
RUN apk add --no-cache --no-progress git alpine-sdk python3 rust cargo vips
|
|
||||||
|
# Copy only the cargo dependency-related files first, to cache efficiently
|
||||||
|
COPY packages/backend/native-utils/Cargo.toml packages/backend/native-utils/Cargo.toml
|
||||||
|
COPY packages/backend/native-utils/Cargo.lock packages/backend/native-utils/Cargo.lock
|
||||||
|
COPY packages/backend/native-utils/src/lib.rs packages/backend/native-utils/src/
|
||||||
|
COPY packages/backend/native-utils/migration/Cargo.toml packages/backend/native-utils/migration/Cargo.toml
|
||||||
|
COPY packages/backend/native-utils/migration/src/lib.rs packages/backend/native-utils/migration/src/
|
||||||
|
|
||||||
|
# Install cargo dependencies
|
||||||
|
RUN cargo fetch --locked --manifest-path /calckey/packages/backend/native-utils/Cargo.toml
|
||||||
|
|
||||||
# Copy only the dependency-related files first, to cache efficiently
|
# Copy only the dependency-related files first, to cache efficiently
|
||||||
COPY package.json pnpm*.yaml ./
|
COPY package.json pnpm*.yaml ./
|
||||||
|
@ -16,27 +25,31 @@ COPY packages/backend/native-utils/package.json packages/backend/native-utils/pa
|
||||||
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-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
|
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
|
# Configure corepack and pnpm, and install dev mode dependencies for compilation
|
||||||
RUN corepack enable
|
RUN corepack enable && corepack prepare pnpm@latest --activate && pnpm i --frozen-lockfile
|
||||||
RUN corepack prepare pnpm@latest --activate
|
|
||||||
|
|
||||||
# Install dev mode dependencies for compilation
|
# Copy in the rest of the native-utils rust files
|
||||||
RUN pnpm i --frozen-lockfile
|
COPY packages/backend/native-utils/.cargo packages/backend/native-utils/.cargo
|
||||||
|
COPY packages/backend/native-utils/build.rs packages/backend/native-utils/
|
||||||
|
COPY packages/backend/native-utils/src packages/backend/native-utils/src/
|
||||||
|
COPY packages/backend/native-utils/migration/src packages/backend/native-utils/migration/src/
|
||||||
|
|
||||||
# Copy in the rest of the files, to compile from TS to JS
|
# Compile native-utils
|
||||||
|
RUN pnpm run --filter native-utils build
|
||||||
|
|
||||||
|
# Copy in the rest of the files to compile
|
||||||
COPY . ./
|
COPY . ./
|
||||||
RUN pnpm run build
|
RUN env NODE_ENV=production sh -c "pnpm run --filter '!native-utils' build && pnpm run gulp"
|
||||||
|
|
||||||
# Trim down the dependencies to only the prod deps
|
# Trim down the dependencies to only those for production
|
||||||
RUN pnpm i --prod --frozen-lockfile
|
RUN pnpm i --prod --frozen-lockfile
|
||||||
|
|
||||||
|
|
||||||
## Runtime container
|
## Runtime container
|
||||||
FROM node:19-alpine
|
FROM alpine:3.18
|
||||||
WORKDIR /calckey
|
WORKDIR /calckey
|
||||||
|
|
||||||
# Install runtime dependencies
|
# Install runtime dependencies
|
||||||
RUN apk add --no-cache --no-progress tini ffmpeg vips-dev zip unzip rust cargo
|
RUN apk add --no-cache --no-progress tini ffmpeg vips-dev zip unzip nodejs-current
|
||||||
|
|
||||||
COPY . ./
|
COPY . ./
|
||||||
|
|
||||||
|
@ -52,8 +65,9 @@ COPY --from=build /calckey/built /calckey/built
|
||||||
COPY --from=build /calckey/packages/backend/built /calckey/packages/backend/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/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/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
|
RUN corepack enable && corepack prepare pnpm@latest --activate
|
||||||
|
ENV NODE_ENV=production
|
||||||
|
VOLUME "/calckey/files"
|
||||||
ENTRYPOINT [ "/sbin/tini", "--" ]
|
ENTRYPOINT [ "/sbin/tini", "--" ]
|
||||||
CMD [ "pnpm", "run", "migrateandstart" ]
|
CMD [ "pnpm", "run", "migrateandstart" ]
|
||||||
|
|
34
README.md
34
README.md
|
@ -27,6 +27,8 @@
|
||||||
- Read **[this document](./CALCKEY.md)** all for current and future differences.
|
- Read **[this document](./CALCKEY.md)** all for current and future differences.
|
||||||
- Notable differences:
|
- Notable differences:
|
||||||
- Improved UI/UX (especially on mobile)
|
- Improved UI/UX (especially on mobile)
|
||||||
|
- Post editing
|
||||||
|
- Content importing
|
||||||
- Improved notifications
|
- Improved notifications
|
||||||
- Improved server security
|
- Improved server security
|
||||||
- Improved accessibility
|
- Improved accessibility
|
||||||
|
@ -37,7 +39,7 @@
|
||||||
- Better intro tutorial
|
- Better intro tutorial
|
||||||
- Compatibility with Mastodon clients/apps
|
- Compatibility with Mastodon clients/apps
|
||||||
- Backfill user information
|
- Backfill user information
|
||||||
- Sonic search
|
- Advanced search
|
||||||
- Many more user and admin settings
|
- Many more user and admin settings
|
||||||
- [So much more!](./CALCKEY.md)
|
- [So much more!](./CALCKEY.md)
|
||||||
|
|
||||||
|
@ -47,17 +49,26 @@
|
||||||
|
|
||||||
# 🥂 Links
|
# 🥂 Links
|
||||||
|
|
||||||
- 💸 OpenCollective: <https://opencollective.com/Calckey>
|
### Want to get involved? Great!
|
||||||
- 💸 Liberapay: <https://liberapay.com/ThatOneCalculator>
|
|
||||||
|
- If you have the means to, [donations](https://opencollective.com/Calckey) are a great way to keep us going.
|
||||||
|
- If you know how to program in TypeScript, Vue, or Rust, read the [contributing](./CONTRIBUTING.md) document.
|
||||||
|
- If you know a non-English language, translating Calckey on [Weblate](https://hosted.weblate.org/engage/calckey/) help bring Calckey to more people. No technical experience needed!
|
||||||
|
- Want to write/report about us, have any professional inquiries, or just have questions to ask? Contact us [here!](https://calckey.org/contact/)
|
||||||
|
|
||||||
|
### All links
|
||||||
|
|
||||||
|
- 🌐 Homepage: <https://calckey.org>
|
||||||
|
- 💸 Donations:
|
||||||
|
- OpenCollective: <https://opencollective.com/Calckey>
|
||||||
|
- Liberapay: <https://liberapay.com/ThatOneCalculator>
|
||||||
- Donate publicly to get your name on the Patron list!
|
- Donate publicly to get your name on the Patron list!
|
||||||
- 🚢 Flagship server: <https://calckey.social>
|
- 🚢 Flagship server: <https://calckey.social>
|
||||||
- 📣 Official account: <https://i.calckey.cloud/@calckey>
|
|
||||||
- 💁 Matrix support room: <https://matrix.to/#/#calckey:matrix.fedibird.com>
|
- 💁 Matrix support room: <https://matrix.to/#/#calckey:matrix.fedibird.com>
|
||||||
- 📜 Server list: <https://calckey.fediverse.observer/list>
|
- 📣 Official account: <https://i.calckey.cloud/@calckey>
|
||||||
- 📖 JoinFediverse Wiki: <https://joinfediverse.wiki/What_is_Calckey%3F>
|
- 📜 Server list: <https://calckey.org/join>
|
||||||
- 🐋 Docker Hub: <https://hub.docker.com/r/thatonecalculator/calckey>
|
|
||||||
- ✍️ Weblate: <https://hosted.weblate.org/engage/calckey/>
|
- ✍️ Weblate: <https://hosted.weblate.org/engage/calckey/>
|
||||||
- 📦 Yunohost: <https://github.com/YunoHost-Apps/calckey_ynh>
|
- ️️📬 Contact: <https://calckey.org/contact/>
|
||||||
|
|
||||||
# 🌠 Getting started
|
# 🌠 Getting started
|
||||||
|
|
||||||
|
@ -84,6 +95,7 @@ If you have access to a server that supports one of the sources below, I recomme
|
||||||
- 🍀 Nginx (recommended)
|
- 🍀 Nginx (recommended)
|
||||||
- 🦦 Caddy
|
- 🦦 Caddy
|
||||||
- 🪶 Apache
|
- 🪶 Apache
|
||||||
|
- ⚡ [libvips](https://www.libvips.org/)
|
||||||
|
|
||||||
### 😗 Optional dependencies
|
### 😗 Optional dependencies
|
||||||
|
|
||||||
|
@ -95,7 +107,7 @@ If you have access to a server that supports one of the sources below, I recomme
|
||||||
|
|
||||||
### 🏗️ Build dependencies
|
### 🏗️ Build dependencies
|
||||||
|
|
||||||
- 🦀 At least [Rust](https://www.rust-lang.org/) v1.65.0
|
- 🦀 At least [Rust](https://www.rust-lang.org/) v1.68.0
|
||||||
- 🦬 C/C++ compiler & build tools
|
- 🦬 C/C++ compiler & build tools
|
||||||
- `build-essential` on Debian/Ubuntu Linux
|
- `build-essential` on Debian/Ubuntu Linux
|
||||||
- `base-devel` on Arch Linux
|
- `base-devel` on Arch Linux
|
||||||
|
@ -153,7 +165,7 @@ In Calckey's directory, fill out the `db` section of `.config/default.yml` with
|
||||||
|
|
||||||
### 🦔 Sonic
|
### 🦔 Sonic
|
||||||
|
|
||||||
Sonic is better suited for self hosters with smaller deployments. It's easier to use, uses almost no resources, and takes barely any any disk space.
|
Sonic is better suited for self hosters with smaller deployments. It uses almost no resources, barely any any disk space, and is relatively fast.
|
||||||
|
|
||||||
Follow sonic's [installation guide](https://github.com/valeriansaliou/sonic#installation)
|
Follow sonic's [installation guide](https://github.com/valeriansaliou/sonic#installation)
|
||||||
|
|
||||||
|
@ -247,4 +259,4 @@ pm2 start "NODE_ENV=production pnpm run start" --name Calckey
|
||||||
- Go back to Overview > click the clipboard icon next to the ID
|
- Go back to Overview > click the clipboard icon next to the ID
|
||||||
- Run `psql -d calckey` (or whatever the database name is)
|
- Run `psql -d calckey` (or whatever the database name is)
|
||||||
- Run `UPDATE "user" SET "isAdmin" = true WHERE id='999999';` (replace `999999` with the copied ID)
|
- Run `UPDATE "user" SET "isAdmin" = true WHERE id='999999';` (replace `999999` with the copied ID)
|
||||||
- Have the new admin log out and log back in
|
- Restart your Calckey server
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
import { defineConfig } from 'cypress'
|
import { defineConfig } from "cypress";
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
e2e: {
|
e2e: {
|
||||||
// We've imported your old cypress plugins here.
|
// We've imported your old cypress plugins here.
|
||||||
// You may want to clean this up later by importing these.
|
// You may want to clean this up later by importing these.
|
||||||
setupNodeEvents(on, config) {
|
setupNodeEvents(on, config) {
|
||||||
return require('./cypress/plugins/index.js')(on, config)
|
return require("./cypress/plugins/index.js")(on, config);
|
||||||
},
|
},
|
||||||
baseUrl: 'http://localhost:61812',
|
baseUrl: "http://localhost:61812",
|
||||||
},
|
},
|
||||||
})
|
});
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
describe('Before setup instance', () => {
|
describe("Before setup instance", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.resetState();
|
cy.resetState();
|
||||||
});
|
});
|
||||||
|
@ -9,31 +9,31 @@ describe('Before setup instance', () => {
|
||||||
cy.wait(1000);
|
cy.wait(1000);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('successfully loads', () => {
|
it("successfully loads", () => {
|
||||||
cy.visit('/');
|
cy.visit("/");
|
||||||
});
|
});
|
||||||
|
|
||||||
it('setup instance', () => {
|
it("setup instance", () => {
|
||||||
cy.visit('/');
|
cy.visit("/");
|
||||||
|
|
||||||
cy.intercept('POST', '/api/admin/accounts/create').as('signup');
|
cy.intercept("POST", "/api/admin/accounts/create").as("signup");
|
||||||
|
|
||||||
cy.get('[data-cy-admin-username] input').type('admin');
|
cy.get("[data-cy-admin-username] input").type("admin");
|
||||||
cy.get('[data-cy-admin-password] input').type('admin1234');
|
cy.get("[data-cy-admin-password] input").type("admin1234");
|
||||||
cy.get('[data-cy-admin-ok]').click();
|
cy.get("[data-cy-admin-ok]").click();
|
||||||
|
|
||||||
// なぜか動かない
|
// なぜか動かない
|
||||||
//cy.wait('@signup').should('have.property', 'response.statusCode');
|
//cy.wait('@signup').should('have.property', 'response.statusCode');
|
||||||
cy.wait('@signup');
|
cy.wait("@signup");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('After setup instance', () => {
|
describe("After setup instance", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.resetState();
|
cy.resetState();
|
||||||
|
|
||||||
// インスタンス初期セットアップ
|
// インスタンス初期セットアップ
|
||||||
cy.registerUser('admin', 'pass', true);
|
cy.registerUser("admin", "pass", true);
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
|
@ -42,34 +42,34 @@ describe('After setup instance', () => {
|
||||||
cy.wait(1000);
|
cy.wait(1000);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('successfully loads', () => {
|
it("successfully loads", () => {
|
||||||
cy.visit('/');
|
cy.visit("/");
|
||||||
});
|
});
|
||||||
|
|
||||||
it('signup', () => {
|
it("signup", () => {
|
||||||
cy.visit('/');
|
cy.visit("/");
|
||||||
|
|
||||||
cy.intercept('POST', '/api/signup').as('signup');
|
cy.intercept("POST", "/api/signup").as("signup");
|
||||||
|
|
||||||
cy.get('[data-cy-signup]').click();
|
cy.get("[data-cy-signup]").click();
|
||||||
cy.get('[data-cy-signup-username] input').type('alice');
|
cy.get("[data-cy-signup-username] input").type("alice");
|
||||||
cy.get('[data-cy-signup-password] input').type('alice1234');
|
cy.get("[data-cy-signup-password] input").type("alice1234");
|
||||||
cy.get('[data-cy-signup-password-retype] input').type('alice1234');
|
cy.get("[data-cy-signup-password-retype] input").type("alice1234");
|
||||||
cy.get('[data-cy-signup-submit]').click();
|
cy.get("[data-cy-signup-submit]").click();
|
||||||
|
|
||||||
cy.wait('@signup');
|
cy.wait("@signup");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('After user signup', () => {
|
describe("After user signup", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.resetState();
|
cy.resetState();
|
||||||
|
|
||||||
// インスタンス初期セットアップ
|
// インスタンス初期セットアップ
|
||||||
cy.registerUser('admin', 'pass', true);
|
cy.registerUser("admin", "pass", true);
|
||||||
|
|
||||||
// ユーザー作成
|
// ユーザー作成
|
||||||
cy.registerUser('alice', 'alice1234');
|
cy.registerUser("alice", "alice1234");
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
|
@ -78,51 +78,53 @@ describe('After user signup', () => {
|
||||||
cy.wait(1000);
|
cy.wait(1000);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('successfully loads', () => {
|
it("successfully loads", () => {
|
||||||
cy.visit('/');
|
cy.visit("/");
|
||||||
});
|
});
|
||||||
|
|
||||||
it('signin', () => {
|
it("signin", () => {
|
||||||
cy.visit('/');
|
cy.visit("/");
|
||||||
|
|
||||||
cy.intercept('POST', '/api/signin').as('signin');
|
cy.intercept("POST", "/api/signin").as("signin");
|
||||||
|
|
||||||
cy.get('[data-cy-signin]').click();
|
cy.get("[data-cy-signin]").click();
|
||||||
cy.get('[data-cy-signin-username] input').type('alice');
|
cy.get("[data-cy-signin-username] input").type("alice");
|
||||||
// Enterキーでサインインできるかの確認も兼ねる
|
// Enterキーでサインインできるかの確認も兼ねる
|
||||||
cy.get('[data-cy-signin-password] input').type('alice1234{enter}');
|
cy.get("[data-cy-signin-password] input").type("alice1234{enter}");
|
||||||
|
|
||||||
cy.wait('@signin');
|
cy.wait("@signin");
|
||||||
});
|
});
|
||||||
|
|
||||||
it('suspend', function() {
|
it("suspend", function () {
|
||||||
cy.request('POST', '/api/admin/suspend-user', {
|
cy.request("POST", "/api/admin/suspend-user", {
|
||||||
i: this.admin.token,
|
i: this.admin.token,
|
||||||
userId: this.alice.id,
|
userId: this.alice.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
cy.visit('/');
|
cy.visit("/");
|
||||||
|
|
||||||
cy.get('[data-cy-signin]').click();
|
cy.get("[data-cy-signin]").click();
|
||||||
cy.get('[data-cy-signin-username] input').type('alice');
|
cy.get("[data-cy-signin-username] input").type("alice");
|
||||||
cy.get('[data-cy-signin-password] input').type('alice1234{enter}');
|
cy.get("[data-cy-signin-password] input").type("alice1234{enter}");
|
||||||
|
|
||||||
// TODO: cypressにブラウザの言語指定できる機能が実装され次第英語のみテストするようにする
|
// TODO: cypressにブラウザの言語指定できる機能が実装され次第英語のみテストするようにする
|
||||||
cy.contains(/アカウントが凍結されています|This account has been suspended due to/gi);
|
cy.contains(
|
||||||
|
/アカウントが凍結されています|This account has been suspended due to/gi,
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('After user singed in', () => {
|
describe("After user singed in", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.resetState();
|
cy.resetState();
|
||||||
|
|
||||||
// インスタンス初期セットアップ
|
// インスタンス初期セットアップ
|
||||||
cy.registerUser('admin', 'pass', true);
|
cy.registerUser("admin", "pass", true);
|
||||||
|
|
||||||
// ユーザー作成
|
// ユーザー作成
|
||||||
cy.registerUser('alice', 'alice1234');
|
cy.registerUser("alice", "alice1234");
|
||||||
|
|
||||||
cy.login('alice', 'alice1234');
|
cy.login("alice", "alice1234");
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
|
@ -131,17 +133,17 @@ describe('After user singed in', () => {
|
||||||
cy.wait(1000);
|
cy.wait(1000);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('successfully loads', () => {
|
it("successfully loads", () => {
|
||||||
cy.get('[data-cy-open-post-form]').should('be.visible');
|
cy.get("[data-cy-open-post-form]").should("be.visible");
|
||||||
});
|
});
|
||||||
|
|
||||||
it('note', () => {
|
it("note", () => {
|
||||||
cy.get('[data-cy-open-post-form]').click();
|
cy.get("[data-cy-open-post-form]").click();
|
||||||
cy.get('[data-cy-post-form-text]').type('Hello, Misskey!');
|
cy.get("[data-cy-post-form-text]").type("Hello, Misskey!");
|
||||||
cy.get('[data-cy-open-post-form-submit]').click();
|
cy.get("[data-cy-open-post-form-submit]").click();
|
||||||
|
|
||||||
cy.contains('Hello, Misskey!');
|
cy.contains("Hello, Misskey!");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: 投稿フォームの公開範囲指定のテスト
|
// TODO: 投稿フォームの公開範囲指定のテスト
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
describe('After user signed in', () => {
|
describe("After user signed in", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.resetState();
|
cy.resetState();
|
||||||
cy.viewport('macbook-16');
|
cy.viewport("macbook-16");
|
||||||
// インスタンス初期セットアップ
|
// インスタンス初期セットアップ
|
||||||
cy.registerUser('admin', 'pass', true);
|
cy.registerUser("admin", "pass", true);
|
||||||
|
|
||||||
// ユーザー作成
|
// ユーザー作成
|
||||||
cy.registerUser('alice', 'alice1234');
|
cy.registerUser("alice", "alice1234");
|
||||||
|
|
||||||
cy.login('alice', 'alice1234');
|
cy.login("alice", "alice1234");
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
|
@ -17,47 +17,47 @@ describe('After user signed in', () => {
|
||||||
cy.wait(1000);
|
cy.wait(1000);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('widget edit toggle is visible', () => {
|
it("widget edit toggle is visible", () => {
|
||||||
cy.get('.mk-widget-edit').should('be.visible');
|
cy.get(".mk-widget-edit").should("be.visible");
|
||||||
});
|
});
|
||||||
|
|
||||||
it('widget select should be visible in edit mode', () => {
|
it("widget select should be visible in edit mode", () => {
|
||||||
cy.get('.mk-widget-edit').click();
|
cy.get(".mk-widget-edit").click();
|
||||||
cy.get('.mk-widget-select').should('be.visible');
|
cy.get(".mk-widget-select").should("be.visible");
|
||||||
});
|
});
|
||||||
|
|
||||||
it('first widget should be removed', () => {
|
it("first widget should be removed", () => {
|
||||||
cy.get('.mk-widget-edit').click();
|
cy.get(".mk-widget-edit").click();
|
||||||
cy.get('.customize-container:first-child .remove._button').click();
|
cy.get(".customize-container:first-child .remove._button").click();
|
||||||
cy.get('.customize-container').should('have.length', 2);
|
cy.get(".customize-container").should("have.length", 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
function buildWidgetTest(widgetName) {
|
function buildWidgetTest(widgetName) {
|
||||||
it(`${widgetName} widget should get added`, () => {
|
it(`${widgetName} widget should get added`, () => {
|
||||||
cy.get('.mk-widget-edit').click();
|
cy.get(".mk-widget-edit").click();
|
||||||
cy.get('.mk-widget-select select').select(widgetName, { force: true });
|
cy.get(".mk-widget-select select").select(widgetName, { force: true });
|
||||||
cy.get('.bg._modalBg.transparent').click({ multiple: true, force: true });
|
cy.get(".bg._modalBg.transparent").click({ multiple: true, force: true });
|
||||||
cy.get('.mk-widget-add').click({ force: true });
|
cy.get(".mk-widget-add").click({ force: true });
|
||||||
cy.get(`.mkw-${widgetName}`).should('exist');
|
cy.get(`.mkw-${widgetName}`).should("exist");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
buildWidgetTest('memo');
|
buildWidgetTest("memo");
|
||||||
buildWidgetTest('notifications');
|
buildWidgetTest("notifications");
|
||||||
buildWidgetTest('timeline');
|
buildWidgetTest("timeline");
|
||||||
buildWidgetTest('calendar');
|
buildWidgetTest("calendar");
|
||||||
buildWidgetTest('rss');
|
buildWidgetTest("rss");
|
||||||
buildWidgetTest('trends');
|
buildWidgetTest("trends");
|
||||||
buildWidgetTest('clock');
|
buildWidgetTest("clock");
|
||||||
buildWidgetTest('activity');
|
buildWidgetTest("activity");
|
||||||
buildWidgetTest('photos');
|
buildWidgetTest("photos");
|
||||||
buildWidgetTest('digitalClock');
|
buildWidgetTest("digitalClock");
|
||||||
buildWidgetTest('federation');
|
buildWidgetTest("federation");
|
||||||
buildWidgetTest('postForm');
|
buildWidgetTest("postForm");
|
||||||
buildWidgetTest('slideshow');
|
buildWidgetTest("slideshow");
|
||||||
buildWidgetTest('serverMetric');
|
buildWidgetTest("serverMetric");
|
||||||
buildWidgetTest('onlineUsers');
|
buildWidgetTest("onlineUsers");
|
||||||
buildWidgetTest('jobQueue');
|
buildWidgetTest("jobQueue");
|
||||||
buildWidgetTest('button');
|
buildWidgetTest("button");
|
||||||
buildWidgetTest('aiscript');
|
buildWidgetTest("aiscript");
|
||||||
});
|
});
|
||||||
|
|
|
@ -16,6 +16,6 @@
|
||||||
* @type {Cypress.PluginConfig}
|
* @type {Cypress.PluginConfig}
|
||||||
*/
|
*/
|
||||||
module.exports = (on, config) => {
|
module.exports = (on, config) => {
|
||||||
// `on` is used to hook into various events Cypress emits
|
// `on` is used to hook into various events Cypress emits
|
||||||
// `config` is the resolved Cypress config
|
// `config` is the resolved Cypress config
|
||||||
}
|
};
|
||||||
|
|
|
@ -24,32 +24,34 @@
|
||||||
// -- This will overwrite an existing command --
|
// -- This will overwrite an existing command --
|
||||||
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
|
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
|
||||||
|
|
||||||
Cypress.Commands.add('resetState', () => {
|
Cypress.Commands.add("resetState", () => {
|
||||||
cy.window(win => {
|
cy.window((win) => {
|
||||||
win.indexedDB.deleteDatabase('keyval-store');
|
win.indexedDB.deleteDatabase("keyval-store");
|
||||||
});
|
});
|
||||||
cy.request('POST', '/api/reset-db').as('reset');
|
cy.request("POST", "/api/reset-db").as("reset");
|
||||||
cy.get('@reset').its('status').should('equal', 204);
|
cy.get("@reset").its("status").should("equal", 204);
|
||||||
cy.reload(true);
|
cy.reload(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
Cypress.Commands.add('registerUser', (username, password, isAdmin = false) => {
|
Cypress.Commands.add("registerUser", (username, password, isAdmin = false) => {
|
||||||
const route = isAdmin ? '/api/admin/accounts/create' : '/api/signup';
|
const route = isAdmin ? "/api/admin/accounts/create" : "/api/signup";
|
||||||
|
|
||||||
cy.request('POST', route, {
|
cy.request("POST", route, {
|
||||||
username: username,
|
username: username,
|
||||||
password: password,
|
password: password,
|
||||||
}).its('body').as(username);
|
})
|
||||||
|
.its("body")
|
||||||
|
.as(username);
|
||||||
});
|
});
|
||||||
|
|
||||||
Cypress.Commands.add('login', (username, password) => {
|
Cypress.Commands.add("login", (username, password) => {
|
||||||
cy.visit('/');
|
cy.visit("/");
|
||||||
|
|
||||||
cy.intercept('POST', '/api/signin').as('signin');
|
cy.intercept("POST", "/api/signin").as("signin");
|
||||||
|
|
||||||
cy.get('[data-cy-signin]').click();
|
cy.get("[data-cy-signin]").click();
|
||||||
cy.get('[data-cy-signin-username] input').type(username);
|
cy.get("[data-cy-signin-username] input").type(username);
|
||||||
cy.get('[data-cy-signin-password] input').type(`${password}{enter}`);
|
cy.get("[data-cy-signin-password] input").type(`${password}{enter}`);
|
||||||
|
|
||||||
cy.wait('@signin').as('signedIn');
|
cy.wait("@signin").as("signedIn");
|
||||||
});
|
});
|
||||||
|
|
|
@ -14,19 +14,21 @@
|
||||||
// ***********************************************************
|
// ***********************************************************
|
||||||
|
|
||||||
// Import commands.js using ES2015 syntax:
|
// Import commands.js using ES2015 syntax:
|
||||||
import './commands'
|
import "./commands";
|
||||||
|
|
||||||
// Alternatively you can use CommonJS syntax:
|
// Alternatively you can use CommonJS syntax:
|
||||||
// require('./commands')
|
// require('./commands')
|
||||||
|
|
||||||
Cypress.on('uncaught:exception', (err, runnable) => {
|
Cypress.on("uncaught:exception", (err, runnable) => {
|
||||||
if ([
|
if (
|
||||||
// Chrome
|
[
|
||||||
'ResizeObserver loop limit exceeded',
|
// Chrome
|
||||||
|
"ResizeObserver loop limit exceeded",
|
||||||
|
|
||||||
// Firefox
|
// Firefox
|
||||||
'ResizeObserver loop completed with undelivered notifications',
|
"ResizeObserver loop completed with undelivered notifications",
|
||||||
].some(msg => err.message.includes(msg))) {
|
].some((msg) => err.message.includes(msg))
|
||||||
|
) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -19,8 +19,6 @@ services:
|
||||||
environment:
|
environment:
|
||||||
NODE_ENV: production
|
NODE_ENV: production
|
||||||
volumes:
|
volumes:
|
||||||
- ./.cargo-cache:/root/.cargo
|
|
||||||
- ./.cargo-target:/calckey/packages/backend/native-utils/target
|
|
||||||
- ./files:/calckey/files
|
- ./files:/calckey/files
|
||||||
- ./.config:/calckey/.config:ro
|
- ./.config:/calckey/.config:ro
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
# API Documentation
|
||||||
|
|
||||||
|
You can find interactive API documentation at any Calckey instance. https://calckey.social/api-doc
|
||||||
|
|
||||||
|
You can also find auto-generated documentation for calckey-js [here](../packages/calckey-js/markdown/calckey-js.md).
|
|
@ -1,18 +1,28 @@
|
||||||
name: Bug Report
|
name: 🐛 Bug Report
|
||||||
about: File a bug report
|
about: File a bug report
|
||||||
title: "[Bug]: "
|
title: "[Bug]: "
|
||||||
|
blank_issues_enabled: true
|
||||||
|
contact_links:
|
||||||
|
- name: 💁 Support Matrix
|
||||||
|
url: https://matrix.to/#/%23calckey:matrix.fedibird.com
|
||||||
|
about: Having trouble with deployment? Ask the support chat.
|
||||||
|
- name: 🔒 Resposible Disclosure
|
||||||
|
url: https://codeberg.org/calckey/calckey/src/branch/develop/SECURITY.md
|
||||||
|
about: Found a security vulnerability? Please disclose it responsibly.
|
||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
Thanks for taking the time to fill out this bug report!
|
💖 Thanks for taking the time to fill out this bug report!
|
||||||
|
💁 Having trouble with deployment? [Ask the support chat.](https://matrix.to/#/%23calckey:matrix.fedibird.com)
|
||||||
|
🔒 Found a security vulnerability? [Please disclose it responsibly.](https://codeberg.org/calckey/calckey/src/branch/develop/SECURITY.md)
|
||||||
|
🤝 By submitting this issue, you agree to follow our [Contribution Guidelines.](https://codeberg.org/calckey/calckey/src/branch/develop/CONTRIBUTING.md)
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: what-happened
|
id: what-happened
|
||||||
attributes:
|
attributes:
|
||||||
label: What happened?
|
label: What happened?
|
||||||
description: Please give us a brief description of what happened.
|
description: Please give us a brief description of what happened.
|
||||||
placeholder: Tell us what you see!
|
placeholder: Tell us what you see!
|
||||||
value: "A bug happened!"
|
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: textarea
|
- type: textarea
|
||||||
|
@ -21,7 +31,6 @@ body:
|
||||||
label: What did you expect to happen?
|
label: What did you expect to happen?
|
||||||
description: Please give us a brief description of what you expected to happen.
|
description: Please give us a brief description of what you expected to happen.
|
||||||
placeholder: Tell us what you wish happened!
|
placeholder: Tell us what you wish happened!
|
||||||
value: "Instead of x, y should happen instead!"
|
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: input
|
- type: input
|
||||||
|
@ -29,7 +38,7 @@ body:
|
||||||
attributes:
|
attributes:
|
||||||
label: Version
|
label: Version
|
||||||
description: What version of calckey is your instance running? You can find this by clicking your instance's logo at the bottom left and then clicking instance information.
|
description: What version of calckey is your instance running? You can find this by clicking your instance's logo at the bottom left and then clicking instance information.
|
||||||
placeholder: Calckey Version 13.0.4
|
placeholder: v13.1.4.1
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: input
|
- type: input
|
||||||
|
@ -37,15 +46,26 @@ body:
|
||||||
attributes:
|
attributes:
|
||||||
label: Instance
|
label: Instance
|
||||||
description: What instance of calckey are you using?
|
description: What instance of calckey are you using?
|
||||||
placeholder: stop.voring.me
|
placeholder: calckey.social
|
||||||
validations:
|
validations:
|
||||||
required: false
|
required: false
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
id: browsers
|
id: issue-type
|
||||||
attributes:
|
attributes:
|
||||||
label: What browser are you using?
|
label: What type of issue is this?
|
||||||
|
description: If this happens on your device and has to do with the user interface, it's client-side. If this happens on either with the API or the backend, or you got a server-side error in the client, it's server-side.
|
||||||
multiple: false
|
multiple: false
|
||||||
options:
|
options:
|
||||||
|
- Client-side
|
||||||
|
- Server-side
|
||||||
|
- Other (Please Specify)
|
||||||
|
- type: dropdown
|
||||||
|
id: browsers
|
||||||
|
attributes:
|
||||||
|
label: What browser are you using? (Client-side issues only)
|
||||||
|
multiple: false
|
||||||
|
options:
|
||||||
|
- N/A
|
||||||
- Firefox
|
- Firefox
|
||||||
- Chrome
|
- Chrome
|
||||||
- Brave
|
- Brave
|
||||||
|
@ -54,6 +74,50 @@ body:
|
||||||
- Safari
|
- Safari
|
||||||
- Microsoft Edge
|
- Microsoft Edge
|
||||||
- Other (Please Specify)
|
- Other (Please Specify)
|
||||||
|
- type: dropdown
|
||||||
|
id: device
|
||||||
|
attributes:
|
||||||
|
label: What operating system are you using? (Client-side issues only)
|
||||||
|
multiple: false
|
||||||
|
options:
|
||||||
|
- N/A
|
||||||
|
- Windows
|
||||||
|
- MacOS
|
||||||
|
- Linux
|
||||||
|
- Android
|
||||||
|
- iOS
|
||||||
|
- Other (Please Specify)
|
||||||
|
- type: dropdown
|
||||||
|
id: deplotment-method
|
||||||
|
attributes:
|
||||||
|
label: How do you deploy Calckey on your server? (Server-side issues only)
|
||||||
|
multiple: false
|
||||||
|
options:
|
||||||
|
- N/A
|
||||||
|
- Manual
|
||||||
|
- Ubuntu Install Script
|
||||||
|
- Docker Compose
|
||||||
|
- Docker Prebuilt Image
|
||||||
|
- Helm Chart
|
||||||
|
- YunoHost
|
||||||
|
- AUR Package
|
||||||
|
- Other (Please Specify)
|
||||||
|
- type: dropdown
|
||||||
|
id: operating-system
|
||||||
|
attributes:
|
||||||
|
label: What operating system are you using? (Server-side issues only)
|
||||||
|
multiple: false
|
||||||
|
options:
|
||||||
|
- N/A
|
||||||
|
- Ubuntu >= 22.04
|
||||||
|
- Ubuntu < 22.04
|
||||||
|
- Debian
|
||||||
|
- Arch
|
||||||
|
- RHEL (CentOS/AlmaLinux/Rocky Linux)
|
||||||
|
- FreeBSD
|
||||||
|
- OpenBSD
|
||||||
|
- Android
|
||||||
|
- Other (Please Specify)
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: logs
|
id: logs
|
||||||
attributes:
|
attributes:
|
||||||
|
@ -68,3 +132,5 @@ body:
|
||||||
options:
|
options:
|
||||||
- label: I agree to follow this project's Contribution Guidelines
|
- label: I agree to follow this project's Contribution Guidelines
|
||||||
required: true
|
required: true
|
||||||
|
- label: I have searched the issue tracker for similar issues, and this is not a duplicate.
|
||||||
|
required: true
|
||||||
|
|
|
@ -1,18 +1,28 @@
|
||||||
name: Feature Request
|
name: ✨ Feature Request
|
||||||
about: Request a Feature
|
about: Request a Feature
|
||||||
title: "[Feature]: "
|
title: "[Feature]: "
|
||||||
|
blank_issues_enabled: true
|
||||||
|
contact_links:
|
||||||
|
- name: 💁 Support Matrix
|
||||||
|
url: https://matrix.to/#/%23calckey:matrix.fedibird.com
|
||||||
|
about: Having trouble with deployment? Ask the support chat.
|
||||||
|
- name: 🔒 Resposible Disclosure
|
||||||
|
url: https://codeberg.org/calckey/calckey/src/branch/develop/SECURITY.md
|
||||||
|
about: Found a security vulnerability? Please disclose it responsibly.
|
||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
Thanks for taking the time to fill out this feature request!
|
💖 Thanks for taking the time to fill out this feature request!
|
||||||
|
💁 Having trouble with deployment? [Ask the support chat.](https://matrix.to/#/%23calckey:matrix.fedibird.com)
|
||||||
|
🔒 Found a security vulnerability? [Please disclose it responsibly.](https://codeberg.org/calckey/calckey/src/branch/develop/SECURITY.md)
|
||||||
|
🤝 By submitting this issue, you agree to follow our [Contribution Guidelines.](https://codeberg.org/calckey/calckey/src/branch/develop/CONTRIBUTING.md)
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: what-feature
|
id: what-feature
|
||||||
attributes:
|
attributes:
|
||||||
label: What feature would you like implemented?
|
label: What feature would you like implemented?
|
||||||
description: Please give us a brief description of what you'd like.
|
description: Please give us a brief description of what you'd like.
|
||||||
placeholder: Tell us what you want!
|
placeholder: Tell us what you want!
|
||||||
value: "x feature would be great!"
|
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: textarea
|
- type: textarea
|
||||||
|
@ -21,7 +31,6 @@ body:
|
||||||
label: Why should we add this feature?
|
label: Why should we add this feature?
|
||||||
description: Please give us a brief description of why your feature is important.
|
description: Please give us a brief description of why your feature is important.
|
||||||
placeholder: Tell us why you want this feature!
|
placeholder: Tell us why you want this feature!
|
||||||
value: "x feature is super useful because y!"
|
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: input
|
- type: input
|
||||||
|
@ -29,7 +38,7 @@ body:
|
||||||
attributes:
|
attributes:
|
||||||
label: Version
|
label: Version
|
||||||
description: What version of calckey is your instance running? You can find this by clicking your instance's logo at the bottom left and then clicking instance information.
|
description: What version of calckey is your instance running? You can find this by clicking your instance's logo at the bottom left and then clicking instance information.
|
||||||
placeholder: Calckey Version 13.0.4
|
placeholder: Calckey Version 13.1.4.1
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: input
|
- type: input
|
||||||
|
@ -37,29 +46,9 @@ body:
|
||||||
attributes:
|
attributes:
|
||||||
label: Instance
|
label: Instance
|
||||||
description: What instance of calckey are you using?
|
description: What instance of calckey are you using?
|
||||||
placeholder: stop.voring.me
|
placeholder: calckey.social
|
||||||
validations:
|
validations:
|
||||||
required: false
|
required: false
|
||||||
- type: dropdown
|
|
||||||
id: browsers
|
|
||||||
attributes:
|
|
||||||
label: What browser are you using?
|
|
||||||
multiple: false
|
|
||||||
options:
|
|
||||||
- Firefox
|
|
||||||
- Chrome
|
|
||||||
- Brave
|
|
||||||
- Librewolf
|
|
||||||
- Chromium
|
|
||||||
- Safari
|
|
||||||
- Microsoft Edge
|
|
||||||
- Other (Please Specify)
|
|
||||||
- type: textarea
|
|
||||||
id: logs
|
|
||||||
attributes:
|
|
||||||
label: Relevant log output
|
|
||||||
description: Please copy and paste any relevant log output. You can find your log by inspecting the page, and going to the "console" tab. This will be automatically formatted into code, so no need for backticks.
|
|
||||||
render: shell
|
|
||||||
- type: checkboxes
|
- type: checkboxes
|
||||||
id: terms
|
id: terms
|
||||||
attributes:
|
attributes:
|
||||||
|
@ -68,3 +57,5 @@ body:
|
||||||
options:
|
options:
|
||||||
- label: I agree to follow this project's Contribution Guidelines
|
- label: I agree to follow this project's Contribution Guidelines
|
||||||
required: true
|
required: true
|
||||||
|
- label: I have searched the issue tracker for similar requests, and this is not a duplicate.
|
||||||
|
required: true
|
||||||
|
|
|
@ -1049,8 +1049,8 @@ _tutorial:
|
||||||
step6_4: "Now go, explore, and have fun!"
|
step6_4: "Now go, explore, and have fun!"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "سجلت سلفًا جهازًا للاستيثاق بعاملين."
|
alreadyRegistered: "سجلت سلفًا جهازًا للاستيثاق بعاملين."
|
||||||
registerDevice: "سجّل جهازًا جديدًا"
|
registerTOTP: "سجّل جهازًا جديدًا"
|
||||||
registerKey: "تسجيل مفتاح أمان جديد"
|
registerSecurityKey: "تسجيل مفتاح أمان جديد"
|
||||||
step1: "أولًا ثبّت تطبيق استيثاق على جهازك (مثل {a} و{b})."
|
step1: "أولًا ثبّت تطبيق استيثاق على جهازك (مثل {a} و{b})."
|
||||||
step2: "امسح رمز الاستجابة السريعة الموجد على الشاشة."
|
step2: "امسح رمز الاستجابة السريعة الموجد على الشاشة."
|
||||||
step3: "أدخل الرمز الموجود في تطبيقك لإكمال التثبيت."
|
step3: "أدخل الرمز الموجود في تطبيقك لإكمال التثبيت."
|
||||||
|
|
|
@ -1130,8 +1130,8 @@ _tutorial:
|
||||||
step6_4: "Now go, explore, and have fun!"
|
step6_4: "Now go, explore, and have fun!"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "আপনি ইতিমধ্যে একটি 2-ফ্যাক্টর অথেনটিকেশন ডিভাইস নিবন্ধন করেছেন৷"
|
alreadyRegistered: "আপনি ইতিমধ্যে একটি 2-ফ্যাক্টর অথেনটিকেশন ডিভাইস নিবন্ধন করেছেন৷"
|
||||||
registerDevice: "নতুন ডিভাইস নিবন্ধন করুন"
|
registerTOTP: "নতুন ডিভাইস নিবন্ধন করুন"
|
||||||
registerKey: "সিকিউরিটি কী নিবন্ধন করুন"
|
registerSecurityKey: "সিকিউরিটি কী নিবন্ধন করুন"
|
||||||
step1: "প্রথমে, আপনার ডিভাইসে {a} বা {b} এর মতো একটি অথেনটিকেশন অ্যাপ ইনস্টল করুন৷"
|
step1: "প্রথমে, আপনার ডিভাইসে {a} বা {b} এর মতো একটি অথেনটিকেশন অ্যাপ ইনস্টল করুন৷"
|
||||||
step2: "এরপরে, অ্যাপের সাহায্যে প্রদর্শিত QR কোডটি স্ক্যান করুন।"
|
step2: "এরপরে, অ্যাপের সাহায্যে প্রদর্শিত QR কোডটি স্ক্যান করুন।"
|
||||||
step2Url: "ডেস্কটপ অ্যাপে, নিম্নলিখিত URL লিখুন:"
|
step2Url: "ডেস্কটপ অ্যাপে, নিম্নলিখিত URL লিখুন:"
|
||||||
|
|
|
@ -67,7 +67,7 @@ files: "Fitxers"
|
||||||
download: "Baixa"
|
download: "Baixa"
|
||||||
driveFileDeleteConfirm: "Segur que vols eliminar el fitxer «{name}»? S'eliminarà de
|
driveFileDeleteConfirm: "Segur que vols eliminar el fitxer «{name}»? S'eliminarà de
|
||||||
totes les notes que el continguin com a fitxer adjunt."
|
totes les notes que el continguin com a fitxer adjunt."
|
||||||
unfollowConfirm: "Segur que vols deixar de seguir {name}?"
|
unfollowConfirm: "Segur que vols deixar de seguir a {name}?"
|
||||||
exportRequested: "Has sol·licitat una exportació. Això pot trigar una estona. S'afegirà
|
exportRequested: "Has sol·licitat una exportació. Això pot trigar una estona. S'afegirà
|
||||||
al teu Disc un cop completada."
|
al teu Disc un cop completada."
|
||||||
importRequested: "Has sol·licitat una importació. Això pot trigar una estona."
|
importRequested: "Has sol·licitat una importació. Això pot trigar una estona."
|
||||||
|
@ -136,10 +136,10 @@ smtpUser: "Nom d'usuari"
|
||||||
smtpPass: "Contrasenya"
|
smtpPass: "Contrasenya"
|
||||||
user: "Usuari"
|
user: "Usuari"
|
||||||
searchByGoogle: "Cercar"
|
searchByGoogle: "Cercar"
|
||||||
file: "Fitxers"
|
file: "Fitxer"
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "t'ha seguit"
|
title: "Tens un nou seguidor"
|
||||||
_receiveFollowRequest:
|
_receiveFollowRequest:
|
||||||
title: Heu rebut una sol·licitud de seguiment
|
title: Heu rebut una sol·licitud de seguiment
|
||||||
_mfm:
|
_mfm:
|
||||||
|
@ -228,6 +228,11 @@ _mfm:
|
||||||
alwaysPlay: Reprodueix automàticament tots els MFM animats
|
alwaysPlay: Reprodueix automàticament tots els MFM animats
|
||||||
fade: Esvair
|
fade: Esvair
|
||||||
fadeDescription: Esvaeix el contingut cap a dintre i cap en fora.
|
fadeDescription: Esvaeix el contingut cap a dintre i cap en fora.
|
||||||
|
crop: Retallar
|
||||||
|
advanced: MFM avançat
|
||||||
|
advancedDescription: Si està desactivat, només permet l'etiquetatge bàsic tret que
|
||||||
|
es reproduïnt un MFM animat
|
||||||
|
cropDescription: Retalla el contingut.
|
||||||
_theme:
|
_theme:
|
||||||
keys:
|
keys:
|
||||||
mention: "Menció"
|
mention: "Menció"
|
||||||
|
@ -314,21 +319,40 @@ _sfx:
|
||||||
_2fa:
|
_2fa:
|
||||||
step2Url: "També pots inserir aquest enllaç i utilitzes una aplicació d'escriptori:"
|
step2Url: "També pots inserir aquest enllaç i utilitzes una aplicació d'escriptori:"
|
||||||
alreadyRegistered: Ja heu registrat un dispositiu d'autenticació de dos factors.
|
alreadyRegistered: Ja heu registrat un dispositiu d'autenticació de dos factors.
|
||||||
registerDevice: Registrar un dispositiu nou
|
registerTOTP: Registrar un dispositiu nou
|
||||||
securityKeyInfo: A més de l'autenticació d'empremta digital o PIN, també podeu configurar
|
securityKeyInfo: A més de l'autenticació d'empremta digital o PIN, també podeu configurar
|
||||||
l'autenticació mitjançant claus de seguretat de maquinari compatibles amb FIDO2
|
l'autenticació mitjançant claus de seguretat de maquinari compatibles amb FIDO2
|
||||||
per protegir encara més el vostre compte.
|
per protegir encara més el vostre compte.
|
||||||
step4: A partir d'ara, qualsevol intent d'inici de sessió futur demanarà aquest
|
step4: A partir d'ara, qualsevol intent d'inici de sessió futur demanarà aquest
|
||||||
token d'inici de sessió.
|
token d'inici de sessió.
|
||||||
registerKey: Registra una clau de seguretat
|
registerSecurityKey: Registrar una clau de seguretat o d'accés
|
||||||
step1: En primer lloc, instal·la una aplicació d'autenticació (com ara {a} o {b})
|
step1: En primer lloc, instal·la una aplicació d'autenticació (com ara {a} o {b})
|
||||||
al dispositiu.
|
al dispositiu.
|
||||||
step2: A continuació, escaneja el codi QR que es mostra en aquesta pantalla.
|
step2: A continuació, escaneja el codi QR que es mostra en aquesta pantalla.
|
||||||
step3: Introdueix el token que t'ha proporcionat l'aplicació per finalitzar la configuració.
|
step3: Introdueix el token que t'ha proporcionat l'aplicació per finalitzar la configuració.
|
||||||
|
step3Title: Introduïu un codi d'autenticació
|
||||||
|
chromePasskeyNotSupported: Les claus de pas de Chrome actualment no s'admeten.
|
||||||
|
securityKeyName: Introduïu un nom de clau
|
||||||
|
removeKey: Suprimeix la clau de seguretat
|
||||||
|
removeKeyConfirm: Vols suprimir la clau {name}?
|
||||||
|
renewTOTP: Tornar a configurar l'aplicació d'autenticació
|
||||||
|
renewTOTPOk: Reconfigurar
|
||||||
|
renewTOTPCancel: Cancel·lar
|
||||||
|
step2Click: Fer clic en aquest codi QR us permetrà registrar 2FA a la vostra clau
|
||||||
|
de seguretat o aplicació d'autenticació del telèfon.
|
||||||
|
securityKeyNotSupported: El vostre navegador no admet claus de seguretat.
|
||||||
|
registerTOTPBeforeKey: Configureu una aplicació d'autenticació per registrar una
|
||||||
|
clau de seguretat o de passi.
|
||||||
|
tapSecurityKey: Si us plau, seguiu el vostre navegador per registrar la clau de
|
||||||
|
seguretat o d'accés
|
||||||
|
renewTOTPConfirm: Això farà que els codis de verificació de l'aplicació anterior
|
||||||
|
deixin de funcionar
|
||||||
|
whyTOTPOnlyRenew: L’aplicació d’autenticació no es pot eliminar sempre que es hi
|
||||||
|
hagi una clau de seguretat registrada.
|
||||||
_widgets:
|
_widgets:
|
||||||
notifications: "Notificacions"
|
notifications: "Notificacions"
|
||||||
timeline: "Línia de temps"
|
timeline: "Línia de temps"
|
||||||
unixClock: Rellotge UNIX
|
unixClock: Rellotge d'UNIX
|
||||||
federation: Federació
|
federation: Federació
|
||||||
instanceCloud: Núvol de servidors
|
instanceCloud: Núvol de servidors
|
||||||
trends: Tendència
|
trends: Tendència
|
||||||
|
@ -340,9 +364,9 @@ _widgets:
|
||||||
onlineUsers: Usuaris en línia
|
onlineUsers: Usuaris en línia
|
||||||
memo: Notes adhesives
|
memo: Notes adhesives
|
||||||
digitalClock: Rellotge digital
|
digitalClock: Rellotge digital
|
||||||
postForm: Formulari de notes
|
postForm: Formulari per publicar
|
||||||
slideshow: Presentació de diapositives
|
slideshow: Presentació de diapositives
|
||||||
serverMetric: Mètriques del servidor
|
serverMetric: Estadístiques del servidor
|
||||||
userList: Llista d'usuaris
|
userList: Llista d'usuaris
|
||||||
rss: Lector d'RSS
|
rss: Lector d'RSS
|
||||||
jobQueue: Cua de treball
|
jobQueue: Cua de treball
|
||||||
|
@ -350,6 +374,10 @@ _widgets:
|
||||||
chooseList: Selecciona una llista
|
chooseList: Selecciona una llista
|
||||||
aiscript: Consola AiScript
|
aiscript: Consola AiScript
|
||||||
button: Botó
|
button: Botó
|
||||||
|
serverInfo: Informació del servidor
|
||||||
|
meiliStatus: Estat del servidor
|
||||||
|
meiliSize: Mida de l'índex
|
||||||
|
meiliIndexCount: Publicacions indexades
|
||||||
_cw:
|
_cw:
|
||||||
show: "Carregar més"
|
show: "Carregar més"
|
||||||
files: '{count} fitxers'
|
files: '{count} fitxers'
|
||||||
|
@ -382,7 +410,7 @@ _profile:
|
||||||
metadataDescription: Fent servir això, podràs mostrar camps d'informació addicionals
|
metadataDescription: Fent servir això, podràs mostrar camps d'informació addicionals
|
||||||
al vostre perfil.
|
al vostre perfil.
|
||||||
_exportOrImport:
|
_exportOrImport:
|
||||||
followingList: "Seguint"
|
followingList: "Usuaris que segueixes"
|
||||||
muteList: "Silencia"
|
muteList: "Silencia"
|
||||||
blockingList: "Bloqueja"
|
blockingList: "Bloqueja"
|
||||||
userLists: "Llistes"
|
userLists: "Llistes"
|
||||||
|
@ -684,7 +712,7 @@ _pages:
|
||||||
_notification:
|
_notification:
|
||||||
youWereFollowed: "t'ha seguit"
|
youWereFollowed: "t'ha seguit"
|
||||||
_types:
|
_types:
|
||||||
follow: "Seguint"
|
follow: "Nous seguidors"
|
||||||
mention: "Menció"
|
mention: "Menció"
|
||||||
renote: "Impulsos"
|
renote: "Impulsos"
|
||||||
quote: "Citar"
|
quote: "Citar"
|
||||||
|
@ -700,7 +728,7 @@ _notification:
|
||||||
_actions:
|
_actions:
|
||||||
reply: "Respondre"
|
reply: "Respondre"
|
||||||
renote: "Impulsos"
|
renote: "Impulsos"
|
||||||
followBack: et va seguir de tornada
|
followBack: t'ha tornat el seguiment
|
||||||
youGotQuote: "{name} t'ha citat"
|
youGotQuote: "{name} t'ha citat"
|
||||||
fileUploaded: El fitxer s'ha penjat correctament
|
fileUploaded: El fitxer s'ha penjat correctament
|
||||||
youGotMention: "{nom} t'ha esmentat"
|
youGotMention: "{nom} t'ha esmentat"
|
||||||
|
@ -725,8 +753,9 @@ _deck:
|
||||||
mentions: "Mencions"
|
mentions: "Mencions"
|
||||||
widgets: Ginys
|
widgets: Ginys
|
||||||
main: Principal
|
main: Principal
|
||||||
antenna: Antenes
|
antenna: Antena
|
||||||
direct: Missatges directes
|
direct: Missatges directes
|
||||||
|
channel: Canal
|
||||||
alwaysShowMainColumn: Mostra sempre la columna principal
|
alwaysShowMainColumn: Mostra sempre la columna principal
|
||||||
columnAlign: Alinear columnes
|
columnAlign: Alinear columnes
|
||||||
introduction: Crea la interfície perfecta per a tu organitzant columnes lliurement!
|
introduction: Crea la interfície perfecta per a tu organitzant columnes lliurement!
|
||||||
|
@ -780,7 +809,7 @@ showOnRemote: Mostra al servidor remot
|
||||||
wallpaper: Fons de pantalla
|
wallpaper: Fons de pantalla
|
||||||
setWallpaper: Estableix fons de pantalla
|
setWallpaper: Estableix fons de pantalla
|
||||||
removeWallpaper: Elimina el fons de pantalla
|
removeWallpaper: Elimina el fons de pantalla
|
||||||
followConfirm: Segur que vols seguir a l'usuari {name}?
|
followConfirm: Segur que vols seguir a {name}?
|
||||||
proxyAccount: Compte proxy
|
proxyAccount: Compte proxy
|
||||||
proxyAccountDescription: Un compte proxy es un compte que actua com un seguidor remot
|
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
|
per a usuaris sota determinades condicions. Per exemple, quant un usuari afegeix
|
||||||
|
@ -978,7 +1007,7 @@ avoidMultiCaptchaConfirm: Fent servir diferents sistemes de Captcha pot causar i
|
||||||
antennas: Antenes
|
antennas: Antenes
|
||||||
enableEmojiReactions: Activa reaccions amb emojis
|
enableEmojiReactions: Activa reaccions amb emojis
|
||||||
blockThisInstance: Bloqueja aquest servidor
|
blockThisInstance: Bloqueja aquest servidor
|
||||||
registration: Registre
|
registration: Registra't
|
||||||
showEmojisInReactionNotifications: Mostra els emojis a les notificacions de les reaccions
|
showEmojisInReactionNotifications: Mostra els emojis a les notificacions de les reaccions
|
||||||
renoteMute: Silencia els impulsos
|
renoteMute: Silencia els impulsos
|
||||||
renoteUnmute: Treu el silenci als impulsos
|
renoteUnmute: Treu el silenci als impulsos
|
||||||
|
@ -1025,7 +1054,7 @@ recentlyRegisteredUsers: Usuaris registrats fa poc
|
||||||
recentlyDiscoveredUsers: Nous suaris descoberts
|
recentlyDiscoveredUsers: Nous suaris descoberts
|
||||||
administrator: Administrador
|
administrator: Administrador
|
||||||
token: Token
|
token: Token
|
||||||
registerSecurityKey: Registra una clau de seguretat
|
registerSecurityKey: Registreu una clau de seguretat
|
||||||
securityKeyName: Nom clau
|
securityKeyName: Nom clau
|
||||||
lastUsed: Feta servir per última vegada
|
lastUsed: Feta servir per última vegada
|
||||||
unregister: Anul·lar el registre
|
unregister: Anul·lar el registre
|
||||||
|
@ -1178,7 +1207,7 @@ large: Gran
|
||||||
notificationSetting: Preferències de notificacions
|
notificationSetting: Preferències de notificacions
|
||||||
makeActive: Activar
|
makeActive: Activar
|
||||||
notificationSettingDesc: Tria el tipus de notificació que es veure.
|
notificationSettingDesc: Tria el tipus de notificació que es veure.
|
||||||
notifyAntenna: Notificar noves notes
|
notifyAntenna: Notificar publicacions noves
|
||||||
withFileAntenna: Només notes amb fitxers
|
withFileAntenna: Només notes amb fitxers
|
||||||
enableServiceworker: Activa les notificacions push per al teu navegador
|
enableServiceworker: Activa les notificacions push per al teu navegador
|
||||||
antennaUsersDescription: Escriu un nom d'usuari per línea
|
antennaUsersDescription: Escriu un nom d'usuari per línea
|
||||||
|
@ -1238,7 +1267,7 @@ sample: Exemple
|
||||||
abuseReports: Informes
|
abuseReports: Informes
|
||||||
reportAbuse: Informe
|
reportAbuse: Informe
|
||||||
reporter: Informador
|
reporter: Informador
|
||||||
reporterOrigin: Origen d'el informador
|
reporterOrigin: Origen informador
|
||||||
forwardReport: Envia l'informe a un servidor remot
|
forwardReport: Envia l'informe a un servidor remot
|
||||||
abuseReported: El teu informe ha sigut enviat. Moltes gràcies.
|
abuseReported: El teu informe ha sigut enviat. Moltes gràcies.
|
||||||
reporteeOrigin: Origen de l'informe
|
reporteeOrigin: Origen de l'informe
|
||||||
|
@ -1526,7 +1555,7 @@ aiChanMode: Ai-chan a la interfície d'usuari clàssica
|
||||||
keepCw: Mantenir els avisos de contingut
|
keepCw: Mantenir els avisos de contingut
|
||||||
pubSub: Comptes Pub/Sub
|
pubSub: Comptes Pub/Sub
|
||||||
lastCommunication: Última comunicació
|
lastCommunication: Última comunicació
|
||||||
breakFollowConfirm: Confirmes que vols eliminar un seguidor?
|
breakFollowConfirm: Confirmes que vols eliminar el seguidor?
|
||||||
itsOn: Activat
|
itsOn: Activat
|
||||||
itsOff: Desactivat
|
itsOff: Desactivat
|
||||||
emailRequiredForSignup: Requereix una adreça de correu electrònic per registrar-te
|
emailRequiredForSignup: Requereix una adreça de correu electrònic per registrar-te
|
||||||
|
@ -1585,7 +1614,7 @@ silenceThisInstance: Silencia el servidor
|
||||||
silencedInstancesDescription: Llista amb els noms dels servidors que vols silenciar.
|
silencedInstancesDescription: Llista amb els noms dels servidors que vols silenciar.
|
||||||
Els comptes als servidors silenciats seran tractades com "Silenciades", només poden
|
Els comptes als servidors silenciats seran tractades com "Silenciades", només poden
|
||||||
fer sol·licituds de seguiments, i no poden mencionar comptes locals si no les segueixen.
|
fer sol·licituds de seguiments, i no poden mencionar comptes locals si no les segueixen.
|
||||||
Això no afectarà els servidoes bloquejats.
|
Això no afectarà els servidors bloquejats.
|
||||||
objectStorageEndpointDesc: Deixa això buit si fas servir AWS, S3, d'una altre manera
|
objectStorageEndpointDesc: Deixa això buit si fas servir AWS, S3, d'una altre manera
|
||||||
específica un "endpoint" com a '<host>' o '<host>:<port>', depend del proveïdor
|
específica un "endpoint" com a '<host>' o '<host>:<port>', depend del proveïdor
|
||||||
que facis servir.
|
que facis servir.
|
||||||
|
@ -1618,7 +1647,7 @@ enableAutoSensitiveDescription: Permet la detecció i el marcatge automàtics de
|
||||||
localOnly: Només local
|
localOnly: Només local
|
||||||
customKaTeXMacroDescription: "Configura macros per escriure expressions matemàtiques
|
customKaTeXMacroDescription: "Configura macros per escriure expressions matemàtiques
|
||||||
fàcilment! La notació s'ajusta a les definicions de l'ordre LaTeX i s'escriu com
|
fàcilment! La notació s'ajusta a les definicions de l'ordre LaTeX i s'escriu com
|
||||||
a \\newcommand{\\name}{content} o \\newcommand{\\name}[nombre d'arguments]{contingut}.
|
a \\newcommand{\\ name}{content} o \\newcommand{\\name}[nombre d'arguments]{content}.
|
||||||
Per exemple, \\newcommand{\\add}[2]{#1 + #2} ampliarà \\add{3}{foo} a 3 + foo. Els
|
Per exemple, \\newcommand{\\add}[2]{#1 + #2} ampliarà \\add{3}{foo} a 3 + foo. Els
|
||||||
claudàtors que envolten el nom de la macro es poden canviar per claudàtors rodons
|
claudàtors que envolten el nom de la macro es poden canviar per claudàtors rodons
|
||||||
o quadrats. Això afecta els claudàtors utilitzats per als arguments. Es pot definir
|
o quadrats. Això afecta els claudàtors utilitzats per als arguments. Es pot definir
|
||||||
|
@ -1639,9 +1668,9 @@ popout: Apareixa
|
||||||
volume: Volum
|
volume: Volum
|
||||||
objectStorageUseSSLDesc: Desactiva això si no fas servir HTTPS per les connexions
|
objectStorageUseSSLDesc: Desactiva això si no fas servir HTTPS per les connexions
|
||||||
API
|
API
|
||||||
objectStorageUseProxy: Conectarse mitjançant un Proxy
|
objectStorageUseProxy: Connectar-se mitjançant un Proxy
|
||||||
objectStorageUseProxyDesc: Desactiva això si no faràs servir un servidor Proxy per
|
objectStorageUseProxyDesc: Desactiva això si no faràs servir un servidor Proxy per
|
||||||
conexions API
|
conexions amb l'API
|
||||||
objectStorageSetPublicRead: Fixar com a "public-read" al pujar
|
objectStorageSetPublicRead: Fixar com a "public-read" al pujar
|
||||||
serverLogs: Registres del servidor
|
serverLogs: Registres del servidor
|
||||||
deleteAll: Esborrar tot
|
deleteAll: Esborrar tot
|
||||||
|
@ -1673,14 +1702,14 @@ disablePagesScript: Desactivar AiScript a les pàgines
|
||||||
updateRemoteUser: Actualitzar la informació de l'usuari remot
|
updateRemoteUser: Actualitzar la informació de l'usuari remot
|
||||||
deleteAllFiles: Esborrar tots els fitxers
|
deleteAllFiles: Esborrar tots els fitxers
|
||||||
deleteAllFilesConfirm: Segur que vols esborrar tots els fitxers?
|
deleteAllFilesConfirm: Segur que vols esborrar tots els fitxers?
|
||||||
removeAllFollowing: Deixar de seguir a tots els que segueixis
|
removeAllFollowing: Deixar de seguir a tots els usuaris que segueixes
|
||||||
accentColor: Color principal
|
accentColor: Color principal
|
||||||
textColor: Color del text
|
textColor: Color del text
|
||||||
value: Valor
|
value: Valor
|
||||||
sendErrorReportsDescription: "Quant està activat quant aparegui un error, es compartirà
|
sendErrorReportsDescription: "Quan està activat, quan es produeixi un problema la
|
||||||
amb els desenvolupadors de Calckey, que ajudarà a millorar la qualitat.\nAixò inclourà
|
informació detallada d'errors es compartirà amb Calckey, ajudant a millorar la qualitat
|
||||||
informació com la versió del teu sistema operatiu, el navegador que estiguis fent
|
de Calckey.\nAixò inclourà informació com la versió del vostre sistema operatiu,
|
||||||
servir, la teva activitat a Calckey, etc."
|
quin navegador utilitzeu, la vostra activitat a Calckey, etc."
|
||||||
myTheme: El meu tema
|
myTheme: El meu tema
|
||||||
backgroundColor: Color de fons
|
backgroundColor: Color de fons
|
||||||
saveAs: Desa com...
|
saveAs: Desa com...
|
||||||
|
@ -1757,7 +1786,7 @@ createNew: Crear una nova
|
||||||
optional: Opcional
|
optional: Opcional
|
||||||
jumpToSpecifiedDate: Vés a una data concreta
|
jumpToSpecifiedDate: Vés a una data concreta
|
||||||
showingPastTimeline: Ara es mostra un línea de temps antiga
|
showingPastTimeline: Ara es mostra un línea de temps antiga
|
||||||
clear: Tornar
|
clear: Netejar
|
||||||
markAllAsRead: Marcar tot com a llegit
|
markAllAsRead: Marcar tot com a llegit
|
||||||
recentPosts: Pàgines recents
|
recentPosts: Pàgines recents
|
||||||
noMaintainerInformationWarning: La informació de l'administrador no està configurada.
|
noMaintainerInformationWarning: La informació de l'administrador no està configurada.
|
||||||
|
@ -1822,7 +1851,7 @@ _channel:
|
||||||
featured: Tendència
|
featured: Tendència
|
||||||
owned: Propietari
|
owned: Propietari
|
||||||
usersCount: '{n} Participants'
|
usersCount: '{n} Participants'
|
||||||
following: Seguit
|
following: Seguit per
|
||||||
notesCount: '{n} Notes'
|
notesCount: '{n} Notes'
|
||||||
nameAndDescription: Nom i descripció
|
nameAndDescription: Nom i descripció
|
||||||
nameOnly: Només nom
|
nameOnly: Només nom
|
||||||
|
@ -1840,7 +1869,7 @@ _ago:
|
||||||
hoursAgo: Fa {n}h
|
hoursAgo: Fa {n}h
|
||||||
daysAgo: Fa {n}d
|
daysAgo: Fa {n}d
|
||||||
secondsAgo: Fa {n}s
|
secondsAgo: Fa {n}s
|
||||||
weeksAgo: Fa {n}s
|
weeksAgo: Fa {n}set
|
||||||
monthsAgo: Fa {n}me
|
monthsAgo: Fa {n}me
|
||||||
yearsAgo: Fa {n}a
|
yearsAgo: Fa {n}a
|
||||||
_time:
|
_time:
|
||||||
|
@ -1855,7 +1884,7 @@ _tutorial:
|
||||||
step5_3: La línea de temps d'inici {icon} es on pots veure les publicacions dels
|
step5_3: La línea de temps d'inici {icon} es on pots veure les publicacions dels
|
||||||
comptes que segueixes.
|
comptes que segueixes.
|
||||||
step5_6: La línia de temps de Recomanats {icon} és on pots veure les publicacions
|
step5_6: La línia de temps de Recomanats {icon} és on pots veure les publicacions
|
||||||
dels servidors recomanen els administradors.
|
dels servidors que recomanen els administradors.
|
||||||
step5_7: La línia de temps Global {icon} és on pots veure les publicacions de tots
|
step5_7: La línia de temps Global {icon} és on pots veure les publicacions de tots
|
||||||
els servidors connectats.
|
els servidors connectats.
|
||||||
step6_1: Aleshores, què és aquest lloc?
|
step6_1: Aleshores, què és aquest lloc?
|
||||||
|
@ -1873,9 +1902,9 @@ _tutorial:
|
||||||
step2_2: Proporcionar informació sobre qui sou facilitarà que altres puguin saber
|
step2_2: Proporcionar informació sobre qui sou facilitarà que altres puguin saber
|
||||||
si volen veure les vostres notes o seguir-vos.
|
si volen veure les vostres notes o seguir-vos.
|
||||||
step3_1: Ara toca seguir a algunes persones!
|
step3_1: Ara toca seguir a algunes persones!
|
||||||
step3_2: "Les teves líneas de temps domèstiques i socials es basen en qui seguiu,
|
step3_2: "Les teves líneas de temps d'inici i social es basen en qui seguiu, així
|
||||||
així que proveu de seguir un parell de comptes per començar.\nFeu clic al cercle
|
que proveu de seguir un parell de comptes per començar.\nFeu clic al cercle més
|
||||||
més situat a la part superior dreta d'un perfil per seguir-los."
|
situat a la part superior dreta d'un perfil per seguir-los."
|
||||||
step4_2: A algunes persones els agrada fer una publicació de {introduction} o un
|
step4_2: A algunes persones els agrada fer una publicació de {introduction} o un
|
||||||
senzill "Hola món!"
|
senzill "Hola món!"
|
||||||
step5_1: Línies de temps, línies de temps a tot arreu!
|
step5_1: Línies de temps, línies de temps a tot arreu!
|
||||||
|
@ -1966,13 +1995,13 @@ _instanceCharts:
|
||||||
users: Diferència en el nombre d'usuaris
|
users: Diferència en el nombre d'usuaris
|
||||||
usersTotal: Nombre acumulat d'usuaris
|
usersTotal: Nombre acumulat d'usuaris
|
||||||
notes: Diferència en el nombre de notes
|
notes: Diferència en el nombre de notes
|
||||||
ffTotal: Nombre acumulat d'usuaris seguits/seguidors seguits
|
ffTotal: Nombre acumulat d'usuaris que segueixes/et segueixen
|
||||||
cacheSize: Diferència en la mida de la memòria cau
|
cacheSize: Diferència en la mida de la memòria cau
|
||||||
cacheSizeTotal: Mida total acumulada de la memòria cau
|
cacheSizeTotal: Mida total acumulada de la memòria cau
|
||||||
files: Diferència en el nombre de fitxers
|
files: Diferència en el nombre de fitxers
|
||||||
filesTotal: Nombre acumulat de fitxers
|
filesTotal: Nombre acumulat de fitxers
|
||||||
notesTotal: Nombre acumulat de notes
|
notesTotal: Nombre acumulat de notes
|
||||||
ff: "Diferència en el nombre d'usuaris seguits/seguidors seguits "
|
ff: "Diferència en el nombre d'usuaris que segueixes/que et segueixen "
|
||||||
_timelines:
|
_timelines:
|
||||||
home: Inici
|
home: Inici
|
||||||
local: Local
|
local: Local
|
||||||
|
@ -2006,7 +2035,7 @@ _auth:
|
||||||
callback: Tornant a l'aplicació
|
callback: Tornant a l'aplicació
|
||||||
denied: Accés denegat
|
denied: Accés denegat
|
||||||
pleaseGoBack: Si us plau, torneu a l'aplicació
|
pleaseGoBack: Si us plau, torneu a l'aplicació
|
||||||
copyAsk: Enganxeu el següent codi d'autorització a l'aplicació
|
copyAsk: Posa el següent codi d'autorització a l'aplicació
|
||||||
_weekday:
|
_weekday:
|
||||||
wednesday: Dimecres
|
wednesday: Dimecres
|
||||||
saturday: Dissabte
|
saturday: Dissabte
|
||||||
|
@ -2020,7 +2049,7 @@ _messaging:
|
||||||
dms: Privat
|
dms: Privat
|
||||||
_antennaSources:
|
_antennaSources:
|
||||||
all: Totes les notes
|
all: Totes les notes
|
||||||
homeTimeline: Notes dels usuaris que segueixes
|
homeTimeline: Publicacions dels usuaris que segueixes
|
||||||
users: Notes d'usuaris concrets
|
users: Notes d'usuaris concrets
|
||||||
userGroup: Notes d'usuaris d'un grup determinat
|
userGroup: Notes d'usuaris d'un grup determinat
|
||||||
userList: Notes d'una llista determinada d'usuaris
|
userList: Notes d'una llista determinada d'usuaris
|
||||||
|
@ -2031,7 +2060,7 @@ _relayStatus:
|
||||||
rejected: Rebutjat
|
rejected: Rebutjat
|
||||||
deleted: Eliminat
|
deleted: Eliminat
|
||||||
editNote: Edita la nota
|
editNote: Edita la nota
|
||||||
edited: Editat
|
edited: 'Editat a {date} {time}'
|
||||||
findOtherInstance: Cercar un altre servidor
|
findOtherInstance: Cercar un altre servidor
|
||||||
signupsDisabled: Actualment, les inscripcions en aquest servidor estan desactivades,
|
signupsDisabled: Actualment, les inscripcions en aquest servidor estan desactivades,
|
||||||
però sempre podeu registrar-vos en un altre servidor. Si teniu un codi d'invitació
|
però sempre podeu registrar-vos en un altre servidor. Si teniu un codi d'invitació
|
||||||
|
@ -2053,7 +2082,12 @@ _experiments:
|
||||||
enablePostEditing: Activà l'edició de publicacions
|
enablePostEditing: Activà l'edició de publicacions
|
||||||
title: Experiments
|
title: Experiments
|
||||||
postEditingCaption: Mostra l'opció perquè els usuaris editin les seves publicacions
|
postEditingCaption: Mostra l'opció perquè els usuaris editin les seves publicacions
|
||||||
existents mitjançant el menú d'opcions de publicació
|
mitjançant el menú d'opcions de publicació, i permet rebre publicacions editades
|
||||||
|
d'altres servidors.
|
||||||
|
enablePostImports: Activar l'importació de publicacions
|
||||||
|
postImportsCaption: Permet els usuaris importar publicacions desde comptes a Calckey,
|
||||||
|
Misskey, Mastodon, Akkoma i Pleroma. Pot fer que el servidor vagi més lent durant
|
||||||
|
la càrrega si tens un coll d'ampolla a la cua.
|
||||||
noGraze: Si us plau, desactiva l'extensió del navegador "Graze for Mastodon", ja que
|
noGraze: Si us plau, desactiva l'extensió del navegador "Graze for Mastodon", ja que
|
||||||
interfereix amb Calckey.
|
interfereix amb Calckey.
|
||||||
accessibility: Accessibilitat
|
accessibility: Accessibilitat
|
||||||
|
@ -2064,3 +2098,37 @@ silencedWarning: S'està mostrant aquesta pàgina per què aquest usuari és d'u
|
||||||
que l'administrador a silenciat, així que pot ser spam.
|
que l'administrador a silenciat, així que pot ser spam.
|
||||||
jumpToPrevious: Vés a l'anterior
|
jumpToPrevious: Vés a l'anterior
|
||||||
cw: Avís de contingut
|
cw: Avís de contingut
|
||||||
|
antennasDesc: "Les antenes mostren publicacions noves que coincideixen amb els criteris
|
||||||
|
establerts!\nS'hi pot accedir des de la pàgina de línies de temps."
|
||||||
|
expandOnNoteClick: Obre la publicació amb un clic
|
||||||
|
expandOnNoteClickDesc: Si està desactivat, encara pots obrir les publicacions al menú
|
||||||
|
del botó dret o fent clic a la marca de temps.
|
||||||
|
channelFederationWarn: Els canals encara no es federen amb altres servidors
|
||||||
|
searchPlaceholder: Cerca a Calckey
|
||||||
|
listsDesc: Les llistes et permeten crear línies de temps amb usuaris específics. Es
|
||||||
|
pot accedir des de la pàgina de línies de temps.
|
||||||
|
clipsDesc: Els clips són com marcadors categoritzats que es poden compartir. Podeu
|
||||||
|
crear clips des del menú de publicacions individuals.
|
||||||
|
selectChannel: Selecciona un canal
|
||||||
|
isLocked: Aquest compte té les següents aprovacions
|
||||||
|
isPatron: Mecenes de Calkey
|
||||||
|
isBot: Aquest compte és un bot
|
||||||
|
isModerator: Moderador
|
||||||
|
isAdmin: Administrador
|
||||||
|
_filters:
|
||||||
|
fromDomain: Des del domini
|
||||||
|
notesBefore: Publicacions anteriors
|
||||||
|
notesAfter: Publicacions posteriors
|
||||||
|
followingOnly: Només seguint
|
||||||
|
followersOnly: Només seguidors
|
||||||
|
withFile: Amb arxiu
|
||||||
|
fromUser: De l'usuari
|
||||||
|
image: Imatge
|
||||||
|
video: Vídeo
|
||||||
|
audio: Àudio
|
||||||
|
_dialog:
|
||||||
|
charactersExceeded: "S'han superat el màxim de caràcters! Actual: {current}/Límit:
|
||||||
|
{max}"
|
||||||
|
charactersBelow: 'No hi ha caràcters suficients! Corrent: {current}/Limit: {min}'
|
||||||
|
removeReaction: Elimina la teva reacció
|
||||||
|
reactionPickerSkinTone: To de pell d'emoji preferit
|
||||||
|
|
|
@ -698,8 +698,8 @@ _time:
|
||||||
minute: "Minut"
|
minute: "Minut"
|
||||||
hour: "Hodin"
|
hour: "Hodin"
|
||||||
_2fa:
|
_2fa:
|
||||||
registerDevice: "Přidat zařízení"
|
registerTOTP: "Přidat zařízení"
|
||||||
registerKey: "Přidat bezpečnostní klíč"
|
registerSecurityKey: "Přidat bezpečnostní klíč"
|
||||||
_weekday:
|
_weekday:
|
||||||
sunday: "Neděle"
|
sunday: "Neděle"
|
||||||
monday: "Pondělí"
|
monday: "Pondělí"
|
||||||
|
@ -963,7 +963,7 @@ disablingTimelinesInfo: Administrátoři a moderátoři budou vždy mít příst
|
||||||
časovým osám, i pokud jsou vypnuté.
|
časovým osám, i pokud jsou vypnuté.
|
||||||
deleted: Vymazáno
|
deleted: Vymazáno
|
||||||
editNote: Upravit poznámku
|
editNote: Upravit poznámku
|
||||||
edited: Upraveno
|
edited: 'Upraveno dne {date} {time}'
|
||||||
silencedInstancesDescription: Vypište hostnames instancí, které chcete ztlumit. Účty
|
silencedInstancesDescription: Vypište hostnames instancí, které chcete ztlumit. Účty
|
||||||
v uvedených instancích jsou považovány za "ztlumené", mohou pouze zadávat požadavky
|
v uvedených instancích jsou považovány za "ztlumené", mohou pouze zadávat požadavky
|
||||||
na sledování a nemohou zmiňovat místní účty, pokud nejsou sledovány. Na blokované
|
na sledování a nemohou zmiňovat místní účty, pokud nejsou sledovány. Na blokované
|
||||||
|
|
|
@ -83,7 +83,7 @@ deleteAndEditConfirm: Er du sikker på at du vil slet denne opslag og ændre det
|
||||||
vil tabe alle reaktioner, forstærkninger og svarer indenfor denne opslag.
|
vil tabe alle reaktioner, forstærkninger og svarer indenfor denne opslag.
|
||||||
editNote: Ændre note
|
editNote: Ændre note
|
||||||
deleted: Slettet
|
deleted: Slettet
|
||||||
edited: Ændret
|
edited: 'Ændret den {date} {time}'
|
||||||
sendMessage: Send en besked
|
sendMessage: Send en besked
|
||||||
youShouldUpgradeClient: Til at vise denne side, vær sød at refresh til at opdatere
|
youShouldUpgradeClient: Til at vise denne side, vær sød at refresh til at opdatere
|
||||||
din brugerenhed.
|
din brugerenhed.
|
||||||
|
@ -216,3 +216,21 @@ perHour: Hver time
|
||||||
perDay: Hver dag
|
perDay: Hver dag
|
||||||
stopActivityDelivery: Stop med at sende aktiviteter
|
stopActivityDelivery: Stop med at sende aktiviteter
|
||||||
blockThisInstance: Blokere denne instans
|
blockThisInstance: Blokere denne instans
|
||||||
|
muteAndBlock: Mutes og blokeringer
|
||||||
|
mutedUsers: Mutede brugere
|
||||||
|
newer: nyere
|
||||||
|
older: ældre
|
||||||
|
silencedInstances: Nedtonede servere
|
||||||
|
clearQueue: Ryd kø
|
||||||
|
clearQueueConfirmTitle: Er du sikker på, at du ønsker at rydde køen?
|
||||||
|
clearCachedFiles: Ryd cache
|
||||||
|
clearCachedFilesConfirm: Er du sikker på, at du ønsker at slette alle cachede eksterne
|
||||||
|
filer?
|
||||||
|
blockedInstances: Blokerede servere
|
||||||
|
blockedInstancesDescription: Listen af navne på servere, du ønsker at blokere. Servere
|
||||||
|
på listen vil ikke længere kunne kommunikere med denne server.
|
||||||
|
hiddenTags: Skjulte hashtags
|
||||||
|
clearQueueConfirmText: De indlæg i denne kø, der ikke allerede er leveret, vil ikke
|
||||||
|
blive federeret. Denne operation er almindeligvis ikke påkrævet.
|
||||||
|
jumpToPrevious: Spring til tidligere
|
||||||
|
cw: Advarsel om indhold
|
||||||
|
|
|
@ -3,7 +3,7 @@ headlineMisskey: "Eine dezentralisierte Open-Source Social Media Plattform, die
|
||||||
immer gratis bleibt! 🚀"
|
immer gratis bleibt! 🚀"
|
||||||
introMisskey: "Willkommen! Calckey ist eine dezentralisierte Open-Source Social Media
|
introMisskey: "Willkommen! Calckey ist eine dezentralisierte Open-Source Social Media
|
||||||
Plattform, die für immer gratis bleibt!🚀"
|
Plattform, die für immer gratis bleibt!🚀"
|
||||||
monthAndDay: "{day}.{month}."
|
monthAndDay: "{month}/{day}"
|
||||||
search: "Suchen"
|
search: "Suchen"
|
||||||
notifications: "Benachrichtigungen"
|
notifications: "Benachrichtigungen"
|
||||||
username: "Nutzername"
|
username: "Nutzername"
|
||||||
|
@ -25,9 +25,9 @@ openInWindow: "In einem Fenster öffnen"
|
||||||
profile: "Profil"
|
profile: "Profil"
|
||||||
timeline: "Timelines"
|
timeline: "Timelines"
|
||||||
noAccountDescription: "Dieser Nutzer hat seine Profilbeschreibung noch nicht ausgefüllt."
|
noAccountDescription: "Dieser Nutzer hat seine Profilbeschreibung noch nicht ausgefüllt."
|
||||||
login: "Anmelden"
|
login: "Login"
|
||||||
loggingIn: "Du wirst angemeldet"
|
loggingIn: "Du wirst angemeldet"
|
||||||
logout: "Abmelden"
|
logout: "Logout"
|
||||||
signup: "Registrieren"
|
signup: "Registrieren"
|
||||||
uploading: "Wird hochgeladen …"
|
uploading: "Wird hochgeladen …"
|
||||||
save: "Speichern"
|
save: "Speichern"
|
||||||
|
@ -66,7 +66,7 @@ import: "Import"
|
||||||
export: "Export"
|
export: "Export"
|
||||||
files: "Dateien"
|
files: "Dateien"
|
||||||
download: "Herunterladen"
|
download: "Herunterladen"
|
||||||
driveFileDeleteConfirm: "Möchtest du die Datei „{name}“ wirklich löschen? Es wird
|
driveFileDeleteConfirm: "Möchtest du die Datei \"{name}\" wirklich löschen? Es wird
|
||||||
aus allen Beiträgen entfernt, die die Datei als Anhang enthalten."
|
aus allen Beiträgen entfernt, die die Datei als Anhang enthalten."
|
||||||
unfollowConfirm: "Bist du dir sicher, daß du {name} nicht mehr folgen möchtest?"
|
unfollowConfirm: "Bist du dir sicher, daß du {name} nicht mehr folgen möchtest?"
|
||||||
exportRequested: "Du hast einen Export angefragt. Dies kann etwas Zeit in Anspruch
|
exportRequested: "Du hast einen Export angefragt. Dies kann etwas Zeit in Anspruch
|
||||||
|
@ -150,8 +150,8 @@ settingGuide: "Empfohlene Einstellungen"
|
||||||
cacheRemoteFiles: "Cache für entfernte Dateien"
|
cacheRemoteFiles: "Cache für entfernte Dateien"
|
||||||
cacheRemoteFilesDescription: "Ist diese Einstellung deaktiviert, so werden Dateien
|
cacheRemoteFilesDescription: "Ist diese Einstellung deaktiviert, so werden Dateien
|
||||||
von anderen Servern direkt von dort geladen. Hierdurch wird Speicherplatz auf diesem
|
von anderen Servern direkt von dort geladen. Hierdurch wird Speicherplatz auf diesem
|
||||||
Server eingespart, aber durch die fehlende Generierung von Vorschaubildern mehr
|
Server eingespart, aber durch die fehlende Generierung von Vorschaubildern wird
|
||||||
Bandbreite benötigt."
|
mehr Bandbreite benötigt."
|
||||||
flagAsBot: "Dieses Nutzerkonto als Bot kennzeichnen"
|
flagAsBot: "Dieses Nutzerkonto als Bot kennzeichnen"
|
||||||
flagAsBotDescription: "Aktiviere diese Option, falls dieses Nutzerkonto durch ein
|
flagAsBotDescription: "Aktiviere diese Option, falls dieses Nutzerkonto durch ein
|
||||||
Programm gesteuert wird. Falls aktiviert, agiert es als Flag für andere Entwickler
|
Programm gesteuert wird. Falls aktiviert, agiert es als Flag für andere Entwickler
|
||||||
|
@ -166,7 +166,7 @@ autoAcceptFollowed: "Automatisches Genehmigen von Folgeanfragen von Benutzern, d
|
||||||
Sie folgen"
|
Sie folgen"
|
||||||
addAccount: "Nutzerkonto hinzufügen"
|
addAccount: "Nutzerkonto hinzufügen"
|
||||||
loginFailed: "Anmeldung fehlgeschlagen"
|
loginFailed: "Anmeldung fehlgeschlagen"
|
||||||
showOnRemote: "Ansicht auf dem Herkunftsserver"
|
showOnRemote: "Zur Ansicht auf dem Herkunftsserver"
|
||||||
general: "Allgemein"
|
general: "Allgemein"
|
||||||
wallpaper: "Hintergrundbild"
|
wallpaper: "Hintergrundbild"
|
||||||
setWallpaper: "Hintergrundbild festlegen"
|
setWallpaper: "Hintergrundbild festlegen"
|
||||||
|
@ -234,14 +234,14 @@ default: "Standard"
|
||||||
defaultValueIs: "Der Standardwert ist: {value}"
|
defaultValueIs: "Der Standardwert ist: {value}"
|
||||||
noCustomEmojis: "Es gibt keine benutzerdefinierten Emoji"
|
noCustomEmojis: "Es gibt keine benutzerdefinierten Emoji"
|
||||||
noJobs: "Keine Jobs vorhanden"
|
noJobs: "Keine Jobs vorhanden"
|
||||||
federating: "Wird föderiert"
|
federating: "Eine Verbindung zum Server wird hergestellt"
|
||||||
blocked: "Blockiert"
|
blocked: "Blockiert"
|
||||||
suspended: "suspendiert"
|
suspended: "suspendiert"
|
||||||
all: "Alles"
|
all: "Alles"
|
||||||
subscribing: "Registrieren"
|
subscribing: "Registrieren"
|
||||||
publishing: "Veröffentlichen"
|
publishing: "Veröffentlichen"
|
||||||
notResponding: "Antwortet nicht"
|
notResponding: "Antwortet nicht"
|
||||||
instanceFollowing: "Auf dem Server folgen"
|
instanceFollowing: "Folgen auf dem Server"
|
||||||
instanceFollowers: "Follower des Servers"
|
instanceFollowers: "Follower des Servers"
|
||||||
instanceUsers: "Nutzer dieses Servers"
|
instanceUsers: "Nutzer dieses Servers"
|
||||||
changePassword: "Passwort ändern"
|
changePassword: "Passwort ändern"
|
||||||
|
@ -252,7 +252,7 @@ newPassword: "Neues Passwort"
|
||||||
newPasswordRetype: "Neues Passwort bestätigen"
|
newPasswordRetype: "Neues Passwort bestätigen"
|
||||||
attachFile: "Dateien anhängen"
|
attachFile: "Dateien anhängen"
|
||||||
more: "Mehr!"
|
more: "Mehr!"
|
||||||
featured: "Ausgewählt"
|
featured: "Besonderheiten"
|
||||||
usernameOrUserId: "Nutzername oder Nutzer-ID"
|
usernameOrUserId: "Nutzername oder Nutzer-ID"
|
||||||
noSuchUser: "Nutzer nicht gefunden"
|
noSuchUser: "Nutzer nicht gefunden"
|
||||||
lookup: "Suche nach"
|
lookup: "Suche nach"
|
||||||
|
@ -286,7 +286,7 @@ agreeTo: "Ich stimme {0} zu"
|
||||||
tos: "Nutzungsbedingungen"
|
tos: "Nutzungsbedingungen"
|
||||||
start: "Beginnen Sie"
|
start: "Beginnen Sie"
|
||||||
home: "Home"
|
home: "Home"
|
||||||
remoteUserCaution: "Informationen von Remote-Nutzern können unvollständig sein."
|
remoteUserCaution: "Informationen von Nutzern anderer Server sind möglicherweise unvollständig."
|
||||||
activity: "Aktivität"
|
activity: "Aktivität"
|
||||||
images: "Bilder"
|
images: "Bilder"
|
||||||
birthday: "Geburtstag"
|
birthday: "Geburtstag"
|
||||||
|
@ -338,8 +338,8 @@ unwatch: "Nicht mehr beobachten"
|
||||||
accept: "Akzeptieren"
|
accept: "Akzeptieren"
|
||||||
reject: "Ablehnen"
|
reject: "Ablehnen"
|
||||||
normal: "Normal"
|
normal: "Normal"
|
||||||
instanceName: "Name des Servers"
|
instanceName: "Server-Name"
|
||||||
instanceDescription: "Beschreibung des Servers"
|
instanceDescription: "Server-Beschreibung"
|
||||||
maintainerName: "Betreiber"
|
maintainerName: "Betreiber"
|
||||||
maintainerEmail: "Betreiber-Email"
|
maintainerEmail: "Betreiber-Email"
|
||||||
tosUrl: "URL der Nutzungsbedingungen"
|
tosUrl: "URL der Nutzungsbedingungen"
|
||||||
|
@ -371,8 +371,9 @@ pinnedUsers: "Angeheftete Nutzer"
|
||||||
pinnedUsersDescription: "Gib durch Leerzeichen getrennte Nutzer an, die an die \"\
|
pinnedUsersDescription: "Gib durch Leerzeichen getrennte Nutzer an, die an die \"\
|
||||||
Erkunden\"-Seite angeheftet werden sollen."
|
Erkunden\"-Seite angeheftet werden sollen."
|
||||||
pinnedPages: "Angeheftete Nutzer-Seiten"
|
pinnedPages: "Angeheftete Nutzer-Seiten"
|
||||||
pinnedPagesDescription: "Geben Sie die Pfade der Nutzer-Seiten, getrennt durch Zeilenumbrüche,
|
pinnedPagesDescription: "Geben Sie die Dateipfade, getrennt durch Zeilenumbrüche,
|
||||||
ein, die Sie an die oberste Startseite dieses Servers anheften möchten."
|
derjenigen Seiten ein, die Sie an die obere Seitenbegrenzung des Servers anpinnen
|
||||||
|
möchten."
|
||||||
pinnedClipId: "ID des anzuheftenden Clips"
|
pinnedClipId: "ID des anzuheftenden Clips"
|
||||||
pinnedNotes: "Angeheftete Beiträge"
|
pinnedNotes: "Angeheftete Beiträge"
|
||||||
hcaptcha: "hCaptcha"
|
hcaptcha: "hCaptcha"
|
||||||
|
@ -584,7 +585,7 @@ deleteAllFiles: "Alle Dateien löschen"
|
||||||
deleteAllFilesConfirm: "Möchtest du wirklich alle Dateien löschen?"
|
deleteAllFilesConfirm: "Möchtest du wirklich alle Dateien löschen?"
|
||||||
removeAllFollowing: "Allen gefolgten Nutzern entfolgen"
|
removeAllFollowing: "Allen gefolgten Nutzern entfolgen"
|
||||||
removeAllFollowingDescription: "Wenn Sie dies ausführen, werden alle Konten von {host}
|
removeAllFollowingDescription: "Wenn Sie dies ausführen, werden alle Konten von {host}
|
||||||
entfolgt. Bitte führen Sie dies aus, wenn der Server z.B. nicht mehr existiert."
|
entfolgt. Bitte führen Sie dies aus, wenn der Server beispielsweise nicht mehr existiert."
|
||||||
userSuspended: "Dieser Nutzer wurde gesperrt."
|
userSuspended: "Dieser Nutzer wurde gesperrt."
|
||||||
userSilenced: "Dieser Nutzer wurde instanzweit stummgeschaltet."
|
userSilenced: "Dieser Nutzer wurde instanzweit stummgeschaltet."
|
||||||
yourAccountSuspendedTitle: "Dieses Nutzerkonto ist gesperrt"
|
yourAccountSuspendedTitle: "Dieses Nutzerkonto ist gesperrt"
|
||||||
|
@ -662,7 +663,7 @@ display: "Anzeigeart"
|
||||||
copy: "Kopieren"
|
copy: "Kopieren"
|
||||||
metrics: "Metriken"
|
metrics: "Metriken"
|
||||||
overview: "Übersicht"
|
overview: "Übersicht"
|
||||||
logs: "Logs"
|
logs: "Protokolle"
|
||||||
delayed: "Verzögert"
|
delayed: "Verzögert"
|
||||||
database: "Datenbank"
|
database: "Datenbank"
|
||||||
channel: "Channels"
|
channel: "Channels"
|
||||||
|
@ -692,9 +693,9 @@ abuseReported: "Deine Meldung wurde versendet. Vielen Dank."
|
||||||
reporter: "Melder"
|
reporter: "Melder"
|
||||||
reporteeOrigin: "Herkunft des Gemeldeten"
|
reporteeOrigin: "Herkunft des Gemeldeten"
|
||||||
reporterOrigin: "Herkunft des Meldenden"
|
reporterOrigin: "Herkunft des Meldenden"
|
||||||
forwardReport: "Einen Bericht auch an den beteiligten anderen Server weiterleiten"
|
forwardReport: "Einen Meldung zusätzlich an den mit-beteiligten Server senden"
|
||||||
forwardReportIsAnonymous: "Anstelle Ihres Nutzerkontos wird ein anonymes Systemkonto
|
forwardReportIsAnonymous: "Anstelle Ihres Nutzerkontos wird ein anonymes Systemkonto
|
||||||
als Berichterstatter auf dem beteiligten anderen Server angezeigt."
|
als Hinweisgeber auf dem mit-beteiligten Server angezeigt."
|
||||||
send: "Senden"
|
send: "Senden"
|
||||||
abuseMarkAsResolved: "Meldung als gelöst markieren"
|
abuseMarkAsResolved: "Meldung als gelöst markieren"
|
||||||
openInNewTab: "In neuem Tab öffnen"
|
openInNewTab: "In neuem Tab öffnen"
|
||||||
|
@ -702,7 +703,7 @@ openInSideView: "In Seitenansicht öffnen"
|
||||||
defaultNavigationBehaviour: "Standardnavigationsverhalten"
|
defaultNavigationBehaviour: "Standardnavigationsverhalten"
|
||||||
editTheseSettingsMayBreakAccount: "Bei Bearbeitung dieser Einstellungen besteht die
|
editTheseSettingsMayBreakAccount: "Bei Bearbeitung dieser Einstellungen besteht die
|
||||||
Gefahr, dein Nutzerkonto zu beschädigen."
|
Gefahr, dein Nutzerkonto zu beschädigen."
|
||||||
instanceTicker: "Serveranzeige zu Beiträgen"
|
instanceTicker: "Zeige zu einem Beitrag den Herkunfts-Server an"
|
||||||
waitingFor: "Warte auf {x}"
|
waitingFor: "Warte auf {x}"
|
||||||
random: "Zufällig"
|
random: "Zufällig"
|
||||||
system: "System"
|
system: "System"
|
||||||
|
@ -811,7 +812,7 @@ useReactionPickerForContextMenu: "Reaktionsauswahl durch Rechtsklick öffnen"
|
||||||
typingUsers: "{users} ist/sind am schreiben"
|
typingUsers: "{users} ist/sind am schreiben"
|
||||||
jumpToSpecifiedDate: "Zu bestimmtem Datum springen"
|
jumpToSpecifiedDate: "Zu bestimmtem Datum springen"
|
||||||
showingPastTimeline: "Es wird eine alte Timeline angezeigt"
|
showingPastTimeline: "Es wird eine alte Timeline angezeigt"
|
||||||
clear: "Zurückkehren"
|
clear: "Leeren"
|
||||||
markAllAsRead: "Alle als gelesen markieren"
|
markAllAsRead: "Alle als gelesen markieren"
|
||||||
goBack: "Zurück"
|
goBack: "Zurück"
|
||||||
unlikeConfirm: "\"Gefällt mir\" wirklich entfernen?"
|
unlikeConfirm: "\"Gefällt mir\" wirklich entfernen?"
|
||||||
|
@ -834,7 +835,7 @@ active: "Aktiv"
|
||||||
offline: "Offline"
|
offline: "Offline"
|
||||||
notRecommended: "Nicht empfohlen"
|
notRecommended: "Nicht empfohlen"
|
||||||
botProtection: "Schutz vor Bots"
|
botProtection: "Schutz vor Bots"
|
||||||
instanceBlocking: "Föderierte Blockieren/Stummschalten"
|
instanceBlocking: "Verbundene Server verwalten"
|
||||||
selectAccount: "Nutzerkonto auswählen"
|
selectAccount: "Nutzerkonto auswählen"
|
||||||
switchAccount: "Konto wechseln"
|
switchAccount: "Konto wechseln"
|
||||||
enabled: "Aktiviert"
|
enabled: "Aktiviert"
|
||||||
|
@ -899,7 +900,7 @@ manageAccounts: "Nutzerkonten verwalten"
|
||||||
makeReactionsPublic: "Reaktionsverlauf veröffentlichen"
|
makeReactionsPublic: "Reaktionsverlauf veröffentlichen"
|
||||||
makeReactionsPublicDescription: "Jeder wird die Liste deiner gesendeten Reaktionen
|
makeReactionsPublicDescription: "Jeder wird die Liste deiner gesendeten Reaktionen
|
||||||
einsehen können."
|
einsehen können."
|
||||||
classic: "Classic"
|
classic: "Mittig/zentriert"
|
||||||
muteThread: "Thread stummschalten"
|
muteThread: "Thread stummschalten"
|
||||||
unmuteThread: "Threadstummschaltung aufheben"
|
unmuteThread: "Threadstummschaltung aufheben"
|
||||||
ffVisibility: "Sichtbarkeit von Gefolgten/Followern"
|
ffVisibility: "Sichtbarkeit von Gefolgten/Followern"
|
||||||
|
@ -921,7 +922,7 @@ overridedDeviceKind: "Gerätetyp"
|
||||||
smartphone: "Smartphone"
|
smartphone: "Smartphone"
|
||||||
tablet: "Tablet"
|
tablet: "Tablet"
|
||||||
auto: "Automatisch"
|
auto: "Automatisch"
|
||||||
themeColor: "Farbe der Laufschrift (Ticker)"
|
themeColor: "Farbe der Ticker-Laufschrift"
|
||||||
size: "Größe"
|
size: "Größe"
|
||||||
numberOfColumn: "Spaltenanzahl"
|
numberOfColumn: "Spaltenanzahl"
|
||||||
searchByGoogle: "Suchen"
|
searchByGoogle: "Suchen"
|
||||||
|
@ -945,18 +946,19 @@ recentNHours: "Die letzten {n} Stunden"
|
||||||
recentNDays: "Die letzten {n} Tage"
|
recentNDays: "Die letzten {n} Tage"
|
||||||
noEmailServerWarning: "Es ist kein Email-Server konfiguriert."
|
noEmailServerWarning: "Es ist kein Email-Server konfiguriert."
|
||||||
thereIsUnresolvedAbuseReportWarning: "Es liegen ungelöste Meldungen vor."
|
thereIsUnresolvedAbuseReportWarning: "Es liegen ungelöste Meldungen vor."
|
||||||
recommended: "Empfehlung"
|
recommended: "Favoriten"
|
||||||
check: "Kontrolle"
|
check: "Kontrolle"
|
||||||
driveCapOverrideLabel: "Die Cloud-Drive-Kapazität dieses Nutzers verändern"
|
driveCapOverrideLabel: "Die Cloud-Drive-Kapazität dieses Nutzers verändern"
|
||||||
driveCapOverrideCaption: "Gib einen Wert von 0 oder weniger ein, um die Kapazität
|
driveCapOverrideCaption: "Gib einen Wert von 0 oder weniger ein, um die Kapazität
|
||||||
auf den Standard zurückzusetzen."
|
auf den Standard zurückzusetzen."
|
||||||
requireAdminForView: "Melde dich mit einem Administratorkonto an, um dies einzusehen."
|
requireAdminForView: "Melde dich mit einem Administratorkonto an, um dies einzusehen."
|
||||||
isSystemAccount: "Ein Nutzerkonto, dass durch das System erstellt und automatisch
|
isSystemAccount: "Dieses Konto wird vom System erstellt und automatisch verwaltet.
|
||||||
kontrolliert wird."
|
Bitte moderieren, bearbeiten, löschen oder manipulieren Sie dieses Konto nicht,
|
||||||
|
da es sonst zu einem Server-Absturz kommen könnte."
|
||||||
typeToConfirm: "Bitte gib zur Bestätigung {x} ein"
|
typeToConfirm: "Bitte gib zur Bestätigung {x} ein"
|
||||||
deleteAccount: "Nutzerkonto löschen"
|
deleteAccount: "Nutzerkonto löschen"
|
||||||
document: "Dokumentation"
|
document: "Dokumentation"
|
||||||
numberOfPageCache: "Seitencachegröße"
|
numberOfPageCache: "Anzahl der zwischengespeicherten Seiten"
|
||||||
numberOfPageCacheDescription: "Das Erhöhen dieses Caches führt zu einer angenehmerern
|
numberOfPageCacheDescription: "Das Erhöhen dieses Caches führt zu einer angenehmerern
|
||||||
Nutzererfahrung, erhöht aber Serverlast und Arbeitsspeicherauslastung."
|
Nutzererfahrung, erhöht aber Serverlast und Arbeitsspeicherauslastung."
|
||||||
logoutConfirm: "Wirklich abmelden?"
|
logoutConfirm: "Wirklich abmelden?"
|
||||||
|
@ -965,7 +967,7 @@ statusbar: "Statusleiste"
|
||||||
pleaseSelect: "Wähle eine Option"
|
pleaseSelect: "Wähle eine Option"
|
||||||
reverse: "Umkehren"
|
reverse: "Umkehren"
|
||||||
colored: "Farbig"
|
colored: "Farbig"
|
||||||
refreshInterval: "Aktualisierungsrate "
|
refreshInterval: "Aktualisierungsintervall "
|
||||||
label: "Beschriftung"
|
label: "Beschriftung"
|
||||||
type: "Art"
|
type: "Art"
|
||||||
speed: "Geschwindigkeit"
|
speed: "Geschwindigkeit"
|
||||||
|
@ -980,7 +982,7 @@ cannotUploadBecauseInappropriate: "Diese Datei kann nicht hochgeladen werden, da
|
||||||
cannotUploadBecauseNoFreeSpace: "Die Datei konnte nicht hochgeladen werden, da dein
|
cannotUploadBecauseNoFreeSpace: "Die Datei konnte nicht hochgeladen werden, da dein
|
||||||
Cloud-Drive-Speicherplatz aufgebraucht ist."
|
Cloud-Drive-Speicherplatz aufgebraucht ist."
|
||||||
beta: "Beta"
|
beta: "Beta"
|
||||||
enableAutoSensitive: "NSFW-Automarkierung"
|
enableAutoSensitive: "Selbstständige NSFW-Kennzeichnung"
|
||||||
enableAutoSensitiveDescription: "Erlaubt, wo möglich, die automatische Erkennung und
|
enableAutoSensitiveDescription: "Erlaubt, wo möglich, die automatische Erkennung und
|
||||||
Kennzeichnung von NSFW-Medien durch maschinelles Lernen. Auch wenn diese Option
|
Kennzeichnung von NSFW-Medien durch maschinelles Lernen. Auch wenn diese Option
|
||||||
deaktiviert ist, kann sie über den Server aktiviert sein."
|
deaktiviert ist, kann sie über den Server aktiviert sein."
|
||||||
|
@ -999,7 +1001,7 @@ _sensitiveMediaDetection:
|
||||||
sensitivityDescription: "Durch das Senken der Sensitivität kann die Anzahl an Fehlerkennungen
|
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
|
(sog. false positives) reduziert werden. Durch ein Erhöhen dieser kann die Anzahl
|
||||||
an verpassten Erkennungen (sog. false negatives) reduziert werden."
|
an verpassten Erkennungen (sog. false negatives) reduziert werden."
|
||||||
setSensitiveFlagAutomatically: "Als NSFW markieren"
|
setSensitiveFlagAutomatically: "Als NSFW kennzeichnen"
|
||||||
setSensitiveFlagAutomaticallyDescription: "Die Resultate der internen Erkennung
|
setSensitiveFlagAutomaticallyDescription: "Die Resultate der internen Erkennung
|
||||||
werden beibehalten, auch wenn diese Option deaktiviert ist."
|
werden beibehalten, auch wenn diese Option deaktiviert ist."
|
||||||
analyzeVideos: "Videoanalyse aktivieren"
|
analyzeVideos: "Videoanalyse aktivieren"
|
||||||
|
@ -1039,9 +1041,9 @@ _forgotPassword:
|
||||||
enterEmail: "Gib die Email-Adresse ein, mit der du dich registriert hast. An diese
|
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."
|
wird ein Link gesendet, mit dem du dein Passwort zurücksetzen kannst."
|
||||||
ifNoEmail: "Solltest du bei der Registrierung keine Email-Adresse angegeben haben,
|
ifNoEmail: "Solltest du bei der Registrierung keine Email-Adresse angegeben haben,
|
||||||
wende dich bitte an den Administrator."
|
wende dich bitte an den Server-Administrator."
|
||||||
contactAdmin: "Dieser Server unterstützt die Verwendung von Email-Adressen nicht.
|
contactAdmin: "Dieser Server unterstützt keine Verwendung von Email-Adressen. Kontaktiere
|
||||||
Kontaktiere bitte den Server-Administrator, um dein Passwort zurücksetzen zu lassen."
|
bitte den Server-Administrator, um dein Passwort zurücksetzen zu lassen."
|
||||||
_gallery:
|
_gallery:
|
||||||
my: "Meine Bilder-Galerie"
|
my: "Meine Bilder-Galerie"
|
||||||
liked: "Mit \"Gefällt mir\" markierte Beiträge"
|
liked: "Mit \"Gefällt mir\" markierte Beiträge"
|
||||||
|
@ -1054,7 +1056,7 @@ _email:
|
||||||
title: "Du hast eine Follow-Anfrage erhalten"
|
title: "Du hast eine Follow-Anfrage erhalten"
|
||||||
_plugin:
|
_plugin:
|
||||||
install: "Plugins installieren"
|
install: "Plugins installieren"
|
||||||
installWarn: "Installiere bitte nur vertrauenswürdige Plugins."
|
installWarn: "Bitte nur vertrauenswürdige Plugins installieren."
|
||||||
manage: "Plugins verwalten"
|
manage: "Plugins verwalten"
|
||||||
_preferencesBackups:
|
_preferencesBackups:
|
||||||
list: "Erstellte Backups"
|
list: "Erstellte Backups"
|
||||||
|
@ -1095,8 +1097,8 @@ _aboutMisskey:
|
||||||
Personen sehr. Danke! 🥰"
|
Personen sehr. Danke! 🥰"
|
||||||
patrons: "UnterstützerInnen"
|
patrons: "UnterstützerInnen"
|
||||||
_nsfw:
|
_nsfw:
|
||||||
respect: "Als NSFW markierte Bilder verbergen"
|
respect: "Mit NSFW gekennzeichnete Bilder verbergen"
|
||||||
ignore: "Als NSFW markierte Bilder nicht verbergen"
|
ignore: "Mit NSFW gekennzeichnete Bilder nicht verbergen"
|
||||||
force: "Alle Medien verbergen"
|
force: "Alle Medien verbergen"
|
||||||
_mfm:
|
_mfm:
|
||||||
cheatSheet: "MFM Spickzettel"
|
cheatSheet: "MFM Spickzettel"
|
||||||
|
@ -1183,6 +1185,12 @@ _mfm:
|
||||||
scaleDescription: Skaliere den Inhalt um einen bestimmten Betrag.
|
scaleDescription: Skaliere den Inhalt um einen bestimmten Betrag.
|
||||||
foregroundDescription: Ändern der Vordergrundfarbe von Text.
|
foregroundDescription: Ändern der Vordergrundfarbe von Text.
|
||||||
backgroundDescription: Ändern der Hintergrundfarbe von Text
|
backgroundDescription: Ändern der Hintergrundfarbe von Text
|
||||||
|
play: MFM abspielen
|
||||||
|
stop: MFM anhalten
|
||||||
|
warn: MFM können schnell bewegte oder anderweitig auffallende Animationen enthalten
|
||||||
|
alwaysPlay: Alle animierten MFM immer automatisch abspielen
|
||||||
|
advancedDescription: Wenn diese Funktion deaktiviert ist, können nur einfache Formatierungen
|
||||||
|
vorgenommen werden, es sei denn, animiertes MFM ist aktiviert
|
||||||
_instanceTicker:
|
_instanceTicker:
|
||||||
none: "Nie anzeigen"
|
none: "Nie anzeigen"
|
||||||
remote: "Für Nutzer eines anderen Servers anzeigen"
|
remote: "Für Nutzer eines anderen Servers anzeigen"
|
||||||
|
@ -1225,12 +1233,12 @@ _wordMute:
|
||||||
hard: "Schwer"
|
hard: "Schwer"
|
||||||
mutedNotes: "Stummgeschaltete Beiträge"
|
mutedNotes: "Stummgeschaltete Beiträge"
|
||||||
_instanceMute:
|
_instanceMute:
|
||||||
instanceMuteDescription: "Schaltet alle Beiträge/boosts stumm, die von den gelisteten
|
instanceMuteDescription: "Schaltet alle Beiträge/Boosts stumm, die von den gelisteten
|
||||||
Servern stammen, inklusive Antworten von Nutzern an einen Nutzer eines stummgeschalteten
|
Servern stammen, inklusive Antworten von Nutzern an einen Nutzer eines stummgeschalteten
|
||||||
Servers."
|
Servers."
|
||||||
instanceMuteDescription2: "Mit Zeilenumbrüchen trennen"
|
instanceMuteDescription2: "Mit Zeilenumbrüchen trennen"
|
||||||
title: "Blendet Beiträge von aufgelisteten Servern aus."
|
title: "Blendet Beiträge von aufgelisteten Servern aus."
|
||||||
heading: "Liste der stummzuschaltenden Server"
|
heading: "Liste der Server die stummgeschaltet werden sollen"
|
||||||
_theme:
|
_theme:
|
||||||
explore: "Farbkombinationen finden"
|
explore: "Farbkombinationen finden"
|
||||||
install: "Eine Farbkombination installieren"
|
install: "Eine Farbkombination installieren"
|
||||||
|
@ -1345,21 +1353,19 @@ _tutorial:
|
||||||
step5_1: "Timelines, Timelines überall!"
|
step5_1: "Timelines, Timelines überall!"
|
||||||
step5_2: "Dein Server hat {timelines} verschiedene Timelines aktiviert."
|
step5_2: "Dein Server hat {timelines} verschiedene Timelines aktiviert."
|
||||||
step5_3: "Die {icon} Home-Timeline ist die Timeline, in der du die Beiträge der
|
step5_3: "Die {icon} Home-Timeline ist die Timeline, in der du die Beiträge der
|
||||||
Nutzerkonten sehen kannst, denen du folgst und von jedem anderen auf diesem Server.
|
Nutzerkonten sehen kannst, denen du folgst."
|
||||||
Solltest du bevorzugen, dass deine Home-Timeline nur Beiträge von den Nutzerkonten
|
step5_4: "In der {Icon} Local-Timeline kannst du die Beiträge von jedem/jeder sehen
|
||||||
enthält, denen du folgst, kannst du das ganz einfach in den Einstellungen ändern!"
|
der/die auf diesem Server registriert ist."
|
||||||
step5_4: "In der {Icon} Local-Timeline kannst du die Beiträge aller anderen Mitglieder
|
step5_5: "Die Social-Timeline {icon} ist eine Kombination aus der Home-Timeline
|
||||||
dieses Servers sehen."
|
und der Local-Timeline."
|
||||||
step5_5: "Die {icon} Social-Timeline zeigt dir ausschließlich Beiträge von Nutzerkonten
|
step5_6: "In der Empfohlen-Timeline {icon} kannst du Posts sehen, die von den Admins
|
||||||
denen Du folgst."
|
vorgeschlagen wurden."
|
||||||
step5_6: "In der {icon} Empfehlungen-Timeline kannst du Beiträge von Servern sehen,
|
step5_7: "In der {icon} Global-Timeline können Sie Beiträge von allen verknüpften
|
||||||
die dir von den Server-Administratoren empfohlen/vorgeschlagen werden."
|
Servern aus dem Fediverse sehen."
|
||||||
step5_7: "In der {icon} Global-Timeline können Sie Beiträge von jedem anderen verbundenen
|
|
||||||
Server im fediverse sehen."
|
|
||||||
step6_1: "Also, was ist das hier?"
|
step6_1: "Also, was ist das hier?"
|
||||||
step6_2: "Schön, mit Deiner Anmeldung zu Calckey bist Du gleichzeitig einem Portal
|
step6_2: "Mit Deiner Anmeldung zu Calckey bist Du gleichzeitig einem Portal zum
|
||||||
zum Fediverse beigetreten, einem Netzwerk mit Tausenden von verbundenen Servern
|
Fediverse beigetreten, einem Netzwerk mit Tausenden von, miteinander verbundenen,
|
||||||
(häufig noch als \"Instanzen\" bezeichnet)."
|
Servern."
|
||||||
step6_3: "Jeder der Server funktioniert auf unterschiedliche Weise, und nicht alle
|
step6_3: "Jeder der Server funktioniert auf unterschiedliche Weise, und nicht alle
|
||||||
Server führen Calckey aus. Dieser jedoch schon! Es ist zu Beginn vielleicht ein
|
Server führen Calckey aus. Dieser jedoch schon! Es ist zu Beginn vielleicht ein
|
||||||
wenig kompliziert, aber Sie werden in kürzester Zeit den Dreh raus haben."
|
wenig kompliziert, aber Sie werden in kürzester Zeit den Dreh raus haben."
|
||||||
|
@ -1367,8 +1373,8 @@ _tutorial:
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "Du hast bereits ein Gerät für Zwei-Faktor-Authentifizierung
|
alreadyRegistered: "Du hast bereits ein Gerät für Zwei-Faktor-Authentifizierung
|
||||||
registriert."
|
registriert."
|
||||||
registerDevice: "Neues Gerät registrieren"
|
registerTOTP: "Neues Gerät registrieren"
|
||||||
registerKey: "Neuen Sicherheitsschlüssel registrieren"
|
registerSecurityKey: "Neuen Sicherheitsschlüssel registrieren"
|
||||||
step1: "Installiere zuerst eine Authentifizierungsapp (z.B. {a} oder {b}) auf deinem
|
step1: "Installiere zuerst eine Authentifizierungsapp (z.B. {a} oder {b}) auf deinem
|
||||||
Gerät."
|
Gerät."
|
||||||
step2: "Dann, scanne den angezeigten QR-Code mit deinem Gerät."
|
step2: "Dann, scanne den angezeigten QR-Code mit deinem Gerät."
|
||||||
|
@ -1379,6 +1385,25 @@ _2fa:
|
||||||
securityKeyInfo: "Du kannst neben Fingerabdruck- oder PIN-Authentifizierung auf
|
securityKeyInfo: "Du kannst neben Fingerabdruck- oder PIN-Authentifizierung auf
|
||||||
deinem Gerät auch Anmeldung mit Hilfe eines FIDO2-kompatiblen Hardware-Sicherheitsschlüssels
|
deinem Gerät auch Anmeldung mit Hilfe eines FIDO2-kompatiblen Hardware-Sicherheitsschlüssels
|
||||||
einrichten."
|
einrichten."
|
||||||
|
step3Title: Gib deinen Authentifizierungscode ein
|
||||||
|
renewTOTPOk: Neu konfigurieren
|
||||||
|
securityKeyNotSupported: Dein Browser unterstützt Hardware-Security-Keys nicht.
|
||||||
|
chromePasskeyNotSupported: Chrome Passkeys werden momentan nicht unterstützt.
|
||||||
|
renewTOTP: Konfiguriere deine Authenticator App neu
|
||||||
|
renewTOTPCancel: Abbrechen
|
||||||
|
tapSecurityKey: Bitte folge den Anweisungen deines Browsers, um einen Hardware-Security-Key
|
||||||
|
oder einen Passkey zu registrieren
|
||||||
|
removeKey: Entferne deinen Hardware-Security-Key
|
||||||
|
removeKeyConfirm: Möchtest du wirklich deinen Key mit der Bezeichnung {name} löschen?
|
||||||
|
renewTOTPConfirm: Das wird dazu führen, dass du Verifizierungscodes deiner vorherigen
|
||||||
|
Authenticator App nicht mehr nutzen kannst
|
||||||
|
whyTOTPOnlyRenew: Die Authentificator App kann nicht entfernt werden, solange ein
|
||||||
|
Hardware-Security-Key registriert ist.
|
||||||
|
step2Click: Ein Klick auf diesen QR-Code erlaubt es dir eine 2FA-Methode zu deinem
|
||||||
|
Security Key oder deiner Authenticator App hinzuzufügen.
|
||||||
|
registerTOTPBeforeKey: Bitte registriere eine Authentificator App, um einen Hardware-Security-Key
|
||||||
|
oder einen Passkey zu nutzen.
|
||||||
|
securityKeyName: Gib einen Namen für den Key ein
|
||||||
_permissions:
|
_permissions:
|
||||||
"read:account": "Deine Nutzerkontoinformationen lesen"
|
"read:account": "Deine Nutzerkontoinformationen lesen"
|
||||||
"write:account": "Deine Nutzerkontoinformationen bearbeiten"
|
"write:account": "Deine Nutzerkontoinformationen bearbeiten"
|
||||||
|
@ -1447,7 +1472,7 @@ _widgets:
|
||||||
trends: "Trends"
|
trends: "Trends"
|
||||||
clock: "Uhr"
|
clock: "Uhr"
|
||||||
rss: "RSS-Reader"
|
rss: "RSS-Reader"
|
||||||
rssTicker: "RSS-Laufschrift (Ticker)"
|
rssTicker: "RSS Ticker"
|
||||||
activity: "Aktivität"
|
activity: "Aktivität"
|
||||||
photos: "Fotos"
|
photos: "Fotos"
|
||||||
digitalClock: "Digitaluhr"
|
digitalClock: "Digitaluhr"
|
||||||
|
@ -1464,9 +1489,13 @@ _widgets:
|
||||||
aichan: "Ai"
|
aichan: "Ai"
|
||||||
_userList:
|
_userList:
|
||||||
chooseList: Wählen Sie eine Liste aus
|
chooseList: Wählen Sie eine Liste aus
|
||||||
userList: Nutzerliste
|
userList: Benutzerliste
|
||||||
|
serverInfo: Server-Infos
|
||||||
|
meiliStatus: Server-Status
|
||||||
|
meiliSize: Indexgröße
|
||||||
|
meiliIndexCount: Indexierte Beiträge
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Inhalt verbergen"
|
hide: "Verbergen"
|
||||||
show: "Inhalt anzeigen"
|
show: "Inhalt anzeigen"
|
||||||
chars: "{count} Zeichen"
|
chars: "{count} Zeichen"
|
||||||
files: "{count} Datei(en)"
|
files: "{count} Datei(en)"
|
||||||
|
@ -1568,9 +1597,9 @@ _timelines:
|
||||||
local: "Local-TL"
|
local: "Local-TL"
|
||||||
social: "Social-TL"
|
social: "Social-TL"
|
||||||
global: "Global-TL"
|
global: "Global-TL"
|
||||||
recommended: Empfehlungen
|
recommended: Admin-Favoriten
|
||||||
_pages:
|
_pages:
|
||||||
newPage: "Seite erstellen"
|
newPage: "Neue Seite erstellen"
|
||||||
editPage: "Seite bearbeiten"
|
editPage: "Seite bearbeiten"
|
||||||
readPage: "Quelltextansicht"
|
readPage: "Quelltextansicht"
|
||||||
created: "Seite erfolgreich erstellt"
|
created: "Seite erfolgreich erstellt"
|
||||||
|
@ -1898,6 +1927,9 @@ _notification:
|
||||||
followBack: "folgt dir nun auch"
|
followBack: "folgt dir nun auch"
|
||||||
reply: "Antworten"
|
reply: "Antworten"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
|
voted: haben bei deiner Umfrage abgestimmt
|
||||||
|
reacted: hat auf deinen Beitrag reagiert
|
||||||
|
renoted: hat Ihren Beitrag geteilt
|
||||||
_deck:
|
_deck:
|
||||||
alwaysShowMainColumn: "Hauptspalte immer zeigen"
|
alwaysShowMainColumn: "Hauptspalte immer zeigen"
|
||||||
columnAlign: "Spaltenausrichtung"
|
columnAlign: "Spaltenausrichtung"
|
||||||
|
@ -1922,15 +1954,16 @@ _deck:
|
||||||
widgets: "Widgets"
|
widgets: "Widgets"
|
||||||
notifications: "Benachrichtigungen"
|
notifications: "Benachrichtigungen"
|
||||||
tl: "Timeline"
|
tl: "Timeline"
|
||||||
antenna: "News-Picker"
|
antenna: "Antenne"
|
||||||
list: "Listen"
|
list: "Listen"
|
||||||
mentions: "Erwähnungen"
|
mentions: "Erwähnungen"
|
||||||
direct: "Direktnachrichten"
|
direct: "Direktnachrichten"
|
||||||
|
channel: Kanal
|
||||||
renameProfile: Arbeitsbereich umbenennen
|
renameProfile: Arbeitsbereich umbenennen
|
||||||
nameAlreadyExists: Der Name für den Arbeitsbereich ist bereits vorhanden.
|
nameAlreadyExists: Der Name für den Arbeitsbereich ist bereits vorhanden.
|
||||||
enableRecommendedTimeline: Empfohlenen Zeitplan aktivieren
|
enableRecommendedTimeline: '"Favoriten"-Timeline einschalten'
|
||||||
secureMode: Sicherer Modus (Autorisierter Abruf)
|
secureMode: Sicherer Modus (Autorisierter Abruf)
|
||||||
instanceSecurity: Serversicherheit
|
instanceSecurity: Server-Sicherheit
|
||||||
manageGroups: Gruppen verwalten
|
manageGroups: Gruppen verwalten
|
||||||
noThankYou: Nein, danke
|
noThankYou: Nein, danke
|
||||||
privateMode: Privater Modus
|
privateMode: Privater Modus
|
||||||
|
@ -1938,29 +1971,29 @@ enableEmojiReactions: Emoji-Reaktionen aktivieren
|
||||||
flagSpeakAsCat: Wie eine Katze sprechen
|
flagSpeakAsCat: Wie eine Katze sprechen
|
||||||
showEmojisInReactionNotifications: Emojis in Reaktionsbenachrichtigungen anzeigen
|
showEmojisInReactionNotifications: Emojis in Reaktionsbenachrichtigungen anzeigen
|
||||||
userSaysSomethingReason: '{name} sagte {reason}'
|
userSaysSomethingReason: '{name} sagte {reason}'
|
||||||
hiddenTagsDescription: 'Liste die Hashtags (ohne #) welche du von Trending und Explore
|
hiddenTagsDescription: 'Geben sie hier die Schlagworte (ohne #hashtag) an, die vom
|
||||||
verstecken möchtest. Versteckte Hashtags sind durch andere Wege weiterhin auffindbar.
|
"Trending and Explore" ausgeschlossen werden sollen. Versteckte Schlagworte sind
|
||||||
Blockierte Server sind nicht betroffen, auch wenn sie hier aufgeführt sind.'
|
immer noch über andere Wege auffindbar.'
|
||||||
addInstance: Server hinzufügen
|
addInstance: Server hinzufügen
|
||||||
flagSpeakAsCatDescription: Deine Beiträge werden im Katzenmodus nyanisiert
|
flagSpeakAsCatDescription: Deine Beiträge werden im Katzenmodus nyanisiert
|
||||||
hiddenTags: Versteckte Hashtags
|
hiddenTags: Versteckte Hashtags
|
||||||
antennaInstancesDescription: Nenne einen Servernamen pro Zeile
|
antennaInstancesDescription: Geben sie einen Server-Namen pro Zeile ein
|
||||||
secureModeInfo: Bei Anfragen an andere Server nicht ohne Nachweis zurücksenden.
|
secureModeInfo: Bei Anfragen an andere Server nicht ohne Nachweis zurücksenden.
|
||||||
renoteMute: Boosts stummschalten
|
renoteMute: Boosts stummschalten
|
||||||
renoteUnmute: Stummschaltung von Boosts aufheben
|
renoteUnmute: Stummschaltung von Boosts aufheben
|
||||||
noInstances: Es gibt keine Server
|
noInstances: Keine Server gefunden
|
||||||
privateModeInfo: Wenn diese Option aktiviert ist, können nur als vertrauenswürdig
|
privateModeInfo: Wenn diese Option aktiviert ist, können nur als vertrauenswürdig
|
||||||
eingestufte Server mit deinem Server föderieren. Alle Beiträge werden für die Öffentlichkeit
|
eingestufte Server mit diesem Server verknüpft werden. Alle Beiträge werden für
|
||||||
verborgen.
|
die Öffentlichkeit verborgen.
|
||||||
allowedInstances: Vertrauenswürdige Server
|
allowedInstances: Vertrauenswürdige Server
|
||||||
selectInstance: Wähle einen Server
|
selectInstance: Wähle einen Server aus
|
||||||
silencedInstancesDescription: Liste die Hostnamen der Server auf, die du stummschalten
|
silencedInstancesDescription: Liste die Hostnamen der Server auf, die du stummschalten
|
||||||
möchtest. Nutzerkonten in den aufgelisteten Servern werden als "Stumm" behandelt,
|
möchtest. Nutzerkonten in den aufgelisteten Servern werden als "Stumm" behandelt,
|
||||||
können nur Follow-Anfragen stellen und können keine lokalen Nutzerkonten erwähnen,
|
können nur Follow-Anfragen stellen und können keine lokalen Nutzerkonten erwähnen,
|
||||||
wenn sie nicht gefolgt werden. Dies wirkt sich nicht auf die blockierten Server
|
wenn sie nicht gefolgt werden. Dies wirkt sich nicht auf die blockierten Server
|
||||||
aus.
|
aus.
|
||||||
editNote: Beitrag bearbeiten
|
editNote: Beitrag bearbeiten
|
||||||
edited: Bearbeitet
|
edited: 'Bearbeitet um {date} {time}'
|
||||||
silenceThisInstance: Diesen Server stummschalten
|
silenceThisInstance: Diesen Server stummschalten
|
||||||
silencedInstances: Stummgeschaltete Server
|
silencedInstances: Stummgeschaltete Server
|
||||||
silenced: Stummgeschaltet
|
silenced: Stummgeschaltet
|
||||||
|
@ -1968,7 +2001,7 @@ deleted: Gelöscht
|
||||||
breakFollowConfirm: Sind sie sicher, dass sie eine(n) Follower entfernen möchten?
|
breakFollowConfirm: Sind sie sicher, dass sie eine(n) Follower entfernen möchten?
|
||||||
unsubscribePushNotification: Push-Benachrichtigungen deaktivieren
|
unsubscribePushNotification: Push-Benachrichtigungen deaktivieren
|
||||||
pushNotificationAlreadySubscribed: Push-Benachrichtigungen sind bereits aktiviert
|
pushNotificationAlreadySubscribed: Push-Benachrichtigungen sind bereits aktiviert
|
||||||
pushNotificationNotSupported: Dein Browser oder der Server unterstützt keine Push-Benachrichtigungen
|
pushNotificationNotSupported: Ihr Browser oder der Server unterstützt keine Push-Benachrichtigungen
|
||||||
pushNotification: Push-Benachrichtigungen
|
pushNotification: Push-Benachrichtigungen
|
||||||
subscribePushNotification: Push-Benachrichtigungen aktivieren
|
subscribePushNotification: Push-Benachrichtigungen aktivieren
|
||||||
showLocalPosts: 'Zeige lokale Beiträge in:'
|
showLocalPosts: 'Zeige lokale Beiträge in:'
|
||||||
|
@ -1983,7 +2016,7 @@ moveToLabel: 'Nutzerkonto zu dem sie umziehen:'
|
||||||
moveAccountDescription: 'Dieser Vorgang kann nicht rückgängig gemacht werden! Stellen
|
moveAccountDescription: 'Dieser Vorgang kann nicht rückgängig gemacht werden! Stellen
|
||||||
sie vor dem Umzug dieses Nutzerkontos sicher, dass Sie einen Namen für Ihr neues
|
sie vor dem Umzug dieses Nutzerkontos sicher, dass Sie einen Namen für Ihr neues
|
||||||
Nutzerkonto eingerichtet haben. Bitte geben sie die Bezeichnung des neuen Nutzerkontos
|
Nutzerkonto eingerichtet haben. Bitte geben sie die Bezeichnung des neuen Nutzerkontos
|
||||||
wie folgt ein: @name@instance.xyz'
|
wie folgt ein: @name@server.xyz'
|
||||||
findOtherInstance: Einen anderen Server finden
|
findOtherInstance: Einen anderen Server finden
|
||||||
sendPushNotificationReadMessage: Löschung der Push-Benachrichtigungen sobald die entsprechenden
|
sendPushNotificationReadMessage: Löschung der Push-Benachrichtigungen sobald die entsprechenden
|
||||||
Benachrichtigungen oder Beiträge gelesen wurden.
|
Benachrichtigungen oder Beiträge gelesen wurden.
|
||||||
|
@ -1998,7 +2031,7 @@ socialTimeline: Social-Timeline
|
||||||
moveFrom: Bisheriges Nutzerkonto zu diesem Nutzerkonto umziehen
|
moveFrom: Bisheriges Nutzerkonto zu diesem Nutzerkonto umziehen
|
||||||
_messaging:
|
_messaging:
|
||||||
groups: Gruppen
|
groups: Gruppen
|
||||||
dms: Persönlich
|
dms: Privat
|
||||||
recommendedInstances: Empfohlene Server
|
recommendedInstances: Empfohlene Server
|
||||||
logoImageUrl: URL des Logo-Bildes
|
logoImageUrl: URL des Logo-Bildes
|
||||||
userSaysSomethingReasonReply: '{name} hat auf einen Beitrag geantwortet der {reason}
|
userSaysSomethingReasonReply: '{name} hat auf einen Beitrag geantwortet der {reason}
|
||||||
|
@ -2020,23 +2053,23 @@ adminCustomCssWarn: Diese Einstellung sollte nur verwendet werden, wenn Sie wiss
|
||||||
mehr normal funktionieren. Bitte stellen Sie sicher, dass Ihr CSS ordnungsgemäß
|
mehr normal funktionieren. Bitte stellen Sie sicher, dass Ihr CSS ordnungsgemäß
|
||||||
funktioniert, indem Sie es in Ihren Benutzereinstellungen testen.
|
funktioniert, indem Sie es in Ihren Benutzereinstellungen testen.
|
||||||
customMOTD: Benutzerdefinierte Meldung des Tages (Begrüßungsbildschirmmeldungen)
|
customMOTD: Benutzerdefinierte Meldung des Tages (Begrüßungsbildschirmmeldungen)
|
||||||
allowedInstancesDescription: Hosts von Instanzen, die für den Verbund auf die Whitelist
|
allowedInstancesDescription: Hosts von Servern, die zur Verbindung auf die Liste vertrauenswürdiger
|
||||||
gesetzt werden sollen, jeweils durch eine neue Zeile getrennt (gilt nur im privaten
|
Server gesetzt werden sollen, werden jeweils durch eine neue Zeile getrennt eingegeben
|
||||||
Modus).
|
(gilt nur im privaten Modus).
|
||||||
migration: Migration
|
migration: Migration
|
||||||
updateAvailable: Es könnte eine Aktualisierung verfügbar sein!
|
updateAvailable: Es könnte eine Aktualisierung verfügbar sein!
|
||||||
showAdminUpdates: Anzeigen, dass eine neue Calckey-Version verfügbar ist (nur Administrator)
|
showAdminUpdates: Anzeigen, dass eine neue Calckey-Version verfügbar ist (nur Administrator)
|
||||||
customMOTDDescription: Benutzerdefinierte Meldungen für die Meldung des Tages (Begrüßungsbildschirm),
|
customMOTDDescription: Benutzerdefinierte Meldungen für die Meldung des Tages (Begrüßungsbildschirm),
|
||||||
die durch Zeilenumbrüche getrennt sind und nach dem Zufallsprinzip jedes Mal angezeigt
|
die durch Zeilenumbrüche getrennt sind und nach dem Zufallsprinzip jedes Mal angezeigt
|
||||||
werden, wenn ein Benutzer die Seite (neu) lädt.
|
werden, wenn ein Benutzer die Seite (neu) lädt.
|
||||||
recommendedInstancesDescription: Empfohlene Instanzen, die durch Zeilenumbrüche getrennt
|
recommendedInstancesDescription: Empfohlene Server, die durch Zeilenumbrüche getrennt
|
||||||
sind, werden in der empfohlenen Zeitachse angezeigt. Fügen Sie NICHT "https://"
|
sind, werden in der "Favoriten"-Timeline angezeigt. Fügen Sie NICHT "https://" hinzu,
|
||||||
hinzu, sondern NUR die Domain.
|
sondern NUR die Domain.
|
||||||
sendModMail: Moderationshinweis senden
|
sendModMail: Moderationshinweis senden
|
||||||
moveFromDescription: 'Dadurch wird ein Alias Ihres alten Nutzerkontos festgelegt,
|
moveFromDescription: 'Dadurch wird ein Alias Ihres alten Nutzerkontos festgelegt,
|
||||||
sodass Sie von ihrem bisherigen Konto zu diesem Nutzerkonto wechseln können. Tun
|
sodass Sie von ihrem bisherigen Konto zu diesem Nutzerkonto wechseln können. Tun
|
||||||
Sie dies, BEVOR Sie von Ihrem bisherigen Nutzerkonto hierhin wechseln. Bitte geben
|
Sie dies, BEVOR Sie von Ihrem bisherigen Nutzerkonto hierhin wechseln. Bitte geben
|
||||||
Sie den Namen des Nutzerkontos wie folgt ein: person@server.xyz'
|
Sie den Namen des Nutzerkontos wie folgt ein: @person@server.xyz'
|
||||||
preventAiLearning: KI gestütztes bot-scraping unterdrücken
|
preventAiLearning: KI gestütztes bot-scraping unterdrücken
|
||||||
preventAiLearningDescription: Fordern Sie KI-Sprachmodelle von Drittanbietern auf,
|
preventAiLearningDescription: Fordern Sie KI-Sprachmodelle von Drittanbietern auf,
|
||||||
die von Ihnen hochgeladenen Inhalte, wie z. B. Beiträge und Bilder, nicht zu untersuchen.
|
die von Ihnen hochgeladenen Inhalte, wie z. B. Beiträge und Bilder, nicht zu untersuchen.
|
||||||
|
@ -2059,3 +2092,62 @@ older: älter
|
||||||
newer: neuer
|
newer: neuer
|
||||||
accessibility: Erreichbarkeit
|
accessibility: Erreichbarkeit
|
||||||
jumpToPrevious: Zum Vorherigen springen
|
jumpToPrevious: Zum Vorherigen springen
|
||||||
|
silencedWarning: Diese Meldung wird angezeigt, weil diese Nutzer von Servern stammen,
|
||||||
|
die Ihr Administrator abgeschaltet hat, so dass es sich möglicherweise um Spam handelt.
|
||||||
|
_experiments:
|
||||||
|
enablePostEditing: Beitragsbearbeitung ermöglichen
|
||||||
|
title: Funktionstests
|
||||||
|
postEditingCaption: Zeigt die Option für Nutzer an, ihre bestehenden Beiträge über
|
||||||
|
das Menü "Beitragsoptionen" zu bearbeiten
|
||||||
|
enablePostImports: Beitragsimporte aktivieren
|
||||||
|
postImportsCaption: Erlaubt es Nutzer:innen ihre Posts von alten Calckey, Misskey,
|
||||||
|
Mastodon, Akkoma und Pleroma Accounts zu importieren. Bei Engpässen in der Warteschlange
|
||||||
|
kann es zu Verlangsamungen beim Laden während des Imports kommen.
|
||||||
|
noGraze: Bitte deaktivieren Sie die Browsererweiterung "Graze for Mastodon", da sie
|
||||||
|
die Funktion von Calckey stört.
|
||||||
|
indexFrom: Indexieren ab Beitragskennung aufwärts
|
||||||
|
indexNotice: Wird jetzt indexiert. Dies wird wahrscheinlich eine Weile dauern, bitte
|
||||||
|
starten Sie Ihren Server für mindestens eine Stunde nicht neu.
|
||||||
|
customKaTeXMacroDescription: "Richten Sie Makros ein, um mathematische Ausdrücke einfach
|
||||||
|
zu schreiben! Die Notation entspricht den LaTeX-Befehlsdefinitionen und wird als\n
|
||||||
|
\\newcommand{\\name}{content} or \\newcommand{\\name}[number of arguments]{content}\n
|
||||||
|
geschrieben.\nZum Beispiel wird\n\\newcommand{\\add}[2]{#1 + #2} \\add{3}{foo} um
|
||||||
|
3 + foo erweitert.\nDie geschweiften Klammern, die den Makronamen umgeben, können
|
||||||
|
in runde oder eckige Klammern geändert werden. Dies hat Auswirkungen auf die Klammern,
|
||||||
|
die für die Argumente verwendet werden. Pro Zeile kann ein (und nur ein) Makro definiert
|
||||||
|
werden, und Sie können die Zeile nicht mitten in der Definition umbrechen. Ungültige
|
||||||
|
Zeilen werden einfach ignoriert. Es werden nur einfache Funktionen zur Substitution
|
||||||
|
von Zeichenketten unterstützt; erweiterte Syntax, wie z. B. bedingte Verzweigungen,
|
||||||
|
können hier nicht verwendet werden."
|
||||||
|
expandOnNoteClickDesc: Wenn deaktiviert, können Sie Beiträge trotzdem über das Rechtsklickmenü
|
||||||
|
oder durch Anklicken des Zeitstempels öffnen.
|
||||||
|
selectChannel: Wählen Sie einen Kanal aus
|
||||||
|
expandOnNoteClick: Beitrag bei Klick öffnen
|
||||||
|
image: Bild
|
||||||
|
video: Video
|
||||||
|
audio: Audio
|
||||||
|
indexFromDescription: Leer lassen, um jeden Beitrag zu indexieren
|
||||||
|
_filters:
|
||||||
|
fromUser: Von Benutzer
|
||||||
|
notesAfter: Beiträge nach
|
||||||
|
withFile: Mit Datei
|
||||||
|
fromDomain: Von Domain
|
||||||
|
notesBefore: Beiträge vor
|
||||||
|
followingOnly: Nur Folgende
|
||||||
|
isBot: Dieses Konto ist ein Bot
|
||||||
|
isModerator: Moderator
|
||||||
|
isAdmin: Administrator
|
||||||
|
_dialog:
|
||||||
|
charactersExceeded: 'Maximale Anzahl an Zeichen aufgebraucht! Limit: {current} /
|
||||||
|
{max}'
|
||||||
|
charactersBelow: Nicht genug Zeichen! Du hast aktuell {current} von {min} Zeichen
|
||||||
|
searchPlaceholder: Calckey durchsuchen
|
||||||
|
antennasDesc: "Antennen zeigen neue Posts an, die deinen definierten Kriterien entsprechen!\n
|
||||||
|
Sie können von der Timeline-Seite aufgerufen werden."
|
||||||
|
isPatron: Calckey Patron
|
||||||
|
removeReaction: Entferne deine Reaktion
|
||||||
|
listsDesc: Listen lassen dich Timelines mit bestimmten Nutzer:innen erstellen. Sie
|
||||||
|
können von der Timeline-Seite erreicht werden.
|
||||||
|
clipsDesc: Clips sind wie teilbare, kategorisierte Lesezeichen. Du kannst Clips vom
|
||||||
|
Menü individueller Posts aus erstellen.
|
||||||
|
channelFederationWarn: Kanäle föderieren noch nicht zu anderen Servern
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
_lang_: "English"
|
_lang_: "English"
|
||||||
headlineMisskey: "An open source, decentralized social media platform that's free\
|
headlineMisskey: "An open source, decentralized social media platform that's free
|
||||||
\ forever! \U0001F680"
|
forever! 🚀"
|
||||||
introMisskey: "Welcome! Calckey is an open source, decentralized social media platform\
|
introMisskey: "Welcome! Calckey is an open source, decentralized social media platform
|
||||||
\ that's free forever! \U0001F680"
|
that's free forever! 🚀"
|
||||||
monthAndDay: "{month}/{day}"
|
monthAndDay: "{month}/{day}"
|
||||||
search: "Search"
|
search: "Search"
|
||||||
searchPlaceholder: "Search Calckey"
|
searchPlaceholder: "Search Calckey"
|
||||||
|
@ -49,10 +49,10 @@ copyLink: "Copy link"
|
||||||
delete: "Delete"
|
delete: "Delete"
|
||||||
deleted: "Deleted"
|
deleted: "Deleted"
|
||||||
deleteAndEdit: "Delete and edit"
|
deleteAndEdit: "Delete and edit"
|
||||||
deleteAndEditConfirm: "Are you sure you want to delete this post and edit it? You\
|
deleteAndEditConfirm: "Are you sure you want to delete this post and edit it? You
|
||||||
\ will lose all reactions, boosts and replies to it."
|
will lose all reactions, boosts and replies to it."
|
||||||
editNote: "Edit note"
|
editNote: "Edit note"
|
||||||
edited: "Edited"
|
edited: "Edited at {date} {time}"
|
||||||
addToList: "Add to list"
|
addToList: "Add to list"
|
||||||
sendMessage: "Send a message"
|
sendMessage: "Send a message"
|
||||||
copyUsername: "Copy username"
|
copyUsername: "Copy username"
|
||||||
|
@ -76,11 +76,11 @@ import: "Import"
|
||||||
export: "Export"
|
export: "Export"
|
||||||
files: "Files"
|
files: "Files"
|
||||||
download: "Download"
|
download: "Download"
|
||||||
driveFileDeleteConfirm: "Are you sure you want to delete the file \"{name}\"? It will\
|
driveFileDeleteConfirm: "Are you sure you want to delete the file \"{name}\"? It will
|
||||||
\ be removed from all posts that contain it as an attachment."
|
be removed from all posts that contain it as an attachment."
|
||||||
unfollowConfirm: "Are you sure that you want to unfollow {name}?"
|
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\
|
exportRequested: "You've requested an export. This may take a while. It will be added
|
||||||
\ to your Drive once completed."
|
to your Drive once completed."
|
||||||
importRequested: "You've requested an import. This may take a while."
|
importRequested: "You've requested an import. This may take a while."
|
||||||
lists: "Lists"
|
lists: "Lists"
|
||||||
listsDesc: "Lists let you create timelines with specified users. They can be accessed from the timelines page."
|
listsDesc: "Lists let you create timelines with specified users. They can be accessed from the timelines page."
|
||||||
|
@ -96,8 +96,8 @@ error: "Error"
|
||||||
somethingHappened: "An error has occurred"
|
somethingHappened: "An error has occurred"
|
||||||
retry: "Retry"
|
retry: "Retry"
|
||||||
pageLoadError: "An error occurred loading the page."
|
pageLoadError: "An error occurred loading the page."
|
||||||
pageLoadErrorDescription: "This is normally caused by network errors or the browser's\
|
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."
|
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."
|
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."
|
youShouldUpgradeClient: "To view this page, please refresh to update your client."
|
||||||
enterListName: "Enter a name for the list"
|
enterListName: "Enter a name for the list"
|
||||||
|
@ -123,6 +123,7 @@ clickToShow: "Click to show"
|
||||||
sensitive: "NSFW"
|
sensitive: "NSFW"
|
||||||
add: "Add"
|
add: "Add"
|
||||||
reaction: "Reactions"
|
reaction: "Reactions"
|
||||||
|
removeReaction: "Remove your reaction"
|
||||||
enableEmojiReactions: "Enable emoji reactions"
|
enableEmojiReactions: "Enable emoji reactions"
|
||||||
showEmojisInReactionNotifications: "Show emojis in reaction notifications"
|
showEmojisInReactionNotifications: "Show emojis in reaction notifications"
|
||||||
reactionSetting: "Reactions to show in the reaction picker"
|
reactionSetting: "Reactions to show in the reaction picker"
|
||||||
|
@ -147,6 +148,7 @@ unsuspendConfirm: "Are you sure that you want to unsuspend this account?"
|
||||||
selectList: "Select a list"
|
selectList: "Select a list"
|
||||||
selectAntenna: "Select an antenna"
|
selectAntenna: "Select an antenna"
|
||||||
selectWidget: "Select a widget"
|
selectWidget: "Select a widget"
|
||||||
|
selectChannel: "Select a channel"
|
||||||
editWidgets: "Edit widgets"
|
editWidgets: "Edit widgets"
|
||||||
editWidgetsExit: "Done"
|
editWidgetsExit: "Done"
|
||||||
customEmojis: "Custom Emoji"
|
customEmojis: "Custom Emoji"
|
||||||
|
@ -157,21 +159,21 @@ emojiUrl: "Emoji URL"
|
||||||
addEmoji: "Add"
|
addEmoji: "Add"
|
||||||
settingGuide: "Recommended settings"
|
settingGuide: "Recommended settings"
|
||||||
cacheRemoteFiles: "Cache remote files"
|
cacheRemoteFiles: "Cache remote files"
|
||||||
cacheRemoteFilesDescription: "When this setting is disabled, remote files are loaded\
|
cacheRemoteFilesDescription: "When this setting is disabled, remote files are loaded
|
||||||
\ directly from the remote server. Disabling this will decrease storage usage,\
|
directly from the remote server. Disabling this will decrease storage usage, but
|
||||||
\ but increase traffic, as thumbnails will not be generated."
|
increase traffic, as thumbnails will not be generated."
|
||||||
flagAsBot: "Mark this account as a bot"
|
flagAsBot: "Mark this account as a bot"
|
||||||
flagAsBotDescription: "Enable this option if this account is controlled by a program.\
|
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\
|
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\
|
chains with other bots and adjust Calckey's internal systems to treat this account
|
||||||
\ as a bot."
|
as a bot."
|
||||||
flagAsCat: "Are you a cat? \U0001F63A"
|
flagAsCat: "Are you a cat? 😺"
|
||||||
flagAsCatDescription: "You'll get cat ears and speak like a cat!"
|
flagAsCatDescription: "You'll get cat ears and speak like a cat!"
|
||||||
flagSpeakAsCat: "Speak as a cat"
|
flagSpeakAsCat: "Speak as a cat"
|
||||||
flagSpeakAsCatDescription: "Your posts will get nyanified when in cat mode"
|
flagSpeakAsCatDescription: "Your posts will get nyanified when in cat mode"
|
||||||
flagShowTimelineReplies: "Show replies in timeline"
|
flagShowTimelineReplies: "Show replies in timeline"
|
||||||
flagShowTimelineRepliesDescription: "Shows replies of users to posts of other users\
|
flagShowTimelineRepliesDescription: "Shows replies of users to posts of other users
|
||||||
\ in the timeline if turned on."
|
in the timeline if turned on."
|
||||||
autoAcceptFollowed: "Automatically approve follow requests from users you're following"
|
autoAcceptFollowed: "Automatically approve follow requests from users you're following"
|
||||||
addAccount: "Add account"
|
addAccount: "Add account"
|
||||||
loginFailed: "Failed to sign in"
|
loginFailed: "Failed to sign in"
|
||||||
|
@ -185,10 +187,10 @@ searchWith: "Search: {q}"
|
||||||
youHaveNoLists: "You don't have any lists"
|
youHaveNoLists: "You don't have any lists"
|
||||||
followConfirm: "Are you sure that you want to follow {name}?"
|
followConfirm: "Are you sure that you want to follow {name}?"
|
||||||
proxyAccount: "Proxy Account"
|
proxyAccount: "Proxy Account"
|
||||||
proxyAccountDescription: "A proxy account is an account that acts as a remote follower\
|
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\
|
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 server\
|
to the list, the remote user's activity will not be delivered to the server if no
|
||||||
\ if no local user is following that user, so the proxy account will follow instead."
|
local user is following that user, so the proxy account will follow instead."
|
||||||
host: "Host"
|
host: "Host"
|
||||||
selectUser: "Select a user"
|
selectUser: "Select a user"
|
||||||
selectInstance: "Select an server"
|
selectInstance: "Select an server"
|
||||||
|
@ -220,22 +222,22 @@ instanceInfo: "Server Information"
|
||||||
statistics: "Statistics"
|
statistics: "Statistics"
|
||||||
clearQueue: "Clear queue"
|
clearQueue: "Clear queue"
|
||||||
clearQueueConfirmTitle: "Are you sure that you want to clear the queue?"
|
clearQueueConfirmTitle: "Are you sure that you want to clear the queue?"
|
||||||
clearQueueConfirmText: "Any undelivered posts remaining in the queue will not be federated.\
|
clearQueueConfirmText: "Any undelivered posts remaining in the queue will not be federated.
|
||||||
\ Usually this operation is not needed."
|
Usually this operation is not needed."
|
||||||
clearCachedFiles: "Clear cache"
|
clearCachedFiles: "Clear cache"
|
||||||
clearCachedFilesConfirm: "Are you sure that you want to delete all cached remote files?"
|
clearCachedFilesConfirm: "Are you sure that you want to delete all cached remote files?"
|
||||||
blockedInstances: "Blocked Servers"
|
blockedInstances: "Blocked Servers"
|
||||||
blockedInstancesDescription: "List the hostnames of the servers that you want to\
|
blockedInstancesDescription: "List the hostnames of the servers that you want to block.
|
||||||
\ block. Listed servers will no longer be able to communicate with this servers."
|
Listed servers will no longer be able to communicate with this servers."
|
||||||
silencedInstances: "Silenced Servers"
|
silencedInstances: "Silenced Servers"
|
||||||
silencedInstancesDescription: "List the hostnames of the servers that you want to\
|
silencedInstancesDescription: "List the hostnames of the servers that you want to
|
||||||
\ silence. Accounts in the listed servers are treated as \"Silenced\", can only\
|
silence. Accounts in the listed servers are treated as \"Silenced\", can only make
|
||||||
\ make follow requests, and cannot mention local accounts if not followed. This\
|
follow requests, and cannot mention local accounts if not followed. This will not
|
||||||
\ will not affect the blocked servers."
|
affect the blocked servers."
|
||||||
hiddenTags: "Hidden Hashtags"
|
hiddenTags: "Hidden Hashtags"
|
||||||
hiddenTagsDescription: "List the hashtags (without the #) of the hashtags you wish\
|
hiddenTagsDescription: "List the hashtags (without the #) of the hashtags you wish
|
||||||
\ to hide from trending and explore. Hidden hashtags are still discoverable via\
|
to hide from trending and explore. Hidden hashtags are still discoverable via other
|
||||||
\ other means."
|
means."
|
||||||
muteAndBlock: "Mutes and Blocks"
|
muteAndBlock: "Mutes and Blocks"
|
||||||
mutedUsers: "Muted users"
|
mutedUsers: "Muted users"
|
||||||
blockedUsers: "Blocked users"
|
blockedUsers: "Blocked users"
|
||||||
|
@ -286,8 +288,8 @@ saved: "Saved"
|
||||||
messaging: "Chat"
|
messaging: "Chat"
|
||||||
upload: "Upload"
|
upload: "Upload"
|
||||||
keepOriginalUploading: "Keep original image"
|
keepOriginalUploading: "Keep original image"
|
||||||
keepOriginalUploadingDescription: "Saves the originally uploaded image as-is. If turned\
|
keepOriginalUploadingDescription: "Saves the originally uploaded image as-is. If turned
|
||||||
\ off, a version to display on the web will be generated on upload."
|
off, a version to display on the web will be generated on upload."
|
||||||
fromDrive: "From Drive"
|
fromDrive: "From Drive"
|
||||||
fromUrl: "From URL"
|
fromUrl: "From URL"
|
||||||
uploadFromUrl: "Upload from a URL"
|
uploadFromUrl: "Upload from a URL"
|
||||||
|
@ -337,8 +339,8 @@ unableToDelete: "Unable to delete"
|
||||||
inputNewFileName: "Enter a new filename"
|
inputNewFileName: "Enter a new filename"
|
||||||
inputNewDescription: "Enter new caption"
|
inputNewDescription: "Enter new caption"
|
||||||
inputNewFolderName: "Enter a new folder name"
|
inputNewFolderName: "Enter a new folder name"
|
||||||
circularReferenceFolder: "The destination folder is a subfolder of the folder you\
|
circularReferenceFolder: "The destination folder is a subfolder of the folder you
|
||||||
\ wish to move."
|
wish to move."
|
||||||
hasChildFilesOrFolders: "Since this folder is not empty, it can not be deleted."
|
hasChildFilesOrFolders: "Since this folder is not empty, it can not be deleted."
|
||||||
copyUrl: "Copy URL"
|
copyUrl: "Copy URL"
|
||||||
rename: "Rename"
|
rename: "Rename"
|
||||||
|
@ -373,8 +375,8 @@ disconnectService: "Disconnect"
|
||||||
enableLocalTimeline: "Enable local timeline"
|
enableLocalTimeline: "Enable local timeline"
|
||||||
enableGlobalTimeline: "Enable global timeline"
|
enableGlobalTimeline: "Enable global timeline"
|
||||||
enableRecommendedTimeline: "Enable recommended timeline"
|
enableRecommendedTimeline: "Enable recommended timeline"
|
||||||
disablingTimelinesInfo: "Adminstrators and Moderators will always have access to all\
|
disablingTimelinesInfo: "Adminstrators and Moderators will always have access to all
|
||||||
\ timelines, even if they are not enabled."
|
timelines, even if they are not enabled."
|
||||||
registration: "Register"
|
registration: "Register"
|
||||||
enableRegistration: "Enable new user registration"
|
enableRegistration: "Enable new user registration"
|
||||||
invite: "Invite"
|
invite: "Invite"
|
||||||
|
@ -386,11 +388,11 @@ bannerUrl: "Banner image URL"
|
||||||
backgroundImageUrl: "Background image URL"
|
backgroundImageUrl: "Background image URL"
|
||||||
basicInfo: "Basic info"
|
basicInfo: "Basic info"
|
||||||
pinnedUsers: "Pinned users"
|
pinnedUsers: "Pinned users"
|
||||||
pinnedUsersDescription: "List usernames separated by line breaks to be pinned in the\
|
pinnedUsersDescription: "List usernames separated by line breaks to be pinned in the
|
||||||
\ \"Explore\" tab."
|
\"Explore\" tab."
|
||||||
pinnedPages: "Pinned Pages"
|
pinnedPages: "Pinned Pages"
|
||||||
pinnedPagesDescription: "Enter the paths of the Pages you want to pin to the top page\
|
pinnedPagesDescription: "Enter the paths of the Pages you want to pin to the top page
|
||||||
\ of this server, separated by line breaks."
|
of this server, separated by line breaks."
|
||||||
pinnedClipId: "ID of the clip to pin"
|
pinnedClipId: "ID of the clip to pin"
|
||||||
pinnedNotes: "Pinned posts"
|
pinnedNotes: "Pinned posts"
|
||||||
hcaptcha: "hCaptcha"
|
hcaptcha: "hCaptcha"
|
||||||
|
@ -401,9 +403,9 @@ recaptcha: "reCAPTCHA"
|
||||||
enableRecaptcha: "Enable reCAPTCHA"
|
enableRecaptcha: "Enable reCAPTCHA"
|
||||||
recaptchaSiteKey: "Site key"
|
recaptchaSiteKey: "Site key"
|
||||||
recaptchaSecretKey: "Secret key"
|
recaptchaSecretKey: "Secret key"
|
||||||
avoidMultiCaptchaConfirm: "Using multiple Captcha systems may cause interference between\
|
avoidMultiCaptchaConfirm: "Using multiple Captcha systems may cause interference between
|
||||||
\ them. Would you like to disable the other Captcha systems currently active? If\
|
them. Would you like to disable the other Captcha systems currently active? If you
|
||||||
\ you would like them to stay enabled, press cancel."
|
would like them to stay enabled, press cancel."
|
||||||
antennas: "Antennas"
|
antennas: "Antennas"
|
||||||
antennasDesc: "Antennas display new posts matching the criteria you set!\n They can be accessed from the timelines page."
|
antennasDesc: "Antennas display new posts matching the criteria you set!\n They can be accessed from the timelines page."
|
||||||
manageAntennas: "Manage Antennas"
|
manageAntennas: "Manage Antennas"
|
||||||
|
@ -411,8 +413,8 @@ name: "Name"
|
||||||
antennaSource: "Antenna source"
|
antennaSource: "Antenna source"
|
||||||
antennaKeywords: "Keywords to listen to"
|
antennaKeywords: "Keywords to listen to"
|
||||||
antennaExcludeKeywords: "Keywords to exclude"
|
antennaExcludeKeywords: "Keywords to exclude"
|
||||||
antennaKeywordsDescription: "Separate with spaces for an AND condition or with line\
|
antennaKeywordsDescription: "Separate with spaces for an AND condition or with line
|
||||||
\ breaks for an OR condition."
|
breaks for an OR condition."
|
||||||
notifyAntenna: "Notify about new posts"
|
notifyAntenna: "Notify about new posts"
|
||||||
withFileAntenna: "Only posts with files"
|
withFileAntenna: "Only posts with files"
|
||||||
enableServiceworker: "Enable Push-Notifications for your Browser"
|
enableServiceworker: "Enable Push-Notifications for your Browser"
|
||||||
|
@ -543,27 +545,26 @@ showFeaturedNotesInTimeline: "Show featured posts in timelines"
|
||||||
objectStorage: "Object Storage"
|
objectStorage: "Object Storage"
|
||||||
useObjectStorage: "Use object storage"
|
useObjectStorage: "Use object storage"
|
||||||
objectStorageBaseUrl: "Base URL"
|
objectStorageBaseUrl: "Base URL"
|
||||||
objectStorageBaseUrlDesc: "The URL used as reference. Specify the URL of your CDN\
|
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'\
|
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>',\
|
and for GCS or equivalent services use 'https://storage.googleapis.com/<bucket>',
|
||||||
\ etc."
|
etc."
|
||||||
objectStorageBucket: "Bucket"
|
objectStorageBucket: "Bucket"
|
||||||
objectStorageBucketDesc: "Please specify the bucket name used at your provider."
|
objectStorageBucketDesc: "Please specify the bucket name used at your provider."
|
||||||
objectStoragePrefix: "Prefix"
|
objectStoragePrefix: "Prefix"
|
||||||
objectStoragePrefixDesc: "Files will be stored under directories with this prefix."
|
objectStoragePrefixDesc: "Files will be stored under directories with this prefix."
|
||||||
objectStorageEndpoint: "Endpoint"
|
objectStorageEndpoint: "Endpoint"
|
||||||
objectStorageEndpointDesc: "Leave this empty if you are using AWS S3, otherwise specify\
|
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\
|
the endpoint as '<host>' or '<host>:<port>', depending on the service you are using."
|
||||||
\ using."
|
|
||||||
objectStorageRegion: "Region"
|
objectStorageRegion: "Region"
|
||||||
objectStorageRegionDesc: "Specify a region like 'xx-east-1'. If your service does\
|
objectStorageRegionDesc: "Specify a region like 'xx-east-1'. If your service does
|
||||||
\ not distinguish between regions, leave this blank or enter 'us-east-1'."
|
not distinguish between regions, leave this blank or enter 'us-east-1'."
|
||||||
objectStorageUseSSL: "Use SSL"
|
objectStorageUseSSL: "Use SSL"
|
||||||
objectStorageUseSSLDesc: "Turn this off if you are not going to use HTTPS for API\
|
objectStorageUseSSLDesc: "Turn this off if you are not going to use HTTPS for API
|
||||||
\ connections"
|
connections"
|
||||||
objectStorageUseProxy: "Connect over Proxy"
|
objectStorageUseProxy: "Connect over Proxy"
|
||||||
objectStorageUseProxyDesc: "Turn this off if you are not going to use a Proxy for\
|
objectStorageUseProxyDesc: "Turn this off if you are not going to use a Proxy for
|
||||||
\ API connections"
|
API connections"
|
||||||
objectStorageSetPublicRead: "Set \"public-read\" on upload"
|
objectStorageSetPublicRead: "Set \"public-read\" on upload"
|
||||||
serverLogs: "Server logs"
|
serverLogs: "Server logs"
|
||||||
deleteAll: "Delete all"
|
deleteAll: "Delete all"
|
||||||
|
@ -591,9 +592,9 @@ sort: "Sort"
|
||||||
ascendingOrder: "Ascending"
|
ascendingOrder: "Ascending"
|
||||||
descendingOrder: "Descending"
|
descendingOrder: "Descending"
|
||||||
scratchpad: "Scratchpad"
|
scratchpad: "Scratchpad"
|
||||||
scratchpadDescription: "The scratchpad provides an environment for AiScript experiments.\
|
scratchpadDescription: "The scratchpad provides an environment for AiScript experiments.
|
||||||
\ You can write, execute, and check the results of it interacting with Calckey in\
|
You can write, execute, and check the results of it interacting with Calckey in
|
||||||
\ it."
|
it."
|
||||||
output: "Output"
|
output: "Output"
|
||||||
script: "Script"
|
script: "Script"
|
||||||
disablePagesScript: "Disable AiScript on Pages"
|
disablePagesScript: "Disable AiScript on Pages"
|
||||||
|
@ -603,14 +604,14 @@ updateRemoteUser: "Update remote user information"
|
||||||
deleteAllFiles: "Delete all files"
|
deleteAllFiles: "Delete all files"
|
||||||
deleteAllFilesConfirm: "Are you sure that you want to delete all files?"
|
deleteAllFilesConfirm: "Are you sure that you want to delete all files?"
|
||||||
removeAllFollowing: "Unfollow all followed users"
|
removeAllFollowing: "Unfollow all followed users"
|
||||||
removeAllFollowingDescription: "Executing this unfollows all accounts from {host}.\
|
removeAllFollowingDescription: "Executing this unfollows all accounts from {host}.
|
||||||
\ Please run this if the server e.g. no longer exists."
|
Please run this if the server e.g. no longer exists."
|
||||||
userSuspended: "This user has been suspended."
|
userSuspended: "This user has been suspended."
|
||||||
userSilenced: "This user is being silenced."
|
userSilenced: "This user is being silenced."
|
||||||
yourAccountSuspendedTitle: "This account is suspended"
|
yourAccountSuspendedTitle: "This account is suspended"
|
||||||
yourAccountSuspendedDescription: "This account has been suspended due to breaking\
|
yourAccountSuspendedDescription: "This account has been suspended due to breaking
|
||||||
\ the server's terms of services or similar. Contact the administrator if you would\
|
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."
|
like to know a more detailed reason. Please do not create a new account."
|
||||||
menu: "Menu"
|
menu: "Menu"
|
||||||
divider: "Divider"
|
divider: "Divider"
|
||||||
addItem: "Add Item"
|
addItem: "Add Item"
|
||||||
|
@ -651,14 +652,14 @@ permission: "Permissions"
|
||||||
enableAll: "Enable all"
|
enableAll: "Enable all"
|
||||||
disableAll: "Disable all"
|
disableAll: "Disable all"
|
||||||
tokenRequested: "Grant access to account"
|
tokenRequested: "Grant access to account"
|
||||||
pluginTokenRequestedDescription: "This plugin will be able to use the permissions\
|
pluginTokenRequestedDescription: "This plugin will be able to use the permissions
|
||||||
\ set here."
|
set here."
|
||||||
notificationType: "Notification type"
|
notificationType: "Notification type"
|
||||||
edit: "Edit"
|
edit: "Edit"
|
||||||
emailServer: "Email server"
|
emailServer: "Email server"
|
||||||
enableEmail: "Enable email distribution"
|
enableEmail: "Enable email distribution"
|
||||||
emailConfigInfo: "Used to confirm your email during sign-up or if you forget your\
|
emailConfigInfo: "Used to confirm your email during sign-up or if you forget your
|
||||||
\ password"
|
password"
|
||||||
email: "Email"
|
email: "Email"
|
||||||
emailAddress: "Email address"
|
emailAddress: "Email address"
|
||||||
smtpConfig: "SMTP Server Configuration"
|
smtpConfig: "SMTP Server Configuration"
|
||||||
|
@ -672,8 +673,8 @@ smtpSecureInfo: "Turn this off when using STARTTLS"
|
||||||
testEmail: "Test email delivery"
|
testEmail: "Test email delivery"
|
||||||
wordMute: "Word mute"
|
wordMute: "Word mute"
|
||||||
regexpError: "Regular Expression error"
|
regexpError: "Regular Expression error"
|
||||||
regexpErrorDescription: "An error occurred in the regular expression on line {line}\
|
regexpErrorDescription: "An error occurred in the regular expression on line {line}
|
||||||
\ of your {tab} word mutes:"
|
of your {tab} word mutes:"
|
||||||
instanceMute: "Server Mutes"
|
instanceMute: "Server Mutes"
|
||||||
userSaysSomething: "{name} said something"
|
userSaysSomething: "{name} said something"
|
||||||
userSaysSomethingReason: "{name} said {reason}"
|
userSaysSomethingReason: "{name} said {reason}"
|
||||||
|
@ -694,13 +695,13 @@ create: "Create"
|
||||||
notificationSetting: "Notification settings"
|
notificationSetting: "Notification settings"
|
||||||
notificationSettingDesc: "Select the types of notification to display."
|
notificationSettingDesc: "Select the types of notification to display."
|
||||||
useGlobalSetting: "Use global settings"
|
useGlobalSetting: "Use global settings"
|
||||||
useGlobalSettingDesc: "If turned on, your account's notification settings will be\
|
useGlobalSettingDesc: "If turned on, your account's notification settings will be
|
||||||
\ used. If turned off, individual configurations can be made."
|
used. If turned off, individual configurations can be made."
|
||||||
other: "Other"
|
other: "Other"
|
||||||
regenerateLoginToken: "Regenerate login token"
|
regenerateLoginToken: "Regenerate login token"
|
||||||
regenerateLoginTokenDescription: "Regenerates the token used internally during login.\
|
regenerateLoginTokenDescription: "Regenerates the token used internally during login.
|
||||||
\ Normally this action is not necessary. If regenerated, all devices will be logged\
|
Normally this action is not necessary. If regenerated, all devices will be logged
|
||||||
\ out."
|
out."
|
||||||
setMultipleBySeparatingWithSpace: "Separate multiple entries with spaces."
|
setMultipleBySeparatingWithSpace: "Separate multiple entries with spaces."
|
||||||
fileIdOrUrl: "File ID or URL"
|
fileIdOrUrl: "File ID or URL"
|
||||||
behavior: "Behavior"
|
behavior: "Behavior"
|
||||||
|
@ -708,15 +709,15 @@ sample: "Sample"
|
||||||
abuseReports: "Reports"
|
abuseReports: "Reports"
|
||||||
reportAbuse: "Report"
|
reportAbuse: "Report"
|
||||||
reportAbuseOf: "Report {name}"
|
reportAbuseOf: "Report {name}"
|
||||||
fillAbuseReportDescription: "Please fill in details regarding this report. If it is\
|
fillAbuseReportDescription: "Please fill in details regarding this report. If it is
|
||||||
\ about a specific post, please include its URL."
|
about a specific post, please include its URL."
|
||||||
abuseReported: "Your report has been sent. Thank you very much."
|
abuseReported: "Your report has been sent. Thank you very much."
|
||||||
reporter: "Reporter"
|
reporter: "Reporter"
|
||||||
reporteeOrigin: "Reportee Origin"
|
reporteeOrigin: "Reportee Origin"
|
||||||
reporterOrigin: "Reporter Origin"
|
reporterOrigin: "Reporter Origin"
|
||||||
forwardReport: "Forward report to remote server"
|
forwardReport: "Forward report to remote server"
|
||||||
forwardReportIsAnonymous: "Instead of your account, an anonymous system account will\
|
forwardReportIsAnonymous: "Instead of your account, an anonymous system account will
|
||||||
\ be displayed as reporter at the remote server."
|
be displayed as reporter at the remote server."
|
||||||
send: "Send"
|
send: "Send"
|
||||||
abuseMarkAsResolved: "Mark report as resolved"
|
abuseMarkAsResolved: "Mark report as resolved"
|
||||||
openInNewTab: "Open in new tab"
|
openInNewTab: "Open in new tab"
|
||||||
|
@ -734,11 +735,11 @@ createNew: "Create new"
|
||||||
optional: "Optional"
|
optional: "Optional"
|
||||||
createNewClip: "Create new clip"
|
createNewClip: "Create new clip"
|
||||||
unclip: "Unclip"
|
unclip: "Unclip"
|
||||||
confirmToUnclipAlreadyClippedNote: "This post is already part of the \"{name}\" clip.\
|
confirmToUnclipAlreadyClippedNote: "This post is already part of the \"{name}\" clip.
|
||||||
\ Do you want to remove it from this clip instead?"
|
Do you want to remove it from this clip instead?"
|
||||||
public: "Public"
|
public: "Public"
|
||||||
i18nInfo: "Calckey is being translated into various languages by volunteers. You can\
|
i18nInfo: "Calckey is being translated into various languages by volunteers. You can
|
||||||
\ help at {link}."
|
help at {link}."
|
||||||
manageAccessTokens: "Manage access tokens"
|
manageAccessTokens: "Manage access tokens"
|
||||||
accountInfo: "Account Info"
|
accountInfo: "Account Info"
|
||||||
notesCount: "Number of posts"
|
notesCount: "Number of posts"
|
||||||
|
@ -757,16 +758,15 @@ no: "No"
|
||||||
driveFilesCount: "Number of Drive files"
|
driveFilesCount: "Number of Drive files"
|
||||||
driveUsage: "Drive space usage"
|
driveUsage: "Drive space usage"
|
||||||
noCrawle: "Reject crawler indexing"
|
noCrawle: "Reject crawler indexing"
|
||||||
noCrawleDescription: "Ask search engines to not index your profile page, posts, Pages,\
|
noCrawleDescription: "Ask search engines to not index your profile page, posts, Pages,
|
||||||
\ etc."
|
etc."
|
||||||
lockedAccountInfo: "Unless you set your post visiblity to \"Followers only\", your\
|
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\
|
posts will be visible to anyone, even if you require followers to be manually approved."
|
||||||
\ approved."
|
|
||||||
alwaysMarkSensitive: "Mark as NSFW by default"
|
alwaysMarkSensitive: "Mark as NSFW by default"
|
||||||
loadRawImages: "Load original images instead of showing thumbnails"
|
loadRawImages: "Load original images instead of showing thumbnails"
|
||||||
disableShowingAnimatedImages: "Don't play animated images"
|
disableShowingAnimatedImages: "Don't play animated images"
|
||||||
verificationEmailSent: "A verification email has been sent. Please follow the included\
|
verificationEmailSent: "A verification email has been sent. Please follow the included
|
||||||
\ link to complete verification."
|
link to complete verification."
|
||||||
notSet: "Not set"
|
notSet: "Not set"
|
||||||
emailVerified: "Email has been verified"
|
emailVerified: "Email has been verified"
|
||||||
noteFavoritesCount: "Number of bookmarked posts"
|
noteFavoritesCount: "Number of bookmarked posts"
|
||||||
|
@ -779,8 +779,8 @@ clipsDesc: "Clips are like share-able categorized bookmarks. You can create clip
|
||||||
experimentalFeatures: "Experimental features"
|
experimentalFeatures: "Experimental features"
|
||||||
developer: "Developer"
|
developer: "Developer"
|
||||||
makeExplorable: "Make account visible in \"Explore\""
|
makeExplorable: "Make account visible in \"Explore\""
|
||||||
makeExplorableDescription: "If you turn this off, your account will not show up in\
|
makeExplorableDescription: "If you turn this off, your account will not show up in
|
||||||
\ the \"Explore\" section."
|
the \"Explore\" section."
|
||||||
showGapBetweenNotesInTimeline: "Show a gap between posts on the timeline"
|
showGapBetweenNotesInTimeline: "Show a gap between posts on the timeline"
|
||||||
duplicate: "Duplicate"
|
duplicate: "Duplicate"
|
||||||
left: "Left"
|
left: "Left"
|
||||||
|
@ -795,10 +795,10 @@ onlineUsersCount: "{n} users are online"
|
||||||
nUsers: "{n} Users"
|
nUsers: "{n} Users"
|
||||||
nNotes: "{n} Posts"
|
nNotes: "{n} Posts"
|
||||||
sendErrorReports: "Send error reports"
|
sendErrorReports: "Send error reports"
|
||||||
sendErrorReportsDescription: "When turned on, detailed error information will be shared\
|
sendErrorReportsDescription: "When turned on, detailed error information will be shared
|
||||||
\ with Calckey when a problem occurs, helping to improve the quality of Calckey.\n\
|
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,\
|
This will include information such the version of your OS, what browser you're using,
|
||||||
\ your activity in Calckey, etc."
|
your activity in Calckey, etc."
|
||||||
myTheme: "My theme"
|
myTheme: "My theme"
|
||||||
backgroundColor: "Background color"
|
backgroundColor: "Background color"
|
||||||
accentColor: "Accent color"
|
accentColor: "Accent color"
|
||||||
|
@ -830,24 +830,24 @@ useReactionPickerForContextMenu: "Open reaction picker on right-click"
|
||||||
typingUsers: "{users} is typing"
|
typingUsers: "{users} is typing"
|
||||||
jumpToSpecifiedDate: "Jump to specific date"
|
jumpToSpecifiedDate: "Jump to specific date"
|
||||||
showingPastTimeline: "Currently displaying an old timeline"
|
showingPastTimeline: "Currently displaying an old timeline"
|
||||||
clear: "Return"
|
clear: "Clear"
|
||||||
markAllAsRead: "Mark all as read"
|
markAllAsRead: "Mark all as read"
|
||||||
goBack: "Back"
|
goBack: "Back"
|
||||||
unlikeConfirm: "Really remove your like?"
|
unlikeConfirm: "Really remove your like?"
|
||||||
fullView: "Full view"
|
fullView: "Full view"
|
||||||
quitFullView: "Exit full view"
|
quitFullView: "Exit full view"
|
||||||
addDescription: "Add description"
|
addDescription: "Add description"
|
||||||
userPagePinTip: "You can display posts here by selecting \"Pin to profile\" from the\
|
userPagePinTip: "You can display posts here by selecting \"Pin to profile\" from the
|
||||||
\ menu of individual posts."
|
menu of individual posts."
|
||||||
notSpecifiedMentionWarning: "This post contains mentions of users not included as\
|
notSpecifiedMentionWarning: "This post contains mentions of users not included as
|
||||||
\ recipients"
|
recipients"
|
||||||
info: "About"
|
info: "About"
|
||||||
userInfo: "User information"
|
userInfo: "User information"
|
||||||
unknown: "Unknown"
|
unknown: "Unknown"
|
||||||
onlineStatus: "Online status"
|
onlineStatus: "Online status"
|
||||||
hideOnlineStatus: "Hide online status"
|
hideOnlineStatus: "Hide online status"
|
||||||
hideOnlineStatusDescription: "Hiding your online status reduces the convenience of\
|
hideOnlineStatusDescription: "Hiding your online status reduces the convenience of
|
||||||
\ some features such as the search."
|
some features such as the search."
|
||||||
online: "Online"
|
online: "Online"
|
||||||
active: "Active"
|
active: "Active"
|
||||||
offline: "Offline"
|
offline: "Offline"
|
||||||
|
@ -884,15 +884,15 @@ secureMode: "Secure Mode (Authorized Fetch)"
|
||||||
instanceSecurity: "Server Security"
|
instanceSecurity: "Server Security"
|
||||||
secureModeInfo: "When requesting from other servers, do not send back without proof."
|
secureModeInfo: "When requesting from other servers, do not send back without proof."
|
||||||
privateMode: "Private Mode"
|
privateMode: "Private Mode"
|
||||||
privateModeInfo: "When enabled, only whitelisted servers can federate with your\
|
privateModeInfo: "When enabled, only whitelisted servers can federate with your server.
|
||||||
\ server. All posts will be hidden from the public."
|
All posts will be hidden from the public."
|
||||||
allowedInstances: "Whitelisted Servers"
|
allowedInstances: "Whitelisted Servers"
|
||||||
allowedInstancesDescription: "Hosts of servers to be whitelisted for federation,\
|
allowedInstancesDescription: "Hosts of servers to be whitelisted for federation, each
|
||||||
\ each separated by a new line (only applies in private mode)."
|
separated by a new line (only applies in private mode)."
|
||||||
previewNoteText: "Show preview"
|
previewNoteText: "Show preview"
|
||||||
customCss: "Custom CSS"
|
customCss: "Custom CSS"
|
||||||
customCssWarn: "This setting should only be used if you know what it does. Entering\
|
customCssWarn: "This setting should only be used if you know what it does. Entering
|
||||||
\ improper values may cause the client to stop functioning normally."
|
improper values may cause the client to stop functioning normally."
|
||||||
global: "Global"
|
global: "Global"
|
||||||
recommended: "Recommended"
|
recommended: "Recommended"
|
||||||
squareAvatars: "Display squared avatars"
|
squareAvatars: "Display squared avatars"
|
||||||
|
@ -909,9 +909,9 @@ whatIsNew: "Show changes"
|
||||||
translate: "Translate"
|
translate: "Translate"
|
||||||
translatedFrom: "Translated from {x}"
|
translatedFrom: "Translated from {x}"
|
||||||
accountDeletionInProgress: "Account deletion is currently in progress"
|
accountDeletionInProgress: "Account deletion is currently in progress"
|
||||||
usernameInfo: "A name that identifies your account from others on this server. You\
|
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\
|
can use the alphabet (a~z, A~Z), digits (0~9) or underscores (_). Usernames cannot
|
||||||
\ be changed later."
|
be changed later."
|
||||||
aiChanMode: "Ai-chan in Classic UI"
|
aiChanMode: "Ai-chan in Classic UI"
|
||||||
keepCw: "Keep content warnings"
|
keepCw: "Keep content warnings"
|
||||||
pubSub: "Pub/Sub Accounts"
|
pubSub: "Pub/Sub Accounts"
|
||||||
|
@ -928,14 +928,14 @@ filter: "Filter"
|
||||||
controlPanel: "Control Panel"
|
controlPanel: "Control Panel"
|
||||||
manageAccounts: "Manage Accounts"
|
manageAccounts: "Manage Accounts"
|
||||||
makeReactionsPublic: "Set reaction history to public"
|
makeReactionsPublic: "Set reaction history to public"
|
||||||
makeReactionsPublicDescription: "This will make the list of all your past reactions\
|
makeReactionsPublicDescription: "This will make the list of all your past reactions
|
||||||
\ publicly visible."
|
publicly visible."
|
||||||
classic: "Centered"
|
classic: "Centered"
|
||||||
muteThread: "Mute thread"
|
muteThread: "Mute thread"
|
||||||
unmuteThread: "Unmute thread"
|
unmuteThread: "Unmute thread"
|
||||||
ffVisibility: "Follows/Followers Visibility"
|
ffVisibility: "Follows/Followers Visibility"
|
||||||
ffVisibilityDescription: "Allows you to configure who can see who you follow and who\
|
ffVisibilityDescription: "Allows you to configure who can see who you follow and who
|
||||||
\ follows you."
|
follows you."
|
||||||
continueThread: "Continue thread"
|
continueThread: "Continue thread"
|
||||||
deleteAccountConfirm: "This will irreversibly delete your account. Proceed?"
|
deleteAccountConfirm: "This will irreversibly delete your account. Proceed?"
|
||||||
incorrectPassword: "Incorrect password."
|
incorrectPassword: "Incorrect password."
|
||||||
|
@ -969,22 +969,27 @@ rateLimitExceeded: "Rate limit exceeded"
|
||||||
cropImage: "Crop image"
|
cropImage: "Crop image"
|
||||||
cropImageAsk: "Do you want to crop this image?"
|
cropImageAsk: "Do you want to crop this image?"
|
||||||
file: "File"
|
file: "File"
|
||||||
|
image: "Image"
|
||||||
|
video: "Video"
|
||||||
|
audio: "Audio"
|
||||||
recentNHours: "Last {n} hours"
|
recentNHours: "Last {n} hours"
|
||||||
recentNDays: "Last {n} days"
|
recentNDays: "Last {n} days"
|
||||||
noEmailServerWarning: "Email server not configured."
|
noEmailServerWarning: "Email server not configured."
|
||||||
thereIsUnresolvedAbuseReportWarning: "There are unsolved reports."
|
thereIsUnresolvedAbuseReportWarning: "There are unsolved reports."
|
||||||
check: "Check"
|
check: "Check"
|
||||||
driveCapOverrideLabel: "Change the drive capacity for this user"
|
driveCapOverrideLabel: "Change the drive capacity for this user"
|
||||||
driveCapOverrideCaption: "Reset the capacity to default by inputting a value of 0\
|
driveCapOverrideCaption: "Reset the capacity to default by inputting a value of 0
|
||||||
\ or lower."
|
or lower."
|
||||||
requireAdminForView: "You must log in with an administrator account to view this."
|
requireAdminForView: "You must log in with an administrator account to view this."
|
||||||
isSystemAccount: "This account is created and automatically operated by the system. Please do not moderate, edit, delete, or otherwise tamper with this account, or it may break your server."
|
isSystemAccount: "This account is created and automatically operated by the system.
|
||||||
|
Please do not moderate, edit, delete, or otherwise tamper with this account, or
|
||||||
|
it may break your server."
|
||||||
typeToConfirm: "Please enter {x} to confirm"
|
typeToConfirm: "Please enter {x} to confirm"
|
||||||
deleteAccount: "Delete account"
|
deleteAccount: "Delete account"
|
||||||
document: "Documentation"
|
document: "Documentation"
|
||||||
numberOfPageCache: "Number of cached pages"
|
numberOfPageCache: "Number of cached pages"
|
||||||
numberOfPageCacheDescription: "Increasing this number will improve convenience for\
|
numberOfPageCacheDescription: "Increasing this number will improve convenience for
|
||||||
\ users but cause more server load as well as more memory to be used."
|
users but cause more server load as well as more memory to be used."
|
||||||
logoutConfirm: "Really log out?"
|
logoutConfirm: "Really log out?"
|
||||||
lastActiveDate: "Last used at"
|
lastActiveDate: "Last used at"
|
||||||
statusbar: "Status bar"
|
statusbar: "Status bar"
|
||||||
|
@ -1001,19 +1006,19 @@ sensitiveMediaDetection: "Detection of NSFW media"
|
||||||
localOnly: "Local only"
|
localOnly: "Local only"
|
||||||
remoteOnly: "Remote only"
|
remoteOnly: "Remote only"
|
||||||
failedToUpload: "Upload failed"
|
failedToUpload: "Upload failed"
|
||||||
cannotUploadBecauseInappropriate: "This file could not be uploaded because parts of\
|
cannotUploadBecauseInappropriate: "This file could not be uploaded because parts of
|
||||||
\ it have been detected as potentially NSFW."
|
it have been detected as potentially NSFW."
|
||||||
cannotUploadBecauseNoFreeSpace: "Upload failed due to lack of Drive capacity."
|
cannotUploadBecauseNoFreeSpace: "Upload failed due to lack of Drive capacity."
|
||||||
cannotUploadBecauseExceedsFileSizeLimit: "This file could not be uploaded because\
|
cannotUploadBecauseExceedsFileSizeLimit: "This file could not be uploaded because
|
||||||
\ it exceeds the maximum allowed size."
|
it exceeds the maximum allowed size."
|
||||||
beta: "Beta"
|
beta: "Beta"
|
||||||
enableAutoSensitive: "Automatic NSFW-Marking"
|
enableAutoSensitive: "Automatic NSFW-Marking"
|
||||||
enableAutoSensitiveDescription: "Allows automatic detection and marking of NSFW media\
|
enableAutoSensitiveDescription: "Allows automatic detection and marking of NSFW media
|
||||||
\ through Machine Learning where possible. Even if this option is disabled, it may\
|
through Machine Learning where possible. Even if this option is disabled, it may
|
||||||
\ be enabled server-wide."
|
be enabled server-wide."
|
||||||
activeEmailValidationDescription: "Enables stricter validation of email addresses,\
|
activeEmailValidationDescription: "Enables stricter validation of email addresses,
|
||||||
\ which includes checking for disposable addresses and by whether it can actually\
|
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."
|
be communicated with. When unchecked, only the format of the email is validated."
|
||||||
navbar: "Navigation bar"
|
navbar: "Navigation bar"
|
||||||
shuffle: "Shuffle"
|
shuffle: "Shuffle"
|
||||||
account: "Account"
|
account: "Account"
|
||||||
|
@ -1023,27 +1028,27 @@ subscribePushNotification: "Enable push notifications"
|
||||||
unsubscribePushNotification: "Disable push notifications"
|
unsubscribePushNotification: "Disable push notifications"
|
||||||
pushNotificationAlreadySubscribed: "Push notifications are already enabled"
|
pushNotificationAlreadySubscribed: "Push notifications are already enabled"
|
||||||
pushNotificationNotSupported: "Your browser or server does not support push notifications"
|
pushNotificationNotSupported: "Your browser or server does not support push notifications"
|
||||||
sendPushNotificationReadMessage: "Delete push notifications once the relevant notifications\
|
sendPushNotificationReadMessage: "Delete push notifications once the relevant notifications
|
||||||
\ or messages have been read"
|
or messages have been read"
|
||||||
sendPushNotificationReadMessageCaption: "A notification containing the text \"{emptyPushNotificationMessage}\"\
|
sendPushNotificationReadMessageCaption: "A notification containing the text \"{emptyPushNotificationMessage}\"\
|
||||||
\ will be displayed for a short time. This may increase the battery usage of your\
|
\ will be displayed for a short time. This may increase the battery usage of your
|
||||||
\ device, if applicable."
|
device, if applicable."
|
||||||
showAds: "Show ads"
|
showAds: "Show ads"
|
||||||
enterSendsMessage: "Press Return in Messaging to send message (off is Ctrl + Return)"
|
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\
|
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\
|
improper values may cause EVERYONE'S clients to stop functioning normally. Please
|
||||||
\ ensure your CSS works properly by testing it in your user settings."
|
ensure your CSS works properly by testing it in your user settings."
|
||||||
customMOTD: "Custom MOTD (splash screen messages)"
|
customMOTD: "Custom MOTD (splash screen messages)"
|
||||||
customMOTDDescription: "Custom messages for the MOTD (splash screen) separated by\
|
customMOTDDescription: "Custom messages for the MOTD (splash screen) separated by
|
||||||
\ line breaks to be shown randomly every time a user loads/reloads the page."
|
line breaks to be shown randomly every time a user loads/reloads the page."
|
||||||
customSplashIcons: "Custom splash screen icons (urls)"
|
customSplashIcons: "Custom splash screen icons (urls)"
|
||||||
customSplashIconsDescription: "URLs for custom splash screen icons separated by line\
|
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\
|
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."
|
sure the images are on a static URL, preferably all resized to 192x192."
|
||||||
showUpdates: "Show a popup when Calckey updates"
|
showUpdates: "Show a popup when Calckey updates"
|
||||||
recommendedInstances: "Recommended servers"
|
recommendedInstances: "Recommended servers"
|
||||||
recommendedInstancesDescription: "Recommended servers separated by line breaks to\
|
recommendedInstancesDescription: "Recommended servers separated by line breaks to
|
||||||
\ appear in the recommended timeline. Do NOT add `https://`, ONLY the domain."
|
appear in the recommended timeline. Do NOT add `https://`, ONLY the domain."
|
||||||
caption: "Auto Caption"
|
caption: "Auto Caption"
|
||||||
splash: "Splash Screen"
|
splash: "Splash Screen"
|
||||||
updateAvailable: "There might be an update available!"
|
updateAvailable: "There might be an update available!"
|
||||||
|
@ -1055,18 +1060,18 @@ migration: "Migration"
|
||||||
moveTo: "Move current account to new account"
|
moveTo: "Move current account to new account"
|
||||||
moveToLabel: "Account you're moving to:"
|
moveToLabel: "Account you're moving to:"
|
||||||
moveAccount: "Move account!"
|
moveAccount: "Move account!"
|
||||||
moveAccountDescription: "This process is irreversible. Make sure you've set up an\
|
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\
|
alias for this account on your new account before moving. Please enter the tag of
|
||||||
\ of the account formatted like @person@server.com"
|
the account formatted like @person@server.com"
|
||||||
moveFrom: "Move to this account from an older account"
|
moveFrom: "Move to this account from an older account"
|
||||||
moveFromLabel: "Account you're moving from:"
|
moveFromLabel: "Account you're moving from:"
|
||||||
moveFromDescription: "This will set an alias of your old account so that you can move\
|
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.\
|
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@server.com"
|
Please enter the tag of the account formatted like @person@server.com"
|
||||||
migrationConfirm: "Are you absolutely sure you want to migrate your account to {account}?\
|
migrationConfirm: "Are you absolutely sure you want to migrate your account to {account}?
|
||||||
\ Once you do this, you won't be able to reverse it, and you won't be able to use\
|
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\
|
your account normally again.\nAlso, please ensure that you've set this current account
|
||||||
\ account as the account you're moving from."
|
as the account you're moving from."
|
||||||
defaultReaction: "Default emoji reaction for outgoing and incoming posts"
|
defaultReaction: "Default emoji reaction for outgoing and incoming posts"
|
||||||
license: "License"
|
license: "License"
|
||||||
indexPosts: "Index Posts"
|
indexPosts: "Index Posts"
|
||||||
|
@ -1075,42 +1080,50 @@ indexFromDescription: "Leave blank to index every post"
|
||||||
indexNotice: "Now indexing. This will probably take a while, please don't restart\
|
indexNotice: "Now indexing. This will probably take a while, please don't restart\
|
||||||
\ your server for at least an hour."
|
\ your server for at least an hour."
|
||||||
customKaTeXMacro: "Custom KaTeX macros"
|
customKaTeXMacro: "Custom KaTeX macros"
|
||||||
customKaTeXMacroDescription: "Set up macros to write mathematical expressions easily!\
|
customKaTeXMacroDescription: "Set up macros to write mathematical expressions easily!
|
||||||
\ The notation conforms to the LaTeX command definitions and is written as \\newcommand{\\\
|
The notation conforms to the LaTeX command definitions and is written as \\newcommand{\\
|
||||||
name}{content} or \\newcommand{\\name}[number of arguments]{content}. For example,\
|
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\
|
\\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.\
|
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\
|
This affects the brackets used for arguments. One (and only one) macro can be defined
|
||||||
\ defined per line, and you can't break the line in the middle of the definition.\
|
per line, and you can't break the line in the middle of the definition. Invalid
|
||||||
\ Invalid lines are simply ignored. Only simple string substitution functions are\
|
lines are simply ignored. Only simple string substitution functions are supported;
|
||||||
\ supported; advanced syntax, such as conditional branching, cannot be used here."
|
advanced syntax, such as conditional branching, cannot be used here."
|
||||||
enableCustomKaTeXMacro: "Enable custom KaTeX macros"
|
enableCustomKaTeXMacro: "Enable custom KaTeX macros"
|
||||||
noteId: "Post ID"
|
noteId: "Post ID"
|
||||||
signupsDisabled: "Signups on this server are currently disabled, but you can always\
|
signupsDisabled: "Signups on this server are currently disabled, but you can always
|
||||||
\ sign up at another server! If you have an invitation code for this server, please\
|
sign up at another server! If you have an invitation code for this server, please
|
||||||
\ enter it below."
|
enter it below."
|
||||||
findOtherInstance: "Find another server"
|
findOtherInstance: "Find another server"
|
||||||
apps: "Apps"
|
apps: "Apps"
|
||||||
sendModMail: "Send Moderation Notice"
|
sendModMail: "Send Moderation Notice"
|
||||||
preventAiLearning: "Prevent AI bot scraping"
|
preventAiLearning: "Prevent AI bot scraping"
|
||||||
preventAiLearningDescription: "Request third-party AI language models not to study\
|
preventAiLearningDescription: "Request third-party AI language models not to study
|
||||||
\ content you upload, such as posts and images."
|
content you upload, such as posts and images."
|
||||||
noGraze: "Please disable the \"Graze for Mastodon\" browser extension, as it interferes with Calckey."
|
noGraze: "Please disable the \"Graze for Mastodon\" browser extension, as it interferes
|
||||||
silencedWarning: "This page is showing because these usera are from servers your admin silenced, so they may potentially be spam."
|
with Calckey."
|
||||||
|
silencedWarning: "This page is showing because these users are from servers your admin
|
||||||
|
silenced, so they may potentially be spam."
|
||||||
|
isBot: "This account is a bot"
|
||||||
|
isLocked: "This account has follow approvals"
|
||||||
|
isModerator: "Moderator"
|
||||||
|
isAdmin: "Administrator"
|
||||||
|
isPatron: "Calckey Patron"
|
||||||
|
reactionPickerSkinTone: "Preferred emoji skin tone"
|
||||||
|
|
||||||
_sensitiveMediaDetection:
|
_sensitiveMediaDetection:
|
||||||
description: "Reduces the effort of server moderation through automatically recognizing\
|
description: "Reduces the effort of server moderation through automatically recognizing
|
||||||
\ NSFW media via Machine Learning. This will slightly increase the load on the\
|
NSFW media via Machine Learning. This will slightly increase the load on the server."
|
||||||
\ server."
|
|
||||||
sensitivity: "Detection sensitivity"
|
sensitivity: "Detection sensitivity"
|
||||||
sensitivityDescription: "Reducing the sensitivity will lead to fewer misdetections\
|
sensitivityDescription: "Reducing the sensitivity will lead to fewer misdetections
|
||||||
\ (false positives) whereas increasing it will lead to fewer missed detections\
|
(false positives) whereas increasing it will lead to fewer missed detections (false
|
||||||
\ (false negatives)."
|
negatives)."
|
||||||
setSensitiveFlagAutomatically: "Mark as NSFW"
|
setSensitiveFlagAutomatically: "Mark as NSFW"
|
||||||
setSensitiveFlagAutomaticallyDescription: "The results of the internal detection\
|
setSensitiveFlagAutomaticallyDescription: "The results of the internal detection
|
||||||
\ will be retained even if this option is turned off."
|
will be retained even if this option is turned off."
|
||||||
analyzeVideos: "Enable analysis of videos"
|
analyzeVideos: "Enable analysis of videos"
|
||||||
analyzeVideosDescription: "Analyzes videos in addition to images. This will slightly\
|
analyzeVideosDescription: "Analyzes videos in addition to images. This will slightly
|
||||||
\ increase the load on the server."
|
increase the load on the server."
|
||||||
_emailUnavailable:
|
_emailUnavailable:
|
||||||
used: "This email address is already being used"
|
used: "This email address is already being used"
|
||||||
format: "The format of this email address is invalid"
|
format: "The format of this email address is invalid"
|
||||||
|
@ -1124,15 +1137,15 @@ _ffVisibility:
|
||||||
_signup:
|
_signup:
|
||||||
almostThere: "Almost there"
|
almostThere: "Almost there"
|
||||||
emailAddressInfo: "Please enter your email address. It will not be made public."
|
emailAddressInfo: "Please enter your email address. It will not be made public."
|
||||||
emailSent: "A confirmation email has been sent to your email address ({email}).\
|
emailSent: "A confirmation email has been sent to your email address ({email}).
|
||||||
\ Please click the included link to complete account creation."
|
Please click the included link to complete account creation."
|
||||||
_accountDelete:
|
_accountDelete:
|
||||||
accountDelete: "Delete account"
|
accountDelete: "Delete account"
|
||||||
mayTakeTime: "As account deletion is a resource-heavy process, it may take some\
|
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\
|
time to complete depending on how much content you have created and how many files
|
||||||
\ files you have uploaded."
|
you have uploaded."
|
||||||
sendEmail: "Once account deletion has been completed, an email will be sent to the\
|
sendEmail: "Once account deletion has been completed, an email will be sent to the
|
||||||
\ email address registered to this account."
|
email address registered to this account."
|
||||||
requestAccountDelete: "Request account deletion"
|
requestAccountDelete: "Request account deletion"
|
||||||
started: "Deletion has been started."
|
started: "Deletion has been started."
|
||||||
inProgress: "Deletion is currently in progress"
|
inProgress: "Deletion is currently in progress"
|
||||||
|
@ -1140,12 +1153,12 @@ _ad:
|
||||||
back: "Back"
|
back: "Back"
|
||||||
reduceFrequencyOfThisAd: "Show this ad less"
|
reduceFrequencyOfThisAd: "Show this ad less"
|
||||||
_forgotPassword:
|
_forgotPassword:
|
||||||
enterEmail: "Enter the email address you used to register. A link with which you\
|
enterEmail: "Enter the email address you used to register. A link with which you
|
||||||
\ can reset your password will then be sent to it."
|
can reset your password will then be sent to it."
|
||||||
ifNoEmail: "If you did not use an email during registration, please contact the\
|
ifNoEmail: "If you did not use an email during registration, please contact the
|
||||||
\ server administrator instead."
|
server administrator instead."
|
||||||
contactAdmin: "This server does not support using email addresses, please contact\
|
contactAdmin: "This server does not support using email addresses, please contact
|
||||||
\ the server administrator to reset your password instead."
|
the server administrator to reset your password instead."
|
||||||
_gallery:
|
_gallery:
|
||||||
my: "My Gallery"
|
my: "My Gallery"
|
||||||
liked: "Liked Posts"
|
liked: "Liked Posts"
|
||||||
|
@ -1168,15 +1181,15 @@ _preferencesBackups:
|
||||||
save: "Save changes"
|
save: "Save changes"
|
||||||
inputName: "Please enter a name for this backup"
|
inputName: "Please enter a name for this backup"
|
||||||
cannotSave: "Saving failed"
|
cannotSave: "Saving failed"
|
||||||
nameAlreadyExists: "A backup called \"{name}\" already exists. Please enter a different\
|
nameAlreadyExists: "A backup called \"{name}\" already exists. Please enter a different
|
||||||
\ name."
|
name."
|
||||||
applyConfirm: "Do you really want to apply the \"{name}\" backup to this device?\
|
applyConfirm: "Do you really want to apply the \"{name}\" backup to this device?
|
||||||
\ Existing settings of this device will be overwritten."
|
Existing settings of this device will be overwritten."
|
||||||
saveConfirm: "Save backup as {name}?"
|
saveConfirm: "Save backup as {name}?"
|
||||||
deleteConfirm: "Delete the {name} backup?"
|
deleteConfirm: "Delete the {name} backup?"
|
||||||
renameConfirm: "Rename this backup from \"{old}\" to \"{new}\"?"
|
renameConfirm: "Rename this backup from \"{old}\" to \"{new}\"?"
|
||||||
noBackups: "No backups exist. You may backup your client settings on this server\
|
noBackups: "No backups exist. You may backup your client settings on this server
|
||||||
\ by using \"Create new backup\"."
|
by using \"Create new backup\"."
|
||||||
createdAt: "Created at: {date} {time}"
|
createdAt: "Created at: {date} {time}"
|
||||||
updatedAt: "Updated at: {date} {time}"
|
updatedAt: "Updated at: {date} {time}"
|
||||||
cannotLoad: "Loading failed"
|
cannotLoad: "Loading failed"
|
||||||
|
@ -1188,15 +1201,15 @@ _registry:
|
||||||
domain: "Domain"
|
domain: "Domain"
|
||||||
createKey: "Create key"
|
createKey: "Create key"
|
||||||
_aboutMisskey:
|
_aboutMisskey:
|
||||||
about: "Calckey is a fork of Misskey made by ThatOneCalculator, which has been in\
|
about: "Calckey is a fork of Misskey made by ThatOneCalculator, which has been in
|
||||||
\ development since 2022."
|
development since 2022."
|
||||||
contributors: "Main contributors"
|
contributors: "Main contributors"
|
||||||
allContributors: "All contributors"
|
allContributors: "All contributors"
|
||||||
source: "Source code"
|
source: "Source code"
|
||||||
translation: "Translate Calckey"
|
translation: "Translate Calckey"
|
||||||
donate: "Donate to Calckey"
|
donate: "Donate to Calckey"
|
||||||
morePatrons: "We also appreciate the support of many other helpers not listed here.\
|
morePatrons: "We also appreciate the support of many other helpers not listed here.
|
||||||
\ Thank you! \U0001F970"
|
Thank you! 🥰"
|
||||||
patrons: "Calckey patrons"
|
patrons: "Calckey patrons"
|
||||||
_nsfw:
|
_nsfw:
|
||||||
respect: "Hide NSFW media"
|
respect: "Hide NSFW media"
|
||||||
|
@ -1208,8 +1221,8 @@ _mfm:
|
||||||
warn: "MFM may contain rapidly moving or flashy animations"
|
warn: "MFM may contain rapidly moving or flashy animations"
|
||||||
alwaysPlay: "Always autoplay all animated MFM"
|
alwaysPlay: "Always autoplay all animated MFM"
|
||||||
cheatSheet: "MFM Cheatsheet"
|
cheatSheet: "MFM Cheatsheet"
|
||||||
intro: "MFM is a markup language used on Misskey, Calckey, Akkoma, and more that\
|
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."
|
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"
|
dummy: "Calckey expands the world of the Fediverse"
|
||||||
advanced: "Advanced MFM"
|
advanced: "Advanced MFM"
|
||||||
advancedDescription: "If disabled, only allows for basic markup unless animated MFM is playing"
|
advancedDescription: "If disabled, only allows for basic markup unless animated MFM is playing"
|
||||||
|
@ -1230,8 +1243,8 @@ _mfm:
|
||||||
inlineCode: "Code (Inline)"
|
inlineCode: "Code (Inline)"
|
||||||
inlineCodeDescription: "Displays inline syntax highlighting for (program) code."
|
inlineCodeDescription: "Displays inline syntax highlighting for (program) code."
|
||||||
blockCode: "Code (Block)"
|
blockCode: "Code (Block)"
|
||||||
blockCodeDescription: "Displays syntax highlighting for multi-line (program) code\
|
blockCodeDescription: "Displays syntax highlighting for multi-line (program) code
|
||||||
\ in a block."
|
in a block."
|
||||||
inlineMath: "Math (Inline)"
|
inlineMath: "Math (Inline)"
|
||||||
inlineMathDescription: "Display math formulas (KaTeX) in-line"
|
inlineMathDescription: "Display math formulas (KaTeX) in-line"
|
||||||
blockMath: "Math (Block)"
|
blockMath: "Math (Block)"
|
||||||
|
@ -1239,8 +1252,8 @@ _mfm:
|
||||||
quote: "Quote"
|
quote: "Quote"
|
||||||
quoteDescription: "Displays content as a quote."
|
quoteDescription: "Displays content as a quote."
|
||||||
emoji: "Custom Emoji"
|
emoji: "Custom Emoji"
|
||||||
emojiDescription: "By surrounding a custom emoji name with colons, custom emoji\
|
emojiDescription: "By surrounding a custom emoji name with colons, custom emoji
|
||||||
\ can be displayed."
|
can be displayed."
|
||||||
search: "Search"
|
search: "Search"
|
||||||
searchDescription: "Displays a search box with pre-entered text."
|
searchDescription: "Displays a search box with pre-entered text."
|
||||||
flip: "Flip"
|
flip: "Flip"
|
||||||
|
@ -1288,8 +1301,8 @@ _mfm:
|
||||||
background: "Background color"
|
background: "Background color"
|
||||||
backgroundDescription: "Change the background color of text."
|
backgroundDescription: "Change the background color of text."
|
||||||
plain: "Plain"
|
plain: "Plain"
|
||||||
plainDescription: "Deactivates the effects of all MFM contained within this MFM\
|
plainDescription: "Deactivates the effects of all MFM contained within this MFM
|
||||||
\ effect."
|
effect."
|
||||||
_instanceTicker:
|
_instanceTicker:
|
||||||
none: "Never show"
|
none: "Never show"
|
||||||
remote: "Show for remote users"
|
remote: "Show for remote users"
|
||||||
|
@ -1321,19 +1334,19 @@ _menuDisplay:
|
||||||
hide: "Hide"
|
hide: "Hide"
|
||||||
_wordMute:
|
_wordMute:
|
||||||
muteWords: "Muted words"
|
muteWords: "Muted words"
|
||||||
muteWordsDescription: "Separate with spaces for an AND condition or with line breaks\
|
muteWordsDescription: "Separate with spaces for an AND condition or with line breaks
|
||||||
\ for an OR condition."
|
for an OR condition."
|
||||||
muteWordsDescription2: "Surround keywords with slashes to use regular expressions."
|
muteWordsDescription2: "Surround keywords with slashes to use regular expressions."
|
||||||
softDescription: "Hide posts that fulfil the set conditions from the timeline."
|
softDescription: "Hide posts that fulfil the set conditions from the timeline."
|
||||||
hardDescription: "Prevents posts fulfilling the set conditions from being added\
|
hardDescription: "Prevents posts fulfilling the set conditions from being added
|
||||||
\ to the timeline. In addition, these posts will not be added to the timeline\
|
to the timeline. In addition, these posts will not be added to the timeline even
|
||||||
\ even if the conditions are changed."
|
if the conditions are changed."
|
||||||
soft: "Soft"
|
soft: "Soft"
|
||||||
hard: "Hard"
|
hard: "Hard"
|
||||||
mutedNotes: "Muted posts"
|
mutedNotes: "Muted posts"
|
||||||
_instanceMute:
|
_instanceMute:
|
||||||
instanceMuteDescription: "This will mute any posts/boosts from the listed servers,\
|
instanceMuteDescription: "This will mute any posts/boosts from the listed servers,
|
||||||
\ including those of users replying to a user from a muted server."
|
including those of users replying to a user from a muted server."
|
||||||
instanceMuteDescription2: "Separate with newlines"
|
instanceMuteDescription2: "Separate with newlines"
|
||||||
title: "Hides posts from listed servers."
|
title: "Hides posts from listed servers."
|
||||||
heading: "List of servers to be muted"
|
heading: "List of servers to be muted"
|
||||||
|
@ -1434,49 +1447,70 @@ _time:
|
||||||
minute: "Minute(s)"
|
minute: "Minute(s)"
|
||||||
hour: "Hour(s)"
|
hour: "Hour(s)"
|
||||||
day: "Day(s)"
|
day: "Day(s)"
|
||||||
|
_filters:
|
||||||
|
fromUser: "From user"
|
||||||
|
withFile: "With file"
|
||||||
|
fromDomain: "From domain"
|
||||||
|
notesBefore: "Posts before"
|
||||||
|
notesAfter: "Posts after"
|
||||||
|
followingOnly: "Following only"
|
||||||
|
followersOnly: "Followers only"
|
||||||
_tutorial:
|
_tutorial:
|
||||||
title: "How to use Calckey"
|
title: "How to use Calckey"
|
||||||
step1_1: "Welcome!"
|
step1_1: "Welcome!"
|
||||||
step1_2: "Let's get you set up. You'll be up and running in no time!"
|
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_1: "First, please fill out your profile."
|
||||||
step2_2: "Providing some information about who you are will make it easier for others\
|
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."
|
to tell if they want to see your posts or follow you."
|
||||||
step3_1: "Now it's time to follow some people!"
|
step3_1: "Now it's time to follow some people!"
|
||||||
step3_2: "Your home and social timelines are based off of who you follow, so try\
|
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\
|
following a couple accounts to get started.\nClick the plus circle on the top
|
||||||
\ right of a profile to follow them."
|
right of a profile to follow them."
|
||||||
step4_1: "Let's get you out there."
|
step4_1: "Let's get you out there."
|
||||||
step4_2: "For your first post, some people like to make an {introduction} post or\
|
step4_2: "For your first post, some people like to make an {introduction} post or
|
||||||
\ a simple \"Hello world!\""
|
a simple \"Hello world!\""
|
||||||
step5_1: "Timelines, timelines everywhere!"
|
step5_1: "Timelines, timelines everywhere!"
|
||||||
step5_2: "Your server has {timelines} different timelines enabled."
|
step5_2: "Your server has {timelines} different timelines enabled."
|
||||||
step5_3: "The Home {icon} timeline is where you can see posts from the accounts\
|
step5_3: "The Home {icon} timeline is where you can see posts from the accounts
|
||||||
\ you follow."
|
you follow."
|
||||||
step5_4: "The Local {icon} timeline is where you can see posts from everyone else on this server."
|
step5_4: "The Local {icon} timeline is where you can see posts from everyone else
|
||||||
|
on this server."
|
||||||
step5_5: "The Social {icon} timeline is a combination of the Home and Local timelines."
|
step5_5: "The Social {icon} timeline is a combination of the Home and Local timelines."
|
||||||
step5_6: "The Recommended {icon} timeline is where you can see posts from servers\
|
step5_6: "The Recommended {icon} timeline is where you can see posts from servers\
|
||||||
\ the admins recommend."
|
\ the admins recommend."
|
||||||
step5_7: "The Global {icon} timeline is where you can see posts from every other\
|
step5_7: "The Global {icon} timeline is where you can see posts from every other\
|
||||||
\ connected server."
|
\ connected server."
|
||||||
step6_1: "So, what is this place?"
|
step6_1: "So, what is this place?"
|
||||||
step6_2: "Well, you didn't just join Calckey. You joined a portal to the Fediverse,\
|
step6_2: "Well, you didn't just join Calckey. You joined a portal to the Fediverse,
|
||||||
\ an interconnected network of thousands of servers."
|
an interconnected network of thousands of servers."
|
||||||
step6_3: "Each server works in different ways, and not all servers run Calckey.\
|
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\
|
This one does though! It's a bit complicated, but you'll get the hang of it in
|
||||||
\ in no time."
|
no time."
|
||||||
step6_4: "Now go, explore, and have fun!"
|
step6_4: "Now go, explore, and have fun!"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "You have already registered a 2-factor authentication device."
|
alreadyRegistered: "You have already registered a 2-factor authentication device."
|
||||||
registerDevice: "Register a new device"
|
registerTOTP: "Register authenticator app"
|
||||||
registerKey: "Register a security key"
|
|
||||||
step1: "First, install an authentication app (such as {a} or {b}) on your device."
|
step1: "First, install an authentication app (such as {a} or {b}) on your device."
|
||||||
step2: "Then, scan the QR code displayed on this screen."
|
step2: "Then, scan the QR code displayed on this screen."
|
||||||
|
step2Click: "Clicking on this QR code will allow you to register 2FA to your security key or phone authenticator app."
|
||||||
step2Url: "You can also enter this URL if you're using a desktop program:"
|
step2Url: "You can also enter this URL if you're using a desktop program:"
|
||||||
|
step3Title: "Enter an authentication code"
|
||||||
step3: "Enter the token provided by your app to finish setup."
|
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."
|
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\
|
securityKeyNotSupported: "Your browser does not support security keys."
|
||||||
\ authentication via hardware security keys that support FIDO2 to further secure\
|
registerTOTPBeforeKey: "Please set up an authenticator app to register a security or pass key."
|
||||||
\ 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."
|
||||||
|
chromePasskeyNotSupported: "Chrome passkeys are currently not supported."
|
||||||
|
registerSecurityKey: "Register a security or pass key"
|
||||||
|
securityKeyName: "Enter a key name"
|
||||||
|
tapSecurityKey: "Please follow your browser to register the security or pass key"
|
||||||
|
removeKey: "Remove security key"
|
||||||
|
removeKeyConfirm: "Really delete the {name} key?"
|
||||||
|
whyTOTPOnlyRenew: "The authenticator app cannot be removed as long as a security key is registered."
|
||||||
|
renewTOTP: "Reconfigure authenticator app"
|
||||||
|
renewTOTPConfirm: "This will cause verification codes from your previous app to stop working"
|
||||||
|
renewTOTPOk: "Reconfigure"
|
||||||
|
renewTOTPCancel: "Cancel"
|
||||||
_permissions:
|
_permissions:
|
||||||
"read:account": "View your account information"
|
"read:account": "View your account information"
|
||||||
"write:account": "Edit your account information"
|
"write:account": "Edit your account information"
|
||||||
|
@ -1512,8 +1546,8 @@ _permissions:
|
||||||
"write:gallery-likes": "Edit your list of liked gallery posts"
|
"write:gallery-likes": "Edit your list of liked gallery posts"
|
||||||
_auth:
|
_auth:
|
||||||
shareAccess: "Would you like to authorize \"{name}\" to access this account?"
|
shareAccess: "Would you like to authorize \"{name}\" to access this account?"
|
||||||
shareAccessAsk: "Are you sure you want to authorize this application to access your\
|
shareAccessAsk: "Are you sure you want to authorize this application to access your
|
||||||
\ account?"
|
account?"
|
||||||
permissionAsk: "This application requests the following permissions"
|
permissionAsk: "This application requests the following permissions"
|
||||||
pleaseGoBack: "Please go back to the application"
|
pleaseGoBack: "Please go back to the application"
|
||||||
callback: "Returning to the application"
|
callback: "Returning to the application"
|
||||||
|
@ -1620,14 +1654,14 @@ _profile:
|
||||||
youCanIncludeHashtags: "You can also include hashtags in your bio."
|
youCanIncludeHashtags: "You can also include hashtags in your bio."
|
||||||
metadata: "Additional Information"
|
metadata: "Additional Information"
|
||||||
metadataEdit: "Edit additional Information"
|
metadataEdit: "Edit additional Information"
|
||||||
metadataDescription: "Using these, you can display additional information fields\
|
metadataDescription: "Using these, you can display additional information fields
|
||||||
\ in your profile."
|
in your profile."
|
||||||
metadataLabel: "Label"
|
metadataLabel: "Label"
|
||||||
metadataContent: "Content"
|
metadataContent: "Content"
|
||||||
changeAvatar: "Change avatar"
|
changeAvatar: "Change avatar"
|
||||||
changeBanner: "Change banner"
|
changeBanner: "Change banner"
|
||||||
locationDescription: "If you enter your city first, it will display your local time\
|
locationDescription: "If you enter your city first, it will display your local time
|
||||||
\ to other users."
|
to other users."
|
||||||
_exportOrImport:
|
_exportOrImport:
|
||||||
allNotes: "All posts"
|
allNotes: "All posts"
|
||||||
followingList: "Followed users"
|
followingList: "Followed users"
|
||||||
|
@ -1945,8 +1979,8 @@ _pages:
|
||||||
_for:
|
_for:
|
||||||
arg1: "Number of times to repeat"
|
arg1: "Number of times to repeat"
|
||||||
arg2: "Action"
|
arg2: "Action"
|
||||||
typeError: "Slot {slot} accepts values of type \"{expect}\", but the provided\
|
typeError: "Slot {slot} accepts values of type \"{expect}\", but the provided
|
||||||
\ value is of type \"{actual}\"!"
|
value is of type \"{actual}\"!"
|
||||||
thereIsEmptySlot: "Slot {slot} is empty!"
|
thereIsEmptySlot: "Slot {slot} is empty!"
|
||||||
types:
|
types:
|
||||||
string: "Text"
|
string: "Text"
|
||||||
|
@ -2015,17 +2049,18 @@ _deck:
|
||||||
deleteProfile: "Delete workspace"
|
deleteProfile: "Delete workspace"
|
||||||
nameAlreadyExists: "This workspace name already exists."
|
nameAlreadyExists: "This workspace name already exists."
|
||||||
introduction: "Create the perfect interface for you by arranging columns freely!"
|
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\
|
introduction2: "Click on the + on the right of the screen to add new colums whenever
|
||||||
\ you want."
|
you want."
|
||||||
widgetsIntroduction: "Please select \"Edit widgets\" in the column menu and add\
|
widgetsIntroduction: "Please select \"Edit widgets\" in the column menu and add
|
||||||
\ a widget."
|
a widget."
|
||||||
_columns:
|
_columns:
|
||||||
main: "Main"
|
main: "Main"
|
||||||
widgets: "Widgets"
|
widgets: "Widgets"
|
||||||
notifications: "Notifications"
|
notifications: "Notifications"
|
||||||
tl: "Timeline"
|
tl: "Timeline"
|
||||||
antenna: "Antennas"
|
antenna: "Antenna"
|
||||||
list: "List"
|
list: "List"
|
||||||
|
channel: "Channel"
|
||||||
mentions: "Mentions"
|
mentions: "Mentions"
|
||||||
direct: "Direct messages"
|
direct: "Direct messages"
|
||||||
_experiments:
|
_experiments:
|
||||||
|
@ -2037,3 +2072,7 @@ _experiments:
|
||||||
postImportsCaption: "Allows users to import their posts from past Calckey,\
|
postImportsCaption: "Allows users to import their posts from past Calckey,\
|
||||||
\ Misskey, Mastodon, Akkoma, and Pleroma accounts. It may cause slowdowns during\
|
\ Misskey, Mastodon, Akkoma, and Pleroma accounts. It may cause slowdowns during\
|
||||||
\ load if your queue is bottlenecked."
|
\ load if your queue is bottlenecked."
|
||||||
|
|
||||||
|
_dialog:
|
||||||
|
charactersExceeded: "Max characters exceeded! Current: {current}/Limit: {max}"
|
||||||
|
charactersBelow: "Not enough characters! Current: {current}/Limit: {min}"
|
||||||
|
|
|
@ -1331,8 +1331,8 @@ _tutorial:
|
||||||
step6_4: "¡Ahora ve, explora y diviértete!"
|
step6_4: "¡Ahora ve, explora y diviértete!"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "Ya has completado la configuración."
|
alreadyRegistered: "Ya has completado la configuración."
|
||||||
registerDevice: "Registrar dispositivo"
|
registerTOTP: "Registrar dispositivo"
|
||||||
registerKey: "Registrar clave"
|
registerSecurityKey: "Registrar clave"
|
||||||
step1: "Primero, instale en su dispositivo la aplicación de autenticación {a} o\
|
step1: "Primero, instale en su dispositivo la aplicación de autenticación {a} o\
|
||||||
\ {b} u otra."
|
\ {b} u otra."
|
||||||
step2: "Luego, escanee con la aplicación el código QR mostrado en pantalla."
|
step2: "Luego, escanee con la aplicación el código QR mostrado en pantalla."
|
||||||
|
@ -1922,7 +1922,7 @@ apps: Aplicaciones
|
||||||
migration: Migración
|
migration: Migración
|
||||||
silenced: Silenciado
|
silenced: Silenciado
|
||||||
deleted: Eliminado
|
deleted: Eliminado
|
||||||
edited: Editado
|
edited: 'Editado a las {date} {time}'
|
||||||
editNote: Editar nota
|
editNote: Editar nota
|
||||||
silenceThisInstance: Silenciar esta instancia
|
silenceThisInstance: Silenciar esta instancia
|
||||||
findOtherInstance: Buscar otro servidor
|
findOtherInstance: Buscar otro servidor
|
||||||
|
|
|
@ -831,7 +831,7 @@ makeReactionsPublic: Aseta reaktiohistoria julkiseksi
|
||||||
unread: Lukematon
|
unread: Lukematon
|
||||||
deleted: Poistettu
|
deleted: Poistettu
|
||||||
editNote: Muokkaa viestiä
|
editNote: Muokkaa viestiä
|
||||||
edited: Muokattu
|
edited: 'Muokattu klo {date} {time}'
|
||||||
avoidMultiCaptchaConfirm: Useiden Captcha-järjestelmien käyttö voi aiheuttaa häiriöitä
|
avoidMultiCaptchaConfirm: Useiden Captcha-järjestelmien käyttö voi aiheuttaa häiriöitä
|
||||||
niiden välillä. Haluatko poistaa käytöstä muut tällä hetkellä käytössä olevat Captcha-järjestelmät?
|
niiden välillä. Haluatko poistaa käytöstä muut tällä hetkellä käytössä olevat Captcha-järjestelmät?
|
||||||
Jos haluat, että ne pysyvät käytössä, paina peruutusnäppäintä.
|
Jos haluat, että ne pysyvät käytössä, paina peruutusnäppäintä.
|
||||||
|
|
|
@ -1262,8 +1262,8 @@ _tutorial:
|
||||||
step6_4: "Maintenant, allez-y, explorez et amusez-vous !"
|
step6_4: "Maintenant, allez-y, explorez et amusez-vous !"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "Configuration déjà achevée."
|
alreadyRegistered: "Configuration déjà achevée."
|
||||||
registerDevice: "Ajouter un nouvel appareil"
|
registerTOTP: "Ajouter un nouvel appareil"
|
||||||
registerKey: "Enregistrer une clef"
|
registerSecurityKey: "Enregistrer une clef"
|
||||||
step1: "Tout d'abord, installez une application d'authentification, telle que {a}\
|
step1: "Tout d'abord, installez une application d'authentification, telle que {a}\
|
||||||
\ ou {b}, sur votre appareil."
|
\ ou {b}, sur votre appareil."
|
||||||
step2: "Ensuite, scannez le code QR affiché sur l’écran."
|
step2: "Ensuite, scannez le code QR affiché sur l’écran."
|
||||||
|
@ -2022,7 +2022,7 @@ silencedInstances: Instances silencieuses
|
||||||
silenced: Silencieux
|
silenced: Silencieux
|
||||||
deleted: Effacé
|
deleted: Effacé
|
||||||
editNote: Modifier note
|
editNote: Modifier note
|
||||||
edited: Modifié
|
edited: 'Modifié à {date} {time}'
|
||||||
flagShowTimelineRepliesDescription: Si activé, affiche dans le fil les réponses des
|
flagShowTimelineRepliesDescription: Si activé, affiche dans le fil les réponses des
|
||||||
personnes aux publications des autres.
|
personnes aux publications des autres.
|
||||||
_experiments:
|
_experiments:
|
||||||
|
|
|
@ -1254,8 +1254,8 @@ _tutorial:
|
||||||
step7_3: "Semoga berhasil dan bersenang-senanglah! \U0001F680"
|
step7_3: "Semoga berhasil dan bersenang-senanglah! \U0001F680"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "Kamu telah mendaftarkan perangkat otentikasi dua faktor."
|
alreadyRegistered: "Kamu telah mendaftarkan perangkat otentikasi dua faktor."
|
||||||
registerDevice: "Daftarkan perangkat baru"
|
registerTOTP: "Daftarkan perangkat baru"
|
||||||
registerKey: "Daftarkan kunci keamanan baru"
|
registerSecurityKey: "Daftarkan kunci keamanan baru"
|
||||||
step1: "Pertama, pasang aplikasi otentikasi (seperti {a} atau {b}) di perangkat\
|
step1: "Pertama, pasang aplikasi otentikasi (seperti {a} atau {b}) di perangkat\
|
||||||
\ kamu."
|
\ kamu."
|
||||||
step2: "Lalu, pindai kode QR yang ada di layar."
|
step2: "Lalu, pindai kode QR yang ada di layar."
|
||||||
|
|
113
locales/index.js
113
locales/index.js
|
@ -2,59 +2,90 @@
|
||||||
* Languages Loader
|
* Languages Loader
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const fs = require('fs');
|
const fs = require("fs");
|
||||||
const yaml = require('js-yaml');
|
const yaml = require("js-yaml");
|
||||||
let languages = []
|
const languages = [];
|
||||||
let languages_custom = []
|
const languages_custom = [];
|
||||||
|
|
||||||
const merge = (...args) => args.reduce((a, c) => ({
|
|
||||||
...a,
|
|
||||||
...c,
|
|
||||||
...Object.entries(a)
|
|
||||||
.filter(([k]) => c && typeof c[k] === 'object')
|
|
||||||
.reduce((a, [k, v]) => (a[k] = merge(v, c[k]), a), {})
|
|
||||||
}), {});
|
|
||||||
|
|
||||||
|
const merge = (...args) =>
|
||||||
|
args.reduce(
|
||||||
|
(a, c) => ({
|
||||||
|
...a,
|
||||||
|
...c,
|
||||||
|
...Object.entries(a)
|
||||||
|
.filter(([k]) => c && typeof c[k] === "object")
|
||||||
|
.reduce((a, [k, v]) => ((a[k] = merge(v, c[k])), a), {}),
|
||||||
|
}),
|
||||||
|
{},
|
||||||
|
);
|
||||||
|
|
||||||
fs.readdirSync(__dirname).forEach((file) => {
|
fs.readdirSync(__dirname).forEach((file) => {
|
||||||
if (file.includes('.yml')){
|
if (file.includes(".yml")) {
|
||||||
file = file.slice(0, file.indexOf('.'))
|
file = file.slice(0, file.indexOf("."));
|
||||||
languages.push(file);
|
languages.push(file);
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
|
||||||
fs.readdirSync(__dirname + '/../custom/locales').forEach((file) => {
|
fs.readdirSync(__dirname + "/../custom/locales").forEach((file) => {
|
||||||
if (file.includes('.yml')){
|
if (file.includes(".yml")) {
|
||||||
file = file.slice(0, file.indexOf('.'))
|
file = file.slice(0, file.indexOf("."));
|
||||||
languages_custom.push(file);
|
languages_custom.push(file);
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
|
||||||
const primaries = {
|
const primaries = {
|
||||||
'en': 'US',
|
en: "US",
|
||||||
'ja': 'JP',
|
ja: "JP",
|
||||||
'zh': 'CN',
|
zh: "CN",
|
||||||
};
|
};
|
||||||
|
|
||||||
// 何故か文字列にバックスペース文字が混入することがあり、YAMLが壊れるので取り除く
|
// 何故か文字列にバックスペース文字が混入することがあり、YAMLが壊れるので取り除く
|
||||||
const clean = (text) => text.replace(new RegExp(String.fromCodePoint(0x08), 'g'), '');
|
const clean = (text) =>
|
||||||
|
text.replace(new RegExp(String.fromCodePoint(0x08), "g"), "");
|
||||||
|
|
||||||
const locales = languages.reduce((a, c) => (a[c] = yaml.load(clean(fs.readFileSync(`${__dirname}/${c}.yml`, 'utf-8'))) || {}, a), {});
|
const locales = languages.reduce(
|
||||||
const locales_custom = languages_custom.reduce((a, c) => (a[c] = yaml.load(clean(fs.readFileSync(`${__dirname}/../custom/locales/${c}.yml`, 'utf-8'))) || {}, a), {});
|
(a, c) => (
|
||||||
Object.assign(locales, locales_custom)
|
(a[c] =
|
||||||
|
yaml.load(clean(fs.readFileSync(`${__dirname}/${c}.yml`, "utf-8"))) ||
|
||||||
|
{}),
|
||||||
|
a
|
||||||
|
),
|
||||||
|
{},
|
||||||
|
);
|
||||||
|
const locales_custom = languages_custom.reduce(
|
||||||
|
(a, c) => (
|
||||||
|
(a[c] =
|
||||||
|
yaml.load(
|
||||||
|
clean(
|
||||||
|
fs.readFileSync(`${__dirname}/../custom/locales/${c}.yml`, "utf-8"),
|
||||||
|
),
|
||||||
|
) || {}),
|
||||||
|
a
|
||||||
|
),
|
||||||
|
{},
|
||||||
|
);
|
||||||
|
Object.assign(locales, locales_custom);
|
||||||
|
|
||||||
module.exports = Object.entries(locales)
|
module.exports = Object.entries(locales).reduce(
|
||||||
.reduce((a, [k ,v]) => (a[k] = (() => {
|
(a, [k, v]) => (
|
||||||
const [lang] = k.split('-');
|
(a[k] = (() => {
|
||||||
switch (k) {
|
const [lang] = k.split("-");
|
||||||
case 'ja-JP': return v;
|
switch (k) {
|
||||||
case 'ja-KS':
|
case "ja-JP":
|
||||||
case 'en-US': return merge(locales['ja-JP'], v);
|
return v;
|
||||||
default: return merge(
|
case "ja-KS":
|
||||||
locales['ja-JP'],
|
case "en-US":
|
||||||
locales['en-US'],
|
return merge(locales["ja-JP"], v);
|
||||||
locales[`${lang}-${primaries[lang]}`] || {},
|
default:
|
||||||
v
|
return merge(
|
||||||
);
|
locales["ja-JP"],
|
||||||
}
|
locales["en-US"],
|
||||||
})(), a), {});
|
locales[`${lang}-${primaries[lang]}`] || {},
|
||||||
|
v,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
})()),
|
||||||
|
a
|
||||||
|
),
|
||||||
|
{},
|
||||||
|
);
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
---
|
|
||||||
_lang_: "Italiano"
|
_lang_: "Italiano"
|
||||||
headlineMisskey: "Rete collegata tramite note"
|
headlineMisskey: "Rete collegata tramite note"
|
||||||
introMisskey: "Benvenut@! Calckey è un servizio di microblogging decentralizzato, libero e aperto. \nScrivi \"note\" per condividere ciò che sta succedendo adesso o per dire a tutti qualcosa di te. 📡\nGrazie alla funzione \"reazioni\" puoi anche mandare reazioni rapide alle note delle altre persone del Fediverso. 👍\nEsplora un nuovo mondo! 🚀"
|
introMisskey: "Benvenut@! Calckey è un servizio di microblogging decentralizzato,
|
||||||
|
libero e aperto. \nScrivi \"note\" per condividere ciò che sta succedendo adesso
|
||||||
|
o per dire a tutti qualcosa di te. 📡\nGrazie alla funzione \"reazioni\" puoi anche
|
||||||
|
mandare reazioni rapide alle note delle altre persone del Fediverso. 👍\nEsplora
|
||||||
|
un nuovo mondo! 🚀"
|
||||||
monthAndDay: "{day}/{month}"
|
monthAndDay: "{day}/{month}"
|
||||||
search: "Cerca"
|
search: "Cerca"
|
||||||
notifications: "Notifiche"
|
notifications: "Notifiche"
|
||||||
|
@ -10,7 +13,7 @@ password: "Password"
|
||||||
forgotPassword: "Hai dimenticato la tua password?"
|
forgotPassword: "Hai dimenticato la tua password?"
|
||||||
fetchingAsApObject: "Recuperando dal Fediverso"
|
fetchingAsApObject: "Recuperando dal Fediverso"
|
||||||
ok: "OK"
|
ok: "OK"
|
||||||
gotIt: "Ho capito"
|
gotIt: "Ho capito!"
|
||||||
cancel: "Annulla"
|
cancel: "Annulla"
|
||||||
enterUsername: "Inserisci un nome utente"
|
enterUsername: "Inserisci un nome utente"
|
||||||
renotedBy: "Rinotato da {user}"
|
renotedBy: "Rinotato da {user}"
|
||||||
|
@ -30,9 +33,9 @@ logout: "Esci"
|
||||||
signup: "Iscriviti"
|
signup: "Iscriviti"
|
||||||
uploading: "Caricamento..."
|
uploading: "Caricamento..."
|
||||||
save: "Salva"
|
save: "Salva"
|
||||||
users: "Utente"
|
users: "Utenti"
|
||||||
addUser: "Aggiungi utente"
|
addUser: "Aggiungi utente"
|
||||||
favorite: "Preferiti"
|
favorite: "Aggiungi ai preferiti"
|
||||||
favorites: "Preferiti"
|
favorites: "Preferiti"
|
||||||
unfavorite: "Rimuovi nota dai preferiti"
|
unfavorite: "Rimuovi nota dai preferiti"
|
||||||
favorited: "Aggiunta ai tuoi preferiti."
|
favorited: "Aggiunta ai tuoi preferiti."
|
||||||
|
@ -44,7 +47,8 @@ copyContent: "Copia il contenuto"
|
||||||
copyLink: "Copia il link"
|
copyLink: "Copia il link"
|
||||||
delete: "Elimina"
|
delete: "Elimina"
|
||||||
deleteAndEdit: "Elimina e modifica"
|
deleteAndEdit: "Elimina e modifica"
|
||||||
deleteAndEditConfirm: "Vuoi davvero cancellare questa nota e scriverla di nuovo? Verrano eliminate anche tutte le reazioni, Rinote e risposte collegate."
|
deleteAndEditConfirm: "Vuoi davvero cancellare questa nota e scriverla di nuovo? Verrano
|
||||||
|
eliminate anche tutte le reazioni, Rinote e risposte collegate."
|
||||||
addToList: "Aggiungi alla lista"
|
addToList: "Aggiungi alla lista"
|
||||||
sendMessage: "Invia messaggio"
|
sendMessage: "Invia messaggio"
|
||||||
copyUsername: "Copia nome utente"
|
copyUsername: "Copia nome utente"
|
||||||
|
@ -54,7 +58,7 @@ loadMore: "Mostra di più"
|
||||||
showMore: "Mostra di più"
|
showMore: "Mostra di più"
|
||||||
showLess: "Chiudi"
|
showLess: "Chiudi"
|
||||||
youGotNewFollower: "Ha iniziato a seguirti"
|
youGotNewFollower: "Ha iniziato a seguirti"
|
||||||
receiveFollowRequest: "Hai ricevuto una richiesta di follow."
|
receiveFollowRequest: "Hai ricevuto una richiesta di follow"
|
||||||
followRequestAccepted: "Richiesta di follow accettata"
|
followRequestAccepted: "Richiesta di follow accettata"
|
||||||
mention: "Menzioni"
|
mention: "Menzioni"
|
||||||
mentions: "Menzioni"
|
mentions: "Menzioni"
|
||||||
|
@ -64,9 +68,11 @@ import: "Importa"
|
||||||
export: "Esporta"
|
export: "Esporta"
|
||||||
files: "Allegati"
|
files: "Allegati"
|
||||||
download: "Scarica"
|
download: "Scarica"
|
||||||
driveFileDeleteConfirm: "Vuoi davvero eliminare il file「{name}? Anche gli allegati verranno eliminati."
|
driveFileDeleteConfirm: "Vuoi davvero eliminare il file「{name}? Anche gli allegati
|
||||||
|
verranno eliminati."
|
||||||
unfollowConfirm: "Vuoi davvero smettere di seguire {name}?"
|
unfollowConfirm: "Vuoi davvero smettere di seguire {name}?"
|
||||||
exportRequested: "Hai richiesto un'esportazione, e potrebbe volerci tempo. Quando sarà compiuta, il file verrà aggiunto direttamente al Drive."
|
exportRequested: "Hai richiesto un'esportazione, e potrebbe volerci tempo. Quando
|
||||||
|
sarà compiuta, il file verrà aggiunto direttamente al Drive."
|
||||||
importRequested: "Hai richiesto un'importazione. Può volerci tempo. "
|
importRequested: "Hai richiesto un'importazione. Può volerci tempo. "
|
||||||
lists: "Liste"
|
lists: "Liste"
|
||||||
noLists: "Nessuna lista"
|
noLists: "Nessuna lista"
|
||||||
|
@ -81,9 +87,11 @@ error: "Errore"
|
||||||
somethingHappened: "Si è verificato un problema"
|
somethingHappened: "Si è verificato un problema"
|
||||||
retry: "Riprova"
|
retry: "Riprova"
|
||||||
pageLoadError: "Caricamento pagina non riuscito. "
|
pageLoadError: "Caricamento pagina non riuscito. "
|
||||||
pageLoadErrorDescription: "Questo viene normalmente causato dalla rete o dalla cache del browser. Si prega di pulire la cache, o di attendere e riprovare più tardi."
|
pageLoadErrorDescription: "Questo viene normalmente causato dalla rete o dalla cache
|
||||||
|
del browser. Si prega di pulire la cache, o di attendere e riprovare più tardi."
|
||||||
serverIsDead: "Il server non risponde. Si prega di attendere e riprovare più tardi."
|
serverIsDead: "Il server non risponde. Si prega di attendere e riprovare più tardi."
|
||||||
youShouldUpgradeClient: "Per visualizzare la pagina è necessario aggiornare il client alla nuova versione e ricaricare."
|
youShouldUpgradeClient: "Per visualizzare la pagina è necessario aggiornare il client
|
||||||
|
alla nuova versione e ricaricare."
|
||||||
enterListName: "Nome della lista"
|
enterListName: "Nome della lista"
|
||||||
privacy: "Privacy"
|
privacy: "Privacy"
|
||||||
makeFollowManuallyApprove: "Richiedi di approvare i follower manualmente"
|
makeFollowManuallyApprove: "Richiedi di approvare i follower manualmente"
|
||||||
|
@ -108,7 +116,8 @@ sensitive: "Contenuto sensibile"
|
||||||
add: "Aggiungi"
|
add: "Aggiungi"
|
||||||
reaction: "Reazione"
|
reaction: "Reazione"
|
||||||
reactionSetting: "Reazioni visualizzate sul pannello"
|
reactionSetting: "Reazioni visualizzate sul pannello"
|
||||||
reactionSettingDescription2: "Trascina per riorganizzare, clicca per cancellare, usa il pulsante \"+\" per aggiungere."
|
reactionSettingDescription2: "Trascina per riorganizzare, clicca per cancellare, usa
|
||||||
|
il pulsante \"+\" per aggiungere."
|
||||||
rememberNoteVisibility: "Ricordare le impostazioni di visibilità delle note"
|
rememberNoteVisibility: "Ricordare le impostazioni di visibilità delle note"
|
||||||
attachCancel: "Rimuovi allegato"
|
attachCancel: "Rimuovi allegato"
|
||||||
markAsSensitive: "Segna come sensibile"
|
markAsSensitive: "Segna come sensibile"
|
||||||
|
@ -137,12 +146,19 @@ emojiUrl: "URL dell'emoji"
|
||||||
addEmoji: "Aggiungi un emoji"
|
addEmoji: "Aggiungi un emoji"
|
||||||
settingGuide: "Configurazione suggerita"
|
settingGuide: "Configurazione suggerita"
|
||||||
cacheRemoteFiles: "Memorizzazione nella cache dei file remoti"
|
cacheRemoteFiles: "Memorizzazione nella cache dei file remoti"
|
||||||
cacheRemoteFilesDescription: "Disabilitando questa opzione, i file remoti verranno linkati direttamente senza essere memorizzati nella cache. Sarà possibile risparmiare spazio di archiviazione sul server, ma il traffico aumenterà in quanto non verranno generate anteprime."
|
cacheRemoteFilesDescription: "Disabilitando questa opzione, i file remoti verranno
|
||||||
|
linkati direttamente senza essere memorizzati nella cache. Sarà possibile risparmiare
|
||||||
|
spazio di archiviazione sul server, ma il traffico aumenterà in quanto non verranno
|
||||||
|
generate anteprime."
|
||||||
flagAsBot: "Io sono un robot"
|
flagAsBot: "Io sono un robot"
|
||||||
flagAsBotDescription: "Se l'account esegue principalmente operazioni automatiche, attiva quest'opzione. Quando attivata, opera come un segnalatore per gli altri sviluppatori allo scopo di prevenire catene d’interazione senza fine con altri bot, e di adeguare i sistemi interni di Calckey perché trattino questo account come un bot."
|
flagAsBotDescription: "Se l'account esegue principalmente operazioni automatiche,
|
||||||
|
attiva quest'opzione. Quando attivata, opera come un segnalatore per gli altri sviluppatori
|
||||||
|
allo scopo di prevenire catene d’interazione senza fine con altri bot, e di adeguare
|
||||||
|
i sistemi interni di Calckey perché trattino questo account come un bot."
|
||||||
flagAsCat: "Io sono un gatto"
|
flagAsCat: "Io sono un gatto"
|
||||||
flagAsCatDescription: "Abilita l'opzione \"Io sono un gatto\" per l'account."
|
flagAsCatDescription: "Abilita l'opzione \"Io sono un gatto\" per l'account."
|
||||||
autoAcceptFollowed: "Accetta automaticamente le richieste di follow da utenti che già segui"
|
autoAcceptFollowed: "Accetta automaticamente le richieste di follow da utenti che
|
||||||
|
già segui"
|
||||||
addAccount: "Aggiungi account"
|
addAccount: "Aggiungi account"
|
||||||
loginFailed: "Accesso non riuscito"
|
loginFailed: "Accesso non riuscito"
|
||||||
showOnRemote: "Sfoglia sull'istanza remota"
|
showOnRemote: "Sfoglia sull'istanza remota"
|
||||||
|
@ -154,7 +170,10 @@ searchWith: "Cerca: {q}"
|
||||||
youHaveNoLists: "Non hai ancora creato nessuna lista"
|
youHaveNoLists: "Non hai ancora creato nessuna lista"
|
||||||
followConfirm: "Sei sicur@ di voler seguire {name}?"
|
followConfirm: "Sei sicur@ di voler seguire {name}?"
|
||||||
proxyAccount: "Account proxy"
|
proxyAccount: "Account proxy"
|
||||||
proxyAccountDescription: "Un account proxy è un account che funziona da follower remoto per gli utenti sotto certe condizioni. Ad esempio, quando un utente aggiunge un utente remoto alla lista, dato che se nessun utente locale segue quell'utente le sue attività non verranno distribuite, al suo posto lo seguirà un account proxy."
|
proxyAccountDescription: "Un account proxy è un account che funziona da follower remoto
|
||||||
|
per gli utenti sotto certe condizioni. Ad esempio, quando un utente aggiunge un
|
||||||
|
utente remoto alla lista, dato che se nessun utente locale segue quell'utente le
|
||||||
|
sue attività non verranno distribuite, al suo posto lo seguirà un account proxy."
|
||||||
host: "Server remoto"
|
host: "Server remoto"
|
||||||
selectUser: "Seleziona utente"
|
selectUser: "Seleziona utente"
|
||||||
recipient: "Destinatario"
|
recipient: "Destinatario"
|
||||||
|
@ -184,11 +203,13 @@ instanceInfo: "Informazioni sull'istanza"
|
||||||
statistics: "Statistiche"
|
statistics: "Statistiche"
|
||||||
clearQueue: "Svuota coda"
|
clearQueue: "Svuota coda"
|
||||||
clearQueueConfirmTitle: "Vuoi davvero svuotare la coda?"
|
clearQueueConfirmTitle: "Vuoi davvero svuotare la coda?"
|
||||||
clearQueueConfirmText: "Le note ancora non distribuite non verranno rilasciate. Solitamente, non è necessario eseguire questa operazione."
|
clearQueueConfirmText: "Le note ancora non distribuite non verranno rilasciate. Solitamente,
|
||||||
|
non è necessario eseguire questa operazione."
|
||||||
clearCachedFiles: "Svuota cache"
|
clearCachedFiles: "Svuota cache"
|
||||||
clearCachedFilesConfirm: "Vuoi davvero svuotare la cache da tutti i file remoti?"
|
clearCachedFilesConfirm: "Vuoi davvero svuotare la cache da tutti i file remoti?"
|
||||||
blockedInstances: "Istanze bloccate"
|
blockedInstances: "Istanze bloccate"
|
||||||
blockedInstancesDescription: "Elenca le istanze che vuoi bloccare, una per riga. Esse non potranno più interagire con la tua istanza."
|
blockedInstancesDescription: "Elenca le istanze che vuoi bloccare, una per riga. Esse
|
||||||
|
non potranno più interagire con la tua istanza."
|
||||||
muteAndBlock: "Silenziati / Bloccati"
|
muteAndBlock: "Silenziati / Bloccati"
|
||||||
mutedUsers: "Account silenziati"
|
mutedUsers: "Account silenziati"
|
||||||
blockedUsers: "Account bloccati"
|
blockedUsers: "Account bloccati"
|
||||||
|
@ -250,7 +271,8 @@ agreeTo: "Sono d'accordo con {0}"
|
||||||
tos: "Termini di servizio"
|
tos: "Termini di servizio"
|
||||||
start: "Inizia!"
|
start: "Inizia!"
|
||||||
home: "Home"
|
home: "Home"
|
||||||
remoteUserCaution: "Può darsi che le informazioni siano incomplete perché questo è un utente remoto."
|
remoteUserCaution: "Può darsi che le informazioni siano incomplete perché questo è
|
||||||
|
un utente remoto."
|
||||||
activity: "Attività"
|
activity: "Attività"
|
||||||
images: "Immagini"
|
images: "Immagini"
|
||||||
birthday: "Compleanno"
|
birthday: "Compleanno"
|
||||||
|
@ -283,7 +305,8 @@ unableToDelete: "Eliminazione impossibile"
|
||||||
inputNewFileName: "Inserisci nome del nuovo file"
|
inputNewFileName: "Inserisci nome del nuovo file"
|
||||||
inputNewDescription: "Inserisci una nuova descrizione"
|
inputNewDescription: "Inserisci una nuova descrizione"
|
||||||
inputNewFolderName: "Inserisci nome della nuova cartella"
|
inputNewFolderName: "Inserisci nome della nuova cartella"
|
||||||
circularReferenceFolder: "La cartella di destinazione è una sottocartella della cartella che vuoi spostare."
|
circularReferenceFolder: "La cartella di destinazione è una sottocartella della cartella
|
||||||
|
che vuoi spostare."
|
||||||
hasChildFilesOrFolders: "Impossibile eliminare la cartella perché non è vuota"
|
hasChildFilesOrFolders: "Impossibile eliminare la cartella perché non è vuota"
|
||||||
copyUrl: "Copia URL"
|
copyUrl: "Copia URL"
|
||||||
rename: "Modifica nome"
|
rename: "Modifica nome"
|
||||||
|
@ -317,7 +340,8 @@ connectService: "Connessione"
|
||||||
disconnectService: "Disconnessione "
|
disconnectService: "Disconnessione "
|
||||||
enableLocalTimeline: "Abilita Timeline locale"
|
enableLocalTimeline: "Abilita Timeline locale"
|
||||||
enableGlobalTimeline: "Abilita Timeline federata"
|
enableGlobalTimeline: "Abilita Timeline federata"
|
||||||
disablingTimelinesInfo: "Anche se disabiliti queste timeline, gli amministratori e i moderatori potranno sempre accederci."
|
disablingTimelinesInfo: "Anche se disabiliti queste timeline, gli amministratori e
|
||||||
|
i moderatori potranno sempre accederci."
|
||||||
registration: "Iscriviti"
|
registration: "Iscriviti"
|
||||||
enableRegistration: "Permettere nuove registrazioni"
|
enableRegistration: "Permettere nuove registrazioni"
|
||||||
invite: "Invita"
|
invite: "Invita"
|
||||||
|
@ -329,9 +353,11 @@ bannerUrl: "URL dell'immagine d'intestazione"
|
||||||
backgroundImageUrl: "URL dello sfondo"
|
backgroundImageUrl: "URL dello sfondo"
|
||||||
basicInfo: "Informazioni fondamentali"
|
basicInfo: "Informazioni fondamentali"
|
||||||
pinnedUsers: "Utenti in evidenza"
|
pinnedUsers: "Utenti in evidenza"
|
||||||
pinnedUsersDescription: "Elenca gli/le utenti che vuoi fissare in cima alla pagina \"Esplora\", un@ per riga."
|
pinnedUsersDescription: "Elenca gli/le utenti che vuoi fissare in cima alla pagina
|
||||||
|
\"Esplora\", un@ per riga."
|
||||||
pinnedPages: "Pagine in evidenza"
|
pinnedPages: "Pagine in evidenza"
|
||||||
pinnedPagesDescription: "Specifica il percorso delle pagine che vuoi fissare in cima alla pagina dell'istanza. Una pagina per riga."
|
pinnedPagesDescription: "Specifica il percorso delle pagine che vuoi fissare in cima
|
||||||
|
alla pagina dell'istanza. Una pagina per riga."
|
||||||
pinnedClipId: "ID della clip in evidenza"
|
pinnedClipId: "ID della clip in evidenza"
|
||||||
pinnedNotes: "Nota fissata"
|
pinnedNotes: "Nota fissata"
|
||||||
hcaptcha: "hCaptcha"
|
hcaptcha: "hCaptcha"
|
||||||
|
@ -342,14 +368,17 @@ recaptcha: "reCAPTCHA"
|
||||||
enableRecaptcha: "Abilita reCAPTCHA"
|
enableRecaptcha: "Abilita reCAPTCHA"
|
||||||
recaptchaSiteKey: "Chiave del sito"
|
recaptchaSiteKey: "Chiave del sito"
|
||||||
recaptchaSecretKey: "Chiave segreta"
|
recaptchaSecretKey: "Chiave segreta"
|
||||||
avoidMultiCaptchaConfirm: "Utilizzare diversi Captcha può causare interferenze. Vuoi disattivare l'altro Captcha? Puoi lasciare diversi Captcha attivi premendo \"Cancella\"."
|
avoidMultiCaptchaConfirm: "Utilizzare diversi Captcha può causare interferenze. Vuoi
|
||||||
|
disattivare l'altro Captcha? Puoi lasciare diversi Captcha attivi premendo \"Cancella\"\
|
||||||
|
."
|
||||||
antennas: "Antenne"
|
antennas: "Antenne"
|
||||||
manageAntennas: "Gestore delle antenne"
|
manageAntennas: "Gestore delle antenne"
|
||||||
name: "Nome"
|
name: "Nome"
|
||||||
antennaSource: "Fonte dell'antenna"
|
antennaSource: "Fonte dell'antenna"
|
||||||
antennaKeywords: "Parole chiavi da ricevere"
|
antennaKeywords: "Parole chiavi da ricevere"
|
||||||
antennaExcludeKeywords: "Parole chiavi da escludere"
|
antennaExcludeKeywords: "Parole chiavi da escludere"
|
||||||
antennaKeywordsDescription: "Separare con uno spazio indica la condizione \"E\". Separare con un'interruzzione riga indica la condizione \"O\"."
|
antennaKeywordsDescription: "Separare con uno spazio indica la condizione \"E\". Separare
|
||||||
|
con un'interruzzione riga indica la condizione \"O\"."
|
||||||
notifyAntenna: "Invia notifiche delle nuove note"
|
notifyAntenna: "Invia notifiche delle nuove note"
|
||||||
withFileAntenna: "Solo note con file in allegato"
|
withFileAntenna: "Solo note con file in allegato"
|
||||||
enableServiceworker: "Abilita ServiceWorker"
|
enableServiceworker: "Abilita ServiceWorker"
|
||||||
|
@ -477,19 +506,26 @@ showFeaturedNotesInTimeline: "Mostrare le note di tendenza nella tua timeline"
|
||||||
objectStorage: "Stoccaggio oggetti"
|
objectStorage: "Stoccaggio oggetti"
|
||||||
useObjectStorage: "Utilizza stoccaggio oggetti"
|
useObjectStorage: "Utilizza stoccaggio oggetti"
|
||||||
objectStorageBaseUrl: "Base URL"
|
objectStorageBaseUrl: "Base URL"
|
||||||
objectStorageBaseUrlDesc: "URL di riferimento. In caso di utilizzo di proxy o CDN l'URL è 'https://<bucket>.s3.amazonaws.com' per S3, 'https://storage.googleapis.com/<bucket>' per GCS eccetera. "
|
objectStorageBaseUrlDesc: "URL di riferimento. In caso di utilizzo di proxy o CDN
|
||||||
|
l'URL è 'https://<bucket>.s3.amazonaws.com' per S3, 'https://storage.googleapis.com/<bucket>'
|
||||||
|
per GCS eccetera. "
|
||||||
objectStorageBucket: "Bucket"
|
objectStorageBucket: "Bucket"
|
||||||
objectStorageBucketDesc: "Specificare il nome del bucket utilizzato dal provider."
|
objectStorageBucketDesc: "Specificare il nome del bucket utilizzato dal provider."
|
||||||
objectStoragePrefix: "Prefix"
|
objectStoragePrefix: "Prefix"
|
||||||
objectStoragePrefixDesc: "I file saranno conservati sotto la directory di questo prefisso."
|
objectStoragePrefixDesc: "I file saranno conservati sotto la directory di questo prefisso."
|
||||||
objectStorageEndpoint: "Endpoint"
|
objectStorageEndpoint: "Endpoint"
|
||||||
objectStorageEndpointDesc: "Lasciare vuoto se si sta utilizzando S3. In caso contrario si prega di specificare l'endpoint come '<host>' oppure '<host>:<port>' a seconda del servizio utilizzato."
|
objectStorageEndpointDesc: "Lasciare vuoto se si sta utilizzando S3. In caso contrario
|
||||||
|
si prega di specificare l'endpoint come '<host>' oppure '<host>:<port>' a seconda
|
||||||
|
del servizio utilizzato."
|
||||||
objectStorageRegion: "Region"
|
objectStorageRegion: "Region"
|
||||||
objectStorageRegionDesc: "Specificate una regione, quale 'xx-east-1'. Se il servizio in utilizzo non distingue tra regioni, lasciate vuoto o inserite 'us-east-1'."
|
objectStorageRegionDesc: "Specificate una regione, quale 'xx-east-1'. Se il servizio
|
||||||
|
in utilizzo non distingue tra regioni, lasciate vuoto o inserite 'us-east-1'."
|
||||||
objectStorageUseSSL: "Usare SSL"
|
objectStorageUseSSL: "Usare SSL"
|
||||||
objectStorageUseSSLDesc: "Disabilita quest'opzione se non utilizzi HTTPS per le connessioni API."
|
objectStorageUseSSLDesc: "Disabilita quest'opzione se non utilizzi HTTPS per le connessioni
|
||||||
|
API."
|
||||||
objectStorageUseProxy: "Usa proxy"
|
objectStorageUseProxy: "Usa proxy"
|
||||||
objectStorageUseProxyDesc: "Disabilita quest'opzione se non usi proxy per la connessione API."
|
objectStorageUseProxyDesc: "Disabilita quest'opzione se non usi proxy per la connessione
|
||||||
|
API."
|
||||||
objectStorageSetPublicRead: "Imposta \"visibilità pubblica\" al momento di caricare"
|
objectStorageSetPublicRead: "Imposta \"visibilità pubblica\" al momento di caricare"
|
||||||
serverLogs: "Log del server"
|
serverLogs: "Log del server"
|
||||||
deleteAll: "Cancella cronologia"
|
deleteAll: "Cancella cronologia"
|
||||||
|
@ -517,7 +553,9 @@ sort: "Ordina per"
|
||||||
ascendingOrder: "Ascendente"
|
ascendingOrder: "Ascendente"
|
||||||
descendingOrder: "Discendente"
|
descendingOrder: "Discendente"
|
||||||
scratchpad: "ScratchPad"
|
scratchpad: "ScratchPad"
|
||||||
scratchpadDescription: "Lo Scratchpad offre un ambiente per esperimenti di AiScript. È possibile scrivere, eseguire e confermare i risultati dell'interazione del codice con Calckey."
|
scratchpadDescription: "Lo Scratchpad offre un ambiente per esperimenti di AiScript.
|
||||||
|
È possibile scrivere, eseguire e confermare i risultati dell'interazione del codice
|
||||||
|
con Calckey."
|
||||||
output: "Uscita"
|
output: "Uscita"
|
||||||
script: "Script"
|
script: "Script"
|
||||||
disablePagesScript: "Disabilita AiScript nelle pagine"
|
disablePagesScript: "Disabilita AiScript nelle pagine"
|
||||||
|
@ -525,11 +563,14 @@ updateRemoteUser: "Aggiornare le informazioni di utente remot@"
|
||||||
deleteAllFiles: "Elimina tutti i file"
|
deleteAllFiles: "Elimina tutti i file"
|
||||||
deleteAllFilesConfirm: "Vuoi davvero eliminare tutti i file?"
|
deleteAllFilesConfirm: "Vuoi davvero eliminare tutti i file?"
|
||||||
removeAllFollowing: "Cancella tutti i follows"
|
removeAllFollowing: "Cancella tutti i follows"
|
||||||
removeAllFollowingDescription: "Cancella tutti i follows del server {host}. Per favore, esegui se, ad esempio, l'istanza non esiste più."
|
removeAllFollowingDescription: "Cancella tutti i follows del server {host}. Per favore,
|
||||||
|
esegui se, ad esempio, l'istanza non esiste più."
|
||||||
userSuspended: "L'utente è sospes@."
|
userSuspended: "L'utente è sospes@."
|
||||||
userSilenced: "L'utente è silenziat@."
|
userSilenced: "L'utente è silenziat@."
|
||||||
yourAccountSuspendedTitle: "Questo account è sospeso."
|
yourAccountSuspendedTitle: "Questo account è sospeso."
|
||||||
yourAccountSuspendedDescription: "Questo account è stato sospeso a causa di una violazione dei termini di servizio del server. Contattare l'amministrazione per i dettagli. Si prega di non creare un nuovo account."
|
yourAccountSuspendedDescription: "Questo account è stato sospeso a causa di una violazione
|
||||||
|
dei termini di servizio del server. Contattare l'amministrazione per i dettagli.
|
||||||
|
Si prega di non creare un nuovo account."
|
||||||
menu: "Menù"
|
menu: "Menù"
|
||||||
divider: "Linea di separazione"
|
divider: "Linea di separazione"
|
||||||
addItem: "Aggiungi elemento"
|
addItem: "Aggiungi elemento"
|
||||||
|
@ -569,12 +610,14 @@ permission: "Autorizzazioni "
|
||||||
enableAll: "Abilita tutto"
|
enableAll: "Abilita tutto"
|
||||||
disableAll: "Disabilita tutto"
|
disableAll: "Disabilita tutto"
|
||||||
tokenRequested: "Autorizza accesso all'account"
|
tokenRequested: "Autorizza accesso all'account"
|
||||||
pluginTokenRequestedDescription: "Il plugin potrà utilizzare le autorizzazioni impostate qui."
|
pluginTokenRequestedDescription: "Il plugin potrà utilizzare le autorizzazioni impostate
|
||||||
|
qui."
|
||||||
notificationType: "Tipo di notifiche"
|
notificationType: "Tipo di notifiche"
|
||||||
edit: "Modifica"
|
edit: "Modifica"
|
||||||
emailServer: "Server email"
|
emailServer: "Server email"
|
||||||
enableEmail: "Abilita consegna email"
|
enableEmail: "Abilita consegna email"
|
||||||
emailConfigInfo: "Utilizzato per verificare il tuo indirizzo di posta elettronica e per reimpostare la tua password"
|
emailConfigInfo: "Utilizzato per verificare il tuo indirizzo di posta elettronica
|
||||||
|
e per reimpostare la tua password"
|
||||||
email: "Email"
|
email: "Email"
|
||||||
emailAddress: "Indirizzo di posta elettronica"
|
emailAddress: "Indirizzo di posta elettronica"
|
||||||
smtpConfig: "Impostazioni del server SMTP"
|
smtpConfig: "Impostazioni del server SMTP"
|
||||||
|
@ -582,7 +625,8 @@ smtpHost: "Server remoto"
|
||||||
smtpPort: "Porta"
|
smtpPort: "Porta"
|
||||||
smtpUser: "Nome utente"
|
smtpUser: "Nome utente"
|
||||||
smtpPass: "Password"
|
smtpPass: "Password"
|
||||||
emptyToDisableSmtpAuth: "Lasciare il nome utente e la password vuoti per disabilitare la verifica SMTP"
|
emptyToDisableSmtpAuth: "Lasciare il nome utente e la password vuoti per disabilitare
|
||||||
|
la verifica SMTP"
|
||||||
smtpSecure: "Usare la porta SSL/TLS implicito per le connessioni SMTP"
|
smtpSecure: "Usare la porta SSL/TLS implicito per le connessioni SMTP"
|
||||||
smtpSecureInfo: "Disabilitare quando è attivo STARTTLS."
|
smtpSecureInfo: "Disabilitare quando è attivo STARTTLS."
|
||||||
testEmail: "Testare la consegna di posta elettronica"
|
testEmail: "Testare la consegna di posta elettronica"
|
||||||
|
@ -602,10 +646,13 @@ create: "Crea"
|
||||||
notificationSetting: "Impostazioni notifiche"
|
notificationSetting: "Impostazioni notifiche"
|
||||||
notificationSettingDesc: "Seleziona il tipo di notifiche da visualizzare."
|
notificationSettingDesc: "Seleziona il tipo di notifiche da visualizzare."
|
||||||
useGlobalSetting: "Usa impostazioni generali"
|
useGlobalSetting: "Usa impostazioni generali"
|
||||||
useGlobalSettingDesc: "Se abilitato, le impostazioni notifiche dell'account verranno utilizzate. Se disabilitato, si possono definire diverse singole impostazioni."
|
useGlobalSettingDesc: "Se abilitato, le impostazioni notifiche dell'account verranno
|
||||||
|
utilizzate. Se disabilitato, si possono definire diverse singole impostazioni."
|
||||||
other: "Avanzate"
|
other: "Avanzate"
|
||||||
regenerateLoginToken: "Genera di nuovo un token di connessione"
|
regenerateLoginToken: "Genera di nuovo un token di connessione"
|
||||||
regenerateLoginTokenDescription: "Genera un nuovo token di autenticazione. Solitamente questa operazione non è necessaria: quando si genera un nuovo token, tutti i dispositivi vanno disconnessi."
|
regenerateLoginTokenDescription: "Genera un nuovo token di autenticazione. Solitamente
|
||||||
|
questa operazione non è necessaria: quando si genera un nuovo token, tutti i dispositivi
|
||||||
|
vanno disconnessi."
|
||||||
setMultipleBySeparatingWithSpace: "È possibile creare multiple voci separate da spazi."
|
setMultipleBySeparatingWithSpace: "È possibile creare multiple voci separate da spazi."
|
||||||
fileIdOrUrl: "ID o URL del file"
|
fileIdOrUrl: "ID o URL del file"
|
||||||
behavior: "Comportamento"
|
behavior: "Comportamento"
|
||||||
|
@ -613,7 +660,8 @@ sample: "Esempio"
|
||||||
abuseReports: "Segnalazioni"
|
abuseReports: "Segnalazioni"
|
||||||
reportAbuse: "Segnalazioni"
|
reportAbuse: "Segnalazioni"
|
||||||
reportAbuseOf: "Segnala {name}"
|
reportAbuseOf: "Segnala {name}"
|
||||||
fillAbuseReportDescription: "Si prega di spiegare il motivo della segnalazione. Se riguarda una nota precisa, si prega di collegare anche l'URL della nota."
|
fillAbuseReportDescription: "Si prega di spiegare il motivo della segnalazione. Se
|
||||||
|
riguarda una nota precisa, si prega di collegare anche l'URL della nota."
|
||||||
abuseReported: "La segnalazione è stata inviata. Grazie."
|
abuseReported: "La segnalazione è stata inviata. Grazie."
|
||||||
reporter: "il corrispondente"
|
reporter: "il corrispondente"
|
||||||
reporteeOrigin: "Origine del segnalato"
|
reporteeOrigin: "Origine del segnalato"
|
||||||
|
@ -623,7 +671,8 @@ abuseMarkAsResolved: "Contrassegna la segnalazione come risolta"
|
||||||
openInNewTab: "Apri in una nuova scheda"
|
openInNewTab: "Apri in una nuova scheda"
|
||||||
openInSideView: "Apri in vista laterale"
|
openInSideView: "Apri in vista laterale"
|
||||||
defaultNavigationBehaviour: "Navigazione preimpostata"
|
defaultNavigationBehaviour: "Navigazione preimpostata"
|
||||||
editTheseSettingsMayBreakAccount: "Modificare queste impostazioni può danneggiare l'account."
|
editTheseSettingsMayBreakAccount: "Modificare queste impostazioni può danneggiare
|
||||||
|
l'account."
|
||||||
instanceTicker: "Informazioni sull'istanza da cui vengono le note"
|
instanceTicker: "Informazioni sull'istanza da cui vengono le note"
|
||||||
waitingFor: "Aspettando {x}"
|
waitingFor: "Aspettando {x}"
|
||||||
random: "Casuale"
|
random: "Casuale"
|
||||||
|
@ -635,7 +684,8 @@ createNew: "Crea nuov@"
|
||||||
optional: "Opzionale"
|
optional: "Opzionale"
|
||||||
createNewClip: "Nuova clip"
|
createNewClip: "Nuova clip"
|
||||||
public: "Pubblica"
|
public: "Pubblica"
|
||||||
i18nInfo: "Calckey è tradotto in diverse lingue da volontari. Anche tu puoi contribuire su {link}."
|
i18nInfo: "Calckey è tradotto in diverse lingue da volontari. Anche tu puoi contribuire
|
||||||
|
su {link}."
|
||||||
manageAccessTokens: "Gestisci token di accesso"
|
manageAccessTokens: "Gestisci token di accesso"
|
||||||
accountInfo: "Informazioni account"
|
accountInfo: "Informazioni account"
|
||||||
notesCount: "Conteggio note"
|
notesCount: "Conteggio note"
|
||||||
|
@ -654,12 +704,16 @@ no: "No"
|
||||||
driveFilesCount: "Numero di file nel Drive"
|
driveFilesCount: "Numero di file nel Drive"
|
||||||
driveUsage: "Utilizzazione del Drive"
|
driveUsage: "Utilizzazione del Drive"
|
||||||
noCrawle: "Rifiuta l'indicizzazione dai robot."
|
noCrawle: "Rifiuta l'indicizzazione dai robot."
|
||||||
noCrawleDescription: "Richiedi che i motori di ricerca non indicizzino la tua pagina di profilo, le tue note, pagine, ecc."
|
noCrawleDescription: "Richiedi che i motori di ricerca non indicizzino la tua pagina
|
||||||
lockedAccountInfo: "A meno che non imposti la visibilità delle tue note su \"Solo ai follower\", le tue note sono visibili da tutti, anche se hai configurato l'account per confermare manualmente le richieste di follow."
|
di profilo, le tue note, pagine, ecc."
|
||||||
|
lockedAccountInfo: "A meno che non imposti la visibilità delle tue note su \"Solo
|
||||||
|
ai follower\", le tue note sono visibili da tutti, anche se hai configurato l'account
|
||||||
|
per confermare manualmente le richieste di follow."
|
||||||
alwaysMarkSensitive: "Segnare i media come sensibili per impostazione predefinita"
|
alwaysMarkSensitive: "Segnare i media come sensibili per impostazione predefinita"
|
||||||
loadRawImages: "Visualizza le intere immagini allegate invece delle miniature."
|
loadRawImages: "Visualizza le intere immagini allegate invece delle miniature."
|
||||||
disableShowingAnimatedImages: "Disabilita le immagini animate"
|
disableShowingAnimatedImages: "Disabilita le immagini animate"
|
||||||
verificationEmailSent: "Una mail di verifica è stata inviata. Si prega di accedere al collegamento per compiere la verifica."
|
verificationEmailSent: "Una mail di verifica è stata inviata. Si prega di accedere
|
||||||
|
al collegamento per compiere la verifica."
|
||||||
notSet: "Non impostato"
|
notSet: "Non impostato"
|
||||||
emailVerified: "Il tuo indirizzo email è stato verificato"
|
emailVerified: "Il tuo indirizzo email è stato verificato"
|
||||||
noteFavoritesCount: "Conteggio note tra i preferiti"
|
noteFavoritesCount: "Conteggio note tra i preferiti"
|
||||||
|
@ -671,13 +725,15 @@ clips: "Clip"
|
||||||
experimentalFeatures: "Funzioni sperimentali"
|
experimentalFeatures: "Funzioni sperimentali"
|
||||||
developer: "Sviluppatore"
|
developer: "Sviluppatore"
|
||||||
makeExplorable: "Account visibile sulla pagina \"Esplora\""
|
makeExplorable: "Account visibile sulla pagina \"Esplora\""
|
||||||
makeExplorableDescription: "Se disabiliti l'opzione, il tuo account non verrà visualizzato sulla pagina \"Esplora\"."
|
makeExplorableDescription: "Se disabiliti l'opzione, il tuo account non verrà visualizzato
|
||||||
|
sulla pagina \"Esplora\"."
|
||||||
showGapBetweenNotesInTimeline: "Mostrare un intervallo tra le note sulla timeline"
|
showGapBetweenNotesInTimeline: "Mostrare un intervallo tra le note sulla timeline"
|
||||||
duplicate: "Duplica"
|
duplicate: "Duplica"
|
||||||
left: "Sinistra"
|
left: "Sinistra"
|
||||||
center: "Centro"
|
center: "Centro"
|
||||||
wide: "Largo"
|
wide: "Largo"
|
||||||
reloadToApplySetting: "Le tue preferenze verranno impostate dopo il ricaricamento della pagina. Vuoi ricaricare adesso?"
|
reloadToApplySetting: "Le tue preferenze verranno impostate dopo il ricaricamento
|
||||||
|
della pagina. Vuoi ricaricare adesso?"
|
||||||
needReloadToApply: "È necessario riavviare per rendere effettive le modifiche."
|
needReloadToApply: "È necessario riavviare per rendere effettive le modifiche."
|
||||||
showTitlebar: "Visualizza la barra del titolo"
|
showTitlebar: "Visualizza la barra del titolo"
|
||||||
clearCache: "Svuota cache"
|
clearCache: "Svuota cache"
|
||||||
|
@ -685,7 +741,10 @@ onlineUsersCount: "{n} utenti online"
|
||||||
nUsers: "{n} utenti"
|
nUsers: "{n} utenti"
|
||||||
nNotes: "{n}Note"
|
nNotes: "{n}Note"
|
||||||
sendErrorReports: "Invia segnalazioni di errori"
|
sendErrorReports: "Invia segnalazioni di errori"
|
||||||
sendErrorReportsDescription: "Quando abilitato, se si verifica un problema, informazioni dettagliate sugli errori verranno condivise con Calckey in modo da aiutare a migliorare la qualità del software.\nCiò include informazioni come la versione del sistema operativo, il tipo di navigatore web che usi, la cronologia delle attività, ecc."
|
sendErrorReportsDescription: "Quando abilitato, se si verifica un problema, informazioni
|
||||||
|
dettagliate sugli errori verranno condivise con Calckey in modo da aiutare a migliorare
|
||||||
|
la qualità del software.\nCiò include informazioni come la versione del sistema
|
||||||
|
operativo, il tipo di navigatore web che usi, la cronologia delle attività, ecc."
|
||||||
myTheme: "I miei temi"
|
myTheme: "I miei temi"
|
||||||
backgroundColor: "Sfondo"
|
backgroundColor: "Sfondo"
|
||||||
textColor: "Testo"
|
textColor: "Testo"
|
||||||
|
@ -711,7 +770,8 @@ receiveAnnouncementFromInstance: "Ricevi i messaggi informativi dall'istanza"
|
||||||
emailNotification: "Eventi per notifiche via mail"
|
emailNotification: "Eventi per notifiche via mail"
|
||||||
publish: "Pubblico"
|
publish: "Pubblico"
|
||||||
inChannelSearch: "Cerca in canale"
|
inChannelSearch: "Cerca in canale"
|
||||||
useReactionPickerForContextMenu: "Cliccare sul tasto destro per aprire il pannello di reazioni"
|
useReactionPickerForContextMenu: "Cliccare sul tasto destro per aprire il pannello
|
||||||
|
di reazioni"
|
||||||
typingUsers: "{users} sta(nno) scrivendo"
|
typingUsers: "{users} sta(nno) scrivendo"
|
||||||
jumpToSpecifiedDate: "Vai alla data "
|
jumpToSpecifiedDate: "Vai alla data "
|
||||||
showingPastTimeline: "Stai visualizzando una vecchia timeline"
|
showingPastTimeline: "Stai visualizzando una vecchia timeline"
|
||||||
|
@ -722,14 +782,17 @@ unlikeConfirm: "Non ti piace più?"
|
||||||
fullView: "Schermo intero"
|
fullView: "Schermo intero"
|
||||||
quitFullView: "Esci dalla modalità a schermo intero"
|
quitFullView: "Esci dalla modalità a schermo intero"
|
||||||
addDescription: "Aggiungi descrizione"
|
addDescription: "Aggiungi descrizione"
|
||||||
userPagePinTip: "Qui puoi appuntare note, premendo \"Fissa sul profilo\" nel menù delle singole note."
|
userPagePinTip: "Qui puoi appuntare note, premendo \"Fissa sul profilo\" nel menù
|
||||||
notSpecifiedMentionWarning: "Sono menzionati account che non vengono inclusi fra i destinatari"
|
delle singole note."
|
||||||
|
notSpecifiedMentionWarning: "Sono menzionati account che non vengono inclusi fra i
|
||||||
|
destinatari"
|
||||||
info: "Informazioni"
|
info: "Informazioni"
|
||||||
userInfo: "Informazioni utente"
|
userInfo: "Informazioni utente"
|
||||||
unknown: "Sconosciuto"
|
unknown: "Sconosciuto"
|
||||||
onlineStatus: "Stato di connessione"
|
onlineStatus: "Stato di connessione"
|
||||||
hideOnlineStatus: "Stato invisibile"
|
hideOnlineStatus: "Stato invisibile"
|
||||||
hideOnlineStatusDescription: "Abilitare l'opzione di stato invisibile può guastare la praticità di singole funzioni, come la ricerca."
|
hideOnlineStatusDescription: "Abilitare l'opzione di stato invisibile può guastare
|
||||||
|
la praticità di singole funzioni, come la ricerca."
|
||||||
online: "Online"
|
online: "Online"
|
||||||
active: "Attiv@"
|
active: "Attiv@"
|
||||||
offline: "Offline"
|
offline: "Offline"
|
||||||
|
@ -777,7 +840,9 @@ whatIsNew: "Visualizza le informazioni sull'aggiornamento"
|
||||||
translate: "Traduzione"
|
translate: "Traduzione"
|
||||||
translatedFrom: "Tradotto da {x}"
|
translatedFrom: "Tradotto da {x}"
|
||||||
accountDeletionInProgress: "La cancellazione dell'account è in corso"
|
accountDeletionInProgress: "La cancellazione dell'account è in corso"
|
||||||
usernameInfo: "Un nome per identificare univocamente il tuo account sul server. È possibile utilizzare caratteri alfanumerici (a~z, A~Z, 0~9) e il trattino basso (_). Non sarà possibile cambiare il nome utente in seguito."
|
usernameInfo: "Un nome per identificare univocamente il tuo account sul server. È
|
||||||
|
possibile utilizzare caratteri alfanumerici (a~z, A~Z, 0~9) e il trattino basso
|
||||||
|
(_). Non sarà possibile cambiare il nome utente in seguito."
|
||||||
aiChanMode: "Modalità Ai"
|
aiChanMode: "Modalità Ai"
|
||||||
keepCw: "Mantieni il CW"
|
keepCw: "Mantieni il CW"
|
||||||
resolved: "Risolto"
|
resolved: "Risolto"
|
||||||
|
@ -801,7 +866,8 @@ leaveGroup: "Esci dal gruppo"
|
||||||
leaveGroupConfirm: "Uscire da「{name}」?"
|
leaveGroupConfirm: "Uscire da「{name}」?"
|
||||||
useDrawerReactionPickerForMobile: "Mostra sul drawer da dispositivo mobile"
|
useDrawerReactionPickerForMobile: "Mostra sul drawer da dispositivo mobile"
|
||||||
welcomeBackWithName: "Bentornato/a, {name}"
|
welcomeBackWithName: "Bentornato/a, {name}"
|
||||||
clickToFinishEmailVerification: "Fai click su [{ok}] per completare la verifica dell'indirizzo email."
|
clickToFinishEmailVerification: "Fai click su [{ok}] per completare la verifica dell'indirizzo
|
||||||
|
email."
|
||||||
searchByGoogle: "Cerca"
|
searchByGoogle: "Cerca"
|
||||||
indefinitely: "Non scade"
|
indefinitely: "Non scade"
|
||||||
tenMinutes: "10 minuti"
|
tenMinutes: "10 minuti"
|
||||||
|
@ -829,7 +895,8 @@ _signup:
|
||||||
emailAddressInfo: "Inserisci il tuo indirizzo email. Non verrà reso pubblico."
|
emailAddressInfo: "Inserisci il tuo indirizzo email. Non verrà reso pubblico."
|
||||||
_accountDelete:
|
_accountDelete:
|
||||||
accountDelete: "Cancellazione account"
|
accountDelete: "Cancellazione account"
|
||||||
sendEmail: "Al termine della cancellazione dell'account, verrà inviata una mail all'indirizzo a cui era registrato."
|
sendEmail: "Al termine della cancellazione dell'account, verrà inviata una mail
|
||||||
|
all'indirizzo a cui era registrato."
|
||||||
requestAccountDelete: "Richiesta di cancellazione account"
|
requestAccountDelete: "Richiesta di cancellazione account"
|
||||||
started: "Il processo di cancellazione è iniziato."
|
started: "Il processo di cancellazione è iniziato."
|
||||||
inProgress: "Cancellazione in corso"
|
inProgress: "Cancellazione in corso"
|
||||||
|
@ -837,9 +904,13 @@ _ad:
|
||||||
back: "Indietro"
|
back: "Indietro"
|
||||||
reduceFrequencyOfThisAd: "Visualizza questa pubblicità meno spesso"
|
reduceFrequencyOfThisAd: "Visualizza questa pubblicità meno spesso"
|
||||||
_forgotPassword:
|
_forgotPassword:
|
||||||
enterEmail: "Inserisci l'indirizzo di posta elettronica che hai registrato nel tuo profilo. Il collegamento necessario per ripristinare la password verrà inviato a questo indirizzo."
|
enterEmail: "Inserisci l'indirizzo di posta elettronica che hai registrato nel tuo
|
||||||
ifNoEmail: "Se nessun indirizzo e-mail è stato registrato, si prega di contattare l'amministratore·trice dell'istanza."
|
profilo. Il collegamento necessario per ripristinare la password verrà inviato
|
||||||
contactAdmin: "Poiché questa istanza non permette l'utilizzo di una mail, si prega di contattare l'amministratore·trice dell'istanza per poter ripristinare la password."
|
a questo indirizzo."
|
||||||
|
ifNoEmail: "Se nessun indirizzo e-mail è stato registrato, si prega di contattare
|
||||||
|
l'amministratore·trice dell'istanza."
|
||||||
|
contactAdmin: "Poiché questa istanza non permette l'utilizzo di una mail, si prega
|
||||||
|
di contattare l'amministratore·trice dell'istanza per poter ripristinare la password."
|
||||||
_gallery:
|
_gallery:
|
||||||
my: "Le mie pubblicazioni"
|
my: "Le mie pubblicazioni"
|
||||||
liked: "Pubblicazioni che mi piacciono"
|
liked: "Pubblicazioni che mi piacciono"
|
||||||
|
@ -852,7 +923,8 @@ _email:
|
||||||
title: "Hai ricevuto una richiesta di follow"
|
title: "Hai ricevuto una richiesta di follow"
|
||||||
_plugin:
|
_plugin:
|
||||||
install: "Installa estensioni"
|
install: "Installa estensioni"
|
||||||
installWarn: "Si prega di installare soltanto estensioni che provengono da fonti affidabili."
|
installWarn: "Si prega di installare soltanto estensioni che provengono da fonti
|
||||||
|
affidabili."
|
||||||
manage: "Gestisci estensioni"
|
manage: "Gestisci estensioni"
|
||||||
_registry:
|
_registry:
|
||||||
key: "Dati"
|
key: "Dati"
|
||||||
|
@ -866,7 +938,8 @@ _aboutMisskey:
|
||||||
source: "Codice sorgente"
|
source: "Codice sorgente"
|
||||||
translation: "Tradurre Calckey"
|
translation: "Tradurre Calckey"
|
||||||
donate: "Sostieni Calckey"
|
donate: "Sostieni Calckey"
|
||||||
morePatrons: "Apprezziamo sinceramente il supporto di tante altre persone. Grazie mille! 🥰"
|
morePatrons: "Apprezziamo sinceramente il supporto di tante altre persone. Grazie
|
||||||
|
mille! 🥰"
|
||||||
patrons: "Sostenitori"
|
patrons: "Sostenitori"
|
||||||
_nsfw:
|
_nsfw:
|
||||||
respect: "Nascondere i media segnati come sensibli"
|
respect: "Nascondere i media segnati come sensibli"
|
||||||
|
@ -874,10 +947,12 @@ _nsfw:
|
||||||
force: "Nascondere tutti i media"
|
force: "Nascondere tutti i media"
|
||||||
_mfm:
|
_mfm:
|
||||||
cheatSheet: "Bigliettino MFM"
|
cheatSheet: "Bigliettino MFM"
|
||||||
intro: "MFM è un linguaggio Markdown particolare che si può usare in diverse parti di Calckey. Qui puoi visualizzare a colpo d'occhio tutta la sintassi MFM utile."
|
intro: "MFM è un linguaggio Markdown particolare che si può usare in diverse parti
|
||||||
|
di Calckey. Qui puoi visualizzare a colpo d'occhio tutta la sintassi MFM utile."
|
||||||
dummy: "Il Fediverso si espande con Calckey"
|
dummy: "Il Fediverso si espande con Calckey"
|
||||||
mention: "Menzioni"
|
mention: "Menzioni"
|
||||||
mentionDescription: "Si può menzionare un utente specifico digitando il suo nome utente subito dopo il segno @."
|
mentionDescription: "Si può menzionare un utente specifico digitando il suo nome
|
||||||
|
utente subito dopo il segno @."
|
||||||
hashtag: "Hashtag"
|
hashtag: "Hashtag"
|
||||||
url: "URL"
|
url: "URL"
|
||||||
link: "Link"
|
link: "Link"
|
||||||
|
@ -904,7 +979,8 @@ _mfm:
|
||||||
x4: "Estremamente più grande"
|
x4: "Estremamente più grande"
|
||||||
x4Description: "Mostra il contenuto estremamente più ingrandito."
|
x4Description: "Mostra il contenuto estremamente più ingrandito."
|
||||||
blur: "Sfocatura"
|
blur: "Sfocatura"
|
||||||
blurDescription: "È possibile rendere sfocato il contenuto. Spostando il cursore su di esso tornerà visibile chiaramente."
|
blurDescription: "È possibile rendere sfocato il contenuto. Spostando il cursore
|
||||||
|
su di esso tornerà visibile chiaramente."
|
||||||
font: "Tipo di carattere"
|
font: "Tipo di carattere"
|
||||||
fontDescription: "Puoi scegliere il tipo di carattere per il contenuto."
|
fontDescription: "Puoi scegliere il tipo di carattere per il contenuto."
|
||||||
rainbow: "Arcobaleno"
|
rainbow: "Arcobaleno"
|
||||||
|
@ -933,10 +1009,15 @@ _menuDisplay:
|
||||||
hide: "Nascondere"
|
hide: "Nascondere"
|
||||||
_wordMute:
|
_wordMute:
|
||||||
muteWords: "Parole da filtrare"
|
muteWords: "Parole da filtrare"
|
||||||
muteWordsDescription: "Separare con uno spazio indica la condizione \"E\". Separare con un'interruzzione riga indica la condizione \"O\"."
|
muteWordsDescription: "Separare con uno spazio indica la condizione \"E\". Separare
|
||||||
muteWordsDescription2: "Metti le parole chiavi tra slash per usare espressioni regolari (regexp)."
|
con un'interruzzione riga indica la condizione \"O\"."
|
||||||
softDescription: "Nascondi della timeline note che rispondono alle condizioni impostate qui."
|
muteWordsDescription2: "Metti le parole chiavi tra slash per usare espressioni regolari
|
||||||
hardDescription: "Impedisci alla timeline di caricare le note che rispondono alle condizioni impostate qui. Inoltre, le note scompariranno in modo irreversibile, anche se le condizioni verranno successivamente rimosse."
|
(regexp)."
|
||||||
|
softDescription: "Nascondi della timeline note che rispondono alle condizioni impostate
|
||||||
|
qui."
|
||||||
|
hardDescription: "Impedisci alla timeline di caricare le note che rispondono alle
|
||||||
|
condizioni impostate qui. Inoltre, le note scompariranno in modo irreversibile,
|
||||||
|
anche se le condizioni verranno successivamente rimosse."
|
||||||
soft: "Moderato"
|
soft: "Moderato"
|
||||||
hard: "Severo"
|
hard: "Severo"
|
||||||
mutedNotes: "Note silenziate"
|
mutedNotes: "Note silenziate"
|
||||||
|
@ -1030,24 +1111,35 @@ _tutorial:
|
||||||
step1_1: "Benvenuto!"
|
step1_1: "Benvenuto!"
|
||||||
step1_2: "Vediamo di configurarla. Sarete operativi in men che non si dica!"
|
step1_2: "Vediamo di configurarla. Sarete operativi in men che non si dica!"
|
||||||
step2_1: "Per prima cosa, compila il tuo profilo"
|
step2_1: "Per prima cosa, compila il tuo profilo"
|
||||||
step2_2: "Fornendo alcune informazioni su chi siete, sarà più facile per gli altri capire se vogliono vedere le vostre note o seguirvi"
|
step2_2: "Fornendo alcune informazioni su chi siete, sarà più facile per gli altri
|
||||||
|
capire se vogliono vedere le vostre note o seguirvi"
|
||||||
step3_1: "Ora è il momento di seguire alcune persone!"
|
step3_1: "Ora è il momento di seguire alcune persone!"
|
||||||
step3_2: "La vostra home e le vostre timeline social si basano su chi seguite, quindi provate a seguire un paio di account per iniziare.\nCliccate sul cerchio più in alto a destra di un profilo per seguirlo"
|
step3_2: "La vostra home e le vostre timeline social si basano su chi seguite, quindi
|
||||||
|
provate a seguire un paio di account per iniziare.\nCliccate sul cerchio più in
|
||||||
|
alto a destra di un profilo per seguirlo"
|
||||||
step4_1: "Fatevi conoscere"
|
step4_1: "Fatevi conoscere"
|
||||||
step4_2: "Per il vostro primo post, alcuni preferiscono fare un post di {introduction} o un semplice \"Ciao mondo!\""
|
step4_2: "Per il vostro primo post, alcuni preferiscono fare un post di {introduction}
|
||||||
|
o un semplice \"Ciao mondo!\""
|
||||||
step5_1: "Linee temporali, linee temporali dappertutto!"
|
step5_1: "Linee temporali, linee temporali dappertutto!"
|
||||||
step5_2: "La tua istanza ha attivato {timelines} diverse timelines"
|
step5_2: "La tua istanza ha attivato {timelines} diverse timelines"
|
||||||
step5_3: "La timeline Home {icon} è quella in cui si possono vedere i post dei propri follower"
|
step5_3: "La timeline Home {icon} è quella in cui si possono vedere i post dei propri
|
||||||
step5_4: "La timeline Locale {icon} è quella in cui si possono vedere i post di tutti gli altri utenti di questa istanza"
|
follower"
|
||||||
step5_5: "La timeline Raccomandati {icon} è quella in cui si possono vedere i post delle istanze raccomandate dagli amministratori"
|
step5_4: "La timeline Locale {icon} è quella in cui si possono vedere i post di
|
||||||
step5_6: "La timeline Social {icon} è quella in cui si possono vedere i post degli amici dei propri follower"
|
tutti gli altri utenti di questa istanza"
|
||||||
step5_7: "La timeline Globale {icon} è quella in cui si possono vedere i post di ogni altra istanza collegata"
|
step5_5: "La timeline Raccomandati {icon} è quella in cui si possono vedere i post
|
||||||
|
delle istanze raccomandate dagli amministratori"
|
||||||
|
step5_6: "La timeline Social {icon} è quella in cui si possono vedere i post degli
|
||||||
|
amici dei propri follower"
|
||||||
|
step5_7: "La timeline Globale {icon} è quella in cui si possono vedere i post di
|
||||||
|
ogni altra istanza collegata"
|
||||||
step6_1: "Allora, cos'è questo posto?"
|
step6_1: "Allora, cos'è questo posto?"
|
||||||
step6_2: "Beh, non ti sei semplicemente unito a Calckey. Sei entrato in un portale del Fediverse, una rete interconnessa di migliaia di server, chiamata \"istanze\""
|
step6_2: "Beh, non ti sei semplicemente unito a Calckey. Sei entrato in un portale
|
||||||
step6_3: "Ogni server funziona in modo diverso, e non tutti i server eseguono Calckey. Questo però lo fa! È un po' complicato, ma ci riuscirete in poco tempo"
|
del Fediverse, una rete interconnessa di migliaia di server, chiamata \"istanze\""
|
||||||
|
step6_3: "Ogni server funziona in modo diverso, e non tutti i server eseguono Calckey.
|
||||||
|
Questo però lo fa! È un po' complicato, ma ci riuscirete in poco tempo"
|
||||||
step6_4: "Ora andate, esplorate e divertitevi!"
|
step6_4: "Ora andate, esplorate e divertitevi!"
|
||||||
_2fa:
|
_2fa:
|
||||||
registerDevice: "Aggiungi dispositivo"
|
registerTOTP: "Aggiungi dispositivo"
|
||||||
_permissions:
|
_permissions:
|
||||||
"read:account": "Visualizzare le informazioni dell'account"
|
"read:account": "Visualizzare le informazioni dell'account"
|
||||||
"write:account": "Modificare le informazioni dell'account"
|
"write:account": "Modificare le informazioni dell'account"
|
||||||
|
@ -1173,7 +1265,8 @@ _profile:
|
||||||
youCanIncludeHashtags: "Puoi anche includere hashtag."
|
youCanIncludeHashtags: "Puoi anche includere hashtag."
|
||||||
metadata: "Informazioni aggiuntive"
|
metadata: "Informazioni aggiuntive"
|
||||||
metadataEdit: "Modifica informazioni aggiuntive"
|
metadataEdit: "Modifica informazioni aggiuntive"
|
||||||
metadataDescription: "Puoi pubblicare fino a quattro informazioni aggiuntive sul profilo."
|
metadataDescription: "Puoi pubblicare fino a quattro informazioni aggiuntive sul
|
||||||
|
profilo."
|
||||||
metadataLabel: "Etichetta"
|
metadataLabel: "Etichetta"
|
||||||
metadataContent: "Contenuto"
|
metadataContent: "Contenuto"
|
||||||
changeAvatar: "Modifica immagine profilo"
|
changeAvatar: "Modifica immagine profilo"
|
||||||
|
@ -1465,3 +1558,6 @@ _deck:
|
||||||
list: "Liste"
|
list: "Liste"
|
||||||
mentions: "Menzioni"
|
mentions: "Menzioni"
|
||||||
direct: "Diretta"
|
direct: "Diretta"
|
||||||
|
noThankYou: No grazie
|
||||||
|
addInstance: Aggiungi un'istanza
|
||||||
|
deleted: Eliminato
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
_lang_: "日本語"
|
_lang_: "日本語"
|
||||||
headlineMisskey: "ずっと無料でオープンソースの非中央集権型ソーシャルメディアプラットフォーム\U0001F680"
|
headlineMisskey: "ずっと無料でオープンソースの非中央集権型ソーシャルメディアプラットフォーム🚀"
|
||||||
introMisskey: "ようこそ!Calckeyは、オープンソースの非中央集権型ソーシャルメディアプラットフォームです。\nいま起こっていることを共有したり、あなたについて皆に発信しましょう\U0001F4E1\
|
introMisskey: "ようこそ!Calckeyは、オープンソースの非中央集権型ソーシャルメディアプラットフォームです。\nいま起こっていることを共有したり、あなたについて皆に発信しましょう📡\n\
|
||||||
\n「リアクション」機能で、皆の投稿に素早く反応を追加できます\U0001F44D\n新しい世界を探検しよう\U0001F680"
|
「リアクション」機能で、皆の投稿に素早く反応を追加できます👍\n新しい世界を探検しよう🚀"
|
||||||
monthAndDay: "{month}月 {day}日"
|
monthAndDay: "{month}月 {day}日"
|
||||||
search: "検索"
|
search: "検索"
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
|
@ -17,7 +17,7 @@ enterUsername: "ユーザー名を入力"
|
||||||
renotedBy: "{user}がブースト"
|
renotedBy: "{user}がブースト"
|
||||||
noNotes: "投稿はありません"
|
noNotes: "投稿はありません"
|
||||||
noNotifications: "通知はありません"
|
noNotifications: "通知はありません"
|
||||||
instance: "インスタンス"
|
instance: "サーバー"
|
||||||
settings: "設定"
|
settings: "設定"
|
||||||
basicSettings: "基本設定"
|
basicSettings: "基本設定"
|
||||||
otherSettings: "その他の設定"
|
otherSettings: "その他の設定"
|
||||||
|
@ -33,7 +33,7 @@ uploading: "アップロード中"
|
||||||
save: "保存"
|
save: "保存"
|
||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
addUser: "ユーザーを追加"
|
addUser: "ユーザーを追加"
|
||||||
addInstance: "インスタンスを追加"
|
addInstance: "サーバーを追加"
|
||||||
favorite: "お気に入り"
|
favorite: "お気に入り"
|
||||||
favorites: "お気に入り"
|
favorites: "お気に入り"
|
||||||
unfavorite: "お気に入り解除"
|
unfavorite: "お気に入り解除"
|
||||||
|
@ -133,6 +133,7 @@ unsuspendConfirm: "解凍しますか?"
|
||||||
selectList: "リストを選択"
|
selectList: "リストを選択"
|
||||||
selectAntenna: "アンテナを選択"
|
selectAntenna: "アンテナを選択"
|
||||||
selectWidget: "ウィジェットを選択"
|
selectWidget: "ウィジェットを選択"
|
||||||
|
selectChannel: "チャンネルを選択"
|
||||||
editWidgets: "ウィジェットを編集"
|
editWidgets: "ウィジェットを編集"
|
||||||
editWidgetsExit: "編集を終了"
|
editWidgetsExit: "編集を終了"
|
||||||
customEmojis: "カスタム絵文字"
|
customEmojis: "カスタム絵文字"
|
||||||
|
@ -146,7 +147,7 @@ cacheRemoteFiles: "リモートのファイルをキャッシュする"
|
||||||
cacheRemoteFilesDescription: "この設定を無効にすると、リモートファイルをキャッシュせず直リンクします。サーバーのストレージを節約できますが、サムネイルが生成されないので通信量が増加します。"
|
cacheRemoteFilesDescription: "この設定を無効にすると、リモートファイルをキャッシュせず直リンクします。サーバーのストレージを節約できますが、サムネイルが生成されないので通信量が増加します。"
|
||||||
flagAsBot: "Botとして設定"
|
flagAsBot: "Botとして設定"
|
||||||
flagAsBotDescription: "このアカウントがBotである場合は、この設定をオンにします。オンにすると、反応の連鎖を防ぐためのフラグとして他の開発者に役立ったり、Calckeyのシステム上での扱いがBotに合ったものになります。"
|
flagAsBotDescription: "このアカウントがBotである場合は、この設定をオンにします。オンにすると、反応の連鎖を防ぐためのフラグとして他の開発者に役立ったり、Calckeyのシステム上での扱いがBotに合ったものになります。"
|
||||||
flagAsCat: "あなたは…猫?\U0001F63A"
|
flagAsCat: "あなたは…猫?😺"
|
||||||
flagAsCatDescription: "このアカウントが猫であることを示す猫モードを有効にするには、このフラグをオンにします。"
|
flagAsCatDescription: "このアカウントが猫であることを示す猫モードを有効にするには、このフラグをオンにします。"
|
||||||
flagSpeakAsCat: "猫語で話す"
|
flagSpeakAsCat: "猫語で話す"
|
||||||
flagSpeakAsCatDescription: "猫モードが有効の場合にオンにすると、あなたの投稿の「な」を「にゃ」に変換します。"
|
flagSpeakAsCatDescription: "猫モードが有効の場合にオンにすると、あなたの投稿の「な」を「にゃ」に変換します。"
|
||||||
|
@ -165,14 +166,14 @@ searchWith: "検索: {q}"
|
||||||
youHaveNoLists: "リストがありません"
|
youHaveNoLists: "リストがありません"
|
||||||
followConfirm: "{name}をフォローしますか?"
|
followConfirm: "{name}をフォローしますか?"
|
||||||
proxyAccount: "プロキシアカウント"
|
proxyAccount: "プロキシアカウント"
|
||||||
proxyAccountDescription: "プロキシアカウントは、特定の条件下でユーザーのリモートフォローを代行するアカウントです。例えば、ユーザーがリモートユーザーをリストに入れたとき、リストに入れられたユーザーを誰もフォローしていないとアクティビティがインスタンスに配達されないため、代わりにプロキシアカウントがフォローするようにします。"
|
proxyAccountDescription: "プロキシアカウントは、特定の条件下でユーザーのリモートフォローを代行するアカウントです。例えば、ユーザーがリモートユーザーをリストに入れたとき、リストに入れられたユーザーを誰もフォローしていないとアクティビティがサーバーに配達されないため、代わりにプロキシアカウントがフォローするようにします。"
|
||||||
host: "ホスト"
|
host: "ホスト"
|
||||||
selectUser: "ユーザーを選択"
|
selectUser: "ユーザーを選択"
|
||||||
selectInstance: "インスタンスを選択"
|
selectInstance: "サーバーを選択"
|
||||||
recipient: "宛先"
|
recipient: "宛先"
|
||||||
annotation: "注釈"
|
annotation: "注釈"
|
||||||
federation: "連合"
|
federation: "連合"
|
||||||
instances: "インスタンス"
|
instances: "サーバー"
|
||||||
registeredAt: "初観測"
|
registeredAt: "初観測"
|
||||||
latestRequestSentAt: "直近のリクエスト送信"
|
latestRequestSentAt: "直近のリクエスト送信"
|
||||||
latestRequestReceivedAt: "直近のリクエスト受信"
|
latestRequestReceivedAt: "直近のリクエスト受信"
|
||||||
|
@ -182,8 +183,8 @@ charts: "チャート"
|
||||||
perHour: "1時間ごと"
|
perHour: "1時間ごと"
|
||||||
perDay: "1日ごと"
|
perDay: "1日ごと"
|
||||||
stopActivityDelivery: "アクティビティの配送を停止"
|
stopActivityDelivery: "アクティビティの配送を停止"
|
||||||
blockThisInstance: "このインスタンスをブロック"
|
blockThisInstance: "このサーバーをブロック"
|
||||||
silenceThisInstance: "このインスタンスをサイレンス"
|
silenceThisInstance: "このサーバーをサイレンス"
|
||||||
operations: "操作"
|
operations: "操作"
|
||||||
software: "ソフトウェア"
|
software: "ソフトウェア"
|
||||||
version: "バージョン"
|
version: "バージョン"
|
||||||
|
@ -193,22 +194,22 @@ jobQueue: "ジョブキュー"
|
||||||
cpuAndMemory: "CPUとメモリ"
|
cpuAndMemory: "CPUとメモリ"
|
||||||
network: "ネットワーク"
|
network: "ネットワーク"
|
||||||
disk: "ディスク"
|
disk: "ディスク"
|
||||||
instanceInfo: "インスタンス情報"
|
instanceInfo: "サーバー情報"
|
||||||
statistics: "統計"
|
statistics: "統計"
|
||||||
clearQueue: "キューをクリア"
|
clearQueue: "キューをクリア"
|
||||||
clearQueueConfirmTitle: "キューをクリアしますか?"
|
clearQueueConfirmTitle: "キューをクリアしますか?"
|
||||||
clearQueueConfirmText: "未配達の投稿は配送されなくなります。通常この操作を行う必要はありません。"
|
clearQueueConfirmText: "未配達の投稿は配送されなくなります。通常この操作を行う必要はありません。"
|
||||||
clearCachedFiles: "キャッシュをクリア"
|
clearCachedFiles: "キャッシュをクリア"
|
||||||
clearCachedFilesConfirm: "キャッシュされたリモートファイルをすべて削除しますか?"
|
clearCachedFilesConfirm: "キャッシュされたリモートファイルをすべて削除しますか?"
|
||||||
blockedInstances: "ブロックしたインスタンス"
|
blockedInstances: "ブロックしたサーバー"
|
||||||
blockedInstancesDescription: "ブロックしたいインスタンスのホストを改行で区切って設定します。ブロックされたインスタンスは、このインスタンスとやり取りできなくなります。"
|
blockedInstancesDescription: "ブロックしたいサーバーのホストを改行で区切って設定します。ブロックされたサーバーは、このサーバーとやり取りできなくなります。"
|
||||||
silencedInstances: "サイレンスしたインスタンス"
|
silencedInstances: "サイレンスしたサーバー"
|
||||||
silencedInstancesDescription: "サイレンスしたいインスタンスのホストを改行で区切って設定します。サイレンスされたインスタンスに所属するアカウントはすべて「サイレンス」として扱われ、フォローがすべてリクエストになり、フォロワーでないローカルアカウントにはメンションできなくなります。ブロックしたインスタンスには影響しません。"
|
silencedInstancesDescription: "サイレンスしたいサーバーのホストを改行で区切って設定します。サイレンスされたサーバーに所属するアカウントはすべて「サイレンス」として扱われ、フォローがすべてリクエストになり、フォロワーでないローカルアカウントにはメンションできなくなります。ブロックしたサーバーには影響しません。"
|
||||||
muteAndBlock: "ミュートとブロック"
|
muteAndBlock: "ミュートとブロック"
|
||||||
mutedUsers: "ミュートしたユーザー"
|
mutedUsers: "ミュートしたユーザー"
|
||||||
blockedUsers: "ブロックしたユーザー"
|
blockedUsers: "ブロックしたユーザー"
|
||||||
noUsers: "ユーザーはいません"
|
noUsers: "ユーザーはいません"
|
||||||
noInstances: "インスタンスはありません"
|
noInstances: "サーバーがありません"
|
||||||
editProfile: "プロフィールを編集"
|
editProfile: "プロフィールを編集"
|
||||||
noteDeleteConfirm: "この投稿を削除しますか?"
|
noteDeleteConfirm: "この投稿を削除しますか?"
|
||||||
pinLimitExceeded: "これ以上ピン留めできません"
|
pinLimitExceeded: "これ以上ピン留めできません"
|
||||||
|
@ -228,9 +229,9 @@ all: "全て"
|
||||||
subscribing: "購読中"
|
subscribing: "購読中"
|
||||||
publishing: "配信中"
|
publishing: "配信中"
|
||||||
notResponding: "応答なし"
|
notResponding: "応答なし"
|
||||||
instanceFollowing: "インスタンスのフォロー"
|
instanceFollowing: "サーバーのフォロー"
|
||||||
instanceFollowers: "インスタンスのフォロワー"
|
instanceFollowers: "サーバーのフォロワー"
|
||||||
instanceUsers: "インスタンスのユーザー"
|
instanceUsers: "このサーバーの利用者"
|
||||||
changePassword: "パスワードを変更"
|
changePassword: "パスワードを変更"
|
||||||
security: "セキュリティ"
|
security: "セキュリティ"
|
||||||
retypedNotMatch: "入力が一致しません。"
|
retypedNotMatch: "入力が一致しません。"
|
||||||
|
@ -321,8 +322,8 @@ unwatch: "ウォッチ解除"
|
||||||
accept: "許可"
|
accept: "許可"
|
||||||
reject: "拒否"
|
reject: "拒否"
|
||||||
normal: "正常"
|
normal: "正常"
|
||||||
instanceName: "インスタンス名"
|
instanceName: "サーバー名"
|
||||||
instanceDescription: "インスタンスの紹介"
|
instanceDescription: "サーバーの紹介文"
|
||||||
maintainerName: "管理者の名前"
|
maintainerName: "管理者の名前"
|
||||||
maintainerEmail: "管理者のメールアドレス"
|
maintainerEmail: "管理者のメールアドレス"
|
||||||
tosUrl: "利用規約URL"
|
tosUrl: "利用規約URL"
|
||||||
|
@ -353,7 +354,7 @@ basicInfo: "基本情報"
|
||||||
pinnedUsers: "ピン留めユーザー"
|
pinnedUsers: "ピン留めユーザー"
|
||||||
pinnedUsersDescription: "「みつける」ページなどにピン留めしたいユーザーを改行で区切って記述します。"
|
pinnedUsersDescription: "「みつける」ページなどにピン留めしたいユーザーを改行で区切って記述します。"
|
||||||
pinnedPages: "ピン留めページ"
|
pinnedPages: "ピン留めページ"
|
||||||
pinnedPagesDescription: "インスタンスのトップページにピン留めしたいページのパスを改行で区切って記述します。"
|
pinnedPagesDescription: "サーバーのトップページにピン留めしたいページのパスを改行で区切って記述します。"
|
||||||
pinnedClipId: "ピン留めするクリップのID"
|
pinnedClipId: "ピン留めするクリップのID"
|
||||||
pinnedNotes: "ピン留めされた投稿"
|
pinnedNotes: "ピン留めされた投稿"
|
||||||
hcaptcha: "hCaptcha"
|
hcaptcha: "hCaptcha"
|
||||||
|
@ -376,7 +377,7 @@ notifyAntenna: "新しい投稿を通知する"
|
||||||
withFileAntenna: "ファイルが添付された投稿のみ"
|
withFileAntenna: "ファイルが添付された投稿のみ"
|
||||||
enableServiceworker: "ブラウザへのプッシュ通知を有効にする"
|
enableServiceworker: "ブラウザへのプッシュ通知を有効にする"
|
||||||
antennaUsersDescription: "ユーザー名を改行で区切って指定します"
|
antennaUsersDescription: "ユーザー名を改行で区切って指定します"
|
||||||
antennaInstancesDescription: "インスタンスを改行で区切って指定します"
|
antennaInstancesDescription: "サーバーを改行で区切って指定します"
|
||||||
caseSensitive: "大文字小文字を区別する"
|
caseSensitive: "大文字小文字を区別する"
|
||||||
withReplies: "返信を含む"
|
withReplies: "返信を含む"
|
||||||
connectedTo: "次のアカウントに接続されています"
|
connectedTo: "次のアカウントに接続されています"
|
||||||
|
@ -501,8 +502,8 @@ showFeaturedNotesInTimeline: "タイムラインにおすすめの投稿を表
|
||||||
objectStorage: "オブジェクトストレージ"
|
objectStorage: "オブジェクトストレージ"
|
||||||
useObjectStorage: "オブジェクトストレージを使用"
|
useObjectStorage: "オブジェクトストレージを使用"
|
||||||
objectStorageBaseUrl: "Base URL"
|
objectStorageBaseUrl: "Base URL"
|
||||||
objectStorageBaseUrlDesc: "参照に使用するURL。CDNやProxyを使用している場合はそのURL、S3: 'https://<bucket>.s3.amazonaws.com'、GCS等:\
|
objectStorageBaseUrlDesc: "参照に使用するURL。CDNやProxyを使用している場合はそのURL、S3: 'https://<bucket>.s3.amazonaws.com'、GCS等:
|
||||||
\ 'https://storage.googleapis.com/<bucket>'。"
|
'https://storage.googleapis.com/<bucket>'。"
|
||||||
objectStorageBucket: "Bucket"
|
objectStorageBucket: "Bucket"
|
||||||
objectStorageBucketDesc: "使用サービスのbucket名を指定してください。"
|
objectStorageBucketDesc: "使用サービスのbucket名を指定してください。"
|
||||||
objectStoragePrefix: "Prefix"
|
objectStoragePrefix: "Prefix"
|
||||||
|
@ -550,7 +551,7 @@ updateRemoteUser: "リモートユーザー情報の更新"
|
||||||
deleteAllFiles: "すべてのファイルを削除"
|
deleteAllFiles: "すべてのファイルを削除"
|
||||||
deleteAllFilesConfirm: "すべてのファイルを削除しますか?"
|
deleteAllFilesConfirm: "すべてのファイルを削除しますか?"
|
||||||
removeAllFollowing: "フォローを全解除"
|
removeAllFollowing: "フォローを全解除"
|
||||||
removeAllFollowingDescription: "{host}からのフォローをすべて解除します。そのインスタンスがもう存在しなくなった場合などに実行してください。"
|
removeAllFollowingDescription: "{host}からのフォローをすべて解除します。そのサーバーがもう存在しなくなった場合などに実行してください。"
|
||||||
userSuspended: "このユーザーは凍結されています。"
|
userSuspended: "このユーザーは凍結されています。"
|
||||||
userSilenced: "このユーザーはサイレンスされています。"
|
userSilenced: "このユーザーはサイレンスされています。"
|
||||||
yourAccountSuspendedTitle: "アカウントが凍結されています"
|
yourAccountSuspendedTitle: "アカウントが凍結されています"
|
||||||
|
@ -615,7 +616,7 @@ testEmail: "配信テスト"
|
||||||
wordMute: "ワードミュート"
|
wordMute: "ワードミュート"
|
||||||
regexpError: "正規表現エラー"
|
regexpError: "正規表現エラー"
|
||||||
regexpErrorDescription: "{tab}ワードミュートの{line}行目の正規表現にエラーが発生しました:"
|
regexpErrorDescription: "{tab}ワードミュートの{line}行目の正規表現にエラーが発生しました:"
|
||||||
instanceMute: "インスタンスミュート"
|
instanceMute: "サーバーミュート"
|
||||||
userSaysSomething: "{name}が何かを言いました"
|
userSaysSomething: "{name}が何かを言いました"
|
||||||
userSaysSomethingReason: "{name}が{reason}と言いました"
|
userSaysSomethingReason: "{name}が{reason}と言いました"
|
||||||
userSaysSomethingReasonReply: "{name}が{reason}を含む投稿に返信しました"
|
userSaysSomethingReasonReply: "{name}が{reason}を含む投稿に返信しました"
|
||||||
|
@ -650,15 +651,15 @@ abuseReported: "内容が送信されました。ご報告ありがとうござ
|
||||||
reporter: "通報者"
|
reporter: "通報者"
|
||||||
reporteeOrigin: "通報先"
|
reporteeOrigin: "通報先"
|
||||||
reporterOrigin: "通報元"
|
reporterOrigin: "通報元"
|
||||||
forwardReport: "リモートインスタンスに通報を転送する"
|
forwardReport: "リモートサーバーに通報を転送する"
|
||||||
forwardReportIsAnonymous: "リモートインスタンスからはあなたの情報は見れず、匿名のシステムアカウントとして表示されます。"
|
forwardReportIsAnonymous: "リモートサーバーからはあなたの情報は見られず、匿名のシステムアカウントとして表示されます。"
|
||||||
send: "送信"
|
send: "送信"
|
||||||
abuseMarkAsResolved: "対応済みにする"
|
abuseMarkAsResolved: "対応済みにする"
|
||||||
openInNewTab: "新しいタブで開く"
|
openInNewTab: "新しいタブで開く"
|
||||||
openInSideView: "サイドビューで開く"
|
openInSideView: "サイドビューで開く"
|
||||||
defaultNavigationBehaviour: "デフォルトのナビゲーション"
|
defaultNavigationBehaviour: "デフォルトのナビゲーション"
|
||||||
editTheseSettingsMayBreakAccount: "これらの設定を編集するとアカウントが破損する可能性があります。"
|
editTheseSettingsMayBreakAccount: "これらの設定を編集するとアカウントが破損する可能性があります。"
|
||||||
instanceTicker: "投稿のインスタンス情報"
|
instanceTicker: "投稿のサーバー情報"
|
||||||
waitingFor: "{x}を待っています"
|
waitingFor: "{x}を待っています"
|
||||||
random: "ランダム"
|
random: "ランダム"
|
||||||
system: "システム"
|
system: "システム"
|
||||||
|
@ -722,7 +723,8 @@ onlineUsersCount: "{n}人がオンライン"
|
||||||
nUsers: "{n}ユーザー"
|
nUsers: "{n}ユーザー"
|
||||||
nNotes: "{n}投稿"
|
nNotes: "{n}投稿"
|
||||||
sendErrorReports: "エラーリポートを送信"
|
sendErrorReports: "エラーリポートを送信"
|
||||||
sendErrorReportsDescription: "オンにすると、問題が発生したときにエラーの詳細情報がCalckeyに共有され、ソフトウェアの品質向上に役立てられます。エラー情報には、OSのバージョン、ブラウザの種類、行動履歴などが含まれます。"
|
sendErrorReportsDescription: "オンにすると、問題が発生したときにエラーの詳細情報がCalckeyに共有され、ソフトウェアの品質向上に役立てられます。\n\
|
||||||
|
エラー情報には、OSのバージョン、ブラウザの種類、行動履歴などが含まれます。"
|
||||||
myTheme: "マイテーマ"
|
myTheme: "マイテーマ"
|
||||||
backgroundColor: "背景"
|
backgroundColor: "背景"
|
||||||
accentColor: "アクセント"
|
accentColor: "アクセント"
|
||||||
|
@ -746,7 +748,7 @@ capacity: "容量"
|
||||||
inUse: "使用中"
|
inUse: "使用中"
|
||||||
editCode: "コードを編集"
|
editCode: "コードを編集"
|
||||||
apply: "適用"
|
apply: "適用"
|
||||||
receiveAnnouncementFromInstance: "インスタンスからのお知らせを受け取る"
|
receiveAnnouncementFromInstance: "サーバーからのお知らせを受け取る"
|
||||||
emailNotification: "メール通知"
|
emailNotification: "メール通知"
|
||||||
publish: "公開"
|
publish: "公開"
|
||||||
inChannelSearch: "チャンネル内検索"
|
inChannelSearch: "チャンネル内検索"
|
||||||
|
@ -774,7 +776,7 @@ active: "アクティブ"
|
||||||
offline: "オフライン"
|
offline: "オフライン"
|
||||||
notRecommended: "非推奨"
|
notRecommended: "非推奨"
|
||||||
botProtection: "Botプロテクション"
|
botProtection: "Botプロテクション"
|
||||||
instanceBlocking: "連合ブロック・サイレンス"
|
instanceBlocking: "連合の管理"
|
||||||
selectAccount: "アカウントを選択"
|
selectAccount: "アカウントを選択"
|
||||||
switchAccount: "アカウントを切り替え"
|
switchAccount: "アカウントを切り替え"
|
||||||
enabled: "有効"
|
enabled: "有効"
|
||||||
|
@ -802,12 +804,12 @@ low: "低"
|
||||||
emailNotConfiguredWarning: "メールアドレスの設定がされていません。"
|
emailNotConfiguredWarning: "メールアドレスの設定がされていません。"
|
||||||
ratio: "比率"
|
ratio: "比率"
|
||||||
secureMode: "セキュアモード (Authorized Fetch)"
|
secureMode: "セキュアモード (Authorized Fetch)"
|
||||||
instanceSecurity: "インスタンスのセキュリティー"
|
instanceSecurity: "サーバーのセキュリティー"
|
||||||
secureModeInfo: "他のインスタンスからリクエストするときに、証明を付けなければ返送しません。他のインスタンスの設定ファイルでsignToActivityPubGetはtrueにしてください。"
|
secureModeInfo: "認証情報の無いリモートサーバーからのリクエストに応えません。"
|
||||||
privateMode: "非公開モード"
|
privateMode: "非公開モード"
|
||||||
privateModeInfo: "有効にすると、許可したインスタンスのみからリクエストを受け付けます。"
|
privateModeInfo: "有効にすると、許可したサーバーのみからリクエストを受け付けます。"
|
||||||
allowedInstances: "許可されたインスタンス"
|
allowedInstances: "許可されたサーバー"
|
||||||
allowedInstancesDescription: "許可したいインスタンスのホストを改行で区切って設定します。非公開モードだけで有効です。"
|
allowedInstancesDescription: "許可したいサーバーのホストを改行で区切って設定します。非公開モードだけで有効です。"
|
||||||
previewNoteText: "本文をプレビュー"
|
previewNoteText: "本文をプレビュー"
|
||||||
customCss: "カスタムCSS"
|
customCss: "カスタムCSS"
|
||||||
customCssWarn: "この設定は必ず知識のある方が行ってください。不適切な設定を行うとクライアントが正常に使用できなくなる恐れがあります。"
|
customCssWarn: "この設定は必ず知識のある方が行ってください。不適切な設定を行うとクライアントが正常に使用できなくなる恐れがあります。"
|
||||||
|
@ -846,7 +848,7 @@ controlPanel: "コントロールパネル"
|
||||||
manageAccounts: "アカウントを管理"
|
manageAccounts: "アカウントを管理"
|
||||||
makeReactionsPublic: "リアクション一覧を公開する"
|
makeReactionsPublic: "リアクション一覧を公開する"
|
||||||
makeReactionsPublicDescription: "あなたがしたリアクション一覧を誰でも見れるようにします。"
|
makeReactionsPublicDescription: "あなたがしたリアクション一覧を誰でも見れるようにします。"
|
||||||
classic: "クラシック"
|
classic: "中央寄せ"
|
||||||
muteThread: "スレッドをミュート"
|
muteThread: "スレッドをミュート"
|
||||||
unmuteThread: "スレッドのミュートを解除"
|
unmuteThread: "スレッドのミュートを解除"
|
||||||
ffVisibility: "つながりの公開範囲"
|
ffVisibility: "つながりの公開範囲"
|
||||||
|
@ -872,8 +874,8 @@ themeColor: "テーマカラー"
|
||||||
size: "サイズ"
|
size: "サイズ"
|
||||||
numberOfColumn: "列の数"
|
numberOfColumn: "列の数"
|
||||||
searchByGoogle: "検索"
|
searchByGoogle: "検索"
|
||||||
instanceDefaultLightTheme: "インスタンスデフォルトのライトテーマ"
|
instanceDefaultLightTheme: "サーバーの標準ライトテーマ"
|
||||||
instanceDefaultDarkTheme: "インスタンスデフォルトのダークテーマ"
|
instanceDefaultDarkTheme: "サーバーの標準ダークテーマ"
|
||||||
instanceDefaultThemeDescription: "オブジェクト形式のテーマコードを記入します。"
|
instanceDefaultThemeDescription: "オブジェクト形式のテーマコードを記入します。"
|
||||||
mutePeriod: "ミュートする期限"
|
mutePeriod: "ミュートする期限"
|
||||||
indefinitely: "無期限"
|
indefinitely: "無期限"
|
||||||
|
@ -895,7 +897,7 @@ check: "チェック"
|
||||||
driveCapOverrideLabel: "このユーザーのドライブ容量上限を変更"
|
driveCapOverrideLabel: "このユーザーのドライブ容量上限を変更"
|
||||||
driveCapOverrideCaption: "0以下を指定すると解除されます。"
|
driveCapOverrideCaption: "0以下を指定すると解除されます。"
|
||||||
requireAdminForView: "閲覧するには管理者アカウントでログインしている必要があります。"
|
requireAdminForView: "閲覧するには管理者アカウントでログインしている必要があります。"
|
||||||
isSystemAccount: "システムにより自動で作成・管理されているアカウントです。"
|
isSystemAccount: "システムにより自動で作成・管理されているアカウントです。モデレーション・編集・削除を行うとサーバーの動作が不正になる可能性があるため、操作しないでください。"
|
||||||
typeToConfirm: "この操作を行うには {x} と入力してください"
|
typeToConfirm: "この操作を行うには {x} と入力してください"
|
||||||
deleteAccount: "アカウント削除"
|
deleteAccount: "アカウント削除"
|
||||||
document: "ドキュメント"
|
document: "ドキュメント"
|
||||||
|
@ -922,7 +924,7 @@ cannotUploadBecauseNoFreeSpace: "ドライブの空き容量が無いためア
|
||||||
cannotUploadBecauseExceedsFileSizeLimit: "ファイルサイズの制限を超えているためアップロードできません。"
|
cannotUploadBecauseExceedsFileSizeLimit: "ファイルサイズの制限を超えているためアップロードできません。"
|
||||||
beta: "ベータ"
|
beta: "ベータ"
|
||||||
enableAutoSensitive: "自動NSFW判定"
|
enableAutoSensitive: "自動NSFW判定"
|
||||||
enableAutoSensitiveDescription: "利用可能な場合は、機械学習を利用して自動でメディアにNSFWフラグを設定します。この機能をオフにしても、インスタンスによっては自動で設定されることがあります。"
|
enableAutoSensitiveDescription: "利用可能な場合は、機械学習を利用して自動でメディアにNSFWフラグを設定します。この機能をオフにしても、サーバーによっては自動で設定されることがあります。"
|
||||||
activeEmailValidationDescription: "ユーザーのメールアドレスのバリデーションを、捨てアドかどうかや実際に通信可能かどうかなどを判定しより積極的に行います。オフにすると単に文字列として正しいかどうかのみチェックされます。"
|
activeEmailValidationDescription: "ユーザーのメールアドレスのバリデーションを、捨てアドかどうかや実際に通信可能かどうかなどを判定しより積極的に行います。オフにすると単に文字列として正しいかどうかのみチェックされます。"
|
||||||
showAds: "広告を表示する"
|
showAds: "広告を表示する"
|
||||||
navbar: "ナビゲーションバー"
|
navbar: "ナビゲーションバー"
|
||||||
|
@ -933,18 +935,18 @@ pushNotification: "プッシュ通知"
|
||||||
subscribePushNotification: "プッシュ通知を有効化"
|
subscribePushNotification: "プッシュ通知を有効化"
|
||||||
unsubscribePushNotification: "プッシュ通知を停止する"
|
unsubscribePushNotification: "プッシュ通知を停止する"
|
||||||
pushNotificationAlreadySubscribed: "プッシュ通知は有効です"
|
pushNotificationAlreadySubscribed: "プッシュ通知は有効です"
|
||||||
pushNotificationNotSupported: "ブラウザかサーバーがプッシュ通知に非対応"
|
pushNotificationNotSupported: "ブラウザまたはサーバーがプッシュ通知に非対応です"
|
||||||
sendPushNotificationReadMessage: "通知やメッセージが既読になったらプッシュ通知を削除する"
|
sendPushNotificationReadMessage: "通知やメッセージが既読になったらプッシュ通知を削除する"
|
||||||
sendPushNotificationReadMessageCaption: "「{emptyPushNotificationMessage}」という通知が一瞬表示されるようになります。端末の電池消費量が増加する可能性があります。"
|
sendPushNotificationReadMessageCaption: "「{emptyPushNotificationMessage}」という通知が一瞬表示されるようになります。端末の電池消費量が増加する可能性があります。"
|
||||||
adminCustomCssWarn: "この設定は、それが何をするものであるかを知っている場合のみ使用してください。不適切な値を入力すると、クライアントが正常に動作しなくなる可能性があります。ユーザー設定でCSSをテストし、正しく動作することを確認してください。"
|
adminCustomCssWarn: "この設定は、それが何をするものであるかを知っている場合のみ使用してください。不適切な値を入力すると、クライアントが正常に動作しなくなる可能性があります。ユーザー設定でCSSをテストし、正しく動作することを確認してください。"
|
||||||
customMOTD: "カスタムMOTD(スプラッシュスクリーンメッセージ)"
|
customMOTD: "カスタムMOTD(スプラッシュスクリーンメッセージ)"
|
||||||
customMOTDDescription: "ユーザがページをロード/リロードするたびにランダムに表示される、改行で区切られたMOTD(スプラッシュスクリーン)用のカスタムメッセージ"
|
customMOTDDescription: "ユーザがページをロード/リロードするたびにランダムに表示される、改行で区切られたMOTD(スプラッシュスクリーン)用のカスタムメッセージ"
|
||||||
customSplashIcons: "カスタムスプラッシュスクリーンアイコン"
|
customSplashIcons: "カスタムスプラッシュスクリーンアイコン"
|
||||||
customSplashIconsDescription: "ユーザがページをロード/リロードするたびにランダムに表示される、改行で区切られたカスタムスプラッシュスクリーンアイコンの\
|
customSplashIconsDescription: "ユーザがページをロード/リロードするたびにランダムに表示される、改行で区切られたカスタムスプラッシュスクリーンアイコンの
|
||||||
\ URL。画像は静的なURLで、できればすべて192x192にリサイズしてください。"
|
URL。画像は静的なURLで、できればすべて192x192にリサイズしてください。"
|
||||||
showUpdates: "Calckeyの更新時にポップアップを表示する"
|
showUpdates: "Calckeyの更新時にポップアップを表示する"
|
||||||
recommendedInstances: "おすすめインスタンス"
|
recommendedInstances: "おすすめサーバー"
|
||||||
recommendedInstancesDescription: "おすすめタイムラインに表示するインスタンスを改行区切りで入力してください。`https://`は書かず、ドメインのみを入力してください。"
|
recommendedInstancesDescription: "おすすめタイムラインに表示するサーバーを改行区切りで入力してください。`https://`は書かず、ドメインのみを入力してください。"
|
||||||
caption: "自動キャプション"
|
caption: "自動キャプション"
|
||||||
splash: "スプラッシュスクリーン"
|
splash: "スプラッシュスクリーン"
|
||||||
updateAvailable: "アップデートがありますよ!"
|
updateAvailable: "アップデートがありますよ!"
|
||||||
|
@ -956,10 +958,10 @@ migration: "アカウントの引っ越し"
|
||||||
moveTo: "このアカウントを新しいアカウントに引っ越す"
|
moveTo: "このアカウントを新しいアカウントに引っ越す"
|
||||||
moveToLabel: "引っ越し先のアカウント:"
|
moveToLabel: "引っ越し先のアカウント:"
|
||||||
moveAccount: "引っ越し実行!"
|
moveAccount: "引っ越し実行!"
|
||||||
moveAccountDescription: "この操作は取り消せません。まずは引っ越し先のアカウントでこのアカウントに対しエイリアスを作成したことを確認してください。エイリアス作成後、引っ越し先のアカウントをこのように入力してください:@person@instance.com"
|
moveAccountDescription: "この操作は取り消せません。まずは引っ越し先のアカウントでこのアカウントに対しエイリアスを作成したことを確認してください。エイリアス作成後、引っ越し先のアカウントをこのように入力してください:@person@server.com"
|
||||||
moveFrom: "別のアカウントからこのアカウントに引っ越す"
|
moveFrom: "別のアカウントからこのアカウントに引っ越す"
|
||||||
moveFromLabel: "引っ越し元のアカウント:"
|
moveFromLabel: "引っ越し元のアカウント:"
|
||||||
moveFromDescription: "別のアカウントからこのアカウントにフォロワーを引き継いで引っ越したい場合、ここでエイリアスを作成しておく必要があります。必ず引っ越しを実行する前に作成してください!引っ越し元のアカウントをこのように入力してください:@person@instance.com"
|
moveFromDescription: "別のアカウントからこのアカウントにフォロワーを引き継いで引っ越したい場合、ここでエイリアスを作成しておく必要があります。必ず引っ越しを実行する前に作成してください!引っ越し元のアカウントをこのように入力してください:@person@server.com"
|
||||||
migrationConfirm: "本当にこのアカウントを {account} に引っ越しますか?一度引っ越しを行うと取り消せず、二度とこのアカウントを元の状態で使用できなくなります。\n\
|
migrationConfirm: "本当にこのアカウントを {account} に引っ越しますか?一度引っ越しを行うと取り消せず、二度とこのアカウントを元の状態で使用できなくなります。\n\
|
||||||
この操作を行う前に引っ越し先のアカウントでエイリアスを作成する必要があります。エイリアスが作成されているか、必ず確認してください。"
|
この操作を行う前に引っ越し先のアカウントでエイリアスを作成する必要があります。エイリアスが作成されているか、必ず確認してください。"
|
||||||
defaultReaction: "リモートとローカルの投稿に対するデフォルトの絵文字リアクション"
|
defaultReaction: "リモートとローカルの投稿に対するデフォルトの絵文字リアクション"
|
||||||
|
@ -969,9 +971,9 @@ indexFrom: "この投稿ID以降をインデックスする"
|
||||||
indexFromDescription: "空白で全ての投稿を指定します"
|
indexFromDescription: "空白で全ての投稿を指定します"
|
||||||
indexNotice: "インデックスを開始しました。完了まで時間がかかる場合があるため、少なくとも1時間はサーバーを再起動しないでください。"
|
indexNotice: "インデックスを開始しました。完了まで時間がかかる場合があるため、少なくとも1時間はサーバーを再起動しないでください。"
|
||||||
customKaTeXMacro: "カスタムKaTeXマクロ"
|
customKaTeXMacro: "カスタムKaTeXマクロ"
|
||||||
customKaTeXMacroDescription: "数式入力を楽にするためのマクロを設定しましょう!記法はLaTeXにおけるコマンドの定義と同様に \\newcommand{\\\
|
customKaTeXMacroDescription: "数式入力を楽にするためのマクロを設定しましょう!記法はLaTeXにおけるコマンドの定義と同様に \\newcommand{\\
|
||||||
name}{content} または \\newcommand{\\add}[2]{#1 + #2} のように記述します。後者の例では \\add{3}{foo}\
|
name}{content} または \\newcommand{\\add}[2]{#1 + #2} のように記述します。後者の例では \\add{3}{foo}
|
||||||
\ が 3 + foo に展開されます。また、マクロの名前を囲む波括弧を丸括弧 () および角括弧 [] に変更した場合、マクロの引数に使用する括弧が変更されます。マクロの定義は一行に一つのみで、途中で改行はできません。マクロの定義が無効な行は無視されます。文字列を単純に置換する機能のみに対応していて、条件分岐などの高度な構文は使用できません。"
|
が 3 + foo に展開されます。また、マクロの名前を囲む波括弧を丸括弧 () および角括弧 [] に変更した場合、マクロの引数に使用する括弧が変更されます。マクロの定義は一行に一つのみで、途中で改行はできません。マクロの定義が無効な行は無視されます。文字列を単純に置換する機能のみに対応していて、条件分岐などの高度な構文は使用できません。"
|
||||||
enableCustomKaTeXMacro: "カスタムKaTeXマクロを有効にする"
|
enableCustomKaTeXMacro: "カスタムKaTeXマクロを有効にする"
|
||||||
preventAiLearning: "AIによる学習を防止"
|
preventAiLearning: "AIによる学習を防止"
|
||||||
preventAiLearningDescription: "投稿したノート、添付した画像などのコンテンツを学習の対象にしないようAIに要求します。これはnoaiフラグをHTMLレスポンスに含めることによって実現されます。"
|
preventAiLearningDescription: "投稿したノート、添付した画像などのコンテンツを学習の対象にしないようAIに要求します。これはnoaiフラグをHTMLレスポンスに含めることによって実現されます。"
|
||||||
|
@ -1012,7 +1014,7 @@ _ad:
|
||||||
_forgotPassword:
|
_forgotPassword:
|
||||||
enterEmail: "アカウントに登録したメールアドレスを入力してください。そのアドレス宛てに、パスワードリセット用のリンクが送信されます。"
|
enterEmail: "アカウントに登録したメールアドレスを入力してください。そのアドレス宛てに、パスワードリセット用のリンクが送信されます。"
|
||||||
ifNoEmail: "メールアドレスを登録していない場合は、管理者までお問い合わせください。"
|
ifNoEmail: "メールアドレスを登録していない場合は、管理者までお問い合わせください。"
|
||||||
contactAdmin: "このインスタンスではメールがサポートされていないため、パスワードリセットを行う場合は管理者までお問い合わせください。"
|
contactAdmin: "このインスタンスではメールアドレスの登録がサポートされていないため、パスワードリセットを行う場合は管理者までお問い合わせください。"
|
||||||
_gallery:
|
_gallery:
|
||||||
my: "自分の投稿"
|
my: "自分の投稿"
|
||||||
liked: "いいねした投稿"
|
liked: "いいねした投稿"
|
||||||
|
@ -1058,7 +1060,7 @@ _aboutMisskey:
|
||||||
source: "ソースコード"
|
source: "ソースコード"
|
||||||
translation: "Calckeyを翻訳"
|
translation: "Calckeyを翻訳"
|
||||||
donate: "Calckeyに寄付"
|
donate: "Calckeyに寄付"
|
||||||
morePatrons: "他にも多くの方が支援してくれています。ありがとうございます! \U0001F970"
|
morePatrons: "他にも多くの方が支援してくれています。ありがとうございます! 🥰"
|
||||||
patrons: "支援者"
|
patrons: "支援者"
|
||||||
_nsfw:
|
_nsfw:
|
||||||
respect: "閲覧注意のメディアは隠す"
|
respect: "閲覧注意のメディアは隠す"
|
||||||
|
@ -1073,7 +1075,7 @@ _mfm:
|
||||||
hashtag: "ハッシュタグ"
|
hashtag: "ハッシュタグ"
|
||||||
hashtagDescription: "ナンバーサイン + タグで、ハッシュタグを示せます。"
|
hashtagDescription: "ナンバーサイン + タグで、ハッシュタグを示せます。"
|
||||||
url: "URL"
|
url: "URL"
|
||||||
urlDescription: "URLを示せます。"
|
urlDescription: "URLを表示できます。"
|
||||||
link: "リンク"
|
link: "リンク"
|
||||||
linkDescription: "文章の特定の範囲を、URLに紐づけられます。"
|
linkDescription: "文章の特定の範囲を、URLに紐づけられます。"
|
||||||
bold: "太字"
|
bold: "太字"
|
||||||
|
@ -1131,9 +1133,9 @@ _mfm:
|
||||||
plain: "プレーン"
|
plain: "プレーン"
|
||||||
plainDescription: "内側の構文を全て無効にします。"
|
plainDescription: "内側の構文を全て無効にします。"
|
||||||
position: 位置
|
position: 位置
|
||||||
stop: MFMアニメーションを停止
|
stop: MFMを停止
|
||||||
alwaysPlay: MFMアニメーションを自動再生する
|
alwaysPlay: MFMアニメーションを自動再生する
|
||||||
play: MFMアニメーションを再生
|
play: MFMを再生
|
||||||
warn: MFMアニメーションは激しい動きを含む可能性があります。
|
warn: MFMアニメーションは激しい動きを含む可能性があります。
|
||||||
positionDescription: 位置を指定した値だけずらします。
|
positionDescription: 位置を指定した値だけずらします。
|
||||||
foreground: 文字色
|
foreground: 文字色
|
||||||
|
@ -1142,6 +1144,12 @@ _mfm:
|
||||||
scale: 拡大・縮小
|
scale: 拡大・縮小
|
||||||
scaleDescription: 大きさを指定した値に拡大・縮小します。
|
scaleDescription: 大きさを指定した値に拡大・縮小します。
|
||||||
foregroundDescription: 文字の色を変更します。
|
foregroundDescription: 文字の色を変更します。
|
||||||
|
fade: フェード
|
||||||
|
fadeDescription: フェードインとフェードアウトする。
|
||||||
|
crop: 切り抜き
|
||||||
|
cropDescription: 内容を切り抜く。
|
||||||
|
advancedDescription: オフにすると、アニメーション再生中を除いて基本的なMFMだけ表示します。
|
||||||
|
advanced: 高度なMFM
|
||||||
_instanceTicker:
|
_instanceTicker:
|
||||||
none: "表示しない"
|
none: "表示しない"
|
||||||
remote: "リモートユーザーに表示"
|
remote: "リモートユーザーに表示"
|
||||||
|
@ -1181,10 +1189,10 @@ _wordMute:
|
||||||
hard: "ハード"
|
hard: "ハード"
|
||||||
mutedNotes: "ミュートされた投稿"
|
mutedNotes: "ミュートされた投稿"
|
||||||
_instanceMute:
|
_instanceMute:
|
||||||
instanceMuteDescription: "ミュートしたインスタンスのユーザーへの返信を含めて、設定したインスタンスの全ての投稿とブーストをミュートします。"
|
instanceMuteDescription: "ミュートしたサーバーのユーザーへの返信を含めて、設定したサーバーの全ての投稿とブーストをミュートします。"
|
||||||
instanceMuteDescription2: "改行で区切って設定します"
|
instanceMuteDescription2: "改行で区切って設定します"
|
||||||
title: "設定したインスタンスの投稿を隠します。"
|
title: "設定したサーバーの投稿を隠します。"
|
||||||
heading: "ミュートするインスタンス"
|
heading: "ミュートするサーバー"
|
||||||
_theme:
|
_theme:
|
||||||
explore: "テーマを探す"
|
explore: "テーマを探す"
|
||||||
install: "テーマのインストール"
|
install: "テーマのインストール"
|
||||||
|
@ -1294,26 +1302,40 @@ _tutorial:
|
||||||
step4_1: "投稿してみましょう!"
|
step4_1: "投稿してみましょう!"
|
||||||
step4_2: "最初は{introduction}に投稿したり、シンプルに「こんにちは、アカウント作ってみました!」などの投稿をする人もいます。"
|
step4_2: "最初は{introduction}に投稿したり、シンプルに「こんにちは、アカウント作ってみました!」などの投稿をする人もいます。"
|
||||||
step5_1: "タイムライン、タイムラインだらけ!"
|
step5_1: "タイムライン、タイムラインだらけ!"
|
||||||
step5_2: "あなたのインスタンスでは{timelines}種類のタイムラインが有効になっています。"
|
step5_2: "あなたのサーバーでは{timelines}種類のタイムラインが有効になっています。"
|
||||||
step5_3: "ホーム{icon}タイムラインでは、あなたがフォローしているアカウントとこのインスタンスのみんなの投稿を見られます。もしフォローしているアカウントの投稿だけ見たい場合は、設定から変更できます。"
|
step5_3: "ホーム{icon}タイムラインでは、あなたがフォローしているアカウントの投稿を見られます。"
|
||||||
step5_4: "ローカル{icon}タイムラインでは、このインスタンスにいるみんなの投稿を見られます。"
|
step5_4: "ローカル{icon}タイムラインでは、このサーバーにいるみんなの投稿を見られます。"
|
||||||
step5_5: "ソーシャル{icon}タイムラインでは、あなたがフォローしているアカウントの投稿を見られます。"
|
step5_5: "ソーシャル{icon}タイムラインでは、ホームタイムラインとローカルタイムラインの投稿が両方表示されます。"
|
||||||
step5_6: "おすすめ{icon}タイムラインでは、管理人がおすすめするインスタンスの投稿を見られます。"
|
step5_6: "おすすめ{icon}タイムラインでは、管理人がおすすめするサーバーの投稿を見られます。"
|
||||||
step5_7: "グローバル{icon}タイムラインでは、接続している他のすべてのインスタンスからの投稿を見られます。"
|
step5_7: "グローバル{icon}タイムラインでは、接続している他のすべてのサーバーからの投稿を見られます。"
|
||||||
step6_1: "じゃあ、ここはどんな場所なの?"
|
step6_1: "じゃあ、ここはどんな場所なの?"
|
||||||
step6_2: "実は、あなたはただCalckeyに参加しただけではありません。ここは、何千もの相互接続されたサーバーが構成する Fediverse への入口です。各サーバーは「インスタンス」と呼ばれます。"
|
step6_2: "実は、あなたはただCalckeyに参加しただけではありません。ここは、何千もの相互接続されたサーバーが構成する Fediverse への入口です。"
|
||||||
step6_3: "それぞれのサーバーでは必ずしもCalckeyが使われているわけではなく、異なる動作をするサーバーもあります。しかし、あなたは他のサーバーのアカウントもフォローしたり、返信・ブーストができます。一見難しそうですが大丈夫!すぐ慣れます。"
|
step6_3: "それぞれのサーバーでは必ずしもCalckeyが使われているわけではなく、異なる動作をするサーバーもあります。しかし、あなたは他のサーバーのアカウントもフォローしたり、返信・ブーストができます。一見難しそうですが大丈夫!すぐ慣れます。"
|
||||||
step6_4: "これで完了です。お楽しみください!"
|
step6_4: "これで完了です。お楽しみください!"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "既に設定は完了しています。"
|
alreadyRegistered: "既に設定は完了しています。"
|
||||||
registerDevice: "デバイスを登録"
|
registerTOTP: "認証アプリの設定を開始"
|
||||||
registerKey: "キーを登録"
|
|
||||||
step1: "まず、{a}や{b}などの認証アプリをお使いのデバイスにインストールします。"
|
step1: "まず、{a}や{b}などの認証アプリをお使いのデバイスにインストールします。"
|
||||||
step2: "次に、表示されているQRコードをアプリでスキャンします。"
|
step2: "次に、表示されているQRコードをアプリでスキャンします。"
|
||||||
step2Url: "デスクトップアプリでは次のURLを入力します:"
|
step2Click: "QRコードをクリックすると、お使いの端末にインストールされている認証アプリやキーリングに登録できます。"
|
||||||
step3: "アプリに表示されているトークンを入力して完了です。"
|
step2Url: "デスクトップアプリでは次のURIを入力します:"
|
||||||
step4: "これからログインするときも、同じようにトークンを入力します。"
|
step3Title: "確認コードを入力"
|
||||||
securityKeyInfo: "FIDO2をサポートするハードウェアセキュリティキーもしくは端末の指紋認証やPINを使用してログインするように設定できます。"
|
step3: "アプリに表示されている確認コード(トークン)を入力して完了です。"
|
||||||
|
step4: "これからログインするときも、同じように確認コードを入力します。"
|
||||||
|
securityKeyNotSupported: "お使いのブラウザはセキュリティキーに対応していません。"
|
||||||
|
registerTOTPBeforeKey: "セキュリティキー・パスキーを登録するには、まず認証アプリの設定を行なってください。"
|
||||||
|
securityKeyInfo: "FIDO2をサポートするハードウェアセキュリティキー、端末の生体認証やPINロック、パスキーといった、WebAuthn由来の鍵を登録します。"
|
||||||
|
chromePasskeyNotSupported: "Chromeのパスキーは現在サポートしていません。"
|
||||||
|
registerSecurityKey: "セキュリティキー・パスキーを登録する"
|
||||||
|
securityKeyName: "キーの名前を入力"
|
||||||
|
tapSecurityKey: "ブラウザの指示に従い、セキュリティキーやパスキーを登録してください"
|
||||||
|
removeKey: "セキュリティキーを削除"
|
||||||
|
removeKeyConfirm: "{name}を削除しますか?"
|
||||||
|
whyTOTPOnlyRenew: "セキュリティキーが登録されている場合、認証アプリの設定は解除できません。"
|
||||||
|
renewTOTP: "認証アプリを再設定"
|
||||||
|
renewTOTPConfirm: "今までの認証アプリの確認コードは使用できなくなります"
|
||||||
|
renewTOTPOk: "再設定する"
|
||||||
|
renewTOTPCancel: "やめておく"
|
||||||
_permissions:
|
_permissions:
|
||||||
"read:account": "アカウントの情報を見る"
|
"read:account": "アカウントの情報を見る"
|
||||||
"write:account": "アカウントの情報を変更する"
|
"write:account": "アカウントの情報を変更する"
|
||||||
|
@ -1361,7 +1383,7 @@ _antennaSources:
|
||||||
users: "指定した一人または複数のユーザーの投稿"
|
users: "指定した一人または複数のユーザーの投稿"
|
||||||
userList: "指定したリストのユーザーの投稿"
|
userList: "指定したリストのユーザーの投稿"
|
||||||
userGroup: "指定したグループのユーザーの投稿"
|
userGroup: "指定したグループのユーザーの投稿"
|
||||||
instances: "指定したインスタンスの全ユーザーの投稿"
|
instances: "指定したサーバーの全ユーザーの投稿"
|
||||||
_weekday:
|
_weekday:
|
||||||
sunday: "日曜日"
|
sunday: "日曜日"
|
||||||
monday: "月曜日"
|
monday: "月曜日"
|
||||||
|
@ -1384,7 +1406,7 @@ _widgets:
|
||||||
digitalClock: "デジタル時計"
|
digitalClock: "デジタル時計"
|
||||||
unixClock: "UNIX時計"
|
unixClock: "UNIX時計"
|
||||||
federation: "連合"
|
federation: "連合"
|
||||||
instanceCloud: "インスタンスクラウド"
|
instanceCloud: "サーバークラウド"
|
||||||
postForm: "投稿フォーム"
|
postForm: "投稿フォーム"
|
||||||
slideshow: "スライドショー"
|
slideshow: "スライドショー"
|
||||||
button: "ボタン"
|
button: "ボタン"
|
||||||
|
@ -1395,6 +1417,10 @@ _widgets:
|
||||||
userList: "ユーザーリスト"
|
userList: "ユーザーリスト"
|
||||||
_userList:
|
_userList:
|
||||||
chooseList: "リストを選択"
|
chooseList: "リストを選択"
|
||||||
|
meiliStatus: サーバーステータス
|
||||||
|
serverInfo: サーバー情報
|
||||||
|
meiliSize: インデックスサイズ
|
||||||
|
meiliIndexCount: インデックス済みの投稿
|
||||||
_cw:
|
_cw:
|
||||||
hide: "隠す"
|
hide: "隠す"
|
||||||
show: "もっと見る"
|
show: "もっと見る"
|
||||||
|
@ -1823,6 +1849,9 @@ _notification:
|
||||||
followBack: "フォローバック"
|
followBack: "フォローバック"
|
||||||
reply: "返信"
|
reply: "返信"
|
||||||
renote: "ブースト"
|
renote: "ブースト"
|
||||||
|
reacted: がリアクションしました
|
||||||
|
renoted: がブーストしました
|
||||||
|
voted: が投票しました
|
||||||
_deck:
|
_deck:
|
||||||
alwaysShowMainColumn: "常にメインカラムを表示"
|
alwaysShowMainColumn: "常にメインカラムを表示"
|
||||||
columnAlign: "カラムの寄せ"
|
columnAlign: "カラムの寄せ"
|
||||||
|
@ -1849,6 +1878,7 @@ _deck:
|
||||||
tl: "タイムライン"
|
tl: "タイムライン"
|
||||||
antenna: "アンテナ"
|
antenna: "アンテナ"
|
||||||
list: "リスト"
|
list: "リスト"
|
||||||
|
channel: "チャンネル"
|
||||||
mentions: "あなた宛て"
|
mentions: "あなた宛て"
|
||||||
direct: "ダイレクト"
|
direct: "ダイレクト"
|
||||||
noteId: 投稿のID
|
noteId: 投稿のID
|
||||||
|
@ -1858,11 +1888,46 @@ apps: "アプリ"
|
||||||
_experiments:
|
_experiments:
|
||||||
enablePostEditing: 投稿の編集機能を有効にする
|
enablePostEditing: 投稿の編集機能を有効にする
|
||||||
title: 試験的な機能
|
title: 試験的な機能
|
||||||
postEditingCaption: 投稿のメニューに既存の投稿を編集するボタンを表示します。
|
postEditingCaption: 投稿のメニューに既存の投稿を編集するボタンを表示し、他サーバーの編集も受信できるようにします。
|
||||||
sendModMail: モデレーションノートを送る
|
postImportsCaption:
|
||||||
|
ユーザーが過去の投稿をCalckey・Misskey・Mastodon・Akkoma・Pleromaからインポートすることを許可します。キューが溜まっているときにインポートするとサーバーに負荷がかかる可能性があります。
|
||||||
|
enablePostImports: 投稿のインポートを有効にする
|
||||||
|
sendModMail: モデレーション通知を送る
|
||||||
deleted: 削除済み
|
deleted: 削除済み
|
||||||
editNote: 投稿を編集
|
editNote: 投稿を編集
|
||||||
edited: 編集済み
|
edited: '編集済み: {date} {time}'
|
||||||
signupsDisabled:
|
signupsDisabled:
|
||||||
現在、このサーバーでは新規登録が一般開放されていません。招待コードをお持ちの場合には、以下の欄に入力してください。招待コードをお持ちでない場合にも、新規登録を開放している他のサーバーには入れますよ!
|
現在、このサーバーでは新規登録が一般開放されていません。招待コードをお持ちの場合には、以下の欄に入力してください。招待コードをお持ちでない場合にも、新規登録を開放している他のサーバーには入れますよ!
|
||||||
findOtherInstance: 他のサーバーを探す
|
findOtherInstance: 他のサーバーを探す
|
||||||
|
newer: 新しい投稿
|
||||||
|
older: 古い投稿
|
||||||
|
accessibility: アクセシビリティ
|
||||||
|
jumpToPrevious: 前に戻る
|
||||||
|
cw: 閲覧注意
|
||||||
|
silencedWarning: スパムの可能性があるため、これらのユーザーが所属するサーバーは管理者によりサイレンスされています。
|
||||||
|
searchPlaceholder: Calckeyを検索
|
||||||
|
channelFederationWarn: 現時点では、チャンネルは他のサーバーへ連合しません
|
||||||
|
listsDesc: リストでは指定したユーザーだけのタイムラインを作れます。リストには「タイムライン」のページからアクセスできます。
|
||||||
|
antennasDesc: "アンテナでは指定した条件に合致する投稿が表示されます。\nアンテナには「タイムライン」のページからアクセスできます。"
|
||||||
|
expandOnNoteClickDesc: オフの場合、右クリックメニューか日付をクリックすることで開けます。
|
||||||
|
expandOnNoteClick: クリックで投稿の詳細を開く
|
||||||
|
clipsDesc: クリップは分類と共有ができるブックマークです。各投稿のメニューからクリップを作成できます。
|
||||||
|
_dialog:
|
||||||
|
charactersExceeded: "最大文字数を超えています! 現在 {current} / 制限 {max}"
|
||||||
|
charactersBelow: "最小文字数を下回っています! 現在 {current} / 制限 {min}"
|
||||||
|
_filters:
|
||||||
|
followersOnly: フォロワーのみ
|
||||||
|
fromUser: ユーザーを指定
|
||||||
|
withFile: 添付ファイルあり
|
||||||
|
fromDomain: ドメインを指定
|
||||||
|
notesBefore: 指定の日付以前
|
||||||
|
notesAfter: 指定の日付以降
|
||||||
|
followingOnly: フォロー中のみ
|
||||||
|
isModerator: モデレーター
|
||||||
|
audio: 音声
|
||||||
|
image: 画像
|
||||||
|
video: 動画
|
||||||
|
isBot: このアカウントはBotです
|
||||||
|
isLocked: このアカウントのフォローは承認制です
|
||||||
|
isAdmin: 管理者
|
||||||
|
isPatron: Calckey 後援者
|
||||||
|
|
|
@ -1179,8 +1179,8 @@ _time:
|
||||||
day: "일"
|
day: "일"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "이미 설정이 완료되었습니다."
|
alreadyRegistered: "이미 설정이 완료되었습니다."
|
||||||
registerDevice: "디바이스 등록"
|
registerTOTP: "디바이스 등록"
|
||||||
registerKey: "키를 등록"
|
registerSecurityKey: "키를 등록"
|
||||||
step1: "먼저, {a}나 {b}등의 인증 앱을 사용 중인 디바이스에 설치합니다."
|
step1: "먼저, {a}나 {b}등의 인증 앱을 사용 중인 디바이스에 설치합니다."
|
||||||
step2: "그 후, 표시되어 있는 QR코드를 앱으로 스캔합니다."
|
step2: "그 후, 표시되어 있는 QR코드를 앱으로 스캔합니다."
|
||||||
step2Url: "데스크톱 앱에서는 다음 URL을 입력하세요:"
|
step2Url: "데스크톱 앱에서는 다음 URL을 입력하세요:"
|
||||||
|
|
|
@ -413,7 +413,7 @@ selectList: Selecteer een lijst
|
||||||
selectAntenna: Selecteer een antenne
|
selectAntenna: Selecteer een antenne
|
||||||
deleted: Verwijderd
|
deleted: Verwijderd
|
||||||
editNote: Bewerk notitie
|
editNote: Bewerk notitie
|
||||||
edited: Bewerkt
|
edited: 'Bewerkt om {date} {time}'
|
||||||
emojis: Emojis
|
emojis: Emojis
|
||||||
emojiName: Emoji naam
|
emojiName: Emoji naam
|
||||||
emojiUrl: Emoji URL
|
emojiUrl: Emoji URL
|
||||||
|
@ -642,3 +642,43 @@ promote: Promoten
|
||||||
objectStorage: Objectopslag
|
objectStorage: Objectopslag
|
||||||
useObjectStorage: Gebruik objectopslag
|
useObjectStorage: Gebruik objectopslag
|
||||||
objectStorageBaseUrl: Basis -URL
|
objectStorageBaseUrl: Basis -URL
|
||||||
|
objectStorageUseSSLDesc: Schakel dit uit als je geen HTTPS voor je API connecties
|
||||||
|
gebruikt
|
||||||
|
objectStorageUseProxy: Verbind over Proxy
|
||||||
|
objectStorageUseProxyDesc: Schakel dit uit als je geen Proxy voor je API connecties
|
||||||
|
gebruikt
|
||||||
|
sounds: Geluiden
|
||||||
|
lastUsedDate: Laatst gebruikt op
|
||||||
|
installedDate: Geautoriseerd op
|
||||||
|
sort: Sorteren
|
||||||
|
output: Uitvoer
|
||||||
|
script: Script
|
||||||
|
popout: Pop-out
|
||||||
|
descendingOrder: Aflopend
|
||||||
|
showInPage: Toon in de pagina
|
||||||
|
chooseEmoji: Kies een emoji
|
||||||
|
ascendingOrder: Oplopend
|
||||||
|
volume: Volume
|
||||||
|
masterVolume: Master volume
|
||||||
|
details: Details
|
||||||
|
unableToProcess: Deze operatie kon niet worden voltooid
|
||||||
|
nothing: Niks te zien hier
|
||||||
|
scratchpad: Kladblok
|
||||||
|
recentUsed: Recentelijk gebruikt
|
||||||
|
install: Installeer
|
||||||
|
uninstall: Verwijderen
|
||||||
|
installedApps: Geautoriseerde Applicaties
|
||||||
|
state: Status
|
||||||
|
updateRemoteUser: Update externe gebruikersinformatie
|
||||||
|
listen: Luister
|
||||||
|
none: Geen
|
||||||
|
scratchpadDescription: Het kladblok is een omgeving voor AiScript experimenten. Je
|
||||||
|
kan hier schrijven, uitvoeren, en de resultaten bekijken van de interactie met Calckey.
|
||||||
|
disablePagesScript: Zet AiScript op Pages uit
|
||||||
|
deleteAllFiles: Verwijder alle bestanden
|
||||||
|
deleteAllFilesConfirm: Weet je zeker dat je alle bestanden wil verwijderen?
|
||||||
|
removeAllFollowing: Ontvolg alle gevolgde gebruikers
|
||||||
|
serverLogs: Server logboek
|
||||||
|
deleteAll: Verwijder alles
|
||||||
|
showFixedPostForm: Toon het post formulier bovenaan de tijdlijn
|
||||||
|
newNoteRecived: Er zijn nieuwe posts
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
_lang_: "Polski"
|
_lang_: "Polski"
|
||||||
headlineMisskey: "Otwartoźródłowa, zdecentralizowana sieć społecznościowa, która zawsze\
|
headlineMisskey: "Otwartoźródłowa, zdecentralizowana sieć społecznościowa, która zawsze
|
||||||
\ będzie darmowa! \U0001F680"
|
będzie darmowa! 🚀"
|
||||||
introMisskey: "Hej! Calckey to otwartoźródłowa oraz zdecentralizowana sieć społecznościowa,\
|
introMisskey: "Hej! Calckey to otwartoźródłowa oraz zdecentralizowana sieć społecznościowa,
|
||||||
\ która zawsze będzie darmowa! \U0001F680"
|
która zawsze będzie darmowa! 🚀"
|
||||||
monthAndDay: "{month}-{day}"
|
monthAndDay: "{month}-{day}"
|
||||||
search: "Szukaj"
|
search: "Szukaj"
|
||||||
notifications: "Powiadomienia"
|
notifications: "Powiadomienia"
|
||||||
|
@ -17,7 +17,7 @@ enterUsername: "Wprowadź nazwę użytkownika"
|
||||||
renotedBy: "Podbito przez {user}"
|
renotedBy: "Podbito przez {user}"
|
||||||
noNotes: "Brak wpisów"
|
noNotes: "Brak wpisów"
|
||||||
noNotifications: "Brak powiadomień"
|
noNotifications: "Brak powiadomień"
|
||||||
instance: "Instancja"
|
instance: "Serwer"
|
||||||
settings: "Ustawienia"
|
settings: "Ustawienia"
|
||||||
basicSettings: "Podstawowe ustawienia"
|
basicSettings: "Podstawowe ustawienia"
|
||||||
otherSettings: "Pozostałe ustawienia"
|
otherSettings: "Pozostałe ustawienia"
|
||||||
|
@ -45,8 +45,8 @@ copyContent: "Skopiuj zawartość"
|
||||||
copyLink: "Skopiuj odnośnik"
|
copyLink: "Skopiuj odnośnik"
|
||||||
delete: "Usuń"
|
delete: "Usuń"
|
||||||
deleteAndEdit: "Usuń i edytuj"
|
deleteAndEdit: "Usuń i edytuj"
|
||||||
deleteAndEditConfirm: "Czy na pewno chcesz usunąć ten wpis i zedytować go? Utracisz\
|
deleteAndEditConfirm: "Czy na pewno chcesz usunąć ten wpis i zedytować go? Utracisz
|
||||||
\ wszystkie reakcje, podbicia i odpowiedzi do tego wpisu."
|
wszystkie reakcje, podbicia i odpowiedzi do tego wpisu."
|
||||||
addToList: "Dodaj do listy"
|
addToList: "Dodaj do listy"
|
||||||
sendMessage: "Wyślij wiadomość"
|
sendMessage: "Wyślij wiadomość"
|
||||||
copyUsername: "Kopiuj nazwę użytkownika"
|
copyUsername: "Kopiuj nazwę użytkownika"
|
||||||
|
@ -66,11 +66,11 @@ import: "Importuj"
|
||||||
export: "Eksportuj"
|
export: "Eksportuj"
|
||||||
files: "Pliki"
|
files: "Pliki"
|
||||||
download: "Pobierz"
|
download: "Pobierz"
|
||||||
driveFileDeleteConfirm: "Czy chcesz usunąć plik \"{name}\"? Wszystkie wpisy zawierające\
|
driveFileDeleteConfirm: "Czy chcesz usunąć plik \"{name}\"? Wszystkie wpisy zawierające
|
||||||
\ ten plik również zostaną usunięte."
|
ten plik również zostaną usunięte."
|
||||||
unfollowConfirm: "Czy na pewno chcesz przestać obserwować {name}?"
|
unfollowConfirm: "Czy na pewno chcesz przestać obserwować {name}?"
|
||||||
exportRequested: "Zażądałeś eksportu. Może to zająć chwilę. Po zakończeniu eksportu\
|
exportRequested: "Zażądałeś eksportu. Może to zająć chwilę. Po zakończeniu eksportu
|
||||||
\ zostanie on dodany do Twojego dysku."
|
zostanie on dodany do Twojego dysku."
|
||||||
importRequested: "Zażądano importu. Może to zająć chwilę."
|
importRequested: "Zażądano importu. Może to zająć chwilę."
|
||||||
lists: "Listy"
|
lists: "Listy"
|
||||||
noLists: "Nie masz żadnych list"
|
noLists: "Nie masz żadnych list"
|
||||||
|
@ -85,8 +85,8 @@ error: "Błąd"
|
||||||
somethingHappened: "Coś poszło nie tak"
|
somethingHappened: "Coś poszło nie tak"
|
||||||
retry: "Spróbuj ponownie"
|
retry: "Spróbuj ponownie"
|
||||||
pageLoadError: "Nie udało się załadować strony."
|
pageLoadError: "Nie udało się załadować strony."
|
||||||
pageLoadErrorDescription: "Zwykle jest to spowodowane problemem z siecią lub cache\
|
pageLoadErrorDescription: "Zwykle jest to spowodowane problemem z siecią lub cache
|
||||||
\ przeglądarki. Spróbuj wyczyścić cache i sprawdź jeszcze raz za chwilę."
|
przeglądarki. Spróbuj wyczyścić cache i sprawdź jeszcze raz za chwilę."
|
||||||
serverIsDead: "Serwer nie odpowiada. Zaczekaj chwilę i spróbuj ponownie."
|
serverIsDead: "Serwer nie odpowiada. Zaczekaj chwilę i spróbuj ponownie."
|
||||||
youShouldUpgradeClient: "Aby zobaczyć tą stronę, odśwież ją, by zaaktualizować klienta."
|
youShouldUpgradeClient: "Aby zobaczyć tą stronę, odśwież ją, by zaaktualizować klienta."
|
||||||
enterListName: "Wpisz nazwę listy"
|
enterListName: "Wpisz nazwę listy"
|
||||||
|
@ -113,8 +113,8 @@ sensitive: "NSFW"
|
||||||
add: "Dodaj"
|
add: "Dodaj"
|
||||||
reaction: "Reakcja"
|
reaction: "Reakcja"
|
||||||
reactionSetting: "Reakcje do pokazania w wyborniku reakcji"
|
reactionSetting: "Reakcje do pokazania w wyborniku reakcji"
|
||||||
reactionSettingDescription2: "Przeciągnij aby zmienić kolejność, naciśnij aby usunąć,\
|
reactionSettingDescription2: "Przeciągnij aby zmienić kolejność, naciśnij aby usunąć,
|
||||||
\ naciśnij „+” aby dodać."
|
naciśnij „+” aby dodać."
|
||||||
rememberNoteVisibility: "Zapamiętuj ustawienia widoczności wpisu"
|
rememberNoteVisibility: "Zapamiętuj ustawienia widoczności wpisu"
|
||||||
attachCancel: "Usuń załącznik"
|
attachCancel: "Usuń załącznik"
|
||||||
markAsSensitive: "Oznacz jako NSFW"
|
markAsSensitive: "Oznacz jako NSFW"
|
||||||
|
@ -143,22 +143,22 @@ emojiUrl: "Adres URL emoji"
|
||||||
addEmoji: "Dodaj emoji"
|
addEmoji: "Dodaj emoji"
|
||||||
settingGuide: "Proponowana konfiguracja"
|
settingGuide: "Proponowana konfiguracja"
|
||||||
cacheRemoteFiles: "Przechowuj zdalne pliki w pamięci podręcznej"
|
cacheRemoteFiles: "Przechowuj zdalne pliki w pamięci podręcznej"
|
||||||
cacheRemoteFilesDescription: "Gdy ta opcja jest wyłączona, zdalne pliki są ładowane\
|
cacheRemoteFilesDescription: "Gdy ta opcja jest wyłączona, zdalne pliki są ładowane
|
||||||
\ bezpośrednio ze zdalnych instancji. Wyłączenie the opcji zmniejszy użycie powierzchni\
|
bezpośrednio ze zdalnego serwera. Wyłączenie tej opcji zmniejszy użycie powierzchni
|
||||||
\ dyskowej, ale zwiększy transfer, ponieważ miniaturki nie będą generowane."
|
dyskowej, ale zwiększy transfer, ponieważ miniaturki nie będą generowane."
|
||||||
flagAsBot: "To konto jest botem"
|
flagAsBot: "To konto jest botem"
|
||||||
flagAsBotDescription: "Jeżeli ten kanał jest kontrolowany przez jakiś program, ustaw\
|
flagAsBotDescription: "Jeżeli ten kanał jest kontrolowany przez jakiś program, ustaw
|
||||||
\ tę opcję. Jeżeli włączona, będzie działać jako flaga informująca innych programistów,\
|
tę opcję. Jeżeli włączona, będzie działać jako flaga informująca innych programistów,
|
||||||
\ aby zapobiegać nieskończonej interakcji z różnymi botami i dostosowywać wewnętrzne\
|
aby zapobiegać nieskończonej interakcji z różnymi botami i dostosowywać wewnętrzne
|
||||||
\ systemy Calckey, traktując konto jako bota."
|
systemy Calckey, traktując konto jako bota."
|
||||||
flagAsCat: "Czy jesteś kotem? \U0001F63A"
|
flagAsCat: "Czy jesteś kotem? 😺"
|
||||||
flagAsCatDescription: "Dostaniesz kocie uszka, oraz będziesz mówić jak kot!"
|
flagAsCatDescription: "Dostaniesz kocie uszka, oraz będziesz mówić jak kot!"
|
||||||
flagShowTimelineReplies: "Pokazuj odpowiedzi na osi czasu"
|
flagShowTimelineReplies: "Pokazuj odpowiedzi na osi czasu"
|
||||||
autoAcceptFollowed: "Automatycznie przyjmuj prośby o możliwość obserwacji od użytkowników,\
|
autoAcceptFollowed: "Automatycznie przyjmuj prośby o możliwość obserwacji od użytkowników,
|
||||||
\ których obserwujesz"
|
których obserwujesz"
|
||||||
addAccount: "Dodaj konto"
|
addAccount: "Dodaj konto"
|
||||||
loginFailed: "Nie udało się zalogować"
|
loginFailed: "Nie udało się zalogować"
|
||||||
showOnRemote: "Zobacz na zdalnej instancji"
|
showOnRemote: "Zobacz na zdalnym serwerze"
|
||||||
general: "Ogólne"
|
general: "Ogólne"
|
||||||
wallpaper: "Tapeta"
|
wallpaper: "Tapeta"
|
||||||
setWallpaper: "Ustaw tapetę"
|
setWallpaper: "Ustaw tapetę"
|
||||||
|
@ -172,7 +172,7 @@ selectUser: "Wybierz użytkownika"
|
||||||
recipient: "Odbiorca(-y)"
|
recipient: "Odbiorca(-y)"
|
||||||
annotation: "Komentarze"
|
annotation: "Komentarze"
|
||||||
federation: "Federacja"
|
federation: "Federacja"
|
||||||
instances: "Instancja"
|
instances: "Serwery"
|
||||||
registeredAt: "Zarejestrowano"
|
registeredAt: "Zarejestrowano"
|
||||||
latestRequestSentAt: "Ostatnie żądanie wysłano o"
|
latestRequestSentAt: "Ostatnie żądanie wysłano o"
|
||||||
latestRequestReceivedAt: "Ostatnie żądanie otrzymano o"
|
latestRequestReceivedAt: "Ostatnie żądanie otrzymano o"
|
||||||
|
@ -182,7 +182,7 @@ charts: "Wykresy"
|
||||||
perHour: "co godzinę"
|
perHour: "co godzinę"
|
||||||
perDay: "co dzień"
|
perDay: "co dzień"
|
||||||
stopActivityDelivery: "Przestań przesyłać aktywności"
|
stopActivityDelivery: "Przestań przesyłać aktywności"
|
||||||
blockThisInstance: "Zablokuj tę instancję"
|
blockThisInstance: "Zablokuj ten serwer"
|
||||||
operations: "Działania"
|
operations: "Działania"
|
||||||
software: "Oprogramowanie"
|
software: "Oprogramowanie"
|
||||||
version: "Wersja"
|
version: "Wersja"
|
||||||
|
@ -192,18 +192,18 @@ jobQueue: "Kolejka zadań"
|
||||||
cpuAndMemory: "CPU i pamięć"
|
cpuAndMemory: "CPU i pamięć"
|
||||||
network: "Sieć"
|
network: "Sieć"
|
||||||
disk: "Dysk"
|
disk: "Dysk"
|
||||||
instanceInfo: "Informacje o instancji"
|
instanceInfo: "Informacje o serwerze"
|
||||||
statistics: "Statystyki"
|
statistics: "Statystyki"
|
||||||
clearQueue: "Wyczyść kolejkę"
|
clearQueue: "Wyczyść kolejkę"
|
||||||
clearQueueConfirmTitle: "Czy na pewno chcesz wyczyścić kolejkę?"
|
clearQueueConfirmTitle: "Czy na pewno chcesz wyczyścić kolejkę?"
|
||||||
clearQueueConfirmText: "Wszystkie niewysłane wpisy z kolejki nie zostaną wysłane.\
|
clearQueueConfirmText: "Wszystkie niewysłane wpisy z kolejki nie zostaną wysłane.
|
||||||
\ Zwykle to nie jest konieczne."
|
Zwykle to nie jest konieczne."
|
||||||
clearCachedFiles: "Wyczyść pamięć podręczną"
|
clearCachedFiles: "Wyczyść pamięć podręczną"
|
||||||
clearCachedFilesConfirm: "Czy na pewno chcesz usunąć wszystkie zdalne pliki z pamięci\
|
clearCachedFilesConfirm: "Czy na pewno chcesz usunąć wszystkie zdalne pliki z pamięci
|
||||||
\ podręcznej?"
|
podręcznej?"
|
||||||
blockedInstances: "Zablokowane instancje"
|
blockedInstances: "Zablokowane serwery"
|
||||||
blockedInstancesDescription: "Wypisz nazwy hostów instancji, które powinny zostać\
|
blockedInstancesDescription: "Wypisz nazwy hostów serwerów, które chcesz zablokować.
|
||||||
\ zablokowane. Wypisane instancje nie będą mogły dłużej komunikować się z tą instancją."
|
Wymienione serwery nie będą mogły dłużej komunikować się z tym serwerem."
|
||||||
muteAndBlock: "Wyciszenia i blokady"
|
muteAndBlock: "Wyciszenia i blokady"
|
||||||
mutedUsers: "Wyciszeni użytkownicy"
|
mutedUsers: "Wyciszeni użytkownicy"
|
||||||
blockedUsers: "Zablokowani użytkownicy"
|
blockedUsers: "Zablokowani użytkownicy"
|
||||||
|
@ -213,7 +213,7 @@ noteDeleteConfirm: "Czy na pewno chcesz usunąć ten wpis?"
|
||||||
pinLimitExceeded: "Nie możesz przypiąć więcej wpisów"
|
pinLimitExceeded: "Nie możesz przypiąć więcej wpisów"
|
||||||
intro: "Zakończono instalację Calckey! Utwórz konto administratora."
|
intro: "Zakończono instalację Calckey! Utwórz konto administratora."
|
||||||
done: "Gotowe"
|
done: "Gotowe"
|
||||||
processing: "Przetwarzanie..."
|
processing: "Przetwarzanie"
|
||||||
preview: "Podgląd"
|
preview: "Podgląd"
|
||||||
default: "Domyślne"
|
default: "Domyślne"
|
||||||
defaultValueIs: "Domyślne: {value}"
|
defaultValueIs: "Domyślne: {value}"
|
||||||
|
@ -226,9 +226,9 @@ all: "Wszystkie"
|
||||||
subscribing: "Subskrybowanie"
|
subscribing: "Subskrybowanie"
|
||||||
publishing: "Publikowanie"
|
publishing: "Publikowanie"
|
||||||
notResponding: "Nie odpowiada"
|
notResponding: "Nie odpowiada"
|
||||||
instanceFollowing: "Obserwowani na instancji"
|
instanceFollowing: "Obserwowani na serwerze"
|
||||||
instanceFollowers: "Obserwujący na instancji"
|
instanceFollowers: "Obserwujący na serwerze"
|
||||||
instanceUsers: "Użytkownicy tej instancji"
|
instanceUsers: "Użytkownicy tego serwera"
|
||||||
changePassword: "Zmień hasło"
|
changePassword: "Zmień hasło"
|
||||||
security: "Bezpieczeństwo"
|
security: "Bezpieczeństwo"
|
||||||
retypedNotMatch: "Wejście nie zgadza się."
|
retypedNotMatch: "Wejście nie zgadza się."
|
||||||
|
@ -267,8 +267,8 @@ agreeTo: "Wyrażam zgodę na {0}"
|
||||||
tos: "Regulamin"
|
tos: "Regulamin"
|
||||||
start: "Rozpocznij"
|
start: "Rozpocznij"
|
||||||
home: "Strona główna"
|
home: "Strona główna"
|
||||||
remoteUserCaution: "Te informacje mogą nie być aktualne, ponieważ użytkownik pochodzi\
|
remoteUserCaution: "Te informacje mogą nie być aktualne, ponieważ użytkownik pochodzi
|
||||||
\ ze zdalnej instancji."
|
ze zdalnej instancji."
|
||||||
activity: "Aktywność"
|
activity: "Aktywność"
|
||||||
images: "Zdjęcia"
|
images: "Zdjęcia"
|
||||||
birthday: "Data urodzenia"
|
birthday: "Data urodzenia"
|
||||||
|
@ -301,8 +301,8 @@ unableToDelete: "Nie można usunąć"
|
||||||
inputNewFileName: "Wprowadź nową nazwę pliku"
|
inputNewFileName: "Wprowadź nową nazwę pliku"
|
||||||
inputNewDescription: "Proszę wpisać nowy napis"
|
inputNewDescription: "Proszę wpisać nowy napis"
|
||||||
inputNewFolderName: "Wprowadź nową nazwę katalogu"
|
inputNewFolderName: "Wprowadź nową nazwę katalogu"
|
||||||
circularReferenceFolder: "Katalog docelowy jest podkatalogiem katalogu, który chcesz\
|
circularReferenceFolder: "Katalog docelowy jest podkatalogiem katalogu, który chcesz
|
||||||
\ przenieść."
|
przenieść."
|
||||||
hasChildFilesOrFolders: "Ponieważ ten katalog nie jest pusty, nie może być usunięty."
|
hasChildFilesOrFolders: "Ponieważ ten katalog nie jest pusty, nie może być usunięty."
|
||||||
copyUrl: "Skopiuj adres URL"
|
copyUrl: "Skopiuj adres URL"
|
||||||
rename: "Zmień nazwę"
|
rename: "Zmień nazwę"
|
||||||
|
@ -319,8 +319,8 @@ unwatch: "Przestań śledzić"
|
||||||
accept: "Akceptuj"
|
accept: "Akceptuj"
|
||||||
reject: "Odrzuć"
|
reject: "Odrzuć"
|
||||||
normal: "Normalny"
|
normal: "Normalny"
|
||||||
instanceName: "Nazwa instancji"
|
instanceName: "Nazwa serwera"
|
||||||
instanceDescription: "Opis instancji"
|
instanceDescription: "Opis serwera"
|
||||||
maintainerName: "Administrator"
|
maintainerName: "Administrator"
|
||||||
maintainerEmail: "E-mail administratora"
|
maintainerEmail: "E-mail administratora"
|
||||||
tosUrl: "Adres URL regulaminu"
|
tosUrl: "Adres URL regulaminu"
|
||||||
|
@ -336,8 +336,8 @@ connectService: "Połącz"
|
||||||
disconnectService: "Rozłącz"
|
disconnectService: "Rozłącz"
|
||||||
enableLocalTimeline: "Włącz lokalną oś czasu"
|
enableLocalTimeline: "Włącz lokalną oś czasu"
|
||||||
enableGlobalTimeline: "Włącz globalną oś czasu"
|
enableGlobalTimeline: "Włącz globalną oś czasu"
|
||||||
disablingTimelinesInfo: "Administratorzy i moderatorzy będą zawsze mieć dostęp do\
|
disablingTimelinesInfo: "Administratorzy i moderatorzy będą zawsze mieć dostęp do
|
||||||
\ wszystkich osi czasu, nawet gdy są one wyłączone."
|
wszystkich osi czasu, nawet gdy są one wyłączone."
|
||||||
registration: "Zarejestruj się"
|
registration: "Zarejestruj się"
|
||||||
enableRegistration: "Włącz rejestrację nowych użytkowników"
|
enableRegistration: "Włącz rejestrację nowych użytkowników"
|
||||||
invite: "Zaproś"
|
invite: "Zaproś"
|
||||||
|
@ -349,11 +349,11 @@ bannerUrl: "Adres URL banera"
|
||||||
backgroundImageUrl: "Adres URL tła"
|
backgroundImageUrl: "Adres URL tła"
|
||||||
basicInfo: "Podstawowe informacje"
|
basicInfo: "Podstawowe informacje"
|
||||||
pinnedUsers: "Przypięty użytkownik"
|
pinnedUsers: "Przypięty użytkownik"
|
||||||
pinnedUsersDescription: "Wypisz po jednej nazwie użytkownika w wierszu. Podani użytkownicy\
|
pinnedUsersDescription: "Wypisz po jednej nazwie użytkownika w wierszu. Podani użytkownicy
|
||||||
\ zostaną przypięci pod kartą „Eksploruj”."
|
zostaną przypięci pod kartą „Eksploruj”."
|
||||||
pinnedPages: "Przypięte strony"
|
pinnedPages: "Przypięte strony"
|
||||||
pinnedPagesDescription: "Wprowadź ścieżki stron które chcesz przypiąć na głównej stronie\
|
pinnedPagesDescription: "Wprowadź ścieżki stron, które chcesz przypiąć do górnej strony
|
||||||
\ instancji, oddzielone znakiem nowego wiersza."
|
tego serwera, oddzielając je znakami końca wiersza."
|
||||||
pinnedClipId: "ID przypiętego klipu"
|
pinnedClipId: "ID przypiętego klipu"
|
||||||
pinnedNotes: "Przypięty wpis"
|
pinnedNotes: "Przypięty wpis"
|
||||||
hcaptcha: "hCaptcha"
|
hcaptcha: "hCaptcha"
|
||||||
|
@ -364,16 +364,16 @@ recaptcha: "reCAPTCHA"
|
||||||
enableRecaptcha: "Włącz reCAPTCHA"
|
enableRecaptcha: "Włącz reCAPTCHA"
|
||||||
recaptchaSiteKey: "Klucz strony"
|
recaptchaSiteKey: "Klucz strony"
|
||||||
recaptchaSecretKey: "Tajny klucz"
|
recaptchaSecretKey: "Tajny klucz"
|
||||||
avoidMultiCaptchaConfirm: "Używanie wielu Captchy może spowodować zakłócenia. Czy\
|
avoidMultiCaptchaConfirm: "Używanie wielu Captchy może spowodować zakłócenia. Czy
|
||||||
\ chcesz wyłączyć inną Captchę? Możesz zostawić wiele jednocześnie, klikając Anuluj."
|
chcesz wyłączyć inną Captchę? Możesz zostawić wiele jednocześnie, klikając Anuluj."
|
||||||
antennas: "Anteny"
|
antennas: "Anteny"
|
||||||
manageAntennas: "Zarządzaj antenami"
|
manageAntennas: "Zarządzaj antenami"
|
||||||
name: "Nazwa"
|
name: "Nazwa"
|
||||||
antennaSource: "Źródło anteny"
|
antennaSource: "Źródło anteny"
|
||||||
antennaKeywords: "Słowa kluczowe do obserwacji"
|
antennaKeywords: "Słowa kluczowe do obserwacji"
|
||||||
antennaExcludeKeywords: "Wykluczone słowa kluczowe"
|
antennaExcludeKeywords: "Wykluczone słowa kluczowe"
|
||||||
antennaKeywordsDescription: "Oddziel spacjami dla warunku AND, albo wymuś koniec linii\
|
antennaKeywordsDescription: "Oddziel spacjami dla warunku AND, albo wymuś koniec linii
|
||||||
\ dla warunku OR."
|
dla warunku OR."
|
||||||
notifyAntenna: "Powiadamiaj o nowych wpisach"
|
notifyAntenna: "Powiadamiaj o nowych wpisach"
|
||||||
withFileAntenna: "Filtruj tylko wpisy z załączonym plikiem"
|
withFileAntenna: "Filtruj tylko wpisy z załączonym plikiem"
|
||||||
enableServiceworker: "Włącz powiadomienia push dla twojej przeglądarki"
|
enableServiceworker: "Włącz powiadomienia push dla twojej przeglądarki"
|
||||||
|
@ -461,8 +461,8 @@ strongPassword: "Silne hasło"
|
||||||
passwordMatched: "Pasuje"
|
passwordMatched: "Pasuje"
|
||||||
passwordNotMatched: "Hasła nie pasują do siebie"
|
passwordNotMatched: "Hasła nie pasują do siebie"
|
||||||
signinWith: "Zaloguj się z {x}"
|
signinWith: "Zaloguj się z {x}"
|
||||||
signinFailed: "Nie udało się zalogować. Wprowadzona nazwa użytkownika lub hasło są\
|
signinFailed: "Nie udało się zalogować. Wprowadzona nazwa użytkownika lub hasło są
|
||||||
\ nieprawidłowe."
|
nieprawidłowe."
|
||||||
tapSecurityKey: "Wybierz swój klucz bezpieczeństwa"
|
tapSecurityKey: "Wybierz swój klucz bezpieczeństwa"
|
||||||
or: "Lub"
|
or: "Lub"
|
||||||
language: "Język"
|
language: "Język"
|
||||||
|
@ -508,18 +508,18 @@ objectStorageBucketDesc: "Podaj nazwę „wiadra” używaną przez konfigurowan
|
||||||
objectStoragePrefix: "Prefiks"
|
objectStoragePrefix: "Prefiks"
|
||||||
objectStoragePrefixDesc: "Pliki będą przechowywane w katalogu z tym prefiksem."
|
objectStoragePrefixDesc: "Pliki będą przechowywane w katalogu z tym prefiksem."
|
||||||
objectStorageEndpoint: "Punkt końcowy"
|
objectStorageEndpoint: "Punkt końcowy"
|
||||||
objectStorageEndpointDesc: "Pozostaw puste jeżeli używasz AWS S3, w innym wypadku\
|
objectStorageEndpointDesc: "Pozostaw puste jeżeli używasz AWS S3, w innym wypadku
|
||||||
\ określ punkt końcowy jako '<host>' lub '<host>:<port>' zgodnie z instrukcjami\
|
określ punkt końcowy jako '<host>' lub '<host>:<port>' zgodnie z instrukcjami usługi,
|
||||||
\ usługi, której używasz."
|
której używasz."
|
||||||
objectStorageRegion: "Region"
|
objectStorageRegion: "Region"
|
||||||
objectStorageRegionDesc: "Określ region, np. 'xx-east-1'. Jeżeli usługa której używasz\
|
objectStorageRegionDesc: "Określ region, np. 'xx-east-1'. Jeżeli usługa której używasz
|
||||||
\ nie zawiera rozróżnienia regionów, pozostaw to pustym lub wprowadź 'us-east-1'."
|
nie zawiera rozróżnienia regionów, pozostaw to pustym lub wprowadź 'us-east-1'."
|
||||||
objectStorageUseSSL: "Użyj SSL"
|
objectStorageUseSSL: "Użyj SSL"
|
||||||
objectStorageUseSSLDesc: "Wyłącz, jeżeli nie zamierzasz używać HTTPS dla połączenia\
|
objectStorageUseSSLDesc: "Wyłącz, jeżeli nie zamierzasz używać HTTPS dla połączenia
|
||||||
\ z API"
|
z API"
|
||||||
objectStorageUseProxy: "Połącz przez proxy"
|
objectStorageUseProxy: "Połącz przez proxy"
|
||||||
objectStorageUseProxyDesc: "Wyłącz, jeżeli nie zamierzasz używać proxy dla połączenia\
|
objectStorageUseProxyDesc: "Wyłącz, jeżeli nie zamierzasz używać proxy dla połączenia
|
||||||
\ z pamięcią blokową"
|
z pamięcią blokową"
|
||||||
serverLogs: "Dziennik zdarzeń"
|
serverLogs: "Dziennik zdarzeń"
|
||||||
deleteAll: "Usuń wszystkie"
|
deleteAll: "Usuń wszystkie"
|
||||||
showFixedPostForm: "Wyświetlaj formularz tworzenia wpisu w górnej części osi czasu"
|
showFixedPostForm: "Wyświetlaj formularz tworzenia wpisu w górnej części osi czasu"
|
||||||
|
@ -546,22 +546,22 @@ sort: "Sortuj"
|
||||||
ascendingOrder: "Rosnąco"
|
ascendingOrder: "Rosnąco"
|
||||||
descendingOrder: "Malejąco"
|
descendingOrder: "Malejąco"
|
||||||
scratchpad: "Brudnopis"
|
scratchpad: "Brudnopis"
|
||||||
scratchpadDescription: "Brudnopis to środowisko dla eksperymentów z AiScript. Możesz\
|
scratchpadDescription: "Brudnopis to środowisko dla eksperymentów z AiScript. Możesz
|
||||||
\ pisać, wykonywać i sprawdzać wyniki interakcji skryptu z Calckey."
|
pisać, wykonywać i sprawdzać wyniki interakcji skryptu z Calckey."
|
||||||
output: "Wyjście"
|
output: "Wyjście"
|
||||||
script: "Skrypt"
|
script: "Skrypt"
|
||||||
disablePagesScript: "Wyłącz AiScript na Stronach"
|
disablePagesScript: "Wyłącz AiScript na Stronach"
|
||||||
updateRemoteUser: "Aktualizuj zdalne dane o użytkowniku"
|
updateRemoteUser: "Aktualizuj zdalne dane o użytkowniku"
|
||||||
deleteAllFiles: "Usuń wszystkie pliki"
|
deleteAllFiles: "Usuń wszystkie pliki"
|
||||||
deleteAllFilesConfirm: "Czy na pewno chcesz usunąć wszystkie pliki?"
|
deleteAllFilesConfirm: "Czy na pewno chcesz usunąć wszystkie pliki?"
|
||||||
removeAllFollowingDescription: "Przestań obserwować wszystkie konta z {host}. Wykonaj\
|
removeAllFollowingDescription: "Wykonanie tego polecenia spowoduje usunięcie wszystkich
|
||||||
\ to, jeżeli instancja już nie istnieje."
|
kont z {host}. Zrób to, jeśli serwer np. już nie istnieje."
|
||||||
userSuspended: "To konto zostało zawieszone."
|
userSuspended: "To konto zostało zawieszone."
|
||||||
userSilenced: "Ten użytkownik został wyciszony."
|
userSilenced: "Ten użytkownik został wyciszony."
|
||||||
yourAccountSuspendedTitle: "To konto jest zawieszone"
|
yourAccountSuspendedTitle: "To konto jest zawieszone"
|
||||||
yourAccountSuspendedDescription: "To konto zostało zawieszone z powodu złamania regulaminu\
|
yourAccountSuspendedDescription: "To konto zostało zawieszone z powodu złamania regulaminu
|
||||||
\ serwera lub innych podobnych. Skontaktuj się z administratorem, jeśli chciałbyś\
|
serwera lub innych podobnych. Skontaktuj się z administratorem, jeśli chciałbyś
|
||||||
\ poznać bardziej szczegółowy powód. Proszę nie zakładać nowego konta."
|
poznać bardziej szczegółowy powód. Proszę nie zakładać nowego konta."
|
||||||
menu: "Menu"
|
menu: "Menu"
|
||||||
divider: "Rozdzielacz"
|
divider: "Rozdzielacz"
|
||||||
addItem: "Dodaj element"
|
addItem: "Dodaj element"
|
||||||
|
@ -600,14 +600,14 @@ permission: "Uprawnienia"
|
||||||
enableAll: "Włącz wszystko"
|
enableAll: "Włącz wszystko"
|
||||||
disableAll: "Wyłącz wszystko"
|
disableAll: "Wyłącz wszystko"
|
||||||
tokenRequested: "Przydziel dostęp do konta"
|
tokenRequested: "Przydziel dostęp do konta"
|
||||||
pluginTokenRequestedDescription: "Ta wtyczka będzie mogła korzystać z ustawionych\
|
pluginTokenRequestedDescription: "Ta wtyczka będzie mogła korzystać z ustawionych
|
||||||
\ tu uprawnień."
|
tu uprawnień."
|
||||||
notificationType: "Rodzaj powiadomień"
|
notificationType: "Rodzaj powiadomień"
|
||||||
edit: "Edytuj"
|
edit: "Edytuj"
|
||||||
emailServer: "Serwer poczty e-mail"
|
emailServer: "Serwer poczty e-mail"
|
||||||
enableEmail: "Włącz dostarczanie wiadomości e-mail"
|
enableEmail: "Włącz dostarczanie wiadomości e-mail"
|
||||||
emailConfigInfo: "Wykorzystywany do potwierdzenia adresu e-mail w trakcie rejestracji,\
|
emailConfigInfo: "Wykorzystywany do potwierdzenia adresu e-mail w trakcie rejestracji,
|
||||||
\ lub gdy zapomnisz hasła"
|
lub gdy zapomnisz hasła"
|
||||||
email: "Adres e-mail"
|
email: "Adres e-mail"
|
||||||
emailAddress: "Adres e-mail"
|
emailAddress: "Adres e-mail"
|
||||||
smtpConfig: "Konfiguracja serwera SMTP"
|
smtpConfig: "Konfiguracja serwera SMTP"
|
||||||
|
@ -615,12 +615,12 @@ smtpHost: "Host"
|
||||||
smtpPort: "Port"
|
smtpPort: "Port"
|
||||||
smtpUser: "Nazwa użytkownika"
|
smtpUser: "Nazwa użytkownika"
|
||||||
smtpPass: "Hasło"
|
smtpPass: "Hasło"
|
||||||
emptyToDisableSmtpAuth: "Pozostaw adres e-mail i hasło puste, aby wyłączyć weryfikację\
|
emptyToDisableSmtpAuth: "Pozostaw adres e-mail i hasło puste, aby wyłączyć weryfikację
|
||||||
\ SMTP"
|
SMTP"
|
||||||
smtpSecureInfo: "Wyłącz, jeżeli używasz STARTTLS"
|
smtpSecureInfo: "Wyłącz, jeżeli używasz STARTTLS"
|
||||||
testEmail: "Przetestuj dostarczanie wiadomości e-mail"
|
testEmail: "Przetestuj dostarczanie wiadomości e-mail"
|
||||||
wordMute: "Wyciszenie słowa"
|
wordMute: "Wyciszenie słowa"
|
||||||
instanceMute: "Wyciszone instancje"
|
instanceMute: "Wyciszenie serwera"
|
||||||
userSaysSomething: "{name} powiedział* coś"
|
userSaysSomething: "{name} powiedział* coś"
|
||||||
makeActive: "Aktywuj"
|
makeActive: "Aktywuj"
|
||||||
display: "Wyświetlanie"
|
display: "Wyświetlanie"
|
||||||
|
@ -635,12 +635,12 @@ create: "Utwórz"
|
||||||
notificationSetting: "Ustawienia powiadomień"
|
notificationSetting: "Ustawienia powiadomień"
|
||||||
notificationSettingDesc: "Wybierz rodzaj powiadomień do wyświetlania."
|
notificationSettingDesc: "Wybierz rodzaj powiadomień do wyświetlania."
|
||||||
useGlobalSetting: "Użyj globalnych ustawień"
|
useGlobalSetting: "Użyj globalnych ustawień"
|
||||||
useGlobalSettingDesc: "Jeżeli włączone, zostaną wykorzystane ustawienia powiadomień\
|
useGlobalSettingDesc: "Jeżeli włączone, zostaną wykorzystane ustawienia powiadomień
|
||||||
\ Twojego konta. Jeżeli wyłączone, mogą zostać wykonane oddzielne konfiguracje."
|
Twojego konta. Jeżeli wyłączone, mogą zostać wykonane oddzielne konfiguracje."
|
||||||
other: "Inne"
|
other: "Inne"
|
||||||
regenerateLoginToken: "Generuj token logowania ponownie"
|
regenerateLoginToken: "Generuj token logowania ponownie"
|
||||||
regenerateLoginTokenDescription: "Regeneruje token używany wewnętrznie podczas logowania.\
|
regenerateLoginTokenDescription: "Regeneruje token używany wewnętrznie podczas logowania.
|
||||||
\ Zazwyczaj nie jest to konieczne. Po regeneracji wszystkie urządzenia zostaną wylogowane."
|
Zazwyczaj nie jest to konieczne. Po regeneracji wszystkie urządzenia zostaną wylogowane."
|
||||||
setMultipleBySeparatingWithSpace: "Możesz ustawić wiele, oddzielając je spacjami."
|
setMultipleBySeparatingWithSpace: "Możesz ustawić wiele, oddzielając je spacjami."
|
||||||
fileIdOrUrl: "ID pliku albo URL"
|
fileIdOrUrl: "ID pliku albo URL"
|
||||||
behavior: "Zachowanie"
|
behavior: "Zachowanie"
|
||||||
|
@ -648,19 +648,19 @@ sample: "Przykład"
|
||||||
abuseReports: "Zgłoszenia"
|
abuseReports: "Zgłoszenia"
|
||||||
reportAbuse: "Zgłoś"
|
reportAbuse: "Zgłoś"
|
||||||
reportAbuseOf: "Zgłoś {name}"
|
reportAbuseOf: "Zgłoś {name}"
|
||||||
fillAbuseReportDescription: "Wypełnij szczegóły zgłoszenia. Jeżeli dotyczy ono określonego\
|
fillAbuseReportDescription: "Wypełnij szczegóły zgłoszenia. Jeżeli dotyczy ono określonego
|
||||||
\ wpisu, uwzględnij jego adres URL."
|
wpisu, uwzględnij jego adres URL."
|
||||||
abuseReported: "Twoje zgłoszenie zostało wysłane. Dziękujemy."
|
abuseReported: "Twoje zgłoszenie zostało wysłane. Dziękujemy."
|
||||||
reporteeOrigin: "Pochodzenie osoby zgłoszonej"
|
reporteeOrigin: "Pochodzenie osoby zgłoszonej"
|
||||||
reporterOrigin: "Pochodzenie osoby zgłaszającej"
|
reporterOrigin: "Pochodzenie osoby zgłaszającej"
|
||||||
forwardReport: "Przekaż zgłoszenie do innej instancji"
|
forwardReport: "Przekaż zgłoszenie do zdalnego serwera"
|
||||||
send: "Wyślij"
|
send: "Wyślij"
|
||||||
abuseMarkAsResolved: "Oznacz zgłoszenie jako rozwiązane"
|
abuseMarkAsResolved: "Oznacz zgłoszenie jako rozwiązane"
|
||||||
openInNewTab: "Otwórz w nowej karcie"
|
openInNewTab: "Otwórz w nowej karcie"
|
||||||
openInSideView: "Otwórz w bocznym widoku"
|
openInSideView: "Otwórz w bocznym widoku"
|
||||||
defaultNavigationBehaviour: "Domyślne zachowanie nawigacji"
|
defaultNavigationBehaviour: "Domyślne zachowanie nawigacji"
|
||||||
editTheseSettingsMayBreakAccount: "Edycja tych ustawień może uszkodzić Twoje konto."
|
editTheseSettingsMayBreakAccount: "Edycja tych ustawień może uszkodzić Twoje konto."
|
||||||
instanceTicker: "Informacje o wpisach instancji"
|
instanceTicker: "Informacje o wpisach serwera"
|
||||||
waitingFor: "Oczekiwanie na {x}"
|
waitingFor: "Oczekiwanie na {x}"
|
||||||
random: "Losowe"
|
random: "Losowe"
|
||||||
system: "System"
|
system: "System"
|
||||||
|
@ -671,11 +671,11 @@ createNew: "Utwórz nowy"
|
||||||
optional: "Nieobowiązkowe"
|
optional: "Nieobowiązkowe"
|
||||||
createNewClip: "Utwórz nowy klip"
|
createNewClip: "Utwórz nowy klip"
|
||||||
unclip: "Odczep"
|
unclip: "Odczep"
|
||||||
confirmToUnclipAlreadyClippedNote: "Ten wpis jest już częścią klipu \"{name}\". Czy\
|
confirmToUnclipAlreadyClippedNote: "Ten wpis jest już częścią klipu \"{name}\". Czy
|
||||||
\ chcesz ją usunąć z tego klipu?"
|
chcesz ją usunąć z tego klipu?"
|
||||||
public: "Publiczny"
|
public: "Publiczny"
|
||||||
i18nInfo: "Calckey jest tłumaczone na wiele języków przez wolontariuszy. Możesz pomóc\
|
i18nInfo: "Calckey jest tłumaczone na wiele języków przez wolontariuszy. Możesz pomóc
|
||||||
\ na {link}."
|
na {link}."
|
||||||
manageAccessTokens: "Zarządzaj tokenami dostępu"
|
manageAccessTokens: "Zarządzaj tokenami dostępu"
|
||||||
accountInfo: "Informacje o koncie"
|
accountInfo: "Informacje o koncie"
|
||||||
notesCount: "Liczba wpisów"
|
notesCount: "Liczba wpisów"
|
||||||
|
@ -694,16 +694,15 @@ no: "Nie"
|
||||||
driveFilesCount: "Liczba plików na dysku"
|
driveFilesCount: "Liczba plików na dysku"
|
||||||
driveUsage: "Użycie przestrzeni dyskowej"
|
driveUsage: "Użycie przestrzeni dyskowej"
|
||||||
noCrawle: "Odrzuć indeksowanie przez crawlery"
|
noCrawle: "Odrzuć indeksowanie przez crawlery"
|
||||||
noCrawleDescription: "Proś wyszukiwarki internetowe, aby nie indeksowały Twojego profilu,\
|
noCrawleDescription: "Proś wyszukiwarki internetowe, aby nie indeksowały Twojego profilu,
|
||||||
\ wpisów, stron itd."
|
wpisów, stron itd."
|
||||||
lockedAccountInfo: "Dopóki nie ustawisz widoczności wpisu na \"Obserwujący\", twoje\
|
lockedAccountInfo: "Dopóki nie ustawisz widoczności wpisu na \"Obserwujący\", twoje
|
||||||
\ wpisy będą mogli widzieć wszyscy, nawet jeśli ustawisz manualne zatwierdzanie\
|
wpisy będą mogli widzieć wszyscy, nawet jeśli ustawisz manualne zatwierdzanie obserwujących."
|
||||||
\ obserwujących."
|
|
||||||
alwaysMarkSensitive: "Oznacz domyślnie jako NSFW"
|
alwaysMarkSensitive: "Oznacz domyślnie jako NSFW"
|
||||||
loadRawImages: "Wyświetlaj zdjęcia w załącznikach w całości zamiast miniatur"
|
loadRawImages: "Wyświetlaj zdjęcia w załącznikach w całości zamiast miniatur"
|
||||||
disableShowingAnimatedImages: "Nie odtwarzaj animowanych obrazów"
|
disableShowingAnimatedImages: "Nie odtwarzaj animowanych obrazów"
|
||||||
verificationEmailSent: "Wiadomość weryfikacyjna została wysłana. Odwiedź uwzględniony\
|
verificationEmailSent: "Wiadomość weryfikacyjna została wysłana. Odwiedź uwzględniony
|
||||||
\ odnośnik, aby ukończyć weryfikację."
|
odnośnik, aby ukończyć weryfikację."
|
||||||
notSet: "Nie ustawiono"
|
notSet: "Nie ustawiono"
|
||||||
emailVerified: "Adres e-mail został potwierdzony"
|
emailVerified: "Adres e-mail został potwierdzony"
|
||||||
noteFavoritesCount: "Liczba zakładek"
|
noteFavoritesCount: "Liczba zakładek"
|
||||||
|
@ -715,16 +714,16 @@ clips: "Klipy"
|
||||||
experimentalFeatures: "Eksperymentalne funkcje"
|
experimentalFeatures: "Eksperymentalne funkcje"
|
||||||
developer: "Programista"
|
developer: "Programista"
|
||||||
makeExplorable: "Pokazuj konto na stronie „Eksploruj”"
|
makeExplorable: "Pokazuj konto na stronie „Eksploruj”"
|
||||||
makeExplorableDescription: "Jeżeli wyłączysz tę opcję, Twoje konto nie będzie wyświetlać\
|
makeExplorableDescription: "Jeżeli wyłączysz tę opcję, Twoje konto nie będzie wyświetlać
|
||||||
\ się w sekcji „Eksploruj”."
|
się w sekcji „Eksploruj”."
|
||||||
showGapBetweenNotesInTimeline: "Pokazuj odstęp między wpisami na osi czasu"
|
showGapBetweenNotesInTimeline: "Pokazuj odstęp między wpisami na osi czasu"
|
||||||
duplicate: "Duplikuj"
|
duplicate: "Duplikuj"
|
||||||
left: "Lewo"
|
left: "Lewo"
|
||||||
center: "Wyśrodkuj"
|
center: "Wyśrodkuj"
|
||||||
wide: "Szerokie"
|
wide: "Szerokie"
|
||||||
narrow: "Wąskie"
|
narrow: "Wąskie"
|
||||||
reloadToApplySetting: "To ustawienie zostanie zastosowane po odświeżeniu strony. Chcesz\
|
reloadToApplySetting: "To ustawienie zostanie zastosowane po odświeżeniu strony. Chcesz
|
||||||
\ odświeżyć?"
|
odświeżyć?"
|
||||||
needReloadToApply: "To ustawienie zostanie zastosowane po odświeżeniu strony."
|
needReloadToApply: "To ustawienie zostanie zastosowane po odświeżeniu strony."
|
||||||
showTitlebar: "Pokazuj pasek tytułowy"
|
showTitlebar: "Pokazuj pasek tytułowy"
|
||||||
clearCache: "Wyczyść pamięć podręczną"
|
clearCache: "Wyczyść pamięć podręczną"
|
||||||
|
@ -755,7 +754,7 @@ capacity: "Pojemność"
|
||||||
inUse: "Użyto"
|
inUse: "Użyto"
|
||||||
editCode: "Edytuj kod"
|
editCode: "Edytuj kod"
|
||||||
apply: "Zastosuj"
|
apply: "Zastosuj"
|
||||||
receiveAnnouncementFromInstance: "Otrzymuj powiadomienia e-mail z tej instancji"
|
receiveAnnouncementFromInstance: "Otrzymuj powiadomienia e-mail z tego serwera"
|
||||||
emailNotification: "Powiadomienia e-mail"
|
emailNotification: "Powiadomienia e-mail"
|
||||||
publish: "Publikuj"
|
publish: "Publikuj"
|
||||||
inChannelSearch: "Szukaj na kanale"
|
inChannelSearch: "Szukaj na kanale"
|
||||||
|
@ -772,21 +771,21 @@ quitFullView: "Opuść pełny widok"
|
||||||
addDescription: "Dodaj opis"
|
addDescription: "Dodaj opis"
|
||||||
userPagePinTip: "Możesz wyświetlać wpisy w tym miejscu po wybraniu \"Przypnij do profilu\"\
|
userPagePinTip: "Możesz wyświetlać wpisy w tym miejscu po wybraniu \"Przypnij do profilu\"\
|
||||||
\ z menu pojedynczego wpisu."
|
\ z menu pojedynczego wpisu."
|
||||||
notSpecifiedMentionWarning: "Ten wpis zawiera wzmianki o użytkownikach niezawartych\
|
notSpecifiedMentionWarning: "Ten wpis zawiera wzmianki o użytkownikach niezawartych
|
||||||
\ jako odbiorcy"
|
jako odbiorcy"
|
||||||
info: "Informacje"
|
info: "Informacje"
|
||||||
userInfo: "Informacje o użykowniku"
|
userInfo: "Informacje o użykowniku"
|
||||||
unknown: "Nieznane"
|
unknown: "Nieznane"
|
||||||
onlineStatus: "Status online"
|
onlineStatus: "Status online"
|
||||||
hideOnlineStatus: "Ukryj status online"
|
hideOnlineStatus: "Ukryj status online"
|
||||||
hideOnlineStatusDescription: "Ukrywanie statusu online ogranicza wygody niektórych\
|
hideOnlineStatusDescription: "Ukrywanie statusu online ogranicza wygody niektórych
|
||||||
\ funkcji, takich jak wyszukiwanie."
|
funkcji, takich jak wyszukiwanie."
|
||||||
online: "Online"
|
online: "Online"
|
||||||
active: "Aktywny"
|
active: "Aktywny"
|
||||||
offline: "Offline"
|
offline: "Offline"
|
||||||
notRecommended: "Nie zalecane"
|
notRecommended: "Nie zalecane"
|
||||||
botProtection: "Zabezpieczenie przed botami"
|
botProtection: "Zabezpieczenie przed botami"
|
||||||
instanceBlocking: "Zablokowane/wyciszone instancje"
|
instanceBlocking: "Zarządzanie federacją"
|
||||||
selectAccount: "Wybierz konto"
|
selectAccount: "Wybierz konto"
|
||||||
switchAccount: "Przełącz konto"
|
switchAccount: "Przełącz konto"
|
||||||
enabled: "Właczono"
|
enabled: "Właczono"
|
||||||
|
@ -815,8 +814,8 @@ emailNotConfiguredWarning: "Nie podano adresu e-mail."
|
||||||
ratio: "Stosunek"
|
ratio: "Stosunek"
|
||||||
previewNoteText: "Pokaż podgląd"
|
previewNoteText: "Pokaż podgląd"
|
||||||
customCss: "Własny CSS"
|
customCss: "Własny CSS"
|
||||||
customCssWarn: "Używaj tego ustawienia tylko wtedy, gdy wiesz co ono robi. Nieprawidłowe\
|
customCssWarn: "Używaj tego ustawienia tylko wtedy, gdy wiesz co ono robi. Nieprawidłowe
|
||||||
\ wpisy mogą spowodować, że klient przestanie działać poprawnie."
|
wpisy mogą spowodować, że klient przestanie działać poprawnie."
|
||||||
global: "Globalna"
|
global: "Globalna"
|
||||||
squareAvatars: "Wyświetlaj kwadratowe awatary"
|
squareAvatars: "Wyświetlaj kwadratowe awatary"
|
||||||
sent: "Wysłane"
|
sent: "Wysłane"
|
||||||
|
@ -832,8 +831,8 @@ translate: "Przetłumacz"
|
||||||
translatedFrom: "Przetłumaczone z {x}"
|
translatedFrom: "Przetłumaczone z {x}"
|
||||||
accountDeletionInProgress: "Trwa usuwanie konta"
|
accountDeletionInProgress: "Trwa usuwanie konta"
|
||||||
usernameInfo: "Nazwa, która identyfikuje Twoje konto spośród innych na tym serwerze.\
|
usernameInfo: "Nazwa, która identyfikuje Twoje konto spośród innych na tym serwerze.\
|
||||||
\ Możesz użyć alfabetu (a~z, A~Z), cyfr (0~9) lub podkreślników (_). Nazwy użytkownika\
|
\ Możesz użyć alfabetu (a~z, A~Z), cyfr (0~9) lub podkreślników (_). Nazwy użytkownika
|
||||||
\ nie mogą być później zmieniane."
|
nie mogą być później zmieniane."
|
||||||
aiChanMode: "Ai-chan w klasycznym interfejsie"
|
aiChanMode: "Ai-chan w klasycznym interfejsie"
|
||||||
keepCw: "Zostaw ostrzeżenia o zawartości"
|
keepCw: "Zostaw ostrzeżenia o zawartości"
|
||||||
pubSub: "Konta Pub/Sub"
|
pubSub: "Konta Pub/Sub"
|
||||||
|
@ -847,14 +846,14 @@ filter: "Filtr"
|
||||||
controlPanel: "Panel sterowania"
|
controlPanel: "Panel sterowania"
|
||||||
manageAccounts: "Zarządzaj kontami"
|
manageAccounts: "Zarządzaj kontami"
|
||||||
makeReactionsPublic: "Ustaw historię reakcji jako publiczną"
|
makeReactionsPublic: "Ustaw historię reakcji jako publiczną"
|
||||||
makeReactionsPublicDescription: "To spowoduje, że lista wszystkich Twoich dotychczasowych\
|
makeReactionsPublicDescription: "To spowoduje, że lista wszystkich Twoich dotychczasowych
|
||||||
\ reakcji będzie publicznie widoczna."
|
reakcji będzie publicznie widoczna."
|
||||||
classic: "Klasyczny"
|
classic: "Wyśrodkowany"
|
||||||
muteThread: "Wycisz wątek"
|
muteThread: "Wycisz wątek"
|
||||||
unmuteThread: "Wyłącz wyciszenie wątku"
|
unmuteThread: "Wyłącz wyciszenie wątku"
|
||||||
ffVisibility: "Widoczność obserwowanych/obserwujących"
|
ffVisibility: "Widoczność obserwowanych/obserwujących"
|
||||||
ffVisibilityDescription: "Pozwala skonfigurować, kto może zobaczyć, kogo obserwujesz\
|
ffVisibilityDescription: "Pozwala skonfigurować, kto może zobaczyć, kogo obserwujesz
|
||||||
\ i kto Cię obserwuje."
|
i kto Cię obserwuje."
|
||||||
continueThread: "Kontynuuj wątek"
|
continueThread: "Kontynuuj wątek"
|
||||||
deleteAccountConfirm: "Spowoduje to nieodwracalne usunięcie Twojego konta. Kontynuować?"
|
deleteAccountConfirm: "Spowoduje to nieodwracalne usunięcie Twojego konta. Kontynuować?"
|
||||||
incorrectPassword: "Nieprawidłowe hasło."
|
incorrectPassword: "Nieprawidłowe hasło."
|
||||||
|
@ -862,8 +861,8 @@ voteConfirm: "Potwierdzić swój głos na \"{choice}\"?"
|
||||||
hide: "Ukryj"
|
hide: "Ukryj"
|
||||||
leaveGroup: "Opuść grupę"
|
leaveGroup: "Opuść grupę"
|
||||||
leaveGroupConfirm: "Czy na pewno chcesz opuścić \"{name}\"?"
|
leaveGroupConfirm: "Czy na pewno chcesz opuścić \"{name}\"?"
|
||||||
useDrawerReactionPickerForMobile: "Wyświetlaj wybornik reakcji jako szufladę na urządzeniach\
|
useDrawerReactionPickerForMobile: "Wyświetlaj wybornik reakcji jako szufladę na urządzeniach
|
||||||
\ mobilnych"
|
mobilnych"
|
||||||
welcomeBackWithName: "Witaj z powrotem, {name}"
|
welcomeBackWithName: "Witaj z powrotem, {name}"
|
||||||
clickToFinishEmailVerification: "Kliknij [{ok}], aby zakończyć weryfikację e-mail."
|
clickToFinishEmailVerification: "Kliknij [{ok}], aby zakończyć weryfikację e-mail."
|
||||||
overridedDeviceKind: "Typ urządzenia"
|
overridedDeviceKind: "Typ urządzenia"
|
||||||
|
@ -886,22 +885,22 @@ type: "Typ"
|
||||||
speed: "Prędkość"
|
speed: "Prędkość"
|
||||||
localOnly: "Tylko lokalne"
|
localOnly: "Tylko lokalne"
|
||||||
failedToUpload: "Przesyłanie nie powiodło się"
|
failedToUpload: "Przesyłanie nie powiodło się"
|
||||||
cannotUploadBecauseInappropriate: "Nie można przesłać tego pliku, ponieważ jego części\
|
cannotUploadBecauseInappropriate: "Nie można przesłać tego pliku, ponieważ jego części
|
||||||
\ zostały wykryte jako potencjalnie nieodpowiednie."
|
zostały wykryte jako potencjalnie nieodpowiednie."
|
||||||
cannotUploadBecauseNoFreeSpace: "Przesyłanie nie powiodło się z powodu braku miejsca\
|
cannotUploadBecauseNoFreeSpace: "Przesyłanie nie powiodło się z powodu braku miejsca
|
||||||
\ na dysku."
|
na dysku."
|
||||||
beta: "Beta"
|
beta: "Beta"
|
||||||
enableAutoSensitive: "Automatyczne oznaczanie NSFW"
|
enableAutoSensitive: "Automatyczne oznaczanie NSFW"
|
||||||
enableAutoSensitiveDescription: "Umożliwia automatyczne wykrywanie i oznaczanie zawartości\
|
enableAutoSensitiveDescription: "Umożliwia automatyczne wykrywanie i oznaczanie zawartości
|
||||||
\ NSFW za pomocą uczenia maszynowego. Nawet jeśli ta opcja jest wyłączona, może\
|
NSFW za pomocą uczenia maszynowego tam, gdzie to możliwe. Nawet jeśli ta opcja jest
|
||||||
\ być włączona na całej instancji."
|
wyłączona, może być włączona na całym serwerze."
|
||||||
navbar: "Pasek nawigacyjny"
|
navbar: "Pasek nawigacyjny"
|
||||||
account: "Konta"
|
account: "Konta"
|
||||||
move: "Przenieś"
|
move: "Przenieś"
|
||||||
_sensitiveMediaDetection:
|
_sensitiveMediaDetection:
|
||||||
description: "Zmniejsza wysiłek związany z moderacją serwera dzięki automatycznemu\
|
description: "Zmniejsza wysiłek związany z moderacją serwera dzięki automatycznemu
|
||||||
\ rozpoznawaniu zawartości NSFW za pomocą uczenia maszynowego. To nieznacznie\
|
rozpoznawaniu zawartości NSFW za pomocą uczenia maszynowego. To nieznacznie zwiększy
|
||||||
\ zwiększy obciążenie serwera."
|
obciążenie serwera."
|
||||||
setSensitiveFlagAutomatically: "Oznacz jako NSFW"
|
setSensitiveFlagAutomatically: "Oznacz jako NSFW"
|
||||||
sensitivity: Czułość wykrywania
|
sensitivity: Czułość wykrywania
|
||||||
analyzeVideosDescription: Analizuje filmy, w dodatku do zdjęć. Zwiększy to nieznacznie
|
analyzeVideosDescription: Analizuje filmy, w dodatku do zdjęć. Zwiększy to nieznacznie
|
||||||
|
@ -925,15 +924,15 @@ _ffVisibility:
|
||||||
_signup:
|
_signup:
|
||||||
almostThere: "Prawie na miejscu"
|
almostThere: "Prawie na miejscu"
|
||||||
emailAddressInfo: "Podaj swój adres e-mail. Nie zostanie on upubliczniony."
|
emailAddressInfo: "Podaj swój adres e-mail. Nie zostanie on upubliczniony."
|
||||||
emailSent: "E-mail z potwierdzeniem został wysłany na Twój adres e-mail ({email}).\
|
emailSent: "E-mail z potwierdzeniem został wysłany na Twój adres e-mail ({email}).
|
||||||
\ Kliknij dołączony link, aby dokończyć tworzenie konta."
|
Kliknij dołączony link, aby dokończyć tworzenie konta."
|
||||||
_accountDelete:
|
_accountDelete:
|
||||||
accountDelete: "Usuń konto"
|
accountDelete: "Usuń konto"
|
||||||
mayTakeTime: "Ponieważ usuwanie konta jest procesem wymagającym dużej ilości zasobów,\
|
mayTakeTime: "Ponieważ usuwanie konta jest procesem wymagającym dużej ilości zasobów,
|
||||||
\ jego ukończenie może zająć trochę czasu, w zależności od ilości utworzonej zawartości\
|
jego ukończenie może zająć trochę czasu, w zależności od ilości utworzonej zawartości
|
||||||
\ i liczby przesłanych plików."
|
i liczby przesłanych plików."
|
||||||
sendEmail: "Po zakończeniu usuwania konta na adres e-mail zarejestrowany na tym\
|
sendEmail: "Po zakończeniu usuwania konta na adres e-mail zarejestrowany na tym
|
||||||
\ koncie zostanie wysłana wiadomość e-mail."
|
koncie zostanie wysłana wiadomość e-mail."
|
||||||
requestAccountDelete: "Poproś o usunięcie konta"
|
requestAccountDelete: "Poproś o usunięcie konta"
|
||||||
started: "Usuwanie się rozpoczęło."
|
started: "Usuwanie się rozpoczęło."
|
||||||
inProgress: "Usuwanie jest obecnie w toku"
|
inProgress: "Usuwanie jest obecnie w toku"
|
||||||
|
@ -941,12 +940,12 @@ _ad:
|
||||||
back: "Wróć"
|
back: "Wróć"
|
||||||
reduceFrequencyOfThisAd: "Pokazuj tę reklamę rzadziej"
|
reduceFrequencyOfThisAd: "Pokazuj tę reklamę rzadziej"
|
||||||
_forgotPassword:
|
_forgotPassword:
|
||||||
enterEmail: "Wpisz adres e-mail użyty do rejestracji. Zostanie do niego wysłany\
|
enterEmail: "Wpisz adres e-mail użyty do rejestracji. Zostanie do niego wysłany
|
||||||
\ link, za pomocą którego możesz zresetować hasło."
|
link, za pomocą którego możesz zresetować hasło."
|
||||||
ifNoEmail: "Jeżeli nie podano adresu e-mail podczas rejestracji, skontaktuj się\
|
ifNoEmail: "Jeśli nie użyłeś adresu e-mail podczas rejestracji, skontaktuj się z
|
||||||
\ z administratorem zamiast tego."
|
administratorem serwera."
|
||||||
contactAdmin: "Jeżeli Twoja instancja nie obsługuje adresów e-mail, skontaktuj się\
|
contactAdmin: "Ten serwer nie obsługuje adresów e-mail, zamiast tego skontaktuj
|
||||||
\ zamiast tego z administratorem, aby zresetować hasło."
|
się z administratorem serwera, aby zresetować hasło."
|
||||||
_gallery:
|
_gallery:
|
||||||
my: "Moja galeria"
|
my: "Moja galeria"
|
||||||
liked: "Polubione wpisy"
|
liked: "Polubione wpisy"
|
||||||
|
@ -969,10 +968,10 @@ _preferencesBackups:
|
||||||
save: "Zapisz zmiany"
|
save: "Zapisz zmiany"
|
||||||
inputName: "Proszę podać nazwę dla tej kopii zapasowej"
|
inputName: "Proszę podać nazwę dla tej kopii zapasowej"
|
||||||
cannotSave: "Zapisanie nie powiodło się"
|
cannotSave: "Zapisanie nie powiodło się"
|
||||||
nameAlreadyExists: "Kopia zapasowa o nazwie \"{name}\" już istnieje. Proszę podać\
|
nameAlreadyExists: "Kopia zapasowa o nazwie \"{name}\" już istnieje. Proszę podać
|
||||||
\ inną nazwę."
|
inną nazwę."
|
||||||
applyConfirm: "Czy na pewno chcesz zastosować kopię zapasową \"{name}\" na tym urządzeniu?\
|
applyConfirm: "Czy na pewno chcesz zastosować kopię zapasową \"{name}\" na tym urządzeniu?
|
||||||
\ Istniejące ustawienia tego urządzenia zostaną nadpisane."
|
Istniejące ustawienia tego urządzenia zostaną nadpisane."
|
||||||
saveConfirm: "Zapisać kopię zapasową jako {name}?"
|
saveConfirm: "Zapisać kopię zapasową jako {name}?"
|
||||||
deleteConfirm: "Usunąć kopię zapasową {name}?"
|
deleteConfirm: "Usunąć kopię zapasową {name}?"
|
||||||
renameConfirm: "Zmienić nazwę kopii zapasowej z \"{old}\" na \"{new}\"?"
|
renameConfirm: "Zmienić nazwę kopii zapasowej z \"{old}\" na \"{new}\"?"
|
||||||
|
@ -989,15 +988,15 @@ _registry:
|
||||||
domain: "Domena"
|
domain: "Domena"
|
||||||
createKey: "Utwórz klucz"
|
createKey: "Utwórz klucz"
|
||||||
_aboutMisskey:
|
_aboutMisskey:
|
||||||
about: "Calckey jest forkiem Misskey utworzonym przez ThatOneCalculator, rozwijanym\
|
about: "Calckey jest forkiem Misskey utworzonym przez ThatOneCalculator, rozwijanym
|
||||||
\ od 2022."
|
od 2022."
|
||||||
contributors: "Główni twórcy"
|
contributors: "Główni twórcy"
|
||||||
allContributors: "Wszyscy twórcy"
|
allContributors: "Wszyscy twórcy"
|
||||||
source: "Kod źródłowy"
|
source: "Kod źródłowy"
|
||||||
translation: "Tłumacz Calckey"
|
translation: "Tłumacz Calckey"
|
||||||
donate: "Przekaż darowiznę na Calckey"
|
donate: "Przekaż darowiznę na Calckey"
|
||||||
morePatrons: "Naprawdę doceniam wsparcie ze strony wielu niewymienionych tu osób.\
|
morePatrons: "Naprawdę doceniam wsparcie ze strony wielu niewymienionych tu osób.
|
||||||
\ Dziękuję! \U0001F970"
|
Dziękuję! 🥰"
|
||||||
patrons: "Wspierający"
|
patrons: "Wspierający"
|
||||||
_nsfw:
|
_nsfw:
|
||||||
respect: "Ukrywaj media NSFW"
|
respect: "Ukrywaj media NSFW"
|
||||||
|
@ -1005,13 +1004,13 @@ _nsfw:
|
||||||
force: "Ukrywaj wszystkie media"
|
force: "Ukrywaj wszystkie media"
|
||||||
_mfm:
|
_mfm:
|
||||||
cheatSheet: "Ściąga MFM"
|
cheatSheet: "Ściąga MFM"
|
||||||
intro: "MFM jest językiem składniowym używanym przez m.in. Calckey, forki *key (w\
|
intro: "MFM jest językiem składniowym używanym przez m.in. Calckey, forki *key (w
|
||||||
\ tym Calckey), oraz Akkomę, który może być użyty w wielu miejscach. Tu znajdziesz\
|
tym Calckey), oraz Akkomę, który może być użyty w wielu miejscach. Tu znajdziesz
|
||||||
\ listę wszystkich możliwych elementów składni MFM."
|
listę wszystkich możliwych elementów składni MFM."
|
||||||
dummy: "Calckey rozszerza świat Fediwersum"
|
dummy: "Calckey rozszerza świat Fediwersum"
|
||||||
mention: "Wspomnij"
|
mention: "Wspomnij"
|
||||||
mentionDescription: "Używając znaku @ i nazwy użytkownika, możesz określić danego\
|
mentionDescription: "Używając znaku @ i nazwy użytkownika, możesz określić danego
|
||||||
\ użytkownika."
|
użytkownika."
|
||||||
hashtag: "Hashtag"
|
hashtag: "Hashtag"
|
||||||
hashtagDescription: "Używając kratki i tekstu, możesz określić hashtag."
|
hashtagDescription: "Używając kratki i tekstu, możesz określić hashtag."
|
||||||
url: "Adres URL"
|
url: "Adres URL"
|
||||||
|
@ -1026,14 +1025,14 @@ _mfm:
|
||||||
centerDescription: "Wyśrodkowuje zawartość."
|
centerDescription: "Wyśrodkowuje zawartość."
|
||||||
inlineCode: "Kod (w wierszu)"
|
inlineCode: "Kod (w wierszu)"
|
||||||
blockCode: "Kod (blok)"
|
blockCode: "Kod (blok)"
|
||||||
blockCodeDescription: "Wyświetla kod z podświetlaną składnią składający się z wielu\
|
blockCodeDescription: "Wyświetla kod z podświetlaną składnią składający się z wielu
|
||||||
\ linii."
|
linii."
|
||||||
blockMath: "Matematyka (Blok)"
|
blockMath: "Matematyka (Blok)"
|
||||||
quote: "Cytuj"
|
quote: "Cytuj"
|
||||||
quoteDescription: "Wyświetla treść jako cytat."
|
quoteDescription: "Wyświetla treść jako cytat."
|
||||||
emoji: "Niestandardowe emoji"
|
emoji: "Niestandardowe emoji"
|
||||||
emojiDescription: "Otaczając nazwę niestandardowego emoji dwukropkami, możesz użyć\
|
emojiDescription: "Otaczając nazwę niestandardowego emoji dwukropkami, możesz użyć
|
||||||
\ niestandardowego emoji."
|
niestandardowego emoji."
|
||||||
search: "Szukaj"
|
search: "Szukaj"
|
||||||
searchDescription: "Wyświetla pole wyszukiwania z wcześniej wpisanym tekstem."
|
searchDescription: "Wyświetla pole wyszukiwania z wcześniej wpisanym tekstem."
|
||||||
flip: "Odwróć"
|
flip: "Odwróć"
|
||||||
|
@ -1077,7 +1076,7 @@ _mfm:
|
||||||
background: Kolor tła
|
background: Kolor tła
|
||||||
backgroundDescription: Zmień kolor tła tekstu.
|
backgroundDescription: Zmień kolor tła tekstu.
|
||||||
foregroundDescription: Zmień kolor pierwszoplanowy tekstu.
|
foregroundDescription: Zmień kolor pierwszoplanowy tekstu.
|
||||||
positionDescription: Przesuń treść o określoną odległość.
|
positionDescription: Przesuń zawartość o określoną wartość.
|
||||||
position: Pozycjonuj
|
position: Pozycjonuj
|
||||||
foreground: Kolor pierwszoplanowy
|
foreground: Kolor pierwszoplanowy
|
||||||
scaleDescription: Skaluj treść o określoną wielkość.
|
scaleDescription: Skaluj treść o określoną wielkość.
|
||||||
|
@ -1154,8 +1153,8 @@ _theme:
|
||||||
darken: "Ściemnij"
|
darken: "Ściemnij"
|
||||||
lighten: "Rozjaśnij"
|
lighten: "Rozjaśnij"
|
||||||
inputConstantName: "Wprowadź nazwę stałej"
|
inputConstantName: "Wprowadź nazwę stałej"
|
||||||
importInfo: "Jeżeli wprowadzisz tu kod motywu, możesz zaimportować go w edytorze\
|
importInfo: "Jeżeli wprowadzisz tu kod motywu, możesz zaimportować go w edytorze
|
||||||
\ motywu"
|
motywu"
|
||||||
deleteConstantConfirm: "Czy na pewno chcesz usunąć stałą {const}?"
|
deleteConstantConfirm: "Czy na pewno chcesz usunąć stałą {const}?"
|
||||||
keys:
|
keys:
|
||||||
accent: "Akcent"
|
accent: "Akcent"
|
||||||
|
@ -1229,42 +1228,42 @@ _tutorial:
|
||||||
step1_1: "Witamy!"
|
step1_1: "Witamy!"
|
||||||
step1_2: "Pozwól, że Cię skonfigurujemy. Będziesz działać w mgnieniu oka!"
|
step1_2: "Pozwól, że Cię skonfigurujemy. Będziesz działać w mgnieniu oka!"
|
||||||
step2_1: "Najpierw, proszę wypełnij swój profil."
|
step2_1: "Najpierw, proszę wypełnij swój profil."
|
||||||
step2_2: "Podanie kilku informacji o tym, kim jesteś, ułatwi innym stwierdzenie,\
|
step2_2: "Podanie kilku informacji o tym, kim jesteś, ułatwi innym stwierdzenie,
|
||||||
\ czy chcą zobaczyć Twoje wpisy lub śledzić Cię."
|
czy chcą zobaczyć Twoje wpisy lub śledzić Cię."
|
||||||
step3_1: "Pora znaleźć osoby do śledzenia!"
|
step3_1: "Pora znaleźć osoby do śledzenia!"
|
||||||
step3_2: "Twoje domowe i społeczne linie czasu opierają się na tym, kogo śledzisz,\
|
step3_2: "Twoje domowe i społeczne linie czasu opierają się na tym, kogo śledzisz,
|
||||||
\ więc spróbuj śledzić kilka kont, aby zacząć.\nKliknij kółko z plusem w prawym\
|
więc spróbuj śledzić kilka kont, aby zacząć.\nKliknij kółko z plusem w prawym
|
||||||
\ górnym rogu profilu, aby go śledzić."
|
górnym rogu profilu, aby go śledzić."
|
||||||
step4_1: "Pozwól, że zabierzemy Cię tam."
|
step4_1: "Pozwól, że zabierzemy Cię tam."
|
||||||
step4_2: "W pierwszym wpisie możesz się przedstawić lub wysłać powitanie - \"Witaj,\
|
step4_2: "W pierwszym wpisie możesz się przedstawić lub wysłać powitanie - \"Witaj,
|
||||||
\ świecie!\""
|
świecie!\""
|
||||||
step5_1: "Osie czasu, wszędzie widzę osie czasu!"
|
step5_1: "Osie czasu, wszędzie widzę osie czasu!"
|
||||||
step5_2: "Twoja instancja ma włączone {timelines} różne osie czasu."
|
step5_2: "Twoja instancja ma włączone {timelines} różne osie czasu."
|
||||||
step5_3: "Główna {icon} oś czasu to miejsce, w którym możesz zobaczyć posty od użytkowników\
|
step5_3: "Główna {icon} oś czasu to miejsce, w którym możesz zobaczyć posty od użytkowników
|
||||||
\ których obserwujesz, oraz innych użytkowników z tej instancji. Jeśli wolisz,\
|
których obserwujesz, oraz innych użytkowników z tej instancji. Jeśli wolisz, by
|
||||||
\ by główna oś czasu pokazywała tylko posty od użytkowników których obserwujesz,\
|
główna oś czasu pokazywała tylko posty od użytkowników których obserwujesz, możesz
|
||||||
\ możesz łatwo to zmienić w ustawieniach!"
|
łatwo to zmienić w ustawieniach!"
|
||||||
step5_4: "Lokalna {icon} oś czasu to miejsce, w którym możesz zobaczyć posty od\
|
step5_4: "Lokalna {icon} oś czasu to miejsce, w którym możesz zobaczyć posty od
|
||||||
\ wszystkich innych osób na tej instancji."
|
wszystkich innych osób na tej instancji."
|
||||||
step5_5: "Społeczna {icon} oś czasu to miejsce, gdzie możesz zobaczyć posty z instancji,\
|
step5_5: "Społeczna {icon} oś czasu to miejsce, gdzie możesz zobaczyć posty z instancji,
|
||||||
\ które admini polecają."
|
które admini polecają."
|
||||||
step5_6: "Polecana {icon} oś czasu to miejsce, gdzie możesz zobaczyć posty z instancji,\
|
step5_6: "Polecana {icon} oś czasu to miejsce, gdzie możesz zobaczyć posty z instancji,
|
||||||
\ które admini polecają."
|
które admini polecają."
|
||||||
step5_7: "Globalna {icon} oś czasu to miejsce, gdzie możesz zobaczyć posty z każdej\
|
step5_7: "Globalna {icon} oś czasu to miejsce, gdzie możesz zobaczyć posty z każdej
|
||||||
\ innej połączonej instancji."
|
innej połączonej instancji."
|
||||||
step6_1: "Więc, czym to jest to miejsce?"
|
step6_1: "Więc, czym to jest to miejsce?"
|
||||||
step6_2: "Cóż, nie dołączył*ś po prostu do Calckey. Dołączył*ś do portalu do Fediverse,\
|
step6_2: "Cóż, nie dołączył*ś po prostu do Calckey. Dołączył*ś do portalu do Fediverse,
|
||||||
\ połączonej sieci tysięcy serwerów, zwanych instancjami."
|
połączonej sieci tysięcy serwerów, zwanych instancjami."
|
||||||
step6_3: "Każdy serwer działa w inny sposób, i nie wszystkie serwery używają Calckey.\
|
step6_3: "Każdy serwer działa w inny sposób, i nie wszystkie serwery używają Calckey.
|
||||||
\ Ten jednak używa! Jest to trochę skomplikowane, ale w krótkim czasie załapiesz\
|
Ten jednak używa! Jest to trochę skomplikowane, ale w krótkim czasie załapiesz
|
||||||
\ o co chodzi."
|
o co chodzi."
|
||||||
step6_4: "A teraz idź, odkrywaj i baw się dobrze!"
|
step6_4: "A teraz idź, odkrywaj i baw się dobrze!"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "Zarejestrowałeś już urządzenie do uwierzytelniania dwuskładnikowego."
|
alreadyRegistered: "Zarejestrowałeś już urządzenie do uwierzytelniania dwuskładnikowego."
|
||||||
registerDevice: "Zarejestruj nowe urządzenie"
|
registerTOTP: "Zarejestruj nowe urządzenie"
|
||||||
registerKey: "Zarejestruj klucz bezpieczeństwa"
|
registerSecurityKey: "Zarejestruj klucz bezpieczeństwa"
|
||||||
step1: "Najpierw, zainstaluj aplikację uwierzytelniającą (taką jak {a} lub {b})\
|
step1: "Najpierw, zainstaluj aplikację uwierzytelniającą (taką jak {a} lub {b})
|
||||||
\ na swoim urządzeniu."
|
na swoim urządzeniu."
|
||||||
step2: "Następnie, zeskanuje kod QR z ekranu."
|
step2: "Następnie, zeskanuje kod QR z ekranu."
|
||||||
step3: "Wprowadź token podany w aplikacji, aby ukończyć konfigurację."
|
step3: "Wprowadź token podany w aplikacji, aby ukończyć konfigurację."
|
||||||
step4: "Od teraz, przy każdej próbie logowania otrzymasz prośbę o token logowania."
|
step4: "Od teraz, przy każdej próbie logowania otrzymasz prośbę o token logowania."
|
||||||
|
@ -1404,8 +1403,8 @@ _profile:
|
||||||
youCanIncludeHashtags: "Możesz umieścić hashtagi w swoim opisie."
|
youCanIncludeHashtags: "Możesz umieścić hashtagi w swoim opisie."
|
||||||
metadata: "Dodatkowe informacje"
|
metadata: "Dodatkowe informacje"
|
||||||
metadataEdit: "Edytuj dodatkowe informacje"
|
metadataEdit: "Edytuj dodatkowe informacje"
|
||||||
metadataDescription: "Możesz wyświetlać do czterech sekcji dodatkowych informacji\
|
metadataDescription: "Możesz wyświetlać do czterech sekcji dodatkowych informacji
|
||||||
\ na swoim profilu."
|
na swoim profilu."
|
||||||
metadataLabel: "Etykieta"
|
metadataLabel: "Etykieta"
|
||||||
metadataContent: "Treść"
|
metadataContent: "Treść"
|
||||||
changeAvatar: "Zmień awatar"
|
changeAvatar: "Zmień awatar"
|
||||||
|
@ -1815,12 +1814,12 @@ objectStorageSetPublicRead: Ustaw "public-read" podczas wysyłania
|
||||||
removeAllFollowing: Przestań obserwować wszystkich obserwowanych użytkowników
|
removeAllFollowing: Przestań obserwować wszystkich obserwowanych użytkowników
|
||||||
smtpSecure: Użyj implicit SSL/TLS dla połączeń SMTP
|
smtpSecure: Użyj implicit SSL/TLS dla połączeń SMTP
|
||||||
secureMode: Tryb bezpieczny (Authorized Fetch)
|
secureMode: Tryb bezpieczny (Authorized Fetch)
|
||||||
instanceSecurity: Bezpieczeństwo instancji
|
instanceSecurity: Bezpieczeństwo serwera
|
||||||
privateMode: Tryb prywatny
|
privateMode: Tryb prywatny
|
||||||
allowedInstances: Dopuszczone instancje
|
allowedInstances: Dopuszczone serwery
|
||||||
recommended: Polecane
|
recommended: Polecane
|
||||||
allowedInstancesDescription: Hosty instancji które mają być dopuszczone do federacji,
|
allowedInstancesDescription: Hosty serwerów, które mają być dopuszczone do federacji,
|
||||||
każdy separowany nową linią (dotyczy tylko trybu prywatnego).
|
każdy oddzielony nowym wierszem (dotyczy tylko trybu prywatnego).
|
||||||
seperateRenoteQuote: Oddziel przyciski podbicia i cytowania
|
seperateRenoteQuote: Oddziel przyciski podbicia i cytowania
|
||||||
refreshInterval: 'Częstotliwość aktualizacji '
|
refreshInterval: 'Częstotliwość aktualizacji '
|
||||||
slow: Wolna
|
slow: Wolna
|
||||||
|
@ -1846,34 +1845,34 @@ moveToLabel: 'Konto na które się przenosisz:'
|
||||||
moveAccount: Przenieś konto!
|
moveAccount: Przenieś konto!
|
||||||
moveAccountDescription: Ten proces jest nieodwracalny. Upewnij się, że utworzył*ś
|
moveAccountDescription: Ten proces jest nieodwracalny. Upewnij się, że utworzył*ś
|
||||||
alias dla tego konta na nowym koncie, przed rozpoczęciem. Proszę wpisz tag konta
|
alias dla tego konta na nowym koncie, przed rozpoczęciem. Proszę wpisz tag konta
|
||||||
w formacie @person@instance.com
|
w formacie @osoba@serwer.com
|
||||||
moveFrom: Przejdź ze starego konta na obecne
|
moveFrom: Przejdź ze starego konta na obecne
|
||||||
moveFromLabel: 'Konto które przenosisz:'
|
moveFromLabel: 'Konto które przenosisz:'
|
||||||
showUpdates: Pokaż pop-up po aktualizacji Calckey
|
showUpdates: Pokaż pop-up po aktualizacji Calckey
|
||||||
swipeOnDesktop: Zezwól na przeciąganie w stylu mobilnym na desktopie
|
swipeOnDesktop: Zezwól na przeciąganie w stylu mobilnym na desktopie
|
||||||
moveFromDescription: To utworzy alias twojego starego konta, w celu umożliwienia migracji
|
moveFromDescription: To utworzy alias twojego starego konta, w celu umożliwienia migracji
|
||||||
z tamtego konta na to. Zrób to ZANIM rozpoczniesz przenoszenie się z tamtego konta.
|
z tamtego konta na to. Zrób to ZANIM rozpoczniesz przenoszenie się z tamtego konta.
|
||||||
Proszę wpisz tag konta w formacie @person@instance.com
|
Proszę wpisz tag konta w formacie @osoba@serwer.com
|
||||||
migrationConfirm: "Czy jesteś absolutnie pewn* tego, że chcesz przenieść swoje konto\
|
migrationConfirm: "Czy jesteś absolutnie pewn* tego, że chcesz przenieść swoje konto
|
||||||
\ na {account}? Tego działania nie można odwrócić. Nieodwracalnie stracisz możliwość\
|
na {account}? Tego działania nie można odwrócić. Nieodwracalnie stracisz możliwość
|
||||||
\ normalnego korzystania z konta.\nUpewnij się, że to konto zostało ustawione jako\
|
normalnego korzystania z konta.\nUpewnij się, że to konto zostało ustawione jako
|
||||||
\ konto z którego się przenosisz."
|
konto z którego się przenosisz."
|
||||||
noThankYou: Nie, dziękuję
|
noThankYou: Nie, dziękuję
|
||||||
addInstance: Dodaj instancję
|
addInstance: Dodaj serwer
|
||||||
renoteMute: Wycisz podbicia
|
renoteMute: Wycisz podbicia
|
||||||
renoteUnmute: Odcisz podbicia
|
renoteUnmute: Odcisz podbicia
|
||||||
flagSpeakAsCat: Mów jak kot
|
flagSpeakAsCat: Mów jak kot
|
||||||
flagSpeakAsCatDescription: Twoje posty zostaną znya-izowane, gdy w trybie kota
|
flagSpeakAsCatDescription: Twoje posty zostaną znya-izowane, gdy w trybie kota
|
||||||
selectInstance: Wybierz instancję
|
selectInstance: Wybierz serwer
|
||||||
noInstances: Brak instancji
|
noInstances: Brak serwerów
|
||||||
keepOriginalUploadingDescription: Zapisuje oryginalne zdjęcie. Jeśli wyłączone, wersja
|
keepOriginalUploadingDescription: Zapisuje oryginalne zdjęcie. Jeśli wyłączone, wersja
|
||||||
do wyświetlania w sieci zostanie wygenerowana podczas wysłania.
|
do wyświetlania w sieci zostanie wygenerowana podczas wysłania.
|
||||||
antennaInstancesDescription: Wypisz jednego hosta instancji na linię
|
antennaInstancesDescription: Wymień jeden host serwera w każdym wierszu
|
||||||
regexpError: Błąd regularnego wyrażenia
|
regexpError: Błąd regularnego wyrażenia
|
||||||
regexpErrorDescription: 'Wystąpił błąd w regularnym wyrażeniu znajdującym się w linijce
|
regexpErrorDescription: 'Wystąpił błąd w regularnym wyrażeniu znajdującym się w linijce
|
||||||
{line} Twoich {tab} wyciszeń słownych:'
|
{line} Twoich {tab} wyciszeń słownych:'
|
||||||
forwardReportIsAnonymous: Zamiast Twojego konta, anonimowe konto systemowe zostanie
|
forwardReportIsAnonymous: Zamiast twojego konta, anonimowe konto systemowe będzie
|
||||||
wyświetlone na zdalnej instancji jako zgłaszający.
|
wyświetlane jako zgłaszający na zdalnym serwerze.
|
||||||
breakFollowConfirm: Czy na pewno chcesz usunąć obserwującego?
|
breakFollowConfirm: Czy na pewno chcesz usunąć obserwującego?
|
||||||
instanceDefaultThemeDescription: Wpisz kod motywu w formacie obiektowym.
|
instanceDefaultThemeDescription: Wpisz kod motywu w formacie obiektowym.
|
||||||
mutePeriod: Długość wyciszenia
|
mutePeriod: Długość wyciszenia
|
||||||
|
@ -1887,7 +1886,7 @@ pushNotification: Powiadomienia push
|
||||||
subscribePushNotification: Włącz powiadomienia push
|
subscribePushNotification: Włącz powiadomienia push
|
||||||
unsubscribePushNotification: Wyłącz powiadomienia push
|
unsubscribePushNotification: Wyłącz powiadomienia push
|
||||||
pushNotificationAlreadySubscribed: Powiadomienia push są już włączone
|
pushNotificationAlreadySubscribed: Powiadomienia push są już włączone
|
||||||
pushNotificationNotSupported: Twoja przeglądarka lub instancja nie obsługuje powiadomień
|
pushNotificationNotSupported: Twoja przeglądarka lub serwer nie obsługuje powiadomień
|
||||||
push
|
push
|
||||||
sendPushNotificationReadMessage: Usuń powiadomienia push, gdy odpowiednie powiadomienia
|
sendPushNotificationReadMessage: Usuń powiadomienia push, gdy odpowiednie powiadomienia
|
||||||
lub wiadomości zostaną odczytane
|
lub wiadomości zostaną odczytane
|
||||||
|
@ -1912,21 +1911,20 @@ proxyAccountDescription: Konto proxy jest kontem które w określonych sytuacjac
|
||||||
do listy, oraz żaden lokalny użytkownik nie obserwuje tego konta, aktywność owego
|
do listy, oraz żaden lokalny użytkownik nie obserwuje tego konta, aktywność owego
|
||||||
użytkownika nie zostanie dostarczona na oś czasu. W takim razie, użytkownika zaobserwuje
|
użytkownika nie zostanie dostarczona na oś czasu. W takim razie, użytkownika zaobserwuje
|
||||||
konto proxy.
|
konto proxy.
|
||||||
objectStorageBaseUrlDesc: "URL stosowany jako odniesienie. Podaj URL twojego CDN,\
|
objectStorageBaseUrlDesc: "URL stosowany jako odniesienie. Podaj URL twojego CDN,
|
||||||
\ albo proxy, jeśli używasz któregokolwiek.\nDla S3 użyj 'https://<bucket>.s3.amazonaws.com',\
|
albo proxy, jeśli używasz któregokolwiek.\nDla S3 użyj 'https://<bucket>.s3.amazonaws.com',
|
||||||
\ a dla GCS i jego odpowiedników użyj 'https://storage.googleapis.com/<bucket>',\
|
a dla GCS i jego odpowiedników użyj 'https://storage.googleapis.com/<bucket>', itd."
|
||||||
\ itd."
|
sendErrorReportsDescription: "Gdy ta opcja jest włączona, szczegółowe informacje o
|
||||||
sendErrorReportsDescription: "Gdy ta opcja jest włączona, szczegółowe informacje o\
|
błędach będą udostępnianie z Calckey gdy wystąpi problem, pomagając w ulepszaniu
|
||||||
\ błędach będą udostępnianie z Calckey gdy wystąpi problem, pomagając w ulepszaniu\
|
Calckey.\nZawrze to informacje takie jak wersja twojego systemu operacyjnego, przeglądarki,
|
||||||
\ Calckey.\nZawrze to informacje takie jak wersja twojego systemu operacyjnego,\
|
Twoja aktywność na Calckey itd."
|
||||||
\ przeglądarki, Twoja aktywność na Calckey itd."
|
privateModeInfo: Gdy ta opcja jest włączona, tylko serwery z białej listy mogą federować
|
||||||
privateModeInfo: Jeśli włączone, tylko dopuszczone instancje będą mogły federować
|
się z twoim serwerem. Wszystkie posty będą ukryte publicznie.
|
||||||
z Twoją instancją. Wszystkie posty będą jedynie widoczne na Twojej instancji.
|
|
||||||
oneHour: Godzina
|
oneHour: Godzina
|
||||||
oneDay: Dzień
|
oneDay: Dzień
|
||||||
oneWeek: Tydzień
|
oneWeek: Tydzień
|
||||||
recommendedInstances: Polecane instancje
|
recommendedInstances: Polecane serwery
|
||||||
recommendedInstancesDescription: Polecane instancje, mające pojawić się w odpowiedniej
|
recommendedInstancesDescription: Polecane serwery, mające pojawić się w odpowiedniej
|
||||||
osi czasu, oddzielane nowymi liniami. NIE dodawaj “https://”, TYLKO samą domenę.
|
osi czasu, oddzielane nowymi liniami. NIE dodawaj “https://”, TYLKO samą domenę.
|
||||||
rateLimitExceeded: Przekroczono ratelimit
|
rateLimitExceeded: Przekroczono ratelimit
|
||||||
cropImage: Kadruj zdjęcie
|
cropImage: Kadruj zdjęcie
|
||||||
|
@ -1936,7 +1934,9 @@ noEmailServerWarning: Serwer email nie jest skonfigurowany.
|
||||||
thereIsUnresolvedAbuseReportWarning: Istnieją nierozwiązane zgłoszenia.
|
thereIsUnresolvedAbuseReportWarning: Istnieją nierozwiązane zgłoszenia.
|
||||||
check: Sprawdź
|
check: Sprawdź
|
||||||
driveCapOverrideLabel: Zmień pojemność dysku dla tego użytkownika
|
driveCapOverrideLabel: Zmień pojemność dysku dla tego użytkownika
|
||||||
isSystemAccount: Konto założone i automatycznie zarządzane przez system.
|
isSystemAccount: To konto jest tworzone i automatycznie obsługiwane przez system.
|
||||||
|
Nie moderuj, nie edytuj, nie usuwaj, ani w żaden inny sposób nie ingeruj w to konto,
|
||||||
|
bowiem może to uszkodzić twój serwer.
|
||||||
typeToConfirm: Wpisz {x} by potwierdzić
|
typeToConfirm: Wpisz {x} by potwierdzić
|
||||||
deleteAccount: Usuń konto
|
deleteAccount: Usuń konto
|
||||||
document: Dokumentacja
|
document: Dokumentacja
|
||||||
|
@ -1982,34 +1982,51 @@ customKaTeXMacroDescription: 'Skonfiguruj makra, aby łatwo pisać wyrażenia ma
|
||||||
nie można przerwać linii w środku definicji. Nieprawidłowe linie są po prostu ignorowane.
|
nie można przerwać linii w środku definicji. Nieprawidłowe linie są po prostu ignorowane.
|
||||||
Obsługiwane są tylko proste funkcje podstawiania łańcuchów; nie można tu stosować
|
Obsługiwane są tylko proste funkcje podstawiania łańcuchów; nie można tu stosować
|
||||||
zaawansowanej składni, takiej jak warunkowe rozgałęzienia.'
|
zaawansowanej składni, takiej jak warunkowe rozgałęzienia.'
|
||||||
secureModeInfo: Nie odsyłaj bez dowodu przy żądaniu z innych instancji.
|
secureModeInfo: W przypadku żądań z innych serwerów nie odsyłaj bez dowodu.
|
||||||
preferencesBackups: Kopie zapasowe ustawień
|
preferencesBackups: Kopie zapasowe ustawień
|
||||||
undeck: Opuść tablicę
|
undeck: Opuść tablicę
|
||||||
reporter: Osoba zgłaszająca
|
reporter: Osoba zgłaszająca
|
||||||
instanceDefaultDarkTheme: Domyślny ciemny motyw instancji
|
instanceDefaultDarkTheme: Domyślny ciemny motyw serwera
|
||||||
lastCommunication: Ostatnie połączenie
|
lastCommunication: Ostatnie połączenie
|
||||||
emailRequiredForSignup: Wymagaj adresu email przy rejestracji
|
emailRequiredForSignup: Wymagaj adresu email przy rejestracji
|
||||||
themeColor: Kolor znacznika instancji
|
themeColor: Kolor znacznika serwera
|
||||||
instanceDefaultLightTheme: Domyślny jasny motyw instancji
|
instanceDefaultLightTheme: Domyślny jasny motyw serwera
|
||||||
enableEmojiReactions: Włącz reakcje emoji
|
enableEmojiReactions: Włącz reakcje emoji
|
||||||
showEmojisInReactionNotifications: Pokazuj emoji w powiadomieniach reakcyjnych
|
showEmojisInReactionNotifications: Pokazuj emoji w powiadomieniach reakcyjnych
|
||||||
apps: Aplikacje
|
apps: Aplikacje
|
||||||
silenceThisInstance: Wycisz tę instancję
|
silenceThisInstance: Wycisz ten serwer
|
||||||
silencedInstances: Wyciszone instancje
|
silencedInstances: Wyciszone serwery
|
||||||
deleted: Usunięte
|
deleted: Usunięte
|
||||||
editNote: Edytuj wpis
|
editNote: Edytuj wpis
|
||||||
edited: Edytowany
|
edited: 'Edytowano o {date} {time}'
|
||||||
silenced: Wyciszony
|
silenced: Wyciszony
|
||||||
findOtherInstance: Znajdź inny serwer
|
findOtherInstance: Znajdź inny serwer
|
||||||
userSaysSomethingReasonReply: '{name} odpowiedział na wpis zawierający {reason}'
|
userSaysSomethingReasonReply: '{name} odpowiedział na wpis zawierający {reason}'
|
||||||
userSaysSomethingReasonRenote: '{name} podbił post zawierający {reason}'
|
userSaysSomethingReasonRenote: '{name} podbił post zawierający {reason}'
|
||||||
signupsDisabled: Rejestracja na tym serwerze jest obecnie zamknięta, ale zawsze możesz
|
signupsDisabled: Rejestracja na tym serwerze jest obecnie zamknięta, ale zawsze możesz
|
||||||
się zapisać na innym! Jeśli masz kod zaproszeniowy na ten serwer, wpisz go poniżej.
|
zarejestrować się na innym serwerze! Jeśli masz kod zaproszenia na ten serwer, wpisz
|
||||||
|
go poniżej.
|
||||||
userSaysSomethingReasonQuote: '{name} zacytował wpis zawierający {reason}'
|
userSaysSomethingReasonQuote: '{name} zacytował wpis zawierający {reason}'
|
||||||
silencedInstancesDescription: Wymień nazwy domenowe instancji, które chcesz wyciszyć.
|
silencedInstancesDescription: Wypisz nazwy hostów serwerów, które chcesz wyciszyć.
|
||||||
Profile w wyciszonych instancjach są traktowane jako "Wyciszony", mogą jedynie wysyłać
|
Konta na wymienionych serwerach są traktowane jako "Wyciszone", mogą jedynie wysyłać
|
||||||
prośby obserwacji, i nie mogą oznaczać w wzmiankach profili lokalnych jeśli nie
|
prośby obserwacji i nie mogą oznaczać we wzmiankach profili lokalnych jeśli nie
|
||||||
są obserwowane. To nie będzie miało wpływu na zablokowane instancje.
|
są obserwowane. To nie będzie miało wpływu na zablokowane serwery.
|
||||||
cannotUploadBecauseExceedsFileSizeLimit: Ten plik nie mógł być przesłany, ponieważ
|
cannotUploadBecauseExceedsFileSizeLimit: Ten plik nie mógł być przesłany, ponieważ
|
||||||
jego wielkość przekracza dozwolony limit.
|
jego wielkość przekracza dozwolony limit.
|
||||||
sendModMail: Wyślij Powiadomienie Moderacyjne
|
sendModMail: Wyślij Powiadomienie Moderacyjne
|
||||||
|
searchPlaceholder: Szukaj Calckey
|
||||||
|
jumpToPrevious: Przejdź do poprzedniej sekcji
|
||||||
|
listsDesc: Listy umożliwiają tworzenie osi czasu z określonymi użytkownikami. Dostęp
|
||||||
|
do nich można uzyskać na stronie osi czasu.
|
||||||
|
accessibility: Dostępność
|
||||||
|
selectChannel: Wybierz kanał
|
||||||
|
antennasDesc: "Anteny wyświetlają nowe posty spełniające ustawione przez Ciebie kryteria!\n
|
||||||
|
Dostęp do nich można uzyskać ze strony osi czasu."
|
||||||
|
expandOnNoteClick: Otwórz post przy kliknięciu
|
||||||
|
expandOnNoteClickDesc: Jeśli opcja ta jest wyłączona, nadal będzie można otwierać
|
||||||
|
posty w menu po kliknięciu prawym przyciskiem myszy lub klikając znacznik czasowy.
|
||||||
|
channelFederationWarn: Kanały nie są jeszcze federowane z innymi serwerami
|
||||||
|
newer: nowsze
|
||||||
|
older: starsze
|
||||||
|
cw: Ostrzeżenie zawartości
|
||||||
|
removeReaction: Usuń reakcję
|
||||||
|
|
|
@ -0,0 +1,87 @@
|
||||||
|
username: Nome de usuário
|
||||||
|
ok: OK
|
||||||
|
_lang_: Inglês
|
||||||
|
headlineMisskey: Uma plataforma de mídia social descentralizada e de código aberto
|
||||||
|
que é gratuita para sempre! 🚀
|
||||||
|
search: Pesquisar
|
||||||
|
gotIt: Entendi!
|
||||||
|
introMisskey: Bem vinde! Calckey é uma plataforma de mídia social descentralizada
|
||||||
|
e de código aberto que é gratuita para sempre! 🚀
|
||||||
|
searchPlaceholder: Pesquise no Calckey
|
||||||
|
notifications: Notificações
|
||||||
|
password: Senha
|
||||||
|
forgotPassword: Esqueci a senha
|
||||||
|
cancel: Cancelar
|
||||||
|
noThankYou: Não, obrigade
|
||||||
|
save: Salvar
|
||||||
|
enterUsername: Insira nome de usuário
|
||||||
|
cw: Aviso de conteúdo
|
||||||
|
driveFileDeleteConfirm: Tem a certeza de que pretende apagar o arquivo "{name}"? O
|
||||||
|
arquivo será removido de todas as mensagens que o contenham como anexo.
|
||||||
|
deleteAndEdit: Deletar e editar
|
||||||
|
import: Importar
|
||||||
|
exportRequested: Você pediu uma exportação. Isso pode demorar um pouco. Será adicionado
|
||||||
|
ao seu Drive quando for completo.
|
||||||
|
note: Postar
|
||||||
|
notes: Postagens
|
||||||
|
deleteAndEditConfirm: Você tem certeza que quer deletar esse post e edita-lo? Você
|
||||||
|
vai perder todas as reações, impulsionamentos e respostas dele.
|
||||||
|
showLess: Fechar
|
||||||
|
importRequested: Você requisitou uma importação. Isso pode demorar um pouco.
|
||||||
|
listsDesc: Listas deixam você criar linhas do tempo com usuários específicos. Elas
|
||||||
|
podem ser acessadas pela página de linhas do tempo.
|
||||||
|
edited: 'Editado às {date} {time}'
|
||||||
|
sendMessage: Enviar uma mensagem
|
||||||
|
older: antigo
|
||||||
|
createList: Criar lista
|
||||||
|
loadMore: Carregar mais
|
||||||
|
mentions: Menções
|
||||||
|
importAndExport: Importar/Exportar Dados
|
||||||
|
files: Arquivos
|
||||||
|
lists: Listas
|
||||||
|
manageLists: Gerenciar listas
|
||||||
|
error: Erro
|
||||||
|
somethingHappened: Ocorreu um erro
|
||||||
|
retry: Tentar novamente
|
||||||
|
renotedBy: Impulsionado por {user}
|
||||||
|
noNotes: Nenhum post
|
||||||
|
noNotifications: Nenhuma notificação
|
||||||
|
instance: Servidor
|
||||||
|
settings: Configurações
|
||||||
|
basicSettings: Configurações Básicas
|
||||||
|
otherSettings: Outras Configurações
|
||||||
|
openInWindow: Abrir em janela
|
||||||
|
profile: Perfil
|
||||||
|
noAccountDescription: Esse usuário ainda não escreveu sua bio.
|
||||||
|
login: Entrar
|
||||||
|
loggingIn: Entrando
|
||||||
|
logout: Sair
|
||||||
|
signup: Criar conta
|
||||||
|
uploading: Enviando...
|
||||||
|
users: Usuários
|
||||||
|
addUser: Adicione um usuário
|
||||||
|
addInstance: Adicionar um servidor
|
||||||
|
cantFavorite: Não foi possível adicionar aos marcadores.
|
||||||
|
pin: Fixar no perfil
|
||||||
|
unpin: Desfixar do perfil
|
||||||
|
copyContent: Copiar conteúdos
|
||||||
|
copyLink: Copiar link
|
||||||
|
delete: Deletar
|
||||||
|
deleted: Deletado
|
||||||
|
editNote: Editar anotação
|
||||||
|
addToList: Adicionar a lista
|
||||||
|
copyUsername: Copiar nome de usuário
|
||||||
|
searchUser: Procurar por um usuário
|
||||||
|
reply: Responder
|
||||||
|
jumpToPrevious: Pular para o anterior
|
||||||
|
showMore: Mostrar mais
|
||||||
|
newer: novo
|
||||||
|
youGotNewFollower: seguiu você
|
||||||
|
mention: Mencionar
|
||||||
|
directNotes: Mensagens diretas
|
||||||
|
export: Exportar
|
||||||
|
unfollowConfirm: Você tem certez que deseja para de seguir {name}?
|
||||||
|
noLists: Você não possui nenhuma lista
|
||||||
|
following: Seguindo
|
||||||
|
followers: Seguidores
|
||||||
|
followsYou: Segue você
|
|
@ -1249,8 +1249,8 @@ _tutorial:
|
||||||
step6_4: "Теперь идите, изучайте и развлекайтесь!"
|
step6_4: "Теперь идите, изучайте и развлекайтесь!"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "Двухфакторная аутентификация уже настроена."
|
alreadyRegistered: "Двухфакторная аутентификация уже настроена."
|
||||||
registerDevice: "Зарегистрируйте ваше устройство"
|
registerTOTP: "Зарегистрируйте ваше устройство"
|
||||||
registerKey: "Зарегистрировать ключ"
|
registerSecurityKey: "Зарегистрировать ключ"
|
||||||
step1: "Прежде всего, установите на устройство приложение для аутентификации, например,\
|
step1: "Прежде всего, установите на устройство приложение для аутентификации, например,\
|
||||||
\ {a} или {b}."
|
\ {a} или {b}."
|
||||||
step2: "Далее отсканируйте отображаемый QR-код при помощи приложения."
|
step2: "Далее отсканируйте отображаемый QR-код при помощи приложения."
|
||||||
|
@ -1987,5 +1987,5 @@ apps: Приложения
|
||||||
silenceThisInstance: Заглушить инстанс
|
silenceThisInstance: Заглушить инстанс
|
||||||
silencedInstances: Заглушенные инстансы
|
silencedInstances: Заглушенные инстансы
|
||||||
editNote: Редактировать заметку
|
editNote: Редактировать заметку
|
||||||
edited: Редактировано
|
edited: 'Редактировано в {date} {time}'
|
||||||
deleted: Удалённое
|
deleted: Удалённое
|
||||||
|
|
|
@ -1196,8 +1196,8 @@ _tutorial:
|
||||||
step6_4: "Now go, explore, and have fun!"
|
step6_4: "Now go, explore, and have fun!"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "Už ste zaregistrovali 2-faktorové autentifikačné zariadenie."
|
alreadyRegistered: "Už ste zaregistrovali 2-faktorové autentifikačné zariadenie."
|
||||||
registerDevice: "Registrovať nové zariadenie"
|
registerTOTP: "Registrovať nové zariadenie"
|
||||||
registerKey: "Registrovať bezpečnostný kľúč"
|
registerSecurityKey: "Registrovať bezpečnostný kľúč"
|
||||||
step1: "Najprv si nainštalujte autentifikačnú aplikáciu (napríklad {a} alebo {b}) na svoje zariadenie."
|
step1: "Najprv si nainštalujte autentifikačnú aplikáciu (napríklad {a} alebo {b}) na svoje zariadenie."
|
||||||
step2: "Potom, naskenujte QR kód zobrazený na obrazovke."
|
step2: "Potom, naskenujte QR kód zobrazený na obrazovke."
|
||||||
step2Url: "Do aplikácie zadajte nasledujúcu URL adresu:"
|
step2Url: "Do aplikácie zadajte nasledujúcu URL adresu:"
|
||||||
|
|
|
@ -959,7 +959,7 @@ _tutorial:
|
||||||
step6_3: "Кожен сервер працює по-своєму, і не на всіх серверах працює Calckey. Але цей працює! Це трохи складно, але ви швидко розберетеся"
|
step6_3: "Кожен сервер працює по-своєму, і не на всіх серверах працює Calckey. Але цей працює! Це трохи складно, але ви швидко розберетеся"
|
||||||
step6_4: "Тепер ідіть, вивчайте і розважайтеся!"
|
step6_4: "Тепер ідіть, вивчайте і розважайтеся!"
|
||||||
_2fa:
|
_2fa:
|
||||||
registerKey: "Зареєструвати новий ключ безпеки"
|
registerSecurityKey: "Зареєструвати новий ключ безпеки"
|
||||||
_permissions:
|
_permissions:
|
||||||
"read:account": "Переглядати дані профілю"
|
"read:account": "Переглядати дані профілю"
|
||||||
"write:account": "Змінити дані акаунту"
|
"write:account": "Змінити дані акаунту"
|
||||||
|
|
|
@ -1201,8 +1201,8 @@ _tutorial:
|
||||||
step6_4: "Now go, explore, and have fun!"
|
step6_4: "Now go, explore, and have fun!"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "Bạn đã đăng ký thiết bị xác minh 2 bước."
|
alreadyRegistered: "Bạn đã đăng ký thiết bị xác minh 2 bước."
|
||||||
registerDevice: "Đăng ký một thiết bị"
|
registerTOTP: "Đăng ký một thiết bị"
|
||||||
registerKey: "Đăng ký một mã bảo vệ"
|
registerSecurityKey: "Đăng ký một mã bảo vệ"
|
||||||
step1: "Trước tiên, hãy cài đặt một ứng dụng xác minh (chẳng hạn như {a} hoặc {b}) trên thiết bị của bạn."
|
step1: "Trước tiên, hãy cài đặt một ứng dụng xác minh (chẳng hạn như {a} hoặc {b}) trên thiết bị của bạn."
|
||||||
step2: "Sau đó, quét mã QR hiển thị trên màn hình này."
|
step2: "Sau đó, quét mã QR hiển thị trên màn hình này."
|
||||||
step2Url: "Bạn cũng có thể nhập URL này nếu sử dụng một chương trình máy tính:"
|
step2Url: "Bạn cũng có thể nhập URL này nếu sử dụng một chương trình máy tính:"
|
||||||
|
|
|
@ -1210,8 +1210,8 @@ _tutorial:
|
||||||
step6_4: "现在去学习并享受乐趣!"
|
step6_4: "现在去学习并享受乐趣!"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "此设备已被注册"
|
alreadyRegistered: "此设备已被注册"
|
||||||
registerDevice: "注册设备"
|
registerTOTP: "注册设备"
|
||||||
registerKey: "注册密钥"
|
registerSecurityKey: "注册密钥"
|
||||||
step1: "首先,在您的设备上安装验证应用,例如{a}或{b}。"
|
step1: "首先,在您的设备上安装验证应用,例如{a}或{b}。"
|
||||||
step2: "然后,扫描屏幕上显示的二维码。"
|
step2: "然后,扫描屏幕上显示的二维码。"
|
||||||
step2Url: "在桌面应用程序中输入以下URL:"
|
step2Url: "在桌面应用程序中输入以下URL:"
|
||||||
|
|
|
@ -1219,8 +1219,8 @@ _tutorial:
|
||||||
step6_4: "現在開始探索吧!"
|
step6_4: "現在開始探索吧!"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "你已註冊過一個雙重認證的裝置。"
|
alreadyRegistered: "你已註冊過一個雙重認證的裝置。"
|
||||||
registerDevice: "註冊裝置"
|
registerTOTP: "註冊裝置"
|
||||||
registerKey: "註冊鍵"
|
registerSecurityKey: "註冊鍵"
|
||||||
step1: "首先,在您的設備上安裝二步驗證程式,例如{a}或{b}。"
|
step1: "首先,在您的設備上安裝二步驗證程式,例如{a}或{b}。"
|
||||||
step2: "然後,掃描螢幕上的QR code。"
|
step2: "然後,掃描螢幕上的QR code。"
|
||||||
step2Url: "在桌面版應用中,請輸入以下的URL:"
|
step2Url: "在桌面版應用中,請輸入以下的URL:"
|
||||||
|
@ -1829,7 +1829,7 @@ indexPosts: 索引帖子
|
||||||
indexNotice: 現在開始索引。 這可能需要一段時間,請不要在一個小時內重啟你的伺服器。
|
indexNotice: 現在開始索引。 這可能需要一段時間,請不要在一個小時內重啟你的伺服器。
|
||||||
deleted: 已刪除
|
deleted: 已刪除
|
||||||
editNote: 編輯筆記
|
editNote: 編輯筆記
|
||||||
edited: 已修改
|
edited: '於 {date} {time} 編輯'
|
||||||
userSaysSomethingReason: '{name} 說了 {reason}'
|
userSaysSomethingReason: '{name} 說了 {reason}'
|
||||||
allowedInstancesDescription: 要加入聯邦白名單的服務器,每台伺服器用新行分隔(僅適用於私有模式)。
|
allowedInstancesDescription: 要加入聯邦白名單的服務器,每台伺服器用新行分隔(僅適用於私有模式)。
|
||||||
defaultReaction: 默認的表情符號反應
|
defaultReaction: 默認的表情符號反應
|
||||||
|
@ -1840,3 +1840,9 @@ subscribePushNotification: 啟用推送通知
|
||||||
unsubscribePushNotification: 禁用推送通知
|
unsubscribePushNotification: 禁用推送通知
|
||||||
pushNotificationAlreadySubscribed: 推送通知已經啟用
|
pushNotificationAlreadySubscribed: 推送通知已經啟用
|
||||||
recommendedInstancesDescription: 以每行分隔的推薦服務器出現在推薦的時間軸中。 不要添加 `https://`,只添加域名。
|
recommendedInstancesDescription: 以每行分隔的推薦服務器出現在推薦的時間軸中。 不要添加 `https://`,只添加域名。
|
||||||
|
searchPlaceholder: 搜尋 Calckey
|
||||||
|
cw: 內容警告
|
||||||
|
selectChannel: 選擇一個頻道
|
||||||
|
newer: 較新
|
||||||
|
older: 較舊
|
||||||
|
jumpToPrevious: 跳到上一個
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
{
|
{
|
||||||
"name": "calckey",
|
"name": "calckey",
|
||||||
"version": "14.0.0-rc2c",
|
"version": "14.0.0-rc3",
|
||||||
"codename": "aqua",
|
"codename": "aqua",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://codeberg.org/calckey/calckey.git"
|
"url": "https://codeberg.org/calckey/calckey.git"
|
||||||
},
|
},
|
||||||
"packageManager": "pnpm@8.6.1",
|
"packageManager": "pnpm@8.6.3",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"rebuild": "pnpm run clean && pnpm -r run build && pnpm run gulp",
|
"rebuild": "pnpm run clean && pnpm node ./scripts/build-greet.js && pnpm -r run build && pnpm run gulp",
|
||||||
"build": "pnpm -r run build && pnpm run gulp",
|
"build": "pnpm node ./scripts/build-greet.js && pnpm -r run build && pnpm run gulp",
|
||||||
"start": "pnpm --filter backend run start",
|
"start": "pnpm --filter backend run start",
|
||||||
"start:test": "pnpm --filter backend run start:test",
|
"start:test": "pnpm --filter backend run start:test",
|
||||||
"init": "pnpm run migrate",
|
"init": "pnpm run migrate",
|
||||||
|
@ -46,6 +46,7 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/gulp": "4.0.10",
|
"@types/gulp": "4.0.10",
|
||||||
"@types/gulp-rename": "2.0.1",
|
"@types/gulp-rename": "2.0.1",
|
||||||
|
"chalk": "4.1.2",
|
||||||
"cross-env": "7.0.3",
|
"cross-env": "7.0.3",
|
||||||
"cypress": "10.11.0",
|
"cypress": "10.11.0",
|
||||||
"execa": "5.1.1",
|
"execa": "5.1.1",
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
# 📦 Packages
|
||||||
|
|
||||||
|
This directory contains all of the packages Calckey uses.
|
||||||
|
|
||||||
|
- `backend`: Main backend code written in TypeScript for NodeJS
|
||||||
|
- `backend/native-utils`: Backend code written in Rust, bound to NodeJS by [NAPI-RS](https://napi.rs/)
|
||||||
|
- `client`: Web interface written in Vue3 and TypeScript
|
||||||
|
- `sw`: Web [Service Worker](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API) written in TypeScript
|
||||||
|
- `calckey-js`: TypeScript SDK for both backend and client, also published on [NPM](https://www.npmjs.com/package/calckey-js) for public use
|
|
@ -1,15 +1,15 @@
|
||||||
{
|
{
|
||||||
"$schema": "https://json.schemastore.org/swcrc",
|
"$schema": "https://json.schemastore.org/swcrc",
|
||||||
"jsc": {
|
"jsc": {
|
||||||
"parser": {
|
"parser": {
|
||||||
"syntax": "typescript",
|
"syntax": "typescript",
|
||||||
"dynamicImport": true,
|
"dynamicImport": true,
|
||||||
"decorators": true
|
"decorators": true
|
||||||
},
|
},
|
||||||
"transform": {
|
"transform": {
|
||||||
"legacyDecorator": true,
|
"legacyDecorator": true,
|
||||||
"decoratorMetadata": true
|
"decoratorMetadata": true
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"keepImportAssertions": true
|
"keepImportAssertions": true
|
||||||
},
|
},
|
||||||
|
@ -20,6 +20,6 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"target": "es2022"
|
"target": "es2022"
|
||||||
},
|
},
|
||||||
"minify": false
|
"minify": false
|
||||||
}
|
}
|
||||||
|
|
|
@ -220,7 +220,7 @@ export class Init1000000000000 {
|
||||||
`CREATE INDEX "IDX_3c601b70a1066d2c8b517094cb" ON "notification" ("notifieeId") `,
|
`CREATE INDEX "IDX_3c601b70a1066d2c8b517094cb" ON "notification" ("notifieeId") `,
|
||||||
);
|
);
|
||||||
await queryRunner.query(
|
await queryRunner.query(
|
||||||
`CREATE TABLE "meta" ("id" character varying(32) NOT NULL, "name" character varying(128), "description" character varying(1024), "maintainerName" character varying(128), "maintainerEmail" character varying(128), "announcements" jsonb NOT NULL DEFAULT '[]', "disableRegistration" boolean NOT NULL DEFAULT false, "disableLocalTimeline" boolean NOT NULL DEFAULT false, "disableGlobalTimeline" boolean NOT NULL DEFAULT false, "enableEmojiReaction" boolean NOT NULL DEFAULT true, "useStarForReactionFallback" boolean NOT NULL DEFAULT false, "langs" character varying(64) array NOT NULL DEFAULT '{}'::varchar[], "hiddenTags" character varying(256) array NOT NULL DEFAULT '{}'::varchar[], "blockedHosts" character varying(256) array NOT NULL DEFAULT '{}'::varchar[], "mascotImageUrl" character varying(512) DEFAULT '/static-assets/badges/info.png', "bannerUrl" character varying(512), "errorImageUrl" character varying(512) DEFAULT '/static-assets/badges/error.png', "iconUrl" character varying(512), "cacheRemoteFiles" boolean NOT NULL DEFAULT true, "proxyAccount" character varying(128), "enableRecaptcha" boolean NOT NULL DEFAULT false, "recaptchaSiteKey" character varying(64), "recaptchaSecretKey" character varying(64), "localDriveCapacityMb" integer NOT NULL DEFAULT 1024, "remoteDriveCapacityMb" integer NOT NULL DEFAULT 32, "maxNoteTextLength" integer NOT NULL DEFAULT 500, "summalyProxy" character varying(128), "enableEmail" boolean NOT NULL DEFAULT false, "email" character varying(128), "smtpSecure" boolean NOT NULL DEFAULT false, "smtpHost" character varying(128), "smtpPort" integer, "smtpUser" character varying(128), "smtpPass" character varying(128), "enableServiceWorker" boolean NOT NULL DEFAULT false, "swPublicKey" character varying(128), "swPrivateKey" character varying(128), "enableTwitterIntegration" boolean NOT NULL DEFAULT false, "twitterConsumerKey" character varying(128), "twitterConsumerSecret" character varying(128), "enableGithubIntegration" boolean NOT NULL DEFAULT false, "githubClientId" character varying(128), "githubClientSecret" character varying(128), "enableDiscordIntegration" boolean NOT NULL DEFAULT false, "discordClientId" character varying(128), "discordClientSecret" character varying(128), CONSTRAINT "PK_c4c17a6c2bd7651338b60fc590b" PRIMARY KEY ("id"))`,
|
`CREATE TABLE "meta" ("id" character varying(32) NOT NULL, "name" character varying(128), "description" character varying(1024), "maintainerName" character varying(128), "maintainerEmail" character varying(128), "announcements" jsonb NOT NULL DEFAULT '[]', "disableRegistration" boolean NOT NULL DEFAULT false, "disableLocalTimeline" boolean NOT NULL DEFAULT false, "disableGlobalTimeline" boolean NOT NULL DEFAULT false, "enableEmojiReaction" boolean NOT NULL DEFAULT true, "useStarForReactionFallback" boolean NOT NULL DEFAULT false, "langs" character varying(64) array NOT NULL DEFAULT '{}'::varchar[], "hiddenTags" character varying(256) array NOT NULL DEFAULT '{}'::varchar[], "blockedHosts" character varying(256) array NOT NULL DEFAULT '{}'::varchar[], "mascotImageUrl" character varying(512) DEFAULT '/static-assets/badges/info.png', "bannerUrl" character varying(512), "errorImageUrl" character varying(512) DEFAULT '/static-assets/badges/error.png', "iconUrl" character varying(512), "cacheRemoteFiles" boolean NOT NULL DEFAULT false, "proxyAccount" character varying(128), "enableRecaptcha" boolean NOT NULL DEFAULT false, "recaptchaSiteKey" character varying(64), "recaptchaSecretKey" character varying(64), "localDriveCapacityMb" integer NOT NULL DEFAULT 1024, "remoteDriveCapacityMb" integer NOT NULL DEFAULT 32, "maxNoteTextLength" integer NOT NULL DEFAULT 500, "summalyProxy" character varying(128), "enableEmail" boolean NOT NULL DEFAULT false, "email" character varying(128), "smtpSecure" boolean NOT NULL DEFAULT false, "smtpHost" character varying(128), "smtpPort" integer, "smtpUser" character varying(128), "smtpPass" character varying(128), "enableServiceWorker" boolean NOT NULL DEFAULT false, "swPublicKey" character varying(128), "swPrivateKey" character varying(128), "enableTwitterIntegration" boolean NOT NULL DEFAULT false, "twitterConsumerKey" character varying(128), "twitterConsumerSecret" character varying(128), "enableGithubIntegration" boolean NOT NULL DEFAULT false, "githubClientId" character varying(128), "githubClientSecret" character varying(128), "enableDiscordIntegration" boolean NOT NULL DEFAULT false, "discordClientId" character varying(128), "discordClientSecret" character varying(128), CONSTRAINT "PK_c4c17a6c2bd7651338b60fc590b" PRIMARY KEY ("id"))`,
|
||||||
);
|
);
|
||||||
await queryRunner.query(
|
await queryRunner.query(
|
||||||
`CREATE TABLE "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, "followerHost" character varying(128), "followerInbox" character varying(512), "followerSharedInbox" character varying(512), "followeeHost" character varying(128), "followeeInbox" character varying(512), "followeeSharedInbox" character varying(512), CONSTRAINT "PK_c76c6e044bdf76ecf8bfb82a645" PRIMARY KEY ("id"))`,
|
`CREATE TABLE "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, "followerHost" character varying(128), "followerInbox" character varying(512), "followerSharedInbox" character varying(512), "followeeHost" character varying(128), "followeeInbox" character varying(512), "followeeSharedInbox" character varying(512), CONSTRAINT "PK_c76c6e044bdf76ecf8bfb82a645" PRIMARY KEY ("id"))`,
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
export class RemoveShowTimelineReplies1684206886988 {
|
||||||
|
name = "RemoveShowTimelineReplies1684206886988";
|
||||||
|
|
||||||
|
async up(queryRunner) {
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "user" DROP COLUMN "showTimelineReplies"`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async down(queryRunner) {
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "user" ADD "showTimelineReplies" boolean NOT NULL DEFAULT false`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,14 +10,14 @@ path = "src/lib.rs"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
convert = ["dep:native-utils"]
|
convert = ["dep:native-utils", "dep:indicatif", "dep:futures"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
serde_json = "1.0.96"
|
serde_json = "1.0.96"
|
||||||
native-utils = { path = "../", optional = true }
|
native-utils = { path = "../", optional = true }
|
||||||
indicatif = { version = "0.17.4", features = ["tokio"] }
|
indicatif = { version = "0.17.4", features = ["tokio"], optional = true }
|
||||||
tokio = { version = "1.28.2", features = ["full"] }
|
tokio = { version = "1.28.2", features = ["full"] }
|
||||||
futures = "0.3.28"
|
futures = { version = "0.3.28", optional = true }
|
||||||
serde_yaml = "0.9.21"
|
serde_yaml = "0.9.21"
|
||||||
serde = { version = "1.0.163", features = ["derive"] }
|
serde = { version = "1.0.163", features = ["derive"] }
|
||||||
urlencoding = "2.1.2"
|
urlencoding = "2.1.2"
|
||||||
|
|
|
@ -1,3 +1,17 @@
|
||||||
|
# Making migrations
|
||||||
|
|
||||||
|
For more information, please read https://www.sea-ql.org/SeaORM/docs/migration/setting-up-migration/
|
||||||
|
|
||||||
|
- Install `sea-orm-cli`
|
||||||
|
```sh
|
||||||
|
cargo install sea-orm-cli
|
||||||
|
```
|
||||||
|
|
||||||
|
- Generate
|
||||||
|
```sh
|
||||||
|
sea-orm-cli migrate generate ****
|
||||||
|
```
|
||||||
|
|
||||||
# Running Migrator CLI
|
# Running Migrator CLI
|
||||||
|
|
||||||
- Generate a new migration file
|
- Generate a new migration file
|
||||||
|
|
|
@ -1,48 +1,50 @@
|
||||||
{
|
{
|
||||||
"name": "native-utils",
|
"name": "native-utils",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"main": "built/index.js",
|
"main": "built/index.js",
|
||||||
"types": "built/index.d.ts",
|
"types": "built/index.d.ts",
|
||||||
"napi": {
|
"napi": {
|
||||||
"name": "native-utils",
|
"name": "native-utils",
|
||||||
"triples": {
|
"triples": {
|
||||||
"additional": [
|
"additional": [
|
||||||
"aarch64-apple-darwin",
|
"aarch64-apple-darwin",
|
||||||
"aarch64-linux-android",
|
"aarch64-linux-android",
|
||||||
"aarch64-unknown-linux-gnu",
|
"aarch64-unknown-linux-gnu",
|
||||||
"aarch64-unknown-linux-musl",
|
"aarch64-unknown-linux-musl",
|
||||||
"aarch64-pc-windows-msvc",
|
"aarch64-pc-windows-msvc",
|
||||||
"armv7-unknown-linux-gnueabihf",
|
"armv7-unknown-linux-gnueabihf",
|
||||||
"x86_64-unknown-linux-musl",
|
"x86_64-unknown-linux-musl",
|
||||||
"x86_64-unknown-freebsd",
|
"x86_64-unknown-freebsd",
|
||||||
"i686-pc-windows-msvc",
|
"i686-pc-windows-msvc",
|
||||||
"armv7-linux-androideabi",
|
"armv7-linux-androideabi",
|
||||||
"universal-apple-darwin"
|
"universal-apple-darwin"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@napi-rs/cli": "2.16.1",
|
"@napi-rs/cli": "2.16.1",
|
||||||
"ava": "5.1.1"
|
"ava": "5.1.1"
|
||||||
},
|
},
|
||||||
"ava": {
|
"ava": {
|
||||||
"timeout": "3m"
|
"timeout": "3m"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 10"
|
"node": ">= 10"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"artifacts": "napi artifacts",
|
"artifacts": "napi artifacts",
|
||||||
"build": "napi build --features napi --platform --release ./built/",
|
"build": "pnpm run build:napi && pnpm run build:migration",
|
||||||
"build:debug": "napi build --platform",
|
"build:napi": "napi build --features napi --platform --release ./built/",
|
||||||
"prepublishOnly": "napi prepublish -t npm",
|
"build:migration": "cargo build --locked --release --manifest-path ./migration/Cargo.toml && cp ./target/release/migration ./built/migration",
|
||||||
"test": "pnpm run cargo:test && pnpm run build && ava",
|
"build:debug": "napi build --platform ./built/ && cargo build --manifest-path ./migration/Cargo.toml",
|
||||||
"universal": "napi universal",
|
"prepublishOnly": "napi prepublish -t npm",
|
||||||
"version": "napi version",
|
"test": "pnpm run cargo:test && pnpm run build:napi && ava",
|
||||||
|
"universal": "napi universal",
|
||||||
|
"version": "napi version",
|
||||||
"format": "cargo fmt --all",
|
"format": "cargo fmt --all",
|
||||||
"cargo:test": "pnpm run cargo:unit && pnpm run cargo:integration",
|
"cargo:test": "pnpm run cargo:unit && pnpm run cargo:integration",
|
||||||
"cargo:unit": "cargo test unit_test && cargo test -F napi unit_test",
|
"cargo:unit": "cargo test unit_test && cargo test -F napi unit_test",
|
||||||
"cargo:integration": "cargo test -F noarray int_test -- --test-threads=1"
|
"cargo:integration": "cargo test -F noarray int_test -- --test-threads=1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ pub fn convert_id(in_id: String, id_convert_type: IdConvertType) -> napi::Result
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
return Err(Error::new(
|
return Err(Error::new(
|
||||||
Status::InvalidArg,
|
Status::InvalidArg,
|
||||||
"Unable to parse ID as MasstodonId",
|
"Unable to parse ID as MastodonId",
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -63,8 +63,6 @@ pub struct Model {
|
||||||
pub hide_online_status: bool,
|
pub hide_online_status: bool,
|
||||||
#[sea_orm(column_name = "isDeleted")]
|
#[sea_orm(column_name = "isDeleted")]
|
||||||
pub is_deleted: bool,
|
pub is_deleted: bool,
|
||||||
#[sea_orm(column_name = "showTimelineReplies")]
|
|
||||||
pub show_timeline_replies: bool,
|
|
||||||
#[sea_orm(column_name = "driveCapacityOverrideMb")]
|
#[sea_orm(column_name = "driveCapacityOverrideMb")]
|
||||||
pub drive_capacity_override_mb: Option<i32>,
|
pub drive_capacity_override_mb: Option<i32>,
|
||||||
#[sea_orm(column_name = "movedToUri")]
|
#[sea_orm(column_name = "movedToUri")]
|
||||||
|
|
|
@ -8,20 +8,17 @@
|
||||||
"start:test": "NODE_ENV=test pnpm node ./built/index.js",
|
"start:test": "NODE_ENV=test pnpm node ./built/index.js",
|
||||||
"migrate": "pnpm run migrate:typeorm && pnpm run migrate:cargo",
|
"migrate": "pnpm run migrate:typeorm && pnpm run migrate:cargo",
|
||||||
"migrate:typeorm": "typeorm migration:run -d ormconfig.js",
|
"migrate:typeorm": "typeorm migration:run -d ormconfig.js",
|
||||||
"migrate:cargo": "cargo run --manifest-path ./native-utils/migration/Cargo.toml -- up",
|
"migrate:cargo": "./native-utils/built/migration up",
|
||||||
"revertmigration": "pnpm run revertmigration:cargo && pnpm run revertmigration:typeorm",
|
"revertmigration": "pnpm run revertmigration:cargo && pnpm run revertmigration:typeorm",
|
||||||
"revertmigration:typeorm": "typeorm migration:revert -d ormconfig.js",
|
"revertmigration:typeorm": "typeorm migration:revert -d ormconfig.js",
|
||||||
"revertmigration:cargo": "cargo run --manifest-path ./native-utils/migration/Cargo.toml -- down",
|
"revertmigration:cargo": "./native-utils/built/migration down",
|
||||||
"check:connect": "node ./check_connect.js",
|
"check:connect": "node ./check_connect.js",
|
||||||
"build": "pnpm swc src -d built -D",
|
"build": "pnpm swc src -d built -D",
|
||||||
"watch": "pnpm swc src -d built -D -w",
|
"watch": "pnpm swc src -d built -D -w",
|
||||||
"lint": "pnpm rome check \"src/**/*.ts\"",
|
"lint": "pnpm rome check --apply *",
|
||||||
"mocha": "cross-env NODE_ENV=test TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT=\"./test/tsconfig.json\" mocha",
|
"mocha": "cross-env NODE_ENV=test TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT=\"./test/tsconfig.json\" mocha",
|
||||||
"test": "pnpm run mocha",
|
"test": "pnpm run mocha",
|
||||||
"format": "pnpm rome format * --write && pnpm rome check --apply *"
|
"format": "pnpm rome format * --write"
|
||||||
},
|
|
||||||
"resolutions": {
|
|
||||||
"chokidar": "^3.3.1"
|
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@swc/core-android-arm64": "1.3.11",
|
"@swc/core-android-arm64": "1.3.11",
|
||||||
|
@ -101,6 +98,7 @@
|
||||||
"nsfwjs": "2.4.2",
|
"nsfwjs": "2.4.2",
|
||||||
"oauth": "^0.10.0",
|
"oauth": "^0.10.0",
|
||||||
"os-utils": "0.0.14",
|
"os-utils": "0.0.14",
|
||||||
|
"otpauth": "^9.1.2",
|
||||||
"parse5": "7.1.2",
|
"parse5": "7.1.2",
|
||||||
"pg": "8.11.0",
|
"pg": "8.11.0",
|
||||||
"private-ip": "2.3.4",
|
"private-ip": "2.3.4",
|
||||||
|
@ -123,7 +121,6 @@
|
||||||
"semver": "7.5.1",
|
"semver": "7.5.1",
|
||||||
"sharp": "0.32.1",
|
"sharp": "0.32.1",
|
||||||
"sonic-channel": "^1.3.1",
|
"sonic-channel": "^1.3.1",
|
||||||
"speakeasy": "2.0.0",
|
|
||||||
"stringz": "2.1.0",
|
"stringz": "2.1.0",
|
||||||
"summaly": "2.7.0",
|
"summaly": "2.7.0",
|
||||||
"syslog-pro": "1.0.0",
|
"syslog-pro": "1.0.0",
|
||||||
|
@ -181,7 +178,6 @@
|
||||||
"@types/semver": "7.5.0",
|
"@types/semver": "7.5.0",
|
||||||
"@types/sharp": "0.31.1",
|
"@types/sharp": "0.31.1",
|
||||||
"@types/sinonjs__fake-timers": "8.1.2",
|
"@types/sinonjs__fake-timers": "8.1.2",
|
||||||
"@types/speakeasy": "2.0.7",
|
|
||||||
"@types/tinycolor2": "1.4.3",
|
"@types/tinycolor2": "1.4.3",
|
||||||
"@types/tmp": "0.2.3",
|
"@types/tmp": "0.2.3",
|
||||||
"@types/uuid": "8.3.4",
|
"@types/uuid": "8.3.4",
|
||||||
|
|
|
@ -135,6 +135,24 @@ export type MeilisearchNote = {
|
||||||
createdAt: number;
|
createdAt: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function timestampToUnix(timestamp: string) {
|
||||||
|
let unix = 0;
|
||||||
|
|
||||||
|
// Only contains numbers => UNIX timestamp
|
||||||
|
if (/^\d+$/.test(timestamp)) {
|
||||||
|
unix = Number.parseInt(timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (unix === 0) {
|
||||||
|
// Try to parse the timestamp as JavaScript Date
|
||||||
|
const date = Date.parse(timestamp);
|
||||||
|
if (isNaN(date)) return 0;
|
||||||
|
unix = date / 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
return unix;
|
||||||
|
}
|
||||||
|
|
||||||
export default hasConfig
|
export default hasConfig
|
||||||
? {
|
? {
|
||||||
search: async (
|
search: async (
|
||||||
|
@ -166,8 +184,29 @@ export default hasConfig
|
||||||
constructedFilters.push(`mediaAttachment = "${fileType}"`);
|
constructedFilters.push(`mediaAttachment = "${fileType}"`);
|
||||||
return null;
|
return null;
|
||||||
} else if (term.startsWith("from:")) {
|
} else if (term.startsWith("from:")) {
|
||||||
const user = term.slice(5);
|
let user = term.slice(5);
|
||||||
constructedFilters.push(`userName = ${user}`);
|
|
||||||
|
if (user.length === 0) return null;
|
||||||
|
|
||||||
|
// Cut off leading @, those aren't saved in the DB
|
||||||
|
if (user.charAt(0) === "@") {
|
||||||
|
user = user.slice(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine if we got a webfinger address or a single username
|
||||||
|
if (user.split("@").length > 1) {
|
||||||
|
let splitUser = user.split("@");
|
||||||
|
|
||||||
|
let domain = splitUser.pop();
|
||||||
|
user = splitUser.join("@");
|
||||||
|
|
||||||
|
constructedFilters.push(
|
||||||
|
`userName = ${user} AND userHost = ${domain}`,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
constructedFilters.push(`userName = ${user}`);
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
} else if (term.startsWith("domain:")) {
|
} else if (term.startsWith("domain:")) {
|
||||||
const domain = term.slice(7);
|
const domain = term.slice(7);
|
||||||
|
@ -175,17 +214,18 @@ export default hasConfig
|
||||||
return null;
|
return null;
|
||||||
} else if (term.startsWith("after:")) {
|
} else if (term.startsWith("after:")) {
|
||||||
const timestamp = term.slice(6);
|
const timestamp = term.slice(6);
|
||||||
// Try to parse the timestamp as JavaScript Date
|
|
||||||
const date = Date.parse(timestamp);
|
let unix = timestampToUnix(timestamp);
|
||||||
if (isNaN(date)) return null;
|
|
||||||
constructedFilters.push(`createdAt > ${date / 1000}`);
|
if (unix !== 0) constructedFilters.push(`createdAt > ${unix}`);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
} else if (term.startsWith("before:")) {
|
} else if (term.startsWith("before:")) {
|
||||||
const timestamp = term.slice(7);
|
const timestamp = term.slice(7);
|
||||||
// Try to parse the timestamp as JavaScript Date
|
|
||||||
const date = Date.parse(timestamp);
|
let unix = timestampToUnix(timestamp);
|
||||||
if (isNaN(date)) return null;
|
if (unix !== 0) constructedFilters.push(`createdAt < ${unix}`);
|
||||||
constructedFilters.push(`createdAt < ${date / 1000}`);
|
|
||||||
return null;
|
return null;
|
||||||
} else if (term.startsWith("filter:following")) {
|
} else if (term.startsWith("filter:following")) {
|
||||||
// Check if we got a context user
|
// Check if we got a context user
|
||||||
|
|
|
@ -5,8 +5,6 @@ import config from "@/config/index.js";
|
||||||
|
|
||||||
const logger = dbLogger.createSubLogger("sonic", "gray", false);
|
const logger = dbLogger.createSubLogger("sonic", "gray", false);
|
||||||
|
|
||||||
logger.info("Connecting to Sonic");
|
|
||||||
|
|
||||||
const handlers = (type: string): SonicChannel.Handlers => ({
|
const handlers = (type: string): SonicChannel.Handlers => ({
|
||||||
connected: () => {
|
connected: () => {
|
||||||
logger.succ(`Connected to Sonic ${type}`);
|
logger.succ(`Connected to Sonic ${type}`);
|
||||||
|
@ -28,6 +26,10 @@ const handlers = (type: string): SonicChannel.Handlers => ({
|
||||||
const hasConfig =
|
const hasConfig =
|
||||||
config.sonic && (config.sonic.host || config.sonic.port || config.sonic.auth);
|
config.sonic && (config.sonic.host || config.sonic.port || config.sonic.auth);
|
||||||
|
|
||||||
|
if (hasConfig) {
|
||||||
|
logger.info("Connecting to Sonic");
|
||||||
|
}
|
||||||
|
|
||||||
const host = hasConfig ? config.sonic.host ?? "localhost" : "";
|
const host = hasConfig ? config.sonic.host ?? "localhost" : "";
|
||||||
const port = hasConfig ? config.sonic.port ?? 1491 : 0;
|
const port = hasConfig ? config.sonic.port ?? 1491 : 0;
|
||||||
const auth = hasConfig ? config.sonic.auth ?? "SecretPassword" : "";
|
const auth = hasConfig ? config.sonic.auth ?? "SecretPassword" : "";
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
export function convertMilliseconds(ms: number) {
|
||||||
|
let seconds = Math.round(ms / 1000);
|
||||||
|
let minutes = Math.round(seconds / 60);
|
||||||
|
let hours = Math.round(minutes / 60);
|
||||||
|
const days = Math.round(hours / 24);
|
||||||
|
seconds %= 60;
|
||||||
|
minutes %= 60;
|
||||||
|
hours %= 24;
|
||||||
|
|
||||||
|
const result = [];
|
||||||
|
if (days > 0) result.push(`${days} day(s)`);
|
||||||
|
if (hours > 0) result.push(`${hours} hour(s)`);
|
||||||
|
if (minutes > 0) result.push(`${minutes} minute(s)`);
|
||||||
|
if (seconds > 0) result.push(`${seconds} second(s)`);
|
||||||
|
|
||||||
|
return result.join(", ");
|
||||||
|
}
|
|
@ -3,6 +3,32 @@ import { Meta } from "@/models/entities/meta.js";
|
||||||
|
|
||||||
let cache: Meta;
|
let cache: Meta;
|
||||||
|
|
||||||
|
export function metaToPugArgs(meta: Meta): object {
|
||||||
|
let motd = ["Loading..."];
|
||||||
|
if (meta.customMOTD.length > 0) {
|
||||||
|
motd = meta.customMOTD;
|
||||||
|
}
|
||||||
|
let splashIconUrl = meta.iconUrl;
|
||||||
|
if (meta.customSplashIcons.length > 0) {
|
||||||
|
splashIconUrl =
|
||||||
|
meta.customSplashIcons[
|
||||||
|
Math.floor(Math.random() * meta.customSplashIcons.length)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
img: meta.bannerUrl,
|
||||||
|
title: meta.name || "Calckey",
|
||||||
|
instanceName: meta.name || "Calckey",
|
||||||
|
desc: meta.description,
|
||||||
|
icon: meta.iconUrl,
|
||||||
|
splashIcon: splashIconUrl,
|
||||||
|
themeColor: meta.themeColor,
|
||||||
|
randomMOTD: motd[Math.floor(Math.random() * motd.length)],
|
||||||
|
privateMode: meta.privateMode,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export async function fetchMeta(noCache = false): Promise<Meta> {
|
export async function fetchMeta(noCache = false): Promise<Meta> {
|
||||||
if (!noCache && cache) return cache;
|
if (!noCache && cache) return cache;
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
export function isDuplicateKeyValueError(e: unknown | Error): boolean {
|
export function isDuplicateKeyValueError(e: unknown | Error): boolean {
|
||||||
return (e as Error).message?.startsWith("duplicate key value");
|
const nodeError = e as NodeJS.ErrnoException;
|
||||||
|
return nodeError.code === "23505";
|
||||||
}
|
}
|
||||||
|
|
|
@ -198,7 +198,7 @@ export class Meta {
|
||||||
public iconUrl: string | null;
|
public iconUrl: string | null;
|
||||||
|
|
||||||
@Column("boolean", {
|
@Column("boolean", {
|
||||||
default: true,
|
default: false,
|
||||||
})
|
})
|
||||||
public cacheRemoteFiles: boolean;
|
public cacheRemoteFiles: boolean;
|
||||||
|
|
||||||
|
|
|
@ -249,12 +249,6 @@ export class User {
|
||||||
})
|
})
|
||||||
public followersUri: string | null;
|
public followersUri: string | null;
|
||||||
|
|
||||||
@Column("boolean", {
|
|
||||||
default: false,
|
|
||||||
comment: "Whether to show users replying to other users in the timeline.",
|
|
||||||
})
|
|
||||||
public showTimelineReplies: boolean;
|
|
||||||
|
|
||||||
@Index({ unique: true })
|
@Index({ unique: true })
|
||||||
@Column("char", {
|
@Column("char", {
|
||||||
length: 16,
|
length: 16,
|
||||||
|
|
|
@ -28,7 +28,7 @@ import {
|
||||||
import { db } from "@/db/postgre.js";
|
import { db } from "@/db/postgre.js";
|
||||||
import { IdentifiableError } from "@/misc/identifiable-error.js";
|
import { IdentifiableError } from "@/misc/identifiable-error.js";
|
||||||
|
|
||||||
async function populatePoll(note: Note, meId: User["id"] | null) {
|
export async function populatePoll(note: Note, meId: User["id"] | null) {
|
||||||
const poll = await Polls.findOneByOrFail({ noteId: note.id });
|
const poll = await Polls.findOneByOrFail({ noteId: note.id });
|
||||||
const choices = poll.choices.map((c) => ({
|
const choices = poll.choices.map((c) => ({
|
||||||
text: c,
|
text: c,
|
||||||
|
|
|
@ -567,7 +567,6 @@ export const UserRepository = db.getRepository(User).extend({
|
||||||
mutedInstances: profile!.mutedInstances,
|
mutedInstances: profile!.mutedInstances,
|
||||||
mutingNotificationTypes: profile!.mutingNotificationTypes,
|
mutingNotificationTypes: profile!.mutingNotificationTypes,
|
||||||
emailNotificationTypes: profile!.emailNotificationTypes,
|
emailNotificationTypes: profile!.emailNotificationTypes,
|
||||||
showTimelineReplies: user.showTimelineReplies || falsy,
|
|
||||||
}
|
}
|
||||||
: {}),
|
: {}),
|
||||||
|
|
||||||
|
|
|
@ -17,9 +17,7 @@ export async function deleteAccount(
|
||||||
logger.info(`Deleting account of ${job.data.user.id} ...`);
|
logger.info(`Deleting account of ${job.data.user.id} ...`);
|
||||||
|
|
||||||
const user = await Users.findOneBy({ id: job.data.user.id });
|
const user = await Users.findOneBy({ id: job.data.user.id });
|
||||||
if (user == null) {
|
if (!user) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
// Delete notes
|
// Delete notes
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import type Bull from "bull";
|
import type Bull from "bull";
|
||||||
import { In } from "typeorm";
|
import { Notes, PollVotes } from "@/models/index.js";
|
||||||
import { Notes, Polls, PollVotes } from "@/models/index.js";
|
|
||||||
import { queueLogger } from "../logger.js";
|
import { queueLogger } from "../logger.js";
|
||||||
import type { EndedPollNotificationJobData } from "@/queue/types.js";
|
import type { EndedPollNotificationJobData } from "@/queue/types.js";
|
||||||
import { createNotification } from "@/services/create-notification.js";
|
import { createNotification } from "@/services/create-notification.js";
|
||||||
|
import { deliverQuestionUpdate } from "@/services/note/polls/update.js";
|
||||||
|
|
||||||
const logger = queueLogger.createSubLogger("ended-poll-notification");
|
const logger = queueLogger.createSubLogger("ended-poll-notification");
|
||||||
|
|
||||||
|
@ -32,5 +32,8 @@ export async function endedPollNotification(
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Broadcast the poll result once it ends
|
||||||
|
await deliverQuestionUpdate(note.id);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,9 @@ export default async (job: Bull.Job<InboxJobData>): Promise<string> => {
|
||||||
const info = Object.assign({}, activity) as any;
|
const info = Object.assign({}, activity) as any;
|
||||||
info["@context"] = undefined;
|
info["@context"] = undefined;
|
||||||
logger.debug(JSON.stringify(info, null, 2));
|
logger.debug(JSON.stringify(info, null, 2));
|
||||||
|
|
||||||
|
if (!signature?.keyId) return `Invalid signature: ${signature}`;
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
const host = toPuny(new URL(signature.keyId).hostname);
|
const host = toPuny(new URL(signature.keyId).hostname);
|
||||||
|
|
||||||
|
|
|
@ -15,9 +15,11 @@ export async function deleteActor(
|
||||||
return `skip: delete actor ${actor.uri} !== ${uri}`;
|
return `skip: delete actor ${actor.uri} !== ${uri}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const user = await Users.findOneByOrFail({ id: actor.id });
|
const user = await Users.findOneBy({ id: actor.id });
|
||||||
if (user.isDeleted) {
|
if (!user) {
|
||||||
logger.info("skip: already deleted");
|
return `skip: actor ${actor.id} not found in the local database`;
|
||||||
|
} else if (user.isDeleted) {
|
||||||
|
return `skip: user ${user.id} already deleted`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const job = await createDeleteAccountJob(actor);
|
const job = await createDeleteAccountJob(actor);
|
||||||
|
|
|
@ -26,11 +26,11 @@ export async function createImage(
|
||||||
const image = (await new Resolver().resolve(value)) as any;
|
const image = (await new Resolver().resolve(value)) as any;
|
||||||
|
|
||||||
if (image.url == null) {
|
if (image.url == null) {
|
||||||
throw new Error("invalid image: url not privided");
|
throw new Error("Invalid image, URL not provided");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!image.url.startsWith("https://") && !image.url.startsWith("http://")) {
|
if (!image.url.startsWith("https://") && !image.url.startsWith("http://")) {
|
||||||
throw new Error("invalid image: unexpected shcema of url: " + image.url);
|
throw new Error(`Invalid image, unexpected schema: ${image.url}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info(`Creating the Image: ${image.url}`);
|
logger.info(`Creating the Image: ${image.url}`);
|
||||||
|
|
|
@ -13,11 +13,10 @@ import type {
|
||||||
import { htmlToMfm } from "../misc/html-to-mfm.js";
|
import { htmlToMfm } from "../misc/html-to-mfm.js";
|
||||||
import { extractApHashtags } from "./tag.js";
|
import { extractApHashtags } from "./tag.js";
|
||||||
import { unique, toArray, toSingle } from "@/prelude/array.js";
|
import { unique, toArray, toSingle } from "@/prelude/array.js";
|
||||||
import { extractPollFromQuestion, updateQuestion } from "./question.js";
|
import { extractPollFromQuestion } from "./question.js";
|
||||||
import vote from "@/services/note/polls/vote.js";
|
import vote from "@/services/note/polls/vote.js";
|
||||||
import { apLogger } from "../logger.js";
|
import { apLogger } from "../logger.js";
|
||||||
import { DriveFile } from "@/models/entities/drive-file.js";
|
import { DriveFile } from "@/models/entities/drive-file.js";
|
||||||
import { deliverQuestionUpdate } from "@/services/note/polls/update.js";
|
|
||||||
import { extractDbHost, toPuny } from "@/misc/convert-host.js";
|
import { extractDbHost, toPuny } from "@/misc/convert-host.js";
|
||||||
import {
|
import {
|
||||||
Emojis,
|
Emojis,
|
||||||
|
@ -334,9 +333,6 @@ export async function createNote(
|
||||||
`vote from AP: actor=${actor.username}@${actor.host}, note=${note.id}, choice=${name}`,
|
`vote from AP: actor=${actor.username}@${actor.host}, note=${note.id}, choice=${name}`,
|
||||||
);
|
);
|
||||||
await vote(actor, reply, index);
|
await vote(actor, reply, index);
|
||||||
|
|
||||||
// リモートフォロワーにUpdate配信
|
|
||||||
deliverQuestionUpdate(reply.id);
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
|
@ -279,7 +279,6 @@ export async function createPerson(
|
||||||
tags,
|
tags,
|
||||||
isBot,
|
isBot,
|
||||||
isCat: (person as any).isCat === true,
|
isCat: (person as any).isCat === true,
|
||||||
showTimelineReplies: false,
|
|
||||||
}),
|
}),
|
||||||
)) as IRemoteUser;
|
)) as IRemoteUser;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import config from "@/config/index.js";
|
import config from "@/config/index.js";
|
||||||
import Resolver from "../resolver.js";
|
import Resolver from "../resolver.js";
|
||||||
import type { IObject, IQuestion } from "../type.js";
|
import type { IObject, IQuestion } from "../type.js";
|
||||||
import { isQuestion } from "../type.js";
|
import { getApId, isQuestion } from "../type.js";
|
||||||
import { apLogger } from "../logger.js";
|
import { apLogger } from "../logger.js";
|
||||||
import { Notes, Polls } from "@/models/index.js";
|
import { Notes, Polls } from "@/models/index.js";
|
||||||
import type { IPoll } from "@/models/entities/poll.js";
|
import type { IPoll } from "@/models/entities/poll.js";
|
||||||
|
@ -47,11 +47,14 @@ export async function extractPollFromQuestion(
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update votes of Question
|
* Update votes of Question
|
||||||
* @param uri URI of AP Question object
|
* @param value URI of AP Question object or object itself
|
||||||
* @returns true if updated
|
* @returns true if updated
|
||||||
*/
|
*/
|
||||||
export async function updateQuestion(value: any, resolver?: Resolver) {
|
export async function updateQuestion(
|
||||||
const uri = typeof value === "string" ? value : value.id;
|
value: string | IQuestion,
|
||||||
|
resolver?: Resolver,
|
||||||
|
): Promise<boolean> {
|
||||||
|
const uri = typeof value === "string" ? value : getApId(value);
|
||||||
|
|
||||||
// Skip if URI points to this server
|
// Skip if URI points to this server
|
||||||
if (uri.startsWith(`${config.url}/`)) throw new Error("uri points local");
|
if (uri.startsWith(`${config.url}/`)) throw new Error("uri points local");
|
||||||
|
@ -65,22 +68,23 @@ export async function updateQuestion(value: any, resolver?: Resolver) {
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
// resolve new Question object
|
// resolve new Question object
|
||||||
if (resolver == null) resolver = new Resolver();
|
const _resolver = resolver ?? new Resolver();
|
||||||
const question = (await resolver.resolve(value)) as IQuestion;
|
const question = (await _resolver.resolve(value)) as IQuestion;
|
||||||
apLogger.debug(`fetched question: ${JSON.stringify(question, null, 2)}`);
|
apLogger.debug(`fetched question: ${JSON.stringify(question, null, 2)}`);
|
||||||
|
|
||||||
if (question.type !== "Question") throw new Error("object is not a Question");
|
if (question.type !== "Question") throw new Error("object is not a Question");
|
||||||
|
|
||||||
const apChoices = question.oneOf || question.anyOf;
|
const apChoices = question.oneOf || question.anyOf;
|
||||||
|
if (!apChoices) return false;
|
||||||
|
|
||||||
let changed = false;
|
let changed = false;
|
||||||
|
|
||||||
for (const choice of poll.choices) {
|
for (const choice of poll.choices) {
|
||||||
const oldCount = poll.votes[poll.choices.indexOf(choice)];
|
const oldCount = poll.votes[poll.choices.indexOf(choice)];
|
||||||
const newCount = apChoices!.filter((ap) => ap.name === choice)[0].replies!
|
const newCount = apChoices.filter((ap) => ap.name === choice)[0].replies
|
||||||
.totalItems;
|
?.totalItems;
|
||||||
|
|
||||||
if (oldCount !== newCount) {
|
if (newCount !== undefined && oldCount !== newCount) {
|
||||||
changed = true;
|
changed = true;
|
||||||
poll.votes[poll.choices.indexOf(choice)] = newCount;
|
poll.votes[poll.choices.indexOf(choice)] = newCount;
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,8 +66,11 @@ export default async (
|
||||||
limit as IEndpointMeta["limit"] & { key: NonNullable<string> },
|
limit as IEndpointMeta["limit"] & { key: NonNullable<string> },
|
||||||
limitActor,
|
limitActor,
|
||||||
).catch((e) => {
|
).catch((e) => {
|
||||||
|
const remainingTime = e.remainingTime
|
||||||
|
? `Please try again in ${e.remainingTime}.`
|
||||||
|
: "Please try again later.";
|
||||||
throw new ApiError({
|
throw new ApiError({
|
||||||
message: "Rate limit exceeded. Please try again later.",
|
message: `Rate limit exceeded. ${remainingTime}`,
|
||||||
code: "RATE_LIMIT_EXCEEDED",
|
code: "RATE_LIMIT_EXCEEDED",
|
||||||
id: "d5826d14-3982-4d2e-8011-b9e9f02499ef",
|
id: "d5826d14-3982-4d2e-8011-b9e9f02499ef",
|
||||||
httpStatusCode: 429,
|
httpStatusCode: 429,
|
||||||
|
@ -94,7 +97,7 @@ export default async (
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ep.meta.requireAdmin && !user!.isAdmin) {
|
if (ep.meta.requireAdmin && !user!.isAdmin) {
|
||||||
throw new ApiError(accessDenied, { reason: "You are not the admin." });
|
throw new ApiError(accessDenied, { reason: "You are not an admin." });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ep.meta.requireModerator && !isModerator) {
|
if (ep.meta.requireModerator && !isModerator) {
|
||||||
|
|
|
@ -4,7 +4,8 @@ import { Brackets } from "typeorm";
|
||||||
|
|
||||||
export function generateRepliesQuery(
|
export function generateRepliesQuery(
|
||||||
q: SelectQueryBuilder<any>,
|
q: SelectQueryBuilder<any>,
|
||||||
me?: Pick<User, "id" | "showTimelineReplies"> | null,
|
withReplies: boolean,
|
||||||
|
me?: Pick<User, "id"> | null,
|
||||||
) {
|
) {
|
||||||
if (me == null) {
|
if (me == null) {
|
||||||
q.andWhere(
|
q.andWhere(
|
||||||
|
@ -20,25 +21,21 @@ export function generateRepliesQuery(
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
} else if (!me.showTimelineReplies) {
|
} else if (!withReplies) {
|
||||||
q.andWhere(
|
q.andWhere(
|
||||||
new Brackets((qb) => {
|
new Brackets((qb) => {
|
||||||
qb.where("note.replyId IS NULL") // 返信ではない
|
qb.where("note.replyId IS NULL") // 返信ではない
|
||||||
.orWhere("note.replyUserId = :meId", { meId: me.id }) // 返信だけど自分のノートへの返信
|
.orWhere("note.replyUserId = :meId", { meId: me.id }) // 返信だけど自分のノートへの返信
|
||||||
.orWhere(
|
.orWhere(
|
||||||
new Brackets((qb) => {
|
new Brackets((qb) => {
|
||||||
qb.where(
|
qb.where("note.replyId IS NOT NULL") // 返信だけど自分の行った返信
|
||||||
// 返信だけど自分の行った返信
|
.andWhere("note.userId = :meId", { meId: me.id });
|
||||||
"note.replyId IS NOT NULL",
|
|
||||||
).andWhere("note.userId = :meId", { meId: me.id });
|
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.orWhere(
|
.orWhere(
|
||||||
new Brackets((qb) => {
|
new Brackets((qb) => {
|
||||||
qb.where(
|
qb.where("note.replyId IS NOT NULL") // 返信だけど投稿者自身への返信
|
||||||
// 返信だけど投稿者自身への返信
|
.andWhere("note.replyUserId = note.userId");
|
||||||
"note.replyId IS NOT NULL",
|
|
||||||
).andWhere("note.replyUserId = note.userId");
|
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
import type { IEndpoint } from "./endpoints";
|
import type { IEndpoint } from "./endpoints";
|
||||||
|
|
||||||
import * as cp___instanceInfo from "./endpoints/compatibility/instance-info.js";
|
import * as cp___instance_info from "./endpoints/compatibility/instance-info.js";
|
||||||
import * as cp___customEmojis from "./endpoints/compatibility/custom-emojis.js";
|
import * as cp___custom_emojis from "./endpoints/compatibility/custom-emojis.js";
|
||||||
|
import * as ep___instance_peers from "./endpoints/compatibility/peers.js";
|
||||||
|
|
||||||
const cps = [
|
const cps = [
|
||||||
["v1/instance", cp___instanceInfo],
|
["v1/instance", cp___instance_info],
|
||||||
["v1/custom_emojis", cp___customEmojis],
|
["v1/custom_emojis", cp___custom_emojis],
|
||||||
|
["v1/instance/peers", ep___instance_peers],
|
||||||
];
|
];
|
||||||
|
|
||||||
const compatibility: IEndpoint[] = cps.map(([name, cp]) => {
|
const compatibility: IEndpoint[] = cps.map(([name, cp]) => {
|
||||||
|
|
|
@ -174,6 +174,7 @@ import * as ep___i_2fa_keyDone from "./endpoints/i/2fa/key-done.js";
|
||||||
import * as ep___i_2fa_passwordLess from "./endpoints/i/2fa/password-less.js";
|
import * as ep___i_2fa_passwordLess from "./endpoints/i/2fa/password-less.js";
|
||||||
import * as ep___i_2fa_registerKey from "./endpoints/i/2fa/register-key.js";
|
import * as ep___i_2fa_registerKey from "./endpoints/i/2fa/register-key.js";
|
||||||
import * as ep___i_2fa_register from "./endpoints/i/2fa/register.js";
|
import * as ep___i_2fa_register from "./endpoints/i/2fa/register.js";
|
||||||
|
import * as ep___i_2fa_updateKey from "./endpoints/i/2fa/update-key.js";
|
||||||
import * as ep___i_2fa_removeKey from "./endpoints/i/2fa/remove-key.js";
|
import * as ep___i_2fa_removeKey from "./endpoints/i/2fa/remove-key.js";
|
||||||
import * as ep___i_2fa_unregister from "./endpoints/i/2fa/unregister.js";
|
import * as ep___i_2fa_unregister from "./endpoints/i/2fa/unregister.js";
|
||||||
import * as ep___i_apps from "./endpoints/i/apps.js";
|
import * as ep___i_apps from "./endpoints/i/apps.js";
|
||||||
|
@ -528,6 +529,7 @@ const eps = [
|
||||||
["i/2fa/password-less", ep___i_2fa_passwordLess],
|
["i/2fa/password-less", ep___i_2fa_passwordLess],
|
||||||
["i/2fa/register-key", ep___i_2fa_registerKey],
|
["i/2fa/register-key", ep___i_2fa_registerKey],
|
||||||
["i/2fa/register", ep___i_2fa_register],
|
["i/2fa/register", ep___i_2fa_register],
|
||||||
|
["i/2fa/update-key", ep___i_2fa_updateKey],
|
||||||
["i/2fa/remove-key", ep___i_2fa_removeKey],
|
["i/2fa/remove-key", ep___i_2fa_removeKey],
|
||||||
["i/2fa/unregister", ep___i_2fa_unregister],
|
["i/2fa/unregister", ep___i_2fa_unregister],
|
||||||
["i/apps", ep___i_apps],
|
["i/apps", ep___i_apps],
|
||||||
|
|
|
@ -42,6 +42,7 @@ export default define(meta, paramDef, async (ps, me) => {
|
||||||
isModerator: user.isModerator,
|
isModerator: user.isModerator,
|
||||||
isSilenced: user.isSilenced,
|
isSilenced: user.isSilenced,
|
||||||
isSuspended: user.isSuspended,
|
isSuspended: user.isSuspended,
|
||||||
|
moderationNote: profile.moderationNote,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,12 @@ export const meta = {
|
||||||
code: "NO_SUCH_USER_GROUP",
|
code: "NO_SUCH_USER_GROUP",
|
||||||
id: "aa3c0b9a-8cae-47c0-92ac-202ce5906682",
|
id: "aa3c0b9a-8cae-47c0-92ac-202ce5906682",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
tooManyAntennas: {
|
||||||
|
message: "Too many antennas.",
|
||||||
|
code: "TOO_MANY_ANTENNAS",
|
||||||
|
id: "c3a5a51e-04d4-11ee-be56-0242ac120002",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
|
@ -97,6 +103,13 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
let userList;
|
let userList;
|
||||||
let userGroupJoining;
|
let userGroupJoining;
|
||||||
|
|
||||||
|
const antennas = await Antennas.findBy({
|
||||||
|
userId: user.id,
|
||||||
|
});
|
||||||
|
if (antennas.length > 5 && !user.isAdmin) {
|
||||||
|
throw new ApiError(meta.errors.tooManyAntennas);
|
||||||
|
}
|
||||||
|
|
||||||
if (ps.src === "list" && ps.userListId) {
|
if (ps.src === "list" && ps.userListId) {
|
||||||
userList = await UserLists.findOneBy({
|
userList = await UserLists.findOneBy({
|
||||||
id: ps.userListId,
|
id: ps.userListId,
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import define from "../../define.js";
|
import define from "../../define.js";
|
||||||
import config from "@/config/index.js";
|
|
||||||
import { createPerson } from "@/remote/activitypub/models/person.js";
|
import { createPerson } from "@/remote/activitypub/models/person.js";
|
||||||
import { createNote } from "@/remote/activitypub/models/note.js";
|
import { createNote } from "@/remote/activitypub/models/note.js";
|
||||||
import DbResolver from "@/remote/activitypub/db-resolver.js";
|
import DbResolver from "@/remote/activitypub/db-resolver.js";
|
||||||
|
@ -9,11 +8,13 @@ import { extractDbHost } from "@/misc/convert-host.js";
|
||||||
import { Users, Notes } from "@/models/index.js";
|
import { Users, Notes } from "@/models/index.js";
|
||||||
import type { Note } from "@/models/entities/note.js";
|
import type { Note } from "@/models/entities/note.js";
|
||||||
import type { CacheableLocalUser, User } from "@/models/entities/user.js";
|
import type { CacheableLocalUser, User } from "@/models/entities/user.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
|
||||||
import { isActor, isPost, getApId } from "@/remote/activitypub/type.js";
|
import { isActor, isPost, getApId } from "@/remote/activitypub/type.js";
|
||||||
import type { SchemaType } from "@/misc/schema.js";
|
import type { SchemaType } from "@/misc/schema.js";
|
||||||
import { HOUR } from "@/const.js";
|
import { HOUR } from "@/const.js";
|
||||||
import { shouldBlockInstance } from "@/misc/should-block-instance.js";
|
import { shouldBlockInstance } from "@/misc/should-block-instance.js";
|
||||||
|
import { updateQuestion } from "@/remote/activitypub/models/question.js";
|
||||||
|
import { populatePoll } from "@/models/repositories/note.js";
|
||||||
|
import { redisClient } from "@/db/redis.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ["federation"],
|
tags: ["federation"],
|
||||||
|
@ -104,18 +105,29 @@ async function fetchAny(
|
||||||
|
|
||||||
const dbResolver = new DbResolver();
|
const dbResolver = new DbResolver();
|
||||||
|
|
||||||
let local = await mergePack(
|
const [user, note] = await Promise.all([
|
||||||
me,
|
dbResolver.getUserFromApId(uri),
|
||||||
...(await Promise.all([
|
dbResolver.getNoteFromApId(uri),
|
||||||
dbResolver.getUserFromApId(uri),
|
]);
|
||||||
dbResolver.getNoteFromApId(uri),
|
let local = await mergePack(me, user, note);
|
||||||
])),
|
if (local) {
|
||||||
);
|
if (local.type === "Note" && note?.uri && note.hasPoll) {
|
||||||
if (local != null) return local;
|
// Update questions if the stored (remote) note contains the poll
|
||||||
|
const key = `pollFetched:${note.uri}`;
|
||||||
|
if ((await redisClient.exists(key)) === 0) {
|
||||||
|
if (await updateQuestion(note.uri)) {
|
||||||
|
local.object.poll = await populatePoll(note, me?.id ?? null);
|
||||||
|
}
|
||||||
|
// Allow fetching the poll again after 1 minute
|
||||||
|
await redisClient.set(key, 1, "EX", 60);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return local;
|
||||||
|
}
|
||||||
|
|
||||||
// fetching Object once from remote
|
// fetching Object once from remote
|
||||||
const resolver = new Resolver();
|
const resolver = new Resolver();
|
||||||
const object = (await resolver.resolve(uri)) as any;
|
const object = await resolver.resolve(uri);
|
||||||
|
|
||||||
// /@user If a URI other than the id is specified,
|
// /@user If a URI other than the id is specified,
|
||||||
// the URI is determined here
|
// the URI is determined here
|
||||||
|
@ -123,8 +135,8 @@ async function fetchAny(
|
||||||
local = await mergePack(
|
local = await mergePack(
|
||||||
me,
|
me,
|
||||||
...(await Promise.all([
|
...(await Promise.all([
|
||||||
dbResolver.getUserFromApId(object.id),
|
dbResolver.getUserFromApId(getApId(object)),
|
||||||
dbResolver.getNoteFromApId(object.id),
|
dbResolver.getNoteFromApId(getApId(object)),
|
||||||
])),
|
])),
|
||||||
);
|
);
|
||||||
if (local != null) return local;
|
if (local != null) return local;
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
import { Instances } from "@/models/index.js";
|
||||||
|
import define from "../../define.js";
|
||||||
|
|
||||||
|
export const meta = {
|
||||||
|
tags: ["meta"],
|
||||||
|
requireCredential: false,
|
||||||
|
requireCredentialPrivateMode: true,
|
||||||
|
allowGet: true,
|
||||||
|
cacheSec: 60,
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
export const paramDef = {
|
||||||
|
type: "object",
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
export default define(meta, paramDef, async (ps) => {
|
||||||
|
const instances = await Instances.find({
|
||||||
|
select: ["host"],
|
||||||
|
where: {
|
||||||
|
isSuspended: false,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return instances.map((instance) => instance.host);
|
||||||
|
});
|
|
@ -1,6 +1,7 @@
|
||||||
import * as speakeasy from "speakeasy";
|
import { publishMainStream } from "@/services/stream.js";
|
||||||
|
import * as OTPAuth from "otpauth";
|
||||||
import define from "../../../define.js";
|
import define from "../../../define.js";
|
||||||
import { UserProfiles } from "@/models/index.js";
|
import { Users, UserProfiles } from "@/models/index.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
|
@ -25,13 +26,14 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
throw new Error("二段階認証の設定が開始されていません");
|
throw new Error("二段階認証の設定が開始されていません");
|
||||||
}
|
}
|
||||||
|
|
||||||
const verified = (speakeasy as any).totp.verify({
|
const delta = OTPAuth.TOTP.validate({
|
||||||
secret: profile.twoFactorTempSecret,
|
secret: OTPAuth.Secret.fromBase32(profile.twoFactorTempSecret),
|
||||||
encoding: "base32",
|
digits: 6,
|
||||||
token: token,
|
token,
|
||||||
|
window: 1,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!verified) {
|
if (delta === null) {
|
||||||
throw new Error("not verified");
|
throw new Error("not verified");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,4 +41,11 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
twoFactorSecret: profile.twoFactorTempSecret,
|
twoFactorSecret: profile.twoFactorTempSecret,
|
||||||
twoFactorEnabled: true,
|
twoFactorEnabled: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const iObj = await Users.pack(user.id, user, {
|
||||||
|
detail: true,
|
||||||
|
includeSecrets: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
publishMainStream(user.id, "meUpdated", iObj);
|
||||||
});
|
});
|
||||||
|
|
|
@ -28,7 +28,7 @@ export const paramDef = {
|
||||||
attestationObject: { type: "string" },
|
attestationObject: { type: "string" },
|
||||||
password: { type: "string" },
|
password: { type: "string" },
|
||||||
challengeId: { type: "string" },
|
challengeId: { type: "string" },
|
||||||
name: { type: "string" },
|
name: { type: "string", minLength: 1, maxLength: 30 },
|
||||||
},
|
},
|
||||||
required: [
|
required: [
|
||||||
"clientDataJSON",
|
"clientDataJSON",
|
||||||
|
|
|
@ -1,10 +1,20 @@
|
||||||
import define from "../../../define.js";
|
import define from "../../../define.js";
|
||||||
import { UserProfiles } from "@/models/index.js";
|
import { Users, UserProfiles, UserSecurityKeys } from "@/models/index.js";
|
||||||
|
import { publishMainStream } from "@/services/stream.js";
|
||||||
|
import { ApiError } from "../../../error.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
|
|
||||||
secure: true,
|
secure: true,
|
||||||
|
|
||||||
|
errors: {
|
||||||
|
noKey: {
|
||||||
|
message: "No security key.",
|
||||||
|
code: "NO_SECURITY_KEY",
|
||||||
|
id: "f9c54d7f-d4c2-4d3c-9a8g-a70daac86512",
|
||||||
|
},
|
||||||
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
|
@ -16,7 +26,36 @@ export const paramDef = {
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export default define(meta, paramDef, async (ps, user) => {
|
export default define(meta, paramDef, async (ps, user) => {
|
||||||
|
if (ps.value === true) {
|
||||||
|
// セキュリティキーがなければパスワードレスを有効にはできない
|
||||||
|
const keyCount = await UserSecurityKeys.count({
|
||||||
|
where: {
|
||||||
|
userId: user.id,
|
||||||
|
},
|
||||||
|
select: {
|
||||||
|
id: true,
|
||||||
|
name: true,
|
||||||
|
lastUsed: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (keyCount === 0) {
|
||||||
|
await UserProfiles.update(user.id, {
|
||||||
|
usePasswordLessLogin: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
throw new ApiError(meta.errors.noKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
await UserProfiles.update(user.id, {
|
await UserProfiles.update(user.id, {
|
||||||
usePasswordLessLogin: ps.value,
|
usePasswordLessLogin: ps.value,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const iObj = await Users.pack(user.id, user, {
|
||||||
|
detail: true,
|
||||||
|
includeSecrets: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
publishMainStream(user.id, "meUpdated", iObj);
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import * as speakeasy from "speakeasy";
|
import * as OTPAuth from "otpauth";
|
||||||
import * as QRCode from "qrcode";
|
import * as QRCode from "qrcode";
|
||||||
import config from "@/config/index.js";
|
import config from "@/config/index.js";
|
||||||
import { UserProfiles } from "@/models/index.js";
|
import { UserProfiles } from "@/models/index.js";
|
||||||
|
@ -30,25 +30,24 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate user's secret key
|
// Generate user's secret key
|
||||||
const secret = speakeasy.generateSecret({
|
const secret = new OTPAuth.Secret();
|
||||||
length: 32,
|
|
||||||
});
|
|
||||||
|
|
||||||
await UserProfiles.update(user.id, {
|
await UserProfiles.update(user.id, {
|
||||||
twoFactorTempSecret: secret.base32,
|
twoFactorTempSecret: secret.base32,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Get the data URL of the authenticator URL
|
// Get the data URL of the authenticator URL
|
||||||
const url = speakeasy.otpauthURL({
|
const totp = new OTPAuth.TOTP({
|
||||||
secret: secret.base32,
|
secret,
|
||||||
encoding: "base32",
|
digits: 6,
|
||||||
label: user.username,
|
label: user.username,
|
||||||
issuer: config.host,
|
issuer: config.host,
|
||||||
});
|
});
|
||||||
const dataUrl = await QRCode.toDataURL(url);
|
const url = totp.toString();
|
||||||
|
const qr = await QRCode.toDataURL(url);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
qr: dataUrl,
|
qr,
|
||||||
url,
|
url,
|
||||||
secret: secret.base32,
|
secret: secret.base32,
|
||||||
label: user.username,
|
label: user.username,
|
||||||
|
|
|
@ -34,6 +34,24 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
id: ps.credentialId,
|
id: ps.credentialId,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 使われているキーがなくなったらパスワードレスログインをやめる
|
||||||
|
const keyCount = await UserSecurityKeys.count({
|
||||||
|
where: {
|
||||||
|
userId: user.id,
|
||||||
|
},
|
||||||
|
select: {
|
||||||
|
id: true,
|
||||||
|
name: true,
|
||||||
|
lastUsed: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (keyCount === 0) {
|
||||||
|
await UserProfiles.update(me.id, {
|
||||||
|
usePasswordLessLogin: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Publish meUpdated event
|
// Publish meUpdated event
|
||||||
publishMainStream(
|
publishMainStream(
|
||||||
user.id,
|
user.id,
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
|
import { publishMainStream } from "@/services/stream.js";
|
||||||
import define from "../../../define.js";
|
import define from "../../../define.js";
|
||||||
import { UserProfiles } from "@/models/index.js";
|
import { Users, UserProfiles } from "@/models/index.js";
|
||||||
import { comparePassword } from "@/misc/password.js";
|
import { comparePassword } from "@/misc/password.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
|
@ -29,5 +30,13 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
await UserProfiles.update(user.id, {
|
await UserProfiles.update(user.id, {
|
||||||
twoFactorSecret: null,
|
twoFactorSecret: null,
|
||||||
twoFactorEnabled: false,
|
twoFactorEnabled: false,
|
||||||
|
usePasswordLessLogin: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const iObj = await Users.pack(user.id, user, {
|
||||||
|
detail: true,
|
||||||
|
includeSecrets: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
publishMainStream(user.id, "meUpdated", iObj);
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
import { publishMainStream } from "@/services/stream.js";
|
||||||
|
import define from "../../../define.js";
|
||||||
|
import { Users, UserSecurityKeys } from "@/models/index.js";
|
||||||
|
import { ApiError } from "../../../error.js";
|
||||||
|
|
||||||
|
export const meta = {
|
||||||
|
requireCredential: true,
|
||||||
|
|
||||||
|
secure: true,
|
||||||
|
|
||||||
|
errors: {
|
||||||
|
noSuchKey: {
|
||||||
|
message: "No such key.",
|
||||||
|
code: "NO_SUCH_KEY",
|
||||||
|
id: "f9c5467f-d492-4d3c-9a8g-a70dacc86512",
|
||||||
|
},
|
||||||
|
|
||||||
|
accessDenied: {
|
||||||
|
message: "You do not have edit privilege of the channel.",
|
||||||
|
code: "ACCESS_DENIED",
|
||||||
|
id: "1fb7cb09-d46a-4fff-b8df-057708cce513",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
export const paramDef = {
|
||||||
|
type: "object",
|
||||||
|
properties: {
|
||||||
|
name: { type: "string", minLength: 1, maxLength: 30 },
|
||||||
|
credentialId: { type: "string" },
|
||||||
|
},
|
||||||
|
required: ["name", "credentialId"],
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
export default define(meta, paramDef, async (ps, user) => {
|
||||||
|
const key = await UserSecurityKeys.findOneBy({
|
||||||
|
id: ps.credentialId,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (key == null) {
|
||||||
|
throw new ApiError(meta.errors.noSuchKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key.userId !== user.id) {
|
||||||
|
throw new ApiError(meta.errors.accessDenied);
|
||||||
|
}
|
||||||
|
|
||||||
|
await UserSecurityKeys.update(key.id, {
|
||||||
|
name: ps.name,
|
||||||
|
});
|
||||||
|
|
||||||
|
const iObj = await Users.pack(user.id, user, {
|
||||||
|
detail: true,
|
||||||
|
includeSecrets: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
publishMainStream(user.id, "meUpdated", iObj);
|
||||||
|
});
|
|
@ -106,7 +106,6 @@ export const paramDef = {
|
||||||
isBot: { type: "boolean" },
|
isBot: { type: "boolean" },
|
||||||
isCat: { type: "boolean" },
|
isCat: { type: "boolean" },
|
||||||
speakAsCat: { type: "boolean" },
|
speakAsCat: { type: "boolean" },
|
||||||
showTimelineReplies: { type: "boolean" },
|
|
||||||
injectFeaturedNote: { type: "boolean" },
|
injectFeaturedNote: { type: "boolean" },
|
||||||
receiveAnnouncementEmail: { type: "boolean" },
|
receiveAnnouncementEmail: { type: "boolean" },
|
||||||
alwaysMarkNsfw: { type: "boolean" },
|
alwaysMarkNsfw: { type: "boolean" },
|
||||||
|
@ -185,8 +184,6 @@ export default define(meta, paramDef, async (ps, _user, token) => {
|
||||||
if (typeof ps.publicReactions === "boolean")
|
if (typeof ps.publicReactions === "boolean")
|
||||||
profileUpdates.publicReactions = ps.publicReactions;
|
profileUpdates.publicReactions = ps.publicReactions;
|
||||||
if (typeof ps.isBot === "boolean") updates.isBot = ps.isBot;
|
if (typeof ps.isBot === "boolean") updates.isBot = ps.isBot;
|
||||||
if (typeof ps.showTimelineReplies === "boolean")
|
|
||||||
updates.showTimelineReplies = ps.showTimelineReplies;
|
|
||||||
if (typeof ps.carefulBot === "boolean")
|
if (typeof ps.carefulBot === "boolean")
|
||||||
profileUpdates.carefulBot = ps.carefulBot;
|
profileUpdates.carefulBot = ps.carefulBot;
|
||||||
if (typeof ps.autoAcceptFollowed === "boolean")
|
if (typeof ps.autoAcceptFollowed === "boolean")
|
||||||
|
|
|
@ -323,7 +323,7 @@ export const meta = {
|
||||||
optional: false,
|
optional: false,
|
||||||
nullable: false,
|
nullable: false,
|
||||||
},
|
},
|
||||||
elasticsearch: {
|
searchFilters: {
|
||||||
type: "boolean",
|
type: "boolean",
|
||||||
optional: false,
|
optional: false,
|
||||||
nullable: false,
|
nullable: false,
|
||||||
|
@ -521,7 +521,7 @@ export default define(meta, paramDef, async (ps, me) => {
|
||||||
recommendedTimeline: !instance.disableRecommendedTimeline,
|
recommendedTimeline: !instance.disableRecommendedTimeline,
|
||||||
globalTimeLine: !instance.disableGlobalTimeline,
|
globalTimeLine: !instance.disableGlobalTimeline,
|
||||||
emailRequiredForSignup: instance.emailRequiredForSignup,
|
emailRequiredForSignup: instance.emailRequiredForSignup,
|
||||||
elasticsearch: config.elasticsearch ? true : false,
|
searchFilters: config.meilisearch ? true : false,
|
||||||
hcaptcha: instance.enableHcaptcha,
|
hcaptcha: instance.enableHcaptcha,
|
||||||
recaptcha: instance.enableRecaptcha,
|
recaptcha: instance.enableRecaptcha,
|
||||||
objectStorage: instance.useObjectStorage,
|
objectStorage: instance.useObjectStorage,
|
||||||
|
|
|
@ -33,6 +33,7 @@ import { renderActivity } from "@/remote/activitypub/renderer/index.js";
|
||||||
import renderNote from "@/remote/activitypub/renderer/note.js";
|
import renderNote from "@/remote/activitypub/renderer/note.js";
|
||||||
import renderUpdate from "@/remote/activitypub/renderer/update.js";
|
import renderUpdate from "@/remote/activitypub/renderer/update.js";
|
||||||
import { deliverToRelays } from "@/services/relay.js";
|
import { deliverToRelays } from "@/services/relay.js";
|
||||||
|
// import { deliverQuestionUpdate } from "@/services/note/polls/update.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/fetch-meta.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
|
@ -476,14 +477,20 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
if (poll.noteVisibility !== ps.visibility) {
|
if (poll.noteVisibility !== ps.visibility) {
|
||||||
pollUpdate.noteVisibility = ps.visibility;
|
pollUpdate.noteVisibility = ps.visibility;
|
||||||
}
|
}
|
||||||
// We can't do an unordered equal check because the order of choices
|
// Keep votes for unmodified choices, reset votes if choice is modified or new
|
||||||
// is important and if it changes, we need to reset the votes.
|
const oldVoteCounts = new Map<string, number>();
|
||||||
if (JSON.stringify(poll.choices) !== JSON.stringify(pp.choices)) {
|
for (let i = 0; i < poll.choices.length; i++) {
|
||||||
pollUpdate.choices = pp.choices;
|
oldVoteCounts.set(poll.choices[i], poll.votes[i]);
|
||||||
pollUpdate.votes = new Array(pp.choices.length).fill(0);
|
|
||||||
}
|
}
|
||||||
|
const newVotes = pp.choices.map(
|
||||||
|
(choice) => oldVoteCounts.get(choice) || 0,
|
||||||
|
);
|
||||||
|
pollUpdate.choices = pp.choices;
|
||||||
|
pollUpdate.votes = newVotes;
|
||||||
if (notEmpty(pollUpdate)) {
|
if (notEmpty(pollUpdate)) {
|
||||||
await Polls.update(note.id, pollUpdate);
|
await Polls.update(note.id, pollUpdate);
|
||||||
|
// Seemingly already handled by by the rendered update activity
|
||||||
|
// await deliverQuestionUpdate(note.id);
|
||||||
}
|
}
|
||||||
publishing = true;
|
publishing = true;
|
||||||
}
|
}
|
||||||
|
@ -520,9 +527,12 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
if (ps.text !== note.text) {
|
if (ps.text !== note.text) {
|
||||||
update.text = ps.text;
|
update.text = ps.text;
|
||||||
}
|
}
|
||||||
if (ps.cw !== note.cw) {
|
if (ps.cw !== note.cw || (ps.cw && !note.cw)) {
|
||||||
update.cw = ps.cw;
|
update.cw = ps.cw;
|
||||||
}
|
}
|
||||||
|
if (!ps.cw && note.cw) {
|
||||||
|
update.cw = null;
|
||||||
|
}
|
||||||
if (ps.visibility !== note.visibility) {
|
if (ps.visibility !== note.visibility) {
|
||||||
update.visibility = ps.visibility;
|
update.visibility = ps.visibility;
|
||||||
}
|
}
|
||||||
|
@ -593,7 +603,7 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (publishing) {
|
if (publishing) {
|
||||||
index(note);
|
index(note, true);
|
||||||
|
|
||||||
// Publish update event for the updated note details
|
// Publish update event for the updated note details
|
||||||
publishNoteStream(note.id, "updated", {
|
publishNoteStream(note.id, "updated", {
|
||||||
|
|
|
@ -53,6 +53,11 @@ export const paramDef = {
|
||||||
untilId: { type: "string", format: "misskey:id" },
|
untilId: { type: "string", format: "misskey:id" },
|
||||||
sinceDate: { type: "integer" },
|
sinceDate: { type: "integer" },
|
||||||
untilDate: { type: "integer" },
|
untilDate: { type: "integer" },
|
||||||
|
withReplies: {
|
||||||
|
type: "boolean",
|
||||||
|
default: false,
|
||||||
|
description: "Show replies in the timeline",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
required: [],
|
required: [],
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -87,7 +92,7 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
.leftJoinAndSelect("renoteUser.avatar", "renoteUserAvatar")
|
.leftJoinAndSelect("renoteUser.avatar", "renoteUserAvatar")
|
||||||
.leftJoinAndSelect("renoteUser.banner", "renoteUserBanner");
|
.leftJoinAndSelect("renoteUser.banner", "renoteUserBanner");
|
||||||
|
|
||||||
generateRepliesQuery(query, user);
|
generateRepliesQuery(query, ps.withReplies, user);
|
||||||
if (user) {
|
if (user) {
|
||||||
generateMutedUserQuery(query, user);
|
generateMutedUserQuery(query, user);
|
||||||
generateMutedNoteQuery(query, user);
|
generateMutedNoteQuery(query, user);
|
||||||
|
|
|
@ -60,6 +60,11 @@ export const paramDef = {
|
||||||
default: false,
|
default: false,
|
||||||
description: "Only show notes that have attached files.",
|
description: "Only show notes that have attached files.",
|
||||||
},
|
},
|
||||||
|
withReplies: {
|
||||||
|
type: "boolean",
|
||||||
|
default: false,
|
||||||
|
description: "Show replies in the timeline",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
required: [],
|
required: [],
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -104,7 +109,7 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
.setParameters(followingQuery.getParameters());
|
.setParameters(followingQuery.getParameters());
|
||||||
|
|
||||||
generateChannelQuery(query, user);
|
generateChannelQuery(query, user);
|
||||||
generateRepliesQuery(query, user);
|
generateRepliesQuery(query, ps.withReplies, user);
|
||||||
generateVisibilityQuery(query, user);
|
generateVisibilityQuery(query, user);
|
||||||
generateMutedUserQuery(query, user);
|
generateMutedUserQuery(query, user);
|
||||||
generateMutedNoteQuery(query, user);
|
generateMutedNoteQuery(query, user);
|
||||||
|
|
|
@ -63,6 +63,11 @@ export const paramDef = {
|
||||||
untilId: { type: "string", format: "misskey:id" },
|
untilId: { type: "string", format: "misskey:id" },
|
||||||
sinceDate: { type: "integer" },
|
sinceDate: { type: "integer" },
|
||||||
untilDate: { type: "integer" },
|
untilDate: { type: "integer" },
|
||||||
|
withReplies: {
|
||||||
|
type: "boolean",
|
||||||
|
default: false,
|
||||||
|
description: "Show replies in the timeline",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
required: [],
|
required: [],
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -97,7 +102,7 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
.leftJoinAndSelect("renoteUser.banner", "renoteUserBanner");
|
.leftJoinAndSelect("renoteUser.banner", "renoteUserBanner");
|
||||||
|
|
||||||
generateChannelQuery(query, user);
|
generateChannelQuery(query, user);
|
||||||
generateRepliesQuery(query, user);
|
generateRepliesQuery(query, ps.withReplies, user);
|
||||||
generateVisibilityQuery(query, user);
|
generateVisibilityQuery(query, user);
|
||||||
if (user) generateMutedUserQuery(query, user);
|
if (user) generateMutedUserQuery(query, user);
|
||||||
if (user) generateMutedNoteQuery(query, user);
|
if (user) generateMutedNoteQuery(query, user);
|
||||||
|
|
|
@ -4,7 +4,6 @@ import { createNotification } from "@/services/create-notification.js";
|
||||||
import { deliver } from "@/queue/index.js";
|
import { deliver } from "@/queue/index.js";
|
||||||
import { renderActivity } from "@/remote/activitypub/renderer/index.js";
|
import { renderActivity } from "@/remote/activitypub/renderer/index.js";
|
||||||
import renderVote from "@/remote/activitypub/renderer/vote.js";
|
import renderVote from "@/remote/activitypub/renderer/vote.js";
|
||||||
import { deliverQuestionUpdate } from "@/services/note/polls/update.js";
|
|
||||||
import {
|
import {
|
||||||
PollVotes,
|
PollVotes,
|
||||||
NoteWatchings,
|
NoteWatchings,
|
||||||
|
@ -178,7 +177,4 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
pollOwner.inbox,
|
pollOwner.inbox,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// リモートフォロワーにUpdate配信
|
|
||||||
deliverQuestionUpdate(note.id);
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -63,6 +63,11 @@ export const paramDef = {
|
||||||
untilId: { type: "string", format: "misskey:id" },
|
untilId: { type: "string", format: "misskey:id" },
|
||||||
sinceDate: { type: "integer" },
|
sinceDate: { type: "integer" },
|
||||||
untilDate: { type: "integer" },
|
untilDate: { type: "integer" },
|
||||||
|
withReplies: {
|
||||||
|
type: "boolean",
|
||||||
|
default: false,
|
||||||
|
description: "Show replies in the timeline",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
required: [],
|
required: [],
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -100,7 +105,7 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
.leftJoinAndSelect("renoteUser.banner", "renoteUserBanner");
|
.leftJoinAndSelect("renoteUser.banner", "renoteUserBanner");
|
||||||
|
|
||||||
generateChannelQuery(query, user);
|
generateChannelQuery(query, user);
|
||||||
generateRepliesQuery(query, user);
|
generateRepliesQuery(query, ps.withReplies, user);
|
||||||
generateVisibilityQuery(query, user);
|
generateVisibilityQuery(query, user);
|
||||||
if (user) generateMutedUserQuery(query, user);
|
if (user) generateMutedUserQuery(query, user);
|
||||||
if (user) generateMutedNoteQuery(query, user);
|
if (user) generateMutedNoteQuery(query, user);
|
||||||
|
|
|
@ -2,9 +2,9 @@ import { In } from "typeorm";
|
||||||
import { Notes } from "@/models/index.js";
|
import { Notes } from "@/models/index.js";
|
||||||
import { Note } from "@/models/entities/note.js";
|
import { Note } from "@/models/entities/note.js";
|
||||||
import config from "@/config/index.js";
|
import config from "@/config/index.js";
|
||||||
import es from "../../../../db/elasticsearch.js";
|
import es from "@/db/elasticsearch.js";
|
||||||
import sonic from "../../../../db/sonic.js";
|
import sonic from "@/db/sonic.js";
|
||||||
import meilisearch, { MeilisearchNote } from "../../../../db/meilisearch.js";
|
import meilisearch, { MeilisearchNote } from "@/db/meilisearch.js";
|
||||||
import define from "../../define.js";
|
import define from "../../define.js";
|
||||||
import { makePaginationQuery } from "../../common/make-pagination-query.js";
|
import { makePaginationQuery } from "../../common/make-pagination-query.js";
|
||||||
import { generateVisibilityQuery } from "../../common/generate-visibility-query.js";
|
import { generateVisibilityQuery } from "../../common/generate-visibility-query.js";
|
||||||
|
|
|
@ -54,6 +54,11 @@ export const paramDef = {
|
||||||
default: false,
|
default: false,
|
||||||
description: "Only show notes that have attached files.",
|
description: "Only show notes that have attached files.",
|
||||||
},
|
},
|
||||||
|
withReplies: {
|
||||||
|
type: "boolean",
|
||||||
|
default: false,
|
||||||
|
description: "Show replies in the timeline",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
required: [],
|
required: [],
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -100,7 +105,7 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
.setParameters(followingQuery.getParameters());
|
.setParameters(followingQuery.getParameters());
|
||||||
|
|
||||||
generateChannelQuery(query, user);
|
generateChannelQuery(query, user);
|
||||||
generateRepliesQuery(query, user);
|
generateRepliesQuery(query, ps.withReplies, user);
|
||||||
generateVisibilityQuery(query, user);
|
generateVisibilityQuery(query, user);
|
||||||
generateMutedUserQuery(query, user);
|
generateMutedUserQuery(query, user);
|
||||||
generateMutedNoteQuery(query, user);
|
generateMutedNoteQuery(query, user);
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import define from "../define.js";
|
import define from "../define.js";
|
||||||
|
import { redisClient } from "@/db/redis.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ["meta"],
|
tags: ["meta"],
|
||||||
|
@ -16,13 +17,15 @@ export const paramDef = {
|
||||||
|
|
||||||
export default define(meta, paramDef, async () => {
|
export default define(meta, paramDef, async () => {
|
||||||
let patrons;
|
let patrons;
|
||||||
await fetch(
|
const cachedPatrons = await redisClient.get("patrons");
|
||||||
"https://codeberg.org/calckey/calckey/raw/branch/develop/patrons.json",
|
if (cachedPatrons) {
|
||||||
)
|
patrons = JSON.parse(cachedPatrons);
|
||||||
.then((response) => response.json())
|
} else {
|
||||||
.then((data) => {
|
patrons = await fetch(
|
||||||
patrons = data["patrons"];
|
"https://codeberg.org/calckey/calckey/raw/branch/develop/patrons.json",
|
||||||
});
|
).then((response) => response.json());
|
||||||
|
await redisClient.set("patrons", JSON.stringify(patrons), "EX", 3600);
|
||||||
|
}
|
||||||
|
|
||||||
return patrons;
|
return patrons["patrons"];
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import * as os from "node:os";
|
import * as os from "node:os";
|
||||||
import si from "systeminformation";
|
import si from "systeminformation";
|
||||||
import define from "../define.js";
|
import define from "../define.js";
|
||||||
import meilisearch from "../../../db/meilisearch.js";
|
import meilisearch from "@/db/meilisearch.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
requireCredential: false,
|
requireCredential: false,
|
||||||
|
@ -19,7 +19,15 @@ export const paramDef = {
|
||||||
export default define(meta, paramDef, async () => {
|
export default define(meta, paramDef, async () => {
|
||||||
const memStats = await si.mem();
|
const memStats = await si.mem();
|
||||||
const fsStats = await si.fsSize();
|
const fsStats = await si.fsSize();
|
||||||
const meilisearchStats = await meilisearchStatus();
|
|
||||||
|
let fsIndex = 0;
|
||||||
|
// Get the first index of fs sizes that are actualy used.
|
||||||
|
for (const [i, stat] of fsStats.entries()) {
|
||||||
|
if (stat.rw === true && stat.used > 0) {
|
||||||
|
fsIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
machine: os.hostname(),
|
machine: os.hostname(),
|
||||||
|
@ -31,8 +39,8 @@ export default define(meta, paramDef, async () => {
|
||||||
total: memStats.total,
|
total: memStats.total,
|
||||||
},
|
},
|
||||||
fs: {
|
fs: {
|
||||||
total: fsStats[0].size,
|
total: fsStats[fsIndex].size,
|
||||||
used: fsStats[0].used,
|
used: fsStats[fsIndex].used,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { Instances, NoteReactions, Notes, Users } from "@/models/index.js";
|
import { Instances, NoteReactions, Notes, Users } from "@/models/index.js";
|
||||||
import define from "../define.js";
|
import define from "../define.js";
|
||||||
import {} from "@/services/chart/index.js";
|
import { driveChart, notesChart, usersChart } from "@/services/chart/index.js";
|
||||||
import { IsNull } from "typeorm";
|
import { IsNull } from "typeorm";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
|
@ -60,19 +60,25 @@ export const paramDef = {
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export default define(meta, paramDef, async () => {
|
export default define(meta, paramDef, async () => {
|
||||||
|
const notesChartData = await notesChart.getChart("hour", 1, null);
|
||||||
|
const notesCount =
|
||||||
|
notesChartData.local.total[0] + notesChartData.remote.total[0];
|
||||||
|
const originalNotesCount = notesChartData.local.total[0];
|
||||||
|
|
||||||
|
const usersChartData = await usersChart.getChart("hour", 1, null);
|
||||||
|
const usersCount =
|
||||||
|
usersChartData.local.total[0] + usersChartData.remote.total[0];
|
||||||
|
const originalUsersCount = usersChartData.local.total[0];
|
||||||
|
const driveChartData = await driveChart.getChart("hour", 1, null);
|
||||||
|
//TODO: fixme currently returns 0
|
||||||
|
const driveUsageLocal = driveChartData.local.incSize[0];
|
||||||
|
const driveUsageRemote = driveChartData.remote.incSize[0];
|
||||||
|
|
||||||
const [
|
const [
|
||||||
notesCount,
|
|
||||||
originalNotesCount,
|
|
||||||
usersCount,
|
|
||||||
originalUsersCount,
|
|
||||||
reactionsCount,
|
reactionsCount,
|
||||||
//originalReactionsCount,
|
//originalReactionsCount,
|
||||||
instances,
|
instances,
|
||||||
] = await Promise.all([
|
] = await Promise.all([
|
||||||
Notes.count({ cache: 3600000 }), // 1 hour
|
|
||||||
Notes.count({ where: { userHost: IsNull() }, cache: 3600000 }),
|
|
||||||
Users.count({ cache: 3600000 }),
|
|
||||||
Users.count({ where: { host: IsNull() }, cache: 3600000 }),
|
|
||||||
NoteReactions.count({ cache: 3600000 }), // 1 hour
|
NoteReactions.count({ cache: 3600000 }), // 1 hour
|
||||||
//NoteReactions.count({ where: { userHost: IsNull() }, cache: 3600000 }),
|
//NoteReactions.count({ where: { userHost: IsNull() }, cache: 3600000 }),
|
||||||
Instances.count({ cache: 3600000 }),
|
Instances.count({ cache: 3600000 }),
|
||||||
|
@ -86,7 +92,7 @@ export default define(meta, paramDef, async () => {
|
||||||
reactionsCount,
|
reactionsCount,
|
||||||
//originalReactionsCount,
|
//originalReactionsCount,
|
||||||
instances,
|
instances,
|
||||||
driveUsageLocal: 0,
|
driveUsageLocal,
|
||||||
driveUsageRemote: 0,
|
driveUsageRemote,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -37,6 +37,12 @@ export const meta = {
|
||||||
code: "FORBIDDEN",
|
code: "FORBIDDEN",
|
||||||
id: "3c6a84db-d619-26af-ca14-06232a21df8a",
|
id: "3c6a84db-d619-26af-ca14-06232a21df8a",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
nullFollowers: {
|
||||||
|
message: "No followers found.",
|
||||||
|
code: "NULL_FOLLOWERS",
|
||||||
|
id: "174a6507-a6c2-4925-8e5d-92fd08aedc9e",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
|
@ -97,7 +103,7 @@ export default define(meta, paramDef, async (ps, me) => {
|
||||||
followerId: me.id,
|
followerId: me.id,
|
||||||
});
|
});
|
||||||
if (following == null) {
|
if (following == null) {
|
||||||
throw new ApiError(meta.errors.forbidden);
|
throw new ApiError(meta.errors.nullFollowers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,7 +87,7 @@ mastoFileRouter.post("/v1/media", upload.single("file"), async (ctx) => {
|
||||||
const accessTokens = ctx.headers.authorization;
|
const accessTokens = ctx.headers.authorization;
|
||||||
const client = getClient(BASE_URL, accessTokens);
|
const client = getClient(BASE_URL, accessTokens);
|
||||||
try {
|
try {
|
||||||
let multipartData = await ctx.file;
|
const multipartData = await ctx.file;
|
||||||
if (!multipartData) {
|
if (!multipartData) {
|
||||||
ctx.body = { error: "No image" };
|
ctx.body = { error: "No image" };
|
||||||
ctx.status = 401;
|
ctx.status = 401;
|
||||||
|
@ -106,7 +106,7 @@ mastoFileRouter.post("/v2/media", upload.single("file"), async (ctx) => {
|
||||||
const accessTokens = ctx.headers.authorization;
|
const accessTokens = ctx.headers.authorization;
|
||||||
const client = getClient(BASE_URL, accessTokens);
|
const client = getClient(BASE_URL, accessTokens);
|
||||||
try {
|
try {
|
||||||
let multipartData = await ctx.file;
|
const multipartData = await ctx.file;
|
||||||
if (!multipartData) {
|
if (!multipartData) {
|
||||||
ctx.body = { error: "No image" };
|
ctx.body = { error: "No image" };
|
||||||
ctx.status = 401;
|
ctx.status = 401;
|
||||||
|
@ -185,17 +185,6 @@ router.use(discord.routes());
|
||||||
router.use(github.routes());
|
router.use(github.routes());
|
||||||
router.use(twitter.routes());
|
router.use(twitter.routes());
|
||||||
|
|
||||||
router.get("/v1/instance/peers", async (ctx) => {
|
|
||||||
const instances = await Instances.find({
|
|
||||||
select: ["host"],
|
|
||||||
where: {
|
|
||||||
isSuspended: false,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
ctx.body = instances.map((instance) => instance.host);
|
|
||||||
});
|
|
||||||
|
|
||||||
router.post("/miauth/:session/check", async (ctx) => {
|
router.post("/miauth/:session/check", async (ctx) => {
|
||||||
const token = await AccessTokens.findOneBy({
|
const token = await AccessTokens.findOneBy({
|
||||||
session: ctx.params.session,
|
session: ctx.params.session,
|
||||||
|
|
|
@ -3,6 +3,7 @@ import { CacheableLocalUser, User } from "@/models/entities/user.js";
|
||||||
import Logger from "@/services/logger.js";
|
import Logger from "@/services/logger.js";
|
||||||
import { redisClient } from "../../db/redis.js";
|
import { redisClient } from "../../db/redis.js";
|
||||||
import type { IEndpointMeta } from "./endpoints.js";
|
import type { IEndpointMeta } from "./endpoints.js";
|
||||||
|
import { convertMilliseconds } from "@/misc/convert-milliseconds.js";
|
||||||
|
|
||||||
const logger = new Logger("limiter");
|
const logger = new Logger("limiter");
|
||||||
|
|
||||||
|
@ -76,7 +77,10 @@ export const limiter = (
|
||||||
);
|
);
|
||||||
|
|
||||||
if (info.remaining === 0) {
|
if (info.remaining === 0) {
|
||||||
reject("RATE_LIMIT_EXCEEDED");
|
reject({
|
||||||
|
message: "RATE_LIMIT_EXCEEDED",
|
||||||
|
remainingTime: convertMilliseconds(info.resetMs),
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
ok();
|
ok();
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ export async function getInstance(response: Entity.Instance) {
|
||||||
uri: response.uri,
|
uri: response.uri,
|
||||||
title: response.title || "Calckey",
|
title: response.title || "Calckey",
|
||||||
short_description:
|
short_description:
|
||||||
response.description.substring(0, 50) || "See real server website",
|
response.description?.substring(0, 50) || "See real server website",
|
||||||
description:
|
description:
|
||||||
response.description ||
|
response.description ||
|
||||||
"This is a vanilla Calckey Instance. It doesnt seem to have a description. BTW you are using the Mastodon api to access this server :)",
|
"This is a vanilla Calckey Instance. It doesnt seem to have a description. BTW you are using the Mastodon api to access this server :)",
|
||||||
|
|
|
@ -3,7 +3,7 @@ export const errors = {
|
||||||
INVALID_PARAM: {
|
INVALID_PARAM: {
|
||||||
value: {
|
value: {
|
||||||
error: {
|
error: {
|
||||||
message: "Invalid param.",
|
message: "Invalid parameter.",
|
||||||
code: "INVALID_PARAM",
|
code: "INVALID_PARAM",
|
||||||
id: "3d81ceae-475f-4600-b2a8-2bc116157532",
|
id: "3d81ceae-475f-4600-b2a8-2bc116157532",
|
||||||
},
|
},
|
||||||
|
@ -25,8 +25,7 @@ export const errors = {
|
||||||
AUTHENTICATION_FAILED: {
|
AUTHENTICATION_FAILED: {
|
||||||
value: {
|
value: {
|
||||||
error: {
|
error: {
|
||||||
message:
|
message: "Authentication failed.",
|
||||||
"Authentication failed. Please ensure your token is correct.",
|
|
||||||
code: "AUTHENTICATION_FAILED",
|
code: "AUTHENTICATION_FAILED",
|
||||||
id: "b0a7f5f8-dc2f-4171-b91f-de88ad238e14",
|
id: "b0a7f5f8-dc2f-4171-b91f-de88ad238e14",
|
||||||
},
|
},
|
||||||
|
@ -38,7 +37,7 @@ export const errors = {
|
||||||
value: {
|
value: {
|
||||||
error: {
|
error: {
|
||||||
message:
|
message:
|
||||||
"You sent a request to Calc, Calckey's resident stoner furry, instead of the server.",
|
"You sent a request to Calc instead of the server. How did this happen?",
|
||||||
code: "I_AM_CALC",
|
code: "I_AM_CALC",
|
||||||
id: "60c46cd1-f23a-46b1-bebe-5d2b73951a84",
|
id: "60c46cd1-f23a-46b1-bebe-5d2b73951a84",
|
||||||
},
|
},
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue