Merge branch 'develop' into beta

This commit is contained in:
ThatOneCalculator 2023-06-05 17:11:55 -07:00
commit 9b55518bf8
No known key found for this signature in database
GPG key ID: 8703CACD01000000
569 changed files with 24319 additions and 9992 deletions

38
.config/devenv.yml Normal file
View file

@ -0,0 +1,38 @@
url: http://localhost:3000
port: 3000
db:
host: 127.0.0.1
port: 5432
db: calckey
user: calckey
pass: calckey
redis:
host: localhost
port: 6379
family: 4
#sonic:
# host: localhost
# port: 1491
# auth: SecretPassword
# collection: notes
# bucket: default
#elasticsearch:
# host: localhost
# port: 9200
# ssl: false
# user:
# pass:
id: 'aid'
reservedUsernames:
- root
- admin
- administrator
- me
- system

View file

@ -2,32 +2,31 @@
# Calckey configuration # Calckey configuration
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# After starting your server, please don't change the URL! Doing so will break federation.
# ┌─────┐ # ┌─────┐
#───┘ URL └───────────────────────────────────────────────────── #───┘ URL └─────────────────────────────────────────────────────
# Final accessible URL seen by a user. # Final accessible URL seen by a user.
url: https://example.tld/ url: https://example.com/
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# URL SETTINGS AFTER THAT!
# ┌───────────────────────┐ # ┌───────────────────────┐
#───┘ Port and TLS settings └─────────────────────────────────── #───┘ Port and TLS settings └───────────────────────────────────
# #
# Misskey requires a reverse proxy to support HTTPS connections. # Calckey requires a reverse proxy to support HTTPS connections.
# #
# +----- https://example.tld/ ------------+ # +----- https://example.com/ ------------+
# +------+ |+-------------+ +----------------+| # +------+ |+-------------+ +----------------+|
# | User | ---> || Proxy (443) | ---> | Misskey (3000) || # | User | ---> || Proxy (443) | ---> | Calckey (3000) ||
# +------+ |+-------------+ +----------------+| # +------+ |+-------------+ +----------------+|
# +---------------------------------------+ # +---------------------------------------+
# #
# You need to set up a reverse proxy. (e.g. nginx) # You need to set up a reverse proxy. (e.g. nginx, caddy)
# An encrypted connection with HTTPS is highly recommended # An encrypted connection with HTTPS is highly recommended
# because tokens may be transferred in GET requests. # because tokens may be transferred in GET requests.
# The port that your Misskey server should listen on. # The port that your Calckey server should listen on.
port: 3000 port: 3000
# ┌──────────────────────────┐ # ┌──────────────────────────┐
@ -62,6 +61,17 @@ redis:
#prefix: example-prefix #prefix: example-prefix
#db: 1 #db: 1
# Please configure either MeiliSearch *or* Sonic.
# If both MeiliSearch and Sonic configurations are present, MeiliSearch will take precedence.
# ┌───────────────────────────┐
#───┘ MeiliSearch configuration └─────────────────────────────────────
#meilisearch:
# host: meilisearch
# port: 7700
# ssl: false
# apiKey:
# ┌─────────────────────┐ # ┌─────────────────────┐
#───┘ Sonic configuration └───────────────────────────────────── #───┘ Sonic configuration └─────────────────────────────────────
@ -72,50 +82,39 @@ redis:
# collection: notes # collection: notes
# bucket: default # bucket: default
# ┌─────────────────────────────┐
#───┘ Elasticsearch configuration └─────────────────────────────
#elasticsearch:
# host: localhost
# port: 9200
# ssl: false
# user:
# pass:
# ┌───────────────┐ # ┌───────────────┐
#───┘ ID generation └─────────────────────────────────────────── #───┘ ID generation └───────────────────────────────────────────
# You can select the ID generation method. # No need to uncomment in most cases, but you may want to change
# You don't usually need to change this setting, but you can # these settings if you plan to run a large and/or distributed server.
# change it according to your preferences.
# Available methods: # cuid:
# aid ... Short, Millisecond accuracy # # Min 16, Max 24
# meid ... Similar to ObjectID, Millisecond accuracy # length: 16
# ulid ... Millisecond accuracy #
# objectid ... This is left for backward compatibility # # Set this to a unique string across workers (e.g., machine's hostname)
# # if your workers are running in multiple hosts.
# fingerprint: my-fingerprint
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# ID SETTINGS AFTER THAT!
id: 'aid'
# ┌─────────────────────┐ # ┌─────────────────────┐
#───┘ Other configuration └───────────────────────────────────── #───┘ Other configuration └─────────────────────────────────────
# Max note length, should be < 8000. # Maximum length of a post (default 3000, max 8192)
#maxNoteLength: 3000 #maxNoteLength: 3000
# Maximum lenght of an image caption or file comment (default 1500, max 8192) # Maximum length of an image caption (default 1500, max 8192)
#maxCaptionLength: 1500 #maxCaptionLength: 1500
# Reserved usernames that only the administrator can register with # Reserved usernames that only the administrator can register with
reservedUsernames: reservedUsernames: [
- root 'root',
- admin 'admin',
- administrator 'administrator',
- me 'me',
- system 'system'
]
# Whether disable HSTS # Whether disable HSTS
#disableHsts: true #disableHsts: true
@ -123,6 +122,9 @@ reservedUsernames:
# Number of worker processes # Number of worker processes
#clusterLimit: 1 #clusterLimit: 1
# Worker only mode
#onlyQueueProcessor: 1
# Job concurrency per worker # Job concurrency per worker
# deliverJobConcurrency: 128 # deliverJobConcurrency: 128
# inboxJobConcurrency: 16 # inboxJobConcurrency: 16
@ -176,13 +178,21 @@ reservedUsernames:
# Upload or download file size limits (bytes) # Upload or download file size limits (bytes)
#maxFileSize: 262144000 #maxFileSize: 262144000
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Congrats, you've reached the end of the config file needed for most deployments!
# Enjoy your Calckey server!
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Managed hosting settings # Managed hosting settings
# !!!!!!!!!! # >>> NORMAL SELF-HOSTERS, STAY AWAY! <<<
# >>>>>> NORMAL SELF-HOSTERS, STAY AWAY! <<<<<< # >>> YOU DON'T NEED THIS! <<<
# >>>>>> YOU DON'T NEED THIS! <<<<<<
# !!!!!!!!!!
# Each category is optional, but if each item in each category is mandatory! # Each category is optional, but if each item in each category is mandatory!
# If you mess this up, that's on you, you've been warned... # If you mess this up, that's on you, you've been warned...
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#maxUserSignups: 100 #maxUserSignups: 100
#isManagedHosting: true #isManagedHosting: true

View file

@ -0,0 +1,82 @@
replicaCount: 1
resources:
requests:
cpu: 0.5
memory: 512Mi
limits:
cpu: 1
memory: 1Gi
calckey:
domain: example.tld
smtp:
from_address: noreply@example.tld
port: 587
server: smtp.gmail.com
useImplicitSslTls: false
login: me@example.tld
password: CHANGEME
objectStorage:
baseUrl: https://example-bucket.nyc3.cdn.digitaloceanspaces.com
access_key: CHANGEME
access_secret: CHANGEME
bucket: example-bucket
endpoint: nyc3.digitaloceanspaces.com:443
region: nyc3
allowedPrivateNetworks: []
ingress:
enabled: true
annotations:
cert-manager.io/cluster-issuer: letsencrypt
hosts:
- host: example.tld
paths:
- path: /
pathType: ImplementationSpecific
tls:
- secretName: example-tld-certificate
hosts:
- example.tld
elasticsearch:
enabled: false
postgresql:
auth:
password: CHANGEME
postgresPassword: CHANGEME
primary:
persistence:
enabled: true
storageClass: vultr-block-storage
size: 25Gi
resources:
requests:
cpu: 0.25
memory: 256Mi
limits:
cpu: 0.5
memory: 512Mi
metrics:
enabled: true
redis:
auth:
password: CHANGEME
master:
resources:
requests:
cpu: 0.25
memory: 256Mi
limits:
cpu: 0.5
memory: 256Mi
persistence:
storageclass: vultr-block-storage
size: 10Gi
replica:
replicaCount: 0
metrics:
enabled: true

4
.envrc Normal file
View file

@ -0,0 +1,4 @@
if ! has nix_direnv_version || ! nix_direnv_version 2.3.0; then
source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/2.3.0/direnvrc" "sha256-Dmd+j63L84wuzgyjITIfSxSD57Tx7v51DMxVZOsiUD8="
fi
use flake . --impure

10
.gitignore vendored
View file

@ -22,7 +22,9 @@ coverage
# config # config
/.config/* /.config/*
!/.config/example.yml !/.config/example.yml
!/.config/devenv.yml
!/.config/docker_example.env !/.config/docker_example.env
!/.config/helm_values_example.yml
#docker dev config #docker dev config
/dev/docker-compose.yml /dev/docker-compose.yml
@ -56,3 +58,11 @@ packages/backend/assets/sounds/None.mp3
# old yarn # old yarn
.yarn .yarn
yarn* yarn*
# Nix Development shell items
.devenv
.direnv
# Cargo cache for Docker
/.cargo-cache
/.cargo-target

View file

@ -1 +1 @@
v16.15.0 v18.16.0

View file

@ -16,4 +16,3 @@ pipeline:
# Push new version when version tag is created # Push new version when version tag is created
event: tag event: tag
tag: v* tag: v*

View file

@ -11,7 +11,7 @@
- Federate with note edits - Federate with note edits
- User "choices" (recommended users) 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 instance blocks - Option to publicize server blocks
- Build flag to remove NSFW/AI stuff - Build flag to remove NSFW/AI stuff
- Filter notifications by user - Filter notifications by user
- Exclude self from antenna - Exclude self from antenna
@ -19,8 +19,7 @@
- MFM button - MFM button
- Personal notes for all accounts - Personal notes for all accounts
- Fully revamp non-logged-in screen - Fully revamp non-logged-in screen
- Classic mode make instance icon bring up new context menu - Lookup/details for post/file/server
- Lookup/details for post/file/instance
- [Rat mode?](https://stop.voring.me/notes/933fx97bmd) - [Rat mode?](https://stop.voring.me/notes/933fx97bmd)
## Work in progress ## Work in progress
@ -44,7 +43,7 @@
- Upgrade packages with security vunrabilities - Upgrade packages with security vunrabilities
- Saner defaults - Saner defaults
- Fediverse account migration - Fediverse account migration
- Recommended instances timeline - Recommended servers timeline
- OCR image captioning - OCR image captioning
- Improve mobile UX - Improve mobile UX
- Swipe through pages on mobile - Swipe through pages on mobile
@ -72,7 +71,7 @@
- Better welcome screen (not logged in) - Better welcome screen (not logged in)
- vue-plyr as video/audio player - vue-plyr as video/audio player
- Ability to turn off "Connection lost" message - Ability to turn off "Connection lost" message
- Raw instance 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 - SearchX instead of Google
@ -99,7 +98,7 @@
- Obliteration of Ai-chan - Obliteration of Ai-chan
- Switch to [Calckey.js](https://codeberg.org/calckey/calckey.js) - Switch to [Calckey.js](https://codeberg.org/calckey/calckey.js)
- Woozy mode 🥴 - Woozy mode 🥴
- Improve blocking instances - Improve blocking servers
- Release notes - Release notes
- New post style - New post style
- Admins set default reaction emoji - Admins set default reaction emoji
@ -118,6 +117,13 @@
- Sonic search - Sonic search
- Popular color schemes, including Nord, Gruvbox, and Catppuccin - Popular color schemes, including Nord, Gruvbox, and Catppuccin
- Non-nyaify cat mode - Non-nyaify cat mode
- Post imports from other Calckey/Misskey/Mastodon/Pleroma/Akkoma servers
- Improve Classic mode
- Proper Helm/Kubernetes config
- Multiple boost visibilities
- Improve system emails
- Mod mail
- Focus trapping and button labels
## Implemented (remote) ## Implemented (remote)

View file

@ -62,7 +62,7 @@ representative at an online or offline event.
Instances of abusive, harassing, or otherwise unacceptable behavior may be Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at reported to the community leaders responsible for enforcement at
@thatonecalculator on Codeberg, @thatonecalculator on Codeberg,
`@thatonecalculator@stop.voring.me` or `@t1c@i.calckey.cloud` on the Fediverse, `@kainoa@calckey.social` on the Fediverse,
or kainoa@t1c.dev via email. or kainoa@t1c.dev via email.
All complaints will be reviewed and investigated promptly and fairly. All complaints will be reviewed and investigated promptly and fairly.

View file

@ -1,8 +1,8 @@
# Contribution guide # Contribution guide
We're glad you're interested in contributing Calckey! In this document you will find the information you need to contribute to the project. We're glad you're interested in contributing Calckey! In this document you will find the information you need to contribute to the project.
## Localization (l10n) ## Translation (i18n)
Calckey uses [Weblate](hhttps://hosted.weblate.org/engage/calckey/) for localization management. Calckey uses [Weblate](hhttps://hosted.weblate.org/engage/calckey/) for translation and internationalization management.
If your language is not listed in Weblate, please open an issue. If your language is not listed in Weblate, please open an issue.

View file

@ -3,6 +3,7 @@ FROM node:19-alpine 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 rust cargo vips RUN apk add --no-cache --no-progress git alpine-sdk python3 rust cargo vips
# Copy only the dependency-related files first, to cache efficiently # Copy only the dependency-related files first, to cache efficiently
@ -35,7 +36,7 @@ FROM node:19-alpine
WORKDIR /calckey WORKDIR /calckey
# Install runtime dependencies # Install runtime dependencies
RUN apk add --no-cache --no-progress tini ffmpeg vips-dev RUN apk add --no-cache --no-progress tini ffmpeg vips-dev zip unzip rust cargo
COPY . ./ COPY . ./

122
README.md
View file

@ -1,12 +1,13 @@
<div align="center"> <div align="center">
<a href="https://i.calckey.cloud/"> <a href="https://calckey.org/">
<img src="./title_float.svg" alt="Calckey logo" style="border-radius:50%" width="400"/> <img src="./title_float.svg" alt="Calckey logo" style="border-radius:50%" width="400"/>
</a> </a>
**🌎 **[Calckey](https://i.calckey.cloud/)** is an open source, decentralized social media platform that's free forever! 🚀** **🌎 **[Calckey](https://calckey.org/)** is an open source, decentralized social media platform that's free forever! 🚀**
[![no github badge](https://nogithub.codeberg.page/badge.svg)](https://nogithub.codeberg.page/) [![no github badge](https://nogithub.codeberg.page/badge.svg)](https://nogithub.codeberg.page/)
[![status badge](https://ci.codeberg.org/api/badges/calckey/calckey/status.svg)](https://ci.codeberg.org/calckey/calckey) [![status badge](https://ci.codeberg.org/api/badges/calckey/calckey/status.svg)](https://ci.codeberg.org/calckey/calckey)
[![opencollective badge](https://opencollective.com/calckey/tiers/badge.svg)](https://opencollective.com/Calckey)
[![liberapay badge](https://img.shields.io/liberapay/receives/ThatOneCalculator?logo=liberapay)](https://liberapay.com/ThatOneCalculator) [![liberapay badge](https://img.shields.io/liberapay/receives/ThatOneCalculator?logo=liberapay)](https://liberapay.com/ThatOneCalculator)
[![translate-badge](https://hosted.weblate.org/widgets/calckey/-/svg-badge.svg)](https://hosted.weblate.org/engage/calckey/) [![translate-badge](https://hosted.weblate.org/widgets/calckey/-/svg-badge.svg)](https://hosted.weblate.org/engage/calckey/)
[![docker badge](https://img.shields.io/docker/pulls/thatonecalculator/calckey?logo=docker)](https://hub.docker.com/r/thatonecalculator/calckey) [![docker badge](https://img.shields.io/docker/pulls/thatonecalculator/calckey?logo=docker)](https://hub.docker.com/r/thatonecalculator/calckey)
@ -22,15 +23,15 @@
# ✨ About Calckey # ✨ About Calckey
- Calckey is based off of Misskey, a powerful microblogging server on ActivityPub with features such as emoji reactions, a customizable web UI, rich chatting, and much more! - Calckey is based off of Misskey, a powerful microblogging server on ActivityPub with features such as emoji reactions, a customizable web UI, rich chatting, and much more!
- Calckey adds many quality of life changes and bug fixes for users and instance admins alike. - Calckey adds many quality of life changes and bug fixes for users and server admins alike.
- 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)
- Improved notifications - Improved notifications
- Improved instance security - Improved server security
- Improved accessibility - Improved accessibility
- Improved threads - Improved threads
- Recommended Instances timeline - Recommended Servers timeline
- OCR image captioning - OCR image captioning
- New and improved Groups - New and improved Groups
- Better intro tutorial - Better intro tutorial
@ -46,12 +47,13 @@
# 🥂 Links # 🥂 Links
- 💸 OpenCollective: <https://opencollective.com/Calckey>
- 💸 Liberapay: <https://liberapay.com/ThatOneCalculator> - 💸 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 instance: <https://calckey.social> - 🚢 Flagship server: <https://calckey.social>
- 📣 Official account: <https://i.calckey.cloud/@calckey> - 📣 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>
- 📜 Instance list: <https://calckey.fediverse.observer/list> - 📜 Server list: <https://calckey.fediverse.observer/list>
- 📖 JoinFediverse Wiki: <https://joinfediverse.wiki/What_is_Calckey%3F> - 📖 JoinFediverse Wiki: <https://joinfediverse.wiki/What_is_Calckey%3F>
- 🐋 Docker Hub: <https://hub.docker.com/r/thatonecalculator/calckey> - 🐋 Docker Hub: <https://hub.docker.com/r/thatonecalculator/calckey>
- ✍️ Weblate: <https://hosted.weblate.org/engage/calckey/> - ✍️ Weblate: <https://hosted.weblate.org/engage/calckey/>
@ -67,31 +69,33 @@ If you have access to a server that supports one of the sources below, I recomme
[![Install on Ubuntu](https://pool.jortage.com/voringme/misskey/3b62a443-1b44-45cf-8f9e-f1c588f803ed.png)](https://codeberg.org/calckey/ubuntu-bash-install)  [![Install on the Arch User Repository](https://pool.jortage.com/voringme/misskey/ba2a5c07-f078-43f1-8483-2e01acca9c40.png)](https://aur.archlinux.org/packages/calckey)  [![Install Calckey with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=calckey) [![Install on Ubuntu](https://pool.jortage.com/voringme/misskey/3b62a443-1b44-45cf-8f9e-f1c588f803ed.png)](https://codeberg.org/calckey/ubuntu-bash-install)  [![Install on the Arch User Repository](https://pool.jortage.com/voringme/misskey/ba2a5c07-f078-43f1-8483-2e01acca9c40.png)](https://aur.archlinux.org/packages/calckey)  [![Install Calckey with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=calckey)
### 🐋 Docker ## 🛳️ Containerization
[How to run Calckey with Docker](./docs/docker.md). - [🐳 How to run Calckey with Docker](https://codeberg.org/calckey/calckey/src/branch/develop/docs/docker.md)
- [🛞 How to run Calckey with Kubernetes/Helm](https://codeberg.org/calckey/calckey/src/branch/develop/docs/kubernetes.md)
## 🧑‍💻 Dependencies ## 🧑‍💻 Dependencies
- 🐢 At least [NodeJS](https://nodejs.org/en/) v18.12.1 (v19 recommended) - 🐢 At least [NodeJS](https://nodejs.org/en/) v18.16.0 (v20 recommended)
- Install with [nvm](https://github.com/nvm-sh/nvm) - Install with [nvm](https://github.com/nvm-sh/nvm)
- 🐘 At least [PostgreSQL](https://www.postgresql.org/) v12 - 🐘 At least [PostgreSQL](https://www.postgresql.org/) v12 (v14 recommended)
- 🍱 At least [Redis](https://redis.io/) v6 (v7 recommend) - 🍱 At least [Redis](https://redis.io/) v6 (v7 recommended)
- Web Proxy (one of the following)
- 🍀 Nginx (recommended)
- 🦦 Caddy
- 🪶 Apache
### 😗 Optional dependencies ### 😗 Optional dependencies
- [FFmpeg](https://ffmpeg.org/) for video transcoding - [FFmpeg](https://ffmpeg.org/) for video transcoding
- Full text search (choost one of the following) - Full text search (one of the following)
- 🦔 [Sonic](https://crates.io/crates/sonic-server) (highly recommended!) - 🦔 [Sonic](https://crates.io/crates/sonic-server)
- [MeiliSearch](https://www.meilisearch.com/)
- [ElasticSearch](https://www.elastic.co/elasticsearch/) - [ElasticSearch](https://www.elastic.co/elasticsearch/)
- Management (choose one of the following)
- 🛰️ [pm2](https://pm2.io/)
- 🐳 [Docker](https://docker.com)
- Service manager (systemd, openrc, etc)
### 🏗️ Build dependencies ### 🏗️ Build dependencies
- 🦀 [Rust toolchain](https://www.rust-lang.org/) - 🦀 At least [Rust](https://www.rust-lang.org/) v1.65.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
@ -100,11 +104,12 @@ If you have access to a server that supports one of the sources below, I recomme
## 👀 Get folder ready ## 👀 Get folder ready
```sh ```sh
git clone --depth 1 https://codeberg.org/calckey/calckey.git git clone https://codeberg.org/calckey/calckey.git
cd calckey/ cd calckey/
``` ```
By default, you're on the development branch. Run `git checkout beta` or `git checkout main` to switch to the Beta/Main branches. > **Note**
> By default, you're on the develop branch. Run `git checkout main` or `git checkout beta` to switch to the Main/Beta branches.
## 📩 Install dependencies ## 📩 Install dependencies
@ -116,9 +121,27 @@ corepack prepare pnpm@latest --activate
pnpm i # --no-optional pnpm i # --no-optional
``` ```
### pm2
To install pm2 run:
```
npm i -g pm2
pm2 install pm2-logrotate
```
> **Note**
> [`pm2-logrotate`](https://github.com/keymetrics/pm2-logrotate/blob/master/README.md) ensures that log files don't infinitely gather size, as Calckey produces a lot of logs.
## 🐘 Create database ## 🐘 Create database
Assuming you set up PostgreSQL correctly, all you have to run is: In PostgreSQL (`psql`), run the following command:
```sql
CREATE DATABASE calckey WITH encoding = 'UTF8';
```
or run the following from the command line:
```sh ```sh
psql postgres -c "create database calckey with encoding = 'UTF8';" psql postgres -c "create database calckey with encoding = 'UTF8';"
@ -126,25 +149,41 @@ psql postgres -c "create database calckey with encoding = 'UTF8';"
In Calckey's directory, fill out the `db` section of `.config/default.yml` with the correct information, where the `db` key is `calckey`. In Calckey's directory, fill out the `db` section of `.config/default.yml` with the correct information, where the `db` key is `calckey`.
## 🦔 Set up search ## 🔎 Set up search
### 🦔 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.
Follow sonic's [installation guide](https://github.com/valeriansaliou/sonic#installation) Follow sonic's [installation guide](https://github.com/valeriansaliou/sonic#installation)
If you use IPv4: in Sonic's directory, edit the `config.cfg` file to change `inet` to `"0.0.0.0:1491"`. > **Note**
> If you use IPv4: in Sonic's directory, edit the `config.cfg` file to change `inet` to `"0.0.0.0:1491"`.
In Calckey's directory, fill out the `sonic` section of `.config/default.yml` with the correct information. In Calckey's directory, fill out the `sonic` section of `.config/default.yml` with the correct information.
### Meilisearch
Meilisearch is better suited for larger deployments. It's faster but uses far more resources and disk space.
Follow Meilisearch's [quick start guide](https://www.meilisearch.com/docs/learn/getting_started/quick_start)
In Calckey's directory, fill out the `meilisearch` section of `.config/default.yml` with the correct information.
### ElasticSearch
Please don't use ElasticSearch unless you already have an ElasticSearch setup and want to continue using it for Calckey. ElasticSearch is slow, heavy, and offers very few benefits over Sonic/Meilisearch.
## 💅 Customize ## 💅 Customize
- To add custom CSS for all users, edit `./custom/assets/instance.css`. - To add custom CSS for all users, edit `./custom/assets/instance.css`.
- To add static assets (such as images for the splash screen), place them in the `./custom/assets/` directory. They'll then be available on `https://yourinstance.tld/static-assets/filename.ext`. - To add static assets (such as images for the splash screen), place them in the `./custom/assets/` directory. They'll then be available on `https://yourserver.tld/static-assets/filename.ext`.
- To add custom locales, place them in the `./custom/locales/` directory. If you name your custom locale the same as an existing locale, it will overwrite it. If you give it a unique name, it will be added to the list. Also make sure that the first part of the filename matches the locale you're basing it on. (Example: `en-FOO.yml`) - To add custom locales, place them in the `./custom/locales/` directory. If you name your custom locale the same as an existing locale, it will overwrite it. If you give it a unique name, it will be added to the list. Also make sure that the first part of the filename matches the locale you're basing it on. (Example: `en-FOO.yml`)
- To add custom error images, place them in the `./custom/assets/badges` directory, replacing the files already there. - To add custom error images, place them in the `./custom/assets/badges` directory, replacing the files already there.
- To add custom sounds, place only mp3 files in the `./custom/assets/sounds` directory. - To add custom sounds, place only mp3 files in the `./custom/assets/sounds` directory.
- To update custom assets without rebuilding, just run `pnpm run gulp`. - To update custom assets without rebuilding, just run `pnpm run gulp`.
## 🧑‍🔬 Configuring a new instance ## 🧑‍🔬 Configuring a new server
- Run `cp .config/example.yml .config/default.yml` - Run `cp .config/example.yml .config/default.yml`
- Edit `.config/default.yml`, making sure to fill out required fields. - Edit `.config/default.yml`, making sure to fill out required fields.
@ -152,17 +191,36 @@ In Calckey's directory, fill out the `sonic` section of `.config/default.yml` wi
## 🚚 Migrating from Misskey to Calckey ## 🚚 Migrating from Misskey to Calckey
For migrating from Misskey v13, Misskey v12, and Foundkey, read [this document](./docs/migrate.md). For migrating from Misskey v13, Misskey v12, and Foundkey, read [this document](https://codeberg.org/calckey/calckey/src/branch/develop/docs/migrate.md).
## 🍀 NGINX ## 🌐 Web proxy
### 🍀 Nginx (recommended)
- Run `sudo cp ./calckey.nginx.conf /etc/nginx/sites-available/ && cd /etc/nginx/sites-available/` - Run `sudo cp ./calckey.nginx.conf /etc/nginx/sites-available/ && cd /etc/nginx/sites-available/`
- Edit `calckey.nginx.conf` to reflect your instance properly - Edit `calckey.nginx.conf` to reflect your server properly
- Run `sudo cp ./calckey.nginx.conf ../sites-enabled/` - Run `sudo ln -s ./calckey.nginx.conf ../sites-enabled/calckey.nginx.conf`
- Run `sudo nginx -t` to validate that the config is valid, then restart the NGINX service. - Run `sudo nginx -t` to validate that the config is valid, then restart the NGINX service.
</details> ### 🦦 Caddy
- Add the following block to your `Caddyfile`, replacing `example.tld` with your own domain:
```caddy
example.tld {
reverse_proxy http://127.0.0.1:3000
}
```
- Reload your caddy configuration
### 🪶 Apache
> **Warning**
> Apache has some known problems with Calckey. Only use it if you have to.
- Run `sudo cp ./calckey.apache.conf /etc/apache2/sites-available/ && cd /etc/apache2/sites-available/`
- Edit `calckey.apache.conf` to reflect your server properly
- Run `sudo a2ensite calckey.apache` to enable the site
- Run `sudo service apache2 restart` to reload apache2 configuration
## 🚀 Build and launch! ## 🚀 Build and launch!
### 🐢 NodeJS + pm2 ### 🐢 NodeJS + pm2
@ -180,7 +238,7 @@ pm2 start "NODE_ENV=production pnpm run start" --name Calckey
- When editing the config file, please don't fill out the settings at the bottom. They're designed *only* for managed hosting, not self hosting. Those settings are much better off being set in Calckey's control panel. - When editing the config file, please don't fill out the settings at the bottom. They're designed *only* for managed hosting, not self hosting. Those settings are much better off being set in Calckey's control panel.
- Port 3000 (used in the default config) might be already used on your server for something else. To find an open port for Calckey, run `for p in {3000..4000}; do ss -tlnH | tr -s ' ' | cut -d" " -sf4 | grep -q "${p}$" || echo "${p}"; done | head -n 1`. Replace 3000 with the minimum port and 4000 with the maximum port if you need it. - Port 3000 (used in the default config) might be already used on your server for something else. To find an open port for Calckey, run `for p in {3000..4000}; do ss -tlnH | tr -s ' ' | cut -d" " -sf4 | grep -q "${p}$" || echo "${p}"; done | head -n 1`. Replace 3000 with the minimum port and 4000 with the maximum port if you need it.
- I'd recommend you use a S3 Bucket/CDN for Object Storage, especially if you use Docker. - I'd recommend you use a S3 Bucket/CDN for Object Storage, especially if you use Docker.
- I'd ***strongly*** recommend against using CloudFlare, but if you do, make sure to turn code minification off. - I'd ***strongly*** recommend against using CloudFlare, but if you do, make sure to turn code minification off.
- For push notifications, run `npx web-push generate-vapid-keys`, then put the public and private keys into Control Panel > General > ServiceWorker. - For push notifications, run `npx web-push generate-vapid-keys`, then put the public and private keys into Control Panel > General > ServiceWorker.
- For translations, make a [DeepL](https://deepl.com) account and generate an API key, then put it into Control Panel > General > DeepL Translation. - For translations, make a [DeepL](https://deepl.com) account and generate an API key, then put it into Control Panel > General > DeepL Translation.

13
calckey.apache.conf Normal file
View file

@ -0,0 +1,13 @@
# Replace example.tld with your domain
<VirtualHost *:80>
ServerName example.tld
# For WebSocket
ProxyPass "/streaming" "ws://127.0.0.1:3000/streaming/"
# Proxy to Node
ProxyPass "/" "http://127.0.0.1:3000/"
ProxyPassReverse "/" "http://127.0.0.1:3000/"
ProxyPreserveHost On
# For files proxy
AllowEncodedSlashes On
</VirtualHost>

23
chart/.helmignore Normal file
View file

@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View file

@ -1,3 +1,38 @@
apiVersion: v2 apiVersion: v2
name: misskey name: calckey
version: 0.0.0 description: A fun, new, open way to experience social media https://calckey.org
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.2
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "rc"
dependencies:
- name: elasticsearch
version: 19.0.1
repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami
condition: elasticsearch.enabled
- name: postgresql
version: 11.1.3
repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami
condition: postgresql.enabled
- name: redis
version: 16.13.2
repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami
condition: redis.enabled

89
chart/README.md Normal file
View file

@ -0,0 +1,89 @@
# calckey
![Version: 0.1.2](https://img.shields.io/badge/Version-0.1.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: rc](https://img.shields.io/badge/AppVersion-rc-informational?style=flat-square)
A fun, new, open way to experience social media https://calckey.org
## Requirements
| Repository | Name | Version |
|------------|------|---------|
| https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami | elasticsearch | 19.0.1 |
| https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami | postgresql | 11.1.3 |
| https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami | redis | 16.13.2 |
## Values
| Key | Type | Default | Description |
|-----|------|---------|-------------|
| affinity | object | `{}` | |
| autoscaling.enabled | bool | `false` | |
| autoscaling.maxReplicas | int | `100` | |
| autoscaling.minReplicas | int | `1` | |
| autoscaling.targetCPUUtilizationPercentage | int | `80` | |
| calckey.allowedPrivateNetworks | list | `[]` | If you want to allow calckey to connect to private ips, enter the cidrs here. |
| calckey.deepl.authKey | string | `""` | |
| calckey.deepl.isPro | bool | `false` | |
| calckey.deepl.managed | bool | `false` | |
| calckey.domain | string | `"calckey.local"` | |
| calckey.isManagedHosting | bool | `true` | |
| calckey.libreTranslate.apiKey | string | `""` | |
| calckey.libreTranslate.apiUrl | string | `""` | |
| calckey.libreTranslate.managed | bool | `false` | |
| calckey.objectStorage.access_key | string | `""` | |
| calckey.objectStorage.access_secret | string | `""` | |
| calckey.objectStorage.baseUrl | string | `""` | |
| calckey.objectStorage.bucket | string | `""` | |
| calckey.objectStorage.endpoint | string | `""` | |
| calckey.objectStorage.managed | bool | `true` | |
| calckey.objectStorage.prefix | string | `"files"` | |
| calckey.objectStorage.region | string | `""` | |
| calckey.reservedUsernames[0] | string | `"root"` | |
| calckey.reservedUsernames[1] | string | `"admin"` | |
| calckey.reservedUsernames[2] | string | `"administrator"` | |
| calckey.reservedUsernames[3] | string | `"me"` | |
| calckey.reservedUsernames[4] | string | `"system"` | |
| calckey.smtp.from_address | string | `"notifications@example.com"` | |
| calckey.smtp.login | string | `""` | |
| calckey.smtp.managed | bool | `true` | |
| calckey.smtp.password | string | `""` | |
| calckey.smtp.port | int | `587` | |
| calckey.smtp.server | string | `"smtp.mailgun.org"` | |
| calckey.smtp.useImplicitSslTls | bool | `false` | |
| elasticsearch | object | `{"auth":{},"enabled":false,"hostname":"","port":9200,"ssl":false}` | https://github.com/bitnami/charts/tree/master/bitnami/elasticsearch#parameters |
| fullnameOverride | string | `""` | |
| image.pullPolicy | string | `"IfNotPresent"` | |
| image.repository | string | `"docker.io/thatonecalculator/calckey"` | |
| image.tag | string | `""` | |
| imagePullSecrets | list | `[]` | |
| ingress.annotations | object | `{}` | |
| ingress.className | string | `""` | |
| ingress.enabled | bool | `false` | |
| ingress.hosts[0].host | string | `"chart-example.local"` | |
| ingress.hosts[0].paths[0].path | string | `"/"` | |
| ingress.hosts[0].paths[0].pathType | string | `"ImplementationSpecific"` | |
| ingress.tls | list | `[]` | |
| nameOverride | string | `""` | |
| nodeSelector | object | `{}` | |
| podAnnotations | object | `{}` | |
| podSecurityContext | object | `{}` | |
| postgresql.auth.database | string | `"calckey_production"` | |
| postgresql.auth.password | string | `""` | |
| postgresql.auth.username | string | `"calckey"` | |
| postgresql.enabled | bool | `true` | disable if you want to use an existing db; in which case the values below must match those of that external postgres instance |
| redis.auth.password | string | `""` | you must set a password; the password generated by the redis chart will be rotated on each upgrade: |
| redis.enabled | bool | `true` | |
| redis.hostname | string | `""` | |
| redis.port | int | `6379` | |
| replicaCount | int | `1` | |
| resources | object | `{}` | |
| securityContext | object | `{}` | |
| service.port | int | `80` | |
| service.type | string | `"ClusterIP"` | |
| serviceAccount.annotations | object | `{}` | |
| serviceAccount.create | bool | `true` | |
| serviceAccount.name | string | `""` | |
| tolerations | list | `[]` | |
----------------------------------------------
Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0)

View file

@ -1,162 +0,0 @@
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Misskey configuration
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# ┌─────┐
#───┘ URL └─────────────────────────────────────────────────────
# Final accessible URL seen by a user.
# url: https://example.tld/
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# URL SETTINGS AFTER THAT!
# ┌───────────────────────┐
#───┘ Port and TLS settings └───────────────────────────────────
#
# Misskey supports two deployment options for public.
#
# Option 1: With Reverse Proxy
#
# +----- https://example.tld/ ------------+
# +------+ |+-------------+ +----------------+|
# | User | ---> || Proxy (443) | ---> | Misskey (3000) ||
# +------+ |+-------------+ +----------------+|
# +---------------------------------------+
#
# You need to setup reverse proxy. (eg. nginx)
# You do not define 'https' section.
# Option 2: Standalone
#
# +- https://example.tld/ -+
# +------+ | +---------------+ |
# | User | ---> | | Misskey (443) | |
# +------+ | +---------------+ |
# +------------------------+
#
# You need to run Misskey as root.
# You need to set Certificate in 'https' section.
# To use option 1, uncomment below line.
port: 3000 # A port that your Misskey server should listen.
# To use option 2, uncomment below lines.
#port: 443
#https:
# # path for certification
# key: /etc/letsencrypt/live/example.tld/privkey.pem
# cert: /etc/letsencrypt/live/example.tld/fullchain.pem
# ┌──────────────────────────┐
#───┘ PostgreSQL configuration └────────────────────────────────
db:
host: localhost
port: 5432
# Database name
db: misskey
# Auth
user: example-misskey-user
pass: example-misskey-pass
# Whether disable Caching queries
#disableCache: true
# Extra Connection options
#extra:
# ssl: true
# ┌─────────────────────┐
#───┘ Redis configuration └─────────────────────────────────────
redis:
host: localhost
port: 6379
#pass: example-pass
#prefix: example-prefix
#db: 1
# ┌─────────────────────────────┐
#───┘ Elasticsearch configuration └─────────────────────────────
#elasticsearch:
# host: localhost
# port: 9200
# ssl: false
# user:
# pass:
# ┌───────────────┐
#───┘ ID generation └───────────────────────────────────────────
# You can select the ID generation method.
# You don't usually need to change this setting, but you can
# change it according to your preferences.
# Available methods:
# aid ... Short, Millisecond accuracy
# meid ... Similar to ObjectID, Millisecond accuracy
# ulid ... Millisecond accuracy
# objectid ... This is left for backward compatibility
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# ID SETTINGS AFTER THAT!
id: "aid"
# ┌─────────────────────┐
#───┘ Other configuration └─────────────────────────────────────
# Whether disable HSTS
#disableHsts: true
# Number of worker processes
#clusterLimit: 1
# Job concurrency per worker
# deliverJobConcurrency: 128
# inboxJobConcurrency: 16
# Job rate limiter
# deliverJobPerSec: 128
# inboxJobPerSec: 16
# Job attempts
# deliverJobMaxAttempts: 12
# inboxJobMaxAttempts: 8
# IP address family used for outgoing request (ipv4, ipv6 or dual)
#outgoingAddressFamily: ipv4
# Syslog option
#syslog:
# host: localhost
# port: 514
# Proxy for HTTP/HTTPS
#proxy: http://127.0.0.1:3128
#proxyBypassHosts: [
# 'example.com',
# '192.0.2.8'
#]
# Proxy for SMTP/SMTPS
#proxySmtp: http://127.0.0.1:3128 # use HTTP/1.1 CONNECT
#proxySmtp: socks4://127.0.0.1:1080 # use SOCKS4
#proxySmtp: socks5://127.0.0.1:1080 # use SOCKS5
# Media Proxy
#mediaProxy: https://example.com/proxy
#allowedPrivateNetworks: [
# '127.0.0.1/32'
#]
# Upload or download file size limits (bytes)
#maxFileSize: 262144000

View file

@ -1,8 +0,0 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "misskey.fullname" . }}-configuration
data:
default.yml: |-
{{ .Files.Get "files/default.yml"|nindent 4 }}
url: {{ .Values.url }}

View file

@ -1,47 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "misskey.fullname" . }}
labels:
{{- include "misskey.labels" . | nindent 4 }}
spec:
selector:
matchLabels:
{{- include "misskey.selectorLabels" . | nindent 6 }}
replicas: 1
template:
metadata:
labels:
{{- include "misskey.selectorLabels" . | nindent 8 }}
spec:
containers:
- name: misskey
image: {{ .Values.image }}
env:
- name: NODE_ENV
value: {{ .Values.environment }}
volumeMounts:
- name: {{ include "misskey.fullname" . }}-configuration
mountPath: /misskey/.config
readOnly: true
ports:
- containerPort: 3000
- name: postgres
image: postgres:14-alpine
env:
- name: POSTGRES_USER
value: "example-misskey-user"
- name: POSTGRES_PASSWORD
value: "example-misskey-pass"
- name: POSTGRES_DB
value: "misskey"
ports:
- containerPort: 5432
- name: redis
image: redis:alpine
ports:
- containerPort: 6379
volumes:
- name: {{ include "misskey.fullname" . }}-configuration
configMap:
name: {{ include "misskey.fullname" . }}-configuration

22
chart/templates/NOTES.txt Normal file
View file

@ -0,0 +1,22 @@
1. Get the application URL by running these commands:
{{- if .Values.ingress.enabled }}
{{- range $host := .Values.ingress.hosts }}
{{- range .paths }}
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }}
{{- end }}
{{- end }}
{{- else if contains "NodePort" .Values.service.type }}
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "calckey.fullname" . }})
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
{{- else if contains "LoadBalancer" .Values.service.type }}
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "calckey.fullname" . }}'
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "calckey.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
echo http://$SERVICE_IP:{{ .Values.service.port }}
{{- else if contains "ClusterIP" .Values.service.type }}
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "calckey.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT
{{- end }}

View file

@ -1,14 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "misskey.fullname" . }}
annotations:
dev.okteto.com/auto-ingress: "true"
spec:
type: ClusterIP
ports:
- port: 3000
protocol: TCP
name: http
selector:
{{- include "misskey.selectorLabels" . | nindent 4 }}

View file

@ -1,7 +1,7 @@
{{/* {{/*
Expand the name of the chart. Expand the name of the chart.
*/}} */}}
{{- define "misskey.name" -}} {{- define "calckey.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }} {{- end }}
@ -10,7 +10,7 @@ Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name. If release name contains chart name it will be used as a full name.
*/}} */}}
{{- define "misskey.fullname" -}} {{- define "calckey.fullname" -}}
{{- if .Values.fullnameOverride }} {{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }} {{- else }}
@ -26,16 +26,16 @@ If release name contains chart name it will be used as a full name.
{{/* {{/*
Create chart name and version as used by the chart label. Create chart name and version as used by the chart label.
*/}} */}}
{{- define "misskey.chart" -}} {{- define "calckey.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }} {{- end }}
{{/* {{/*
Common labels Common labels
*/}} */}}
{{- define "misskey.labels" -}} {{- define "calckey.labels" -}}
helm.sh/chart: {{ include "misskey.chart" . }} helm.sh/chart: {{ include "calckey.chart" . }}
{{ include "misskey.selectorLabels" . }} {{ include "calckey.selectorLabels" . }}
{{- if .Chart.AppVersion }} {{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }} {{- end }}
@ -45,18 +45,279 @@ app.kubernetes.io/managed-by: {{ .Release.Service }}
{{/* {{/*
Selector labels Selector labels
*/}} */}}
{{- define "misskey.selectorLabels" -}} {{- define "calckey.selectorLabels" -}}
app.kubernetes.io/name: {{ include "misskey.name" . }} app.kubernetes.io/name: {{ include "calckey.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }} {{- end }}
{{/* {{/*
Create the name of the service account to use Create the name of the service account to use
*/}} */}}
{{- define "misskey.serviceAccountName" -}} {{- define "calckey.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }} {{- if .Values.serviceAccount.create }}
{{- default (include "misskey.fullname" .) .Values.serviceAccount.name }} {{- default (include "calckey.fullname" .) .Values.serviceAccount.name }}
{{- else }} {{- else }}
{{- default "default" .Values.serviceAccount.name }} {{- default "default" .Values.serviceAccount.name }}
{{- end }} {{- end }}
{{- end }} {{- end }}
{{/*
Create a default fully qualified name for dependent services.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
*/}}
{{- define "calckey.elasticsearch.fullname" -}}
{{- printf "%s-%s" .Release.Name "elasticsearch" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- define "calckey.redis.fullname" -}}
{{- printf "%s-%s" .Release.Name "redis" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- define "calckey.postgresql.fullname" -}}
{{- printf "%s-%s" .Release.Name "postgresql" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
config/default.yml content
*/}}
{{- define "calckey.configDir.default.yml" -}}
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Calckey configuration
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# ┌─────┐
#───┘ URL └─────────────────────────────────────────────────────
# Final accessible URL seen by a user.
url: "https://{{ .Values.calckey.domain }}/"
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# URL SETTINGS AFTER THAT!
# ┌───────────────────────┐
#───┘ Port and TLS settings └───────────────────────────────────
#
# Misskey requires a reverse proxy to support HTTPS connections.
#
# +----- https://example.tld/ ------------+
# +------+ |+-------------+ +----------------+|
# | User | ---> || Proxy (443) | ---> | Misskey (3000) ||
# +------+ |+-------------+ +----------------+|
# +---------------------------------------+
#
# You need to set up a reverse proxy. (e.g. nginx)
# An encrypted connection with HTTPS is highly recommended
# because tokens may be transferred in GET requests.
# The port that your Misskey server should listen on.
port: 3000
# ┌──────────────────────────┐
#───┘ PostgreSQL configuration └────────────────────────────────
db:
{{- if .Values.postgresql.enabled }}
host: {{ template "calckey.postgresql.fullname" . }}
port: '5432'
{{- else }}
host: {{ .Values.postgresql.postgresqlHostname }}
port: {{ .Values.postgresql.postgresqlPort | default "5432" | quote }}
{{- end }}
# Database name
db: {{ .Values.postgresql.auth.database }}
# Auth
user: {{ .Values.postgresql.auth.username }}
pass: "{{ .Values.postgresql.auth.password }}"
# Whether disable Caching queries
#disableCache: true
# Extra Connection options
#extra:
# ssl: true
# ┌─────────────────────┐
#───┘ Redis configuration └─────────────────────────────────────
redis:
{{- if .Values.redis.enabled }}
host: {{ template "calckey.redis.fullname" . }}-master
{{- else }}
host: {{ required "When the redis chart is disabled .Values.redis.hostname is required" .Values.redis.hostname }}
{{- end }}
port: {{ .Values.redis.port | default "6379" | quote }}
#family: 0 # 0=Both, 4=IPv4, 6=IPv6
pass: {{ .Values.redis.auth.password | quote }}
#prefix: example-prefix
#db: 1
# ┌─────────────────────┐
#───┘ Sonic configuration └─────────────────────────────────────
#sonic:
# host: localhost
# port: 1491
# auth: SecretPassword
# collection: notes
# bucket: default
# ┌─────────────────────────────┐
#───┘ Elasticsearch configuration └─────────────────────────────
{{- if .Values.elasticsearch.enabled }}
elasticsearch:
host: {{ template "mastodon.elasticsearch.fullname" . }}-master-hl
port: 9200
ssl: false
{{- else if .Values.elasticsearch.hostname }}
elasticsearch:
host: {{ .Values.elasticsearch.hostname | quote }}
port: {{ .Values.elasticsearch.port }}
ssl: {{ .Values.elasticsearch.ssl }}
{{- if .Values.elasticsearch.auth }}
user: {{ .Values.elasticsearch.auth.username | quote }}
pass: {{ .Values.elasticsearch.auth.password | quote }}
{{- end }}
{{- end }}
# ┌───────────────┐
#───┘ ID generation └───────────────────────────────────────────
# You can select the ID generation method.
# You don't usually need to change this setting, but you can
# change it according to your preferences.
# Available methods:
# aid ... Short, Millisecond accuracy
# meid ... Similar to ObjectID, Millisecond accuracy
# ulid ... Millisecond accuracy
# objectid ... This is left for backward compatibility
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# ID SETTINGS AFTER THAT!
id: 'aid'
# ┌─────────────────────┐
#───┘ Other configuration └─────────────────────────────────────
# Max note length, should be < 8000.
#maxNoteLength: 3000
# Maximum lenght of an image caption or file comment (default 1500, max 8192)
#maxCaptionLength: 1500
# Reserved usernames that only the administrator can register with
reservedUsernames:
{{ .Values.calckey.reservedUsernames | toYaml }}
# Whether disable HSTS
#disableHsts: true
# Number of worker processes
#clusterLimit: 1
# Job concurrency per worker
# deliverJobConcurrency: 128
# inboxJobConcurrency: 16
# Job rate limiter
# deliverJobPerSec: 128
# inboxJobPerSec: 16
# Job attempts
# deliverJobMaxAttempts: 12
# inboxJobMaxAttempts: 8
# IP address family used for outgoing request (ipv4, ipv6 or dual)
#outgoingAddressFamily: ipv4
# Syslog option
#syslog:
# host: localhost
# port: 514
# Proxy for HTTP/HTTPS
#proxy: http://127.0.0.1:3128
#proxyBypassHosts: [
# 'example.com',
# '192.0.2.8'
#]
# Proxy for SMTP/SMTPS
#proxySmtp: http://127.0.0.1:3128 # use HTTP/1.1 CONNECT
#proxySmtp: socks4://127.0.0.1:1080 # use SOCKS4
#proxySmtp: socks5://127.0.0.1:1080 # use SOCKS5
# Media Proxy
#mediaProxy: https://example.com/proxy
# Proxy remote files (default: false)
#proxyRemoteFiles: true
allowedPrivateNetworks:
{{ .Values.calckey.allowedPrivateNetworks | toYaml }}
# TWA
#twa:
# nameSpace: android_app
# packageName: tld.domain.twa
# sha256CertFingerprints: ['AB:CD:EF']
# Upload or download file size limits (bytes)
#maxFileSize: 262144000
# Managed hosting settings
# !!!!!!!!!!
# >>>>>> NORMAL SELF-HOSTERS, STAY AWAY! <<<<<<
# >>>>>> YOU DON'T NEED THIS! <<<<<<
# !!!!!!!!!!
# Each category is optional, but if each item in each category is mandatory!
# If you mess this up, that's on you, you've been warned...
#maxUserSignups: 100
isManagedHosting: {{ .Values.calckey.isManagedHosting }}
deepl:
managed: {{ .Values.calckey.deepl.managed }}
authKey: {{ .Values.calckey.deepl.authKey | quote}}
isPro: {{ .Values.calckey.deepl.isPro }}
libreTranslate:
managed: {{ .Values.calckey.libreTranslate.managed }}
apiUrl: {{ .Values.calckey.libreTranslate.apiUrl | quote }}
apiKey: {{ .Values.calckey.libreTranslate.apiKey | quote }}
email:
managed: {{ .Values.calckey.smtp.managed }}
address: {{ .Values.calckey.smtp.from_address | quote }}
host: {{ .Values.calckey.smtp.server | quote }}
port: {{ .Values.calckey.smtp.port }}
user: {{ .Values.calckey.smtp.login | quote }}
pass: {{ .Values.calckey.smtp.password | quote }}
useImplicitSslTls: {{ .Values.calckey.smtp.useImplicitSslTls }}
objectStorage:
managed: {{ .Values.calckey.objectStorage.managed }}
baseUrl: {{ .Values.calckey.objectStorage.baseUrl | quote }}
bucket: {{ .Values.calckey.objectStorage.bucket | quote }}
prefix: {{ .Values.calckey.objectStorage.prefix | quote }}
endpoint: {{ .Values.calckey.objectStorage.endpoint | quote }}
region: {{ .Values.calckey.objectStorage.region | quote }}
accessKey: {{ .Values.calckey.objectStorage.access_key | quote }}
secretKey: {{ .Values.calckey.objectStorage.access_secret | quote }}
useSsl: true
connnectOverProxy: false
setPublicReadOnUpload: true
s3ForcePathStyle: true
# !!!!!!!!!!
# >>>>>> AGAIN, NORMAL SELF-HOSTERS, STAY AWAY! <<<<<<
# >>>>>> YOU DON'T NEED THIS, ABOVE SETTINGS ARE FOR MANAGED HOSTING ONLY! <<<<<<
# !!!!!!!!!!
# Seriously. Do NOT fill out the above settings if you're self-hosting.
# They're much better off being set from the control panel.
{{- end }}

View file

@ -0,0 +1,82 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "calckey.fullname" . }}
labels:
{{- include "calckey.labels" . | nindent 4 }}
spec:
{{- if not .Values.autoscaling.enabled }}
replicas: {{ .Values.replicaCount }}
{{- end }}
selector:
matchLabels:
{{- include "calckey.selectorLabels" . | nindent 6 }}
template:
metadata:
annotations:
checksum/secret-config: {{ include ( print $.Template.BasePath "/secret-config.yaml" ) . | sha256sum | quote }}
{{- with .Values.podAnnotations }}
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "calckey.selectorLabels" . | nindent 8 }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ include "calckey.serviceAccountName" . }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
volumes:
- name: config-volume
secret:
secretName: {{ template "calckey.fullname" . }}-config
containers:
- name: {{ .Chart.Name }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
command:
- pnpm
- run
- start
env:
- name: "NODE_ENV"
value: "production"
volumeMounts:
- name: config-volume
mountPath: /calckey/.config
ports:
- name: http
containerPort: 3000
protocol: TCP
startupProbe:
httpGet:
path: /
port: http
failureThreshold: 30
periodSeconds: 10
livenessProbe:
httpGet:
path: /
port: http
readinessProbe:
httpGet:
path: /
port: http
resources:
{{- toYaml .Values.resources | nindent 12 }}
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}

28
chart/templates/hpa.yaml Normal file
View file

@ -0,0 +1,28 @@
{{- if .Values.autoscaling.enabled }}
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: {{ include "calckey.fullname" . }}
labels:
{{- include "calckey.labels" . | nindent 4 }}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ include "calckey.fullname" . }}
minReplicas: {{ .Values.autoscaling.minReplicas }}
maxReplicas: {{ .Values.autoscaling.maxReplicas }}
metrics:
{{- if .Values.autoscaling.targetCPUUtilizationPercentage }}
- type: Resource
resource:
name: cpu
targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}
{{- end }}
{{- if .Values.autoscaling.targetMemoryUtilizationPercentage }}
- type: Resource
resource:
name: memory
targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }}
{{- end }}
{{- end }}

View file

@ -0,0 +1,61 @@
{{- if .Values.ingress.enabled -}}
{{- $fullName := include "calckey.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }}
{{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }}
{{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}}
{{- end }}
{{- end }}
{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}}
apiVersion: networking.k8s.io/v1
{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
apiVersion: networking.k8s.io/v1beta1
{{- else -}}
apiVersion: extensions/v1beta1
{{- end }}
kind: Ingress
metadata:
name: {{ $fullName }}
labels:
{{- include "calckey.labels" . | nindent 4 }}
{{- with .Values.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
ingressClassName: {{ .Values.ingress.className }}
{{- end }}
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ .path }}
{{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }}
pathType: {{ .pathType }}
{{- end }}
backend:
{{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }}
service:
name: {{ $fullName }}
port:
number: {{ $svcPort }}
{{- else }}
serviceName: {{ $fullName }}
servicePort: {{ $svcPort }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}

View file

@ -0,0 +1,59 @@
apiVersion: batch/v1
kind: Job
metadata:
name: {{ include "calckey.fullname" . }}-db-migrate
labels:
{{- include "calckey.labels" . | nindent 4 }}
annotations:
"helm.sh/hook": post-install,pre-upgrade
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
"helm.sh/hook-weight": "-2"
spec:
template:
metadata:
name: {{ include "calckey.fullname" . }}-db-migrate
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
spec:
restartPolicy: Never
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ include "calckey.serviceAccountName" . }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
volumes:
- name: config-volume
secret:
secretName: {{ template "calckey.fullname" . }}-config
containers:
- name: {{ .Chart.Name }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
command:
- pnpm
- run
- migrate
env:
- name: "NODE_ENV"
value: "production"
volumeMounts:
- name: config-volume
mountPath: /calckey/.config
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}

View file

@ -0,0 +1,9 @@
apiVersion: v1
kind: Secret
metadata:
name: {{ template "calckey.fullname" . }}-config
labels:
{{- include "calckey.labels" . | nindent 4 }}
type: Opaque
data:
default.yml: {{ include "calckey.configDir.default.yml" . | b64enc }}

View file

@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "calckey.fullname" . }}
labels:
{{- include "calckey.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "calckey.selectorLabels" . | nindent 4 }}

View file

@ -0,0 +1,12 @@
{{- if .Values.serviceAccount.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "calckey.serviceAccountName" . }}
labels:
{{- include "calckey.labels" . | nindent 4 }}
{{- with .Values.serviceAccount.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}

View file

@ -0,0 +1,15 @@
apiVersion: v1
kind: Pod
metadata:
name: "{{ include "calckey.fullname" . }}-test-connection"
labels:
{{- include "calckey.labels" . | nindent 4 }}
annotations:
"helm.sh/hook": test
spec:
containers:
- name: wget
image: busybox
command: ['wget']
args: ['{{ include "calckey.fullname" . }}:{{ .Values.service.port }}']
restartPolicy: Never

168
chart/values.yaml Normal file
View file

@ -0,0 +1,168 @@
# Default values for calckey.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicaCount: 1
image:
repository: docker.io/thatonecalculator/calckey
pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
tag: ""
calckey:
isManagedHosting: true
domain: calckey.local
deepl:
managed: false
authKey: ""
isPro: false
libreTranslate:
managed: false
apiUrl: ""
apiKey: ""
smtp:
managed: true
from_address: notifications@example.com
port: 587
server: smtp.mailgun.org
useImplicitSslTls: false
login: ""
password: ""
objectStorage:
managed: true
access_key: ""
access_secret: ""
baseUrl: "" # e.g. "https://my-bucket.nyc3.cdn.digitaloceanspaces.com"
bucket: "" # e.g. "my-bucket"
prefix: files
endpoint: "" # e.g. "nyc3.digitaloceanspaces.com:443"
region: "" # e.g. "nyc3"
# -- If you want to allow calckey to connect to private ips, enter the cidrs here.
allowedPrivateNetworks: []
# - "10.0.0.0/8"
reservedUsernames:
- root
- admin
- administrator
- me
- system
# https://github.com/bitnami/charts/tree/master/bitnami/postgresql#parameters
postgresql:
# -- disable if you want to use an existing db; in which case the values below
# must match those of that external postgres instance
enabled: true
# postgresqlHostname: preexisting-postgresql
# postgresqlPort: 5432
auth:
database: calckey_production
username: calckey
# you must set a password; the password generated by the postgresql chart will
# be rotated on each upgrade:
# https://github.com/bitnami/charts/tree/master/bitnami/postgresql#upgrade
password: ""
# https://github.com/bitnami/charts/tree/master/bitnami/redis#parameters
redis:
# disable if you want to use an existing redis instance; in which case the
# values below must match those of that external redis instance
enabled: true
hostname: ""
port: 6379
auth:
# -- you must set a password; the password generated by the redis chart will be
# rotated on each upgrade:
password: ""
# -- https://github.com/bitnami/charts/tree/master/bitnami/elasticsearch#parameters
elasticsearch:
# disable if you want to use an existing redis instance; in which case the
# values below must match those of that external elasticsearch instance
enabled: false
hostname: ""
port: 9200
ssl: false
auth: {}
# username: ""
# password: ""
# @ignored
image:
tag: 7
imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""
serviceAccount:
# Specifies whether a service account should be created
create: true
# Annotations to add to the service account
annotations: {}
# The name of the service account to use.
# If not set and create is true, a name is generated using the fullname template
name: ""
podAnnotations: {}
podSecurityContext: {}
# fsGroup: 2000
securityContext: {}
# capabilities:
# drop:
# - ALL
# readOnlyRootFilesystem: true
# runAsNonRoot: true
# runAsUser: 1000
service:
type: ClusterIP
port: 80
ingress:
enabled: false
className: ""
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: chart-example.local
paths:
- path: /
pathType: ImplementationSpecific
tls: []
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 100
targetCPUUtilizationPercentage: 80
# targetMemoryUtilizationPercentage: 80
nodeSelector: {}
tolerations: []
affinity: {}

View file

@ -1,3 +0,0 @@
url: https://example.tld/
image: okteto.dev/misskey
environment: production

View file

@ -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",
}, },
}) });

View file

@ -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: 投稿フォームの公開範囲指定のテスト

View file

@ -1,15 +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(() => {
@ -18,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");
}); });

View file

@ -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
} };

View file

@ -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");
}); });

View file

@ -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;
} }
}); });

View file

@ -8,7 +8,9 @@ services:
depends_on: depends_on:
- db - db
- redis - redis
- sonic ### Uncomment one of the following to use a search engine
# - meilisearch
# - sonic
ports: ports:
- "3000:3000" - "3000:3000"
networks: networks:
@ -17,6 +19,8 @@ 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
@ -40,17 +44,33 @@ services:
volumes: volumes:
- ./db:/var/lib/postgresql/data - ./db:/var/lib/postgresql/data
sonic: ### Only one of the below should be used.
restart: unless-stopped ### Meilisearch is better overall, but resource-intensive. Sonic is a very light full text search engine.
image: docker.io/valeriansaliou/sonic:v1.4.0
networks: # meilisearch:
- calcnet # container_name: meilisearch
volumes: # image: getmeili/meilisearch:v1.1.1
- ./sonic:/var/lib/sonic/store # environment:
- ./sonic/config.cfg:/etc/sonic.cfg # - MEILI_ENV=${MEILI_ENV:-development}
# ports:
# - "7700:7700"
# networks:
# - calcnet
# volumes:
# - ./meili_data:/meili_data
# restart: unless-stopped
# sonic:
# restart: unless-stopped
# image: docker.io/valeriansaliou/sonic:v1.4.0
# networks:
# - calcnet
# volumes:
# - ./sonic:/var/lib/sonic/store
# - ./sonic/config.cfg:/etc/sonic.cfg
networks: networks:
calcnet: calcnet:
# web: # web:
# external: # external:
# name: web # name: web

108
docs/development.md Normal file
View file

@ -0,0 +1,108 @@
# 🌎 Calckey Developer Docs
## Nix Dev Environment
The Calckey repo comes with a Nix-based shell environment to help make development as easy as possible!
Please note, however, that this environment will not work on Windows outside of a WSL2 environment.
### Prerequisites
- Installed the [Nix Package Manager](https://nixos.org/download.html) (use the comman on their website)
- Installed [direnv](https://direnv.net/docs/installation.html) and added its hook to your shell. (package manager)
Once the repo is cloned to your computer, follow these next few steps inside the Calckey folder:
- Run `direnv allow`. This will build the environment and install all needed tools.
- Run `install-deps`, then `prepare-config`, to install the node dependencies and prepare the needed config files.
- In a second terminal, run `devenv up`. This will spawn a **Redis** server, a **Postgres** server, and the **Calckey** server in dev mode.
- Once you see the Calckey banner printed in your second terminal, run `migrate` in the first.
- Once migrations finish, open http://localhost:3000 in your web browser.
- You should now see the admin user creation screen!
Note: When you want to restart a dev server, all you need to do is run `devenv up`, no other steps are necessary.
# Possible Troubles with the dev enviroment
(this doesn't have to be done under normal conditions, this is for future reference)
### direnv
If you have any trouble with `direnv allow`
Check that the contents of `.envrc` have the same version of nix-direnv that is specified here:
> nix-direnv under -> installation -> using direnv source url
> https://github.com/nix-community/nix-direnv#direnv-source_url
there should be no errors during `direnv allow`
### outdated nix packages
if `install-deps` or any subsequent command doesn't run due to versioning problems
`flake.nix` and `flake.lock` may be outdated
delete `flake.lock`, or better, run `nix flake update --extra-experimental-features flakes --extra-experimental-features nix-command`
after that, run `direnv rebuild`
if there are any errors, you might have to change `flake.nix`
(because the available options can change between versions - consider getting support in [the matrix channel](https://matrix.to/#/#calckey:matrix.fedibird.com))
### after changing a node version
in my case, i had to change the node version from 19, to 18
! before proceeding, make sure to delete all build artifacts!
remove `node_modules` and `built` folders, and maybe `.devenv` and `.direnv` as well
manually, or run `npm cache clean --force` and `pnpm cleanall`
### Windows Subsystem for Linux
if `devenv up` terminates because of wrong folder permissions,
create the file `/etc/wsl.conf` in your distro and add
```shell
[automount]
options = "metadata"
```
this allows `chmod` calls to actually have an effect.
the build scripts DO actually set the permissions, it just needs to work in wsl.
### devenv up
devenv up may take a looong time. (some say this is fake news, maybe it was bad luck in my case)
do not get spooked by this error:
```
> calckey@14.0.0-dev32 start /mnt/.../calckey
> pnpm --filter backend run start
> backend@ start /mnt/.../calckey/packages/backend
> pnpm node ./built/index.js
node:internal/modules/cjs/loader:1078
throw err;
^
Error: Cannot find module '/mnt/.../calckey/packages/backend/built/index.js'
at Module._resolveFilename (node:internal/modules/cjs/loader:1075:15)
at Module._load (node:internal/modules/cjs/loader:920:27)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47 {
code: 'MODULE_NOT_FOUND',
requireStack: []
}
Node.js v18.16.0
undefined
/mnt/.../calckey/packages/backend:
ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL backend@ start: `pnpm node ./built/index.js`
Exit status 1
ELIFECYCLE Command failed with exit code 1.
```
the script is designed to constantly try to start the server, while the build is still running.
this just means that the build isn't finished yet.
at some point you should see a banner that says "Calckey" in big letters -
then you're good to go and can run `migrate` (in another terminal)!
if you don't see the banner,
and it's for some reason stuck on `Finished 'build' after 917 ms` for a view minutes,
just leave devenv running and open another terminal in the folder
run `migrate` and then `pnpm --filter backend run start` by yourself
the server should start

View file

@ -1,4 +1,4 @@
# 🐳 Running a Calckey instance with Docker # 🐳 Running a Calckey server with Docker
## Pre-built docker container ## Pre-built docker container
[thatonecalculator/calckey](https://hub.docker.com/r/thatonecalculator/calckey) [thatonecalculator/calckey](https://hub.docker.com/r/thatonecalculator/calckey)
@ -8,7 +8,7 @@
There is a `docker-compose.yml` in the root of the project that you can use to build the container from source There is a `docker-compose.yml` in the root of the project that you can use to build the container from source
- .config/docker.env (**db config settings**) - .config/docker.env (**db config settings**)
- .config/default.yml (**calckey instance settings**) - .config/default.yml (**calckey server settings**)
## Configuring ## Configuring
@ -20,7 +20,7 @@ Rename the files:
then edit them according to your environment. then edit them according to your environment.
You can configure `docker.env` with anything you like, but you will have to pay attention to the `default.yml` file: You can configure `docker.env` with anything you like, but you will have to pay attention to the `default.yml` file:
- `url` should be set to the URL you will be hosting the web interface for the instance at. - `url` should be set to the URL you will be hosting the web interface for the server at.
- `host`, `db`, `user`, `pass` will have to be configured in the `PostgreSQL configuration` section - `host` is the name of the postgres container (eg: *calckey_db_1*), and the others should match your `docker.env`. - `host`, `db`, `user`, `pass` will have to be configured in the `PostgreSQL configuration` section - `host` is the name of the postgres container (eg: *calckey_db_1*), and the others should match your `docker.env`.
- `host`will need to be configured in the *Redis configuration* section - it is the name of the redis container (eg: *calckey_redis_1*) - `host`will need to be configured in the *Redis configuration* section - it is the name of the redis container (eg: *calckey_redis_1*)
- `auth` will need to be configured in the *Sonic* section - cannot be the default `SecretPassword` - `auth` will need to be configured in the *Sonic* section - cannot be the default `SecretPassword`
@ -36,7 +36,7 @@ Copy `docker-compose.yml` and the `config/` to a directory, then run the **docke
NOTE: This will take some time to come fully online, even after download and extracting the container images, and it may emit some error messages before completing successfully. Specifically, the `db` container needs to initialize and so isn't available to the `web` container right away. Only once the `db` container comes online does the `web` container start building and initializing the calckey tables. NOTE: This will take some time to come fully online, even after download and extracting the container images, and it may emit some error messages before completing successfully. Specifically, the `db` container needs to initialize and so isn't available to the `web` container right away. Only once the `db` container comes online does the `web` container start building and initializing the calckey tables.
Once the instance is up you can use a web browser to access the web interface at `http://serverip:3000` (where `serverip` is the IP of the server you are running the calckey instance on). Once the server is up you can use a web browser to access the web interface at `http://serverip:3000` (where `serverip` is the IP of the server you are running the calckey server on).
## Docker for development ## Docker for development

45
docs/kubernetes.md Normal file
View file

@ -0,0 +1,45 @@
# Running a Calckey server with Kubernetes and Helm
This is a [Helm](https://helm.sh/) chart directory in the root of the project
that you can use to deploy calckey to a Kubernetes cluster
## Deployment
1. Copy the example helm values and make your changes:
```shell
cp .config/helm_values_example.yml .config/helm_values.yml
```
2. Update helm dependencies:
```shell
cd chart
helm dependency list $dir 2> /dev/null | tail +2 | head -n -1 | awk '{ print "helm repo add " $1 " " $3 }' | while read cmd; do $cmd; done;
cd ../
```
3. Create the calckey helm release (also used to update existing deployment):
```shell
helm upgrade \
--install \
--namespace calckey \
--create-namespace \
calckey chart/ \
-f .config/helm_values.yml
```
4. Watch your calckey server spin up:
```shell
kubectl -n calckey get po -w
```
5. Initial the admin user and managed config:
```shell
export CALCKEY_USERNAME="my_desired_admin_handle" && \
export CALCKEY_PASSWORD="myDesiredInitialPassword" && \
export CALCKEY_HOST="calckey.example.com" && \
export CALCKEY_TOKEN=$(curl -X POST https://$CALCKEY_HOST/api/admin/accounts/create -H "Content-Type: application/json" -d "{ \"username\":\"$CALCKEY_USERNAME\", \"password\":\"$CALCKEY_PASSWORD\" }" | jq -r '.token') && \
echo "Save this token: ${CALCKEY_TOKEN}" && \
curl -X POST -H "Authorization: Bearer $CALCKEY_TOKEN" https://$CALCKEY_HOST/api/admin/accounts/hosted
```
6. Enjoy!

View file

@ -1,27 +1,44 @@
# 🚚 Migrating from Misskey to Calckey # 🚚 Migrating from Misskey to Calckey
The following procedure may not work depending on your environment and version of Misskey.
**Make sure you**
- **stopped all master and worker processes of Misskey.**
- **have backups of the database before performing any commands.**
## Misskey v13 and above ## Misskey v13 and above
Tested with Misskey v13.11.3.
If your Misskey v13 is older, we recommend updating your Misskey to v13.11.3.
```sh ```sh
wget -O mkv13.patch https://codeberg.org/calckey/calckey/raw/branch/develop/docs/mkv13.patch wget -O mkv13.patch https://codeberg.org/calckey/calckey/raw/branch/develop/docs/mkv13.patch
git apply mkv13.patch wget -O mkv13_restore.patch https://codeberg.org/calckey/calckey/raw/branch/develop/docs/mkv13_restore.patch
git apply mkv13.patch mkv13_restore.patch
cd packages/backend cd packages/backend
LINE_NUM="$(npx typeorm migration:show -d ormconfig.js | grep -n activeEmailValidation1657346559800 | cut -d ':' -f 1)" LINE_NUM="$(pnpm typeorm migration:show -d ormconfig.js | grep -n activeEmailValidation1657346559800 | cut -d ':' -f 1)"
NUM_MIGRATIONS="$(npx typeorm migration:show -d ormconfig.js | tail -n+"$LINE_NUM" | grep '\[X\]' | nl)" NUM_MIGRATIONS="$(pnpm typeorm migration:show -d ormconfig.js | tail -n+"$LINE_NUM" | grep '\[X\]' | wc -l)"
for i in $(seq 1 $NUM_MIGRAIONS); do for i in $(seq 1 $NUM_MIGRATIONS); do pnpm typeorm migration:revert -d ormconfig.js; done
npx typeorm migration:revert -d ormconfig.js
done cd ../../
git remote set-url origin https://codeberg.org/calckey/calckey.git git remote set-url origin https://codeberg.org/calckey/calckey.git
git fetch git fetch origin
git checkout main # or beta or develop git stash push
rm -rf fluent-emojis misskey-assets
git switch main # or beta or develop
git pull --ff git pull --ff
wget -O renote_muting.patch https://codeberg.org/calckey/calckey/raw/branch/develop/docs/renote_muting.patch
git apply renote_muting.patch
NODE_ENV=production pnpm run migrate pnpm install
# build using prefered method NODE_ENV=production pnpm run build
pnpm run migrate
git stash push
``` ```
Depending on the version you're migrating from, you may have to open Postgres with `psql -d your_database` and run the following commands: Depending on the version you're migrating from, you may have to open Postgres with `psql -d your_database` and run the following commands:
@ -44,6 +61,10 @@ ALTER TABLE "instance" ADD COLUMN "lastCommunicatedAt" date;
then quit with `\q`, and restart Calckey. then quit with `\q`, and restart Calckey.
Note: Ignore errors of `column "xxx" of relation "xxx" already exists`.
If no other errors happened, your Calckey is ready to launch!
## Misskey v12.119 and before ## Misskey v12.119 and before
```sh ```sh

127
docs/mkv13_restore.patch Normal file
View file

@ -0,0 +1,127 @@
diff --git a/packages/backend/migration/1680491187535-cleanup.js b/packages/backend/migration/1680491187535-cleanup.js
index 1e609ca06..0e6accf3e 100644
--- a/packages/backend/migration/1680491187535-cleanup.js
+++ b/packages/backend/migration/1680491187535-cleanup.js
@@ -1,10 +1,40 @@
export class cleanup1680491187535 {
- name = 'cleanup1680491187535'
+ name = "cleanup1680491187535";
- async up(queryRunner) {
- await queryRunner.query(`DROP TABLE "antenna_note" `);
- }
+ async up(queryRunner) {
+ await queryRunner.query(`DROP TABLE "antenna_note" `);
+ }
- async down(queryRunner) {
- }
+ async down(queryRunner) {
+ await queryRunner.query(
+ `CREATE TABLE antenna_note ( id character varying(32) NOT NULL, "noteId" character varying(32) NOT NULL, "antennaId" character varying(32) NOT NULL, read boolean DEFAULT false NOT NULL)`,
+ );
+ await queryRunner.query(
+ `COMMENT ON COLUMN antenna_note."noteId" IS 'The note ID.'`,
+ );
+ await queryRunner.query(
+ `COMMENT ON COLUMN antenna_note."antennaId" IS 'The antenna ID.'`,
+ );
+ await queryRunner.query(
+ `ALTER TABLE ONLY antenna_note ADD CONSTRAINT "PK_fb28d94d0989a3872df19fd6ef8" PRIMARY KEY (id)`,
+ );
+ await queryRunner.query(
+ `CREATE INDEX "IDX_0d775946662d2575dfd2068a5f" ON antenna_note USING btree ("antennaId")`,
+ );
+ await queryRunner.query(
+ `CREATE UNIQUE INDEX "IDX_335a0bf3f904406f9ef3dd51c2" ON antenna_note USING btree ("noteId", "antennaId")`,
+ );
+ await queryRunner.query(
+ `CREATE INDEX "IDX_9937ea48d7ae97ffb4f3f063a4" ON antenna_note USING btree (read)`,
+ );
+ await queryRunner.query(
+ `CREATE INDEX "IDX_bd0397be22147e17210940e125" ON antenna_note USING btree ("noteId")`,
+ );
+ await queryRunner.query(
+ `ALTER TABLE ONLY antenna_note ADD CONSTRAINT "FK_0d775946662d2575dfd2068a5f5" FOREIGN KEY ("antennaId") REFERENCES antenna(id) ON DELETE CASCADE`,
+ );
+ await queryRunner.query(
+ `ALTER TABLE ONLY antenna_note ADD CONSTRAINT "FK_bd0397be22147e17210940e125b" FOREIGN KEY ("noteId") REFERENCES note(id) ON DELETE CASCADE`,
+ );
+ }
}
diff --git a/packages/backend/migration/1680582195041-cleanup.js b/packages/backend/migration/1680582195041-cleanup.js
index c587e456a..a91d6ff3c 100644
--- a/packages/backend/migration/1680582195041-cleanup.js
+++ b/packages/backend/migration/1680582195041-cleanup.js
@@ -1,11 +1,64 @@
export class cleanup1680582195041 {
- name = 'cleanup1680582195041'
+ name = "cleanup1680582195041";
- async up(queryRunner) {
- await queryRunner.query(`DROP TABLE "notification" `);
- }
+ async up(queryRunner) {
+ await queryRunner.query(`DROP TABLE "notification"`);
+ }
- async down(queryRunner) {
-
- }
+ async down(queryRunner) {
+ await queryRunner.query(
+ `CREATE TABLE notification ( id character varying(32) NOT NULL, "createdAt" timestamp with time zone NOT NULL, "notifieeId" character varying(32) NOT NULL, "notifierId" character varying(32), "isRead" boolean DEFAULT false NOT NULL, "noteId" character varying(32), reaction character varying(128), choice integer, "followRequestId" character varying(32), type notification_type_enum NOT NULL, "customBody" character varying(2048), "customHeader" character varying(256), "customIcon" character varying(1024), "appAccessTokenId" character varying(32), achievement character varying(128))`,
+ );
+ await queryRunner.query(
+ `COMMENT ON COLUMN notification."createdAt" IS 'The created date of the Notification.'`,
+ );
+ await queryRunner.query(
+ `COMMENT ON COLUMN notification."notifieeId" IS 'The ID of recipient user of the Notification.'`,
+ );
+ await queryRunner.query(
+ `COMMENT ON COLUMN notification."notifierId" IS 'The ID of sender user of the Notification.'`,
+ );
+ await queryRunner.query(
+ `COMMENT ON COLUMN notification."isRead" IS 'Whether the Notification is read.'`,
+ );
+ await queryRunner.query(
+ `COMMENT ON COLUMN notification.type IS 'The type of the Notification.'`,
+ );
+ await queryRunner.query(
+ `ALTER TABLE ONLY notification ADD CONSTRAINT "PK_705b6c7cdf9b2c2ff7ac7872cb7" PRIMARY KEY (id)`,
+ );
+ await queryRunner.query(
+ `CREATE INDEX "IDX_080ab397c379af09b9d2169e5b" ON notification USING btree ("isRead")`,
+ );
+ await queryRunner.query(
+ `CREATE INDEX "IDX_33f33cc8ef29d805a97ff4628b" ON notification USING btree (type)`,
+ );
+ await queryRunner.query(
+ `CREATE INDEX "IDX_3b4e96eec8d36a8bbb9d02aa71" ON notification USING btree ("notifierId")`,
+ );
+ await queryRunner.query(
+ `CREATE INDEX "IDX_3c601b70a1066d2c8b517094cb" ON notification USING btree ("notifieeId")`,
+ );
+ await queryRunner.query(
+ `CREATE INDEX "IDX_b11a5e627c41d4dc3170f1d370" ON notification USING btree ("createdAt")`,
+ );
+ await queryRunner.query(
+ `CREATE INDEX "IDX_e22bf6bda77b6adc1fd9e75c8c" ON notification USING btree ("appAccessTokenId")`,
+ );
+ await queryRunner.query(
+ `ALTER TABLE ONLY notification ADD CONSTRAINT "FK_3b4e96eec8d36a8bbb9d02aa710" FOREIGN KEY ("notifierId") REFERENCES "user"(id) ON DELETE CASCADE`,
+ );
+ await queryRunner.query(
+ `ALTER TABLE ONLY notification ADD CONSTRAINT "FK_3c601b70a1066d2c8b517094cb9" FOREIGN KEY ("notifieeId") REFERENCES "user"(id) ON DELETE CASCADE`,
+ );
+ await queryRunner.query(
+ `ALTER TABLE ONLY notification ADD CONSTRAINT "FK_769cb6b73a1efe22ddf733ac453" FOREIGN KEY ("noteId") REFERENCES note(id) ON DELETE CASCADE`,
+ );
+ await queryRunner.query(
+ `ALTER TABLE ONLY notification ADD CONSTRAINT "FK_bd7fab507621e635b32cd31892c" FOREIGN KEY ("followRequestId") REFERENCES follow_request(id) ON DELETE CASCADE`,
+ );
+ await queryRunner.query(
+ `ALTER TABLE ONLY notification ADD CONSTRAINT "FK_e22bf6bda77b6adc1fd9e75c8c9" FOREIGN KEY ("appAccessTokenId") REFERENCES access_token(id) ON DELETE CASCADE`,
+ );
+ }
}

23
docs/renote_muting.patch Normal file
View file

@ -0,0 +1,23 @@
diff --git a/packages/backend/migration/1665091090561-add-renote-muting.js b/packages/backend/migration/1665091090561-add-renote-muting.js
index 2c76aaff5..f8541c818 100644
--- a/packages/backend/migration/1665091090561-add-renote-muting.js
+++ b/packages/backend/migration/1665091090561-add-renote-muting.js
@@ -4,18 +4,6 @@ export class addRenoteMuting1665091090561 {
}
async up(queryRunner) {
- await queryRunner.query(
- `CREATE TABLE "renote_muting" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "muteeId" character varying(32) NOT NULL, "muterId" character varying(32) NOT NULL, CONSTRAINT "PK_renoteMuting_id" PRIMARY KEY ("id"))`,
- );
- await queryRunner.query(
- `CREATE INDEX "IDX_renote_muting_createdAt" ON "muting" ("createdAt") `,
- );
- await queryRunner.query(
- `CREATE INDEX "IDX_renote_muting_muteeId" ON "muting" ("muteeId") `,
- );
- await queryRunner.query(
- `CREATE INDEX "IDX_renote_muting_muterId" ON "muting" ("muterId") `,
- );
}
async down(queryRunner) {}

294
flake.lock Normal file
View file

@ -0,0 +1,294 @@
{
"nodes": {
"devenv": {
"inputs": {
"flake-compat": "flake-compat",
"nix": "nix",
"nixpkgs": "nixpkgs",
"pre-commit-hooks": "pre-commit-hooks"
},
"locked": {
"lastModified": 1685521914,
"narHash": "sha256-0fdFP5IASLwJ0PSXrErW8PZon9TVYmi8VRF8OtjGkV4=",
"owner": "cachix",
"repo": "devenv",
"rev": "e206d8f2e3e8d6aa943656052f15bdfea8146b8d",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "devenv",
"type": "github"
}
},
"fenix": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"rust-analyzer-src": "rust-analyzer-src"
},
"locked": {
"lastModified": 1685514167,
"narHash": "sha256-urRxF0ZGSNeZjM4kALNg3wTh7fBscbqQmS6S/HU7Wms=",
"owner": "nix-community",
"repo": "fenix",
"rev": "3abfea51663583186f687c49a157eab1639349ca",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "fenix",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1685457039,
"narHash": "sha256-bEFtQm+YyLxQjKQAaBHJyPN1z2wbhBnr2g1NJWSYjwM=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "80717d11615b6f42d1ad2e18ead51193fc15de69",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"devenv",
"pre-commit-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1660459072,
"narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "a20de23b925fd8264fd7fad6454652e142fd7f73",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"lowdown-src": {
"flake": false,
"locked": {
"lastModified": 1633514407,
"narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=",
"owner": "kristapsdz",
"repo": "lowdown",
"rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8",
"type": "github"
},
"original": {
"owner": "kristapsdz",
"repo": "lowdown",
"type": "github"
}
},
"nix": {
"inputs": {
"lowdown-src": "lowdown-src",
"nixpkgs": [
"devenv",
"nixpkgs"
],
"nixpkgs-regression": "nixpkgs-regression"
},
"locked": {
"lastModified": 1676545802,
"narHash": "sha256-EK4rZ+Hd5hsvXnzSzk2ikhStJnD63odF7SzsQ8CuSPU=",
"owner": "domenkozar",
"repo": "nix",
"rev": "7c91803598ffbcfe4a55c44ac6d49b2cf07a527f",
"type": "github"
},
"original": {
"owner": "domenkozar",
"ref": "relaxed-flakes",
"repo": "nix",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1678875422,
"narHash": "sha256-T3o6NcQPwXjxJMn2shz86Chch4ljXgZn746c2caGxd8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "126f49a01de5b7e35a43fd43f891ecf6d3a51459",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"dir": "lib",
"lastModified": 1682879489,
"narHash": "sha256-sASwo8gBt7JDnOOstnps90K1wxmVfyhsTPPNTGBPjjg=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "da45bf6ec7bbcc5d1e14d3795c025199f28e0de0",
"type": "github"
},
"original": {
"dir": "lib",
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-regression": {
"locked": {
"lastModified": 1643052045,
"narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1678872516,
"narHash": "sha256-/E1YwtMtFAu2KUQKV/1+KFuReYPANM2Rzehk84VxVoc=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9b8e5abb18324c7fe9f07cb100c3cd4a29cda8b8",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-22.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1685399834,
"narHash": "sha256-Lt7//5snriXSdJo5hlVcDkpERL1piiih0UXIz1RUcC4=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "58c85835512b0db938600b6fe13cc3e3dc4b364e",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"pre-commit-hooks": {
"inputs": {
"flake-compat": [
"devenv",
"flake-compat"
],
"flake-utils": "flake-utils",
"gitignore": "gitignore",
"nixpkgs": [
"devenv",
"nixpkgs"
],
"nixpkgs-stable": "nixpkgs-stable"
},
"locked": {
"lastModified": 1682596858,
"narHash": "sha256-Hf9XVpqaGqe/4oDGr30W8HlsWvJXtMsEPHDqHZA6dDg=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"rev": "fb58866e20af98779017134319b5663b8215d912",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"type": "github"
}
},
"root": {
"inputs": {
"devenv": "devenv",
"fenix": "fenix",
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs_2"
}
},
"rust-analyzer-src": {
"flake": false,
"locked": {
"lastModified": 1685465261,
"narHash": "sha256-aJ2nUinUrNcFi+pb47bS5IIAeSiUEEPLJY8W4Q8Pcjk=",
"owner": "rust-lang",
"repo": "rust-analyzer",
"rev": "d2b3caa5b5694125fad04a9699e919444439f6a2",
"type": "github"
},
"original": {
"owner": "rust-lang",
"ref": "nightly",
"repo": "rust-analyzer",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

86
flake.nix Normal file
View file

@ -0,0 +1,86 @@
{
description = "Calckey development flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
# Flake Parts framework(https://flake.parts)
flake-parts.url = "github:hercules-ci/flake-parts";
# Devenv for better devShells(https://devenv.sh)
devenv.url = "github:cachix/devenv";
# Fenix for rust development
fenix.url = "github:nix-community/fenix";
fenix.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = inputs@{ flake-parts, ... }:
flake-parts.lib.mkFlake { inherit inputs; } {
imports = [
inputs.devenv.flakeModule
];
# Define the systems that this works on. Only tested with x66_64-linux, add more if you test and it works.
systems = [
"x86_64-linux"
];
# Expose these attributes for every system defined above.
perSystem = { config, pkgs, ... }: {
# Devenv shells
devenv = {
shells = {
# The default shell, used by nix-direnv
default = {
name = "calckey-dev-shell";
# Add additional packages to our environment
packages = [
pkgs.nodePackages.pnpm
pkgs.python3
];
# No need to warn on a new version, we'll update as needed.
devenv.warnOnNewVersion = false;
# Enable typescript support
languages.typescript.enable = true;
# Enable javascript for NPM and PNPM
languages.javascript.enable = true;
languages.javascript.package = pkgs.nodejs_18;
# Enable stable Rust for the backend
languages.rust.enable = true;
languages.rust.version = "stable";
processes = {
dev-server.exec = "pnpm run dev";
};
scripts = {
build.exec = "pnpm run build";
clean.exec = "pnpm run clean";
clear-state.exec = "rm -rf .devenv/state/redis .devenv/state/postgres";
format.exec = "pnpm run format";
install-deps.exec = "pnpm install";
migrate.exec = "pnpm run migrate";
prepare-config.exec = "cp .config/devenv.yml .config/default.yml";
};
services = {
postgres = {
enable = true;
package = pkgs.postgresql_12;
initialDatabases = [{
name = "calckey";
}];
initialScript = ''
CREATE USER calckey WITH PASSWORD 'calckey';
ALTER USER calckey WITH SUPERUSER;
GRANT ALL ON DATABASE calckey TO calckey;
'';
listen_addresses = "127.0.0.1";
port = 5432;
};
redis = {
enable = true;
bind = "127.0.0.1";
port = 6379;
};
};
};
};
};
};
};
}

View file

@ -176,7 +176,6 @@ operations: "الإجراءات"
software: "البرمجية" software: "البرمجية"
version: "الإصدار" version: "الإصدار"
metadata: "البيانات الوصفية" metadata: "البيانات الوصفية"
withNFiles: "{n} ملف (ملفات)"
monitor: "شاشة التحكم" monitor: "شاشة التحكم"
jobQueue: "قائمة الانتظار" jobQueue: "قائمة الانتظار"
cpuAndMemory: "وحدة المعالجة المركزية والذاكرة" cpuAndMemory: "وحدة المعالجة المركزية والذاكرة"
@ -197,7 +196,7 @@ noUsers: "ليس هناك مستخدمون"
editProfile: "تعديل الملف التعريفي" editProfile: "تعديل الملف التعريفي"
noteDeleteConfirm: "هل تريد حذف هذه الملاحظة؟" noteDeleteConfirm: "هل تريد حذف هذه الملاحظة؟"
pinLimitExceeded: "لا يمكنك تدبيس الملاحظات بعد الآن." pinLimitExceeded: "لا يمكنك تدبيس الملاحظات بعد الآن."
intro: "لقد انتهت عملية تنصيب Misskey. الرجاء إنشاء حساب إداري." intro: "لقد انتهت عملية تنصيب Calckey. الرجاء إنشاء حساب إداري."
done: "تمّ" done: "تمّ"
processing: "المعالجة جارية" processing: "المعالجة جارية"
preview: "معاينة" preview: "معاينة"
@ -372,7 +371,7 @@ exploreFediverse: "استكشف الفديفرس"
popularTags: "الوسوم الرائجة" popularTags: "الوسوم الرائجة"
userList: "القوائم" userList: "القوائم"
about: "عن" about: "عن"
aboutMisskey: "عن Misskey" aboutMisskey: "عن Calckey"
administrator: "المدير" administrator: "المدير"
token: "الرمز المميز" token: "الرمز المميز"
twoStepAuthentication: "الإستيثاق بعاملَيْن" twoStepAuthentication: "الإستيثاق بعاملَيْن"
@ -1027,6 +1026,27 @@ _time:
minute: "د" minute: "د"
hour: "سا" hour: "سا"
day: "ي" day: "ي"
_tutorial:
title: "How to use Calckey"
step1_1: "Welcome!"
step1_2: "Let's get you set up. You'll be up and running in no time!"
step2_1: "First, please fill out your profile."
step2_2: "Providing some information about who you are will make it easier for others to tell if they want to see your notes or follow you."
step3_1: "Now time to follow some people!"
step3_2: "Your home and social timelines are based off of who you follow, so try following a couple accounts to get started.\nClick the plus circle on the top right of a profile to follow them."
step4_1: "Let's get you out there."
step4_2: "For your first post, some people like to made a {introduction} post or a simple \"Hello world!\""
step5_1: "Timelines, timelines everywhere!"
step5_2: "Your instance has {timelines} different timelines enabled."
step5_3: "The Home {icon} timeline is where you can see posts from your followers."
step5_4: "The Local {icon} timeline is where you can see posts from everyone else on this instance."
step5_5: "The Recommended {icon} timeline is where you can see posts from instances the admins recommend."
step5_6: "The Social {icon} timeline is where you can see posts from friends of your followers."
step5_7: "The Global {icon} timeline is where you can see posts from every other connected instance."
step6_1: "So, what is this place?"
step6_2: "Well, you didn't just join Calckey. You joined a portal to the Fediverse, an interconnected network of thousands of servers, called \"instances\"."
step6_3: "Each server works in different ways, and not all servers run Calckey. This one does though! It's a bit complicated, but you'll get the hang of it in no time."
step6_4: "Now go, explore, and have fun!"
_2fa: _2fa:
alreadyRegistered: "سجلت سلفًا جهازًا للاستيثاق بعاملين." alreadyRegistered: "سجلت سلفًا جهازًا للاستيثاق بعاملين."
registerDevice: "سجّل جهازًا جديدًا" registerDevice: "سجّل جهازًا جديدًا"

View file

@ -177,7 +177,6 @@ operations: "ক্রিয়াকলাপ"
software: "সফটওয়্যার" software: "সফটওয়্যার"
version: "সংস্করণ" version: "সংস্করণ"
metadata: "মেটাডাটা" metadata: "মেটাডাটা"
withNFiles: "{n} টি ফাইল"
monitor: "মনিটর" monitor: "মনিটর"
jobQueue: "জব কিউ" jobQueue: "জব কিউ"
cpuAndMemory: "সিপিউ এবং মেমরি" cpuAndMemory: "সিপিউ এবং মেমরি"
@ -199,9 +198,9 @@ noUsers: "কোন ব্যাবহারকারী নেই"
editProfile: "প্রোফাইল সম্পাদনা করুন" editProfile: "প্রোফাইল সম্পাদনা করুন"
noteDeleteConfirm: "আপনি কি নোট ডিলিট করার ব্যাপারে নিশ্চিত?" noteDeleteConfirm: "আপনি কি নোট ডিলিট করার ব্যাপারে নিশ্চিত?"
pinLimitExceeded: "আপনি আর কোন নোট পিন করতে পারবেন না" pinLimitExceeded: "আপনি আর কোন নোট পিন করতে পারবেন না"
intro: "Misskey এর ইন্সটলেশন সম্পন্ন হয়েছে!দয়া করে অ্যাডমিন ইউজার তৈরি করুন।" intro: "Calckey এর ইন্সটলেশন সম্পন্ন হয়েছে!দয়া করে অ্যাডমিন ইউজার তৈরি করুন।"
done: "সম্পন্ন" done: "সম্পন্ন"
processing: "প্রক্রিয়াধীন..." processing: "প্রক্রিয়াধীন"
preview: "পূর্বরূপ দেখুন" preview: "পূর্বরূপ দেখুন"
default: "পূর্বনির্ধারিত" default: "পূর্বনির্ধারিত"
noCustomEmojis: "কোন ইমোজি নাই" noCustomEmojis: "কোন ইমোজি নাই"
@ -377,7 +376,7 @@ exploreFediverse: "Fediverse ঘুরে দেখুন"
popularTags: "জনপ্রিয় ট্যাগগুলি" popularTags: "জনপ্রিয় ট্যাগগুলি"
userList: "লিস্ট" userList: "লিস্ট"
about: "আপনার সম্পর্কে" about: "আপনার সম্পর্কে"
aboutMisskey: "Misskey সম্পর্কে" aboutMisskey: "Calckey সম্পর্কে"
administrator: "প্রশাসক" administrator: "প্রশাসক"
token: "টোকেন" token: "টোকেন"
twoStepAuthentication: "২-ধাপ প্রমাণীকরণ" twoStepAuthentication: "২-ধাপ প্রমাণীকরণ"
@ -695,7 +694,7 @@ onlineUsersCount: "{n} জন ব্যাবহারকারী অনলা
nUsers: "{n} জন ব্যাবহারকারী" nUsers: "{n} জন ব্যাবহারকারী"
nNotes: "{n} টি নোট" nNotes: "{n} টি নোট"
sendErrorReports: "ক্রুটি প্রতিবেদন পাঠান" sendErrorReports: "ক্রুটি প্রতিবেদন পাঠান"
sendErrorReportsDescription: "চালু থাকলে, বিস্তারিত ত্রুটির তথ্য Misskey-এর সাথে শেয়ার করা হয়। যা সফ্টওয়্যারটির গুণমান উন্নত করতে সাহায্য করে। ত্রুটির তথ্যের মধ্যে রয়েছে OS সংস্করণ, ব্রাউজারের ধরন, কর্মের ইতিহাস ইত্যাদি।" sendErrorReportsDescription: "চালু থাকলে, বিস্তারিত ত্রুটির তথ্য Calckey-এর সাথে শেয়ার করা হয়। যা সফ্টওয়্যারটির গুণমান উন্নত করতে সাহায্য করে। ত্রুটির তথ্যের মধ্যে রয়েছে OS সংস্করণ, ব্রাউজারের ধরন, কর্মের ইতিহাস ইত্যাদি।"
myTheme: "আমার থিম" myTheme: "আমার থিম"
backgroundColor: "পটভূমির রং" backgroundColor: "পটভূমির রং"
accentColor: "এক্সেন্টের রং" accentColor: "এক্সেন্টের রং"
@ -786,7 +785,7 @@ hashtags: "হ্যাশট্যাগ"
troubleshooting: "ট্রাবলশুটিং" troubleshooting: "ট্রাবলশুটিং"
useBlurEffect: "UI তে ব্লার ইফেক্ট ব্যাবহার করুন" useBlurEffect: "UI তে ব্লার ইফেক্ট ব্যাবহার করুন"
learnMore: "আরও জানুন" learnMore: "আরও জানুন"
misskeyUpdated: "Misskey আপডেট করা হয়েছে!" misskeyUpdated: "Calckey আপডেট করা হয়েছে!"
whatIsNew: "পরিবর্তনগুলি দেখান" whatIsNew: "পরিবর্তনগুলি দেখান"
translate: "অনুবাদ" translate: "অনুবাদ"
translatedFrom: "{x} হতে অনুবাদ করা" translatedFrom: "{x} হতে অনুবাদ করা"
@ -902,8 +901,8 @@ _aboutMisskey:
contributors: "প্রধান কন্ট্রিবিউটারগণ" contributors: "প্রধান কন্ট্রিবিউটারগণ"
allContributors: "সকল কন্ট্রিবিউটারগণ" allContributors: "সকল কন্ট্রিবিউটারগণ"
source: "সোর্স কোড" source: "সোর্স কোড"
translation: "Misskey অনুবাদ করুন" translation: "Calckey অনুবাদ করুন"
donate: "Misskey তে দান করুন" donate: "Calckey তে দান করুন"
morePatrons: "আরও অনেকে আমাদের সাহায্য করছেন। তাদের সবাইকে ধন্যবাদ 🥰" morePatrons: "আরও অনেকে আমাদের সাহায্য করছেন। তাদের সবাইকে ধন্যবাদ 🥰"
patrons: "সমর্থনকারী" patrons: "সমর্থনকারী"
_nsfw: _nsfw:
@ -912,7 +911,7 @@ _nsfw:
force: "সকল মিডিয়া লুকান" force: "সকল মিডিয়া লুকান"
_mfm: _mfm:
cheatSheet: "MFM চিটশিট" cheatSheet: "MFM চিটশিট"
intro: "MFM একটি মার্কআপ ভাষা যা Misskey-এর মধ্যে বিভিন্ন জায়গায় ব্যবহার করা যেতে পারে। এখানে আপনি MFM-এর সিনট্যাক্সগুলির একটি তালিকা দেখতে পারবেন।" intro: "MFM একটি মার্কআপ ভাষা যা Calckey-এর মধ্যে বিভিন্ন জায়গায় ব্যবহার করা যেতে পারে। এখানে আপনি MFM-এর সিনট্যাক্সগুলির একটি তালিকা দেখতে পারবেন।"
dummy: "মিসকি ফেডিভার্সের বিশ্বকে প্রসারিত করে" dummy: "মিসকি ফেডিভার্সের বিশ্বকে প্রসারিত করে"
mention: "উল্লেখ" mention: "উল্লেখ"
mentionDescription: "@ চিহ্ন + ব্যবহারকারীর নাম একটি নির্দিষ্ট ব্যবহারকারীকে নির্দেশ করতে ব্যবহার করা যায়।" mentionDescription: "@ চিহ্ন + ব্যবহারকারীর নাম একটি নির্দিষ্ট ব্যবহারকারীকে নির্দেশ করতে ব্যবহার করা যায়।"
@ -1108,6 +1107,27 @@ _time:
minute: "মিনিট" minute: "মিনিট"
hour: "ঘণ্টা" hour: "ঘণ্টা"
day: "দিন" day: "দিন"
_tutorial:
title: "How to use Calckey"
step1_1: "Welcome!"
step1_2: "Let's get you set up. You'll be up and running in no time!"
step2_1: "First, please fill out your profile."
step2_2: "Providing some information about who you are will make it easier for others to tell if they want to see your notes or follow you."
step3_1: "Now time to follow some people!"
step3_2: "Your home and social timelines are based off of who you follow, so try following a couple accounts to get started.\nClick the plus circle on the top right of a profile to follow them."
step4_1: "Let's get you out there."
step4_2: "For your first post, some people like to made a {introduction} post or a simple \"Hello world!\""
step5_1: "Timelines, timelines everywhere!"
step5_2: "Your instance has {timelines} different timelines enabled."
step5_3: "The Home {icon} timeline is where you can see posts from your followers."
step5_4: "The Local {icon} timeline is where you can see posts from everyone else on this instance."
step5_5: "The Recommended {icon} timeline is where you can see posts from instances the admins recommend."
step5_6: "The Social {icon} timeline is where you can see posts from friends of your followers."
step5_7: "The Global {icon} timeline is where you can see posts from every other connected instance."
step6_1: "So, what is this place?"
step6_2: "Well, you didn't just join Calckey. You joined a portal to the Fediverse, an interconnected network of thousands of servers, called \"instances\"."
step6_3: "Each server works in different ways, and not all servers run Calckey. This one does though! It's a bit complicated, but you'll get the hang of it in no time."
step6_4: "Now go, explore, and have fun!"
_2fa: _2fa:
alreadyRegistered: "আপনি ইতিমধ্যে একটি 2-ফ্যাক্টর অথেনটিকেশন ডিভাইস নিবন্ধন করেছেন৷" alreadyRegistered: "আপনি ইতিমধ্যে একটি 2-ফ্যাক্টর অথেনটিকেশন ডিভাইস নিবন্ধন করেছেন৷"
registerDevice: "নতুন ডিভাইস নিবন্ধন করুন" registerDevice: "নতুন ডিভাইস নিবন্ধন করুন"

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,9 @@
---
_lang_: "Čeština" _lang_: "Čeština"
headlineMisskey: "Síť propojená poznámkami" headlineMisskey: "Síť propojená poznámkami"
introMisskey: "Vítejte! Misskey je otevřený a decentralizovaný microblogový servis.\n\"Poznámkami\" můžete sdílet co se zrovna děje se všemi ve Vašem okolí. 📡\nPomocí \"reakcí\" můžete sdílet své názory a pocity na ostatní poznámky. 👍\nPojďte objevovat nový svět! 🚀" introMisskey: "Vítejte! Calckey je otevřený a decentralizovaný microblogový servis.\n\
\"Poznámkami\" můžete sdílet co se zrovna děje se všemi ve Vašem okolí. \U0001F4E1\
\nPomocí \"reakcí\" můžete sdílet své názory a pocity na ostatní poznámky. \U0001F44D\
\nPojďte objevovat nový svět! \U0001F680"
monthAndDay: "{day}. {month}." monthAndDay: "{day}. {month}."
search: "Vyhledávání" search: "Vyhledávání"
notifications: "Oznámení" notifications: "Oznámení"
@ -44,7 +46,8 @@ copyContent: "Zkopírovat obsah"
copyLink: "Kopírovat odkaz" copyLink: "Kopírovat odkaz"
delete: "Smazat" delete: "Smazat"
deleteAndEdit: "Smazat a upravit" deleteAndEdit: "Smazat a upravit"
deleteAndEditConfirm: "Jste si jistí že chcete smazat tuto poznámku a editovat ji? Ztratíte tím všechny reakce, sdílení a odpovědi na ni." deleteAndEditConfirm: "Jste si jistí že chcete smazat tuto poznámku a editovat ji?\
\ Ztratíte tím všechny reakce, sdílení a odpovědi na ni."
addToList: "Přidat do seznamu" addToList: "Přidat do seznamu"
sendMessage: "Odeslat zprávu" sendMessage: "Odeslat zprávu"
copyUsername: "Kopírovat uživatelské jméno" copyUsername: "Kopírovat uživatelské jméno"
@ -63,9 +66,11 @@ import: "Importovat"
export: "Exportovat" export: "Exportovat"
files: "Soubor(ů)" files: "Soubor(ů)"
download: "Stáhnout" download: "Stáhnout"
driveFileDeleteConfirm: "Opravdu chcete smazat soubor \"{name}\"? Poznámky, ke kterým je tento soubor připojen, budou také smazány." driveFileDeleteConfirm: "Opravdu chcete smazat soubor \"{name}\"? Soubor bude odstraněn\
\ ze všech příspěvků, které ji obsahují jako přílohu."
unfollowConfirm: "Jste si jisti že už nechcete sledovat {name}?" unfollowConfirm: "Jste si jisti že už nechcete sledovat {name}?"
exportRequested: "Požádali jste o export. To může chvíli trvat. Přidáme ho na váš Disk až bude dokončen." exportRequested: "Požádali jste o export. To může chvíli trvat. Přidáme ho na váš\
\ Disk až bude dokončen."
importRequested: "Požádali jste o export. To může chvilku trvat." importRequested: "Požádali jste o export. To může chvilku trvat."
lists: "Seznamy" lists: "Seznamy"
noLists: "Nemáte žádné seznamy" noLists: "Nemáte žádné seznamy"
@ -81,7 +86,8 @@ somethingHappened: "Jejda. Něco se nepovedlo."
retry: "Opakovat" retry: "Opakovat"
pageLoadError: "Nepodařilo se načíst stránku" pageLoadError: "Nepodařilo se načíst stránku"
serverIsDead: "Server neodpovídá. Počkejte chvíli a zkuste to znovu." serverIsDead: "Server neodpovídá. Počkejte chvíli a zkuste to znovu."
youShouldUpgradeClient: "Pro zobrazení této stránky obnovte stránku pro aktualizaci klienta." youShouldUpgradeClient: "Pro zobrazení této stránky obnovte stránku pro aktualizaci\
\ klienta."
enterListName: "Jméno seznamu" enterListName: "Jméno seznamu"
privacy: "Soukromí" privacy: "Soukromí"
makeFollowManuallyApprove: "Žádosti o sledování vyžadují potvrzení" makeFollowManuallyApprove: "Žádosti o sledování vyžadují potvrzení"
@ -105,7 +111,8 @@ clickToShow: "Klikněte pro zobrazení"
sensitive: "NSFW" sensitive: "NSFW"
add: "Přidat" add: "Přidat"
reaction: "Reakce" reaction: "Reakce"
reactionSettingDescription2: "Přetažením změníte pořadí, kliknutím smažete, zmáčkněte \"+\" k přidání" reactionSettingDescription2: "Přetažením změníte pořadí, kliknutím smažete, zmáčkněte\
\ \"+\" k přidání"
rememberNoteVisibility: "Zapamatovat nastavení zobrazení poznámky" rememberNoteVisibility: "Zapamatovat nastavení zobrazení poznámky"
attachCancel: "Odstranit přílohu" attachCancel: "Odstranit přílohu"
markAsSensitive: "Označit jako NSFW" markAsSensitive: "Označit jako NSFW"
@ -134,13 +141,18 @@ emojiUrl: "URL obrázku"
addEmoji: "Přidat emoji" addEmoji: "Přidat emoji"
settingGuide: "Doporučené nastavení" settingGuide: "Doporučené nastavení"
cacheRemoteFiles: "Ukládání vzdálených souborů do mezipaměti" cacheRemoteFiles: "Ukládání vzdálených souborů do mezipaměti"
cacheRemoteFilesDescription: "Zakázání tohoto nastavení způsobí, že vzdálené soubory budou odkazovány přímo, místo aby byly ukládány do mezipaměti. Tím se ušetří úložiště na serveru, ale zvýší se provoz, protože se negenerují miniatury." cacheRemoteFilesDescription: "Zakázání tohoto nastavení způsobí, že vzdálené soubory\
\ budou odkazovány přímo, místo aby byly ukládány do mezipaměti. Tím se ušetří úložiště\
\ na serveru, ale zvýší se provoz, protože se negenerují miniatury."
flagAsBot: "Tento účet je bot" flagAsBot: "Tento účet je bot"
flagAsBotDescription: "Pokud je tento účet kontrolován programem zaškrtněte tuto možnost. To označí tento účet jako bot pro ostatní vývojáře a zabrání tak nekonečným interakcím s ostatními boty a upraví Misskey systém aby se choval k tomuhle účtu jako bot." flagAsBotDescription: "Pokud je tento účet kontrolován programem zaškrtněte tuto možnost.\
\ To označí tento účet jako bot pro ostatní vývojáře a zabrání tak nekonečným interakcím\
\ s ostatními boty a upraví Calckey systém aby se choval k tomuhle účtu jako bot."
flagAsCat: "Tenhle účet je kočka" flagAsCat: "Tenhle účet je kočka"
flagAsCatDescription: "Vyberte tuto možnost aby tento účet byl označen jako kočka." flagAsCatDescription: "Vyberte tuto možnost aby tento účet byl označen jako kočka."
flagShowTimelineReplies: "Zobrazovat odpovědi na časové ose" flagShowTimelineReplies: "Zobrazovat odpovědi na časové ose"
flagShowTimelineRepliesDescription: "Je-li zapnuto, zobrazí odpovědi uživatelů na poznámky jiných uživatelů na vaší časové ose." flagShowTimelineRepliesDescription: "Je-li zapnuto, zobrazí odpovědi uživatelů na\
\ poznámky jiných uživatelů na vaší časové ose."
autoAcceptFollowed: "Automaticky akceptovat následování od účtů které sledujete" autoAcceptFollowed: "Automaticky akceptovat následování od účtů které sledujete"
addAccount: "Přidat účet" addAccount: "Přidat účet"
loginFailed: "Přihlášení se nezdařilo." loginFailed: "Přihlášení se nezdařilo."
@ -153,7 +165,10 @@ searchWith: "Hledat: {q}"
youHaveNoLists: "Nemáte žádné seznamy" youHaveNoLists: "Nemáte žádné seznamy"
followConfirm: "Jste si jisti, že chcete sledovat {name}?" followConfirm: "Jste si jisti, že chcete sledovat {name}?"
proxyAccount: "Proxy účet" proxyAccount: "Proxy účet"
proxyAccountDescription: "Proxy účet je účet, který za určitých podmínek sleduje uživatele na dálku vaším jménem. Například když uživatel zařadí vzdáleného uživatele do seznamu, pokud nikdo nesleduje uživatele na seznamu, aktivita nebude doručena instanci, takže místo toho bude uživatele sledovat účet proxy." proxyAccountDescription: "Proxy účet je účet, který za určitých podmínek sleduje uživatele\
\ na dálku vaším jménem. Například když uživatel zařadí vzdáleného uživatele do\
\ seznamu, pokud nikdo nesleduje uživatele na seznamu, aktivita nebude doručena\
\ instanci, takže místo toho bude uživatele sledovat účet proxy."
host: "Hostitel" host: "Hostitel"
selectUser: "Vyberte uživatele" selectUser: "Vyberte uživatele"
recipient: "Pro" recipient: "Pro"
@ -174,7 +189,6 @@ operations: "Operace"
software: "Software" software: "Software"
version: "Verze" version: "Verze"
metadata: "Metadata" metadata: "Metadata"
withNFiles: "{n} soubor(ů)"
monitor: "Monitorovat" monitor: "Monitorovat"
jobQueue: "Fronta úloh" jobQueue: "Fronta úloh"
cpuAndMemory: "CPU a paměť" cpuAndMemory: "CPU a paměť"
@ -189,7 +203,7 @@ blockedInstances: "Blokované instance"
noUsers: "Žádní uživatelé" noUsers: "Žádní uživatelé"
editProfile: "Upravit můj profil" editProfile: "Upravit můj profil"
pinLimitExceeded: "Nemůžete připnout další poznámky." pinLimitExceeded: "Nemůžete připnout další poznámky."
intro: "Instalace Misskey byla dokončena! Prosím vytvořte admina." intro: "Instalace Calckey byla dokončena! Prosím vytvořte admina."
done: "Hotovo" done: "Hotovo"
processing: "Zpracovávám" processing: "Zpracovávám"
preview: "Náhled" preview: "Náhled"
@ -239,7 +253,8 @@ agreeTo: "Souhlasím s {0}"
tos: "Podmínky užívání" tos: "Podmínky užívání"
start: "Začít" start: "Začít"
home: "Domů" home: "Domů"
remoteUserCaution: "Tyto informace nemusí být aktuální jelikož uživatel je ze vzdálené instance." remoteUserCaution: "Tyto informace nemusí být aktuální jelikož uživatel je ze vzdálené\
\ instance."
activity: "Aktivita" activity: "Aktivita"
images: "Obrázky" images: "Obrázky"
birthday: "Datum narození" birthday: "Datum narození"
@ -332,7 +347,7 @@ recentlyUpdatedUsers: "Nedávno aktívni uživatelé"
popularTags: "Populární tagy" popularTags: "Populární tagy"
userList: "Seznamy" userList: "Seznamy"
about: "Informace" about: "Informace"
aboutMisskey: "O Misskey" aboutMisskey: "O Calckey"
administrator: "Administrátor" administrator: "Administrátor"
token: "Token" token: "Token"
twoStepAuthentication: "Dvoufaktorová autentikace" twoStepAuthentication: "Dvoufaktorová autentikace"
@ -548,7 +563,8 @@ info: "Informace"
unknown: "Neznámý" unknown: "Neznámý"
onlineStatus: "Online status" onlineStatus: "Online status"
hideOnlineStatus: "Skrýt Váš online status" hideOnlineStatus: "Skrýt Váš online status"
hideOnlineStatusDescription: "Skrytí vašeho online stavu může snížit funkcionalitu některých funkcí, například vyhledávání." hideOnlineStatusDescription: "Skrytí vašeho online stavu může snížit funkcionalitu\
\ některých funkcí, například vyhledávání."
online: "Online" online: "Online"
active: "Aktivní" active: "Aktivní"
offline: "Offline" offline: "Offline"
@ -928,3 +944,66 @@ _deck:
antenna: "Antény" antenna: "Antény"
list: "Seznamy" list: "Seznamy"
mentions: "Zmínění" mentions: "Zmínění"
noteDeleteConfirm: Chcete opravdu smazat tento příspěvek?
defaultValueIs: 'Výchozí: {value}'
lookup: Hledat
keepOriginalUploading: Ponechat originální obrázek
uploadFromUrlRequested: Vyžádáno nahrání souboru
manageGroups: Spravovat skupiny
reloadConfirm: Znovu načíst časovou osu?
driveCapacityPerRemoteAccount: Místo na disku pro vzdálené uživatele
silenceThisInstance: Ztlumit tuto instance
silencedInstances: Ztlumené instance
blockedInstancesDescription: Zadejte seznam domén instancí, jež chcete blokovat. Uvedené
instance nebudou moci s touto instancí komunikovat.
hiddenTags: Skryté hashtagy
noInstances: Nejsou zde žádné instance
silenced: Ztlumené
disablingTimelinesInfo: Administrátoři a moderátoři budou vždy mít přístup ke všem
časovým osám, i pokud jsou vypnuté.
deleted: Vymazáno
editNote: Upravit poznámku
edited: Upraveno
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
na sledování a nemohou zmiňovat místní účty, pokud nejsou sledovány. Na blokované
instance toto nebude mít vliv.
hiddenTagsDescription: 'Vypište hashtagy (bez #), které chcete skrýt před trendy a
prozkoumat. Skryté hashtagy jsou stále zjistitelné jinými způsoby. Blokované případy
nejsou ovlivněny, i když jsou zde uvedeny.'
circularReferenceFolder: Cílová složka je podsložka přesouvané složky.
whenServerDisconnected: Při ztrátě spojení se serverem
pinnedUsersDescription: Uveďte uživatelská jména uživatelů připnutých na stránce "Procházet",
jedno na řádek.
pinnedPagesDescription: Zadejte cesty ke stránkám, které chcete připnout na horní
stránku této instance, oddělené zlomy řádků.
pageLoadErrorDescription: Toto je obvykle způsobeno chybami sítě nebo mezipaměti prohlížeče.
Zkuste vymazat mezipaměť a po chvíli čekání to zkuste znovu.
emptyDrive: Váš disk je prázdný
inputNewDescription: Zadejte nový popisek
hasChildFilesOrFolders: Složka nemůže být smazána, protože není prázdná.
noThankYou: Ne, děkuji
addInstance: Přidat instance
selectInstance: Vybrat si instance
blockedUsers: Zablokovaní uživatelé
muteAndBlock: Ztlumení a blokace
noJobs: Žádné úlohy
federating: Federace
clearQueueConfirmText: Nedoručené příspěvky, které zůstanou ve frontě, nebudou federovány.
Obvykle tato operace není potřeba.
clearCachedFilesConfirm: Chcete opravdu vymazat mezipaměť všech vzdálených souborů?
accountMoved: 'Uživatel/ka se přesunul/a na nový účet:'
keepOriginalUploadingDescription: Ponechá originálně nahraný obrázek tak, jak je.
Pokud vypnuto, verze pro zobrazení na webu bude vygenerována při nahrání.
mutedUsers: Ztlumení uživatelé
enableRecommendedTimeline: Povolit doporučenou časovou osu
driveCapacityPerLocalAccount: Místo na disku pro místní uživatele
pinnedPages: Připnuté Stránky
directNotes: Přímé zprávy
enableEmojiReactions: Povolit reakce pomocí emoji
showEmojisInReactionNotifications: Zobrazit emotikony v oznámeních o reakcích
reactionSetting: Reakce, které se mají zobrazit v seznamu reakcí
renoteMute: Ztlumit přeposílání
renoteUnmute: Zrušit ztlumení přeposílání
flagSpeakAsCat: Mluvit jako kočka
flagSpeakAsCatDescription: Vaše příspěvky budou v kočičím režimu nyanifikovány.

View file

@ -1,2 +1,218 @@
---
_lang_: "Dansk" _lang_: "Dansk"
monthAndDay: '{month}/{day}'
search: Søge
notifications: Notifikationer
username: Brugernavn
password: Adgangskode
forgotPassword: Glemt adgangskode
fetchingAsApObject: Henter fra Fediverset
ok: OK
gotIt: Forstået!
cancel: Annullere
enterUsername: Indtast brugernavn
instance: Instans
renotedBy: Forstærket fra {user}
noNotes: Ingen opslag
otherSettings: Andre Indstillinger
profile: Profil
timeline: Tidslinje
signup: Registrere
logout: Log Ud
login: Log ind
uploading: Uploader...
save: Gem
users: Brugere
favorited: Tilsat til bogmærker.
unfavorite: Fjerne fra bogmærker
alreadyFavorited: Allerede inden i bogmærker.
pin: Fastgøre til profil
unpin: Løse fra profil
delete: Slet
addToList: Tilsæt til liste
deleteAndEdit: Slet og ændre
reply: Svar
loadMore: Indlæs mere
receiveFollowRequest: Følgeanmodning er blevet sendt
import: Importere
export: Eksportere
driveFileDeleteConfirm: Er du sikker på at du vil slette filen "{name}"? Denne vil
blive slettet fra alle tilknyttede opslage.
unfollowConfirm: Er du sikker på at du vil ikke følge {name} længere?
privacy: Privatlivs
enterListName: Indtast navnen for denne list
makeFollowManuallyApprove: Følgeanmodninger kræver godkendelse
unrenote: Fratag forstærkelse
renote: Forstærk
add: Tilsæt
reactionSetting: Reaktioner til at vise i reaktion-vælgeren
reactionSettingDescription2: Bevæg til at flytte om på, tryk til at slette og indtast
"+" til at tilsætte.
rememberNoteVisibility: Husk opslagsynlidhedsindstillinger
emojis: Emoji
flagShowTimelineReplies: Vis svare i tidslinjen
flagAsCatDescription: Du kommer til at få katøre og tale som en kat!
showOnRemote: Vis på fjerninstans
general: Generelt
accountMoved: 'Bruger har flyttet til et nyt konto:'
settings: Indstillinger
basicSettings: Primær Indstillinger
openInWindow: Åben i vindue
noAccountDescription: Denne bruger har ikke skrevet deres bio endnu.
loggingIn: Logger ind
cantFavorite: Kunne ikke tilsætte til bogmærker.
copyUsername: Kopi brugernavn
copyContent: Kopi indholdet
copyLink: Kopi link
searchUser: Søg for en bruger
files: Filer
noLists: Du har ingen liste
lists: Lister
reaction: Reaktioner
sensitive: NSFW
emoji: Emoji
cacheRemoteFilesDescription: Når denne indstilling er deaktiveret, fremmed filer bliver
indlæset direkte fra denne fjerneinstans. Hvis du deaktivere dette så vil det formindske
brugte opbevaringsplads men det vil også få netværktraffic til at stige fordi miniaturebilleder
vil ikke blive skabt.
flagAsBot: Markere denne konto som en robot
flagShowTimelineRepliesDescription: Vis svare af brugere til opslage af andre brugere
i tidslinjen hvis den bliver tændt.
loginFailed: Kunne ikke logge ind
silenceThisInstance: Nedtone denne instans
deleteAndEditConfirm: Er du sikker på at du vil slet denne opslag og ændre det? Du
vil tabe alle reaktioner, forstærkninger og svarer indenfor denne opslag.
editNote: Ændre note
deleted: Slettet
edited: Ændret
sendMessage: Send en besked
youShouldUpgradeClient: Til at vise denne side, vær sød at refresh til at opdatere
din brugerenhed.
defaultNoteVisibility: Standard synlighed
follow: Følge
followRequest: Følge
followRequests: Følgeanmodninger
unfollow: Følge ikke længere
followRequestPending: Følgeanmodning ventes på
enterEmoji: Indtast en emoji
renoted: Forstærket.
cantRenote: Denne opslag kunne ikke forstærkes.
cantReRenote: En forstærkelse kan ikke forstærkes.
quote: Citere
pinnedNote: Fastgjort opslag
pinned: Fastgøre til profil
you: Dig
clickToShow: Tryk til at vise
unblock: Blokere ikke længere
suspend: Suspendere
unsuspend: Suspendere ikke længere
blockConfirm: Er du sikker på at du vil blokere denne konto?
unblockConfirm: Er du sikker på at du vil ikke blokere denne konto endnu længere?
suspendConfirm: Er du sikker på at du vil suspendere denne konto?
selectAntenna: Vælg en antenne
selectWidget: Vælg en widget
editWidgets: Ændre widgettere
customEmojis: Brugerdefineret emoji
emojiName: Emoji navn
operations: Operationer
software: Software
metadata: Metadata
version: Version
monitor: Vagt
jobQueue: Jobkø
statistics: Statistik
cpuAndMemory: CPU og hukommelse
network: Netværk
disk: Disk
instanceInfo: Instans information
noThankYou: Nej tak
noNotifications: Intet notifikationer
addUser: Indsæt en bruger
addInstance: Indsæt en instans
favorite: Indsæt til bogmærker
favorites: Bogmærker
showMore: Vis mere
showLess: Luk
youGotNewFollower: følgte dig
followRequestAccepted: Følgeanmodning accepteret
mention: Nævne
mentions: Nævnene
directNotes: Direkt beskeder
importAndExport: Importere/Eksporter data
download: Download
exportRequested: Du har bedt om en eksport. Det vil tage noget tid. Den vil blive
tilsæt til din Drev når den er færdig.
importRequested: Du har bedt om en eksport. Det vil tage noget tid.
note: Opslag
notes: Opslage
following: Følger
followers: Følgere
followsYou: Følger dig
createList: Skab en list
manageLists: Administrere lister
error: Fejl
somethingHappened: En fejl har opstået
retry: Gentage
pageLoadError: En fejl har opstået ved indlæsning af siden.
pageLoadErrorDescription: Dette er normalt på grund af netværksproblemer eller din
browser's cache. Prøv at ryd cachen og så gentage efter et styk tid.
serverIsDead: Serveren svarer ikke. Vær sød at vente et styk tid og prøv igen.
editWidgetsExit: Færdig
headlineMisskey: En åben-kildekode, decentraliseret social-media platform som er frit
forevigt! 🚀
introMisskey: Velkommen! Calckey er en åbent-kildekode, decentraliseret social-media
platform som er frit forevigt!🚀
enableEmojiReactions: Aktivere emoji reaktioner
unsuspendConfirm: Er du sikker på at du vil ikke suspendere denne konto endnu længere?
selectList: Vælg en list
showEmojisInReactionNotifications: Vis emoji i reaktion notifikationer
attachCancel: Fjern tilknyttelse
markAsSensitive: Markere som NSFW
unmarkAsSensitive: Markere ikke som NSFW længere
enterFileName: Indtast filnavn
mute: Nedtone
unmute: Nedtone ikke længere
renoteMute: Nedtone forstærkninger
renoteUnmute: Nedtone forstærkninger ikke længere
block: Blokere
cacheRemoteFiles: Cachere fremmed filer
flagAsBotDescription: Aktivere denne valgmulighed hvis denne konto er kontrolleret
af en komputerprogram. Hvis den et tændt så vil det signalere til andre udviklere
som arbejder på komputer-kontrolleret social-media kontoer og det vil også adjustere
Calckey's indresystemer til at behandle denne konto som en robot.
flagAsCat: Er du en kat? 😺
flagSpeakAsCat: Tale som en kat
emojiUrl: Emoji URL
addEmoji: Tilsæt
settingGuide: Anbefalet indstillinger
flagSpeakAsCatDescription: Din opslage vil blive nyaniferet når du er i kat-mode
autoAcceptFollowed: Automatisk godkende følgeanmodninger fra brugere som du selv følger
addAccount: Tilsæt konto
wallpaper: Baggrund
setWallpaper: Sæt baggrund
removeWallpaper: Fjern baggrund
host: Host
selectUser: Vælg en bruger
searchWith: 'Søge: {q}'
youHaveNoLists: Du har ingen liste
followConfirm: Er du sikker på at du vil gerne følge {name}?
proxyAccount: Proxykonto
proxyAccountDescription: En proxykonto er en konto som virker som en fremmed følger
for bruger under særlige konditioner. For eksempel, når en bruger tilsætter en fjernbruger
til denne list, vil denne fjernbruger's aktivitet ikke blive leveret til den instans
hvis ingen lokalebruger følger fjernbrugeren, så denne proxykonto vil følge den
istedetfor.
instances: Instanser
registeredAt: Registreret på
latestRequestSentAt: Sidste anmodning sendt
latestRequestReceivedAt: Sidste anmodning modtaget
selectInstance: Vælg en instans
recipient: Recipient(er)
annotation: Kommentarer
federation: Føderation
latestStatus: Senest status
storageUsage: Opbevaringspladsbrug
charts: Grafer
perHour: Hver time
perDay: Hver dag
stopActivityDelivery: Stop med at sende aktiviteter
blockThisInstance: Blokere denne instans

File diff suppressed because it is too large Load diff

View file

@ -435,7 +435,6 @@ nothing: Δεν υπάρχει τίποτα να δείτε εδώ
newNoteRecived: Υπάρχουν νέες δημοσιεύσεις newNoteRecived: Υπάρχουν νέες δημοσιεύσεις
passwordMatched: Ταιριάζει passwordMatched: Ταιριάζει
unmarkAsSensitive: Αναίρεση επισήμανσης ως Ευαίσθητο Περιεχόμενο (NSFW) unmarkAsSensitive: Αναίρεση επισήμανσης ως Ευαίσθητο Περιεχόμενο (NSFW)
withNFiles: '{n} αρχείο(-α)'
blockedUsers: Μπλοκαρισμένα μέλη blockedUsers: Μπλοκαρισμένα μέλη
noteDeleteConfirm: Θέλετε σίγουρα να διαγράψετε αυτή τη δημοσίευση; noteDeleteConfirm: Θέλετε σίγουρα να διαγράψετε αυτή τη δημοσίευση;
preview: Προεπισκόπηση preview: Προεπισκόπηση
@ -489,7 +488,7 @@ perDay: Ανά Ημέρα
software: Λογισμικό software: Λογισμικό
cpuAndMemory: CPU και Μνήμη cpuAndMemory: CPU και Μνήμη
noUsers: Δεν υπάρχουν μέλη noUsers: Δεν υπάρχουν μέλη
processing: Επεξεργασία... processing: Επεξεργασία
changePassword: Αλλαγή κωδικού changePassword: Αλλαγή κωδικού
security: Ασφάλεια security: Ασφάλεια
featured: Προτεινόμενα featured: Προτεινόμενα

View file

@ -5,6 +5,7 @@ introMisskey: "Welcome! Calckey is an open source, decentralized social media pl
\ that's free forever! \U0001F680" \ that's free forever! \U0001F680"
monthAndDay: "{month}/{day}" monthAndDay: "{month}/{day}"
search: "Search" search: "Search"
searchPlaceholder: "Search Calckey"
notifications: "Notifications" notifications: "Notifications"
username: "Username" username: "Username"
password: "Password" password: "Password"
@ -18,7 +19,7 @@ enterUsername: "Enter username"
renotedBy: "Boosted by {user}" renotedBy: "Boosted by {user}"
noNotes: "No posts" noNotes: "No posts"
noNotifications: "No notifications" noNotifications: "No notifications"
instance: "Instance" instance: "Server"
settings: "Settings" settings: "Settings"
basicSettings: "Basic Settings" basicSettings: "Basic Settings"
otherSettings: "Other Settings" otherSettings: "Other Settings"
@ -34,7 +35,7 @@ uploading: "Uploading..."
save: "Save" save: "Save"
users: "Users" users: "Users"
addUser: "Add a user" addUser: "Add a user"
addInstance: "Add an instance" addInstance: "Add a server"
favorite: "Add to bookmarks" favorite: "Add to bookmarks"
favorites: "Bookmarks" favorites: "Bookmarks"
unfavorite: "Remove from bookmarks" unfavorite: "Remove from bookmarks"
@ -46,16 +47,22 @@ unpin: "Unpin from profile"
copyContent: "Copy contents" copyContent: "Copy contents"
copyLink: "Copy link" copyLink: "Copy link"
delete: "Delete" delete: "Delete"
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"
edited: "Edited"
addToList: "Add to list" addToList: "Add to list"
sendMessage: "Send a message" sendMessage: "Send a message"
copyUsername: "Copy username" copyUsername: "Copy username"
searchUser: "Search for a user" searchUser: "Search for a user"
reply: "Reply" reply: "Reply"
jumpToPrevious: "Jump to previous"
loadMore: "Load more" loadMore: "Load more"
showMore: "Show more" showMore: "Show more"
newer: "newer"
older: "older"
showLess: "Close" showLess: "Close"
youGotNewFollower: "followed you" youGotNewFollower: "followed you"
receiveFollowRequest: "Follow request received" receiveFollowRequest: "Follow request received"
@ -63,18 +70,20 @@ followRequestAccepted: "Follow request accepted"
mention: "Mention" mention: "Mention"
mentions: "Mentions" mentions: "Mentions"
directNotes: "Direct messages" directNotes: "Direct messages"
cw: "Content warning"
importAndExport: "Import/Export Data" importAndExport: "Import/Export Data"
import: "Import" 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\ driveFileDeleteConfirm: "Are you sure you want to delete the file \"{name}\"? It will\
\ 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."
noLists: "You don't have any lists" noLists: "You don't have any lists"
note: "Post" note: "Post"
notes: "Posts" notes: "Posts"
@ -149,7 +158,7 @@ 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 instance. Disabling this will decrease storage usage,\ \ directly from the remote server. Disabling this will decrease storage usage,\
\ but increase traffic, as thumbnails will not be generated." \ but 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.\
@ -166,7 +175,7 @@ flagShowTimelineRepliesDescription: "Shows replies of users to posts of other us
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"
showOnRemote: "View on remote instance" showOnRemote: "View on remote server"
general: "General" general: "General"
accountMoved: "User has moved to a new account:" accountMoved: "User has moved to a new account:"
wallpaper: "Wallpaper" wallpaper: "Wallpaper"
@ -178,15 +187,15 @@ 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 instance\ \ to the list, the remote user's activity will not be delivered to the server\
\ if no local user is following that user, so the proxy account will follow instead." \ if no 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 instance" selectInstance: "Select an server"
recipient: "Recipient(s)" recipient: "Recipient(s)"
annotation: "Comments" annotation: "Comments"
federation: "Federation" federation: "Federation"
instances: "Instances" instances: "Servers"
registeredAt: "Registered at" registeredAt: "Registered at"
latestRequestSentAt: "Last request sent" latestRequestSentAt: "Last request sent"
latestRequestReceivedAt: "Last request received" latestRequestReceivedAt: "Last request received"
@ -196,19 +205,18 @@ charts: "Charts"
perHour: "Per Hour" perHour: "Per Hour"
perDay: "Per Day" perDay: "Per Day"
stopActivityDelivery: "Stop sending activities" stopActivityDelivery: "Stop sending activities"
blockThisInstance: "Block this instance" blockThisInstance: "Block this server"
silenceThisInstance: "Silence this instance" silenceThisInstance: "Silence this server"
operations: "Operations" operations: "Operations"
software: "Software" software: "Software"
version: "Version" version: "Version"
metadata: "Metadata" metadata: "Metadata"
withNFiles: "{n} file(s)"
monitor: "Monitor" monitor: "Monitor"
jobQueue: "Job Queue" jobQueue: "Job Queue"
cpuAndMemory: "CPU and Memory" cpuAndMemory: "CPU and Memory"
network: "Network" network: "Network"
disk: "Disk" disk: "Disk"
instanceInfo: "Instance Information" 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?"
@ -216,27 +224,29 @@ clearQueueConfirmText: "Any undelivered posts remaining in the queue will not be
\ 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 Instances" blockedInstances: "Blocked Servers"
blockedInstancesDescription: "List the hostnames of the instances that you want to\ blockedInstancesDescription: "List the hostnames of the servers that you want to\
\ block. Listed instances will no longer be able to communicate with this instance." \ block. Listed servers will no longer be able to communicate with this servers."
silencedInstances: "Silenced Instances" silencedInstances: "Silenced Servers"
silencedInstancesDescription: "List the hostnames of the instances that you want to\ silencedInstancesDescription: "List the hostnames of the servers that you want to\
\ silence. Accounts in the listed instances are treated as \"Silenced\", can only make follow requests, and cannot mention local accounts if not followed. This will not affect the blocked instances." \ silence. Accounts in the listed servers are treated as \"Silenced\", can only\
\ make follow requests, and cannot mention local accounts if not followed. This\
\ will not 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 means. Blocked instances are not affected even if listed here." \ other means."
muteAndBlock: "Mutes and Blocks" muteAndBlock: "Mutes and Blocks"
mutedUsers: "Muted users" mutedUsers: "Muted users"
blockedUsers: "Blocked users" blockedUsers: "Blocked users"
noUsers: "There are no users" noUsers: "There are no users"
noInstances: "There are no instances" noInstances: "There are no servers"
editProfile: "Edit profile" editProfile: "Edit profile"
noteDeleteConfirm: "Are you sure you want to delete this post?" noteDeleteConfirm: "Are you sure you want to delete this post?"
pinLimitExceeded: "You cannot pin any more posts" pinLimitExceeded: "You cannot pin any more posts"
intro: "Installation of Calckey has been finished! Please create an admin user." intro: "Installation of Calckey has been finished! Please create an admin user."
done: "Done" done: "Done"
processing: "Processing..." processing: "Processing"
preview: "Preview" preview: "Preview"
default: "Default" default: "Default"
defaultValueIs: "Default: {value}" defaultValueIs: "Default: {value}"
@ -250,9 +260,9 @@ all: "All"
subscribing: "Subscribing" subscribing: "Subscribing"
publishing: "Publishing" publishing: "Publishing"
notResponding: "Not responding" notResponding: "Not responding"
instanceFollowing: "Following on instance" instanceFollowing: "Following on server"
instanceFollowers: "Followers of instance" instanceFollowers: "Followers of server"
instanceUsers: "Users of this instance" instanceUsers: "Users of this server"
changePassword: "Change password" changePassword: "Change password"
security: "Security" security: "Security"
retypedNotMatch: "The inputs do not match." retypedNotMatch: "The inputs do not match."
@ -345,8 +355,8 @@ unwatch: "Stop watching"
accept: "Accept" accept: "Accept"
reject: "Reject" reject: "Reject"
normal: "Normal" normal: "Normal"
instanceName: "Instance name" instanceName: "Server name"
instanceDescription: "Instance description" instanceDescription: "Server description"
maintainerName: "Maintainer" maintainerName: "Maintainer"
maintainerEmail: "Maintainer email" maintainerEmail: "Maintainer email"
tosUrl: "Terms of Service URL" tosUrl: "Terms of Service URL"
@ -380,7 +390,7 @@ pinnedUsersDescription: "List usernames separated by line breaks to be pinned in
\ \"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 instance, 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"
@ -395,6 +405,7 @@ avoidMultiCaptchaConfirm: "Using multiple Captcha systems may cause interference
\ 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 would like them to stay enabled, press cancel." \ you 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."
manageAntennas: "Manage Antennas" manageAntennas: "Manage Antennas"
name: "Name" name: "Name"
antennaSource: "Antenna source" antennaSource: "Antenna source"
@ -406,7 +417,7 @@ 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"
antennaUsersDescription: "List one username per line" antennaUsersDescription: "List one username per line"
antennaInstancesDescription: "List one instance host per line" antennaInstancesDescription: "List one server host per line"
caseSensitive: "Case sensitive" caseSensitive: "Case sensitive"
withReplies: "Include replies" withReplies: "Include replies"
connectedTo: "Following account(s) are connected" connectedTo: "Following account(s) are connected"
@ -521,6 +532,7 @@ total: "Total"
weekOverWeekChanges: "Changes to last week" weekOverWeekChanges: "Changes to last week"
dayOverDayChanges: "Changes to yesterday" dayOverDayChanges: "Changes to yesterday"
appearance: "Appearance" appearance: "Appearance"
accessibility: "Accessibility"
clientSettings: "Client Settings" clientSettings: "Client Settings"
accountSettings: "Account Settings" accountSettings: "Account Settings"
promotion: "Promoted" promotion: "Promoted"
@ -585,12 +597,14 @@ scratchpadDescription: "The scratchpad provides an environment for AiScript expe
output: "Output" output: "Output"
script: "Script" script: "Script"
disablePagesScript: "Disable AiScript on Pages" disablePagesScript: "Disable AiScript on Pages"
expandOnNoteClick: "Open post on click"
expandOnNoteClickDesc: "If disabled, you can still open posts in the right-click menu or by clicking the timestamp."
updateRemoteUser: "Update remote user information" 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 instance 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"
@ -660,9 +674,12 @@ 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: "Instance Mutes" instanceMute: "Server Mutes"
userSaysSomething: "{name} said something" userSaysSomething: "{name} said something"
userSaysSomethingReason: "{name} said {reason}" userSaysSomethingReason: "{name} said {reason}"
userSaysSomethingReasonReply: "{name} replied to a post containing {reason}"
userSaysSomethingReasonRenote: "{name} boosted a post containing {reason}"
userSaysSomethingReasonQuote: "{name} quoted a post containing {reason}"
makeActive: "Activate" makeActive: "Activate"
display: "Display" display: "Display"
copy: "Copy" copy: "Copy"
@ -672,6 +689,7 @@ logs: "Logs"
delayed: "Delayed" delayed: "Delayed"
database: "Database" database: "Database"
channel: "Channels" channel: "Channels"
channelFederationWarn: "Channels do not yet federate to other servers"
create: "Create" create: "Create"
notificationSetting: "Notification settings" notificationSetting: "Notification settings"
notificationSettingDesc: "Select the types of notification to display." notificationSettingDesc: "Select the types of notification to display."
@ -696,16 +714,16 @@ 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 instance" 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 instance." \ 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"
openInSideView: "Open in side view" openInSideView: "Open in side view"
defaultNavigationBehaviour: "Default navigation behavior" defaultNavigationBehaviour: "Default navigation behavior"
editTheseSettingsMayBreakAccount: "Editing these settings may damage your account." editTheseSettingsMayBreakAccount: "Editing these settings may damage your account."
instanceTicker: "Instance information of posts" instanceTicker: "Server information of posts"
waitingFor: "Waiting for {x}" waitingFor: "Waiting for {x}"
random: "Random" random: "Random"
system: "System" system: "System"
@ -757,6 +775,7 @@ pageLikedCount: "Number of received Page likes"
contact: "Contact" contact: "Contact"
useSystemFont: "Use the system's default font" useSystemFont: "Use the system's default font"
clips: "Clips" clips: "Clips"
clipsDesc: "Clips are like share-able categorized bookmarks. You can create clips from the menu of individual posts."
experimentalFeatures: "Experimental features" experimentalFeatures: "Experimental features"
developer: "Developer" developer: "Developer"
makeExplorable: "Make account visible in \"Explore\"" makeExplorable: "Make account visible in \"Explore\""
@ -803,7 +822,7 @@ capacity: "Capacity"
inUse: "Used" inUse: "Used"
editCode: "Edit code" editCode: "Edit code"
apply: "Apply" apply: "Apply"
receiveAnnouncementFromInstance: "Receive notifications from this instance" receiveAnnouncementFromInstance: "Receive notifications from this server"
emailNotification: "Email notifications" emailNotification: "Email notifications"
publish: "Publish" publish: "Publish"
inChannelSearch: "Search in channel" inChannelSearch: "Search in channel"
@ -834,7 +853,7 @@ active: "Active"
offline: "Offline" offline: "Offline"
notRecommended: "Not recommended" notRecommended: "Not recommended"
botProtection: "Bot Protection" botProtection: "Bot Protection"
instanceBlocking: "Federation Block/Silence" instanceBlocking: "Federation Management"
selectAccount: "Select account" selectAccount: "Select account"
switchAccount: "Switch account" switchAccount: "Switch account"
enabled: "Enabled" enabled: "Enabled"
@ -862,13 +881,13 @@ low: "Low"
emailNotConfiguredWarning: "Email address not set." emailNotConfiguredWarning: "Email address not set."
ratio: "Ratio" ratio: "Ratio"
secureMode: "Secure Mode (Authorized Fetch)" secureMode: "Secure Mode (Authorized Fetch)"
instanceSecurity: "Instance Security" instanceSecurity: "Server Security"
secureModeInfo: "When requesting from other instances, 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 instances can federate with your\ privateModeInfo: "When enabled, only whitelisted servers can federate with your\
\ instances. All posts will be hidden from the public." \ server. All posts will be hidden from the public."
allowedInstances: "Whitelisted Instances" allowedInstances: "Whitelisted Servers"
allowedInstancesDescription: "Hosts of instances to be whitelisted for federation,\ allowedInstancesDescription: "Hosts of servers to be whitelisted for federation,\
\ each separated by a new line (only applies in private mode)." \ each separated by a new line (only applies in private mode)."
previewNoteText: "Show preview" previewNoteText: "Show preview"
customCss: "Custom CSS" customCss: "Custom CSS"
@ -911,7 +930,7 @@ 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: "Classic" classic: "Centered"
muteThread: "Mute thread" muteThread: "Mute thread"
unmuteThread: "Unmute thread" unmuteThread: "Unmute thread"
ffVisibility: "Follows/Followers Visibility" ffVisibility: "Follows/Followers Visibility"
@ -931,15 +950,12 @@ overridedDeviceKind: "Device type"
smartphone: "Smartphone" smartphone: "Smartphone"
tablet: "Tablet" tablet: "Tablet"
auto: "Auto" auto: "Auto"
showLocalPosts: "Show local posts in:" themeColor: "Server Ticker Color"
homeTimeline: "Home Timeline"
socialTimeline: "Social Timeline"
themeColor: "Instance Ticker Color"
size: "Size" size: "Size"
numberOfColumn: "Number of columns" numberOfColumn: "Number of columns"
searchByGoogle: "Search" searchByGoogle: "Search"
instanceDefaultLightTheme: "Instance-wide default light theme" instanceDefaultLightTheme: "Server-wide default light theme"
instanceDefaultDarkTheme: "Instance-wide default dark theme" instanceDefaultDarkTheme: "Server-wide default dark theme"
instanceDefaultThemeDescription: "Enter the theme code in object format." instanceDefaultThemeDescription: "Enter the theme code in object format."
mutePeriod: "Mute duration" mutePeriod: "Mute duration"
indefinitely: "Permanently" indefinitely: "Permanently"
@ -962,7 +978,7 @@ 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: "An account created and automatically operated by the system." 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"
@ -994,7 +1010,7 @@ 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 instance-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."
@ -1006,7 +1022,7 @@ pushNotification: "Push notifications"
subscribePushNotification: "Enable push notifications" 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 instance 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}\"\
@ -1025,8 +1041,8 @@ customSplashIconsDescription: "URLs for custom splash screen icons separated by
\ 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 instances" recommendedInstances: "Recommended servers"
recommendedInstancesDescription: "Recommended instances 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"
@ -1041,12 +1057,12 @@ 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 the account formatted like @person@instance.com" \ of 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@instance.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\
@ -1054,7 +1070,8 @@ migrationConfirm: "Are you absolutely sure you want to migrate your account to {
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"
indexFrom: "Index from Post ID onwards (leave blank to index every post)" indexFrom: "Index from Post ID onwards"
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"
@ -1069,7 +1086,17 @@ customKaTeXMacroDescription: "Set up macros to write mathematical expressions ea
\ supported; advanced syntax, such as conditional branching, cannot be used here." \ supported; 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\
\ sign up at another server! If you have an invitation code for this server, please\
\ enter it below."
findOtherInstance: "Find another server"
apps: "Apps"
sendModMail: "Send Moderation Notice"
preventAiLearning: "Prevent AI bot scraping"
preventAiLearningDescription: "Request third-party AI language models not to study\
\ content you upload, such as posts and images."
noGraze: "Please disable the \"Graze for Mastodon\" browser extension, as it interferes with Calckey."
silencedWarning: "This page is showing because these usera are from servers your admin silenced, so they may potentially be spam."
_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\
@ -1116,9 +1143,9 @@ _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\
\ instance administrator instead." \ server administrator instead."
contactAdmin: "This instance does not support using email addresses, please contact\ contactAdmin: "This server does not support using email addresses, please contact\
\ the instance 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"
@ -1176,10 +1203,16 @@ _nsfw:
ignore: "Don't hide NSFW media" ignore: "Don't hide NSFW media"
force: "Hide all media" force: "Hide all media"
_mfm: _mfm:
play: "Play MFM"
stop: "Stop MFM"
warn: "MFM may contain rapidly moving or flashy animations"
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"
advancedDescription: "If disabled, only allows for basic markup unless animated MFM is playing"
mention: "Mention" mention: "Mention"
mentionDescription: "You can specify a user by using an At-Symbol and a username." mentionDescription: "You can specify a user by using an At-Symbol and a username."
hashtag: "Hashtag" hashtag: "Hashtag"
@ -1242,8 +1275,12 @@ _mfm:
sparkleDescription: "Gives content a sparkling particle effect." sparkleDescription: "Gives content a sparkling particle effect."
rotate: "Rotate" rotate: "Rotate"
rotateDescription: "Turns content by a specified angle." rotateDescription: "Turns content by a specified angle."
fade: "Fade"
fadeDescription: "Fades content in and out."
position: "Position" position: "Position"
positionDescription: "Move content by a specified amount." positionDescription: "Move content by a specified amount."
crop: "Crop"
cropDescription: "Crop content."
scale: "Scale" scale: "Scale"
scaleDescription: "Scale content by a specified amount." scaleDescription: "Scale content by a specified amount."
foreground: "Foreground color" foreground: "Foreground color"
@ -1272,6 +1309,8 @@ _channel:
following: "Followed" following: "Followed"
usersCount: "{n} Participants" usersCount: "{n} Participants"
notesCount: "{n} Posts" notesCount: "{n} Posts"
nameAndDescription: "Name and description"
nameOnly: "Name only"
_messaging: _messaging:
dms: "Private" dms: "Private"
groups: "Groups" groups: "Groups"
@ -1293,11 +1332,11 @@ _wordMute:
hard: "Hard" hard: "Hard"
mutedNotes: "Muted posts" mutedNotes: "Muted posts"
_instanceMute: _instanceMute:
instanceMuteDescription: "This will mute any posts/boosts from the listed instances,\ instanceMuteDescription: "This will mute any posts/boosts from the listed servers,\
\ including those of users replying to a user from a muted instance." \ 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 instances." title: "Hides posts from listed servers."
heading: "List of instances to be muted" heading: "List of servers to be muted"
_theme: _theme:
explore: "Explore Themes" explore: "Explore Themes"
install: "Install a theme" install: "Install a theme"
@ -1402,30 +1441,26 @@ _tutorial:
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 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 made a {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 instance 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 and from everyone else on this instance. If you prefer your Home\
\ timeline to only display posts from accounts you follow, you can easily change\
\ this in Settings!"
step5_4: "The Local {icon} timeline is where you can see posts from everyone else\
\ on this instance."
step5_5: "The Social {icon} timeline is where you can see posts only from the accounts\
\ you follow." \ you follow."
step5_6: "The Recommended {icon} timeline is where you can see posts from instances\ 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_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 instance." \ 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, called \"instances\"." \ 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 no time." \ in no time."
@ -1490,7 +1525,7 @@ _antennaSources:
users: "Posts from specific users" users: "Posts from specific users"
userList: "Posts from a specified list of users" userList: "Posts from a specified list of users"
userGroup: "Posts from users in a specified group" userGroup: "Posts from users in a specified group"
instances: "Posts from all users on an instance" instances: "Posts from all users on an server"
_weekday: _weekday:
sunday: "Sunday" sunday: "Sunday"
monday: "Monday" monday: "Monday"
@ -1500,30 +1535,35 @@ _weekday:
friday: "Friday" friday: "Friday"
saturday: "Saturday" saturday: "Saturday"
_widgets: _widgets:
memo: "Sticky notes" memo: "Sticky Notes"
notifications: "Notifications" notifications: "Notifications"
timeline: "Timeline" timeline: "Timeline"
calendar: "Calendar" calendar: "Calendar"
trends: "Trending" trends: "Trending"
clock: "Clock" clock: "Clock"
rss: "RSS reader" rss: "RSS Reader"
rssTicker: "RSS-Ticker" rssTicker: "RSS Ticker"
activity: "Activity" activity: "Activity"
photos: "Photos" photos: "Photos"
digitalClock: "Digital clock" digitalClock: "Digital Clock"
unixClock: "UNIX clock" unixClock: "UNIX Clock"
federation: "Federation" federation: "Federation"
instanceCloud: "Instance cloud" instanceCloud: "Server Cloud"
postForm: "Posting form" postForm: "Posting Form"
slideshow: "Slideshow" slideshow: "Slideshow"
button: "Button" button: "Button"
onlineUsers: "Online users" onlineUsers: "Online Users"
jobQueue: "Job Queue" jobQueue: "Job Queue"
serverMetric: "Server metrics" serverMetric: "Server Metrics"
aiscript: "AiScript console" aiscript: "AiScript Console"
userList: "User list" userList: "User List"
serverInfo: "Server Info"
_userList: _userList:
chooseList: "Select a list" chooseList: "Select a list"
meiliStatus: "Server Status"
meiliSize: "Index size"
meiliIndexCount: "Indexed posts"
_cw: _cw:
hide: "Hide" hide: "Hide"
show: "Show content" show: "Show content"
@ -1937,6 +1977,9 @@ _notification:
youWereInvitedToGroup: "{userName} invited you to a group" youWereInvitedToGroup: "{userName} invited you to a group"
pollEnded: "Poll results have become available" pollEnded: "Poll results have become available"
emptyPushNotificationMessage: "Push notifications have been updated" emptyPushNotificationMessage: "Push notifications have been updated"
reacted: "reacted to your post"
renoted: "boosted your post"
voted: "voted on your poll"
_types: _types:
all: "All" all: "All"
follow: "New followers" follow: "New followers"
@ -1985,20 +2028,12 @@ _deck:
list: "List" list: "List"
mentions: "Mentions" mentions: "Mentions"
direct: "Direct messages" direct: "Direct messages"
_apps: _experiments:
apps: "Apps" title: "Experiments"
crossPlatform: "Cross platform" enablePostEditing: "Enable post editing"
mobile: "Mobile" postEditingCaption: "Shows the option for users to edit their existing posts via\
firstParty: "First party" \ the post options menu."
firstClass: "First class" enablePostImports: "Enable post imports"
secondClass: "Second class" postImportsCaption: "Allows users to import their posts from past Calckey,\
thirdClass: "Third class" \ Misskey, Mastodon, Akkoma, and Pleroma accounts. It may cause slowdowns during\
free: "Free" \ load if your queue is bottlenecked."
paid: "Paid"
pwa: "Install PWA"
kaiteki: "Kaiteki"
milktea: "Milktea"
missLi: "MissLi"
mona: "Mona"
theDesk: "TheDesk"
lesskey: "Lesskey"

View file

@ -14,7 +14,7 @@ ok: "OK"
gotIt: "¡Lo tengo!" gotIt: "¡Lo tengo!"
cancel: "Cancelar" cancel: "Cancelar"
enterUsername: "Introduce el nombre de usuario" enterUsername: "Introduce el nombre de usuario"
renotedBy: "Reposteado por {user}" renotedBy: "Impulsado por {user}"
noNotes: "No hay publicaciones" noNotes: "No hay publicaciones"
noNotifications: "No hay notificaciones" noNotifications: "No hay notificaciones"
instance: "Instancia" instance: "Instancia"
@ -46,7 +46,7 @@ copyLink: "Copiar enlace"
delete: "Borrar" delete: "Borrar"
deleteAndEdit: "Borrar y editar" deleteAndEdit: "Borrar y editar"
deleteAndEditConfirm: "¿Estás seguro de que quieres borrar esta publicación y editarla?\ deleteAndEditConfirm: "¿Estás seguro de que quieres borrar esta publicación y editarla?\
\ Perderás todas las reacciones, impulsados y respuestas." \ Perderás todas las reacciones, impulsos y respuestas."
addToList: "Agregar a lista" addToList: "Agregar a lista"
sendMessage: "Enviar un mensaje" sendMessage: "Enviar un mensaje"
copyUsername: "Copiar nombre de usuario" copyUsername: "Copiar nombre de usuario"
@ -195,7 +195,6 @@ operations: "Operaciones"
software: "Software" software: "Software"
version: "Versión" version: "Versión"
metadata: "Metadatos" metadata: "Metadatos"
withNFiles: "{n} archivos"
monitor: "Monitor" monitor: "Monitor"
jobQueue: "Cola de trabajos" jobQueue: "Cola de trabajos"
cpuAndMemory: "CPU y Memoria" cpuAndMemory: "CPU y Memoria"
@ -222,7 +221,7 @@ noteDeleteConfirm: "¿Desea borrar esta publicación?"
pinLimitExceeded: "Ya no se pueden fijar más publicaciones" pinLimitExceeded: "Ya no se pueden fijar más publicaciones"
intro: "¡La instalación de Calckey ha terminado! Crea el usuario administrador." intro: "¡La instalación de Calckey ha terminado! Crea el usuario administrador."
done: "Terminado" done: "Terminado"
processing: "Procesando..." processing: "Procesando"
preview: "Vista previa" preview: "Vista previa"
default: "Predeterminado" default: "Predeterminado"
defaultValueIs: "Predeterminado" defaultValueIs: "Predeterminado"
@ -342,7 +341,7 @@ dayX: "Día {day}"
monthX: "Mes {month}" monthX: "Mes {month}"
yearX: "Año {year}" yearX: "Año {year}"
pages: "Páginas" pages: "Páginas"
integration: "Integración" integration: "Integraciones"
connectService: "Conectar" connectService: "Conectar"
disconnectService: "Desconectar" disconnectService: "Desconectar"
enableLocalTimeline: "Habilitar linea de tiempo local" enableLocalTimeline: "Habilitar linea de tiempo local"
@ -366,7 +365,7 @@ pinnedPages: "Páginas fijadas"
pinnedPagesDescription: "Describa las rutas de las páginas que desea fijar a la página\ pinnedPagesDescription: "Describa las rutas de las páginas que desea fijar a la página\
\ principal de la instancia, separadas por lineas nuevas" \ principal de la instancia, separadas por lineas nuevas"
pinnedClipId: "Id del clip fijado" pinnedClipId: "Id del clip fijado"
pinnedNotes: "Nota fijada" pinnedNotes: "Publicación fijada"
hcaptcha: "hCaptcha" hcaptcha: "hCaptcha"
enableHcaptcha: "Habilitar hCaptcha" enableHcaptcha: "Habilitar hCaptcha"
hcaptchaSiteKey: "Clave del sitio" hcaptchaSiteKey: "Clave del sitio"
@ -386,14 +385,14 @@ antennaKeywords: "Palabras clave para recibir"
antennaExcludeKeywords: "Palabras clave para excluir" antennaExcludeKeywords: "Palabras clave para excluir"
antennaKeywordsDescription: "Separar con espacios es una declaración AND, separar\ antennaKeywordsDescription: "Separar con espacios es una declaración AND, separar\
\ con una linea nueva es una declaración OR" \ con una linea nueva es una declaración OR"
notifyAntenna: "Notificar nueva nota" notifyAntenna: "Notificar nueva publicación"
withFileAntenna: "Sólo notas con archivos adjuntados" withFileAntenna: "Sólo publicaciones con archivos adjuntados"
enableServiceworker: "Activar ServiceWorker" enableServiceworker: "Activar ServiceWorker"
antennaUsersDescription: "Elegir nombres de usuarios separados por una linea nueva" antennaUsersDescription: "Elegir nombres de usuarios separados por una linea nueva"
caseSensitive: "Distinguir mayúsculas de minúsculas" caseSensitive: "Distinguir mayúsculas de minúsculas"
withReplies: "Incluir respuestas" withReplies: "Incluir respuestas"
connectedTo: "Estas cuentas están conectadas" connectedTo: "Estas cuentas están conectadas"
notesAndReplies: "Notas y respuestas" notesAndReplies: "Publicaciones y respuestas"
withFiles: "Adjuntos" withFiles: "Adjuntos"
silence: "Silenciar" silence: "Silenciar"
silenceConfirm: "¿Desea silenciar al usuario?" silenceConfirm: "¿Desea silenciar al usuario?"
@ -430,7 +429,7 @@ notFoundDescription: "No se encontró la página correspondiente a la URL elegid
uploadFolder: "Carpeta de subidas por defecto" uploadFolder: "Carpeta de subidas por defecto"
cacheClear: "Borrar caché" cacheClear: "Borrar caché"
markAsReadAllNotifications: "Marcar todas las notificaciones como leídas" markAsReadAllNotifications: "Marcar todas las notificaciones como leídas"
markAsReadAllUnreadNotes: "Marcar todas las notas como leídas" markAsReadAllUnreadNotes: "Marcar todas las publicaciones como leídas"
markAsReadAllTalkMessages: "Marcar todos los chats como leídos" markAsReadAllTalkMessages: "Marcar todos los chats como leídos"
help: "Ayuda" help: "Ayuda"
inputMessageHere: "Escribe el mensaje aquí" inputMessageHere: "Escribe el mensaje aquí"
@ -451,7 +450,7 @@ text: "Texto"
enable: "Activar" enable: "Activar"
next: "Siguiente" next: "Siguiente"
retype: "Intentar de nuevo" retype: "Intentar de nuevo"
noteOf: "Notas de {user}" noteOf: "Publicaciones de {user}"
inviteToGroup: "Invitar al grupo" inviteToGroup: "Invitar al grupo"
quoteAttached: "Cita añadida" quoteAttached: "Cita añadida"
quoteQuestion: "¿Quiere añadir una cita?" quoteQuestion: "¿Quiere añadir una cita?"
@ -511,8 +510,8 @@ accountSettings: "Ajustes de cuenta"
promotion: "Promovido" promotion: "Promovido"
promote: "Promover" promote: "Promover"
numberOfDays: "Cantidad de dias" numberOfDays: "Cantidad de dias"
hideThisNote: "Ocultar esta nota" hideThisNote: "Ocultar esta publicación"
showFeaturedNotesInTimeline: "Mostrar notas destacadas en la línea de tiempo" showFeaturedNotesInTimeline: "Mostrar publicaciones destacadas en la línea de tiempo"
objectStorage: "Almacenamiento de objetos" objectStorage: "Almacenamiento de objetos"
useObjectStorage: "Usar almacenamiento de objetos" useObjectStorage: "Usar almacenamiento de objetos"
objectStorageBaseUrl: "Base URL" objectStorageBaseUrl: "Base URL"
@ -542,7 +541,7 @@ objectStorageSetPublicRead: "Seleccionar \"public-read\" al subir "
serverLogs: "Registros del servidor" serverLogs: "Registros del servidor"
deleteAll: "Eliminar todos" deleteAll: "Eliminar todos"
showFixedPostForm: "Mostrar el formulario de las entradas encima de la línea de tiempo" showFixedPostForm: "Mostrar el formulario de las entradas encima de la línea de tiempo"
newNoteRecived: "Tienes una nota nuevo" newNoteRecived: "Tienes unas publicaciones nuevas"
sounds: "Sonidos" sounds: "Sonidos"
listen: "Escuchar" listen: "Escuchar"
none: "Ninguna" none: "Ninguna"
@ -575,7 +574,7 @@ deleteAllFiles: "Borrar todos los archivos"
deleteAllFilesConfirm: "¿Desea borrar todos los archivos?" deleteAllFilesConfirm: "¿Desea borrar todos los archivos?"
removeAllFollowing: "Retener todos los siguientes" removeAllFollowing: "Retener todos los siguientes"
removeAllFollowingDescription: "Cancelar todos los siguientes del servidor {host}.\ removeAllFollowingDescription: "Cancelar todos los siguientes del servidor {host}.\
\ Ejecutar en caso de que esta instancia haya dejado de existir" \ Ejecutar en caso de que esta instancia haya dejado de existir."
userSuspended: "Este usuario ha sido suspendido." userSuspended: "Este usuario ha sido suspendido."
userSilenced: "Este usuario ha sido silenciado." userSilenced: "Este usuario ha sido silenciado."
yourAccountSuspendedTitle: "Esta cuenta ha sido suspendida" yourAccountSuspendedTitle: "Esta cuenta ha sido suspendida"
@ -590,8 +589,8 @@ addRelay: "Agregar relé"
inboxUrl: "Inbox URL" inboxUrl: "Inbox URL"
addedRelays: "Relés añadidos" addedRelays: "Relés añadidos"
serviceworkerInfo: "Se necesita activar para usar las notificaciones push" serviceworkerInfo: "Se necesita activar para usar las notificaciones push"
deletedNote: "Nota eliminada" deletedNote: "Publicación eliminada"
invisibleNote: "Nota oculta" invisibleNote: "Publicación oculta"
enableInfiniteScroll: "Activar scroll infinito" enableInfiniteScroll: "Activar scroll infinito"
visibility: "Visibilidad" visibility: "Visibilidad"
poll: "Encuesta" poll: "Encuesta"
@ -1154,6 +1153,7 @@ _mfm:
plain: "Plano" plain: "Plano"
plainDescription: "Desactiva los efectos de todo el contenido MFM con este efecto\ plainDescription: "Desactiva los efectos de todo el contenido MFM con este efecto\
\ MFM." \ MFM."
position: Posición
_instanceTicker: _instanceTicker:
none: "No mostrar" none: "No mostrar"
remote: "Mostrar a usuarios remotos" remote: "Mostrar a usuarios remotos"
@ -1173,6 +1173,8 @@ _channel:
following: "Siguiendo" following: "Siguiendo"
usersCount: "{n} participantes" usersCount: "{n} participantes"
notesCount: "{n} notas" notesCount: "{n} notas"
nameOnly: Nombre solamente
nameAndDescription: Nombre y descripción
_menuDisplay: _menuDisplay:
sideFull: "Horizontal" sideFull: "Horizontal"
sideIcon: "Horizontal (ícono)" sideIcon: "Horizontal (ícono)"
@ -1900,18 +1902,6 @@ moveFrom: Mueve a esta cuenta de una cuenta antigua
moveFromLabel: 'La cuenta que estás moviendo de:' moveFromLabel: 'La cuenta que estás moviendo de:'
moveAccountDescription: '' moveAccountDescription: ''
license: Licencia license: Licencia
_apps:
apps: Aplicaciones
crossPlatform: Plataforma Cruzada
mobile: Teléfono móvil
secondClass: Segunda clase
lesskey: ''
firstClass: Primera clase
thirdClass: Tercera clase
theDesk: ''
pwa: Instalar PWA
free: Gratis
paid: Pagado
noThankYou: No gracias noThankYou: No gracias
userSaysSomethingReason: '{name} dijo {reason}' userSaysSomethingReason: '{name} dijo {reason}'
hiddenTags: Etiquetas Ocultas hiddenTags: Etiquetas Ocultas
@ -1928,3 +1918,12 @@ _messaging:
groups: Grupos groups: Grupos
dms: Privado dms: Privado
pushNotification: Notificaciones pushNotification: Notificaciones
apps: Aplicaciones
migration: Migración
silenced: Silenciado
deleted: Eliminado
edited: Editado
editNote: Editar nota
silenceThisInstance: Silenciar esta instancia
findOtherInstance: Buscar otro servidor
userSaysSomethingReasonRenote: '{name} impulsó una publicación que contiene {reason]'

View file

@ -75,8 +75,8 @@ files: Tiedostot
download: Lataa download: Lataa
unfollowConfirm: Oletko varma, ettet halua seurata enää käyttäjää {name}? unfollowConfirm: Oletko varma, ettet halua seurata enää käyttäjää {name}?
noLists: Sinulla ei ole listoja noLists: Sinulla ei ole listoja
note: Lähetys note: Viesti
notes: Lähetykset notes: Viestit
following: Seuraa following: Seuraa
createList: Luo lista createList: Luo lista
manageLists: Hallitse listoja manageLists: Hallitse listoja
@ -171,8 +171,8 @@ searchUser: Etsi käyttäjää
showLess: Sulje showLess: Sulje
youGotNewFollower: seurasi sinua youGotNewFollower: seurasi sinua
directNotes: Yksityisviestit directNotes: Yksityisviestit
driveFileDeleteConfirm: Oletko varma, että haluat poistaa tiedoston " {name}"? Lähetykset, driveFileDeleteConfirm: Oletko varma, että haluat poistaa tiedoston " {name}"? Se
jotka sisältyvät tiedostoon, poistuvat myös. poistetaan kaikista viesteistä, jotka sisältävät sen liitetiedostona.
importRequested: Olet pyytänyt viemistä. Tämä voi viedä hetken. importRequested: Olet pyytänyt viemistä. Tämä voi viedä hetken.
exportRequested: Olet pyytänyt tuomista. Tämä voi viedä hetken. Se lisätään asemaan exportRequested: Olet pyytänyt tuomista. Tämä voi viedä hetken. Se lisätään asemaan
kun tuonti valmistuu. kun tuonti valmistuu.
@ -182,7 +182,6 @@ followsYou: Seuraa sinua
pageLoadErrorDescription: Tämä yleensä johtuu verkkovirheistä tai selaimen välimuistista. pageLoadErrorDescription: Tämä yleensä johtuu verkkovirheistä tai selaimen välimuistista.
Kokeile tyhjentämällä välimuisti ja yritä sitten hetken kuluttua uudelleen. Kokeile tyhjentämällä välimuisti ja yritä sitten hetken kuluttua uudelleen.
enterListName: Anna listalle nimi enterListName: Anna listalle nimi
withNFiles: '{n} tiedosto(t)'
instanceInfo: Instanssin tiedot instanceInfo: Instanssin tiedot
clearQueue: Tyhjennä jono clearQueue: Tyhjennä jono
suspendConfirm: Oletko varma, että haluat keskeyttää tämän tilin? suspendConfirm: Oletko varma, että haluat keskeyttää tämän tilin?
@ -221,3 +220,751 @@ clearQueueConfirmText: Mitkään välittämättömät lähetykset, jotka ovat jo
federoidu. Yleensä tätä toimintoa ei tarvita. federoidu. Yleensä tätä toimintoa ei tarvita.
blockedInstancesDescription: Lista instanssien isäntänimistä, jotka haluat estää. blockedInstancesDescription: Lista instanssien isäntänimistä, jotka haluat estää.
Listatut instanssit eivät kykene kommunikoimaan enää tämän instanssin kanssa. Listatut instanssit eivät kykene kommunikoimaan enää tämän instanssin kanssa.
security: Turvallisuus
retypedNotMatch: Syöte ei kelpaa.
fromDrive: Asemasta
keepOriginalUploading: Säilytä alkuperäinen kuva
uploadFromUrlDescription: Tiedoston URL, jonka haluat ylösladata
themeForLightMode: Teema vaaleassa tilassa
theme: Teemat
themeForDarkMode: Teema tummassa tilassa
drive: Asema
darkThemes: Tummat teemat
copyUrl: Kopioi URL-linkki
rename: Uudelleennimeä
maintainerName: Ylläpitäjä
maintainerEmail: Ylläpitäjän sähköposti
tosUrl: Palvelun ehdot URL-linkki
thisYear: Vuosi
backgroundImageUrl: Taustakuvan URL-linkki
basicInfo: Perustiedot
pinnedPagesDescription: Kirjoita niiden sivujen polut, jotka haluat liittää tämän
instanssin yläsivulle rivinvaihdoin erotettuna.
hcaptchaSiteKey: Sivuston avain
hcaptchaSecretKey: Salausavain
silencedInstances: Hiljennetyt instanssit
muteAndBlock: Hiljennykset ja estetyt
mutedUsers: Hiljennetyt käyttäjät
blockedUsers: Estetyt käyttäjät
noUsers: Ei yhtään käyttäjää
noInstances: Ei yhtään instanssia
editProfile: Muokkaa profiilia
noteDeleteConfirm: Oletko varma, että haluat poistaa tämän viestin?
pinLimitExceeded: Et voi kiinnittää enempää viestejä
intro: Calckey -asennus valmis! Ole hyvä ja luo admin-käyttäjä.
done: Valmis
processing: Suorittaa
preview: Esikatselu
default: Oletus
defaultValueIs: 'Oletus: {value}'
noCustomEmojis: Ei emojia
noJobs: Ei töitä
federating: Federoi
blocked: Estetty
silenced: Hiljennetty
suspended: Keskeytetty
all: Kaikki
publishing: Julkaisee
subscribing: Tilaa
notResponding: Ei vastaa
instanceFollowing: Seuraa instanssia
instanceFollowers: Instanssin seuraajat
instanceUsers: Instanssin käyttäjät
changePassword: Muuta salasana
newPasswordRetype: Uudelleensyötä uusi salasana
more: Lisää!
featured: Esillä
usernameOrUserId: Käyttäjänimi tai käyttäjä id
noSuchUser: Käyttäjää ei löydy
lookup: Hae
announcements: Tiedoitteet
imageUrl: Kuva URL-linkki
removed: Onnistuneesti poistettu
removeAreYouSure: Oletko varma, että haluat poistaa " {x}"?
resetAreYouSure: Haluatko nollata?
saved: Tallennettu
messaging: Juttele
upload: Lataa ylös
fromUrl: URL:stä
uploadFromUrl: Ylöslataa URL:stä
uploadFromUrlRequested: Ylöslataus pyydetty
uploadFromUrlMayTakeTime: Voi viedä hetki, kun ylöslataus on valmis.
explore: Tutustu
messageRead: Lue
noMoreHistory: Ei lisää historiaa
startMessaging: Aloita uusi juttelu
manageGroups: Hallitse ryhmiä
nUsersRead: lukenut {n}
agreeTo: Hyväksyn {0}
tos: Palvelun ehdot
start: Aloita
home: Koti
remoteUserCaution: Etäkäyttäjän tiedot saattavat olla puutteellisia.
light: Vaalea
dark: Tumma
lightThemes: Vaaleat teemat
syncDeviceDarkMode: Synkronoi tumma tila laitteen asetuksen mukaan
fileName: Tiedostonimi
selectFile: Valitse tiedosto
selectFiles: Valitse tiedostot
selectFolder: Valitse kansio
selectFolders: Valitse kansiot
renameFile: Uudelleennimeä tiedosto
folderName: Kansionimi
createFolder: Luo kansio
renameFolder: Uudelleennimeä kansio
deleteFolder: Poista kansio
addFile: Lisää tiedosto
emptyDrive: Asemasi on tyhjä
emptyFolder: Tämä kansio on tyhjä
unableToDelete: Ei voitu poistaa
inputNewFileName: Syötä uusi tiedostonimi
inputNewDescription: Syötä uusi kuvateksti
inputNewFolderName: Syötä uusi kansionimi
hasChildFilesOrFolders: Koska kansio ei ole tyhjä, sitä ei voi poistaa.
avatar: Kuvake
banner: Banneri
nsfw: Herkkää sisältöä (NSFW)
whenServerDisconnected: Kun yhteys palvelimeen menetetään
disconnectedFromServer: Yhteys palvelimeen katkennut
reload: Päivitä
doNothing: Hylkää
reloadConfirm: Haluaisitko päivittää aikajanan?
unwatch: Lopeta katselu
watch: Katsele
accept: Hyväksy
reject: Hylkää
normal: Normaali
instanceName: Instanssin nimi
thisMonth: Kuukausi
today: Tänään
monthX: '{month}'
connectService: Yhdistä
disconnectService: Katkaise yhteys
enableLocalTimeline: Ota käyttöön paikallinen aikajana
enableGlobalTimeline: Ota käyttöön globaali aikajana
enableRecommendedTimeline: Ota käyttöön suositellut -aikajana
registration: Rekisteröinti
enableRegistration: Ota käyttöön uuden käyttäjän rekisteröinti
driveCapacityPerLocalAccount: Aseman kapasiteetti paikallista käyttäjää kohti
driveCapacityPerRemoteAccount: Aseman kapasiteetti etäkäyttäjää kohti
inMb: megatavuissa
bannerUrl: Bannerikuvan URL-linkki
pinnedUsers: Kiinnitetyt käyttäjät
pinnedPages: Kiinnitetyt sivut
pinnedClipId: Kiinnitettävän leikkeen ID
enableHcaptcha: Ota käyttöön hCaptcha-tunnistus
recaptcha: CAPTCHA uudelleen
enableRecaptcha: Ota käyttöön CAPTCHA uudelleen
recaptchaSiteKey: Sivuston avain
recaptchaSecretKey: Salausavain
silenceThisInstance: Hiljennä tämä instanssi
silencedInstancesDescription: Lista isäntänimistä, joka haluat hiljentää. Tilejä listassa
kohdellaan "hiljennettynä", ne voivat tehdä seuraajapyyntöjä ja eivät voi tehdä
mainintoja paikallistileistä jossei seurattu. Tämä ei vaikuta estettyihin instansseihin.
hiddenTagsDescription: 'Listaa aihetunnisteet (ilman #-merkkiä) aihetunnisteet, jotka
haluat piilottaa trendaavista ja Tutustu-osiosta. Piilotetut aihetunnisteet ovat
kuitenkin löydettävissä muilla keinoilla. Estetyt instanssit eivät vaikuta, vaikka
listattu tähän.'
currentPassword: Nykyinen salasana
newPassword: Uusi salasana
attachFile: Liitetyt tiedostot
keepOriginalUploadingDescription: Tallentaa alkuperäisen kuvan sellaisenaan. Jos kytketty
päältä, webissä näytettävä versio luodaan ylöslatauksen yhteydessä.
remove: Poista
circularReferenceFolder: Kohdekansio on kansion alikansio, jonka haluat siirtää.
deleteAreYouSure: Oletko varma, että haluat poistaa kokonaan" {x}"?
yearsOld: '{age} vuotias'
activity: Aktiivisuus
images: Kuvat
birthday: Syntymäpäivä
registeredDate: Liittynyt
location: Sijainti
disablingTimelinesInfo: Järjestelmänvalvojilla ja moderaattoreilla on aina pääsy kaikille
aikajanoille, vaikka olisikin poistettu käytöstä.
dayX: '{day}'
yearX: '{year}'
pages: Sivut
integration: Integraatiot
instanceDescription: Instanssin kuvaus
invite: Kutsu
iconUrl: Ikoni URL-linkki
pinnedUsersDescription: Listaa käyttäjänimet eroteltuna rivivaihdoin kiinnittääksesi
ne "Tutustu" välilehteen.
pinnedNotes: Kiinnitetyt viestit
hcaptcha: hCaptcha-tunnistus
antennaSource: Antennin lähde
invitationCode: Kutsukoodi
checking: Tarkistetaan...
passwordNotMatched: Ei vastaa
doing: Käsittelee...
category: Kategoria
tags: Tagit
disableAnimatedMfm: Poista MFM -animaatiot käytöstä
openImageInNewTab: Avaa kuvat uuteen välilehteen
dashboard: Kojelauta
local: Paikallinen
remote: Etä
total: Yhteensä
weekOverWeekChanges: Muutokset viime viikkoon
objectStorageRegion: Alue
popout: Ulosvedettävä
volume: Äänenvoimakkuus
masterVolume: Master äänenvoimakkuus
details: Yksityiskohdat
chooseEmoji: Valitse emoji
descendingOrder: Laskevasti
scratchpad: Raaputusalusta
output: Ulostulo
invisibleNote: Näkymätön viesti
enableInfiniteScroll: Lataa enemmän automaattisesti
visibility: Näkyvyys
useCw: Piilota sisältö
poll: Kysely
enablePlayer: Avaa videotoistimeen
enterFileDescription: Syötä tiedostokuvaus
author: Kirjoittaja
manage: Hallinta
description: Kuvaus
describeFile: Lisää tiedostokuvaus
height: Korkeus
large: Suuri
medium: Keskikokoinen
small: Pieni
other: Muu
create: Luo
regenerateLoginTokenDescription: Luo uudelleen kirjautumisen aikana sisäisesti käytettävän
tunnuksen. Normaalisti tämä toiminto ei ole tarpeen. Jos tunniste luodaan uudelleen,
kaikki laitteet kirjautuvat ulos.
setMultipleBySeparatingWithSpace: Erottele useat merkinnät välilyönneillä.
fileIdOrUrl: Tiedosto ID tai URL-linkki
behavior: Käytös
instanceTicker: Viestejä koskevat instanssitiedot
waitingFor: Odottaa {x}
random: Satunnainen
system: Järjestelmä
switchUi: Ulkoasu
createNew: Luo uusi
followersCount: Seuraajien määrä
renotedCount: Saatujen buustausten määrä
followingCount: Seurattujen tilien määrä
notSet: Ei asetettu
nUsers: '{n} Käyttäjää'
nNotes: '{n} Viestiä'
sendErrorReports: Lähetä virheraportteja
backgroundColor: Taustaväri
accentColor: Korostusväri
textColor: Tekstin väri
advanced: Edistynyt
saveAs: Tallenna nimellä...
invalidValue: Epäkelpo arvo.
registry: Rekisteri
closeAccount: Sulje tili
currentVersion: Nykyinen versio
capacity: Kapasiteetti
clear: Palaa
_theme:
explore: Tutustu teemoihin
silenceConfirm: Oletko varma, että haluat hiljentää tämän käyttäjän?
notesAndReplies: Viestit ja vastaukset
withFiles: Tiedostot sisältyvät
silence: Hiljennä
popularTags: Suositut tagit
userList: Listat
about: Tietoja
aboutMisskey: Tietoja Calckeystä
exploreFediverse: Tutustu fediverseen
recentlyUpdatedUsers: Vastikään lisätyt käyttäjät
recentlyRegisteredUsers: Uudet liittyneet jäyttäjät
recentlyDiscoveredUsers: Vastikään löydetyt käyttäjät
exploreUsersCount: Täällä on {count} käyttäjää
share: Jaa
moderation: Sisällön valvonta
nUsersMentioned: Mainittu {n} käyttäjältä
securityKey: Turva-avain
securityKeyName: Avainnimi
registerSecurityKey: Rekisteröi turva-avain
lastUsed: Viimeksi käytetty
unregister: Poista rekisteröinti
passwordLessLogin: Salasanaton sisäänkirjautuminen
cacheClear: Tyhjennä välimuisti
markAsReadAllNotifications: Merkitse kaikki ilmoitukset luetuksi
markAsReadAllUnreadNotes: Merkitse kaikki viestit luetuiksi
uploadFolder: Oletuskansio ylöslatauksille
createGroup: Luo ryhmä
group: Ryhmä
groups: Ryhmät
ownedGroups: Omistetut ryhmät
help: Apua
inputMessageHere: Syötä viesti tähän
close: Sulje
joinedGroups: Liittyneet ryhmät
invites: Kutsut
groupName: Ryhmänimi
members: Jäsenet
language: Kieli
signinHistory: Kirjautumishistoria
docSource: Tämän dokumentin lähde
createAccount: Luo tili
existingAccount: Olemassa oleva tili
promotion: Edistetty
promote: Edistää
numberOfDays: Päivien määrä
accountSettings: Tilin asetukset
objectStorage: Objektitallennus
useObjectStorage: Käytä objektitallennusta
objectStorageBaseUrl: Perus URL-linkki
objectStorageBaseUrlDesc: "Viitteenä käytetty URL-linkki. Määritä CDN:n tai välityspalvelimen\
\ URL-linkki, jos käytät kumpaakin.\nKäytä S3:lle 'https://<bucket>.s3.amazonaws.com'\
\ ja GCS:lle tai vastaaville palveluille 'https://storage.googleapis.com/<bucket>'\
\ jne."
objectStorageBucket: Kauha
newNoteRecived: Uusia viestejä
smtpPort: Portti
instanceMute: Instanssin mykistys
repliesCount: Lähetettyjen vastausten määrä
updatedAt: Päivitetty
notFound: Ei löydy
useOsNativeEmojis: Käytä käyttöjärjestelmän natiivi-Emojia
joinOrCreateGroup: Tule kutsutuksi ryhmään tai luo oma ryhmä.
text: Teksti
usernameInvalidFormat: Käytä isoja ja pieniä kirjaimia, numeroita ja erikoismerkkejä.
unsilenceConfirm: Oletko varma, että haluat poistaa käyttäjän hiljennyksen?
popularUsers: Suositut käyttäjät
moderator: Moderaattori
twoStepAuthentication: Kaksivaiheinen tunnistus
notFoundDescription: URL-linkkiin liittyvää sivua ei löytynyt.
antennaKeywords: Kuunneltavat avainsanat
antennaExcludeKeywords: Poislasketut avainsanat
antennaKeywordsDescription: Erottele välilyönneillä AND-ehtoa varten tai rivinvaihdolla
OR-ehtoa varten.
notifyAntenna: Ilmoita uusista viesteistä
withFileAntenna: Vain viestit tiedoston kanssa
enableServiceworker: Ota käyttöön Push-notifikaatiot selaimessasi
antennaUsersDescription: Luettele yksi käyttäjänimi rivi kohti
antennaInstancesDescription: Luettele yksi instanssi riviä kohti
caseSensitive: Isot ja pienet kirjaimet
withReplies: Sisällytä vastaukset
connectedTo: Seuraavat tili(t) on yhdistetty
unsilence: Poista hiljennys
administrator: Järjestelmänvalvoja
token: Merkki
resetPassword: Resetoi salasana
reduceUiAnimation: Vähennä käyttöliittymän animaatioita
transfer: Siirrä
messagingWithUser: Yksityisjuttelu
title: Otsikko
enable: Ota käyttöön
next: Seuraava
retype: Syötä uudelleen
noteOf: Lähettänyt {user}
inviteToGroup: Kutsu ryhmään
quoteAttached: Lainaus
quoteQuestion: Liitä lainauksena?
noMessagesYet: Ei vielä viestejä
newMessageExists: Uusia viestejä
onlyOneFileCanBeAttached: Voit liittää vain yhden tiedoston viestiin
signinRequired: Ole hyvä ja rekisteröidy tai kirjaudu sisään jatkaaksesi
invitations: Kutsut
available: Saatavilla
unavailable: Ei saatavissa
tooShort: Liian lyhyt
tooLong: Liian pitkä
weakPassword: Heikko salasana
normalPassword: Kohtalainen salasana
strongPassword: Vahva salasana
passwordMatched: Vastaa
signinWith: Kirjaudu sisään {x}
signinFailed: Ei voitu kirjautua sisään. Annettu käyttäjänimi tai salasana virheellinen.
tapSecurityKey: Napsauta turva-avaintasi
or: Tai
uiLanguage: Anna käyttöliittymän kieli
groupInvited: Sinut on kutsuttu ryhmään
aboutX: Tietoja {x}
disableDrawer: Älä käytä laatikkotyyppisiä valikoita
youHaveNoGroups: Sinulla ei ole ryhmiä
noHistory: Ei historiaa saatavilla
regenerate: Uudelleenluo
fontSize: Kirjasinkoko
dayOverDayChanges: Muutokset eiliseen
clientSettings: Asiakkaan asetukset
hideThisNote: Piilota tämä viesti
showFeaturedNotesInTimeline: Näytä esillä olevat viestit aikajanalla
objectStorageBucketDesc: Määritä palveluntarjoajasi käyttämä kauhan nimi.
objectStoragePrefix: Etuliite
objectStorageEndpoint: Päätepiste
objectStorageRegionDesc: Määritä alue, kuten "xx-east-1". Jos palvelusi ei tee eroa
alueiden välillä, jätä tämä kohta tyhjäksi tai kirjoita "us-east-1".
objectStorageUseSSL: Käytä SSL-salausta
objectStorageUseSSLDesc: Poista tämä käytöstä, jos et aio käyttää HTTPS:ää API-yhteyksissä
objectStorageUseProxy: Yhdistä välityspalvelimen kautta
objectStorageUseProxyDesc: Poista tämä käytöstä, jos et aio käyttää välityspalvelinta
API-yhteyksiä varten
objectStorageSetPublicRead: Aseta "public-read" ylöslataukseen
serverLogs: Palvelimen lokit
deleteAll: Poista kaikki
showFixedPostForm: Näytä viesti-ikkuna aikajanan yläpuolella
sounds: Äänet
listen: Kuuntele
none: Ei mitään
showInPage: Näytä sivulla
recentUsed: Vastikään käytetty
install: Asenna
uninstall: Poista asennus
installedApps: Hyväksytyt sovellukset
nothing: Ei nähtävää täällä
state: Tila
sort: Järjestä
ascendingOrder: Nousevasti
scratchpadDescription: Raaputusalusta tarjoaa ympäristön AiScript-kokeiluja varten.
Voit kirjoittaa, suorittaa ja tarkistaa sen tulokset vuorovaikutuksessa siinä olevan
Calckeyn kanssa.
script: Skripti
disablePagesScript: Poista AiScript käytöstä sivuilla
updateRemoteUser: Päivitä etäkäyttäjän tiedot
deleteAllFiles: Poista kaikki tiedostot
deleteAllFilesConfirm: Oletko varma, että haluat poistaa kaikki tiedostot?
removeAllFollowing: Poista seuraaminen kaikista seuratuista käyttäjistä
removeAllFollowingDescription: Tämän suorittaminen poistaa kaikki {host}:n tilit.
Suorita tämä, jos instanssia ei esimerkiksi enää ole olemassa.
userSuspended: Tämä käyttäjä on hyllytetty.
userSilenced: Tämä käyttäjä on hiljennetty.
yourAccountSuspendedTitle: Tämä tili on hyllytetty
yourAccountSuspendedDescription: Tämä tili on hyllytetty palvelimen palveluehtojen
tai vastaavien rikkomisen vuoksi. Ota yhteyttä ylläpitäjään, jos haluat tietää tarkemman
syyn. Älä luo uutta tiliä.
menu: Valikko
divider: Jakaja
addItem: Lisää kohde
relays: Releet
addRelay: Lisää rele
inboxUrl: Saavuneen postin URL
addedRelays: Lisätyt releet
serviceworkerInfo: Pitää ottaa käyttöön Push-notifikaatioissa.
deletedNote: Poistetut viestit
disablePlayer: Sulje videotoistin
expandTweet: Laajenna twiittiä
themeEditor: Teemaeditori
leaveConfirm: Tallentamattomia muutoksia olemassa. Hylätäänkö ne?
plugins: Liitännäiset
preferencesBackups: Asetusten varmuuskopiot
deck: Kansi
undeck: Jätä kansi
useBlurEffectForModal: Käytä blur-efektiä modaaleissa
useFullReactionPicker: Käytä täysikokoista reaktiovalitsinta
width: Leveys
generateAccessToken: Luo käyttöoikeustunniste
enableAll: Ota käyttöön kaikki
disableAll: Poista käytöstä kaikki
tokenRequested: Myönnä oikeus tiliin
notificationType: Ilmoituksen tyyppi
edit: Muokkaa
emailServer: Sähköpostipalvelin
enableEmail: Ota sähköpostin jakelu käyttöön
emailConfigInfo: Käytetään vahvistamaan sähköpostiosoitteesi rekisteröitymisen yhteydessä
tai jos unohdat salasanasi
email: Sähköposti
smtpHost: Isäntä
smtpUser: Käyttäjänimi
smtpPass: Salasana
emptyToDisableSmtpAuth: Jätä käyttäjänimi ja salasana tyhjäksi ohittaaksesi SMTP verifioinnin
smtpSecureInfo: Kytke tämä päältä kun käytät STARTTLS
testEmail: Kokeile email-lähetystä
wordMute: Sanan hiljennys
regexpError: Säännöllinen lausekevirhe
userSaysSomething: '{name} sanoi jotakin'
userSaysSomethingReason: '{name} sanoi {reason}'
makeActive: Aktivoi
display: Näyttö
copy: Kopioi
metrics: Mittarit
overview: Yleiskatsaus
logs: Lokit
delayed: Viivästynyt
database: Tietokanta
channel: Kanavat
notificationSetting: Ilmoitusasetukset
notificationSettingDesc: Valitse näytettävät ilmoitustyypit.
useGlobalSetting: Käytä globaaleja asetuksia
regenerateLoginToken: Luo kirjautumistunniste uudelleen
sample: Näyte
abuseReports: Raportit
reportAbuse: Raportti
reportAbuseOf: Raportti {name}
fillAbuseReportDescription: Täytä tätä raporttia koskevat tiedot. Jos se koskee tiettyä
viestiä, ilmoita sen URL-linkki.
abuseReported: Raporttisi on lähetetty. Kiitoksia paljon.
reporter: Raportoija
reporteeOrigin: Ilmoittajan alkuperä
reporterOrigin: Raportoijan alkuperä
forwardReport: Välitä raportti etäinstanssille
forwardReportIsAnonymous: Tilisi sijasta anonyymi järjestelmätili näytetään toimittajana
etäinstanssissa.
send: Lähetä
abuseMarkAsResolved: Merkitse raportti ratkaistuksi
openInNewTab: Avaa uuteen välilehteen
openInSideView: Avaa sivunäkymään
defaultNavigationBehaviour: Navigoinnin oletuskäyttäytyminen
editTheseSettingsMayBreakAccount: Näiden asetusten muuttaminen voi vahingoittaa tiliäsi.
desktop: Työpöytä
clip: Leike
optional: Vaihtoehtoinen
createNewClip: Luo uusi leike
unclip: Poista leike
confirmToUnclipAlreadyClippedNote: Tämä viesti on jo osa "{name}"-leikettä. Haluatko
sen sijaan poistaa sen tästä leikkeestä?
manageAccessTokens: Hallitse käyttöoikeuskoodeja
accountInfo: Tilin tiedot
notesCount: Viestien määrä
renotesCount: Lähetettyjen buustausten määrä
repliedCount: Saatujen vastausten määrä
sentReactionsCount: Lähetettyjen reaktioiden määrä
receivedReactionsCount: Saatujen reaktioiden määrä
pollVotesCount: Lähetettyjen kyselyäänien määrä
pollVotedCount: Saatujen kyselyäänien määrä
yes: Kyllä
no: Ei
driveFilesCount: Tiedostojen määrä asemalla
driveUsage: Aseman tilankäyttö
noCrawle: Hylkää hakukoneindeksointi
noCrawleDescription: Pyydä hakukoneita olemaan indeksoimatta profiilisivuasi, viestejäsi,
sivujasi jne.
alwaysMarkSensitive: Merkitse oletusarvoisesti herkäksi sisällöksi (NSFW)
loadRawImages: Alkuperäisten kuvien lataaminen pikkukuvien näyttämisen sijaan
disableShowingAnimatedImages: Älä näytä animoituja kuvia
verificationEmailSent: Vahvistussähköposti on lähetetty. Seuraa mukana olevaa linkkiä
suorittaaksesi vahvistuksen loppuun.
emailVerified: Sähköposti on vahvistettu
noteFavoritesCount: Kirjanmerkittyjen viestien määrä
pageLikedCount: Saatujen Sivu-tykkäysten määrä
pageLikesCount: Sivut-tykkäysten määrä
contact: Yhteystieto
useSystemFont: Käytä järjestelmän oletuskirjasinta
clips: Leikkeet
experimentalFeatures: Kokeiluluontoiset ominaisuudet
developer: Kehittäjä
makeExplorable: Tee tili näkyväksi osiossa "Tutustu"
makeExplorableDescription: Jos otat tämän pois käytöstä, tilisi ei näy "Tutustu"-osiossa.
showGapBetweenNotesInTimeline: Näytä väli viestien välissä aikajanalla
duplicate: Monista
left: Vasen
center: Keskellä
wide: Leveä
narrow: Kapea
reloadToApplySetting: Asetus otetaan käyttöön vain uudelleenladattaessa. Ladataanko
uudelleen nyt?
showTitlebar: Näytä otsikkorivi
clearCache: Tyhjennä välimuisti
onlineUsersCount: '{n} käyttäjää online-tilassa'
myTheme: Minun teemani
value: Arvo
saveConfirm: Tallenna muutokset?
deleteConfirm: Poistetaanko tosiaan?
latestVersion: Uusin versio
newVersionOfClientAvailable: Asiakasohjelmiston uudempi versio saatavilla.
usageAmount: Käyttö
inUse: Käytetty
editCode: Muokkaa koodia
apply: Käytä
receiveAnnouncementFromInstance: Vastaanota ilmoituksia tästä instanssista
emailNotification: Sähköposti-ilmoitukset
publish: Julkaise
inChannelSearch: Etsi kanavalta
useReactionPickerForContextMenu: Avaa reaktiovalitsin napsauttamalla oikeaa
typingUsers: '{users} kirjoittaa'
jumpToSpecifiedDate: Hyppää tiettyyn päivään
markAllAsRead: Merkitse kaikki luetuksi
goBack: Takaisin
unlikeConfirm: Poistatko todella tykkäyksesi?
fullView: Täysi koko
quitFullView: Poistu täydestä koosta
addDescription: Lisää kuvaus
markAsReadAllTalkMessages: Merkitse kaikki yksityisviestit luetuiksi
appearance: Ulkonäkö
messagingWithGroup: Ryhmäjuttelu
newPasswordIs: Uusi salasana on "{password}"
noFollowRequests: Sinulla ei ole odottavia seuraajapyyntöjä
objectStoragePrefixDesc: Tiedostot tallennetaan hakemistoihin tällä etuliitteellä.
objectStorageEndpointDesc: Jätä tämä tyhjäksi, jos käytät AWS S3:a. Muuten määritä
päätepisteeksi '<host>' tai '<host>:<port>' käyttämästäsi palvelusta riippuen.
unableToProcess: Toimenpidettä ei voida suorittaa loppuun
installedDate: Hyväksynyt
lastUsedDate: Viimeksi käytetty
pluginTokenRequestedDescription: Tämä litännäinen voi käyttää tässä asetettuja käyttöoikeuksia.
permission: Oikeudet
smtpConfig: Lähtevän sähköpostin palvelimen (SMTP) asetukset
regexpErrorDescription: 'Säännöllisessä lausekkeessa tapahtui virhe rivillä {line}
sanan {tab} sanan mykistäminen rivillä {line}:'
emailAddress: Sähköpostiosoite
smtpSecure: Käytä implisiittistä SSL/TLS:ää SMTP-yhteyksissä
useGlobalSettingDesc: Jos se on päällä, käytetään tilisi ilmoitusasetuksia. Jos se
on pois päältä, voit tehdä yksilöllisiä asetuksia.
public: Julkinen
i18nInfo: Vapaaehtoiset kääntävät Calckeyta eri kielille. Voit auttaa osoitteessa
{link}.
lockedAccountInfo: Ellet aseta postauksen näkyvyydeksi "Vain seuraajille", postauksesi
näkyvät kaikille, vaikka vaatisitkin seuraajilta manuaalista hyväksyntää.
sendErrorReportsDescription: "Kun tämä on päällä, yksityiskohtaiset virhetiedot jaetaan\
\ Calckeyn kanssa ongelman ilmetessä, mikä auttaa parantamaan Calckeyn laatua.\n\
Näihin tietoihin sisältyy esimerkiksi käyttöjärjestelmäversio, käyttämäsi selain,\
\ toimintasi Calckeyssä jne."
createdAt: Luotu
youAreRunningUpToDateClient: Käytössäsi on asiakasohjelman uusin versio.
needReloadToApply: Uudelleenlataus vaaditaan, jotta tämä näkyy.
showingPastTimeline: Näytetään parhaillaan vanhaa aikajanaa
userPagePinTip: Voit näyttää viestit täällä valitsemalla yksittäisten viestien valikosta
"Kiinnitä profiiliin".
notSpecifiedMentionWarning: Tämä viesti sisältää mainintoja käyttäjistä, joita ei
ole mainittu vastaanottajina
name: Nimi
allowedInstances: Sallitut (whitelisted) instanssit
hashtags: Aihetunnisteet
troubleshooting: Vianetsintä
received: Vastaanotettu
searchResult: Hakutulokset
filter: Suodatin
antennas: Antennit
noMaintainerInformationWarning: Ylläpitäjän tietoja ei ole konfiguroitu.
controlPanel: Hallintapaneeli
manageAccounts: Hallitse tilejä
makeReactionsPublic: Aseta reaktiohistoria julkiseksi
unread: Lukematon
deleted: Poistettu
editNote: Muokkaa viestiä
edited: Muokattu
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?
Jos haluat, että ne pysyvät käytössä, paina peruutusnäppäintä.
manageAntennas: Hallitse antenneja
info: Tietoja
userInfo: Käyttäjätiedot
unknown: Tuntematon
onlineStatus: Online-tila
hideOnlineStatus: Piilota Online-tila
hideOnlineStatusDescription: Online-tilasi piilottaminen vähentää joidenkin toimintojen,
kuten haun, käyttömukavuutta.
online: Online
active: Aktiivinen
offline: Offline
botProtection: Botti-suojaus
instanceBlocking: Federaatio Esto/Hiljennys
enabled: Otettu käyttöön
quickAction: Pikatoiminnot
user: Käyttäjä
accounts: Tilit
switch: Vaihda
noBotProtectionWarning: Botti-suojausta ei ole konfiguroitu.
configure: Konfiguroi
postToGallery: Luo uusi galleriaviesti
gallery: Galleria
recentPosts: Viimeaikaiset sivut
popularPosts: Suositut sivut
ads: Mainokset
expiration: Aikaraja
memo: Muistio
priority: Prioriteetti
high: Korkea
middle: Keskitaso
low: Alhainen
emailNotConfiguredWarning: Sähköpostiosoitetta ei ole asetettu.
ratio: Suhde
secureMode: Suojattu moodi (Valtuutettu nouto)
instanceSecurity: Instanssiturvallisuus
allowedInstancesDescription: Federaatiota varten sallitulle listalle (whitelisted)
otettavien instanssien isännät, kukin erotettuna uudella rivillä (sovelletaan vain
yksityisessä tilassa).
previewNoteText: Näytä esikatselu
customCss: Kustomoitu CSS
customCssWarn: Tätä asetusta tulisi käyttää vain, jos tiedät, mitä se tekee. Vääränlaisten
arvojen syöttäminen voi aiheuttaa sen, että asiakasohjelma lakkaa toimimasta normaalisti.
recommended: Suositeltu
squareAvatars: Näytä neliön malliset kuvakkeet
seperateRenoteQuote: Erilliset buustaa ja lainaa -napit
sent: Lähetetty
useBlurEffect: Käytä blur-efektejä käyttöliittymässä
misskeyUpdated: Calckey on päivitetty!
whatIsNew: Näytä muutokset
translate: Käännä
translatedFrom: Käännetty kielestä {x}
accountDeletionInProgress: Tilin poistaminen on parhaillaan menossa
usernameInfo: Nimi, joka erottaa tilisi muista tällä palvelimella olevista tileistä. Voit
käyttää aakkosia (a~z, A~Z), numeroita (0~9) tai alaviivoja (_). Käyttäjätunnuksia
ei voi muuttaa myöhemmin.
aiChanMode: Ai-chan klassisessa käyttöliittymässä
keepCw: Pidä sisältövaroitukset
pubSub: Pub/Sub tilit
lastCommunication: Viimeisin kommunikaatio
unresolved: Ratkaisematon
breakFollow: Poista seuraaja
breakFollowConfirm: Oletko varma, että haluat poistaa seuraajan?
itsOn: Otettu käyttöön
itsOff: Poistettu käytöstä
emailRequiredForSignup: Vaadi sähköpostiosoitetta sisäänkirjautumiseen
makeReactionsPublicDescription: Tämä laittaa viimeisimmät reaktiosi julkisesti näkyväksi.
classic: Klassinen
muteThread: Mykistä lanka
unmuteThread: Poista langan mykistys
ffVisibility: Seurataan/Seurattavien näkyvyys
notRecommended: Ei suositeltu
disabled: Poistettu käytöstä
selectAccount: Valitse tili
switchAccount: Vaihda tili
administration: Hallinta
shareWithNote: Jaa viestin kanssa
secureModeInfo: Kun pyydät muista instansseista, älä lähetä takaisin ilman todisteita.
privateMode: Yksityinen moodi
privateModeInfo: Kun tämä on käytössä, vain sallittujen (whitelisted) luetteloon merkityt
instanssit voivat liittyä instansseihisi. Kaikki viestit piilotetaan yleisöltä.
global: Globaali
resolved: Ratkaistu
learnMore: Opi lisää
continueThread: Jatka lankaa
file: Tiedosto
cropImageAsk: Haluatko rajata tätä kuvaa?
recentNHours: Viimeiset {n} tuntia
rateLimitExceeded: Nopeusraja ylittynyt
cropImage: Rajaa kuvaa
socialTimeline: Sosiaalinen aikajana
themeColor: Instanssi Ticker Väri
check: Tarkista
ffVisibilityDescription: Antaa sinun konfiguroida, kuka voi nähdä ketä seuraat ja
kuka seuraa sinua.
homeTimeline: Koti aikajana
size: Koko
showLocalPosts: 'Näytä paikalliset viestit:'
oneDay: Päivä
instanceDefaultDarkTheme: Instanssikattava tumma oletusteema
recentNDays: Viimeiset {n} päivää
reflectMayTakeTime: Voi kestää jonkin aikaa, ennen kuin tämä näkyy.
failedToFetchAccountInformation: Ei voitu hakea tietoja
requireAdminForView: Sinun tulee kirjautua järjestelmänvalvojana nähdäksesi tämän.
driveCapOverrideCaption: Resetoi oletusarvoon syöttämällä arvo 0 tai alempi.
isSystemAccount: Järjestelmän luoma ja automaattisesti käyttämä tili.
userSaysSomethingReasonReply: '{name} vastasi viestiin sisältäen {reason}'
userSaysSomethingReasonRenote: '{name} buustasi viestiin sisältäen {reason}'
voteConfirm: Vahvista äänesi vaihtoehdolle "{choice}"?
hide: Piilota
leaveGroup: Poistu ryhmästä
leaveGroupConfirm: Oletko varma, että haluat poistua ryhmästä "{name}"?
welcomeBackWithName: Tervetuloa takaisin, {name}
clickToFinishEmailVerification: Klikkaa [{ok}] viimeistelläksesi sähköpostivahvistuksen.
overridedDeviceKind: Laitetyyppi
tablet: Tabletti
numberOfColumn: Sarakkeiden määrä
searchByGoogle: Etsi
mutePeriod: Vaiennuksen kesto
indefinitely: Pysyvästi
tenMinutes: 10 minuuttia
oneHour: Tunti
thereIsUnresolvedAbuseReportWarning: On ratkaisemattomia raportteja.
driveCapOverrideLabel: Muuta aseman kapasiteetti tälle käyttäjälle
userSaysSomethingReasonQuote: '{name} lainasi viestiä sisältäen {reason}'
deleteAccountConfirm: Tämä peruuttamattomasti poistaa tilisi. Jatketaanko?
incorrectPassword: Väärä salasana.
useDrawerReactionPickerForMobile: Näytä reaktiovalitsin mobiilissa laatikkomallisena
smartphone: Älypuhelin
auto: Automaattinen
oneWeek: Viikko
instanceDefaultLightTheme: Instanssin kattava vaalea oletusteema
instanceDefaultThemeDescription: Anna teemakoodi objektiformaatille.
noEmailServerWarning: Sähköpostipalvelinta ei konfiguroituna.

View file

@ -1,6 +1,6 @@
_lang_: "Français" _lang_: "Français"
headlineMisskey: "Réseau relié par des notes" headlineMisskey: "Réseau relié par des notes"
introMisskey: "Bienvenue ! Misskey est un service de microblogage décentralisé, libre\ introMisskey: "Bienvenue ! Calckey est un service de microblogage décentralisé, libre\
\ et ouvert.\nÉcrivez des « notes » et partagez ce qui se passe à linstant présent,\ \ et ouvert.\nÉcrivez des « notes » et partagez ce qui se passe à linstant présent,\
\ autour de vous avec les autres \U0001F4E1\nLa fonction « réactions », vous permet\ \ autour de vous avec les autres \U0001F4E1\nLa fonction « réactions », vous permet\
\ également dajouter une réaction rapide aux notes des autres utilisateur·rice·s\ \ également dajouter une réaction rapide aux notes des autres utilisateur·rice·s\
@ -70,7 +70,7 @@ export: "Exporter"
files: "Fichiers" files: "Fichiers"
download: "Télécharger" download: "Télécharger"
driveFileDeleteConfirm: "Êtes-vous sûr·e de vouloir supprimer le fichier \"{name}\"\ driveFileDeleteConfirm: "Êtes-vous sûr·e de vouloir supprimer le fichier \"{name}\"\
\ ? Les notes liées à ce fichier seront aussi supprimées." \ ? Il sera retiré de toutes ses notes liées."
unfollowConfirm: "Désirez-vous vous désabonner de {name} ?" unfollowConfirm: "Désirez-vous vous désabonner de {name} ?"
exportRequested: "Vous avez demandé une exportation. Lopération pourrait prendre\ exportRequested: "Vous avez demandé une exportation. Lopération pourrait prendre\
\ un peu de temps. Une terminée, le fichier résultant sera ajouté au Drive." \ un peu de temps. Une terminée, le fichier résultant sera ajouté au Drive."
@ -87,7 +87,7 @@ manageLists: "Gérer les listes"
error: "Erreur" error: "Erreur"
somethingHappened: "Une erreur est survenue" somethingHappened: "Une erreur est survenue"
retry: "Réessayer" retry: "Réessayer"
pageLoadError: "Le chargement de la page a échoué" pageLoadError: "Le chargement de la page a échoué."
pageLoadErrorDescription: "Cela est généralement causé par le cache du navigateur\ pageLoadErrorDescription: "Cela est généralement causé par le cache du navigateur\
\ ou par un problème réseau. Veuillez vider votre cache ou attendre un peu et réessayer." \ ou par un problème réseau. Veuillez vider votre cache ou attendre un peu et réessayer."
serverIsDead: "Le serveur ne répond pas. Patientez quelques instants puis essayez\ serverIsDead: "Le serveur ne répond pas. Patientez quelques instants puis essayez\
@ -106,7 +106,7 @@ followRequestPending: "Demande d'abonnement en attente de confirmation"
enterEmoji: "Insérer un émoji" enterEmoji: "Insérer un émoji"
renote: "Renoter" renote: "Renoter"
unrenote: "Annuler la Renote" unrenote: "Annuler la Renote"
renoted: "Renoté !" renoted: "Renoté."
cantRenote: "Ce message ne peut pas être renoté." cantRenote: "Ce message ne peut pas être renoté."
cantReRenote: "Impossible de renoter une Renote." cantReRenote: "Impossible de renoter une Renote."
quote: "Citer" quote: "Citer"
@ -158,7 +158,7 @@ flagAsBot: "Ce compte est un robot"
flagAsBotDescription: "Si ce compte est géré de manière automatisée, choisissez cette\ flagAsBotDescription: "Si ce compte est géré de manière automatisée, choisissez cette\
\ option. Si elle est activée, elle agira comme un marqueur pour les autres développeurs\ \ option. Si elle est activée, elle agira comme un marqueur pour les autres développeurs\
\ afin d'éviter des chaînes d'interaction sans fin avec d'autres robots et d'ajuster\ \ afin d'éviter des chaînes d'interaction sans fin avec d'autres robots et d'ajuster\
\ les systèmes internes de Misskey pour traiter ce compte comme un robot." \ les systèmes internes de Calckey pour traiter ce compte comme un robot."
flagAsCat: "Ce compte est un chat" flagAsCat: "Ce compte est un chat"
flagAsCatDescription: "Activer l'option \" Je suis un chat \" pour ce compte." flagAsCatDescription: "Activer l'option \" Je suis un chat \" pour ce compte."
flagShowTimelineReplies: "Afficher les réponses dans le fil" flagShowTimelineReplies: "Afficher les réponses dans le fil"
@ -201,7 +201,6 @@ operations: "Opérations"
software: "Logiciel" software: "Logiciel"
version: "Version" version: "Version"
metadata: "Métadonnées" metadata: "Métadonnées"
withNFiles: "{n} fichier(s)"
monitor: "Contrôle" monitor: "Contrôle"
jobQueue: "File dattente" jobQueue: "File dattente"
cpuAndMemory: "Processeur et mémoire" cpuAndMemory: "Processeur et mémoire"
@ -226,7 +225,7 @@ noUsers: "Il ny a pas dutilisateur·rice·s"
editProfile: "Modifier votre profil" editProfile: "Modifier votre profil"
noteDeleteConfirm: "Êtes-vous sûr·e de vouloir supprimer cette note ?" noteDeleteConfirm: "Êtes-vous sûr·e de vouloir supprimer cette note ?"
pinLimitExceeded: "Vous ne pouvez plus épingler dautres notes." pinLimitExceeded: "Vous ne pouvez plus épingler dautres notes."
intro: "Linstallation de Misskey est terminée ! Veuillez créer un compte administrateur." intro: "Linstallation de Calckey est terminée ! Veuillez créer un compte administrateur."
done: "Terminé" done: "Terminé"
processing: "Traitement en cours" processing: "Traitement en cours"
preview: "Aperçu" preview: "Aperçu"
@ -414,7 +413,7 @@ exploreFediverse: "Explorer le Fediverse"
popularTags: "Mots-clés populaires" popularTags: "Mots-clés populaires"
userList: "Listes" userList: "Listes"
about: "Informations" about: "Informations"
aboutMisskey: "À propos de Misskey" aboutMisskey: "À propos de Calckey"
administrator: "Administrateur" administrator: "Administrateur"
token: "Jeton" token: "Jeton"
twoStepAuthentication: "Authentification à deux facteurs" twoStepAuthentication: "Authentification à deux facteurs"
@ -573,7 +572,7 @@ descendingOrder: "Descendant"
scratchpad: "ScratchPad" scratchpad: "ScratchPad"
scratchpadDescription: "ScratchPad fournit un environnement expérimental pour AiScript.\ scratchpadDescription: "ScratchPad fournit un environnement expérimental pour AiScript.\
\ Vous pouvez vérifier la rédaction de votre code, sa bonne exécution et le résultat\ \ Vous pouvez vérifier la rédaction de votre code, sa bonne exécution et le résultat\
\ de son interaction avec Misskey." \ de son interaction avec Calckey."
output: "Sortie" output: "Sortie"
script: "Script" script: "Script"
disablePagesScript: "Désactiver AiScript sur les Pages" disablePagesScript: "Désactiver AiScript sur les Pages"
@ -767,7 +766,7 @@ nUsers: "{n} utilisateur·rice·s"
nNotes: "{n} Notes" nNotes: "{n} Notes"
sendErrorReports: "Envoyer les rapports derreur" sendErrorReports: "Envoyer les rapports derreur"
sendErrorReportsDescription: "Si vous activez l'envoi des rapports d'erreur, vous\ sendErrorReportsDescription: "Si vous activez l'envoi des rapports d'erreur, vous\
\ contribuerez à améliorer la qualité de Misskey grâce au partage d'informations\ \ contribuerez à améliorer la qualité de Calckey grâce au partage d'informations\
\ détaillées sur les erreurs lorsqu'un problème survient.\nCela inclut des informations\ \ détaillées sur les erreurs lorsqu'un problème survient.\nCela inclut des informations\
\ telles que la version de votre système d'exploitation, le type de navigateur que\ \ telles que la version de votre système d'exploitation, le type de navigateur que\
\ vous utilisez, votre historique d'activité, etc." \ vous utilisez, votre historique d'activité, etc."
@ -825,7 +824,7 @@ active: "Actif·ve"
offline: "Hors ligne" offline: "Hors ligne"
notRecommended: "Déconseillé" notRecommended: "Déconseillé"
botProtection: "Protection contre les bots" botProtection: "Protection contre les bots"
instanceBlocking: "Instances bloquées" instanceBlocking: "Instances bloquées/mise en sourdine"
selectAccount: "Sélectionner un compte" selectAccount: "Sélectionner un compte"
switchAccount: "Changer de compte" switchAccount: "Changer de compte"
enabled: "Activé" enabled: "Activé"
@ -866,7 +865,7 @@ hashtags: "Hashtags"
troubleshooting: "Résolution de problèmes" troubleshooting: "Résolution de problèmes"
useBlurEffect: "Utiliser des effets de flou dans l'interface" useBlurEffect: "Utiliser des effets de flou dans l'interface"
learnMore: "Plus d'informations" learnMore: "Plus d'informations"
misskeyUpdated: "Misskey a été mis à jour !" misskeyUpdated: "Calckey a été mis à jour !"
whatIsNew: "Voir les derniers changements" whatIsNew: "Voir les derniers changements"
translate: "Traduire" translate: "Traduire"
translatedFrom: "Traduit depuis {x}" translatedFrom: "Traduit depuis {x}"
@ -999,8 +998,8 @@ _aboutMisskey:
contributors: "Principaux contributeurs" contributors: "Principaux contributeurs"
allContributors: "Tous les contributeurs" allContributors: "Tous les contributeurs"
source: "Code source" source: "Code source"
translation: "Traduire Misskey" translation: "Traduire Calckey"
donate: "Soutenir Misskey" donate: "Soutenir Calckey"
morePatrons: "Nous apprécions vraiment le soutien de nombreuses autres personnes\ morePatrons: "Nous apprécions vraiment le soutien de nombreuses autres personnes\
\ non mentionnées ici. Merci à toutes et à tous ! \U0001F970" \ non mentionnées ici. Merci à toutes et à tous ! \U0001F970"
patrons: "Contributeurs" patrons: "Contributeurs"
@ -1010,9 +1009,9 @@ _nsfw:
force: "Cacher tous les médias" force: "Cacher tous les médias"
_mfm: _mfm:
cheatSheet: "Antisèche MFM" cheatSheet: "Antisèche MFM"
intro: "MFM est un langage Markdown spécifique utilisable ici et là dans Misskey.\ intro: "MFM est un langage Markdown spécifique utilisable ici et là dans Calckey.\
\ Vous pouvez vérifier ici les structures utilisables avec MFM." \ Vous pouvez vérifier ici les structures utilisables avec MFM."
dummy: "La Fédiverse s'agrandit avec Misskey" dummy: "La Fédiverse s'agrandit avec Calckey"
mention: "Mentionner" mention: "Mentionner"
mentionDescription: "Vous pouvez afficher un utilisateur spécifique en indiquant\ mentionDescription: "Vous pouvez afficher un utilisateur spécifique en indiquant\
\ une arobase suivie d'un nom d'utilisateur" \ une arobase suivie d'un nom d'utilisateur"
@ -1077,9 +1076,12 @@ _mfm:
sparkle: "Paillettes" sparkle: "Paillettes"
sparkleDescription: "Ajoute un effet scintillant au contenu." sparkleDescription: "Ajoute un effet scintillant au contenu."
rotate: "Pivoter" rotate: "Pivoter"
fade: "Apparaître/Disparaître"
fadeDescription: "Fait apparaître et disparaître le contenu."
plainDescription: Désactiver les effets de tous les MFM contenus dans cet effet plainDescription: Désactiver les effets de tous les MFM contenus dans cet effet
MFM. MFM.
rotateDescription: Pivoter le contenu d'un angle spécifique. rotateDescription: Pivoter le contenu d'un angle spécifique.
position: Position
_instanceTicker: _instanceTicker:
none: "Cacher " none: "Cacher "
remote: "Montrer pour les utilisateur·ice·s distant·e·s" remote: "Montrer pour les utilisateur·ice·s distant·e·s"
@ -1099,6 +1101,7 @@ _channel:
following: "Abonné·e" following: "Abonné·e"
usersCount: "{n} Participant·e·s" usersCount: "{n} Participant·e·s"
notesCount: "{n} Notes" notesCount: "{n} Notes"
nameAndDescription: Nom et description
_menuDisplay: _menuDisplay:
sideFull: "Latéral" sideFull: "Latéral"
sideIcon: "Latéral (icônes)" sideIcon: "Latéral (icônes)"
@ -1243,10 +1246,10 @@ _tutorial:
\ de vos followers." \ de vos followers."
step5_4: "La timeline locale {icon} est l'endroit où vous pouvez voir les messages\ step5_4: "La timeline locale {icon} est l'endroit où vous pouvez voir les messages\
\ de tout le monde sur cette instance." \ de tout le monde sur cette instance."
step5_5: "La timeline {icon} recommandée est l'endroit où vous pouvez voir les messages\ step5_5: "La chronologie {icon} sociale est l'endroit où vous pouvez voir uniquement\
\ des instances que les administrateurs recommandent." \ les publications des comptes que vous suivez."
step5_6: "La timeline {icon} sociale est l'endroit où vous pouvez voir les publications\ step5_6: "La chronologie {icon} recommandée est l'endroit où vous pouvez voir les\
\ des amis de vos followers." \ publications des instances recommandées par les administrateurs."
step5_7: "La timeline globale {icon} est l'endroit où vous pouvez voir les messages\ step5_7: "La timeline globale {icon} est l'endroit où vous pouvez voir les messages\
\ de toutes les autres instances connectées." \ de toutes les autres instances connectées."
step6_1: "Alors quel est cet endroit ?" step6_1: "Alors quel est cet endroit ?"
@ -1349,6 +1352,10 @@ _widgets:
serverMetric: "Statistiques du serveur" serverMetric: "Statistiques du serveur"
aiscript: "Console AiScript" aiscript: "Console AiScript"
aichan: "Ai" aichan: "Ai"
userList: Liste d'utilisateurs
_userList:
chooseList: Sélectionner une liste
unixClock: Horloge UNIX
_cw: _cw:
hide: "Masquer" hide: "Masquer"
show: "Afficher plus …" show: "Afficher plus …"
@ -1411,6 +1418,8 @@ _profile:
metadataContent: "Contenu" metadataContent: "Contenu"
changeAvatar: "Changer l'image de profil" changeAvatar: "Changer l'image de profil"
changeBanner: "Changer de bannière" changeBanner: "Changer de bannière"
locationDescription: Si vous entrez votre ville en premier, votre heure locale sera
affiché aux autres utilisateurs.
_exportOrImport: _exportOrImport:
allNotes: "Toutes les notes" allNotes: "Toutes les notes"
followingList: "Abonnements" followingList: "Abonnements"
@ -1450,6 +1459,7 @@ _timelines:
local: "Local" local: "Local"
social: "Social" social: "Social"
global: "Global" global: "Global"
recommended: Recommandée
_pages: _pages:
newPage: "Créer une page" newPage: "Créer une page"
editPage: "Modifier une page" editPage: "Modifier une page"
@ -1775,6 +1785,7 @@ _notification:
followRequestAccepted: "Demande d'abonnement acceptée" followRequestAccepted: "Demande d'abonnement acceptée"
groupInvited: "Invitation à un groupe" groupInvited: "Invitation à un groupe"
app: "Notifications provenant des apps" app: "Notifications provenant des apps"
pollEnded: Fin du sondage
_actions: _actions:
followBack: "Suivre" followBack: "Suivre"
reply: "Répondre" reply: "Répondre"
@ -1799,6 +1810,10 @@ _deck:
list: "Listes" list: "Listes"
mentions: "Mentions" mentions: "Mentions"
direct: "Direct" direct: "Direct"
introduction: Créer l'interface parfaite pour vous en arrangeant les colonnes librement
!
introduction2: Cliquer sur le + sur la droite de l'écran pour ajouter de nouvelles
colonnes à tout moment.
keepOriginalUploadingDescription: Enregistrer l'image originale telle quelle. Si désactivé, keepOriginalUploadingDescription: Enregistrer l'image originale telle quelle. Si désactivé,
une version à afficher sur le web sera générée au chargement. une version à afficher sur le web sera générée au chargement.
manageGroups: Gérer les groupes manageGroups: Gérer les groupes
@ -1873,11 +1888,11 @@ adminCustomCssWarn: Ce paramètre ne devrait être utilisé que si vous savez ce
de fonctionner. Assurez-vous que votre CSS fonctionne correctement en l'essayant de fonctionner. Assurez-vous que votre CSS fonctionne correctement en l'essayant
dans vos paramètres utilisateur. dans vos paramètres utilisateur.
swipeOnDesktop: Permettre le style de glissement de fenêtre de mobile sur PC swipeOnDesktop: Permettre le style de glissement de fenêtre de mobile sur PC
moveFromLabel: 'Compte depuis lequel vous migrez:' moveFromLabel: 'Compte depuis lequel vous migrez :'
migrationConfirm: "Êtes-vous absolument certain⋅e que vous voulez migrer votre compte\ migrationConfirm: "Êtes-vous absolument certain⋅e que vous voulez migrer votre compte\
\ vers {account} ? Une fois fait, vous ne pourrez pas revenir en arrière, et vous\ \ vers {account} ? Une fois fait, vous ne pourrez pas revenir en arrière, et vous\
\ ne pourrez plus utiliser le compte actuel normalement à nouveau.\nAussi, assurez-vous\ \ ne pourrez plus utiliser le compte actuel normalement à nouveau.\nAussi, assurez-vous\
\ d'avoir configuré le compte courant comme le compte depuis lequel vous migrez." \ d'avoir configuré le compte actuel comme le compte depuis lequel vous migrez."
_preferencesBackups: _preferencesBackups:
updatedAt: 'Mis à jour le : {date} {time}' updatedAt: 'Mis à jour le : {date} {time}'
cannotLoad: Le chargement a échoué cannotLoad: Le chargement a échoué
@ -1891,7 +1906,7 @@ _preferencesBackups:
noBackups: Aucune sauvegarde n'existe. Vous pouvez sauvegarder les paramètres de noBackups: Aucune sauvegarde n'existe. Vous pouvez sauvegarder les paramètres de
votre client sur ce serveur en utilisant "Créer une nouvelle sauvegarde". votre client sur ce serveur en utilisant "Créer une nouvelle sauvegarde".
createdAt: 'Crée le : {date} {time}' createdAt: 'Crée le : {date} {time}'
renameConfirm: Renommer la sauvegarde "{old}" à "{new}" ? renameConfirm: Renommer la sauvegarde "{old}" en "{new}" ?
list: Sauvegardes créées list: Sauvegardes créées
saveNew: Faire une nouvelle sauvegarde saveNew: Faire une nouvelle sauvegarde
loadFile: Charger depuis le fichier loadFile: Charger depuis le fichier
@ -1931,7 +1946,8 @@ flagSpeakAsCatDescription: Vos messages seront nyanifiés en mode chat
hiddenTags: Hashtags cachés hiddenTags: Hashtags cachés
hiddenTagsDescription: "Lister les hashtags (sans le #) que vous souhaitez cacher\ hiddenTagsDescription: "Lister les hashtags (sans le #) que vous souhaitez cacher\
\ de tendances et explorer. Les hashtags cachés sont toujours découvrables par d'autres\ \ de tendances et explorer. Les hashtags cachés sont toujours découvrables par d'autres\
\ moyens." \ moyens. Les instances bloqués ne sont pas ne sont pas affectés, même si ils sont\
\ présent dans cette liste."
antennaInstancesDescription: Lister un hôte d'instance par ligne antennaInstancesDescription: Lister un hôte d'instance par ligne
userSaysSomethingReason: '{name} a dit {reason}' userSaysSomethingReason: '{name} a dit {reason}'
breakFollowConfirm: Êtes vous sur de vouloir retirer l'abonné ? breakFollowConfirm: Êtes vous sur de vouloir retirer l'abonné ?
@ -1955,9 +1971,9 @@ customSplashIconsDescription: URLs pour les icônes personnalisées de l'écran
(re)chargement de page. Assurez-vous que les images sont sur des URL statiques, (re)chargement de page. Assurez-vous que les images sont sur des URL statiques,
de préférence toutes de taille 192x192. de préférence toutes de taille 192x192.
updateAvailable: Une mise à jour est peut-être disponible ! updateAvailable: Une mise à jour est peut-être disponible !
accountMoved: "L'utilisateur a migré vers un nouveau compte:" accountMoved: "L'utilisateur a migré vers un nouveau compte:"
enableEmojiReactions: Activer les réactions par émojis enableEmojiReactions: Activer les réactions par émojis
showEmojisInReactionNotifications: Montrer les émojis dans les notifications de réaction showEmojisInReactionNotifications: Montrer les émojis dans les notifications de réactions
renoteUnmute: Notifier les renotes renoteUnmute: Notifier les renotes
selectInstance: Choisir une instance selectInstance: Choisir une instance
noInstances: Il n'y a aucune instance noInstances: Il n'y a aucune instance
@ -2000,3 +2016,25 @@ customKaTeXMacroDescription: "Définissez des macros pour écrire des expression
\ Seulement de simples fonctions de substitution de chaines sont supportées; la\ \ Seulement de simples fonctions de substitution de chaines sont supportées; la\
\ syntaxe avancée, telle que la ramification conditionnelle, ne peut pas être utilisée\ \ syntaxe avancée, telle que la ramification conditionnelle, ne peut pas être utilisée\
\ ici." \ ici."
enableRecommendedTimeline: Activer la chronologie recommandée
silenceThisInstance: Ne plus montrer cet instance
silencedInstances: Instances silencieuses
silenced: Silencieux
deleted: Effacé
editNote: Modifier note
edited: Modifié
flagShowTimelineRepliesDescription: Si activé, affiche dans le fil les réponses des
personnes aux publications des autres.
_experiments:
alpha: Alpha
beta: Beta
enablePostEditing: Autoriser l'édition de note
title: Expérimentations
findOtherInstance: Trouver un autre serveur
userSaysSomethingReasonQuote: '{name} a cité une note contenant {reason}'
signupsDisabled: Les inscriptions sur ce serveur sont actuellement désactivés, mais
vous pouvez toujours vous inscrire sur un autre serveur ! Si vous avez un code d'invitation
pour ce serveur, entrez-le ci-dessous s'il vous plait.
apps: Applications
userSaysSomethingReasonReply: '{noms} a répondu à une note contenant {raison}'
defaultValueIs: 'défaut: {valeur}'

View file

@ -1,7 +1,9 @@
---
_lang_: "Bahasa Indonesia" _lang_: "Bahasa Indonesia"
headlineMisskey: "Jaringan terhubung melalui catatan" headlineMisskey: "Jaringan terhubung melalui catatan"
introMisskey: "Selamat datang! Misskey adalah perangkat mikroblog tercatu bersifat sumber terbuka.\nMulailah menuliskan catatan, bagikan peristiwa terkini, serta ceritakan segala tentangmu.📡\nTunjukkan juga reaksimu pada catatan pengguna lain.👍\nMari jelajahi dunia baru🚀" introMisskey: "Selamat datang! Calckey adalah perangkat mikroblog tercatu bersifat\
\ sumber terbuka.\nMulailah menuliskan catatan, bagikan peristiwa terkini, serta\
\ ceritakan segala tentangmu.\U0001F4E1\nTunjukkan juga reaksimu pada catatan pengguna\
\ lain.\U0001F44D\nMari jelajahi dunia baru\U0001F680"
monthAndDay: "{day} {month}" monthAndDay: "{day} {month}"
search: "Penelusuran" search: "Penelusuran"
notifications: "Pemberitahuan" notifications: "Pemberitahuan"
@ -44,7 +46,8 @@ copyContent: "Salin konten"
copyLink: "Salin tautan" copyLink: "Salin tautan"
delete: "Hapus" delete: "Hapus"
deleteAndEdit: "Hapus dan sunting" deleteAndEdit: "Hapus dan sunting"
deleteAndEditConfirm: "Apakah kamu yakin ingin menghapus note ini dan menyuntingnya? Kamu akan kehilangan semua reaksi, renote dan balasan di note ini." deleteAndEditConfirm: "Apakah kamu yakin ingin menghapus note ini dan menyuntingnya?\
\ Kamu akan kehilangan semua reaksi, renote dan balasan di note ini."
addToList: "Tambahkan ke daftar" addToList: "Tambahkan ke daftar"
sendMessage: "Kirim pesan" sendMessage: "Kirim pesan"
copyUsername: "Salin nama pengguna" copyUsername: "Salin nama pengguna"
@ -66,7 +69,8 @@ files: "Berkas"
download: "Unduh" download: "Unduh"
driveFileDeleteConfirm: "Hapus {name}? Catatan dengan berkas terkait juga akan terhapus." driveFileDeleteConfirm: "Hapus {name}? Catatan dengan berkas terkait juga akan terhapus."
unfollowConfirm: "Berhenti mengikuti {name}?" unfollowConfirm: "Berhenti mengikuti {name}?"
exportRequested: "Kamu telah meminta ekspor. Ini akan memakan waktu sesaat. Setelah ekspor selesai, berkas yang dihasilkan akan ditambahkan ke Drive" exportRequested: "Kamu telah meminta ekspor. Ini akan memakan waktu sesaat. Setelah\
\ ekspor selesai, berkas yang dihasilkan akan ditambahkan ke Drive"
importRequested: "Kamu telah meminta impor. Ini akan memakan waktu sesaat." importRequested: "Kamu telah meminta impor. Ini akan memakan waktu sesaat."
lists: "Daftar" lists: "Daftar"
noLists: "Kamu tidak memiliki daftar apapun" noLists: "Kamu tidak memiliki daftar apapun"
@ -81,9 +85,12 @@ error: "Galat"
somethingHappened: "Terjadi kesalahan" somethingHappened: "Terjadi kesalahan"
retry: "Coba lagi" retry: "Coba lagi"
pageLoadError: "Gagal memuat halaman." pageLoadError: "Gagal memuat halaman."
pageLoadErrorDescription: "Umumnya disebabkan jaringan atau tembolok perambah. Cobalah bersihkan tembolok peramban lalu tunggu sesaat sebelum mencoba kembali." pageLoadErrorDescription: "Umumnya disebabkan jaringan atau tembolok perambah. Cobalah\
serverIsDead: "Tidak ada respon dari peladen. Mohon tunggu dan coba beberapa saat lagi." \ bersihkan tembolok peramban lalu tunggu sesaat sebelum mencoba kembali."
youShouldUpgradeClient: "Untuk melihat halaman ini, mohon muat ulang untuk memutakhirkan klienmu." serverIsDead: "Tidak ada respon dari peladen. Mohon tunggu dan coba beberapa saat\
\ lagi."
youShouldUpgradeClient: "Untuk melihat halaman ini, mohon muat ulang untuk memutakhirkan\
\ klienmu."
enterListName: "Masukkan nama daftar" enterListName: "Masukkan nama daftar"
privacy: "Privasi" privacy: "Privasi"
makeFollowManuallyApprove: "Permintaan mengikuti membutuhkan persetujuan" makeFollowManuallyApprove: "Permintaan mengikuti membutuhkan persetujuan"
@ -108,7 +115,8 @@ sensitive: "Konten sensitif"
add: "Tambahkan" add: "Tambahkan"
reaction: "Reaksi" reaction: "Reaksi"
reactionSetting: "Reaksi untuk dimunculkan di bilah reaksi" reactionSetting: "Reaksi untuk dimunculkan di bilah reaksi"
reactionSettingDescription2: "Geser untuk memindah urutkan, klik untuk menghapus, tekan \"+\" untuk menambahkan" reactionSettingDescription2: "Geser untuk memindah urutkan, klik untuk menghapus,\
\ tekan \"+\" untuk menambahkan"
rememberNoteVisibility: "Ingat pengaturan visibilitas catatan" rememberNoteVisibility: "Ingat pengaturan visibilitas catatan"
attachCancel: "Hapus lampiran" attachCancel: "Hapus lampiran"
markAsSensitive: "Tandai sebagai konten sensitif" markAsSensitive: "Tandai sebagai konten sensitif"
@ -137,14 +145,22 @@ emojiUrl: "URL Emoji"
addEmoji: "Tambahkan emoji" addEmoji: "Tambahkan emoji"
settingGuide: "Pengaturan rekomendasi" settingGuide: "Pengaturan rekomendasi"
cacheRemoteFiles: "Tembolokkan berkas remote" cacheRemoteFiles: "Tembolokkan berkas remote"
cacheRemoteFilesDescription: "Ketika pengaturan ini dinonaktifkan, berkas luar akan dimuat langsung dari instansi luar. Menonaktifkan ini akan mengurangi penggunaan penyimpanan, namun dapat menyebabkan meningkatkan lalu lintas bandwidth, karena thumbnail tidak dihasilkan." cacheRemoteFilesDescription: "Ketika pengaturan ini dinonaktifkan, berkas luar akan\
\ dimuat langsung dari instansi luar. Menonaktifkan ini akan mengurangi penggunaan\
\ penyimpanan, namun dapat menyebabkan meningkatkan lalu lintas bandwidth, karena\
\ thumbnail tidak dihasilkan."
flagAsBot: "Atur akun ini sebagai Bot" flagAsBot: "Atur akun ini sebagai Bot"
flagAsBotDescription: "Jika akun ini dikendalikan oleh program, tetapkanlah opsi ini. Jika diaktifkan, ini akan berfungsi sebagai tanda bagi pengembang lain untuk mencegah interaksi berantai dengan bot lain dan menyesuaikan sistem internal Misskey untuk memperlakukan akun ini sebagai bot." flagAsBotDescription: "Jika akun ini dikendalikan oleh program, tetapkanlah opsi ini.\
\ Jika diaktifkan, ini akan berfungsi sebagai tanda bagi pengembang lain untuk mencegah\
\ interaksi berantai dengan bot lain dan menyesuaikan sistem internal Calckey untuk\
\ memperlakukan akun ini sebagai bot."
flagAsCat: "Atur akun ini sebagai kucing" flagAsCat: "Atur akun ini sebagai kucing"
flagAsCatDescription: "Nyalakan tanda ini untuk menandai akun ini sebagai kucing." flagAsCatDescription: "Nyalakan tanda ini untuk menandai akun ini sebagai kucing."
flagShowTimelineReplies: "Tampilkan balasan di linimasa" flagShowTimelineReplies: "Tampilkan balasan di linimasa"
flagShowTimelineRepliesDescription: "Menampilkan balasan pengguna dari note pengguna lain di linimasa apabila dinyalakan." flagShowTimelineRepliesDescription: "Menampilkan balasan pengguna dari note pengguna\
autoAcceptFollowed: "Setujui otomatis permintaan mengikuti dari pengguna yang kamu ikuti" \ lain di linimasa apabila dinyalakan."
autoAcceptFollowed: "Setujui otomatis permintaan mengikuti dari pengguna yang kamu\
\ ikuti"
addAccount: "Tambahkan akun" addAccount: "Tambahkan akun"
loginFailed: "Gagal untuk masuk" loginFailed: "Gagal untuk masuk"
showOnRemote: "Lihat profil asli" showOnRemote: "Lihat profil asli"
@ -156,7 +172,11 @@ searchWith: "Cari: {q}"
youHaveNoLists: "Kamu tidak memiliki daftar apapun" youHaveNoLists: "Kamu tidak memiliki daftar apapun"
followConfirm: "Apakah kamu yakin ingin mengikuti {name}?" followConfirm: "Apakah kamu yakin ingin mengikuti {name}?"
proxyAccount: "Akun proksi" proxyAccount: "Akun proksi"
proxyAccountDescription: "Akun proksi merupakan sebuah akun yang bertindak sebagai pengikut luar untuk pengguna dalam kondisi tertentu. Sebagai contoh, ketika pengguna menambahkan seorang pengguna luar ke dalam daftar, aktivitas dari pengguna luar tidak akan disampaikan ke instansi apabila tidak ada pengguna lokal yang mengikuti pengguna tersebut, dengan begitu akun proksilah yang akan mengikutinya." proxyAccountDescription: "Akun proksi merupakan sebuah akun yang bertindak sebagai\
\ pengikut luar untuk pengguna dalam kondisi tertentu. Sebagai contoh, ketika pengguna\
\ menambahkan seorang pengguna luar ke dalam daftar, aktivitas dari pengguna luar\
\ tidak akan disampaikan ke instansi apabila tidak ada pengguna lokal yang mengikuti\
\ pengguna tersebut, dengan begitu akun proksilah yang akan mengikutinya."
host: "Host" host: "Host"
selectUser: "Pilih pengguna" selectUser: "Pilih pengguna"
recipient: "Penerima" recipient: "Penerima"
@ -177,7 +197,6 @@ operations: "Tindakan"
software: "Perangkat lunak" software: "Perangkat lunak"
version: "Versi" version: "Versi"
metadata: "Metadata" metadata: "Metadata"
withNFiles: "{n} berkas"
monitor: "Pantau" monitor: "Pantau"
jobQueue: "Antrian kerja" jobQueue: "Antrian kerja"
cpuAndMemory: "CPU dan Memori" cpuAndMemory: "CPU dan Memori"
@ -187,11 +206,15 @@ instanceInfo: "Informasi Instansi"
statistics: "Statistik" statistics: "Statistik"
clearQueue: "Bersihkan antrian" clearQueue: "Bersihkan antrian"
clearQueueConfirmTitle: "Apakah kamu yakin ingin membersihkan antrian?" clearQueueConfirmTitle: "Apakah kamu yakin ingin membersihkan antrian?"
clearQueueConfirmText: "Seluruh sisa catatan yang tidak tersampaikan di dalam antrian tidak akan difederasi. Biasanya operasi ini TIDAK dibutuhkan." clearQueueConfirmText: "Seluruh sisa catatan yang tidak tersampaikan di dalam antrian\
\ tidak akan difederasi. Biasanya operasi ini TIDAK dibutuhkan."
clearCachedFiles: "Hapus tembolok" clearCachedFiles: "Hapus tembolok"
clearCachedFilesConfirm: "Apakah kamu yakin ingin menghapus seluruh tembolok berkas remote?" clearCachedFilesConfirm: "Apakah kamu yakin ingin menghapus seluruh tembolok berkas\
\ remote?"
blockedInstances: "Instansi terblokir" blockedInstances: "Instansi terblokir"
blockedInstancesDescription: "Daftar nama host dari instansi yang diperlukan untuk diblokir. Instansi yang didaftarkan tidak akan dapat berkomunikasi dengan instansi ini." blockedInstancesDescription: "Daftar nama host dari instansi yang diperlukan untuk\
\ diblokir. Instansi yang didaftarkan tidak akan dapat berkomunikasi dengan instansi\
\ ini."
muteAndBlock: "Bisukan / Blokir" muteAndBlock: "Bisukan / Blokir"
mutedUsers: "Pengguna yang dibisukan" mutedUsers: "Pengguna yang dibisukan"
blockedUsers: "Pengguna yang diblokir" blockedUsers: "Pengguna yang diblokir"
@ -199,7 +222,7 @@ noUsers: "Tidak ada pengguna"
editProfile: "Sunting profil" editProfile: "Sunting profil"
noteDeleteConfirm: "Apakah kamu yakin ingin menghapus catatan ini?" noteDeleteConfirm: "Apakah kamu yakin ingin menghapus catatan ini?"
pinLimitExceeded: "Kamu tidak dapat menyematkan catatan lagi" pinLimitExceeded: "Kamu tidak dapat menyematkan catatan lagi"
intro: "Instalasi Misskey telah selesai! Mohon untuk membuat pengguna admin." intro: "Instalasi Calckey telah selesai! Mohon untuk membuat pengguna admin."
done: "Selesai" done: "Selesai"
processing: "Memproses" processing: "Memproses"
preview: "Pratinjau" preview: "Pratinjau"
@ -239,7 +262,8 @@ saved: "Telah disimpan"
messaging: "Pesan" messaging: "Pesan"
upload: "Unggah" upload: "Unggah"
keepOriginalUploading: "Simpan gambar asli" keepOriginalUploading: "Simpan gambar asli"
keepOriginalUploadingDescription: "Simpan gambar yang diunggah sebagaimana gambar aslinya. Bila dimatikan, versi tampilan web akan dihasilkan pada saat diunggah." keepOriginalUploadingDescription: "Simpan gambar yang diunggah sebagaimana gambar\
\ aslinya. Bila dimatikan, versi tampilan web akan dihasilkan pada saat diunggah."
fromDrive: "Dari Drive" fromDrive: "Dari Drive"
fromUrl: "Dari URL" fromUrl: "Dari URL"
uploadFromUrl: "Unggah dari URL" uploadFromUrl: "Unggah dari URL"
@ -255,7 +279,8 @@ agreeTo: "Saya setuju kepada {0}"
tos: "Syarat dan ketentuan" tos: "Syarat dan ketentuan"
start: "Mulai" start: "Mulai"
home: "Beranda" home: "Beranda"
remoteUserCaution: "Informasi ini mungkin tidak mutakhir, karena pengguna ini berasal dari instansi luar." remoteUserCaution: "Informasi ini mungkin tidak mutakhir, karena pengguna ini berasal\
\ dari instansi luar."
activity: "Aktivitas" activity: "Aktivitas"
images: "Gambar" images: "Gambar"
birthday: "Tanggal lahir" birthday: "Tanggal lahir"
@ -288,7 +313,8 @@ unableToDelete: "Tidak dapat menghapus"
inputNewFileName: "Masukkan nama berkas yang baru" inputNewFileName: "Masukkan nama berkas yang baru"
inputNewDescription: "Masukkan keterangan disini" inputNewDescription: "Masukkan keterangan disini"
inputNewFolderName: "Masukkan nama folder yang baru" inputNewFolderName: "Masukkan nama folder yang baru"
circularReferenceFolder: "Folder tujuan adalah subfolder dari folder yang ingin kamu pindahkan." circularReferenceFolder: "Folder tujuan adalah subfolder dari folder yang ingin kamu\
\ pindahkan."
hasChildFilesOrFolders: "Karena folder ini tidak kosong, maka tidak dapat dihapus." hasChildFilesOrFolders: "Karena folder ini tidak kosong, maka tidak dapat dihapus."
copyUrl: "Salin tautan" copyUrl: "Salin tautan"
rename: "Ubah nama" rename: "Ubah nama"
@ -322,7 +348,8 @@ connectService: "Sambungkan"
disconnectService: "Putuskan" disconnectService: "Putuskan"
enableLocalTimeline: "Nyalakan linimasa lokal" enableLocalTimeline: "Nyalakan linimasa lokal"
enableGlobalTimeline: "Nyalakan linimasa global" enableGlobalTimeline: "Nyalakan linimasa global"
disablingTimelinesInfo: "Admin dan Moderator akan selalu memiliki akses ke semua linimasa meskipun linimasa tersebut tidak diaktifkan." disablingTimelinesInfo: "Admin dan Moderator akan selalu memiliki akses ke semua linimasa\
\ meskipun linimasa tersebut tidak diaktifkan."
registration: "Pendaftaran" registration: "Pendaftaran"
enableRegistration: "Nyalakan pendaftaran pengguna baru" enableRegistration: "Nyalakan pendaftaran pengguna baru"
invite: "Undang" invite: "Undang"
@ -334,9 +361,11 @@ bannerUrl: "URL Banner"
backgroundImageUrl: "URL Gambar latar" backgroundImageUrl: "URL Gambar latar"
basicInfo: "Informasi Umum" basicInfo: "Informasi Umum"
pinnedUsers: "Pengguna yang disematkan" pinnedUsers: "Pengguna yang disematkan"
pinnedUsersDescription: "Tuliskan satu nama pengguna dalam satu baris. Pengguna yang dituliskan disini akan disematkan dalam bilah \"Jelajahi\"." pinnedUsersDescription: "Tuliskan satu nama pengguna dalam satu baris. Pengguna yang\
\ dituliskan disini akan disematkan dalam bilah \"Jelajahi\"."
pinnedPages: "Halaman yang disematkan" pinnedPages: "Halaman yang disematkan"
pinnedPagesDescription: "Masukkan tautan dari halaman yang kamu ingin sematkan ke halaman utama dari instansi ini, dipisah dengan membuat baris baru." pinnedPagesDescription: "Masukkan tautan dari halaman yang kamu ingin sematkan ke\
\ halaman utama dari instansi ini, dipisah dengan membuat baris baru."
pinnedClipId: "ID dari klip yang disematkan" pinnedClipId: "ID dari klip yang disematkan"
pinnedNotes: "Catatan yang disematkan" pinnedNotes: "Catatan yang disematkan"
hcaptcha: "hCaptcha" hcaptcha: "hCaptcha"
@ -347,14 +376,17 @@ recaptcha: "reCAPTCHA"
enableRecaptcha: "Nyalakan reCAPTCHA" enableRecaptcha: "Nyalakan reCAPTCHA"
recaptchaSiteKey: "Site key" recaptchaSiteKey: "Site key"
recaptchaSecretKey: "Secret Key" recaptchaSecretKey: "Secret Key"
avoidMultiCaptchaConfirm: "Menggunakan banyak Captcha dapat menyebabkan gangguan. Apakah kamu ingin untuk menonaktifkan Captcha yang lain? Kamu dapat membiarkan fitur ini tetap aktif dengan menekan tombol batal." avoidMultiCaptchaConfirm: "Menggunakan banyak Captcha dapat menyebabkan gangguan.\
\ Apakah kamu ingin untuk menonaktifkan Captcha yang lain? Kamu dapat membiarkan\
\ fitur ini tetap aktif dengan menekan tombol batal."
antennas: "Antena" antennas: "Antena"
manageAntennas: "Pengelola Antena" manageAntennas: "Pengelola Antena"
name: "Nama" name: "Nama"
antennaSource: "Sumber Antenna" antennaSource: "Sumber Antenna"
antennaKeywords: "Kata kunci yang diterima" antennaKeywords: "Kata kunci yang diterima"
antennaExcludeKeywords: "Kata kunci yang dikecualikan" antennaExcludeKeywords: "Kata kunci yang dikecualikan"
antennaKeywordsDescription: "Pisahkan dengan spasi untuk kondisi AND. Pisahkan dengan baris baru untuk kondisi OR." antennaKeywordsDescription: "Pisahkan dengan spasi untuk kondisi AND. Pisahkan dengan\
\ baris baru untuk kondisi OR."
notifyAntenna: "Beritahu untuk catatan baru" notifyAntenna: "Beritahu untuk catatan baru"
withFileAntenna: "Hanya tampilkan catatan dengan berkas yang dilampirkan" withFileAntenna: "Hanya tampilkan catatan dengan berkas yang dilampirkan"
enableServiceworker: "Aktifkan ServiceWorker" enableServiceworker: "Aktifkan ServiceWorker"
@ -377,7 +409,7 @@ exploreFediverse: "Jelajahi Fediverse"
popularTags: "Tag populer" popularTags: "Tag populer"
userList: "Daftar" userList: "Daftar"
about: "Informasi" about: "Informasi"
aboutMisskey: "Tentang Misskey" aboutMisskey: "Tentang Calckey"
administrator: "Admin" administrator: "Admin"
token: "Token" token: "Token"
twoStepAuthentication: "Otentikasi dua faktor" twoStepAuthentication: "Otentikasi dua faktor"
@ -441,7 +473,8 @@ strongPassword: "Kata sandi kuat"
passwordMatched: "Kata sandi sama" passwordMatched: "Kata sandi sama"
passwordNotMatched: "Kata sandi tidak sama" passwordNotMatched: "Kata sandi tidak sama"
signinWith: "Masuk dengan {x}" signinWith: "Masuk dengan {x}"
signinFailed: "Tidak dapat masuk. Nama pengguna atau kata sandi yang kamu masukkan salah." signinFailed: "Tidak dapat masuk. Nama pengguna atau kata sandi yang kamu masukkan\
\ salah."
tapSecurityKey: "Ketuk kunci keamanan kamu" tapSecurityKey: "Ketuk kunci keamanan kamu"
or: "atau" or: "atau"
language: "Bahasa" language: "Bahasa"
@ -482,19 +515,29 @@ showFeaturedNotesInTimeline: "Tampilkan catatan yang diunggulkan di linimasa"
objectStorage: "Object Storage" objectStorage: "Object Storage"
useObjectStorage: "Gunakan object storage" useObjectStorage: "Gunakan object storage"
objectStorageBaseUrl: "Base URL" objectStorageBaseUrl: "Base URL"
objectStorageBaseUrlDesc: "Prefix URL digunakan untuk mengkonstruksi URL ke object (media) referencing. Tentukan URL jika kamu menggunakan CDN atau Proxy, jika tidak tentukan alamat yang dapat diakses secara publik sesuai dengan panduan dari layanan yang akan kamu gunakan, contohnya. 'https://<bucket>.s3.amazonaws.com' untuk AWS S3, dan 'https://storage.googleapis.com/<bucket>' untuk GCS." objectStorageBaseUrlDesc: "Prefix URL digunakan untuk mengkonstruksi URL ke object\
\ (media) referencing. Tentukan URL jika kamu menggunakan CDN atau Proxy, jika tidak\
\ tentukan alamat yang dapat diakses secara publik sesuai dengan panduan dari layanan\
\ yang akan kamu gunakan, contohnya. 'https://<bucket>.s3.amazonaws.com' untuk AWS\
\ S3, dan 'https://storage.googleapis.com/<bucket>' untuk GCS."
objectStorageBucket: "Bucket" objectStorageBucket: "Bucket"
objectStorageBucketDesc: "Mohon tentukan nama bucket yang digunakan pada layanan yang telah dikonfigurasi." objectStorageBucketDesc: "Mohon tentukan nama bucket yang digunakan pada layanan yang\
\ telah dikonfigurasi."
objectStoragePrefix: "Prefix" objectStoragePrefix: "Prefix"
objectStoragePrefixDesc: "Berkas tidak akan disimpan dalam direktori dari prefix ini." objectStoragePrefixDesc: "Berkas tidak akan disimpan dalam direktori dari prefix ini."
objectStorageEndpoint: "Endpoint" objectStorageEndpoint: "Endpoint"
objectStorageEndpointDesc: "Kosongkan bagian ini jika kamu menggunakan AWS S3, jika tidak tentukan endpoint sebagai '<host>' atau '<host>:<port>' sesuai dengan panduan dari layanan yang akan kamu gunakan." objectStorageEndpointDesc: "Kosongkan bagian ini jika kamu menggunakan AWS S3, jika\
\ tidak tentukan endpoint sebagai '<host>' atau '<host>:<port>' sesuai dengan panduan\
\ dari layanan yang akan kamu gunakan."
objectStorageRegion: "Region" objectStorageRegion: "Region"
objectStorageRegionDesc: "Tentukan region seperti 'xx-east-1'. Jika layanan kamu tidak memiliki perbedaan mengenai region, kosongkan saja atau isi dengan 'us-east-1'." objectStorageRegionDesc: "Tentukan region seperti 'xx-east-1'. Jika layanan kamu tidak\
\ memiliki perbedaan mengenai region, kosongkan saja atau isi dengan 'us-east-1'."
objectStorageUseSSL: "Gunakan SSL" objectStorageUseSSL: "Gunakan SSL"
objectStorageUseSSLDesc: "Matikan ini jika kamu tidak akan menggunakan HTTPS untuk koneksi API" objectStorageUseSSLDesc: "Matikan ini jika kamu tidak akan menggunakan HTTPS untuk\
\ koneksi API"
objectStorageUseProxy: "Hubungkan melalui Proxy" objectStorageUseProxy: "Hubungkan melalui Proxy"
objectStorageUseProxyDesc: "Matikan ini jika kamu tidak akan menggunakan Proxy untuk koneksi ObjectStorage" objectStorageUseProxyDesc: "Matikan ini jika kamu tidak akan menggunakan Proxy untuk\
\ koneksi ObjectStorage"
objectStorageSetPublicRead: "Setel \"public-read\" disaat mengunggah" objectStorageSetPublicRead: "Setel \"public-read\" disaat mengunggah"
serverLogs: "Log Peladen" serverLogs: "Log Peladen"
deleteAll: "Hapus semua" deleteAll: "Hapus semua"
@ -522,7 +565,9 @@ sort: "Urutkan"
ascendingOrder: "Urutkan naik" ascendingOrder: "Urutkan naik"
descendingOrder: "Urutkan menurun" descendingOrder: "Urutkan menurun"
scratchpad: "Scratchpad" scratchpad: "Scratchpad"
scratchpadDescription: "Scratchpad menyediakan lingkungan eksperimen untuk AiScript. Kamu bisa menulis, mengeksuksi, serta mengecek hasil yang berinteraksi dengan Misskey." scratchpadDescription: "Scratchpad menyediakan lingkungan eksperimen untuk AiScript.\
\ Kamu bisa menulis, mengeksuksi, serta mengecek hasil yang berinteraksi dengan\
\ Calckey."
output: "Keluaran" output: "Keluaran"
script: "Script" script: "Script"
disablePagesScript: "Nonaktifkan script pada halaman" disablePagesScript: "Nonaktifkan script pada halaman"
@ -530,11 +575,14 @@ updateRemoteUser: "Perbaharui informasi pengguna luar"
deleteAllFiles: "Hapus semua berkas" deleteAllFiles: "Hapus semua berkas"
deleteAllFilesConfirm: "Apakah kamu yakin ingin menghapus semua berkas?" deleteAllFilesConfirm: "Apakah kamu yakin ingin menghapus semua berkas?"
removeAllFollowing: "Tahan semua mengikuti" removeAllFollowing: "Tahan semua mengikuti"
removeAllFollowingDescription: "Batal mengikuti semua akun dari {host}. Mohon jalankan ini ketika instansi sudah tidak ada lagi." removeAllFollowingDescription: "Batal mengikuti semua akun dari {host}. Mohon jalankan\
\ ini ketika instansi sudah tidak ada lagi."
userSuspended: "Pengguna ini telah dibekukan." userSuspended: "Pengguna ini telah dibekukan."
userSilenced: "Pengguna ini telah dibungkam." userSilenced: "Pengguna ini telah dibungkam."
yourAccountSuspendedTitle: "Akun ini dibekukan" yourAccountSuspendedTitle: "Akun ini dibekukan"
yourAccountSuspendedDescription: "Akun ini dibekukan karena melanggar ketentuan penggunaan layanan peladen atau semacamnya. Hubungi admin apabila ingin tahu alasan lebih lanjut. Mohon untuk tidak membuat akun baru." yourAccountSuspendedDescription: "Akun ini dibekukan karena melanggar ketentuan penggunaan\
\ layanan peladen atau semacamnya. Hubungi admin apabila ingin tahu alasan lebih\
\ lanjut. Mohon untuk tidak membuat akun baru."
menu: "Menu" menu: "Menu"
divider: "Pembagi" divider: "Pembagi"
addItem: "Tambahkan item" addItem: "Tambahkan item"
@ -579,7 +627,8 @@ notificationType: "Jenis pemberitahuan"
edit: "Sunting" edit: "Sunting"
emailServer: "Peladen surel" emailServer: "Peladen surel"
enableEmail: "Nyalakan distribusi surel" enableEmail: "Nyalakan distribusi surel"
emailConfigInfo: "Digunakan untuk mengonfirmasi surel kamu disaat mendaftar dan lupa kata sandi" emailConfigInfo: "Digunakan untuk mengonfirmasi surel kamu disaat mendaftar dan lupa\
\ kata sandi"
email: "Surel" email: "Surel"
emailAddress: "Alamat surel" emailAddress: "Alamat surel"
smtpConfig: "Konfigurasi peladen SMTP" smtpConfig: "Konfigurasi peladen SMTP"
@ -587,13 +636,15 @@ smtpHost: "Host"
smtpPort: "Port" smtpPort: "Port"
smtpUser: "Nama Pengguna" smtpUser: "Nama Pengguna"
smtpPass: "Kata sandi" smtpPass: "Kata sandi"
emptyToDisableSmtpAuth: "Kosongkan nama pengguna dan kata sandi untuk menonaktifkan verifikasi SMTP" emptyToDisableSmtpAuth: "Kosongkan nama pengguna dan kata sandi untuk menonaktifkan\
\ verifikasi SMTP"
smtpSecure: "Gunakan SSL/TLS implisit untuk koneksi SMTP" smtpSecure: "Gunakan SSL/TLS implisit untuk koneksi SMTP"
smtpSecureInfo: "Matikan ini ketika menggunakan STARTTLS" smtpSecureInfo: "Matikan ini ketika menggunakan STARTTLS"
testEmail: "Tes pengiriman surel" testEmail: "Tes pengiriman surel"
wordMute: "Bisukan kata" wordMute: "Bisukan kata"
regexpError: "Kesalahan ekspresi reguler" regexpError: "Kesalahan ekspresi reguler"
regexpErrorDescription: "Galat terjadi pada baris {line} ekspresi reguler dari {tab} kata yang dibisukan:" regexpErrorDescription: "Galat terjadi pada baris {line} ekspresi reguler dari {tab}\
\ kata yang dibisukan:"
instanceMute: "Bisuka instansi" instanceMute: "Bisuka instansi"
userSaysSomething: "{name} mengatakan sesuatu" userSaysSomething: "{name} mengatakan sesuatu"
makeActive: "Aktifkan" makeActive: "Aktifkan"
@ -609,30 +660,37 @@ create: "Buat"
notificationSetting: "Pengaturan Pemberitahuan" notificationSetting: "Pengaturan Pemberitahuan"
notificationSettingDesc: "Pilih tipe pemberitahuan untuk ditampilkan" notificationSettingDesc: "Pilih tipe pemberitahuan untuk ditampilkan"
useGlobalSetting: "Gunakan setelan global" useGlobalSetting: "Gunakan setelan global"
useGlobalSettingDesc: "Jika dinyalakan, setelan pemberitahuan akun kamu akan digunakan. Jika dimatikan, konfigurasi secara individu dapat dibuat." useGlobalSettingDesc: "Jika dinyalakan, setelan pemberitahuan akun kamu akan digunakan.\
\ Jika dimatikan, konfigurasi secara individu dapat dibuat."
other: "Lainnya" other: "Lainnya"
regenerateLoginToken: "Perbarui token login" regenerateLoginToken: "Perbarui token login"
regenerateLoginTokenDescription: "Perbarui token yang digunakan secara internal saat login. Normalnya aksi ini tidak diperlukan. Jika diperbarui, semua perangkat akan dilogout." regenerateLoginTokenDescription: "Perbarui token yang digunakan secara internal saat\
setMultipleBySeparatingWithSpace: "Kamu dapat menyetel banyak dengan memisahkannya menggunakan spasi." \ login. Normalnya aksi ini tidak diperlukan. Jika diperbarui, semua perangkat akan\
\ dilogout."
setMultipleBySeparatingWithSpace: "Kamu dapat menyetel banyak dengan memisahkannya\
\ menggunakan spasi."
fileIdOrUrl: "File-ID atau URL" fileIdOrUrl: "File-ID atau URL"
behavior: "Perilaku" behavior: "Perilaku"
sample: "Contoh" sample: "Contoh"
abuseReports: "Laporkan" abuseReports: "Laporkan"
reportAbuse: "Laporkan" reportAbuse: "Laporkan"
reportAbuseOf: "Laporkan {name}" reportAbuseOf: "Laporkan {name}"
fillAbuseReportDescription: "Mohon isi rincian laporan. Jika laporan ini mengenai catatan yang spesifik, mohon lampirkan serta URL catatan tersebut." fillAbuseReportDescription: "Mohon isi rincian laporan. Jika laporan ini mengenai\
\ catatan yang spesifik, mohon lampirkan serta URL catatan tersebut."
abuseReported: "Laporan kamu telah dikirimkan. Terima kasih." abuseReported: "Laporan kamu telah dikirimkan. Terima kasih."
reporter: "Pelapor" reporter: "Pelapor"
reporteeOrigin: "Yang dilaporkan" reporteeOrigin: "Yang dilaporkan"
reporterOrigin: "Pelapor" reporterOrigin: "Pelapor"
forwardReport: "Teruskan laporan ke instansi luar" forwardReport: "Teruskan laporan ke instansi luar"
forwardReportIsAnonymous: "Untuk melindungi privasi akun kamu, akun anonim dari sistem akan digunakan sebagai pelapor pada instansi luar." forwardReportIsAnonymous: "Untuk melindungi privasi akun kamu, akun anonim dari sistem\
\ akan digunakan sebagai pelapor pada instansi luar."
send: "Kirim" send: "Kirim"
abuseMarkAsResolved: "Tandai laporan sebagai selesai" abuseMarkAsResolved: "Tandai laporan sebagai selesai"
openInNewTab: "Buka di tab baru" openInNewTab: "Buka di tab baru"
openInSideView: "Buka di tampilan samping" openInSideView: "Buka di tampilan samping"
defaultNavigationBehaviour: "Navigasi bawaan" defaultNavigationBehaviour: "Navigasi bawaan"
editTheseSettingsMayBreakAccount: "Menyunting pengaturan ini memiliki kemungkinan untuk merusak akun kamu." editTheseSettingsMayBreakAccount: "Menyunting pengaturan ini memiliki kemungkinan\
\ untuk merusak akun kamu."
instanceTicker: "Informasi pengguna pada instansi" instanceTicker: "Informasi pengguna pada instansi"
waitingFor: "Menunggu untuk {x}" waitingFor: "Menunggu untuk {x}"
random: "Acak" random: "Acak"
@ -644,9 +702,11 @@ createNew: "Buat baru"
optional: "Opsional" optional: "Opsional"
createNewClip: "Buat klip baru" createNewClip: "Buat klip baru"
unclip: "Batalkan klip" unclip: "Batalkan klip"
confirmToUnclipAlreadyClippedNote: "Catatan ini sudah disertakan di klip \"{name}\". Yakin ingin membatalkan catatan dari klip ini?" confirmToUnclipAlreadyClippedNote: "Catatan ini sudah disertakan di klip \"{name}\"\
. Yakin ingin membatalkan catatan dari klip ini?"
public: "Publik" public: "Publik"
i18nInfo: "Calckey diterjemahkan ke dalam banyak bahasa oleh sukarelawan. Kamu dapat ikut membantu di {link}." i18nInfo: "Calckey diterjemahkan ke dalam banyak bahasa oleh sukarelawan. Kamu dapat\
\ ikut membantu di {link}."
manageAccessTokens: "Kelola access token" manageAccessTokens: "Kelola access token"
accountInfo: "Informasi akun" accountInfo: "Informasi akun"
notesCount: "Jumlah catatan" notesCount: "Jumlah catatan"
@ -665,12 +725,16 @@ no: "Tidak"
driveFilesCount: "Jumlah berkas drive" driveFilesCount: "Jumlah berkas drive"
driveUsage: "Penggunaan ruang penyimpanan drive" driveUsage: "Penggunaan ruang penyimpanan drive"
noCrawle: "Tolak pengindeksan crawler" noCrawle: "Tolak pengindeksan crawler"
noCrawleDescription: "Meminta mesin pencari untuk tidak mengindeks halaman profil kamu, catatan, Halaman, dll." noCrawleDescription: "Meminta mesin pencari untuk tidak mengindeks halaman profil\
lockedAccountInfo: "Kecuali kamu menyetel visibilitas catatan milikmu ke \"Hanya pengikut\", catatan milikmu akan dapat dilihat oleh siapa saja, bahkan jika kamu memerlukan pengikut untuk disetujui secara manual." \ kamu, catatan, Halaman, dll."
lockedAccountInfo: "Kecuali kamu menyetel visibilitas catatan milikmu ke \"Hanya pengikut\"\
, catatan milikmu akan dapat dilihat oleh siapa saja, bahkan jika kamu memerlukan\
\ pengikut untuk disetujui secara manual."
alwaysMarkSensitive: "Tandai media dalam catatan sebagai media sensitif" alwaysMarkSensitive: "Tandai media dalam catatan sebagai media sensitif"
loadRawImages: "Tampilkan lampiran gambar secara penuh daripada thumbnail" loadRawImages: "Tampilkan lampiran gambar secara penuh daripada thumbnail"
disableShowingAnimatedImages: "Jangan mainkan gambar bergerak" disableShowingAnimatedImages: "Jangan mainkan gambar bergerak"
verificationEmailSent: "Surel verifikasi telah dikirimkan. Mohon akses tautan yang telah disertakan untuk menyelesaikan verifikasi." verificationEmailSent: "Surel verifikasi telah dikirimkan. Mohon akses tautan yang\
\ telah disertakan untuk menyelesaikan verifikasi."
notSet: "Tidak disetel" notSet: "Tidak disetel"
emailVerified: "Surel telah diverifikasi" emailVerified: "Surel telah diverifikasi"
noteFavoritesCount: "Jumlah catatan yang difavoritkan" noteFavoritesCount: "Jumlah catatan yang difavoritkan"
@ -682,14 +746,16 @@ clips: "Klip"
experimentalFeatures: "Fitur eksperimental" experimentalFeatures: "Fitur eksperimental"
developer: "Pengembang" developer: "Pengembang"
makeExplorable: "Buat akun tampil di \"Jelajahi\"" makeExplorable: "Buat akun tampil di \"Jelajahi\""
makeExplorableDescription: "Jika kamu mematikan ini, akun kamu tidak akan muncul di bagian \"Jelajahi:" makeExplorableDescription: "Jika kamu mematikan ini, akun kamu tidak akan muncul di\
\ bagian \"Jelajahi:"
showGapBetweenNotesInTimeline: "Tampilkan jarak diantara catatan pada linimasa" showGapBetweenNotesInTimeline: "Tampilkan jarak diantara catatan pada linimasa"
duplicate: "Duplikat" duplicate: "Duplikat"
left: "Kiri" left: "Kiri"
center: "Tengah" center: "Tengah"
wide: "Lebar" wide: "Lebar"
narrow: "Sempit" narrow: "Sempit"
reloadToApplySetting: "Pengaturan ini akan diterapkan saat memuat halaman kembali. Apakah kamu ingin memuat halaman kembali sekarang?" reloadToApplySetting: "Pengaturan ini akan diterapkan saat memuat halaman kembali.\
\ Apakah kamu ingin memuat halaman kembali sekarang?"
needReloadToApply: "Pengaturan ini hanya akan diterapkan setelah memuat ulang halaman." needReloadToApply: "Pengaturan ini hanya akan diterapkan setelah memuat ulang halaman."
showTitlebar: "Tampilkan bilah judul" showTitlebar: "Tampilkan bilah judul"
clearCache: "Hapus tembolok" clearCache: "Hapus tembolok"
@ -697,7 +763,10 @@ onlineUsersCount: "{n} orang sedang daring"
nUsers: "{n} Pengguna" nUsers: "{n} Pengguna"
nNotes: "{n} Catatan" nNotes: "{n} Catatan"
sendErrorReports: "Kirim laporan kesalahan" sendErrorReports: "Kirim laporan kesalahan"
sendErrorReportsDescription: "Ketika dinyalakan, informasi kesalahan rinci akan dibagikan dengan Misskey ketika masalah terjadi, hal ini untuk membantu kualitas Misskey. Fitur ini memungkinkan memuat informasi seperti sistem operasi yang kamu gunakan dan versinya, aplikasi peramban yang kamu gunakan, riwayat aktivitas kamu, dll." sendErrorReportsDescription: "Ketika dinyalakan, informasi kesalahan rinci akan dibagikan\
\ dengan Calckey ketika masalah terjadi, hal ini untuk membantu kualitas Calckey.\
\ Fitur ini memungkinkan memuat informasi seperti sistem operasi yang kamu gunakan\
\ dan versinya, aplikasi peramban yang kamu gunakan, riwayat aktivitas kamu, dll."
myTheme: "Tema saya" myTheme: "Tema saya"
backgroundColor: "Latar Belakang" backgroundColor: "Latar Belakang"
accentColor: "Aksen" accentColor: "Aksen"
@ -736,14 +805,17 @@ unlikeConfirm: "Yakin ingin hapus sukamu?"
fullView: "Tampilan penuh" fullView: "Tampilan penuh"
quitFullView: "Keluar tampilan penuh" quitFullView: "Keluar tampilan penuh"
addDescription: "Tambahkan deskripsi" addDescription: "Tambahkan deskripsi"
userPagePinTip: "Kamu dapat membuat catatan untuk ditampilkan disini dengan memilih \"Sematkan ke profil\" dari menu pada catatan individu." userPagePinTip: "Kamu dapat membuat catatan untuk ditampilkan disini dengan memilih\
notSpecifiedMentionWarning: "Catatan ini mengandung sebutan dari pengguna yang tidak dimuat sebagai penerima" \ \"Sematkan ke profil\" dari menu pada catatan individu."
notSpecifiedMentionWarning: "Catatan ini mengandung sebutan dari pengguna yang tidak\
\ dimuat sebagai penerima"
info: "Informasi" info: "Informasi"
userInfo: "Informasi pengguna" userInfo: "Informasi pengguna"
unknown: "Tidak diketahui" unknown: "Tidak diketahui"
onlineStatus: "Status daring" onlineStatus: "Status daring"
hideOnlineStatus: "Sembunyikan status daring" hideOnlineStatus: "Sembunyikan status daring"
hideOnlineStatusDescription: "Menyembunyikan status daring kamu umengurangi kenyamanan untuk beberapa fungsi seperti contohnya pencarian." hideOnlineStatusDescription: "Menyembunyikan status daring kamu umengurangi kenyamanan\
\ untuk beberapa fungsi seperti contohnya pencarian."
online: "Daring" online: "Daring"
active: "Aktif" active: "Aktif"
offline: "Luring" offline: "Luring"
@ -778,7 +850,8 @@ emailNotConfiguredWarning: "Alamat surel tidak disetel."
ratio: "Rasio" ratio: "Rasio"
previewNoteText: "Tampilkan pratinjau" previewNoteText: "Tampilkan pratinjau"
customCss: "Custom CSS" customCss: "Custom CSS"
customCssWarn: "Pengaturan ini seharusnya digunakan jika kamu tahu cara kerjanya. Memasukkan nilai yang tidak tepat dapat menyebabkan klien tidak berfungsi semestinya." customCssWarn: "Pengaturan ini seharusnya digunakan jika kamu tahu cara kerjanya.\
\ Memasukkan nilai yang tidak tepat dapat menyebabkan klien tidak berfungsi semestinya."
global: "Global" global: "Global"
squareAvatars: "Tampilkan avatar sebagai persegi" squareAvatars: "Tampilkan avatar sebagai persegi"
sent: "Kirim" sent: "Kirim"
@ -788,12 +861,14 @@ hashtags: "Tagar"
troubleshooting: "Penyelesaian Masalah" troubleshooting: "Penyelesaian Masalah"
useBlurEffect: "Gunakan efek blur pada antarmuka" useBlurEffect: "Gunakan efek blur pada antarmuka"
learnMore: "Pelajari lebih lanjut" learnMore: "Pelajari lebih lanjut"
misskeyUpdated: "Misskey telah dimutakhirkan!" misskeyUpdated: "Calckey telah dimutakhirkan!"
whatIsNew: "Lihat perubahan pemutakhiran" whatIsNew: "Lihat perubahan pemutakhiran"
translate: "Terjemahkan" translate: "Terjemahkan"
translatedFrom: "Terjemahkan dari {x}" translatedFrom: "Terjemahkan dari {x}"
accountDeletionInProgress: "Penghapusan akun sedang dalam proses" accountDeletionInProgress: "Penghapusan akun sedang dalam proses"
usernameInfo: "Nama yang mengidentifikasikan akun kamu dari yang lain pada peladen ini. Kamu dapat menggunakan alfabet (a~z, A~Z), digit (0~9) atau garis bawah (_). Username tidak dapat diubah setelahnya." usernameInfo: "Nama yang mengidentifikasikan akun kamu dari yang lain pada peladen\
\ ini. Kamu dapat menggunakan alfabet (a~z, A~Z), digit (0~9) atau garis bawah (_).\
\ Username tidak dapat diubah setelahnya."
aiChanMode: "Mode Ai" aiChanMode: "Mode Ai"
keepCw: "Biarkan Peringatan Konten" keepCw: "Biarkan Peringatan Konten"
pubSub: "Akun Pub/Sub" pubSub: "Akun Pub/Sub"
@ -809,12 +884,14 @@ filter: "Saring"
controlPanel: "Panel kendali" controlPanel: "Panel kendali"
manageAccounts: "Kelola Akun" manageAccounts: "Kelola Akun"
makeReactionsPublic: "Tampilkan riwayat reaksi ke publik" makeReactionsPublic: "Tampilkan riwayat reaksi ke publik"
makeReactionsPublicDescription: "Pengaturan ini akan membuat daftar dari semua reaksi masa lalu kamu ditampilkan secara publik." makeReactionsPublicDescription: "Pengaturan ini akan membuat daftar dari semua reaksi\
\ masa lalu kamu ditampilkan secara publik."
classic: "Klasik" classic: "Klasik"
muteThread: "Bisukan thread" muteThread: "Bisukan thread"
unmuteThread: "Suarakan thread" unmuteThread: "Suarakan thread"
ffVisibility: "Visibilitas Mengikuti/Pengikut" ffVisibility: "Visibilitas Mengikuti/Pengikut"
ffVisibilityDescription: "Mengatur siapa yang dapat melihat pengikutmu dan yang kamu ikuti." ffVisibilityDescription: "Mengatur siapa yang dapat melihat pengikutmu dan yang kamu\
\ ikuti."
continueThread: "Lihat lanjutan thread" continueThread: "Lihat lanjutan thread"
deleteAccountConfirm: "Akun akan dihapus. Apakah kamu yakin?" deleteAccountConfirm: "Akun akan dihapus. Apakah kamu yakin?"
incorrectPassword: "Kata sandi salah." incorrectPassword: "Kata sandi salah."
@ -824,7 +901,8 @@ leaveGroup: "Keluar grup"
leaveGroupConfirm: "Apakah kamu yakin untuk keluar dari \"{name}\"?" leaveGroupConfirm: "Apakah kamu yakin untuk keluar dari \"{name}\"?"
useDrawerReactionPickerForMobile: "Tampilkan bilah reaksi sebagai laci di ponsel" useDrawerReactionPickerForMobile: "Tampilkan bilah reaksi sebagai laci di ponsel"
welcomeBackWithName: "Selamat datang kembali, {name}." welcomeBackWithName: "Selamat datang kembali, {name}."
clickToFinishEmailVerification: "Mohon klik [{ok}] untuk menyelesaikan verifikasi email." clickToFinishEmailVerification: "Mohon klik [{ok}] untuk menyelesaikan verifikasi\
\ email."
overridedDeviceKind: "Tipe perangkat" overridedDeviceKind: "Tipe perangkat"
smartphone: "Ponsel" smartphone: "Ponsel"
tablet: "Tablet" tablet: "Tablet"
@ -866,11 +944,16 @@ _ffVisibility:
_signup: _signup:
almostThere: "Hampir selesai" almostThere: "Hampir selesai"
emailAddressInfo: "Mohon masukkan alamat surel kamu." emailAddressInfo: "Mohon masukkan alamat surel kamu."
emailSent: "Konfirmasi surel telah dikirimkan ke alamat surel kamu ({email}). Mohon klik tautan yang tercantum di dalamnya untuk menyelesaikan pembuatan akun." emailSent: "Konfirmasi surel telah dikirimkan ke alamat surel kamu ({email}). Mohon\
\ klik tautan yang tercantum di dalamnya untuk menyelesaikan pembuatan akun."
_accountDelete: _accountDelete:
accountDelete: "Hapus akun" accountDelete: "Hapus akun"
mayTakeTime: "Karena penghapusan akun merupakan proses yang berat dan intensif, kemungkinan dapat membutuhkan waktu untuk menyelesaikan tergantung daripada berapa banyak konten yang kamu buat dan berapa banyak berkas yang telah kamu unggah." mayTakeTime: "Karena penghapusan akun merupakan proses yang berat dan intensif,\
sendEmail: "Setelah penghapusan akun selesai, pemberitahuan akan dikirimkan ke alamat surel yang terdaftarkan pada akun ini." \ kemungkinan dapat membutuhkan waktu untuk menyelesaikan tergantung daripada\
\ berapa banyak konten yang kamu buat dan berapa banyak berkas yang telah kamu\
\ unggah."
sendEmail: "Setelah penghapusan akun selesai, pemberitahuan akan dikirimkan ke alamat\
\ surel yang terdaftarkan pada akun ini."
requestAccountDelete: "Minta penghapusan akun" requestAccountDelete: "Minta penghapusan akun"
started: "Penghapusan telah dimulai" started: "Penghapusan telah dimulai"
inProgress: "Penghapusan sedang dalam proses" inProgress: "Penghapusan sedang dalam proses"
@ -878,9 +961,13 @@ _ad:
back: "Kembali" back: "Kembali"
reduceFrequencyOfThisAd: "Tampilkan iklan ini lebih sedikit" reduceFrequencyOfThisAd: "Tampilkan iklan ini lebih sedikit"
_forgotPassword: _forgotPassword:
enterEmail: "Masukkan alamat surel yang kamu gunakan pada saat mendaftar. Sebuah tautan untuk mengatur ulang kata sandi kamu akan dikirimkan ke alamat surel tersebut." enterEmail: "Masukkan alamat surel yang kamu gunakan pada saat mendaftar. Sebuah\
ifNoEmail: "Apabila kamu tidak menggunakan surel pada saat pendaftaran, mohon hubungi admin segera." \ tautan untuk mengatur ulang kata sandi kamu akan dikirimkan ke alamat surel\
contactAdmin: "Instansi ini tidak mendukung menggunakan alamat surel, mohon kontak admin untuk mengatur ulang password kamu." \ tersebut."
ifNoEmail: "Apabila kamu tidak menggunakan surel pada saat pendaftaran, mohon hubungi\
\ admin segera."
contactAdmin: "Instansi ini tidak mendukung menggunakan alamat surel, mohon kontak\
\ admin untuk mengatur ulang password kamu."
_gallery: _gallery:
my: "Postingan saya" my: "Postingan saya"
liked: "Postingan yang disukai" liked: "Postingan yang disukai"
@ -902,13 +989,15 @@ _registry:
domain: "Domain" domain: "Domain"
createKey: "Buat kunci" createKey: "Buat kunci"
_aboutMisskey: _aboutMisskey:
about: "Misskey adalah perangkat lunak sumber terbuka yang sedang dikembangkan oleh syuilo sejak 2014." about: "Calckey adalah perangkat lunak sumber terbuka yang sedang dikembangkan oleh\
\ syuilo sejak 2014."
contributors: "Kontributor utama" contributors: "Kontributor utama"
allContributors: "Seluruh kontributor" allContributors: "Seluruh kontributor"
source: "Sumber kode" source: "Sumber kode"
translation: "Terjemahkan Misskey" translation: "Terjemahkan Calckey"
donate: "Donasi ke Misskey" donate: "Donasi ke Calckey"
morePatrons: "Kami sangat mengapresiasi dukungan dari banyak penolong lain yang tidak tercantum disini. Terima kasih! 🥰" morePatrons: "Kami sangat mengapresiasi dukungan dari banyak penolong lain yang\
\ tidak tercantum disini. Terima kasih! \U0001F970"
patrons: "Pendukung" patrons: "Pendukung"
_nsfw: _nsfw:
respect: "Sembunyikan media NSFW" respect: "Sembunyikan media NSFW"
@ -916,10 +1005,12 @@ _nsfw:
force: "Sembunyikan semua media" force: "Sembunyikan semua media"
_mfm: _mfm:
cheatSheet: "Contekan MFM" cheatSheet: "Contekan MFM"
intro: "MFM adalah Misskey-exclusive Markup Language yang dapat digunakan di banyak tempat. Berikut kamu bisa melihat daftar dari syntax MFM yang ada." intro: "MFM adalah Calckey-exclusive Markup Language yang dapat digunakan di banyak\
dummy: "Misskey membentangkan dunia Fediverse" \ tempat. Berikut kamu bisa melihat daftar dari syntax MFM yang ada."
dummy: "Calckey membentangkan dunia Fediverse"
mention: "Sebut" mention: "Sebut"
mentionDescription: "Kamu dapat menentukan pengguna tertentu dengan menggunakan simbol-At dan nama engguna mereka." mentionDescription: "Kamu dapat menentukan pengguna tertentu dengan menggunakan\
\ simbol-At dan nama engguna mereka."
hashtag: "Tagar" hashtag: "Tagar"
hashtagDescription: "Kamu dapat menentukan tagar dengan menggunakan angka dan teks." hashtagDescription: "Kamu dapat menentukan tagar dengan menggunakan angka dan teks."
url: "URL" url: "URL"
@ -935,15 +1026,18 @@ _mfm:
inlineCode: "Kode (Dalam baris)" inlineCode: "Kode (Dalam baris)"
inlineCodeDescription: "Menampilkan sorotan sintaks dalam baris untuk kode(program-)." inlineCodeDescription: "Menampilkan sorotan sintaks dalam baris untuk kode(program-)."
blockCode: "Kode (Blok)" blockCode: "Kode (Blok)"
blockCodeDescription: "Menampilkan sorotan sintaks untuk kode(program-) multi baris dalam sebuah blok." blockCodeDescription: "Menampilkan sorotan sintaks untuk kode(program-) multi baris\
\ dalam sebuah blok."
inlineMath: "Matematika (Dalam baris)" inlineMath: "Matematika (Dalam baris)"
inlineMathDescription: "Menampilkan formula matematika (KaTeX) dalam baris." inlineMathDescription: "Menampilkan formula matematika (KaTeX) dalam baris."
blockMath: "Matematika (Blok)" blockMath: "Matematika (Blok)"
blockMathDescription: "Menampilkan formula matematika (KaTeX) multibaris dalam sebuah blok." blockMathDescription: "Menampilkan formula matematika (KaTeX) multibaris dalam sebuah\
\ blok."
quote: "Kutip" quote: "Kutip"
quoteDescription: "Menampilkan konten sebagai kutipan." quoteDescription: "Menampilkan konten sebagai kutipan."
emoji: "Emoji kustom" emoji: "Emoji kustom"
emojiDescription: "Emoji kustom dapat ditampilkan dengan mengurung nama emoji kustom menggunakan tanda titik dua." emojiDescription: "Emoji kustom dapat ditampilkan dengan mengurung nama emoji kustom\
\ menggunakan tanda titik dua."
search: "Penelusuran" search: "Penelusuran"
searchDescription: "Menampilkan kotak pencarian dengan teks yang sudah dimasukkan." searchDescription: "Menampilkan kotak pencarian dengan teks yang sudah dimasukkan."
flip: "Balik" flip: "Balik"
@ -969,7 +1063,8 @@ _mfm:
x4: "Sangat besar" x4: "Sangat besar"
x4Description: "Tampilka konten menjadi sangat besar." x4Description: "Tampilka konten menjadi sangat besar."
blur: "Buram" blur: "Buram"
blurDescription: "Konten dapat diburamkan dengan efek ini. Konten dapat ditampilkan dengan jelas dengan melayangkan kursor tetikus di atasnya." blurDescription: "Konten dapat diburamkan dengan efek ini. Konten dapat ditampilkan\
\ dengan jelas dengan melayangkan kursor tetikus di atasnya."
font: "Font" font: "Font"
fontDescription: "Setel font yang ditampilkan untuk konten." fontDescription: "Setel font yang ditampilkan untuk konten."
rainbow: "Pelangi" rainbow: "Pelangi"
@ -1003,15 +1098,21 @@ _menuDisplay:
hide: "Sembunyikan" hide: "Sembunyikan"
_wordMute: _wordMute:
muteWords: "Kata yang dibisukan" muteWords: "Kata yang dibisukan"
muteWordsDescription: "Pisahkan dengan spasi untuk kondisi AND. Pisahkan dengan baris baru untuk kondisi OR." muteWordsDescription: "Pisahkan dengan spasi untuk kondisi AND. Pisahkan dengan\
muteWordsDescription2: "Kurung kata kunci dengan garis miring untuk menggunakan regular expressions." \ baris baru untuk kondisi OR."
muteWordsDescription2: "Kurung kata kunci dengan garis miring untuk menggunakan\
\ regular expressions."
softDescription: "Sembunyikan catatan yang memenuhi aturan kondisi dari linimasa." softDescription: "Sembunyikan catatan yang memenuhi aturan kondisi dari linimasa."
hardDescription: "Cegah catatan memenuhi aturan kondisi dari ditambahkan ke linimasa. Dengan tambahan, catatan berikut tidak akan ditambahkan ke linimasa meskipun jika kondisi tersebut diubah." hardDescription: "Cegah catatan memenuhi aturan kondisi dari ditambahkan ke linimasa.\
\ Dengan tambahan, catatan berikut tidak akan ditambahkan ke linimasa meskipun\
\ jika kondisi tersebut diubah."
soft: "Lembut" soft: "Lembut"
hard: "Keras" hard: "Keras"
mutedNotes: "Catatan yang dibisukan" mutedNotes: "Catatan yang dibisukan"
_instanceMute: _instanceMute:
instanceMuteDescription: "Pengaturan ini akan membisukan note/renote apa saja dari instansi yang terdaftar, termasuk pengguna yang membalas pengguna lain dalam instansi yang dibisukan." instanceMuteDescription: "Pengaturan ini akan membisukan note/renote apa saja dari\
\ instansi yang terdaftar, termasuk pengguna yang membalas pengguna lain dalam\
\ instansi yang dibisukan."
instanceMuteDescription2: "Pisah dengan baris baru" instanceMuteDescription2: "Pisah dengan baris baru"
title: "Sembunyikan note dari instansi terdaftar." title: "Sembunyikan note dari instansi terdaftar."
heading: "Daftar instansi yang akan dibisukan" heading: "Daftar instansi yang akan dibisukan"
@ -1043,7 +1144,8 @@ _theme:
darken: "Mengelamkan" darken: "Mengelamkan"
lighten: "Menerangkan" lighten: "Menerangkan"
inputConstantName: "Masukkan nama untuk konstanta" inputConstantName: "Masukkan nama untuk konstanta"
importInfo: "Jika kamu memasukkan kode tema disini, kamu dapat mengimpornya ke penyunting tema" importInfo: "Jika kamu memasukkan kode tema disini, kamu dapat mengimpornya ke penyunting\
\ tema"
deleteConstantConfirm: "apakah kamu ingin menghapus konstanta {const}?" deleteConstantConfirm: "apakah kamu ingin menghapus konstanta {const}?"
keys: keys:
accent: "Aksen" accent: "Aksen"
@ -1113,38 +1215,58 @@ _time:
hour: "jam" hour: "jam"
day: "hari" day: "hari"
_tutorial: _tutorial:
title: "Cara menggunakan Misskey" title: "Cara menggunakan Calckey"
step1_1: "Selamat datang!" step1_1: "Selamat datang!"
step1_2: "Halaman ini disebut \"linimasa\". Halaman ini menampilkan \"catatan\" yang diurutkan secara kronologis dari orang-orang yang kamu \"ikuti\"." step1_2: "Halaman ini disebut \"linimasa\". Halaman ini menampilkan \"catatan\"\
step1_3: "Linimasa kamu kosong, karena kamu belum mencatat catatan apapun atau mengikuti siapapun." \ yang diurutkan secara kronologis dari orang-orang yang kamu \"ikuti\"."
step2_1: "Selesaikan menyetel profilmu sebelum menulis sebuah catatan atau mengikuti seseorang." step1_3: "Linimasa kamu kosong, karena kamu belum mencatat catatan apapun atau mengikuti\
step2_2: "Menyediakan beberapa informasi tentang siapa kamu akan membuat orang lain mudah untuk mengikutimu kembali." \ siapapun."
step3_1: "Selesai menyetel profil kamu?" step2_1: "Selesaikan menyetel profilmu sebelum menulis sebuah catatan atau mengikuti\
step3_2: "Langkah selanjutnya adalah membuat catatan. Kamu bisa lakukan ini dengan mengklik ikon pensil pada layar kamu." \ seseorang."
step3_3: "Isilah di dalam modal dan tekan tombol pada atas kanan untuk memcatat catatan kamu." step2_2: "Menyediakan beberapa informasi tentang siapa kamu akan membuat orang lain\
step3_4: "Bingung tidak berpikiran untuk mengatakan sesuatu? Coba saja \"baru aja ikutan bikin akun misskey punyaku\"!" \ mudah untuk mengikutimu kembali."
step3_1: "Sekarang saatnya mengikuti beberapa orang!"
step3_2: "Langkah selanjutnya adalah membuat catatan. Kamu bisa lakukan ini dengan\
\ mengklik ikon pensil pada layar kamu."
step3_3: "Isilah di dalam modal dan tekan tombol pada atas kanan untuk memcatat\
\ catatan kamu."
step3_4: "Bingung tidak berpikiran untuk mengatakan sesuatu? Coba saja \"baru aja\
\ ikutan bikin akun misskey punyaku\"!"
step4_1: "Selesai mencatat catatan pertamamu?" step4_1: "Selesai mencatat catatan pertamamu?"
step4_2: "Horee! Sekarang catatan pertamamu sudah ditampilkan di linimasa milikmu." step4_2: "Horee! Sekarang catatan pertamamu sudah ditampilkan di linimasa milikmu."
step5_1: "Sekarang, mari mencoba untuk membuat linimasamu lebih hidup dengan mengikuti orang lain." step5_1: "Sekarang, mari mencoba untuk membuat linimasamu lebih hidup dengan mengikuti\
step5_2: "{featured} akan memperlihatkan catatan yang sedang tren saat ini untuk kamu. {explore} akan membantumu untuk mencari pengguna yang sedang tren juga saat ini. Coba ikuti seseorang yang kamu suka!" \ orang lain."
step5_3: "Untuk mengikuti pengguna lain, klik pada ikon mereka dan tekan tombol follow pada profil mereka." step5_2: "{featured} akan memperlihatkan catatan yang sedang tren saat ini untuk\
step5_4: "Jika pengguna lain memiliki ikon gembok di sebelah nama mereka, maka pengguna rersebut harus menyetujui permintaan mengikuti dari kamu secara manual." \ kamu. {explore} akan membantumu untuk mencari pengguna yang sedang tren juga\
\ saat ini. Coba ikuti seseorang yang kamu suka!"
step5_3: "Untuk mengikuti pengguna lain, klik pada ikon mereka dan tekan tombol\
\ follow pada profil mereka."
step5_4: "Jika pengguna lain memiliki ikon gembok di sebelah nama mereka, maka pengguna\
\ rersebut harus menyetujui permintaan mengikuti dari kamu secara manual."
step6_1: "Sekarang kamu dapat melihat catatan pengguna lain pada linimasamu." step6_1: "Sekarang kamu dapat melihat catatan pengguna lain pada linimasamu."
step6_2: "Kamu juga bisa memberikan \"reaksi\" ke catatan orang lain untuk merespon dengan cepat." step6_2: "Kamu juga bisa memberikan \"reaksi\" ke catatan orang lain untuk merespon\
step6_3: "Untuk memberikan \"reaksi\", tekan tanda \"+\" pada catatan pengguna lain dan pilih emoji yang kamu suka untuk memberikan reaksimu kepada mereka." \ dengan cepat."
step7_1: "Yay, Selamat! Kamu sudah menyelesaikan tutorial dasar Misskey." step6_3: "Untuk memberikan \"reaksi\", tekan tanda \"+\" pada catatan pengguna lain\
step7_2: "Jika kamu ingin mempelajari lebih lanjut tentang Misskey, cobalah berkunjung ke bagian {help}." \ dan pilih emoji yang kamu suka untuk memberikan reaksimu kepada mereka."
step7_3: "Semoga berhasil dan bersenang-senanglah! 🚀" step7_1: "Yay, Selamat! Kamu sudah menyelesaikan tutorial dasar Calckey."
step7_2: "Jika kamu ingin mempelajari lebih lanjut tentang Calckey, cobalah berkunjung\
\ ke bagian {help}."
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" registerDevice: "Daftarkan perangkat baru"
registerKey: "Daftarkan kunci keamanan baru" registerKey: "Daftarkan kunci keamanan baru"
step1: "Pertama, pasang aplikasi otentikasi (seperti {a} atau {b}) di perangkat kamu." step1: "Pertama, pasang aplikasi otentikasi (seperti {a} atau {b}) di perangkat\
\ kamu."
step2: "Lalu, pindai kode QR yang ada di layar." step2: "Lalu, pindai kode QR yang ada di layar."
step2Url: "Di aplikasi desktop, masukkan URL berikut:" step2Url: "Di aplikasi desktop, masukkan URL berikut:"
step3: "Masukkan token yang telah disediakan oleh aplikasimu untuk menyelesaikan pemasangan." step3: "Masukkan token yang telah disediakan oleh aplikasimu untuk menyelesaikan\
step4: "Mulai sekarang, upaya login apapun akan meminta token login dari aplikasi otentikasi kamu." \ pemasangan."
securityKeyInfo: "Kamu dapat memasang otentikasi WebAuthN untuk mengamankan proses login lebih lanjut dengan tidak hanya perangkat keras kunci keamanan yang mendukung FIDO2, namun juga sidik jari atau otentikasi PIN pada perangkatmu." step4: "Mulai sekarang, upaya login apapun akan meminta token login dari aplikasi\
\ otentikasi kamu."
securityKeyInfo: "Kamu dapat memasang otentikasi WebAuthN untuk mengamankan proses\
\ login lebih lanjut dengan tidak hanya perangkat keras kunci keamanan yang mendukung\
\ FIDO2, namun juga sidik jari atau otentikasi PIN pada perangkatmu."
_permissions: _permissions:
"read:account": "Lihat informasi akun" "read:account": "Lihat informasi akun"
"write:account": "Sunting informasi akun" "write:account": "Sunting informasi akun"
@ -1180,7 +1302,8 @@ _permissions:
"write:gallery-likes": "Sunting daftar postingan galeri yang disukai" "write:gallery-likes": "Sunting daftar postingan galeri yang disukai"
_auth: _auth:
shareAccess: "Apakah kamu ingin mengijinkan \"{name}\" untuk mengakses akun ini?" shareAccess: "Apakah kamu ingin mengijinkan \"{name}\" untuk mengakses akun ini?"
shareAccessAsk: "Apakah kamu ingin mengijinkan aplikasi ini untuk mengakses akun kamu?" shareAccessAsk: "Apakah kamu ingin mengijinkan aplikasi ini untuk mengakses akun\
\ kamu?"
permissionAsk: "Aplikasi ini membutuhkan beberapa ijin, yaitu:" permissionAsk: "Aplikasi ini membutuhkan beberapa ijin, yaitu:"
pleaseGoBack: "Mohon kembali ke aplikasi kamu" pleaseGoBack: "Mohon kembali ke aplikasi kamu"
callback: "Mengembalikan kamu ke aplikasi" callback: "Mengembalikan kamu ke aplikasi"
@ -1275,7 +1398,8 @@ _profile:
youCanIncludeHashtags: "Kamu juga dapat menambahkan tagar ke dalam bio." youCanIncludeHashtags: "Kamu juga dapat menambahkan tagar ke dalam bio."
metadata: "Informasi tambahan" metadata: "Informasi tambahan"
metadataEdit: "Sunting informasi tambahan" metadataEdit: "Sunting informasi tambahan"
metadataDescription: "Kamu dapat menampilkan hingga 4 bagian informasi tambahan ke dalam profilmu." metadataDescription: "Kamu dapat menampilkan hingga 4 bagian informasi tambahan\
\ ke dalam profilmu."
metadataLabel: "Label" metadataLabel: "Label"
metadataContent: "Isi" metadataContent: "Isi"
changeAvatar: "Ubah avatar" changeAvatar: "Ubah avatar"
@ -1596,7 +1720,8 @@ _pages:
_for: _for:
arg1: "Jumlah angka untuk diulangi" arg1: "Jumlah angka untuk diulangi"
arg2: "Aksi" arg2: "Aksi"
typeError: "Slot {slot} menerima tipe \"{expect}\", sayangnya nilai yang disediakan adalah \"{actual}\"!" typeError: "Slot {slot} menerima tipe \"{expect}\", sayangnya nilai yang disediakan\
\ adalah \"{actual}\"!"
thereIsEmptySlot: "Slot {slot} kosong!" thereIsEmptySlot: "Slot {slot} kosong!"
types: types:
string: "Teks" string: "Teks"

View file

@ -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 = [] let languages = [];
let languages_custom = [] let 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
),
{},
);

View file

@ -1,7 +1,7 @@
--- ---
_lang_: "Italiano" _lang_: "Italiano"
headlineMisskey: "Rete collegata tramite note" headlineMisskey: "Rete collegata tramite note"
introMisskey: "Benvenut@! Misskey è 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"
@ -139,7 +139,7 @@ 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 dinterazione senza fine con altri bot, e di adeguare i sistemi interni di Misskey 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 dinterazione 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"
@ -175,7 +175,6 @@ operations: "Operazioni"
software: "Software" software: "Software"
version: "Versione" version: "Versione"
metadata: "Metadato" metadata: "Metadato"
withNFiles: "{n} file in allegato"
monitor: "Monitorare" monitor: "Monitorare"
jobQueue: "Coda di lavoro" jobQueue: "Coda di lavoro"
cpuAndMemory: "CPU e Memoria" cpuAndMemory: "CPU e Memoria"
@ -197,7 +196,7 @@ noUsers: "Nessun utente trovato"
editProfile: "Modifica profilo" editProfile: "Modifica profilo"
noteDeleteConfirm: "Eliminare questo Nota?" noteDeleteConfirm: "Eliminare questo Nota?"
pinLimitExceeded: "Non puoi fissare altre note " pinLimitExceeded: "Non puoi fissare altre note "
intro: "L'installazione di Misskey è finita! Si prega di creare un account amministratore." intro: "L'installazione di Calckey è finita! Si prega di creare un account amministratore."
done: "Fine" done: "Fine"
processing: "In elaborazione" processing: "In elaborazione"
preview: "Anteprima" preview: "Anteprima"
@ -373,7 +372,7 @@ exploreFediverse: "Esplora il Fediverso"
popularTags: "Tag di tendenza" popularTags: "Tag di tendenza"
userList: "Liste" userList: "Liste"
about: "Informazioni" about: "Informazioni"
aboutMisskey: "Informazioni di Misskey" aboutMisskey: "Informazioni di Calckey"
administrator: "Amministratore" administrator: "Amministratore"
token: "Token" token: "Token"
twoStepAuthentication: "Autenticazione a due fattori" twoStepAuthentication: "Autenticazione a due fattori"
@ -518,7 +517,7 @@ 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 Misskey." 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"
@ -686,7 +685,7 @@ 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 Misskey 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"
@ -773,7 +772,7 @@ hashtags: "Hashtag"
troubleshooting: "Risoluzione problemi" troubleshooting: "Risoluzione problemi"
useBlurEffect: "Utilizza effetto sfocatura per l'interfaccia utente" useBlurEffect: "Utilizza effetto sfocatura per l'interfaccia utente"
learnMore: "Più dettagli" learnMore: "Più dettagli"
misskeyUpdated: "Misskey è stato aggiornato!" misskeyUpdated: "Calckey è stato aggiornato!"
whatIsNew: "Visualizza le informazioni sull'aggiornamento" whatIsNew: "Visualizza le informazioni sull'aggiornamento"
translate: "Traduzione" translate: "Traduzione"
translatedFrom: "Tradotto da {x}" translatedFrom: "Tradotto da {x}"
@ -865,8 +864,8 @@ _aboutMisskey:
contributors: "Principali sostenitori" contributors: "Principali sostenitori"
allContributors: "Tutti i sostenitori" allContributors: "Tutti i sostenitori"
source: "Codice sorgente" source: "Codice sorgente"
translation: "Tradurre Misskey" translation: "Tradurre Calckey"
donate: "Sostieni Misskey" 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:
@ -875,8 +874,8 @@ _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 Misskey. 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 Misskey" 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"
@ -910,6 +909,8 @@ _mfm:
fontDescription: "Puoi scegliere il tipo di carattere per il contenuto." fontDescription: "Puoi scegliere il tipo di carattere per il contenuto."
rainbow: "Arcobaleno" rainbow: "Arcobaleno"
rotate: "Ruota" rotate: "Ruota"
fade: "Dissolvenza"
fadeDescription: "Dissolvenza in entrata e in uscita del contenuto."
_instanceTicker: _instanceTicker:
none: "Nascondi" none: "Nascondi"
remote: "Mostra solo per gli/le utenti remotə" remote: "Mostra solo per gli/le utenti remotə"

View file

@ -52,7 +52,7 @@ sendMessage: "メッセージを送信"
copyUsername: "ユーザー名をコピー" copyUsername: "ユーザー名をコピー"
searchUser: "ユーザーを検索" searchUser: "ユーザーを検索"
reply: "返信" reply: "返信"
loadMore: "もっと見る" loadMore: "もっと読み込む"
showMore: "もっと見る" showMore: "もっと見る"
showLess: "閉じる" showLess: "閉じる"
youGotNewFollower: "フォローされました" youGotNewFollower: "フォローされました"
@ -66,7 +66,7 @@ import: "インポート"
export: "エクスポート" export: "エクスポート"
files: "ファイル" files: "ファイル"
download: "ダウンロード" download: "ダウンロード"
driveFileDeleteConfirm: "ファイル「{name}」を削除しますか?このファイルを添付した投稿も消えます。" driveFileDeleteConfirm: "ファイル「{name}」を削除しますか?これにより、このファイルが添付されている投稿も削除されます。"
unfollowConfirm: "{name}さんのフォローを解除しますか?" unfollowConfirm: "{name}さんのフォローを解除しますか?"
exportRequested: "エクスポートをリクエストしました。これには時間がかかる場合があります。エクスポートが終わると、「ドライブ」に追加されます。" exportRequested: "エクスポートをリクエストしました。これには時間がかかる場合があります。エクスポートが終わると、「ドライブ」に追加されます。"
importRequested: "インポートをリクエストしました。これには時間がかかる場合があります。" importRequested: "インポートをリクエストしました。これには時間がかかる場合があります。"
@ -188,7 +188,6 @@ operations: "操作"
software: "ソフトウェア" software: "ソフトウェア"
version: "バージョン" version: "バージョン"
metadata: "メタデータ" metadata: "メタデータ"
withNFiles: "{n}つのファイル"
monitor: "モニター" monitor: "モニター"
jobQueue: "ジョブキュー" jobQueue: "ジョブキュー"
cpuAndMemory: "CPUとメモリ" cpuAndMemory: "CPUとメモリ"
@ -619,6 +618,9 @@ regexpErrorDescription: "{tab}ワードミュートの{line}行目の正規表
instanceMute: "インスタンスミュート" instanceMute: "インスタンスミュート"
userSaysSomething: "{name}が何かを言いました" userSaysSomething: "{name}が何かを言いました"
userSaysSomethingReason: "{name}が{reason}と言いました" userSaysSomethingReason: "{name}が{reason}と言いました"
userSaysSomethingReasonReply: "{name}が{reason}を含む投稿に返信しました"
userSaysSomethingReasonRenote: "{name}が{reason}を含む投稿をブーストしました"
userSaysSomethingReasonQuote: "{name}が{reason}を含む投稿を引用しました"
makeActive: "アクティブにする" makeActive: "アクティブにする"
display: "表示" display: "表示"
copy: "コピー" copy: "コピー"
@ -812,7 +814,7 @@ customCssWarn: "この設定は必ず知識のある方が行ってください
global: "グローバル" global: "グローバル"
recommended: "推奨" recommended: "推奨"
squareAvatars: "アイコンを四角形で表示" squareAvatars: "アイコンを四角形で表示"
seperateRenoteQuote: "ブーストと引用ボタンを分ける" seperateRenoteQuote: "ブーストと引用ボタンを分ける"
sent: "送信" sent: "送信"
received: "受信" received: "受信"
searchResult: "検索結果" searchResult: "検索結果"
@ -942,7 +944,7 @@ customSplashIconsDescription: "ユーザがページをロード/リロードす
\ URL。画像は静的なURLで、できればすべて192x192にリサイズしてください。" \ URL。画像は静的なURLで、できればすべて192x192にリサイズしてください。"
showUpdates: "Calckeyの更新時にポップアップを表示する" showUpdates: "Calckeyの更新時にポップアップを表示する"
recommendedInstances: "おすすめインスタンス" recommendedInstances: "おすすめインスタンス"
recommendedInstancesDescription: "おすすめタイムラインに表示される、改行で区切られたインスタンス。`https://`を追加しないでください。ドメインのみを追加してください。" recommendedInstancesDescription: "おすすめタイムラインに表示するインスタンスを改行区切りで入力してください。`https://`は書かず、ドメインのみを入力してください。"
caption: "自動キャプション" caption: "自動キャプション"
splash: "スプラッシュスクリーン" splash: "スプラッシュスクリーン"
updateAvailable: "アップデートがありますよ!" updateAvailable: "アップデートがありますよ!"
@ -959,17 +961,21 @@ moveFrom: "別のアカウントからこのアカウントに引っ越す"
moveFromLabel: "引っ越し元のアカウント:" moveFromLabel: "引っ越し元のアカウント:"
moveFromDescription: "別のアカウントからこのアカウントにフォロワーを引き継いで引っ越したい場合、ここでエイリアスを作成しておく必要があります。必ず引っ越しを実行する前に作成してください!引っ越し元のアカウントをこのように入力してください:@person@instance.com" moveFromDescription: "別のアカウントからこのアカウントにフォロワーを引き継いで引っ越したい場合、ここでエイリアスを作成しておく必要があります。必ず引っ越しを実行する前に作成してください!引っ越し元のアカウントをこのように入力してください:@person@instance.com"
migrationConfirm: "本当にこのアカウントを {account} に引っ越しますか?一度引っ越しを行うと取り消せず、二度とこのアカウントを元の状態で使用できなくなります。\n\ migrationConfirm: "本当にこのアカウントを {account} に引っ越しますか?一度引っ越しを行うと取り消せず、二度とこのアカウントを元の状態で使用できなくなります。\n\
また、引っ越し先のアカウントでエイリアスを作成したことを確認してください。" この操作を行う前に引っ越し先のアカウントでエイリアスを作成する必要があります。エイリアスが作成されているか、必ず確認してください。"
defaultReaction: "リモートとローカルの投稿に対するデフォルトの絵文字リアクション" defaultReaction: "リモートとローカルの投稿に対するデフォルトの絵文字リアクション"
license: "ライセンス" license: "ライセンス"
indexPosts: "投稿をインデックス" indexPosts: "投稿をインデックス"
indexFrom: "この投稿ID以降をインデックスする空白で全ての投稿を指定します" indexFrom: "この投稿ID以降をインデックスする"
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による学習を防止"
preventAiLearningDescription: "投稿したート、添付した画像などのコンテンツを学習の対象にしないようAIに要求します。これはnoaiフラグをHTMLレスポンスに含めることによって実現されます。"
noGraze: "ブラウザの拡張機能「Graze for Mastodon」は、Calckeyの動作を妨げるため、無効にしてください。"
_sensitiveMediaDetection: _sensitiveMediaDetection:
description: "機械学習を使って自動でセンシティブなメディアを検出し、モデレーションに役立てられます。サーバーの負荷が少し増えます。" description: "機械学習を使って自動でセンシティブなメディアを検出し、モデレーションに役立てられます。サーバーの負荷が少し増えます。"
@ -1125,6 +1131,17 @@ _mfm:
plain: "プレーン" plain: "プレーン"
plainDescription: "内側の構文を全て無効にします。" plainDescription: "内側の構文を全て無効にします。"
position: 位置 position: 位置
stop: MFMアニメーションを停止
alwaysPlay: MFMアニメーションを自動再生する
play: MFMアニメーションを再生
warn: MFMアニメーションは激しい動きを含む可能性があります。
positionDescription: 位置を指定した値だけずらします。
foreground: 文字色
backgroundDescription: 背景の色を変更します。
background: 背景色
scale: 拡大・縮小
scaleDescription: 大きさを指定した値に拡大・縮小します。
foregroundDescription: 文字の色を変更します。
_instanceTicker: _instanceTicker:
none: "表示しない" none: "表示しない"
remote: "リモートユーザーに表示" remote: "リモートユーザーに表示"
@ -1144,6 +1161,8 @@ _channel:
following: "フォロー中" following: "フォロー中"
usersCount: "{n}人が参加中" usersCount: "{n}人が参加中"
notesCount: "{n}投稿があります" notesCount: "{n}投稿があります"
nameAndDescription: "名前と説明"
nameOnly: "名前のみ"
_messaging: _messaging:
dms: "プライベート" dms: "プライベート"
groups: "グループ" groups: "グループ"
@ -1832,23 +1851,18 @@ _deck:
list: "リスト" list: "リスト"
mentions: "あなた宛て" mentions: "あなた宛て"
direct: "ダイレクト" direct: "ダイレクト"
_apps:
apps: "アプリ"
crossPlatform: "クロスプラットフォーム"
mobile: "モバイル"
firstParty: "ファーストパーティ"
firstClass: "対応度◎"
secondClass: "対応度○"
thirdClass: "対応度△"
free: "無料"
paid: "有料"
pwa: "PWAをインストール"
kaiteki: "Kaiteki"
milktea: "Milktea"
missLi: "MissLi"
mona: "Mona"
theDesk: "TheDesk"
lesskey: "Lesskey"
noteId: 投稿のID noteId: 投稿のID
hiddenTagsDescription: 'トレンドと「みつける」から除外したいハッシュタグを(先頭の # を除いて)改行区切りで入力してください。この設定はトレンドと「みつける」以外には影響しません。' hiddenTagsDescription: 'トレンドと「みつける」から除外したいハッシュタグを(先頭の # を除いて)改行区切りで入力してください。この設定はトレンドと「みつける」以外には影響しません。'
hiddenTags: 非表示にするハッシュタグ hiddenTags: 非表示にするハッシュタグ
apps: "アプリ"
_experiments:
enablePostEditing: 投稿の編集機能を有効にする
title: 試験的な機能
postEditingCaption: 投稿のメニューに既存の投稿を編集するボタンを表示します。
sendModMail: モデレーションノートを送る
deleted: 削除済み
editNote: 投稿を編集
edited: 編集済み
signupsDisabled:
現在、このサーバーでは新規登録が一般開放されていません。招待コードをお持ちの場合には、以下の欄に入力してください。招待コードをお持ちでない場合にも、新規登録を開放している他のサーバーには入れますよ!
findOtherInstance: 他のサーバーを探す

View file

@ -177,7 +177,6 @@ operations: "操作"
software: "ソフトウェア" software: "ソフトウェア"
version: "バージョン" version: "バージョン"
metadata: "メタデータ" metadata: "メタデータ"
withNFiles: "{n}個のファイル"
monitor: "モニター" monitor: "モニター"
jobQueue: "ジョブキュー" jobQueue: "ジョブキュー"
cpuAndMemory: "CPUとメモリ" cpuAndMemory: "CPUとメモリ"

View file

@ -1,6 +1,6 @@
--- ---
_lang_: "ಕನ್ನಡ" _lang_: "ಕನ್ನಡ"
introMisskey: "ಸ್ವಾಗತ! Misskey ಓಪನ್ ಸೋರ್ಸ್ ಒಕ್ಕೂಟ ಮೈಕ್ರೋಬ್ಲಾಗಿಂಗ್ ಸೇವೆಯಾಗಿದೆ.\n ಏನಾಗುತ್ತಿದೆ ಎಂಬುದನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಅಥವಾ ನಿಮ್ಮ ಬಗ್ಗೆ ಎಲ್ಲರಿಗೂ ಹೇಳಲು \"ಟಿಪ್ಪಣಿ\"ಗಳನ್ನು ರಚಿಸಿ📡\n \"ಸ್ಪಂದನೆ\" ಕ್ರಿಯೆಯೊಂದಿಗೆ, ನೀವು ಎಲ್ಲರ ಟಿಪ್ಪಣಿಗಳಿಗೆ ತ್ವರಿತವಾಗಿ ಸ್ಪಂದನೆಗಳನ್ನು ಕೂಡ ಸೇರಿಸಬಹುದು.👍\n ಹೊಸ ಜಗತ್ತನ್ನು ಅನ್ವೇಷಿಸಿ🚀" introMisskey: "ಸ್ವಾಗತ! Calckey ಓಪನ್ ಸೋರ್ಸ್ ಒಕ್ಕೂಟ ಮೈಕ್ರೋಬ್ಲಾಗಿಂಗ್ ಸೇವೆಯಾಗಿದೆ.\n ಏನಾಗುತ್ತಿದೆ ಎಂಬುದನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಅಥವಾ ನಿಮ್ಮ ಬಗ್ಗೆ ಎಲ್ಲರಿಗೂ ಹೇಳಲು \"ಟಿಪ್ಪಣಿ\"ಗಳನ್ನು ರಚಿಸಿ📡\n \"ಸ್ಪಂದನೆ\" ಕ್ರಿಯೆಯೊಂದಿಗೆ, ನೀವು ಎಲ್ಲರ ಟಿಪ್ಪಣಿಗಳಿಗೆ ತ್ವರಿತವಾಗಿ ಸ್ಪಂದನೆಗಳನ್ನು ಕೂಡ ಸೇರಿಸಬಹುದು.👍\n ಹೊಸ ಜಗತ್ತನ್ನು ಅನ್ವೇಷಿಸಿ🚀"
monthAndDay: "{month}ನೇ ತಿಂಗಳ {day}ನೇ ದಿನ" monthAndDay: "{month}ನೇ ತಿಂಗಳ {day}ನೇ ದಿನ"
search: "ಹುಡುಕು" search: "ಹುಡುಕು"
notifications: "ಅಧಿಸೂಚನೆಗಳು" notifications: "ಅಧಿಸೂಚನೆಗಳು"

View file

@ -1,7 +1,7 @@
--- ---
_lang_: "한국어" _lang_: "한국어"
headlineMisskey: "노트로 연결되는 네트워크" headlineMisskey: "노트로 연결되는 네트워크"
introMisskey: "환영합니다! Misskey 는 오픈 소스 분산형 마이크로 블로그 서비스입니다.\n\"노트\" 를 작성해서, 지금 일어나고 있는 일을 공유하거나, 당신만의 이야기를 모두에게 발신하세요📡\n\"리액션\" 기능으로, 친구의 노트에 총알같이 반응을 추가할 수도 있습니다👍\n새로운 세계를 탐험해 보세요🚀" introMisskey: "환영합니다! Calckey 는 오픈 소스 분산형 마이크로 블로그 서비스입니다.\n\"노트\" 를 작성해서, 지금 일어나고 있는 일을 공유하거나, 당신만의 이야기를 모두에게 발신하세요📡\n\"리액션\" 기능으로, 친구의 노트에 총알같이 반응을 추가할 수도 있습니다👍\n새로운 세계를 탐험해 보세요🚀"
monthAndDay: "{month}월 {day}일" monthAndDay: "{month}월 {day}일"
search: "검색" search: "검색"
notifications: "알림" notifications: "알림"
@ -177,7 +177,6 @@ operations: "작업"
software: "소프트웨어" software: "소프트웨어"
version: "버전" version: "버전"
metadata: "메타데이터" metadata: "메타데이터"
withNFiles: "{n}개의 파일"
monitor: "모니터" monitor: "모니터"
jobQueue: "작업 대기열" jobQueue: "작업 대기열"
cpuAndMemory: "CPU와 메모리" cpuAndMemory: "CPU와 메모리"
@ -524,7 +523,7 @@ sort: "정렬"
ascendingOrder: "오름차순" ascendingOrder: "오름차순"
descendingOrder: "내림차순" descendingOrder: "내림차순"
scratchpad: "스크래치 패드" scratchpad: "스크래치 패드"
scratchpadDescription: "스크래치 패드는 AiScript 의 테스트 환경을 제공합니다. Misskey 와 상호 작용하는 코드를 작성, 실행 및 결과를 확인할 수 있습니다." scratchpadDescription: "스크래치 패드는 AiScript 의 테스트 환경을 제공합니다. Calckey 와 상호 작용하는 코드를 작성, 실행 및 결과를 확인할 수 있습니다."
output: "출력" output: "출력"
script: "스크립트" script: "스크립트"
disablePagesScript: "Pages 에서 AiScript 를 사용하지 않음" disablePagesScript: "Pages 에서 AiScript 를 사용하지 않음"

View file

@ -1,7 +1,10 @@
---
_lang_: "Nederlands" _lang_: "Nederlands"
headlineMisskey: "Netwerk verbonden door notities" headlineMisskey: "Een open source, gedecentraliseerd, social media platform dat voor
introMisskey: "Welkom! Misskey is een open source, gedecentraliseerde microblogdienst.\nMaak \"notities\" om je gedachten te delen met iedereen om je heen. 📡\nMet \"reacties\" kun je ook snel je mening geven over berichten van anderen. 👍\nLaten we een nieuwe wereld verkennen! 🚀" altijd gratis is! 🚀"
introMisskey: "Welkom! Calckey is een open source, gedecentraliseerde microblogdienst.\n
Maak \"notities\" om je gedachten te delen met iedereen om je heen. 📡\nMet \"reacties\"\
\ kun je ook snel je mening geven over berichten van anderen. 👍\nLaten we een nieuwe
wereld verkennen! 🚀"
monthAndDay: "{day} {month}" monthAndDay: "{day} {month}"
search: "Zoeken" search: "Zoeken"
notifications: "Meldingen" notifications: "Meldingen"
@ -10,7 +13,7 @@ password: "Wachtwoord"
forgotPassword: "Wachtwoord vergeten" forgotPassword: "Wachtwoord vergeten"
fetchingAsApObject: "Ophalen vanuit de Fediverse" fetchingAsApObject: "Ophalen vanuit de Fediverse"
ok: "Ok" ok: "Ok"
gotIt: "Begrepen" gotIt: "Begrepen!"
cancel: "Annuleren" cancel: "Annuleren"
enterUsername: "Voer een gebruikersnaam in" enterUsername: "Voer een gebruikersnaam in"
renotedBy: "Hergedeeld door {user}" renotedBy: "Hergedeeld door {user}"
@ -44,15 +47,16 @@ copyContent: "Kopiëren inhoud"
copyLink: "Kopiëren link" copyLink: "Kopiëren link"
delete: "Verwijderen" delete: "Verwijderen"
deleteAndEdit: "Verwijderen en bewerken" deleteAndEdit: "Verwijderen en bewerken"
deleteAndEditConfirm: "Weet je zeker dat je deze notitie wilt verwijderen en dan bewerken? Je verliest alle reacties, herdelingen en antwoorden erop." deleteAndEditConfirm: "Weet je zeker dat je deze post wilt verwijderen en dan bewerken?
Je verliest alle reacties, boosts en antwoorden erop."
addToList: "Aan lijst toevoegen" addToList: "Aan lijst toevoegen"
sendMessage: "Verstuur bericht" sendMessage: "Verstuur bericht"
copyUsername: "Kopiëren gebruikersnaam " copyUsername: "Gebruikersnaam kopiëren"
searchUser: "Zoeken een gebruiker" searchUser: "Zoek een gebruiker"
reply: "Antwoord" reply: "Antwoord"
loadMore: "Laad meer" loadMore: "Laad meer"
showMore: "Toon meer" showMore: "Toon meer"
youGotNewFollower: "volgde jou" youGotNewFollower: "volgt jou"
receiveFollowRequest: "Volgverzoek ontvangen" receiveFollowRequest: "Volgverzoek ontvangen"
followRequestAccepted: "Volgverzoek geaccepteerd" followRequestAccepted: "Volgverzoek geaccepteerd"
mention: "Vermelding" mention: "Vermelding"
@ -63,9 +67,11 @@ import: "Import"
export: "Export" export: "Export"
files: "Bestanden" files: "Bestanden"
download: "Downloaden" download: "Downloaden"
driveFileDeleteConfirm: "Weet je zeker dat je het bestand \"{name}\" wilt verwijderen? Notities met dit bestand als bijlage worden ook verwijderd." driveFileDeleteConfirm: "Weet je zeker dat je het bestand \"{name}\" wilt verwijderen?
Posts met dit bestand als bijlage worden ook verwijderd."
unfollowConfirm: "Weet je zeker dat je {name} wilt ontvolgen?" unfollowConfirm: "Weet je zeker dat je {name} wilt ontvolgen?"
exportRequested: "Je hebt een export aangevraagd. Dit kan een tijdje duren. Het wordt toegevoegd aan je Drive zodra het is voltooid." exportRequested: "Je hebt een export aangevraagd. Dit kan een tijdje duren. Het wordt
toegevoegd aan je Drive zodra het is voltooid."
importRequested: "Je hebt een import aangevraagd. Dit kan even duren." importRequested: "Je hebt een import aangevraagd. Dit kan even duren."
lists: "Lijsten" lists: "Lijsten"
noLists: "Je hebt geen lijsten" noLists: "Je hebt geen lijsten"
@ -75,12 +81,14 @@ following: "Volgend"
followers: "Volgers" followers: "Volgers"
followsYou: "Volgt jou" followsYou: "Volgt jou"
createList: "Creëer lijst" createList: "Creëer lijst"
manageLists: "Beheren lijsten" manageLists: "Lijsten beheren"
error: "Fout" error: "Fout"
somethingHappened: "Er is iets misgegaan." somethingHappened: "Er is iets misgegaan."
retry: "Probeer opnieuw" retry: "Probeer opnieuw"
pageLoadError: "Pagina laden mislukt" pageLoadError: "Pagina laden mislukt"
pageLoadErrorDescription: "Dit wordt normaal gesproken veroorzaakt door netwerkfouten of door de cache van de browser. Probeer de cache te wissen en probeer het na een tijdje wachten opnieuw." pageLoadErrorDescription: "Dit wordt normaal gesproken veroorzaakt door netwerkfouten
of door de cache van de browser. Probeer de cache te wissen en probeer het na een
tijdje wachten opnieuw."
serverIsDead: "De server reageert niet. Wacht even en probeer het opnieuw." serverIsDead: "De server reageert niet. Wacht even en probeer het opnieuw."
youShouldUpgradeClient: "Werk je client bij om deze pagina te zien." youShouldUpgradeClient: "Werk je client bij om deze pagina te zien."
enterListName: "Voer de naam van de lijst in" enterListName: "Voer de naam van de lijst in"
@ -93,25 +101,26 @@ followRequests: "Volgverzoeken"
unfollow: "Ontvolgen" unfollow: "Ontvolgen"
followRequestPending: "Wachten op goedkeuring volgverzoek" followRequestPending: "Wachten op goedkeuring volgverzoek"
enterEmoji: "Voer een emoji in" enterEmoji: "Voer een emoji in"
renote: "Herdelen" renote: "Boost"
unrenote: "Stop herdelen" unrenote: "Boost intrekken"
renoted: "Herdeeld" renoted: "Boosted."
cantRenote: "Dit bericht kan niet worden herdeeld" cantRenote: "Dit bericht kan niet worden geboost."
cantReRenote: "Een herdeling kan niet worden herdeeld" cantReRenote: "Een boost kan niet worden geboost."
quote: "Quote" quote: "Quote"
pinnedNote: "Vastgemaakte notitie" pinnedNote: "Vastgemaakte post"
pinned: "Vastmaken aan profielpagina" pinned: "Vastmaken aan profielpagina"
you: "Jij" you: "Jij"
clickToShow: "Klik om te bekijken" clickToShow: "Klik om te bekijken"
sensitive: "NSFW" sensitive: "NSFW"
add: "Toevoegen" add: "Toevoegen"
reaction: "Reacties" reaction: "Reacties"
reactionSettingDescription2: "Sleep om opnieuw te ordenen, Klik om te verwijderen, Druk op \"+\" om toe te voegen" reactionSettingDescription2: "Sleep om opnieuw te ordenen, Klik om te verwijderen,
rememberNoteVisibility: "Vergeet niet de notitie zichtbaarheidsinstellingen" Druk op \"+\" om toe te voegen"
rememberNoteVisibility: "Onthoud post zichtbaarheidsinstellingen"
attachCancel: "Verwijder bijlage" attachCancel: "Verwijder bijlage"
markAsSensitive: "Markeren als NSFW" markAsSensitive: "Markeren als NSFW"
unmarkAsSensitive: "Geen NSFW" unmarkAsSensitive: "Geen NSFW"
enterFileName: "Invoeren bestandsnaam" enterFileName: "Bestandsnaam invoeren"
mute: "Dempen" mute: "Dempen"
unmute: "Stop dempen" unmute: "Stop dempen"
block: "Blokkeren" block: "Blokkeren"
@ -122,16 +131,21 @@ blockConfirm: "Weet je zeker dat je dit account wil blokkeren?"
unblockConfirm: "Ben je zeker dat je deze account wil blokkeren?" unblockConfirm: "Ben je zeker dat je deze account wil blokkeren?"
suspendConfirm: "Ben je zeker dat je deze account wil suspenderen?" suspendConfirm: "Ben je zeker dat je deze account wil suspenderen?"
unsuspendConfirm: "Ben je zeker dat je deze account wil opnieuw aanstellen?" unsuspendConfirm: "Ben je zeker dat je deze account wil opnieuw aanstellen?"
flagAsBot: "Markeer dit account als een robot." flagAsBot: "Markeer dit account als een robot"
flagAsBotDescription: "Als dit account van een programma wordt beheerd, zet deze vlag aan. Het aanzetten helpt andere ontwikkelaars om bijvoorbeeld onbedoelde feedback loops te doorbreken of om Misskey meer geschikt te maken." flagAsBotDescription: "Als dit account van een programma wordt beheerd, zet deze vlag
aan. Het aanzetten helpt andere ontwikkelaars om bijvoorbeeld onbedoelde feedback
loops te doorbreken of om Calckey meer geschikt te maken."
flagAsCat: "Markeer dit account als een kat." flagAsCat: "Markeer dit account als een kat."
flagAsCatDescription: "Zet deze vlag aan als je wilt aangeven dat dit account een kat is." flagAsCatDescription: "Zet deze vlag aan als je wilt aangeven dat dit account een
flagShowTimelineReplies: "Toon antwoorden op de tijdlijn." kat is."
flagShowTimelineRepliesDescription: "Als je dit vlag aanzet, toont de tijdlijn ook antwoorden op andere en niet alleen jouw eigen notities." flagShowTimelineReplies: "Toon antwoorden op de tijdlijn"
autoAcceptFollowed: "Accepteer verzoeken om jezelf te volgen vanzelf als je de verzoeker al volgt." flagShowTimelineRepliesDescription: "Als je deze vlag aanzet, toont de tijdlijn ook
antwoorden op andere en niet alleen jouw eigen post."
autoAcceptFollowed: "Accepteer verzoeken om jezelf te volgen vanzelf als je de verzoeker
al volgt"
addAccount: "Account toevoegen" addAccount: "Account toevoegen"
loginFailed: "Aanmelding mislukt." loginFailed: "Aanmelding mislukt."
showOnRemote: "Toon op de externe instantie." showOnRemote: "Bekijk op de externe server"
general: "Algemeen" general: "Algemeen"
wallpaper: "Achtergrond" wallpaper: "Achtergrond"
setWallpaper: "Achtergrond instellen" setWallpaper: "Achtergrond instellen"
@ -140,13 +154,17 @@ searchWith: "Zoeken: {q}"
youHaveNoLists: "Je hebt geen lijsten" youHaveNoLists: "Je hebt geen lijsten"
followConfirm: "Weet je zeker dat je {name} wilt volgen?" followConfirm: "Weet je zeker dat je {name} wilt volgen?"
proxyAccount: "Proxy account" proxyAccount: "Proxy account"
proxyAccountDescription: "Een proxy-account is een account dat onder bepaalde voorwaarden fungeert als externe volger voor gebruikers. Als een gebruiker bijvoorbeeld een externe gebruiker aan de lijst toevoegt, wordt de activiteit van de externe gebruiker niet aan de server geleverd als geen lokale gebruiker die gebruiker volgt, dus het proxy-account volgt in plaats daarvan." proxyAccountDescription: "Een proxy-account is een account dat onder bepaalde voorwaarden
fungeert als externe volger voor gebruikers. Als een gebruiker bijvoorbeeld een
externe gebruiker aan de lijst toevoegt, wordt de activiteit van de externe gebruiker
niet aan de server geleverd als geen lokale gebruiker die gebruiker volgt, dus het
proxy-account volgt in plaats daarvan."
host: "Server" host: "Server"
selectUser: "Kies een gebruiker" selectUser: "Kies een gebruiker"
recipient: "Ontvanger" recipient: "Ontvanger(s)"
annotation: "Reacties" annotation: "Reacties"
federation: "Federatie" federation: "Federatie"
instances: "Server" instances: "Servers"
registeredAt: "Geregistreerd op" registeredAt: "Geregistreerd op"
latestRequestSentAt: "Laatste aanvraag verstuurd" latestRequestSentAt: "Laatste aanvraag verstuurd"
latestRequestReceivedAt: "Laatste aanvraag ontvangen" latestRequestReceivedAt: "Laatste aanvraag ontvangen"
@ -161,7 +179,6 @@ operations: "Verwerkingen"
software: "Software" software: "Software"
version: "Versie" version: "Versie"
metadata: "Metadata" metadata: "Metadata"
withNFiles: "{n} bestand(en)"
monitor: "Monitor" monitor: "Monitor"
jobQueue: "Job Queue" jobQueue: "Job Queue"
cpuAndMemory: "CPU en geheugen" cpuAndMemory: "CPU en geheugen"
@ -171,19 +188,23 @@ instanceInfo: "Serverinformatie"
statistics: "Statistieken" statistics: "Statistieken"
clearQueue: "Wachtrij wissen" clearQueue: "Wachtrij wissen"
clearQueueConfirmTitle: "Weet je zeker dat je de wachtrji leeg wil maken?" clearQueueConfirmTitle: "Weet je zeker dat je de wachtrji leeg wil maken?"
clearQueueConfirmText: "Niet-bezorgde biljetten die nog in de wachtrij staan, worden niet gefedereerd. Meestal is deze operatie niet nodig." clearQueueConfirmText: "Niet-bezorgde posts die nog in de wachtrij staan, worden niet
gefedereerd. Meestal is deze operatie niet nodig."
clearCachedFiles: "Cache opschonen" clearCachedFiles: "Cache opschonen"
clearCachedFilesConfirm: "Weet je zeker dat je alle externe bestanden in de cache wilt verwijderen?" clearCachedFilesConfirm: "Weet je zeker dat je alle externe bestanden in de cache
wilt verwijderen?"
blockedInstances: "Geblokkeerde servers" blockedInstances: "Geblokkeerde servers"
blockedInstancesDescription: "Maak een lijst van de servers die moeten worden geblokkeerd, gescheiden door regeleinden. Geblokkeerde servers kunnen niet meer communiceren met deze server." blockedInstancesDescription: "Maak een lijst van de servers die moeten worden geblokkeerd,
gescheiden door regeleinden. Geblokkeerde servers kunnen niet meer communiceren
met deze server."
muteAndBlock: "Gedempt en geblokkeerd" muteAndBlock: "Gedempt en geblokkeerd"
mutedUsers: "Gedempte gebruikers" mutedUsers: "Gedempte gebruikers"
blockedUsers: "Geblokkeerde gebruikers" blockedUsers: "Geblokkeerde gebruikers"
noUsers: "Er zijn geen gebruikers." noUsers: "Er zijn geen gebruikers."
editProfile: "Bewerk Profiel" editProfile: "Bewerk Profiel"
noteDeleteConfirm: "Ben je zeker dat je dit bericht wil verwijderen?" noteDeleteConfirm: "Ben je zeker dat je deze post wil verwijderen?"
pinLimitExceeded: "Je kunt geen berichten meer vastprikken" pinLimitExceeded: "Je kunt geen posts meer vastprikken"
intro: "Installatie van Misskey geëindigd! Maak nu een beheerder aan." intro: "Installatie van Calckey geëindigd! Maak nu een beheerder aan."
done: "Klaar" done: "Klaar"
processing: "Bezig met verwerken" processing: "Bezig met verwerken"
preview: "Voorbeeld" preview: "Voorbeeld"
@ -223,9 +244,11 @@ saved: "Opgeslagen"
messaging: "Chat" messaging: "Chat"
upload: "Uploaden" upload: "Uploaden"
keepOriginalUploading: "Origineel beeld behouden." keepOriginalUploading: "Origineel beeld behouden."
keepOriginalUploadingDescription: "Bewaar de originele versie bij het uploaden van afbeeldingen. Indien uitgeschakeld, wordt bij het uploaden een alternatieve versie voor webpublicatie genereert." keepOriginalUploadingDescription: "Bewaar de originele versie bij het uploaden van
afbeeldingen. Indien uitgeschakeld, wordt bij het uploaden een alternatieve versie
voor webpublicatie genereert."
fromDrive: "Van schijf" fromDrive: "Van schijf"
fromUrl: "Van URL" fromUrl: "Van URL"
uploadFromUrl: "Uploaden vanaf een URL" uploadFromUrl: "Uploaden vanaf een URL"
uploadFromUrlDescription: "URL van het bestand dat je wil uploaden" uploadFromUrlDescription: "URL van het bestand dat je wil uploaden"
uploadFromUrlRequested: "Uploadverzoek" uploadFromUrlRequested: "Uploadverzoek"
@ -239,7 +262,8 @@ agreeTo: "Ik stem in met {0}"
tos: "Gebruiksvoorwaarden" tos: "Gebruiksvoorwaarden"
start: "Aan de slag" start: "Aan de slag"
home: "Startpagina" home: "Startpagina"
remoteUserCaution: "Aangezien deze gebruiker van een externe server afkomstig is, kan de weergegeven informatie onvolledig zijn." remoteUserCaution: "Aangezien deze gebruiker van een externe server afkomstig is,
kan de weergegeven informatie onvolledig zijn."
activity: "Activiteit" activity: "Activiteit"
images: "Afbeeldingen" images: "Afbeeldingen"
birthday: "Geboortedatum" birthday: "Geboortedatum"
@ -280,7 +304,7 @@ disconnectedFromServer: "Verbinding met de server onderbroken."
inMb: "in megabytes" inMb: "in megabytes"
pinnedNotes: "Vastgemaakte notitie" pinnedNotes: "Vastgemaakte notitie"
userList: "Lijsten" userList: "Lijsten"
aboutMisskey: "Over Misskey" aboutMisskey: "Over Calckey"
administrator: "Beheerder" administrator: "Beheerder"
token: "Token" token: "Token"
securityKeyName: "Sleutelnaam" securityKeyName: "Sleutelnaam"
@ -308,7 +332,7 @@ cropImageAsk: "Bijsnijdengevraagd"
file: "Bestanden" file: "Bestanden"
_email: _email:
_follow: _follow:
title: "volgde jou" title: "Je hebt een nieuwe volger"
_mfm: _mfm:
mention: "Vermelding" mention: "Vermelding"
quote: "Quote" quote: "Quote"
@ -367,7 +391,7 @@ _pages:
types: types:
array: "Lijsten" array: "Lijsten"
_notification: _notification:
youWereFollowed: "volgde jou" youWereFollowed: "volgt jou"
_types: _types:
follow: "Volgend" follow: "Volgend"
mention: "Vermelding" mention: "Vermelding"
@ -383,3 +407,238 @@ _deck:
tl: "Tijdlijn" tl: "Tijdlijn"
list: "Lijsten" list: "Lijsten"
mentions: "Vermeldingen" mentions: "Vermeldingen"
showLess: Sluiten
emoji: Emoji
selectList: Selecteer een lijst
selectAntenna: Selecteer een antenne
deleted: Verwijderd
editNote: Bewerk notitie
edited: Bewerkt
emojis: Emojis
emojiName: Emoji naam
emojiUrl: Emoji URL
addEmoji: Voeg toe
settingGuide: Aanbevolen instellingen
flagSpeakAsCat: Praat als een kat
accountMoved: 'Gebruiker is naar een nieuw account verhuisd:'
showEmojisInReactionNotifications: Toon emojis in reactie notificaties
selectWidget: Selecteer een widget
editWidgetsExit: Klaar
noThankYou: Nee bedankt
addInstance: Voeg een server toe
enableEmojiReactions: Schakel emoji reacties in
editWidgets: Bewerk widgets
thisYear: Jaar
thisMonth: Maand
registration: Registreren
_ffVisibility:
public: Openbaar
private: Privé
followers: Alleen zichtbaar voor volgers
noInstances: Er zijn geen servers
_signup:
almostThere: Bijna klaar
emailAddressInfo: Voer je emailadres in. Deze zal niet openbaar gemaakt worden.
_ad:
back: Terug
reduceFrequencyOfThisAd: Toon deze advertentie minder
pushNotificationNotSupported: Je browser of server ondersteunt geen pushmeldingen
sendPushNotificationReadMessage: Verwijder pushmeldingen wanneer de relevante meldingen
of berichten zijn gelezen
customEmojis: Custom emoji
cacheRemoteFiles: Cache externe bestanden
hiddenTags: Verborgen hashtags
enableRecommendedTimeline: Schakel aanbevolen tijdlijn in
_forgotPassword:
enterEmail: Voer het emailadres in dat je gebruikte om te registreren. Een link
waarmee je je wachtwoord opnieuw kunt instellen zal daar naartoe gestuurd worden.
jumpToReply: Spring naar Antwoord
newer: nieuwer
older: ouder
selectInstance: Kies een server
defaultValueIs: 'Standaard: {value}'
reload: Hernieuwen
doNothing: Negeren
today: Vandaag
inputNewDescription: Voer een nieuw onderschrift in
inputNewFolderName: Voer een nieuwe mapnaam in
circularReferenceFolder: De bestemmingsmap is een submap van de map die je wil verplaatsen.
hasChildFilesOrFolders: Omdat deze map niet leeg is, kan deze niet verwijderd worden.
enableLocalTimeline: Schakel lokale tijdlijn in
enableGlobalTimeline: Schakel globale tijdlijn in
enableRegistration: Nieuwe gebruikersregistratie inschakelen
invite: Uitnodigen
move: Verplaatsen
showAds: Toon advertenties
pushNotification: Pushmeldingen
_gallery:
my: Mijn Gallerij
reactionSetting: Reacties om te tonen in het reactie selectie menu
dayX: '{day}'
renoteMute: Demp boosts
reloadConfirm: Wil je de tijdlijn hernieuwen?
watch: Volgen
unwatch: Ontvolgen
accept: Accepteren
reject: Afwijzen
normal: Normaal
pages: Pagina's
integration: Integraties
connectService: Koppelen
monthX: '{month}'
yearX: '{year}'
instanceName: Servernaam
instanceDescription: Server omschrijving
maintainerName: Onderhouder
maintainerEmail: Onderhouder email
tosUrl: Algemene Voorwaarden URL
disconnectService: Ontkoppelen
unread: Ongelezen
manageGroups: Beheer groepen
subscribePushNotification: Pushmeldingen inschakelen
unsubscribePushNotification: Pushmeldingen uitschakelen
pushNotificationAlreadySubscribed: Pushmeldingen zijn al ingeschakeld
antennaSource: Antenne bron
antennaKeywords: Trefwoorden om naar te luisteren
antennaExcludeKeywords: Trefwoorden om te negeren
driveCapacityPerRemoteAccount: Schijfruimte per externe gebruiker
backgroundImageUrl: Achtergrondafbeelding URL
basicInfo: Basis informatie
pinnedUsers: Vastgezette gebruikers
pinnedPages: Vastgezette Pagina's
driveCapacityPerLocalAccount: Schijfruimte per lokale gebruiker
iconUrl: Icoon URL
bannerUrl: Banner afbeelding URL
manageAntennas: Beheer Antennes
name: Naam
notifyAntenna: Meld nieuwe posts
withFileAntenna: Alleen posts met bestanden
enableServiceworker: Schakel pushmeldingen voor je browser in
renoteUnmute: Ontdemp boosts
jumpToPrevious: Spring naar vorige
caseSensitive: Hoofdlettergevoelig
cw: Inhoudswaarschuwing
recaptcha: reCAPTCHA
enableRecaptcha: reCAPTCHA inschakelen
recaptchaSiteKey: Site sleutel
notFoundDescription: Een pagina met deze URL kon niet worden gevonden.
uploadFolder: Standaard map voor uploads
markAsReadAllNotifications: Markeer alle notificaties als gelezen
text: Tekst
enable: Inschakelen
or: Of
language: Taal
securityKey: Veiligheidssleutel
groupInvited: Je bent voor een groep uitgenodigd
docSource: Bron van dit document
createAccount: Maak account aan
groupName: Groepsnaam
members: Leden
messagingWithUser: Privé chat
messagingWithGroup: Groepschat
title: Titel
createGroup: Maak een groep
ownedGroups: Beheerde groepen
invites: Uitnodigingen
useOsNativeEmojis: Gebruik je standaard besturingssysteem Emojis
disableDrawer: Gebruik niet de lade-stijl menus
joinOrCreateGroup: Krijg een uitnodiging voor een groep of maak er zelf eentje aan.
noHistory: Geen geschiedenis beschikbaar
signinHistory: Inloggeschiedenis
available: Beschikbaar
unavailable: Niet beschikbaar
tooShort: Te kort
signinFailed: Niet gelukt om in te loggen. Gebruikersnaam of wachtwoord is incorrect.
tapSecurityKey: Tik je veiligheidssleutel aan
recaptchaSecretKey: Geheime sleutel
antennas: Antennes
antennaUsersDescription: Zet één gebruikersnaam per regel neer
notesAndReplies: Posts en antwoorden
withFiles: Met bestanden
popularUsers: Populaire gebruikers
recentlyUpdatedUsers: Recente actieve gebruikers
recentlyRegisteredUsers: Nieuwe gebruikers
recentlyDiscoveredUsers: Nieuwe ontdekte gebruikers
exploreUsersCount: Er zijn {count} gebruikers
about: Over
exploreFediverse: Ontdek de Fediverse
popularTags: Populaire labels
moderation: Moderatie
nUsersMentioned: Genoemd door {n} gebruikers
markAsReadAllUnreadNotes: Markeer alle posts als gelezen
markAsReadAllTalkMessages: Markeer alle berichten als gelezen
help: Help
inputMessageHere: Schrijf hier je bericht
close: Sluiten
group: Groep
groups: Groepen
newMessageExists: Er zijn nieuwe berichten
next: Volgende
noteOf: Post door {user}
inviteToGroup: Nodig uit voor de groep
quoteAttached: Quote
noMessagesYet: Nog geen berichten
weakPassword: Zwak wachtwoord
normalPassword: Middelmatig wachtwoord
strongPassword: Sterk wachtwoord
onlyOneFileCanBeAttached: Je kan maar één bestand toevoegen aan je bericht
invitationCode: Uitnodigingscode
checking: Controleren...
uiLanguage: Gebruikersinterface taal
aboutX: Over {x}
youHaveNoGroups: Je hebt geen groepen
disableAnimatedMfm: Schakel MFM met animaties uit
passwordMatched: Komt overeen
passwordNotMatched: Komt niet overeen
signinWith: Log in met {x}
fontSize: Tekstgrootte
openImageInNewTab: Open afbeeldingen in een nieuwe tab
category: Categorie
tags: Labels
existingAccount: Bestaand account
regenerate: Hernieuwen
dayOverDayChanges: Verschillen met gisteren
appearance: Uiterlijk
local: Lokaal
remote: Extern
total: Totaal
weekOverWeekChanges: Verschillen met vorige week
hcaptcha: hCaptcha
enableHcaptcha: hCaptcha inschakelen
hcaptchaSiteKey: Site sleutel
hcaptchaSecretKey: Geheime sleutel
withReplies: Met antwoorden
twoStepAuthentication: Tweefactorauthenticatie
moderator: Moderator
invitations: Uitnodigingen
tooLong: Te lang
doing: Verwerken...
silencedInstances: Gedempte Servers
cacheRemoteFilesDescription: Als deze instelling is uitgeschakeld, worden externe
bestanden direct van de externe server geladen. Het uitschakelen zal opslagruimte
verminderen, maar verkeer zal toenemen, omdat er geen thumbnails gemaakt zullen
worden.
flagSpeakAsCatDescription: Je posts zullen worden ge-'nyanified' als je in kat-modus
zit
avoidMultiCaptchaConfirm: Het gebruik van meerdere Captcha systemen kan voor storing
zorgen tussen ze. Wil je de andere actieve Captcha systemen uitschakelen? Als je
ze ingeschakeld wilt houden, klik op annuleren.
silence: Dempen
silenceConfirm: Weet je zeker dat je deze gebruiker wilt dempen?
unsilence: Ontdempen
unsilenceConfirm: Weet je zeker dat je het dempen van deze gebruiker ongedaan wilt
maken?
silenceThisInstance: Demp deze server
silenced: Gedempt
disablingTimelinesInfo: Beheerders en moderators zullen altijd toegang hebben tot
alle tijdlijnen, zelfs als deze uitgeschakeld zijn.
accountSettings: Account Instellingen
numberOfDays: Aantal dagen
hideThisNote: Verberg deze post
dashboard: Dashboard
accessibility: Toegankelijkheid
promotion: Gepromoot
promote: Promoten
objectStorage: Objectopslag
useObjectStorage: Gebruik objectopslag
objectStorageBaseUrl: Basis -URL

View file

@ -66,8 +66,8 @@ import: "Importuj"
export: "Eksportuj" export: "Eksportuj"
files: "Pliki" files: "Pliki"
download: "Pobierz" download: "Pobierz"
driveFileDeleteConfirm: "Czy chcesz usunąć plik \"{name}\"? Zniknie również wpis,\ driveFileDeleteConfirm: "Czy chcesz usunąć plik \"{name}\"? Wszystkie wpisy zawierające\
\ do której dołączony jest ten plik." \ 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."
@ -187,7 +187,6 @@ operations: "Działania"
software: "Oprogramowanie" software: "Oprogramowanie"
version: "Wersja" version: "Wersja"
metadata: "Metadane" metadata: "Metadane"
withNFiles: "{n} plik(i/ów)"
monitor: "Monitor" monitor: "Monitor"
jobQueue: "Kolejka zadań" jobQueue: "Kolejka zadań"
cpuAndMemory: "CPU i pamięć" cpuAndMemory: "CPU i pamięć"
@ -787,7 +786,7 @@ active: "Aktywny"
offline: "Offline" offline: "Offline"
notRecommended: "Nie zalecane" notRecommended: "Nie zalecane"
botProtection: "Zabezpieczenie przed botami" botProtection: "Zabezpieczenie przed botami"
instanceBlocking: "Zablokowane instancje" instanceBlocking: "Zablokowane/wyciszone instancje"
selectAccount: "Wybierz konto" selectAccount: "Wybierz konto"
switchAccount: "Przełącz konto" switchAccount: "Przełącz konto"
enabled: "Właczono" enabled: "Właczono"
@ -1006,7 +1005,7 @@ _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. Misskey, 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"
@ -1075,6 +1074,14 @@ _mfm:
inlineMath: Matematyka (Inline) inlineMath: Matematyka (Inline)
inlineMathDescription: Pokaż formuły matematyczne (KaTeX) w linii inlineMathDescription: Pokaż formuły matematyczne (KaTeX) w linii
blockMathDescription: Pokaż wieloliniowe formuły matematyczne (KaTeX) w bloku blockMathDescription: Pokaż wieloliniowe formuły matematyczne (KaTeX) w bloku
background: Kolor tła
backgroundDescription: Zmień kolor tła tekstu.
foregroundDescription: Zmień kolor pierwszoplanowy tekstu.
positionDescription: Przesuń treść o określoną odległość.
position: Pozycjonuj
foreground: Kolor pierwszoplanowy
scaleDescription: Skaluj treść o określoną wielkość.
scale: Skaluj
_instanceTicker: _instanceTicker:
none: "Nigdy nie pokazuj" none: "Nigdy nie pokazuj"
remote: "Pokaż dla zdalnych użytkowników" remote: "Pokaż dla zdalnych użytkowników"
@ -1094,6 +1101,8 @@ _channel:
following: "Śledzeni" following: "Śledzeni"
usersCount: "{n} uczestnicy" usersCount: "{n} uczestnicy"
notesCount: "{n} wpisy" notesCount: "{n} wpisy"
nameAndDescription: Nazwa i opis
nameOnly: Tylko nazwa
_menuDisplay: _menuDisplay:
top: "Góra" top: "Góra"
hide: "Ukryj" hide: "Ukryj"
@ -1222,13 +1231,13 @@ _tutorial:
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: "Teraz czas na śledzenie niektórych osób!" 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: "Dla twojego pierwszego postu, niektórzy ludzie lubią zrobić {introduction}\ step4_2: "W pierwszym wpisie możesz się przedstawić lub wysłać powitanie - \"Witaj,\
\ post lub prosty \"Hello world!\"" \ ś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\
@ -1811,8 +1820,8 @@ privateMode: Tryb prywatny
allowedInstances: Dopuszczone instancje allowedInstances: Dopuszczone instancje
recommended: Polecane recommended: Polecane
allowedInstancesDescription: Hosty instancji które mają być dopuszczone do federacji, allowedInstancesDescription: Hosty instancji które mają być dopuszczone do federacji,
każda separowana nową linią (dotyczy tylko trybu prywatnego). każdy separowany nową linią (dotyczy tylko trybu prywatnego).
seperateRenoteQuote: Oddziel przyciski podbicia i cytatów seperateRenoteQuote: Oddziel przyciski podbicia i cytowania
refreshInterval: 'Częstotliwość aktualizacji ' refreshInterval: 'Częstotliwość aktualizacji '
slow: Wolna slow: Wolna
_messaging: _messaging:
@ -1845,10 +1854,10 @@ 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 @person@instance.com
migrationConfirm: "Czy jesteś na 200% pewn* tego, że chcesz przenieść swoje konto\ migrationConfirm: "Czy jesteś absolutnie pewn* tego, że chcesz przenieść swoje konto\
\ na {account}? Gdy to zrobisz, odwrócenie tego będzie nie możliwe, i nie będziesz\ \ na {account}? Tego działania nie można odwrócić. Nieodwracalnie stracisz możliwość\
\ w stanie ponownie używać normalnie z tego konta.\nUpewnij się, że to konto zostało\ \ normalnego korzystania z konta.\nUpewnij się, że to konto zostało ustawione jako\
\ 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 instancję
renoteMute: Wycisz podbicia renoteMute: Wycisz podbicia
@ -1888,31 +1897,16 @@ sendPushNotificationReadMessageCaption: Powiadomienie zawierające tekst "{empty
defaultReaction: Domyślna reakcja emoji dla wychodzących i przychodzących wpisów defaultReaction: Domyślna reakcja emoji dla wychodzących i przychodzących wpisów
license: Licencja license: Licencja
indexPosts: Indeksuj wpisy indexPosts: Indeksuj wpisy
indexFrom: Indeksuj wpisy od ID (zostaw puste dla indeksowania wszystkich wpisów) indexFrom: Indeksuj wpisy od ID
indexFromDescription: Zostaw puste dla indeksowania wszystkich wpisów
indexNotice: Indeksuję. Zapewne zajmie to chwilę, nie restartuj serwera przez co najmniej indexNotice: Indeksuję. Zapewne zajmie to chwilę, nie restartuj serwera przez co najmniej
godzinę. godzinę.
customKaTeXMacro: Niestandardowe makra KaTeX customKaTeXMacro: Niestandardowe makra KaTeX
enableCustomKaTeXMacro: Włącz niestandardowe makra KaTeX enableCustomKaTeXMacro: Włącz niestandardowe makra KaTeX
noteId: ID wpisu noteId: ID wpisu
_apps:
apps: Aplikacje
crossPlatform: Wieloplatformowe
mobile: Mobilne
firstParty: Oficjalne
firstClass: Pierwszej klasy
secondClass: Drugiej klasy
thirdClass: Trzeciej klasy
free: Darmowe
paid: Płatne
pwa: Zainstaluj PWA
kaiteki: Kaiteki
milktea: Milktea
missLi: MissLi
mona: Mona
theDesk: TheDesk
lesskey: Lesskey
hiddenTagsDescription: 'Wypisz tagi (bez #) hashtagów które masz zamiar ukryć z "Na hiddenTagsDescription: 'Wypisz tagi (bez #) hashtagów które masz zamiar ukryć z "Na
czasie" i "Eksploruj". Na ukryte hashtagi można dalej wejść innymi sposobami.' czasie" i "Eksploruj". Na ukryte hashtagi można dalej wejść innymi sposobami. Ta
lista nie ma wpływu na zablokowane instancje.'
proxyAccountDescription: Konto proxy jest kontem które w określonych sytuacjach zachowuje proxyAccountDescription: Konto proxy jest kontem które w określonych sytuacjach zachowuje
się jak zdalny obserwujący. Na przykład, kiedy użytkownik dodaje zdalnego użytkownika się jak zdalny obserwujący. Na przykład, kiedy użytkownik dodaje zdalnego użytkownika
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
@ -1927,7 +1921,7 @@ sendErrorReportsDescription: "Gdy ta opcja jest włączona, szczegółowe inform
\ Calckey.\nZawrze to informacje takie jak wersja twojego systemu operacyjnego,\ \ Calckey.\nZawrze to informacje takie jak wersja twojego systemu operacyjnego,\
\ przeglądarki, Twoja aktywność na Calckey itd." \ przeglądarki, Twoja aktywność na Calckey itd."
privateModeInfo: Jeśli włączone, tylko dopuszczone instancje będą mogły federować privateModeInfo: Jeśli włączone, tylko dopuszczone instancje będą mogły federować
z Twoją instancją. Wszystkie posty będą ukryte przed publiką. z Twoją instancją. Wszystkie posty będą jedynie widoczne na Twojej instancji.
oneHour: Godzina oneHour: Godzina
oneDay: Dzień oneDay: Dzień
oneWeek: Tydzień oneWeek: Tydzień
@ -1999,3 +1993,23 @@ themeColor: Kolor znacznika instancji
instanceDefaultLightTheme: Domyślny jasny motyw instancji instanceDefaultLightTheme: Domyślny jasny motyw instancji
enableEmojiReactions: Włącz reakcje emoji enableEmojiReactions: Włącz reakcje emoji
showEmojisInReactionNotifications: Pokazuj emoji w powiadomieniach reakcyjnych showEmojisInReactionNotifications: Pokazuj emoji w powiadomieniach reakcyjnych
apps: Aplikacje
silenceThisInstance: Wycisz tę instancję
silencedInstances: Wyciszone instancje
deleted: Usunięte
editNote: Edytuj wpis
edited: Edytowany
silenced: Wyciszony
findOtherInstance: Znajdź inny serwer
userSaysSomethingReasonReply: '{name} odpowiedział na wpis zawierający {reason}'
userSaysSomethingReasonRenote: '{name} podbił post zawierający {reason}'
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.
userSaysSomethingReasonQuote: '{name} zacytował wpis zawierający {reason}'
silencedInstancesDescription: Wymień nazwy domenowe instancji, które chcesz wyciszyć.
Profile w wyciszonych instancjach są traktowane jako "Wyciszony", mogą jedynie wysyłać
prośby obserwacji, i nie mogą oznaczać w wzmiankach profili lokalnych jeśli nie
są obserwowane. To nie będzie miało wpływu na zablokowane instancje.
cannotUploadBecauseExceedsFileSizeLimit: Ten plik nie mógł być przesłany, ponieważ
jego wielkość przekracza dozwolony limit.
sendModMail: Wyślij Powiadomienie Moderacyjne

View file

@ -1,7 +1,7 @@
--- ---
_lang_: "Português" _lang_: "Português"
headlineMisskey: "Uma rede ligada por notas" headlineMisskey: "Uma rede ligada por notas"
introMisskey: "Bem-vindo! Misskey é um serviço de microblogue descentralizado de código aberto.\nCria \"notas\" e partilha o que te ocorre com todos à tua volta. 📡\nCom \"reações\" podes também expressar logo o que sentes às notas de todos. 👍\nExploremos um novo mundo! 🚀" introMisskey: "Bem-vindo! Calckey é um serviço de microblogue descentralizado de código aberto.\nCria \"notas\" e partilha o que te ocorre com todos à tua volta. 📡\nCom \"reações\" podes também expressar logo o que sentes às notas de todos. 👍\nExploremos um novo mundo! 🚀"
monthAndDay: "{day}/{month}" monthAndDay: "{day}/{month}"
search: "Buscar" search: "Buscar"
notifications: "Notificações" notifications: "Notificações"
@ -139,7 +139,7 @@ settingGuide: "Guia de configuração"
cacheRemoteFiles: "Memória transitória de arquivos remotos" cacheRemoteFiles: "Memória transitória de arquivos remotos"
cacheRemoteFilesDescription: "Se você desabilitar essa configuração, os arquivos remotos não serão armazenados em memória transitória e serão vinculados diretamente. Economiza o armazenamento do servidor, mas não gera miniaturas, o que aumenta o tráfego." cacheRemoteFilesDescription: "Se você desabilitar essa configuração, os arquivos remotos não serão armazenados em memória transitória e serão vinculados diretamente. Economiza o armazenamento do servidor, mas não gera miniaturas, o que aumenta o tráfego."
flagAsBot: "Marcar conta como robô" flagAsBot: "Marcar conta como robô"
flagAsBotDescription: "Se esta conta for operada por um programa, ative este sinalizador. Quando ativado, serve como um sinalizador para evitar o encadeamento de reações para outros programadores, e o manuseio do sistema do Misskey é adequado para bots." flagAsBotDescription: "Se esta conta for operada por um programa, ative este sinalizador. Quando ativado, serve como um sinalizador para evitar o encadeamento de reações para outros programadores, e o manuseio do sistema do Calckey é adequado para bots."
flagAsCat: "Marcar conta como gato" flagAsCat: "Marcar conta como gato"
flagAsCatDescription: "Ative essa opção para marcar essa conta como gato." flagAsCatDescription: "Ative essa opção para marcar essa conta como gato."
flagShowTimelineReplies: "Mostrar respostas na linha de tempo" flagShowTimelineReplies: "Mostrar respostas na linha de tempo"
@ -177,7 +177,6 @@ operations: "operar"
software: "Programas" software: "Programas"
version: "versão" version: "versão"
metadata: "Metadados" metadata: "Metadados"
withNFiles: "{n} Um arquivo"
monitor: "monitor" monitor: "monitor"
jobQueue: "Fila de trabalhos" jobQueue: "Fila de trabalhos"
cpuAndMemory: "CPU e memória" cpuAndMemory: "CPU e memória"
@ -199,7 +198,7 @@ noUsers: "Sem usuários"
editProfile: "Editar Perfil" editProfile: "Editar Perfil"
noteDeleteConfirm: "Deseja excluir esta nota?" noteDeleteConfirm: "Deseja excluir esta nota?"
pinLimitExceeded: "Não consigo mais fixar" pinLimitExceeded: "Não consigo mais fixar"
intro: "A instalação do Misskey está completa! Crie uma conta de administrador." intro: "A instalação do Calckey está completa! Crie uma conta de administrador."
done: "Concluído" done: "Concluído"
processing: "Em Progresso" processing: "Em Progresso"
preview: "Pré-visualizar" preview: "Pré-visualizar"
@ -377,7 +376,7 @@ exploreFediverse: "Explorar Fediverse"
popularTags: "Tags populares" popularTags: "Tags populares"
userList: "Listas" userList: "Listas"
about: "Informações" about: "Informações"
aboutMisskey: "Sobre Misskey" aboutMisskey: "Sobre Calckey"
administrator: "Administrador" administrator: "Administrador"
token: "Símbolo" token: "Símbolo"
twoStepAuthentication: "Verificação em duas etapas" twoStepAuthentication: "Verificação em duas etapas"

View file

@ -1,7 +1,7 @@
--- ---
_lang_: "Română" _lang_: "Română"
headlineMisskey: "O rețea conectată prin note" headlineMisskey: "O rețea conectată prin note"
introMisskey: "Bine ai venit! Misskey este un serviciu de microblogging open source și decentralizat.\nCreează \"note\" cu care să îți poți împărți gândurile cu oricine din jurul tău. 📡\nCu \"reacții\" îți poți expirma rapid părerea despre notele oricui. 👍\nHai să explorăm o lume nouă! 🚀" introMisskey: "Bine ai venit! Calckey este un serviciu de microblogging open source și decentralizat.\nCreează \"note\" cu care să îți poți împărți gândurile cu oricine din jurul tău. 📡\nCu \"reacții\" îți poți expirma rapid părerea despre notele oricui. 👍\nHai să explorăm o lume nouă! 🚀"
monthAndDay: "{day}/{month}" monthAndDay: "{day}/{month}"
search: "Caută" search: "Caută"
notifications: "Notificări" notifications: "Notificări"
@ -139,7 +139,7 @@ settingGuide: "Setări recomandate"
cacheRemoteFiles: "Ține fișierele externe in cache" cacheRemoteFiles: "Ține fișierele externe in cache"
cacheRemoteFilesDescription: "Când această setare este dezactivată, fișierele externe sunt încărcate direct din instanța externă. Dezactivarea va scădea utilizarea spațiului de stocare, dar va crește traficul, deoarece thumbnail-urile nu vor fi generate." cacheRemoteFilesDescription: "Când această setare este dezactivată, fișierele externe sunt încărcate direct din instanța externă. Dezactivarea va scădea utilizarea spațiului de stocare, dar va crește traficul, deoarece thumbnail-urile nu vor fi generate."
flagAsBot: "Marchează acest cont ca bot" flagAsBot: "Marchează acest cont ca bot"
flagAsBotDescription: "Activează această opțiune dacă acest cont este controlat de un program. Daca e activată, aceasta va juca rolul unui indicator pentru dezvoltatori pentru a preveni interacțiunea în lanțuri infinite cu ceilalți boți și ajustează sistemele interne al Misskey pentru a trata acest cont drept un bot." flagAsBotDescription: "Activează această opțiune dacă acest cont este controlat de un program. Daca e activată, aceasta va juca rolul unui indicator pentru dezvoltatori pentru a preveni interacțiunea în lanțuri infinite cu ceilalți boți și ajustează sistemele interne al Calckey pentru a trata acest cont drept un bot."
flagAsCat: "Marchează acest cont ca pisică" flagAsCat: "Marchează acest cont ca pisică"
flagAsCatDescription: "Activează această opțiune dacă acest cont este o pisică." flagAsCatDescription: "Activează această opțiune dacă acest cont este o pisică."
flagShowTimelineReplies: "Arată răspunsurile în cronologie" flagShowTimelineReplies: "Arată răspunsurile în cronologie"
@ -177,7 +177,6 @@ operations: "Operațiuni"
software: "Software" software: "Software"
version: "Versiune" version: "Versiune"
metadata: "Metadata" metadata: "Metadata"
withNFiles: "{n} fișier(e)"
monitor: "Monitor" monitor: "Monitor"
jobQueue: "coada de job-uri" jobQueue: "coada de job-uri"
cpuAndMemory: "CPU și memorie" cpuAndMemory: "CPU și memorie"
@ -199,7 +198,7 @@ noUsers: "Niciun utilizator"
editProfile: "Editează profilul" editProfile: "Editează profilul"
noteDeleteConfirm: "Ești sigur că vrei să ștergi această notă?" noteDeleteConfirm: "Ești sigur că vrei să ștergi această notă?"
pinLimitExceeded: "Nu poți mai fixa mai multe note" pinLimitExceeded: "Nu poți mai fixa mai multe note"
intro: "Misskey s-a instalat! Te rog crează un utilizator admin." intro: "Calckey s-a instalat! Te rog crează un utilizator admin."
done: "Gata" done: "Gata"
processing: "Se procesează" processing: "Se procesează"
preview: "Previzualizare" preview: "Previzualizare"
@ -377,7 +376,7 @@ exploreFediverse: "Explorează Fediverse-ul"
popularTags: "Taguri populare" popularTags: "Taguri populare"
userList: "Liste" userList: "Liste"
about: "Despre" about: "Despre"
aboutMisskey: "Despre Misskey" aboutMisskey: "Despre Calckey"
administrator: "Administrator" administrator: "Administrator"
token: "Token" token: "Token"
twoStepAuthentication: "Autentificare în doi pași" twoStepAuthentication: "Autentificare în doi pași"
@ -522,7 +521,7 @@ sort: "Sortează"
ascendingOrder: "Crescător" ascendingOrder: "Crescător"
descendingOrder: "Descrescător" descendingOrder: "Descrescător"
scratchpad: "Scratchpad" scratchpad: "Scratchpad"
scratchpadDescription: "Scratchpad-ul oferă un mediu de experimentare în AiScript. Poți scrie, executa și verifica rezultatele acestuia interacționând cu Misskey în el." scratchpadDescription: "Scratchpad-ul oferă un mediu de experimentare în AiScript. Poți scrie, executa și verifica rezultatele acestuia interacționând cu Calckey în el."
output: "Ieșire" output: "Ieșire"
script: "Script" script: "Script"
disablePagesScript: "Dezactivează AiScript în Pagini" disablePagesScript: "Dezactivează AiScript în Pagini"

View file

@ -65,7 +65,8 @@ import: "Импорт"
export: "Экспорт" export: "Экспорт"
files: "Файлы" files: "Файлы"
download: "Скачать" download: "Скачать"
driveFileDeleteConfirm: "Удалить файл «{name}»? Посты с ним также будут удалены." driveFileDeleteConfirm: "Удалить файл «{name}»? Он будет удален со всех постов которые\
\ содержат его как вложение."
unfollowConfirm: "Удалить из подписок пользователя {name}?" unfollowConfirm: "Удалить из подписок пользователя {name}?"
exportRequested: "Вы запросили экспорт. Это может занять некоторое время. Результат\ exportRequested: "Вы запросили экспорт. Это может занять некоторое время. Результат\
\ будет добавлен на «Диск»." \ будет добавлен на «Диск»."
@ -191,7 +192,6 @@ operations: "Операции"
software: "Программы" software: "Программы"
version: "Версия" version: "Версия"
metadata: "Метаданные" metadata: "Метаданные"
withNFiles: "Файлы, {n} шт"
monitor: "Монитор" monitor: "Монитор"
jobQueue: "Очередь заданий" jobQueue: "Очередь заданий"
cpuAndMemory: "Процессор и память" cpuAndMemory: "Процессор и память"
@ -985,7 +985,7 @@ _registry:
domain: "Домен" domain: "Домен"
createKey: "Новый ключ" createKey: "Новый ключ"
_aboutMisskey: _aboutMisskey:
about: "Calckey это форк Misskey, сделанный ThatOneCalculator, разработка которого\ about: "Calckey это форк Calckey, сделанный ThatOneCalculator, разработка которого\
\ началась с 2022." \ началась с 2022."
contributors: "Основные соавторы" contributors: "Основные соавторы"
allContributors: "Все соавторы" allContributors: "Все соавторы"
@ -1001,7 +1001,7 @@ _nsfw:
force: "Скрывать вообще все файлы" force: "Скрывать вообще все файлы"
_mfm: _mfm:
cheatSheet: "Подсказка по разметке MFM" cheatSheet: "Подсказка по разметке MFM"
intro: "MFM — язык оформления текста,используемый в Misskey, Calckey, Akkoma и готов\ intro: "MFM — язык оформления текста,используемый в Calckey, Calckey, Akkoma и готов\
\ для применения во многих местах. На этой странице собраны и кратко изложены\ \ для применения во многих местах. На этой странице собраны и кратко изложены\
\ способы его использовать." \ способы его использовать."
dummy: "Calckey расширяет границы Федиверса" dummy: "Calckey расширяет границы Федиверса"
@ -1908,8 +1908,8 @@ recommendedInstances: Рекомендованные инстансы
defaultReaction: Эмодзи реакция по умолчанию для выходящих и исходящих постов defaultReaction: Эмодзи реакция по умолчанию для выходящих и исходящих постов
license: Лицензия license: Лицензия
indexPosts: Индексировать посты indexPosts: Индексировать посты
indexFrom: Индексировать начиная с идентификатора поста и далее (оставьте пустым для indexFrom: Индексировать начиная с идентификатора поста и далее
индексации каждого поста) indexFromDescription: оставьте пустым для индексации каждого поста
indexNotice: Теперь индексирование. Вероятно, это займет некоторое время, пожалуйста, indexNotice: Теперь индексирование. Вероятно, это займет некоторое время, пожалуйста,
не перезагружайте свой сервер по крайней мере в течение часа. не перезагружайте свой сервер по крайней мере в течение часа.
customKaTeXMacro: Кастомные KaTex макросы customKaTeXMacro: Кастомные KaTex макросы
@ -1937,23 +1937,6 @@ _preferencesBackups:
cannotLoad: Загрузка не удалась cannotLoad: Загрузка не удалась
invalidFile: Неправильный формат файла invalidFile: Неправильный формат файла
enableEmojiReactions: Включить эмодзи реакции enableEmojiReactions: Включить эмодзи реакции
_apps:
paid: Платные
lesskey: Lesskey
pwa: Установить PWA
free: Бесплатные
apps: Приложения
crossPlatform: Кроссплатформенные
mobile: Мобильные
firstParty: От разработчиков
firstClass: Первый класс
thirdClass: Третий класс
kaiteki: Kaiteki
milktea: Milktea
missLi: MissLi
mona: Mona
theDesk: TheDesk
secondClass: Второй класс
migrationConfirm: "Вы абсолютно уверены что хотите мигрировать ваш аккаунт на {account}?\ migrationConfirm: "Вы абсолютно уверены что хотите мигрировать ваш аккаунт на {account}?\
\ Как только вы сделаете, вы не сможете отменить это и не сможете нормально использовать\ \ Как только вы сделаете, вы не сможете отменить это и не сможете нормально использовать\
\ аккаунт снова.\nТакже, пожалуйста, убедитесь, что вы установили эту текущую учетную\ \ аккаунт снова.\nТакже, пожалуйста, убедитесь, что вы установили эту текущую учетную\
@ -2000,3 +1983,9 @@ customKaTeXMacroDescription: 'Настройте макросы чтобы ле
ветвление, здесь использоваться не может.' ветвление, здесь использоваться не может.'
cannotUploadBecauseExceedsFileSizeLimit: Этот файл не может быть загружен так как cannotUploadBecauseExceedsFileSizeLimit: Этот файл не может быть загружен так как
он превышает максимально разрешённый размер. он превышает максимально разрешённый размер.
apps: Приложения
silenceThisInstance: Заглушить инстанс
silencedInstances: Заглушенные инстансы
editNote: Редактировать заметку
edited: Редактировано
deleted: Удалённое

View file

@ -1,7 +1,7 @@
--- ---
_lang_: "Slovenčina" _lang_: "Slovenčina"
headlineMisskey: "Sieť prepojená poznámkami" headlineMisskey: "Sieť prepojená poznámkami"
introMisskey: "Vitajte! Misskey je otvorená a decentralizovaná mikroblogovacia služba.\n\"Poznámkami\" môžete zdieľať svoje myšlienky so všetkými okolo. 📡\nPomocou \"reakcií\" môžete rýchlo vyjadri svoje pocity o každého poznámkach. 👍\nPoďte objavovať svet! 🚀" introMisskey: "Vitajte! Calckey je otvorená a decentralizovaná mikroblogovacia služba.\n\"Poznámkami\" môžete zdieľať svoje myšlienky so všetkými okolo. 📡\nPomocou \"reakcií\" môžete rýchlo vyjadri svoje pocity o každého poznámkach. 👍\nPoďte objavovať svet! 🚀"
monthAndDay: "{day}. {month}." monthAndDay: "{day}. {month}."
search: "Hľadať" search: "Hľadať"
notifications: "Oznámenia" notifications: "Oznámenia"
@ -139,7 +139,7 @@ settingGuide: "Odporúčané nastavenia"
cacheRemoteFiles: "Cachovanie vzdialených súborov" cacheRemoteFiles: "Cachovanie vzdialených súborov"
cacheRemoteFilesDescription: "Zakázanie tohoto nastavenia spôsobí, že vzdialené súbory budú odkazované priamo, namiesto ukladania do cache. Ušetrí sa tak miesto na serveri, ale zvýši sa dátový tok, pretože sa negenerujú miniatúry." cacheRemoteFilesDescription: "Zakázanie tohoto nastavenia spôsobí, že vzdialené súbory budú odkazované priamo, namiesto ukladania do cache. Ušetrí sa tak miesto na serveri, ale zvýši sa dátový tok, pretože sa negenerujú miniatúry."
flagAsBot: "Tento účet je bot" flagAsBot: "Tento účet je bot"
flagAsBotDescription: "Ak je tento účet ovládaný programom, zaškrtnite túto voľbu. Ostatní uvidia, že je to bot a zabráni nekonečným interakciám s ďalšími botmi a upraví interné systémy Misskey, aby ho považoval za bota." flagAsBotDescription: "Ak je tento účet ovládaný programom, zaškrtnite túto voľbu. Ostatní uvidia, že je to bot a zabráni nekonečným interakciám s ďalšími botmi a upraví interné systémy Calckey, aby ho považoval za bota."
flagAsCat: "Tento účet je mačka" flagAsCat: "Tento účet je mačka"
flagAsCatDescription: "Zvoľte túto voľbu, aby bol tento účet označený ako mačka." flagAsCatDescription: "Zvoľte túto voľbu, aby bol tento účet označený ako mačka."
flagShowTimelineReplies: "Zobraziť odpovede na poznámky v časovej osi" flagShowTimelineReplies: "Zobraziť odpovede na poznámky v časovej osi"
@ -177,7 +177,6 @@ operations: "Operácie"
software: "Softvér" software: "Softvér"
version: "Verzia" version: "Verzia"
metadata: "Metadáta" metadata: "Metadáta"
withNFiles: "{n} súbor(ov)"
monitor: "Monitor" monitor: "Monitor"
jobQueue: "Fronta úloh" jobQueue: "Fronta úloh"
cpuAndMemory: "CPU a pamäť" cpuAndMemory: "CPU a pamäť"
@ -199,7 +198,7 @@ noUsers: "Žiadni používatelia"
editProfile: "Upraviť profil" editProfile: "Upraviť profil"
noteDeleteConfirm: "Naozaj chcete odstrániť túto poznámku?" noteDeleteConfirm: "Naozaj chcete odstrániť túto poznámku?"
pinLimitExceeded: "Ďalšie poznámky už nemôžete pripnúť." pinLimitExceeded: "Ďalšie poznámky už nemôžete pripnúť."
intro: "Inštalácia Misskey je dokončená! Prosím vytvorte administrátora." intro: "Inštalácia Calckey je dokončená! Prosím vytvorte administrátora."
done: "Hotovo" done: "Hotovo"
processing: "Pracujem..." processing: "Pracujem..."
preview: "Náhľad" preview: "Náhľad"
@ -378,7 +377,7 @@ exploreFediverse: "Objavovať Fediverzum"
popularTags: "Populárne značky" popularTags: "Populárne značky"
userList: "Zoznamy" userList: "Zoznamy"
about: "Informácie" about: "Informácie"
aboutMisskey: "O Misskey" aboutMisskey: "O Calckey"
administrator: "Administrátor" administrator: "Administrátor"
token: "Token" token: "Token"
twoStepAuthentication: "Dvojfaktorová autentifikácia" twoStepAuthentication: "Dvojfaktorová autentifikácia"
@ -524,7 +523,7 @@ sort: "Zoradiť"
ascendingOrder: "Vzostupne" ascendingOrder: "Vzostupne"
descendingOrder: "Zostupne" descendingOrder: "Zostupne"
scratchpad: "Zápisník" scratchpad: "Zápisník"
scratchpadDescription: "Zápisník poskytuje prostredia pre experimenty s AiScriptom. Môžete písať, spúšťať a skúšať vysledky pri interakcii s Misskey." scratchpadDescription: "Zápisník poskytuje prostredia pre experimenty s AiScriptom. Môžete písať, spúšťať a skúšať vysledky pri interakcii s Calckey."
output: "Výstup" output: "Výstup"
script: "Skript" script: "Skript"
disablePagesScript: "Vypnúť AiScript na stránkach" disablePagesScript: "Vypnúť AiScript na stránkach"
@ -699,7 +698,7 @@ onlineUsersCount: "{n} používateľov je online"
nUsers: "{n} používateľov" nUsers: "{n} používateľov"
nNotes: "{n} poznámok" nNotes: "{n} poznámok"
sendErrorReports: "Poslať nahlásenie chyby" sendErrorReports: "Poslať nahlásenie chyby"
sendErrorReportsDescription: "Keď je zapnuté, v prípade problému sa odošlú podrobné informácie o chybe do Misskey. Pomôžete tak zvýšiť kvalitu Misskey.\nTieto informácie zahŕňajú verziu vášho OS, použitý prehliadač, históriu aktivít, atď." sendErrorReportsDescription: "Keď je zapnuté, v prípade problému sa odošlú podrobné informácie o chybe do Calckey. Pomôžete tak zvýšiť kvalitu Calckey.\nTieto informácie zahŕňajú verziu vášho OS, použitý prehliadač, históriu aktivít, atď."
myTheme: "Moja téma" myTheme: "Moja téma"
backgroundColor: "Pozadie" backgroundColor: "Pozadie"
accentColor: "Akcent" accentColor: "Akcent"
@ -790,7 +789,7 @@ hashtags: "Hashtagy"
troubleshooting: "Riešenie problémov" troubleshooting: "Riešenie problémov"
useBlurEffect: "Používať efekty rozmazania v UI" useBlurEffect: "Používať efekty rozmazania v UI"
learnMore: "Zistiť viac" learnMore: "Zistiť viac"
misskeyUpdated: "Misskey sa aktualizoval!" misskeyUpdated: "Calckey sa aktualizoval!"
whatIsNew: "Čo je nové?" whatIsNew: "Čo je nové?"
translate: "Preložiť" translate: "Preložiť"
translatedFrom: "Preložené z {x}" translatedFrom: "Preložené z {x}"
@ -966,8 +965,8 @@ _aboutMisskey:
contributors: "Hlavní prispievatelia" contributors: "Hlavní prispievatelia"
allContributors: "Všetci prispievatelia" allContributors: "Všetci prispievatelia"
source: "Zdrojový kód" source: "Zdrojový kód"
translation: "Preložiť Misskey" translation: "Preložiť Calckey"
donate: "Podporiť Misskey" donate: "Podporiť Calckey"
morePatrons: "Takisto oceňujeme podporu mnoých ďalších, ktorí tu nie sú uvedení. Ďakujeme! 🥰" morePatrons: "Takisto oceňujeme podporu mnoých ďalších, ktorí tu nie sú uvedení. Ďakujeme! 🥰"
patrons: "Prispievatelia" patrons: "Prispievatelia"
_nsfw: _nsfw:
@ -976,8 +975,8 @@ _nsfw:
force: "Skryť všetky médiá" force: "Skryť všetky médiá"
_mfm: _mfm:
cheatSheet: "MFM Cheatsheet" cheatSheet: "MFM Cheatsheet"
intro: "MFM je Misskey exkluzívny značkovací jazyk, ktorý sa dá používať na viacerých miestach. Tu môžete vidieť zoznam všetkej dostupnej MFM syntaxe." intro: "MFM je Calckey exkluzívny značkovací jazyk, ktorý sa dá používať na viacerých miestach. Tu môžete vidieť zoznam všetkej dostupnej MFM syntaxe."
dummy: "Misskey rozširuje svet Fediverza" dummy: "Calckey rozširuje svet Fediverza"
mention: "Zmienka" mention: "Zmienka"
mentionDescription: "Používateľa spomeniete použítím zavináča a mena používateľa" mentionDescription: "Používateľa spomeniete použítím zavináča a mena používateľa"
hashtag: "Hashtag" hashtag: "Hashtag"
@ -1174,6 +1173,27 @@ _time:
minute: "min" minute: "min"
hour: "hod" hour: "hod"
day: "dní" day: "dní"
_tutorial:
title: "How to use Calckey"
step1_1: "Welcome!"
step1_2: "Let's get you set up. You'll be up and running in no time!"
step2_1: "First, please fill out your profile."
step2_2: "Providing some information about who you are will make it easier for others to tell if they want to see your notes or follow you."
step3_1: "Now time to follow some people!"
step3_2: "Your home and social timelines are based off of who you follow, so try following a couple accounts to get started.\nClick the plus circle on the top right of a profile to follow them."
step4_1: "Let's get you out there."
step4_2: "For your first post, some people like to made a {introduction} post or a simple \"Hello world!\""
step5_1: "Timelines, timelines everywhere!"
step5_2: "Your instance has {timelines} different timelines enabled."
step5_3: "The Home {icon} timeline is where you can see posts from your followers."
step5_4: "The Local {icon} timeline is where you can see posts from everyone else on this instance."
step5_5: "The Recommended {icon} timeline is where you can see posts from instances the admins recommend."
step5_6: "The Social {icon} timeline is where you can see posts from friends of your followers."
step5_7: "The Global {icon} timeline is where you can see posts from every other connected instance."
step6_1: "So, what is this place?"
step6_2: "Well, you didn't just join Calckey. You joined a portal to the Fediverse, an interconnected network of thousands of servers, called \"instances\"."
step6_3: "Each server works in different ways, and not all servers run Calckey. This one does though! It's a bit complicated, but you'll get the hang of it in no time."
step6_4: "Now go, explore, and have fun!"
_2fa: _2fa:
alreadyRegistered: "Už ste zaregistrovali 2-faktorové autentifikačné zariadenie." alreadyRegistered: "Už ste zaregistrovali 2-faktorové autentifikačné zariadenie."
registerDevice: "Registrovať nové zariadenie" registerDevice: "Registrovať nové zariadenie"

View file

@ -1,7 +1,7 @@
--- ---
_lang_: "Svenska" _lang_: "Svenska"
headlineMisskey: "Ett nätverk kopplat av noter" headlineMisskey: "Ett nätverk kopplat av noter"
introMisskey: "Välkommen! Misskey är en öppen och decentraliserad mikrobloggningstjänst.\nSkapa en \"not\" och dela dina tankar med alla runtomkring dig. 📡\nMed \"reaktioner\" kan du snabbt uttrycka dina känslor kring andras noter.👍\nLåt oss utforska en nya värld!🚀" introMisskey: "Välkommen! Calckey är en öppen och decentraliserad mikrobloggningstjänst.\nSkapa en \"not\" och dela dina tankar med alla runtomkring dig. 📡\nMed \"reaktioner\" kan du snabbt uttrycka dina känslor kring andras noter.👍\nLåt oss utforska en nya värld!🚀"
monthAndDay: "{day}/{month}" monthAndDay: "{day}/{month}"
search: "Sök" search: "Sök"
notifications: "Notifikationer" notifications: "Notifikationer"
@ -176,7 +176,6 @@ operations: "Operationer"
software: "Mjukvara" software: "Mjukvara"
version: "Version" version: "Version"
metadata: "Metadata" metadata: "Metadata"
withNFiles: "{n} fil(er)"
monitor: "Övervakning" monitor: "Övervakning"
jobQueue: "Jobbkö" jobQueue: "Jobbkö"
cpuAndMemory: "CPU och minne" cpuAndMemory: "CPU och minne"
@ -198,7 +197,7 @@ noUsers: "Det finns inga användare"
editProfile: "Redigera profil" editProfile: "Redigera profil"
noteDeleteConfirm: "Är du säker på att du vill ta bort denna not?" noteDeleteConfirm: "Är du säker på att du vill ta bort denna not?"
pinLimitExceeded: "Du kan inte fästa fler noter" pinLimitExceeded: "Du kan inte fästa fler noter"
intro: "Misskey har installerats! Vänligen skapa en adminanvändare." intro: "Calckey har installerats! Vänligen skapa en adminanvändare."
done: "Klar" done: "Klar"
processing: "Bearbetar..." processing: "Bearbetar..."
preview: "Förhandsvisning" preview: "Förhandsvisning"

View file

@ -1,7 +1,7 @@
--- ---
_lang_: "ภาษาไทย" _lang_: "ภาษาไทย"
headlineMisskey: "เชื่อมต่อเครือข่ายโดยโน้ต" headlineMisskey: "เชื่อมต่อเครือข่ายโดยโน้ต"
introMisskey: "ยินดีต้อนรับจ้าาา! Misskey เป็นบริการไมโครบล็อกโอเพ่นซอร์ส แบบการกระจายอำนาจ\nสร้าง \"โน้ต\" เพื่อแบ่งปันความคิดของคุณกับทุกคนรอบตัวคุณกันเถอะ 📡\nด้วยการ \"รีแอคชั่นผู้คน\" คุณยังสามารถแสดงความรู้สึกของคุณเกี่ยวกับบันทึกของทุกคนได้อย่างรวดเร็ว 👍\n\nแล้วมาท่องสำรวจโลกใบใหม่กันเถอะ! 🚀" introMisskey: "ยินดีต้อนรับจ้าาา! Calckey เป็นบริการไมโครบล็อกโอเพ่นซอร์ส แบบการกระจายอำนาจ\nสร้าง \"โน้ต\" เพื่อแบ่งปันความคิดของคุณกับทุกคนรอบตัวคุณกันเถอะ 📡\nด้วยการ \"รีแอคชั่นผู้คน\" คุณยังสามารถแสดงความรู้สึกของคุณเกี่ยวกับบันทึกของทุกคนได้อย่างรวดเร็ว 👍\n\nแล้วมาท่องสำรวจโลกใบใหม่กันเถอะ! 🚀"
monthAndDay: "{เดือน}/{วัน}" monthAndDay: "{เดือน}/{วัน}"
search: "ค้นหา" search: "ค้นหา"
notifications: "การเเจ้งเตือน" notifications: "การเเจ้งเตือน"
@ -139,7 +139,7 @@ settingGuide: "การตั้งค่าที่แนะนำ"
cacheRemoteFiles: "แคชไฟล์ระยะไกล" cacheRemoteFiles: "แคชไฟล์ระยะไกล"
cacheRemoteFilesDescription: "เมื่อปิดใช้งานการตั้งค่านี้ ไฟล์ระยะไกลนั้นจะถูกโหลดโดยตรงจากอินสแตนซ์ระยะไกล แต่กรณีการปิดใช้งานนี้จะช่วยลดปริมาณการใช้พื้นที่จัดเก็บข้อมูล แต่เพิ่มปริมาณการใช้งาน เพราะเนื่องจากจะไม่มีการสร้างภาพขนาดย่อ" cacheRemoteFilesDescription: "เมื่อปิดใช้งานการตั้งค่านี้ ไฟล์ระยะไกลนั้นจะถูกโหลดโดยตรงจากอินสแตนซ์ระยะไกล แต่กรณีการปิดใช้งานนี้จะช่วยลดปริมาณการใช้พื้นที่จัดเก็บข้อมูล แต่เพิ่มปริมาณการใช้งาน เพราะเนื่องจากจะไม่มีการสร้างภาพขนาดย่อ"
flagAsBot: "ทำเครื่องหมายบอกว่าบัญชีนี้เป็นบอท" flagAsBot: "ทำเครื่องหมายบอกว่าบัญชีนี้เป็นบอท"
flagAsBotDescription: "การเปิดใช้งานตัวเลือกนี้หากบัญชีนี้ถูกควบคุมโดยนักเขียนโปรแกรม หรือ ถ้าหากเปิดใช้งาน มันจะทำหน้าที่เป็นแฟล็กสำหรับนักพัฒนารายอื่นๆ และเพื่อป้องกันการโต้ตอบแบบไม่มีที่สิ้นสุดกับบอทตัวอื่นๆ และยังสามารถปรับเปลี่ยนระบบภายในของ Misskey เพื่อปฏิบัติต่อบัญชีนี้เป็นบอท" flagAsBotDescription: "การเปิดใช้งานตัวเลือกนี้หากบัญชีนี้ถูกควบคุมโดยนักเขียนโปรแกรม หรือ ถ้าหากเปิดใช้งาน มันจะทำหน้าที่เป็นแฟล็กสำหรับนักพัฒนารายอื่นๆ และเพื่อป้องกันการโต้ตอบแบบไม่มีที่สิ้นสุดกับบอทตัวอื่นๆ และยังสามารถปรับเปลี่ยนระบบภายในของ Calckey เพื่อปฏิบัติต่อบัญชีนี้เป็นบอท"
flagAsCat: "ทำเครื่องหมายบอกว่าบัญชีนี้เป็นแมว" flagAsCat: "ทำเครื่องหมายบอกว่าบัญชีนี้เป็นแมว"
flagAsCatDescription: "การเปิดใช้งานตัวเลือกนี้เพื่อทำเครื่องหมายบอกว่าบัญชีนี้เป็นแมว" flagAsCatDescription: "การเปิดใช้งานตัวเลือกนี้เพื่อทำเครื่องหมายบอกว่าบัญชีนี้เป็นแมว"
flagShowTimelineReplies: "แสดงตอบกลับ ในไทม์ไลน์" flagShowTimelineReplies: "แสดงตอบกลับ ในไทม์ไลน์"
@ -177,7 +177,6 @@ operations: "ดำเนินการ"
software: "ซอฟต์แวร์" software: "ซอฟต์แวร์"
version: "เวอร์ชั่น" version: "เวอร์ชั่น"
metadata: "ข้อมูลเมตา" metadata: "ข้อมูลเมตา"
withNFiles: "{n} ไฟล์(s)"
monitor: "มอนิเตอร์" monitor: "มอนิเตอร์"
jobQueue: "คิวงาน" jobQueue: "คิวงาน"
cpuAndMemory: "ซีพียู และ หน่วยความจำ" cpuAndMemory: "ซีพียู และ หน่วยความจำ"
@ -199,7 +198,7 @@ noUsers: "ไม่พบผู้ใช้งาน"
editProfile: "แก้ไขโปรไฟล์" editProfile: "แก้ไขโปรไฟล์"
noteDeleteConfirm: "นายแน่ใจแล้วหรอว่าต้องการลบโน้ตนี้นะ?" noteDeleteConfirm: "นายแน่ใจแล้วหรอว่าต้องการลบโน้ตนี้นะ?"
pinLimitExceeded: "คุณไม่สามารถปักหมุดโน้ตเพิ่มเติมใดๆได้อีก" pinLimitExceeded: "คุณไม่สามารถปักหมุดโน้ตเพิ่มเติมใดๆได้อีก"
intro: "การติดตั้ง Misskey เสร็จสิ้นแล้วนะ! โปรดสร้างผู้ใช้งานที่เป็นผู้ดูแลระบบ" intro: "การติดตั้ง Calckey เสร็จสิ้นแล้วนะ! โปรดสร้างผู้ใช้งานที่เป็นผู้ดูแลระบบ"
done: "เสร็จสิ้น" done: "เสร็จสิ้น"
processing: "กำลังประมวลผล..." processing: "กำลังประมวลผล..."
preview: "แสดงตัวอย่าง" preview: "แสดงตัวอย่าง"
@ -378,7 +377,7 @@ exploreFediverse: "สำรวจเฟดดิเวิร์ส"
popularTags: "แท็กยอดนิยม" popularTags: "แท็กยอดนิยม"
userList: "รายการ" userList: "รายการ"
about: "เกี่ยวกับ" about: "เกี่ยวกับ"
aboutMisskey: "เกี่ยวกับ Misskey" aboutMisskey: "เกี่ยวกับ Calckey"
administrator: "ผู้ดูแลระบบ" administrator: "ผู้ดูแลระบบ"
token: "โทเค็น" token: "โทเค็น"
twoStepAuthentication: "ยืนยันตัวตน 2 ชั้น" twoStepAuthentication: "ยืนยันตัวตน 2 ชั้น"
@ -524,7 +523,7 @@ sort: "เรียงลำดับ"
ascendingOrder: "เรียงจากน้อยไปมาก" ascendingOrder: "เรียงจากน้อยไปมาก"
descendingOrder: "เรียงจากมากไปน้อย" descendingOrder: "เรียงจากมากไปน้อย"
scratchpad: "กระดานทดลอง" scratchpad: "กระดานทดลอง"
scratchpadDescription: "Scratchpad เป็นการจัดเตรียมสภาพแวดล้อมสำหรับการทดลอง AiScript แต่คุณสามารถเขียน ดำเนินการ และตรวจสอบผลลัพธ์ของการโต้ตอบกับ Misskey มันได้ด้วยนะ" scratchpadDescription: "Scratchpad เป็นการจัดเตรียมสภาพแวดล้อมสำหรับการทดลอง AiScript แต่คุณสามารถเขียน ดำเนินการ และตรวจสอบผลลัพธ์ของการโต้ตอบกับ Calckey มันได้ด้วยนะ"
output: "เอาท์พุต" output: "เอาท์พุต"
script: "สคริปต์" script: "สคริปต์"
disablePagesScript: "ปิดการใช้งาน AiScript บนเพจ" disablePagesScript: "ปิดการใช้งาน AiScript บนเพจ"
@ -700,7 +699,7 @@ onlineUsersCount: "{n} ผู้ใช้คนนี้กำลังออน
nUsers: "{n} ผู้ใช้งาน" nUsers: "{n} ผู้ใช้งาน"
nNotes: "{n} โน้ต" nNotes: "{n} โน้ต"
sendErrorReports: "ส่งรายงานว่าข้อผิดพลาด" sendErrorReports: "ส่งรายงานว่าข้อผิดพลาด"
sendErrorReportsDescription: "เมื่อเปิดใช้งาน ข้อมูลข้อผิดพลาดโดยรายละเอียดนั้นจะถูกแชร์ให้กับ Misskey เมื่อเกิดปัญหา ซึ่งช่วยปรับปรุงคุณภาพของ Misskey\nซึ่งจะรวมถึงข้อมูล เช่น เวอร์ชั่นของระบบปฏิบัติการ เบราว์เซอร์ที่คุณใช้ กิจกรรมของคุณใน Misskey เป็นต้น" sendErrorReportsDescription: "เมื่อเปิดใช้งาน ข้อมูลข้อผิดพลาดโดยรายละเอียดนั้นจะถูกแชร์ให้กับ Calckey เมื่อเกิดปัญหา ซึ่งช่วยปรับปรุงคุณภาพของ Calckey\nซึ่งจะรวมถึงข้อมูล เช่น เวอร์ชั่นของระบบปฏิบัติการ เบราว์เซอร์ที่คุณใช้ กิจกรรมของคุณใน Calckey เป็นต้น"
myTheme: "ธีมของฉัน" myTheme: "ธีมของฉัน"
backgroundColor: "ภาพพื้นหลัง" backgroundColor: "ภาพพื้นหลัง"
accentColor: "รูปแบบสี" accentColor: "รูปแบบสี"
@ -791,7 +790,7 @@ hashtags: "แฮชแท็ก"
troubleshooting: "แก้ปัญหา" troubleshooting: "แก้ปัญหา"
useBlurEffect: "ใช้เอฟเฟกต์เบลอใน UI" useBlurEffect: "ใช้เอฟเฟกต์เบลอใน UI"
learnMore: "แสดงให้ดูหน่อย" learnMore: "แสดงให้ดูหน่อย"
misskeyUpdated: "Misskey ได้รับการอัปเดตแล้ว!" misskeyUpdated: "Calckey ได้รับการอัปเดตแล้ว!"
whatIsNew: "แสดงการเปลี่ยนแปลง" whatIsNew: "แสดงการเปลี่ยนแปลง"
translate: "แปลภาษา" translate: "แปลภาษา"
translatedFrom: "แปลมาจาก {x}" translatedFrom: "แปลมาจาก {x}"
@ -971,8 +970,8 @@ _aboutMisskey:
contributors: "ผู้สนับสนุนหลัก" contributors: "ผู้สนับสนุนหลัก"
allContributors: "ผู้มีส่วนร่วมทั้งหมด" allContributors: "ผู้มีส่วนร่วมทั้งหมด"
source: "ซอร์สโค้ด" source: "ซอร์สโค้ด"
translation: "รับแปลภาษา Misskey" translation: "รับแปลภาษา Calckey"
donate: "บริจาคให้กับ Misskey" donate: "บริจาคให้กับ Calckey"
morePatrons: "เราขอขอบคุณสำหรับความช่วยเหลือจากผู้ช่วยอื่นๆ ที่ไม่ได้ระบุไว้ที่นี่นะ ขอขอบคุณ! 🥰" morePatrons: "เราขอขอบคุณสำหรับความช่วยเหลือจากผู้ช่วยอื่นๆ ที่ไม่ได้ระบุไว้ที่นี่นะ ขอขอบคุณ! 🥰"
patrons: "สมาชิกพันธมิตร" patrons: "สมาชิกพันธมิตร"
_nsfw: _nsfw:
@ -981,8 +980,8 @@ _nsfw:
force: "ซ่อนสื่อทั้งหมด" force: "ซ่อนสื่อทั้งหมด"
_mfm: _mfm:
cheatSheet: "โค้ด MFM Cheat Sheet" cheatSheet: "โค้ด MFM Cheat Sheet"
intro: "MFM เป็นภาษามาร์กอัปพิเศษเฉพาะของ Misskey ที่สามารถใช้ได้ในหลายที่ คุณยังสามารถดูรายการไวยากรณ์ MFM ที่มีอยู่ทั้งหมดได้ที่นี่นะ" intro: "MFM เป็นภาษามาร์กอัปพิเศษเฉพาะของ Calckey ที่สามารถใช้ได้ในหลายที่ คุณยังสามารถดูรายการไวยากรณ์ MFM ที่มีอยู่ทั้งหมดได้ที่นี่นะ"
dummy: "Misskey ขยายโลกของ Fediverse" dummy: "Calckey ขยายโลกของ Fediverse"
mention: "กล่าวถึง" mention: "กล่าวถึง"
mentionDescription: "คุณสามารถระบุผู้ใช้โดยใช้ At-Symbol และชื่อผู้ใช้ได้นะ" mentionDescription: "คุณสามารถระบุผู้ใช้โดยใช้ At-Symbol และชื่อผู้ใช้ได้นะ"
hashtag: "แฮชแท็ก" hashtag: "แฮชแท็ก"

View file

@ -1,6 +1,6 @@
--- ---
_lang_: "Türkçe" _lang_: "Türkçe"
introMisskey: "Açık kaynaklı bir dağıtılmış mikroblog hizmeti olan Misskey'e hoş geldiniz.\nMisskey, neler olup bittiğini paylaşmak ve herkese sizden bahsetmek için \"notlar\" oluşturmanıza olanak tanıyan, açık kaynaklı, dağıtılmış bir mikroblog hizmetidir.\nHerkesin notlarına kendi tepkilerinizi hızlıca eklemek için \"Tepkiler\" özelliğini de kullanabilirsiniz👍.\nYeni bir dünyayı keşfedin🚀." introMisskey: "Açık kaynaklı bir dağıtılmış mikroblog hizmeti olan Calckey'e hoş geldiniz.\nMisskey, neler olup bittiğini paylaşmak ve herkese sizden bahsetmek için \"notlar\" oluşturmanıza olanak tanıyan, açık kaynaklı, dağıtılmış bir mikroblog hizmetidir.\nHerkesin notlarına kendi tepkilerinizi hızlıca eklemek için \"Tepkiler\" özelliğini de kullanabilirsiniz👍.\nYeni bir dünyayı keşfedin🚀."
monthAndDay: "{month}Ay {day}Gün" monthAndDay: "{month}Ay {day}Gün"
search: "Arama" search: "Arama"
notifications: "Bildirim" notifications: "Bildirim"

View file

@ -1,7 +1,7 @@
--- ---
_lang_: "Українська" _lang_: "Українська"
headlineMisskey: "Мережа об'єднана записами" headlineMisskey: "Мережа об'єднана записами"
introMisskey: "Ласкаво просимо! Misskey - децентралізована служба мікроблогів з відкритим кодом.\nСтворюйте \"нотатки\", щоб поділитися тим, що відбувається, і розповісти всім про себе 📡\nЗа допомогою \"реакцій\" ви також можете швидко висловити свої почуття щодо нотаток інших 👍\nДосліджуймо новий світ! 🚀" introMisskey: "Ласкаво просимо! Calckey - децентралізована служба мікроблогів з відкритим кодом.\nСтворюйте \"нотатки\", щоб поділитися тим, що відбувається, і розповісти всім про себе 📡\nЗа допомогою \"реакцій\" ви також можете швидко висловити свої почуття щодо нотаток інших 👍\nДосліджуймо новий світ! 🚀"
monthAndDay: "{month}/{day}" monthAndDay: "{month}/{day}"
search: "Пошук" search: "Пошук"
notifications: "Сповіщення" notifications: "Сповіщення"
@ -139,7 +139,7 @@ settingGuide: "Рекомендована конфігурація"
cacheRemoteFiles: "Кешувати дані з інших інстансів" cacheRemoteFiles: "Кешувати дані з інших інстансів"
cacheRemoteFilesDescription: "Якщо кешування вимкнено, віддалені файли завантажуються безпосередньо з віддаленого інстансу. Це зменшує використання сховища, але збільшує трафік, оскільки не генеруются ескізи." cacheRemoteFilesDescription: "Якщо кешування вимкнено, віддалені файли завантажуються безпосередньо з віддаленого інстансу. Це зменшує використання сховища, але збільшує трафік, оскільки не генеруются ескізи."
flagAsBot: "Акаунт бота" flagAsBot: "Акаунт бота"
flagAsBotDescription: "Ввімкніть якщо цей обліковий запис використовується ботом. Ця опція позначить обліковий запис як бота. Це потрібно щоб виключити безкінечну інтеракцію між ботами а також відповідного підлаштування Misskey." flagAsBotDescription: "Ввімкніть якщо цей обліковий запис використовується ботом. Ця опція позначить обліковий запис як бота. Це потрібно щоб виключити безкінечну інтеракцію між ботами а також відповідного підлаштування Calckey."
flagAsCat: "Акаунт кота" flagAsCat: "Акаунт кота"
flagAsCatDescription: "Ввімкніть, щоб позначити, що обліковий запис є котиком." flagAsCatDescription: "Ввімкніть, щоб позначити, що обліковий запис є котиком."
flagShowTimelineReplies: "Показувати відповіді на нотатки на часовій шкалі" flagShowTimelineReplies: "Показувати відповіді на нотатки на часовій шкалі"
@ -177,7 +177,6 @@ operations: "Операції"
software: "Програмне забезпечення" software: "Програмне забезпечення"
version: "Версія" version: "Версія"
metadata: "Метадані" metadata: "Метадані"
withNFiles: "файли: {n}"
monitor: "Монітор" monitor: "Монітор"
jobQueue: "Черга завдань" jobQueue: "Черга завдань"
cpuAndMemory: "ЦП та пам'ять" cpuAndMemory: "ЦП та пам'ять"
@ -199,7 +198,7 @@ noUsers: "Немає користувачів"
editProfile: "Редагувати обліковий запис" editProfile: "Редагувати обліковий запис"
noteDeleteConfirm: "Ви дійсно хочете видалити цей запис?" noteDeleteConfirm: "Ви дійсно хочете видалити цей запис?"
pinLimitExceeded: "Більше записів не можна закріпити" pinLimitExceeded: "Більше записів не можна закріпити"
intro: "Встановлення Misskey завершено! Будь ласка, створіть обліковий запис адміністратора." intro: "Встановлення Calckey завершено! Будь ласка, створіть обліковий запис адміністратора."
done: "Готово" done: "Готово"
processing: "Обробка" processing: "Обробка"
preview: "Попередній перегляд" preview: "Попередній перегляд"
@ -377,7 +376,7 @@ exploreFediverse: "Огляд федіверсу"
popularTags: "Популярні теги" popularTags: "Популярні теги"
userList: "Списки" userList: "Списки"
about: "Інформація" about: "Інформація"
aboutMisskey: "Про Misskey" aboutMisskey: "Про Calckey"
administrator: "Адмін" administrator: "Адмін"
token: "Токен" token: "Токен"
twoStepAuthentication: "Двохфакторна аутентифікація" twoStepAuthentication: "Двохфакторна аутентифікація"
@ -522,7 +521,7 @@ sort: "Сортування"
ascendingOrder: "За зростанням" ascendingOrder: "За зростанням"
descendingOrder: "За спаданням" descendingOrder: "За спаданням"
scratchpad: "Чернетка" scratchpad: "Чернетка"
scratchpadDescription: "Scratchpad надає середовище для експериментів з AiScript. Ви можете писати, виконувати його і тестувати взаємодію з Misskey." scratchpadDescription: "Scratchpad надає середовище для експериментів з AiScript. Ви можете писати, виконувати його і тестувати взаємодію з Calckey."
output: "Вихід" output: "Вихід"
script: "Скрипт" script: "Скрипт"
disablePagesScript: "Вимкнути AiScript на Сторінках" disablePagesScript: "Вимкнути AiScript на Сторінках"
@ -695,7 +694,7 @@ onlineUsersCount: "{n} користувачів онлайн"
nUsers: "{n} Користувачів" nUsers: "{n} Користувачів"
nNotes: "{n} Записів" nNotes: "{n} Записів"
sendErrorReports: "Надіслати звіт про помилки" sendErrorReports: "Надіслати звіт про помилки"
sendErrorReportsDescription: "При увімкненні детальна інформація про помилки буде надана Misskey у разі виникнення проблем, що дасть можливість покращити Misskey." sendErrorReportsDescription: "При увімкненні детальна інформація про помилки буде надана Calckey у разі виникнення проблем, що дасть можливість покращити Calckey."
myTheme: "Моя тема" myTheme: "Моя тема"
backgroundColor: "Фон" backgroundColor: "Фон"
accentColor: "Акцент" accentColor: "Акцент"
@ -761,8 +760,8 @@ _aboutMisskey:
contributors: "Головні помічники" contributors: "Головні помічники"
allContributors: "Всі помічники" allContributors: "Всі помічники"
source: "Вихідний код" source: "Вихідний код"
translation: "Перекладати Misskey" translation: "Перекладати Calckey"
donate: "Пожертвувати Misskey" donate: "Пожертвувати Calckey"
morePatrons: "Ми дуже цінуємо підтримку багатьох інших помічників, не перелічених тут. Дякуємо! 🥰" morePatrons: "Ми дуже цінуємо підтримку багатьох інших помічників, не перелічених тут. Дякуємо! 🥰"
patrons: "Підтримали" patrons: "Підтримали"
_nsfw: _nsfw:
@ -771,8 +770,8 @@ _nsfw:
force: "Приховувати всі медіа файли" force: "Приховувати всі медіа файли"
_mfm: _mfm:
cheatSheet: " Довідка MFM" cheatSheet: " Довідка MFM"
intro: "MFM це ексклюзивна мова розмітки тексту в Misskey, яку можна використовувати в багатьох місцях. Тут ви можете переглянути приклади її синтаксису." intro: "MFM це ексклюзивна мова розмітки тексту в Calckey, яку можна використовувати в багатьох місцях. Тут ви можете переглянути приклади її синтаксису."
dummy: "Misskey розширює світ Федіверсу" dummy: "Calckey розширює світ Федіверсу"
mention: "Згадка" mention: "Згадка"
mentionDescription: "За допомогою знака \"@\" перед ім'ям можна згадати конкретного користувача." mentionDescription: "За допомогою знака \"@\" перед ім'ям можна згадати конкретного користувача."
hashtag: "Хештеґ" hashtag: "Хештеґ"

View file

@ -1,7 +1,7 @@
--- ---
_lang_: "Tiếng Việt" _lang_: "Tiếng Việt"
headlineMisskey: "Mạng xã hội liên hợp" headlineMisskey: "Mạng xã hội liên hợp"
introMisskey: "Xin chào! Misskey là một nền tảng tiểu blog phi tập trung mã nguồn mở.\nViết \"tút\" để chia sẻ những suy nghĩ của bạn 📡\nBằng \"biểu cảm\", bạn có thể bày tỏ nhanh chóng cảm xúc của bạn với các tút 👍\nHãy khám phá một thế giới mới! 🚀" introMisskey: "Xin chào! Calckey là một nền tảng tiểu blog phi tập trung mã nguồn mở.\nViết \"tút\" để chia sẻ những suy nghĩ của bạn 📡\nBằng \"biểu cảm\", bạn có thể bày tỏ nhanh chóng cảm xúc của bạn với các tút 👍\nHãy khám phá một thế giới mới! 🚀"
monthAndDay: "{day} tháng {month}" monthAndDay: "{day} tháng {month}"
search: "Tìm kiếm" search: "Tìm kiếm"
notifications: "Thông báo" notifications: "Thông báo"
@ -139,7 +139,7 @@ settingGuide: "Cài đặt đề xuất"
cacheRemoteFiles: "Tập tin cache từ xa" cacheRemoteFiles: "Tập tin cache từ xa"
cacheRemoteFilesDescription: "Khi tùy chọn này bị tắt, các tập tin từ xa sẽ được tải trực tiếp từ máy chủ khác. Điều này sẽ giúp giảm dung lượng lưu trữ nhưng lại tăng lưu lượng truy cập, vì hình thu nhỏ sẽ không được tạo." cacheRemoteFilesDescription: "Khi tùy chọn này bị tắt, các tập tin từ xa sẽ được tải trực tiếp từ máy chủ khác. Điều này sẽ giúp giảm dung lượng lưu trữ nhưng lại tăng lưu lượng truy cập, vì hình thu nhỏ sẽ không được tạo."
flagAsBot: "Đánh dấu đây là tài khoản bot" flagAsBot: "Đánh dấu đây là tài khoản bot"
flagAsBotDescription: "Bật tùy chọn này nếu tài khoản này được kiểm soát bởi một chương trình. Nếu được bật, nó sẽ được đánh dấu để các nhà phát triển khác ngăn chặn chuỗi tương tác vô tận với các bot khác và điều chỉnh hệ thống nội bộ của Misskey để coi tài khoản này như một bot." flagAsBotDescription: "Bật tùy chọn này nếu tài khoản này được kiểm soát bởi một chương trình. Nếu được bật, nó sẽ được đánh dấu để các nhà phát triển khác ngăn chặn chuỗi tương tác vô tận với các bot khác và điều chỉnh hệ thống nội bộ của Calckey để coi tài khoản này như một bot."
flagAsCat: "Tài khoản này là mèo" flagAsCat: "Tài khoản này là mèo"
flagAsCatDescription: "Bật tùy chọn này để đánh dấu tài khoản là một con mèo." flagAsCatDescription: "Bật tùy chọn này để đánh dấu tài khoản là một con mèo."
flagShowTimelineReplies: "Hiện lượt trả lời trong bảng tin" flagShowTimelineReplies: "Hiện lượt trả lời trong bảng tin"
@ -177,7 +177,6 @@ operations: "Vận hành"
software: "Phần mềm" software: "Phần mềm"
version: "Phiên bản" version: "Phiên bản"
metadata: "Metadata" metadata: "Metadata"
withNFiles: "{n} tập tin"
monitor: "Giám sát" monitor: "Giám sát"
jobQueue: "Công việc chờ xử lý" jobQueue: "Công việc chờ xử lý"
cpuAndMemory: "CPU và Dung lượng" cpuAndMemory: "CPU và Dung lượng"
@ -199,7 +198,7 @@ noUsers: "Chưa có ai"
editProfile: "Sửa hồ sơ" editProfile: "Sửa hồ sơ"
noteDeleteConfirm: "Bạn có chắc muốn xóa tút này?" noteDeleteConfirm: "Bạn có chắc muốn xóa tút này?"
pinLimitExceeded: "Bạn đã đạt giới hạn số lượng tút có thể ghim" pinLimitExceeded: "Bạn đã đạt giới hạn số lượng tút có thể ghim"
intro: "Đã cài đặt Misskey! Xin hãy tạo tài khoản admin." intro: "Đã cài đặt Calckey! Xin hãy tạo tài khoản admin."
done: "Xong" done: "Xong"
processing: "Đang xử lý" processing: "Đang xử lý"
preview: "Xem trước" preview: "Xem trước"
@ -524,7 +523,7 @@ sort: "Sắp xếp"
ascendingOrder: "Tăng dần" ascendingOrder: "Tăng dần"
descendingOrder: "Giảm dần" descendingOrder: "Giảm dần"
scratchpad: "Scratchpad" scratchpad: "Scratchpad"
scratchpadDescription: "Scratchpad cung cấp môi trường cho các thử nghiệm AiScript. Bạn có thể viết, thực thi và kiểm tra kết quả tương tác với Misskey trong đó." scratchpadDescription: "Scratchpad cung cấp môi trường cho các thử nghiệm AiScript. Bạn có thể viết, thực thi và kiểm tra kết quả tương tác với Calckey trong đó."
output: "Nguồn ra" output: "Nguồn ra"
script: "Kịch bản" script: "Kịch bản"
disablePagesScript: "Tắt AiScript trên Trang" disablePagesScript: "Tắt AiScript trên Trang"
@ -700,7 +699,7 @@ onlineUsersCount: "{n} người đang online"
nUsers: "{n} Người" nUsers: "{n} Người"
nNotes: "{n} Tút" nNotes: "{n} Tút"
sendErrorReports: "Báo lỗi" sendErrorReports: "Báo lỗi"
sendErrorReportsDescription: "Khi được bật, thông tin chi tiết về lỗi sẽ được chia sẻ với Misskey khi xảy ra sự cố, giúp nâng cao chất lượng của Misskey.\nBao gồm thông tin như phiên bản hệ điều hành của bạn, trình duyệt bạn đang sử dụng, hoạt động của bạn trong Misskey, v.v." sendErrorReportsDescription: "Khi được bật, thông tin chi tiết về lỗi sẽ được chia sẻ với Calckey khi xảy ra sự cố, giúp nâng cao chất lượng của Calckey.\nBao gồm thông tin như phiên bản hệ điều hành của bạn, trình duyệt bạn đang sử dụng, hoạt động của bạn trong Calckey, v.v."
myTheme: "Theme của tôi" myTheme: "Theme của tôi"
backgroundColor: "Màu nền" backgroundColor: "Màu nền"
accentColor: "Màu phụ" accentColor: "Màu phụ"
@ -791,7 +790,7 @@ hashtags: "Hashtag"
troubleshooting: "Khắc phục sự cố" troubleshooting: "Khắc phục sự cố"
useBlurEffect: "Dùng hiệu ứng làm mờ trong giao diện" useBlurEffect: "Dùng hiệu ứng làm mờ trong giao diện"
learnMore: "Tìm hiểu thêm" learnMore: "Tìm hiểu thêm"
misskeyUpdated: "Misskey vừa được cập nhật!" misskeyUpdated: "Calckey vừa được cập nhật!"
whatIsNew: "Hiện những thay đổi" whatIsNew: "Hiện những thay đổi"
translate: "Dịch" translate: "Dịch"
translatedFrom: "Dịch từ {x}" translatedFrom: "Dịch từ {x}"
@ -971,8 +970,8 @@ _aboutMisskey:
contributors: "Những người đóng góp nổi bật" contributors: "Những người đóng góp nổi bật"
allContributors: "Toàn bộ người đóng góp" allContributors: "Toàn bộ người đóng góp"
source: "Mã nguồn" source: "Mã nguồn"
translation: "Dịch Misskey" translation: "Dịch Calckey"
donate: "Ủng hộ Misskey" donate: "Ủng hộ Calckey"
morePatrons: "Chúng tôi cũng trân trọng sự hỗ trợ của nhiều người đóng góp khác không được liệt kê ở đây. Cảm ơn! 🥰" morePatrons: "Chúng tôi cũng trân trọng sự hỗ trợ của nhiều người đóng góp khác không được liệt kê ở đây. Cảm ơn! 🥰"
patrons: "Người ủng hộ" patrons: "Người ủng hộ"
_nsfw: _nsfw:
@ -981,8 +980,8 @@ _nsfw:
force: "Ẩn mọi media" force: "Ẩn mọi media"
_mfm: _mfm:
cheatSheet: "MFM Cheatsheet" cheatSheet: "MFM Cheatsheet"
intro: "MFM là ngôn ngữ phát triển độc quyền của Misskey có thể được sử dụng ở nhiều nơi. Tại đây bạn có thể xem danh sách tất cả các cú pháp MFM có sẵn." intro: "MFM là ngôn ngữ phát triển độc quyền của Calckey có thể được sử dụng ở nhiều nơi. Tại đây bạn có thể xem danh sách tất cả các cú pháp MFM có sẵn."
dummy: "Misskey mở rộng thế giới Fediverse" dummy: "Calckey mở rộng thế giới Fediverse"
mention: "Nhắc đến" mention: "Nhắc đến"
mentionDescription: "Bạn có thể nhắc đến ai đó bằng cách sử dụng @tên người dùng." mentionDescription: "Bạn có thể nhắc đến ai đó bằng cách sử dụng @tên người dùng."
hashtag: "Hashtag" hashtag: "Hashtag"
@ -1179,6 +1178,27 @@ _time:
minute: "phút" minute: "phút"
hour: "giờ" hour: "giờ"
day: "ngày" day: "ngày"
_tutorial:
title: "How to use Calckey"
step1_1: "Welcome!"
step1_2: "Let's get you set up. You'll be up and running in no time!"
step2_1: "First, please fill out your profile."
step2_2: "Providing some information about who you are will make it easier for others to tell if they want to see your notes or follow you."
step3_1: "Now time to follow some people!"
step3_2: "Your home and social timelines are based off of who you follow, so try following a couple accounts to get started.\nClick the plus circle on the top right of a profile to follow them."
step4_1: "Let's get you out there."
step4_2: "For your first post, some people like to made a {introduction} post or a simple \"Hello world!\""
step5_1: "Timelines, timelines everywhere!"
step5_2: "Your instance has {timelines} different timelines enabled."
step5_3: "The Home {icon} timeline is where you can see posts from your followers."
step5_4: "The Local {icon} timeline is where you can see posts from everyone else on this instance."
step5_5: "The Recommended {icon} timeline is where you can see posts from instances the admins recommend."
step5_6: "The Social {icon} timeline is where you can see posts from friends of your followers."
step5_7: "The Global {icon} timeline is where you can see posts from every other connected instance."
step6_1: "So, what is this place?"
step6_2: "Well, you didn't just join Calckey. You joined a portal to the Fediverse, an interconnected network of thousands of servers, called \"instances\"."
step6_3: "Each server works in different ways, and not all servers run Calckey. This one does though! It's a bit complicated, but you'll get the hang of it in no time."
step6_4: "Now go, explore, and have fun!"
_2fa: _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ị" registerDevice: "Đăng ký một thiết bị"

View file

@ -181,7 +181,6 @@ operations: "操作"
software: "软件" software: "软件"
version: "版本" version: "版本"
metadata: "元数据" metadata: "元数据"
withNFiles: "{n}个文件"
monitor: "服务器状态" monitor: "服务器状态"
jobQueue: "作业队列" jobQueue: "作业队列"
cpuAndMemory: "CPU和内存" cpuAndMemory: "CPU和内存"
@ -1070,6 +1069,8 @@ _channel:
following: "正在关注" following: "正在关注"
usersCount: "有{n}人参与" usersCount: "有{n}人参与"
notesCount: "有{n}个帖子" notesCount: "有{n}个帖子"
nameAndDescription: "名称与描述"
nameOnly: "仅名称"
_menuDisplay: _menuDisplay:
sideFull: "横向" sideFull: "横向"
sideIcon: "横向(图标)" sideIcon: "横向(图标)"

View file

@ -1,7 +1,6 @@
_lang_: "繁體中文" _lang_: "繁體中文"
headlineMisskey: "貼文連繫網路" headlineMisskey: "貼文連繫網路"
introMisskey: "歡迎! Misskey是一個開放原始碼且去中心化的社群網路。\n透過「貼文」分享周邊新鮮事並告訴其他人您的想法\U0001F4E1\ introMisskey: "歡迎! Calckey是一個免費開放原碼去中心化的社群網路🚀"
\n透過「反應」功能對大家的貼文表達情感\U0001F44D\n一起來探索這個新的世界吧\U0001F680"
monthAndDay: "{month}月 {day}日" monthAndDay: "{month}月 {day}日"
search: "搜尋" search: "搜尋"
notifications: "通知" notifications: "通知"
@ -10,13 +9,13 @@ password: "密碼"
forgotPassword: "忘記密碼" forgotPassword: "忘記密碼"
fetchingAsApObject: "從聯邦宇宙取得中" fetchingAsApObject: "從聯邦宇宙取得中"
ok: "OK" ok: "OK"
gotIt: "知道了" gotIt: "知道了"
cancel: "取消" cancel: "取消"
enterUsername: "輸入使用者名稱" enterUsername: "輸入使用者名稱"
renotedBy: "{user} 轉傳了" renotedBy: "{user} 轉傳了"
noNotes: "無貼文" noNotes: "無貼文"
noNotifications: "沒有通知" noNotifications: "沒有通知"
instance: "實例" instance: "伺服器"
settings: "設定" settings: "設定"
basicSettings: "基本設定" basicSettings: "基本設定"
otherSettings: "其他設定" otherSettings: "其他設定"
@ -67,7 +66,7 @@ download: "下載"
driveFileDeleteConfirm: "確定要刪除檔案「{name}」嗎?使用此附件的貼文也會跟著消失。" driveFileDeleteConfirm: "確定要刪除檔案「{name}」嗎?使用此附件的貼文也會跟著消失。"
unfollowConfirm: "確定要取消追隨{name}嗎?" unfollowConfirm: "確定要取消追隨{name}嗎?"
exportRequested: "已請求匯出。這可能會花一點時間。結束後檔案將會被放到雲端裡。" exportRequested: "已請求匯出。這可能會花一點時間。結束後檔案將會被放到雲端裡。"
importRequested: "已請求匯入。這可能會花一點時間" importRequested: "已請求匯入。這可能會花一點時間"
lists: "清單" lists: "清單"
noLists: "你沒有任何清單" noLists: "你沒有任何清單"
note: "貼文" note: "貼文"
@ -80,10 +79,10 @@ manageLists: "管理清單"
error: "錯誤" error: "錯誤"
somethingHappened: "發生錯誤" somethingHappened: "發生錯誤"
retry: "重試" retry: "重試"
pageLoadError: "載入頁面失敗" pageLoadError: "載入頁面失敗"
pageLoadErrorDescription: "這通常是因為網路錯誤或是瀏覽器快取殘留的原因。請先清除瀏覽器快取,稍後再重試" pageLoadErrorDescription: "這通常是因為網路錯誤或是瀏覽器快取殘留的原因。請先清除瀏覽器快取,稍後再重試"
serverIsDead: "伺服器沒有回應。請稍等片刻,然後重試。" serverIsDead: "伺服器沒有回應。請稍等片刻,然後重試。"
youShouldUpgradeClient: "請重新載入以使用新版本的客戶端顯示此頁面" youShouldUpgradeClient: "請重新載入以使用新版本的客戶端顯示此頁面"
enterListName: "輸入清單名稱" enterListName: "輸入清單名稱"
privacy: "隱私" privacy: "隱私"
makeFollowManuallyApprove: "手動審核追隨請求" makeFollowManuallyApprove: "手動審核追隨請求"
@ -96,7 +95,7 @@ followRequestPending: "追隨許可批准中"
enterEmoji: "輸入表情符號" enterEmoji: "輸入表情符號"
renote: "轉發" renote: "轉發"
unrenote: "取消轉發" unrenote: "取消轉發"
renoted: "轉傳成功" renoted: "已轉傳。"
cantRenote: "無法轉發此貼文。" cantRenote: "無法轉發此貼文。"
cantReRenote: "無法轉傳之前已經轉傳過的內容。" cantReRenote: "無法轉傳之前已經轉傳過的內容。"
quote: "引用" quote: "引用"
@ -143,15 +142,15 @@ settingGuide: "推薦設定"
cacheRemoteFiles: "快取遠端檔案" cacheRemoteFiles: "快取遠端檔案"
cacheRemoteFilesDescription: "禁用此設定會停止遠端檔案的緩存,從而節省儲存空間,但資料會因直接連線從而產生額外連接數據。" cacheRemoteFilesDescription: "禁用此設定會停止遠端檔案的緩存,從而節省儲存空間,但資料會因直接連線從而產生額外連接數據。"
flagAsBot: "此使用者是機器人" flagAsBot: "此使用者是機器人"
flagAsBotDescription: "如果本帳戶是由程式控制請啟用此選項。啟用後會作為標示幫助其他開發者防止機器人之間產生無限互動的行為並會調整Calckey內部系統將本帳戶識別為機器人" flagAsBotDescription: "如果本帳戶是由程式控制請啟用此選項。啟用後會作為標示幫助其他開發者防止機器人之間產生無限互動的行為並會調整Calckey內部系統將本帳戶識別為機器人"
flagAsCat: "此使用者是貓" flagAsCat: "此使用者是貓"
flagAsCatDescription: "如果想將本帳戶標示為一隻貓,請開啟此標示" flagAsCatDescription: "如果想將本帳戶標示為一隻貓,請開啟此標示"
flagShowTimelineReplies: "在時間軸上顯示貼文的回覆" flagShowTimelineReplies: "在時間軸上顯示貼文的回覆"
flagShowTimelineRepliesDescription: "啟用時,時間線除了顯示用戶的貼文以外,還會顯示用戶對其他貼文的回覆。" flagShowTimelineRepliesDescription: "啟用時,時間線除了顯示用戶的貼文以外,還會顯示用戶對其他貼文的回覆。"
autoAcceptFollowed: "自動追隨中使用者的追隨請求" autoAcceptFollowed: "自動追隨中使用者的追隨請求"
addAccount: "添加帳戶" addAccount: "添加帳戶"
loginFailed: "登入失敗" loginFailed: "登入失敗"
showOnRemote: "轉到所在實例顯示" showOnRemote: "轉到所在伺服器顯示"
general: "一般" general: "一般"
wallpaper: "桌布" wallpaper: "桌布"
setWallpaper: "設定桌布" setWallpaper: "設定桌布"
@ -166,7 +165,7 @@ selectUser: "選取使用者"
recipient: "收件人" recipient: "收件人"
annotation: "註解" annotation: "註解"
federation: "站台聯邦" federation: "站台聯邦"
instances: "實例" instances: "伺服器"
registeredAt: "初次觀測" registeredAt: "初次觀測"
latestRequestSentAt: "上次發送的請求" latestRequestSentAt: "上次發送的請求"
latestRequestReceivedAt: "上次收到的請求" latestRequestReceivedAt: "上次收到的請求"
@ -176,26 +175,25 @@ charts: "圖表"
perHour: "每小時" perHour: "每小時"
perDay: "每日" perDay: "每日"
stopActivityDelivery: "停止發送活動" stopActivityDelivery: "停止發送活動"
blockThisInstance: "封鎖此實例" blockThisInstance: "封鎖此伺服器"
operations: "操作" operations: "操作"
software: "軟體" software: "軟體"
version: "版本" version: "版本"
metadata: "元資料" metadata: "元資料"
withNFiles: "{n}個檔案"
monitor: "監視器" monitor: "監視器"
jobQueue: "佇列" 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: "請逐行輸入需要封鎖的伺服器。已封鎖的伺服器將無法與本伺服器進行通訊。"
muteAndBlock: "靜音和封鎖" muteAndBlock: "靜音和封鎖"
mutedUsers: "已靜音用戶" mutedUsers: "已靜音用戶"
blockedUsers: "已封鎖用戶" blockedUsers: "已封鎖用戶"
@ -218,9 +216,9 @@ all: "全部"
subscribing: "訂閱中" subscribing: "訂閱中"
publishing: "直播中" publishing: "直播中"
notResponding: "沒有回應" notResponding: "沒有回應"
instanceFollowing: "追蹤實例" instanceFollowing: "追蹤伺服器"
instanceFollowers: "追蹤實例" instanceFollowers: "伺服器的追蹤者"
instanceUsers: "用戶" instanceUsers: "此伺服器的用戶"
changePassword: "修改密碼" changePassword: "修改密碼"
security: "安全性" security: "安全性"
retypedNotMatch: "兩次輸入不一致。" retypedNotMatch: "兩次輸入不一致。"
@ -310,8 +308,8 @@ unwatch: "取消追隨"
accept: "接受" accept: "接受"
reject: "拒絕" reject: "拒絕"
normal: "正常" normal: "正常"
instanceName: "實例名稱" instanceName: "伺服器名稱"
instanceDescription: "實例說明" instanceDescription: "伺服器說明"
maintainerName: "管理員名稱" maintainerName: "管理員名稱"
maintainerEmail: "管理員郵箱" maintainerEmail: "管理員郵箱"
tosUrl: "服務條款URL" tosUrl: "服務條款URL"
@ -341,7 +339,7 @@ basicInfo: "基本資訊"
pinnedUsers: "置頂用戶" pinnedUsers: "置頂用戶"
pinnedUsersDescription: "在「發現」頁面中使用換行標記想要置頂的使用者。" pinnedUsersDescription: "在「發現」頁面中使用換行標記想要置頂的使用者。"
pinnedPages: "釘選頁面" pinnedPages: "釘選頁面"
pinnedPagesDescription: "輸入要固定至實例首頁的頁面路徑,以換行符分隔。" pinnedPagesDescription: "輸入要固定至伺服器首頁的頁面路徑,以換行符分隔。"
pinnedClipId: "置頂的摘錄ID" pinnedClipId: "置頂的摘錄ID"
pinnedNotes: "已置頂的貼文" pinnedNotes: "已置頂的貼文"
hcaptcha: "hCaptcha" hcaptcha: "hCaptcha"
@ -359,7 +357,7 @@ name: "名稱"
antennaSource: "接收來源" antennaSource: "接收來源"
antennaKeywords: "包含關鍵字" antennaKeywords: "包含關鍵字"
antennaExcludeKeywords: "排除關鍵字" antennaExcludeKeywords: "排除關鍵字"
antennaKeywordsDescription: "用空格分隔指定AND、用換行符分隔指定OR" antennaKeywordsDescription: "用空格分隔指定AND、用換行符分隔指定OR"
notifyAntenna: "通知有新貼文" notifyAntenna: "通知有新貼文"
withFileAntenna: "僅帶有附件的貼文" withFileAntenna: "僅帶有附件的貼文"
enableServiceworker: "開啟 ServiceWorker" enableServiceworker: "開啟 ServiceWorker"
@ -400,7 +398,7 @@ newPasswordIs: "新密碼為「{password}」"
reduceUiAnimation: "減少介面的動態視覺" reduceUiAnimation: "減少介面的動態視覺"
share: "分享" share: "分享"
notFound: "找不到" notFound: "找不到"
notFoundDescription: "找不到與指定URL回應的頁面" notFoundDescription: "找不到與指定URL回應的頁面"
uploadFolder: "預設上傳資料夾" uploadFolder: "預設上傳資料夾"
cacheClear: "清除快取" cacheClear: "清除快取"
markAsReadAllNotifications: "標記所有通知為已讀" markAsReadAllNotifications: "標記所有通知為已讀"
@ -435,10 +433,10 @@ onlyOneFileCanBeAttached: "只能加入一個附件"
signinRequired: "請先登入" signinRequired: "請先登入"
invitations: "邀請" invitations: "邀請"
invitationCode: "邀請碼" invitationCode: "邀請碼"
checking: "確認中" checking: "確認中..."
available: "可用的" available: "可用的"
unavailable: "不可用的" unavailable: "不可用的"
usernameInvalidFormat: "可使用大小寫英文字母、數字和底線" usernameInvalidFormat: "可使用大小寫英文字母、數字和底線"
tooShort: "過短" tooShort: "過短"
tooLong: "過長" tooLong: "過長"
weakPassword: "密碼強度過弱" weakPassword: "密碼強度過弱"
@ -461,7 +459,7 @@ joinOrCreateGroup: "請加入現有群組,或創建新群組。"
noHistory: "沒有歷史紀錄" noHistory: "沒有歷史紀錄"
signinHistory: "登入歷史" signinHistory: "登入歷史"
disableAnimatedMfm: "禁用MFM動畫" disableAnimatedMfm: "禁用MFM動畫"
doing: "正在進行" doing: "正在處理..."
category: "類別" category: "類別"
tags: "標籤" tags: "標籤"
docSource: "文件來源" docSource: "文件來源"
@ -487,8 +485,8 @@ hideThisNote: "隱藏此貼文"
showFeaturedNotesInTimeline: "在時間軸上顯示熱門推薦" showFeaturedNotesInTimeline: "在時間軸上顯示熱門推薦"
objectStorage: "Object Storage (物件儲存)" objectStorage: "Object Storage (物件儲存)"
useObjectStorage: "使用Object Storage" useObjectStorage: "使用Object Storage"
objectStorageBaseUrl: "Base URL" objectStorageBaseUrl: "URL"
objectStorageBaseUrlDesc: "引用時的URL。如果您使用的是CDN或反向代理请指定其URL例如S3“https://<bucket>.s3.amazonaws.com”GCS“https://storage.googleapis.com/<bucket>”" objectStorageBaseUrlDesc: "引用時的URL。如果你使用的是CDN或反向代理請指定其網址URL。\n例如S3“https://<bucket>.s3.amazonaws.com”GCS“https://storage.googleapis.com/<bucket>”"
objectStorageBucket: "儲存空間Bucket" objectStorageBucket: "儲存空間Bucket"
objectStorageBucketDesc: "請指定您正在使用的服務的存儲桶名稱。" objectStorageBucketDesc: "請指定您正在使用的服務的存儲桶名稱。"
objectStoragePrefix: "前綴" objectStoragePrefix: "前綴"
@ -536,8 +534,8 @@ updateRemoteUser: "更新遠端使用者資訊"
deleteAllFiles: "刪除所有檔案" deleteAllFiles: "刪除所有檔案"
deleteAllFilesConfirm: "要删除所有檔案嗎?" deleteAllFilesConfirm: "要删除所有檔案嗎?"
removeAllFollowing: "解除所有追蹤" removeAllFollowing: "解除所有追蹤"
removeAllFollowingDescription: "解除{host}所有的追蹤。在實例不再存在時執行。" removeAllFollowingDescription: "解除{host}所有的追蹤。在伺服器不再存在時執行。"
userSuspended: "該使用者已被停用" userSuspended: "此使用者已被停用。"
userSilenced: "該用戶已被禁言。" userSilenced: "該用戶已被禁言。"
yourAccountSuspendedTitle: "帳戶已被凍結" yourAccountSuspendedTitle: "帳戶已被凍結"
yourAccountSuspendedDescription: "由於違反了伺服器的服務條款或其他原因,該帳戶已被凍結。 您可以與管理員連繫以了解更多訊息。 請不要創建一個新的帳戶。" yourAccountSuspendedDescription: "由於違反了伺服器的服務條款或其他原因,該帳戶已被凍結。 您可以與管理員連繫以了解更多訊息。 請不要創建一個新的帳戶。"
@ -548,7 +546,7 @@ relays: "中繼"
addRelay: "新增中繼" addRelay: "新增中繼"
inboxUrl: "收件夾URL" inboxUrl: "收件夾URL"
addedRelays: "已加入的中繼" addedRelays: "已加入的中繼"
serviceworkerInfo: "您需要啟用推送通知" serviceworkerInfo: "您需要啟用推送通知"
deletedNote: "已删除的貼文" deletedNote: "已删除的貼文"
invisibleNote: "隱藏的貼文" invisibleNote: "隱藏的貼文"
enableInfiniteScroll: "啟用自動滾動頁面模式" enableInfiniteScroll: "啟用自動滾動頁面模式"
@ -594,14 +592,14 @@ smtpHost: "主機"
smtpPort: "埠" smtpPort: "埠"
smtpUser: "使用者名稱" smtpUser: "使用者名稱"
smtpPass: "密碼" smtpPass: "密碼"
emptyToDisableSmtpAuth: "留空使用者名稱和密碼以關閉SMTP驗證。" emptyToDisableSmtpAuth: "留空使用者名稱及密碼以關閉SMTP驗證"
smtpSecure: "在 SMTP 連接中使用隱式 SSL/TLS" smtpSecure: "在 SMTP 連接中使用隱式 SSL/TLS"
smtpSecureInfo: "使用STARTTLS時關閉。" smtpSecureInfo: "如使用STARTTLS請關閉"
testEmail: "測試郵件發送" testEmail: "測試郵件發送"
wordMute: "被靜音的文字" wordMute: "被靜音的文字"
regexpError: "正規表達式錯誤" regexpError: "正規表達式錯誤"
regexpErrorDescription: "{tab} 靜音文字的第 {line} 行的正規表達式有錯誤:" regexpErrorDescription: "{tab} 靜音文字的第 {line} 行的正規表達式有錯誤:"
instanceMute: "實例的靜音" instanceMute: "伺服器的靜音"
userSaysSomething: "{name}說了什麼" userSaysSomething: "{name}說了什麼"
makeActive: "啟用" makeActive: "啟用"
display: "檢視" display: "檢視"
@ -614,7 +612,7 @@ database: "資料庫"
channel: "頻道" channel: "頻道"
create: "新增" create: "新增"
notificationSetting: "通知設定" notificationSetting: "通知設定"
notificationSettingDesc: "選擇顯示通知的類型" notificationSettingDesc: "選擇顯示通知的類型"
useGlobalSetting: "使用全域設定" useGlobalSetting: "使用全域設定"
useGlobalSettingDesc: "啟用時,將使用帳戶通知設定。停用時,則可以單獨設定。" useGlobalSettingDesc: "啟用時,將使用帳戶通知設定。停用時,則可以單獨設定。"
other: "其他" other: "其他"
@ -632,15 +630,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: "系統"
@ -690,7 +688,7 @@ experimentalFeatures: "實驗中的功能"
developer: "開發者" developer: "開發者"
makeExplorable: "使自己的帳戶能夠在“探索”頁面中顯示" makeExplorable: "使自己的帳戶能夠在“探索”頁面中顯示"
makeExplorableDescription: "如果關閉,帳戶將不會被顯示在\"探索\"頁面中。" makeExplorableDescription: "如果關閉,帳戶將不會被顯示在\"探索\"頁面中。"
showGapBetweenNotesInTimeline: "分開顯示時間線上的貼文。" showGapBetweenNotesInTimeline: "分開顯示時間軸上的貼文"
duplicate: "複製" duplicate: "複製"
left: "左" left: "左"
center: "置中" center: "置中"
@ -704,7 +702,7 @@ onlineUsersCount: "{n}人正在線上"
nUsers: "{n}用戶" nUsers: "{n}用戶"
nNotes: "{n}貼文" nNotes: "{n}貼文"
sendErrorReports: "傳送錯誤報告" sendErrorReports: "傳送錯誤報告"
sendErrorReportsDescription: "啟用後,問題報告將傳送至開發者以提升軟體品質。問題報告可能包括OS版本瀏覽器類型行為歷史記錄等。" sendErrorReportsDescription: "啟用後,問題報告將傳送至Calckey開發者以提升軟體品質。\n問題報告可能包括OS版本瀏覽器類型行為歷史記錄等。"
myTheme: "我的佈景主題" myTheme: "我的佈景主題"
backgroundColor: "背景" backgroundColor: "背景"
accentColor: "重點色彩" accentColor: "重點色彩"
@ -728,7 +726,7 @@ capacity: "容量"
inUse: "已使用" inUse: "已使用"
editCode: "編輯代碼" editCode: "編輯代碼"
apply: "套用" apply: "套用"
receiveAnnouncementFromInstance: "接收由本實例發出的電郵通知" receiveAnnouncementFromInstance: "接收由本伺服器發出的電郵通知"
emailNotification: "郵件通知" emailNotification: "郵件通知"
publish: "發佈" publish: "發佈"
inChannelSearch: "頻道内搜尋" inChannelSearch: "頻道内搜尋"
@ -756,7 +754,7 @@ active: "最近活躍"
offline: "離線" offline: "離線"
notRecommended: "不推薦" notRecommended: "不推薦"
botProtection: "Bot防護" botProtection: "Bot防護"
instanceBlocking: "已封鎖的實例" instanceBlocking: "聯邦管理"
selectAccount: "選擇帳戶" selectAccount: "選擇帳戶"
switchAccount: "切換帳戶" switchAccount: "切換帳戶"
enabled: "已啟用" enabled: "已啟用"
@ -781,7 +779,7 @@ priority: "優先級"
high: "高" high: "高"
middle: "中" middle: "中"
low: "低" low: "低"
emailNotConfiguredWarning: "沒有設定電地址" emailNotConfiguredWarning: "沒有設定電郵地址"
ratio: "%" ratio: "%"
previewNoteText: "預覽文本" previewNoteText: "預覽文本"
customCss: "自定義 CSS" customCss: "自定義 CSS"
@ -817,11 +815,11 @@ controlPanel: "控制台"
manageAccounts: "管理帳戶" manageAccounts: "管理帳戶"
makeReactionsPublic: "將反應設為公開" makeReactionsPublic: "將反應設為公開"
makeReactionsPublicDescription: "將您做過的反應設為公開可見。" makeReactionsPublicDescription: "將您做過的反應設為公開可見。"
classic: "經典" classic: "置中"
muteThread: "將貼文串設為靜音" muteThread: "將貼文串設為靜音"
unmuteThread: "將貼文串的靜音解除" unmuteThread: "將貼文串的靜音解除"
ffVisibility: "連接的公開範圍" ffVisibility: "連接的公開範圍"
ffVisibilityDescription: "您可以設定您的關注/關注者資訊的公開範圍" ffVisibilityDescription: "您可以設定您的關注/關注者資訊的公開範圍"
continueThread: "查看更多貼文" continueThread: "查看更多貼文"
deleteAccountConfirm: "將要刪除帳戶。是否確定?" deleteAccountConfirm: "將要刪除帳戶。是否確定?"
incorrectPassword: "密碼錯誤。" incorrectPassword: "密碼錯誤。"
@ -840,9 +838,9 @@ themeColor: "主題顏色"
size: "大小" size: "大小"
numberOfColumn: "列數" numberOfColumn: "列數"
searchByGoogle: "搜尋" searchByGoogle: "搜尋"
instanceDefaultLightTheme: "實例預設的淺色主題" instanceDefaultLightTheme: "伺服器預設的淺色主題"
instanceDefaultDarkTheme: "實例預設的深色主題" instanceDefaultDarkTheme: "伺服器預設的深色主題"
instanceDefaultThemeDescription: "輸入物件形式的主题代碼" instanceDefaultThemeDescription: "輸入物件形式的主題代碼。"
mutePeriod: "靜音的期限" mutePeriod: "靜音的期限"
indefinitely: "無期限" indefinitely: "無期限"
tenMinutes: "10分鐘" tenMinutes: "10分鐘"
@ -890,17 +888,17 @@ cannotUploadBecauseInappropriate: "由於判定可能包含不適當的內容,
cannotUploadBecauseNoFreeSpace: "由於雲端硬碟沒有可用空間,因此無法上傳。" cannotUploadBecauseNoFreeSpace: "由於雲端硬碟沒有可用空間,因此無法上傳。"
beta: "Beta" beta: "Beta"
enableAutoSensitive: "自動NSFW判定" enableAutoSensitive: "自動NSFW判定"
enableAutoSensitiveDescription: "如可用,請利用機器學習在媒體上自動設置 NSFW 旗標。 即使關閉此功能,依實例而定也可能會自動設置。" enableAutoSensitiveDescription: "如可用,請利用機器學習在媒體上自動設置 NSFW 旗標。 即使關閉此功能,依伺服器而定也可能會自動設置。"
activeEmailValidationDescription: "積極地驗證用戶的電子郵件地址,判斷它是否為免洗地址,或者它是否可以通信。 若關閉,則只會檢查字元是否正確。" activeEmailValidationDescription: "積極地驗證用戶的電子郵件地址,判斷它是否為免洗地址,或者它是否可以通信。 若關閉,則只會檢查字元是否正確。"
navbar: "導覽列" navbar: "導覽列"
shuffle: "隨機" shuffle: "隨機"
account: "帳戶" account: "帳戶"
move: "移動" move: "移動"
customKaTeXMacro: "自定義 KaTeX 宏" customKaTeXMacro: "自定義 KaTeX 宏"
customKaTeXMacroDescription: "使用宏來輕鬆的輸入數學表達式吧!宏的用法與 LaTeX 中的命令定義相同。你可以使用 \\newcommand{\\\ customKaTeXMacroDescription: "使用宏來輕鬆的輸入數學表達式吧!宏的用法與 LaTeX 中的命令定義相同。你可以使用 \\newcommand{\\
name}{content} 或 \\newcommand{\\name}[number of arguments]{content} 來輸入數學表達式。舉個例子,\\\ name}{content} 或 \\newcommand{\\name}[number of arguments]{content} 來輸入數學表達式。舉個例子,\\
newcommand{\\add}[2]{#1 + #2} 會將 \\add{3}{foo} 展開為 3 + foo。此外宏名稱外的花括號 {} 可以被替換為圓括號\ newcommand{\\add}[2]{#1 + #2} 會將 \\add{3}{foo} 展開為 3 + foo。此外宏名稱外的花括號 {} 可以被替換為圓括號
\ () 和方括號 [],這會影響用於參數的括號。每行只能夠定義一個宏,無法在中間換行,且無效的行將被忽略。只支持簡單字符串替換功能,不支持高級語法,如條件分支等。" () 和方括號 [],這會影響用於參數的括號。每行只能夠定義一個宏,無法在中間換行,且無效的行將被忽略。只支持簡單字符串替換功能,不支持高級語法,如條件分支等。"
enableCustomKaTeXMacro: "啟用自定義 KaTeX 宏" enableCustomKaTeXMacro: "啟用自定義 KaTeX 宏"
_sensitiveMediaDetection: _sensitiveMediaDetection:
description: "您可以使用機器學習自動檢測敏感媒體並將其用於審核。 伺服器的負荷會稍微增加。" description: "您可以使用機器學習自動檢測敏感媒體並將其用於審核。 伺服器的負荷會稍微增加。"
@ -937,7 +935,7 @@ _ad:
_forgotPassword: _forgotPassword:
enterEmail: "請輸入您的帳戶註冊的電子郵件地址。 密碼重置連結將被發送到該電子郵件地址。" enterEmail: "請輸入您的帳戶註冊的電子郵件地址。 密碼重置連結將被發送到該電子郵件地址。"
ifNoEmail: "如果您還沒有註冊您的電子郵件地址,請聯繫管理員。" ifNoEmail: "如果您還沒有註冊您的電子郵件地址,請聯繫管理員。"
contactAdmin: "此實例不支持電子郵件,請聯繫您的管理員重置您的密碼。" contactAdmin: "此伺服器不支援使用電郵,請聯繫您的管理員重置你的密碼。"
_gallery: _gallery:
my: "我的貼文" my: "我的貼文"
liked: "喜歡的貼文" liked: "喜歡的貼文"
@ -969,7 +967,7 @@ _preferencesBackups:
createdAt: "建立日期:{date} {time}" createdAt: "建立日期:{date} {time}"
updatedAt: "更新日期:{date} {time}" updatedAt: "更新日期:{date} {time}"
cannotLoad: "無法讀取" cannotLoad: "無法讀取"
invalidFile: "檔案形式錯誤。" invalidFile: "無效的檔案格式"
_registry: _registry:
scope: "範圍" scope: "範圍"
key: "機碼" key: "機碼"
@ -983,7 +981,7 @@ _aboutMisskey:
source: "原始碼" source: "原始碼"
translation: "翻譯Calckey" translation: "翻譯Calckey"
donate: "贊助Calckey" donate: "贊助Calckey"
morePatrons: "還有許許多多幫助我們的其他人,非常感謝你們。 \U0001F970" morePatrons: "還有許許多多幫助我們的其他人,非常感謝你們。 🥰"
patrons: "贊助者" patrons: "贊助者"
_nsfw: _nsfw:
respect: "隱藏敏感內容" respect: "隱藏敏感內容"
@ -1012,13 +1010,13 @@ _mfm:
blockCode: "程式碼(區塊)" blockCode: "程式碼(區塊)"
blockCodeDescription: "在區塊中用高亮度顯示,例如複數行的程式碼語法。" blockCodeDescription: "在區塊中用高亮度顯示,例如複數行的程式碼語法。"
inlineMath: "數學公式(內嵌)" inlineMath: "數學公式(內嵌)"
inlineMathDescription: "顯示內嵌的KaTeX數學公式" inlineMathDescription: "顯示內嵌的KaTeX數學公式"
blockMath: "數學公式(方塊)" blockMath: "數學公式(方塊)"
blockMathDescription: "以區塊顯示KaTeX數學式" blockMathDescription: "以區塊顯示KaTeX數學式"
quote: "引用" quote: "引用"
quoteDescription: "可以用來表示引用的内容。" quoteDescription: "可以用來表示引用的内容。"
emoji: "自訂表情符號" emoji: "自訂表情符號"
emojiDescription: "您可以通過將自定義表情符號名稱括在冒號中來顯示自定義表情符號。 " emojiDescription: "您可以通過將自定義表情符號名稱括在冒號中來顯示自定義表情符號。"
search: "搜尋" search: "搜尋"
searchDescription: "您可以顯示所輸入的搜索框。" searchDescription: "您可以顯示所輸入的搜索框。"
flip: "翻轉" flip: "翻轉"
@ -1046,7 +1044,7 @@ _mfm:
blur: "模糊" blur: "模糊"
blurDescription: "產生模糊效果。将游標放在上面即可將内容顯示出來。" blurDescription: "產生模糊效果。将游標放在上面即可將内容顯示出來。"
font: "字型" font: "字型"
fontDescription: "您可以設定顯示內容的字型" fontDescription: "您可以設定顯示內容的字型"
rainbow: "彩虹" rainbow: "彩虹"
rainbowDescription: "用彩虹色來顯示內容。" rainbowDescription: "用彩虹色來顯示內容。"
sparkle: "閃閃發光" sparkle: "閃閃發光"
@ -1055,6 +1053,12 @@ _mfm:
rotateDescription: "以指定的角度旋轉。" rotateDescription: "以指定的角度旋轉。"
plain: "簡潔" plain: "簡潔"
plainDescription: "停用全部的內部語法。" plainDescription: "停用全部的內部語法。"
play: 播放 MFM
stop: 暫停MFM
warn: MFM 可能包含快速移動或顯眼的動畫
position: 位置
alwaysPlay: 自動播放所有MFM動畫
positionDescription: 按指定數量移動內容。
_instanceTicker: _instanceTicker:
none: "隱藏" none: "隱藏"
remote: "向遠端使用者顯示" remote: "向遠端使用者顯示"
@ -1063,6 +1067,7 @@ _serverDisconnectedBehavior:
reload: "自動重載" reload: "自動重載"
dialog: "彈出式警告" dialog: "彈出式警告"
quiet: "非侵入式警告" quiet: "非侵入式警告"
nothing:
_channel: _channel:
create: "建立頻道" create: "建立頻道"
edit: "編輯頻道" edit: "編輯頻道"
@ -1073,6 +1078,8 @@ _channel:
following: "關注中" following: "關注中"
usersCount: "有{n}人參與" usersCount: "有{n}人參與"
notesCount: "有{n}個貼文" notesCount: "有{n}個貼文"
nameAndDescription: "名稱與說明"
nameOnly: "僅名稱"
_menuDisplay: _menuDisplay:
sideFull: "側向" sideFull: "側向"
sideIcon: "側向(圖示)" sideIcon: "側向(圖示)"
@ -1088,10 +1095,10 @@ _wordMute:
hard: "硬性靜音" hard: "硬性靜音"
mutedNotes: "已靜音的貼文" mutedNotes: "已靜音的貼文"
_instanceMute: _instanceMute:
instanceMuteDescription: "包括對被靜音實例上的用戶的回覆,被設定的實例上所有貼文及轉發都會被靜音。" instanceMuteDescription: "包括對被靜音伺服器上的用戶的回覆,被設定的伺服器上所有貼文及轉發都會被靜音。"
instanceMuteDescription2: "設定時以換行進行分隔" instanceMuteDescription2: "設定時以換行進行分隔"
title: "被設定的實例,貼文將被隱藏。" title: "被設定的伺服器,貼文將被隱藏。"
heading: "將實例靜音" heading: "將會被靜音的伺服器"
_theme: _theme:
explore: "取得佈景主題" explore: "取得佈景主題"
install: "安裝佈景主題" install: "安裝佈景主題"
@ -1109,13 +1116,13 @@ _theme:
constant: "常數" constant: "常數"
defaultValue: "預設值" defaultValue: "預設值"
color: "顏色" color: "顏色"
refProp: "查看屬性 " refProp: "查看屬性"
refConst: "查看常數" refConst: "查看常數"
key: "按鍵" key: "按鍵"
func: "函数" func: "函数"
funcKind: "功能類型" funcKind: "功能類型"
argument: "參數" argument: "參數"
basedProp: "要基於的屬性的名稱 " basedProp: "要基於的屬性的名稱"
alpha: "透明度" alpha: "透明度"
darken: "暗度" darken: "暗度"
lighten: "亮度" lighten: "亮度"
@ -1131,9 +1138,9 @@ _theme:
panel: "面板" panel: "面板"
shadow: "陰影" shadow: "陰影"
header: "標題" header: "標題"
navBg: "側邊欄的背景 " navBg: "側邊欄的背景"
navFg: "側邊欄的文字" navFg: "側邊欄的文字"
navHoverFg: "側邊欄文字(懸停) " navHoverFg: "側邊欄文字(懸停)"
navActive: "側邊欄文本 (活動)" navActive: "側邊欄文本 (活動)"
navIndicator: "側邊欄指示符" navIndicator: "側邊欄指示符"
link: "鏈接" link: "鏈接"
@ -1191,27 +1198,27 @@ _time:
day: "日" day: "日"
_tutorial: _tutorial:
title: "如何使用Calckey" title: "如何使用Calckey"
step1_1: "迎!" step1_1: "迎!"
step1_2: "让我们把你安排好。你很快就会启动并运行!" step1_2: "讓我們把你安排好。你很快就會啟動並運行!"
step2_1: "首先,请完成您的个人资料。" step2_1: "首先,請完成你的個人資料。"
step2_2: "通过提供一些关于你自己的信息,其他人会更容易了解他们是否想看到你的帖子或关注你。" step2_2: "通過提供一些關於你自己的資料,其他人會更容易了解他們是否想看到你的帖子或關注你。"
step3_1: "现在是时候跟随一些人了!" step3_1: "現在是時候追隨一些人了!"
step3_2: "你的主页和社交馈送是基于你所关注的人,所以试着先关注几个账户。{n点击个人资料右上角的加号圈就可以关注它。" step3_2: "你的主頁和社交時間軸是基於你所追蹤的人,所以試著先追蹤幾個賬戶。\n點擊個人資料右上角的加號圈就可以關注它。"
step4_1: "让我们出去找你。" step4_1: "讓我們出去找你。"
step4_2: "对于他们的第一条信息,有些人喜欢做{introduction}或一个简单的 \"hello world!\"" step4_2: "對於他們的第一條信息,有些人喜歡做 {introduction} 或一個簡單的 \"hello world!\""
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: "好吧你不只是加入卡尔基。你已经加入了Fediverse的一个门户这是一个由成千上万台服务器组成的互联网络被称为 \"实例\"" step6_2: "你不只是加入Calckey。你已經加入了Fediverse的一個門戶這是一個由成千上萬台服務器組成的互聯網絡。"
step6_3: "每个服务器的工作方式不同并不是所有的服务器都运行Calckey。但这个人确实如此! 这有点复杂,但你很快就会明白的。" step6_3: "每個服務器也有不同而並不是所有的服務器都運行Calckey。但這個服務器確實是運行Calckey的! 你可能會覺得有點複雜,但你很快就會明白的。"
step6_4: "现在去学习并享受乐趣" step6_4: "現在開始探索吧"
_2fa: _2fa:
alreadyRegistered: "此設備已經被註冊過了" alreadyRegistered: "你已註冊過一個雙重認證的裝置。"
registerDevice: "註冊裝置" registerDevice: "註冊裝置"
registerKey: "註冊鍵" registerKey: "註冊鍵"
step1: "首先,在您的設備上安裝二步驗證程式,例如{a}或{b}。" step1: "首先,在您的設備上安裝二步驗證程式,例如{a}或{b}。"
@ -1288,13 +1295,13 @@ _widgets:
digitalClock: "電子時鐘" digitalClock: "電子時鐘"
unixClock: "UNIX時間" unixClock: "UNIX時間"
federation: "聯邦宇宙" federation: "聯邦宇宙"
instanceCloud: "實例雲" instanceCloud: "伺服器雲端"
postForm: "發佈窗口" postForm: "發佈窗口"
slideshow: "幻燈片" slideshow: "幻燈片"
button: "按鈕" button: "按鈕"
onlineUsers: "線上的用戶" onlineUsers: "線上的用戶"
jobQueue: "佇列" jobQueue: "佇列"
serverMetric: "器指標 " serverMetric: "服器指標"
aiscript: "AiScript控制台" aiscript: "AiScript控制台"
aichan: "小藍" aichan: "小藍"
_cw: _cw:
@ -1303,14 +1310,14 @@ _cw:
chars: "{count}字元" chars: "{count}字元"
files: "{count} 個檔案" files: "{count} 個檔案"
_poll: _poll:
noOnlyOneChoice: "至少需要兩個選項" noOnlyOneChoice: "至少需要兩個選項"
choiceN: "選擇{n}" choiceN: "選擇{n}"
noMore: "沒辦法再添加選項了" noMore: "沒辦法再添加選項了"
canMultipleVote: "可以多次投票" canMultipleVote: "可以多次投票"
expiration: "期限" expiration: "期限"
infinite: "無期限" infinite: "無期限"
at: "結束時間" at: "結束時間"
after: "進度指定 " after: "在指定時間後結束..."
deadlineDate: "截止日期" deadlineDate: "截止日期"
deadlineTime: "小時" deadlineTime: "小時"
duration: "時長" duration: "時長"
@ -1326,8 +1333,8 @@ _poll:
remainingSeconds: "{s}秒後截止" remainingSeconds: "{s}秒後截止"
_visibility: _visibility:
public: "公開" public: "公開"
publicDescription: "發布給所有用戶 " publicDescription: "發布給所有用戶"
home: "首頁" home: "不在主頁顯示"
homeDescription: "僅發送至首頁的時間軸" homeDescription: "僅發送至首頁的時間軸"
followers: "追隨者" followers: "追隨者"
followersDescription: "僅發送至關注者" followersDescription: "僅發送至關注者"
@ -1338,7 +1345,7 @@ _visibility:
_postForm: _postForm:
replyPlaceholder: "回覆此貼文..." replyPlaceholder: "回覆此貼文..."
quotePlaceholder: "引用此貼文..." quotePlaceholder: "引用此貼文..."
channelPlaceholder: "發佈到頻道" channelPlaceholder: "發佈到頻道..."
_placeholders: _placeholders:
a: "今天過得如何?" a: "今天過得如何?"
b: "有什麼新鮮事嗎?" b: "有什麼新鮮事嗎?"
@ -1350,7 +1357,7 @@ _profile:
name: "名稱" name: "名稱"
username: "使用者名稱" username: "使用者名稱"
description: "關於我" description: "關於我"
youCanIncludeHashtags: "你也可以在「關於我」中加上 #tag" youCanIncludeHashtags: "你也可以在「關於我」中加上 #tag"
metadata: "進階資訊" metadata: "進階資訊"
metadataEdit: "編輯進階資訊" metadataEdit: "編輯進階資訊"
metadataDescription: "可以在個人資料中以表格形式顯示其他資訊。" metadataDescription: "可以在個人資料中以表格形式顯示其他資訊。"
@ -1358,6 +1365,7 @@ _profile:
metadataContent: "内容" metadataContent: "内容"
changeAvatar: "更換大頭貼" changeAvatar: "更換大頭貼"
changeBanner: "變更橫幅圖像" changeBanner: "變更橫幅圖像"
locationDescription: 如果你先輸入你所在的城市,則會向其他用戶顯示你的當地時間。
_exportOrImport: _exportOrImport:
allNotes: "所有貼文" allNotes: "所有貼文"
followingList: "追隨中" followingList: "追隨中"
@ -1386,7 +1394,7 @@ _instanceCharts:
usersTotal: "總計使用者" usersTotal: "總計使用者"
notes: "貼文増減" notes: "貼文増減"
notesTotal: "累計貼文" notesTotal: "累計貼文"
ff: "追隨/追隨者的増減" ff: "追隨/追隨者的増減 "
ffTotal: "追隨/追隨者累計" ffTotal: "追隨/追隨者累計"
cacheSize: "增加或減少快取用量" cacheSize: "增加或減少快取用量"
cacheSizeTotal: "快取大小總計" cacheSizeTotal: "快取大小總計"
@ -1450,7 +1458,7 @@ _pages:
post: "發佈窗口" post: "發佈窗口"
_post: _post:
text: "内容" text: "内容"
attachCanvasImage: "附加相簿圖像 " attachCanvasImage: "附加相簿圖像"
canvasId: "畫布ID" canvasId: "畫布ID"
textInput: "插入字串" textInput: "插入字串"
_textInput: _textInput:
@ -1475,7 +1483,7 @@ _pages:
note: "嵌式貼文" note: "嵌式貼文"
_note: _note:
id: "貼文ID" id: "貼文ID"
idDescription: "您也可以粘貼筆記 URL 並進行設置。 " idDescription: "您也可以粘貼筆記 URL 並進行設置。"
detailed: "顯示詳細內容" detailed: "顯示詳細內容"
switch: "開關" switch: "開關"
_switch: _switch:
@ -1492,14 +1500,14 @@ _pages:
colored: "彩色" colored: "彩色"
action: "按下按鈕後發生的行為" action: "按下按鈕後發生的行為"
_action: _action:
dialog: "顯示對話框 " dialog: "顯示對話框"
_dialog: _dialog:
content: "内容" content: "内容"
resetRandom: "重設亂數" resetRandom: "重設亂數"
pushEvent: "發送事件" pushEvent: "發送事件"
_pushEvent: _pushEvent:
event: "事件名稱" event: "事件名稱"
message: "按下時顯示的消息 " message: "按下時顯示的消息"
variable: "要發送的變數" variable: "要發送的變數"
no-variable: "沒有" no-variable: "沒有"
callAiScript: "調用AiScript" callAiScript: "調用AiScript"
@ -1518,7 +1526,7 @@ _pages:
operation: "計算" operation: "計算"
comparison: "對比" comparison: "對比"
random: "隨機" random: "隨機"
value: "數值 " value: "數值"
fn: "函数" fn: "函数"
text: "文本操作" text: "文本操作"
convert: "轉換" convert: "轉換"
@ -1528,7 +1536,7 @@ _pages:
multiLineText: "字串(多行)" multiLineText: "字串(多行)"
textList: "字串串列" textList: "字串串列"
_textList: _textList:
info: "請分開每個換行符 " info: "請分開每個換行符"
strLen: "字串長度" strLen: "字串長度"
_strLen: _strLen:
arg1: "字串" arg1: "字串"
@ -1607,7 +1615,7 @@ _pages:
_if: _if:
arg1: "如果" arg1: "如果"
arg2: "如果" arg2: "如果"
arg3: "除此以外 " arg3: "除此以外"
not: "否" not: "否"
_not: _not:
arg1: "否" arg1: "否"
@ -1618,7 +1626,7 @@ _pages:
_rannum: _rannum:
arg1: "下限" arg1: "下限"
arg2: "上限" arg2: "上限"
randomPick: "從列表中隨機選擇 " randomPick: "從列表中隨機選擇"
_randomPick: _randomPick:
arg1: "清單" arg1: "清單"
dailyRandom: "隨機(使用者每日變化 )" dailyRandom: "隨機(使用者每日變化 )"
@ -1628,7 +1636,7 @@ _pages:
_dailyRannum: _dailyRannum:
arg1: "下限" arg1: "下限"
arg2: "上限" arg2: "上限"
dailyRandomPick: "從列表中隨機選擇(使用者每日變化 " dailyRandomPick: "從列表中隨機選擇(使用者每日變化 "
_dailyRandomPick: _dailyRandomPick:
arg1: "清單" arg1: "清單"
seedRandom: "隨機抽選種子碼" seedRandom: "隨機抽選種子碼"
@ -1671,7 +1679,7 @@ _pages:
slots: "欄位" slots: "欄位"
slots-info: "用換行符分隔每個欄位" slots-info: "用換行符分隔每個欄位"
arg1: "輸出" arg1: "輸出"
for: "重複 " for: "重複"
_for: _for:
arg1: "重複次數" arg1: "重複次數"
arg2: "處理" arg2: "處理"
@ -1692,7 +1700,7 @@ _relayStatus:
accepted: "已通過核准" accepted: "已通過核准"
rejected: "已拒絕" rejected: "已拒絕"
_notification: _notification:
fileUploaded: "上傳檔案成功" fileUploaded: "上傳檔案成功"
youGotMention: "{name}提及到您" youGotMention: "{name}提及到您"
youGotReply: "{name}回覆了您" youGotReply: "{name}回覆了您"
youGotQuote: "{name}引用了您" youGotQuote: "{name}引用了您"
@ -1707,7 +1715,7 @@ _notification:
pollEnded: "問卷調查已產生結果" pollEnded: "問卷調查已產生結果"
emptyPushNotificationMessage: "推送通知已更新" emptyPushNotificationMessage: "推送通知已更新"
_types: _types:
all: "全部 " all: "全部"
follow: "追隨中" follow: "追隨中"
mention: "提及" mention: "提及"
reply: "回覆" reply: "回覆"
@ -1735,14 +1743,14 @@ _deck:
swapDown: "往下移動" swapDown: "往下移動"
stackLeft: "向左折疊" stackLeft: "向左折疊"
popRight: "向右彈出" popRight: "向右彈出"
profile: "個人檔案" profile: "工作區"
newProfile: "新建個人檔案" newProfile: "新增工作區"
renameProfile: "重新命名個人檔案" renameProfile: "重新命名工作區"
deleteProfile: "刪除個人檔案" deleteProfile: "刪除工作區"
nameAlreadyExists: "該個人檔案名已經存在。" nameAlreadyExists: "該工作區名稱已經存在。"
introduction: "組合欄位來製作屬於自己的介面吧!" introduction: "組合欄位來製作屬於自己的介面吧!"
introduction2: "您可以隨時透過按畫面右方的 + 來添加欄位。" introduction2: "您可以隨時透過按畫面右方的 + 來添加欄位。"
widgetsIntroduction: "請從欄位的選單中,選擇「編輯小工具」來添加小工具" widgetsIntroduction: "請從欄位的選單中,選擇「編輯小工具」來添加小工具"
_columns: _columns:
main: "主列" main: "主列"
widgets: "小工具" widgets: "小工具"
@ -1753,10 +1761,10 @@ _deck:
mentions: "提及" mentions: "提及"
direct: "指定使用者" direct: "指定使用者"
secureMode: 安全模式(授權獲取) secureMode: 安全模式(授權獲取)
instanceSecurity: 實例安全性 instanceSecurity: 伺服器安全性
privateMode: 私人模式 privateMode: 私人模式
allowedInstances: 列入白名單的實例 allowedInstances: 列入白名單的伺服器
secureModeInfo: 當從其他實例請求時,不要在沒有證據的情況下發回。 secureModeInfo: 當從其他伺服器請求時,不要在沒有證據的情況下發回。
_messaging: _messaging:
dms: 私訊 dms: 私訊
groups: 群組 groups: 群組
@ -1764,11 +1772,11 @@ manageGroups: 管理群組
replayTutorial: 重新播放教程 replayTutorial: 重新播放教程
moveFromLabel: '您想遷移的舊帳戶:' moveFromLabel: '您想遷移的舊帳戶:'
customMOTDDescription: 每次用戶加載/重新加載頁面時,由換行符號分隔的 MOTD啟動畫面的自定信息將隨機顯示。 customMOTDDescription: 每次用戶加載/重新加載頁面時,由換行符號分隔的 MOTD啟動畫面的自定信息將隨機顯示。
privateModeInfo: 啟用後,只有列入白名單的實例才能與您的實例聯合。所有貼文都將對公眾隱藏。 privateModeInfo: 啟用後,只有列入白名單的伺服器才能與你的伺服器聯合。所有貼文都將對公眾隱藏。
adminCustomCssWarn: 除非你知道它的作用,否則請不要使用此設定。 輸入不正確的值可能會導致每個人的客戶端無法正常運行。你可在你的的用戶設定中測試,確保你的 adminCustomCssWarn: 除非你知道它的作用,否則請不要使用此設定。 輸入不正確的值可能會導致每個人的客戶端無法正常運行。你可在你的的用戶設定中測試,確保你的
CSS 正常工作。 CSS 正常工作。
showUpdates: Calckey 更新時顯示彈出視窗 showUpdates: Calckey 更新時顯示彈出視窗
recommendedInstances: 建議的實例 recommendedInstances: 建議的伺服器
caption: 自動字幕 caption: 自動字幕
enterSendsMessage: 在 Messaging 中按 Return 發送消息 (如關閉則是 Ctrl + Return) enterSendsMessage: 在 Messaging 中按 Return 發送消息 (如關閉則是 Ctrl + Return)
migrationConfirm: "您確定要將你的帳戶遷移到 {account} 嗎? 一旦這樣做,你將無法復原,而你將無法再次正常使用您的帳戶。\n另外請確保你已將此當前帳戶設置為您要遷移的帳戶。" migrationConfirm: "您確定要將你的帳戶遷移到 {account} 嗎? 一旦這樣做,你將無法復原,而你將無法再次正常使用您的帳戶。\n另外請確保你已將此當前帳戶設置為您要遷移的帳戶。"
@ -1777,21 +1785,17 @@ customSplashIconsDescription: 每次用戶加載/重新加載頁面時,以換
accountMoved: '該使用者已移至新帳戶:' accountMoved: '該使用者已移至新帳戶:'
showAds: 顯示廣告 showAds: 顯示廣告
noThankYou: 不用了,謝謝 noThankYou: 不用了,謝謝
selectInstance: 選擇實例 selectInstance: 選擇伺服器
enableRecommendedTimeline: 啟用推薦時間軸 enableRecommendedTimeline: 啟用推薦時間軸
antennaInstancesDescription: 分行列出一個實例 antennaInstancesDescription: 分行列出一個伺服器
moveTo: 遷移此帳戶到新帳戶 moveTo: 遷移此帳戶到新帳戶
moveToLabel: '請輸入你將會遷移到的帳戶:' moveToLabel: '請輸入你將會遷移到的帳戶:'
moveAccount: 遷移帳戶! moveAccount: 遷移帳戶!
moveAccountDescription: '這個過程是不可逆的。 在遷移前,請確保您已在新帳戶上為此帳戶設置了別名(Alias)。 請輸入帳戶標籤 (格式: moveAccountDescription: '這個過程是不可逆的。 在遷移前,請確保您已在新帳戶上為此帳戶設置了別名(Alias)。 請輸入帳戶標籤 (格式:
@person@instance.com)' @person@server.com)'
moveFrom: 由舊帳戶移至此帳戶 moveFrom: 由舊帳戶移至此帳戶
moveFromDescription: '這將為你的舊帳戶設置一個別名(Alias),以便你可以從該帳戶轉移到當前帳戶。 在你的舊帳戶移動之前請執行此操作。 請輸入帳戶標籤 moveFromDescription: '這將為你的舊帳戶設置一個別名(Alias),以便你可以從該帳戶轉移到當前帳戶。 在你的舊帳戶移動之前請執行此操作。 請輸入帳戶標籤
(格式: @person@instance.com)' (格式: @person@server.com)'
_apps:
crossPlatform: 跨平台
free: 免費
paid: 付費
enableEmojiReactions: 啟用表情符號反應 enableEmojiReactions: 啟用表情符號反應
breakFollowConfirm: 您確定要移除該關注者嗎? breakFollowConfirm: 您確定要移除該關注者嗎?
socialTimeline: 社交時間軸 socialTimeline: 社交時間軸
@ -1805,6 +1809,34 @@ migration: 遷移
homeTimeline: 主頁時間軸 homeTimeline: 主頁時間軸
swipeOnDesktop: 允許在桌面上進行手機式滑動 swipeOnDesktop: 允許在桌面上進行手機式滑動
logoImageUrl: 圖標網址 logoImageUrl: 圖標網址
addInstance: 增加一個實例 addInstance: 增加一個伺服器
noInstances: 沒有實例 noInstances: 沒有伺服器
flagSpeakAsCat: 像貓一樣地說話 flagSpeakAsCat: 像貓一樣地說話
silenceThisInstance: 靜音此伺服器
silencedInstances: 已靜音的伺服器
silenced: 已靜音
_experiments:
enablePostEditing: 啟用帖子編輯
title: 試驗功能
findOtherInstance: 找找另一個伺服器
noGraze: 瀏覽器擴展 "Graze for Mastodon" 會與Calckey發生衝突請停用該擴展。
userSaysSomethingReasonRenote: '{name} 轉傳了包含 {reason} 的帖子'
pushNotificationNotSupported: 你的瀏覽器或伺服器不支援推送通知
accessibility: 輔助功能
userSaysSomethingReasonReply: '{name} 回復了包含 {reason} 的帖子'
hiddenTags: 隱藏主題標籤
indexPosts: 索引帖子
indexNotice: 現在開始索引。 這可能需要一段時間,請不要在一個小時內重啟你的伺服器。
deleted: 已刪除
editNote: 編輯筆記
edited: 已修改
userSaysSomethingReason: '{name} 說了 {reason}'
allowedInstancesDescription: 要加入聯邦白名單的服務器,每台伺服器用新行分隔(僅適用於私有模式)。
defaultReaction: 默認的表情符號反應
license: 授權
apps: 應用
pushNotification: 推送通知
subscribePushNotification: 啟用推送通知
unsubscribePushNotification: 禁用推送通知
pushNotificationAlreadySubscribed: 推送通知已經啟用
recommendedInstancesDescription: 以每行分隔的推薦服務器出現在推薦的時間軸中。 不要添加 `https://`,只添加域名。

View file

@ -1,12 +1,12 @@
{ {
"name": "calckey", "name": "calckey",
"version": "14.0.0-rc-ni", "version": "14.0.0-rc2",
"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.3.1", "packageManager": "pnpm@8.6.1",
"private": true, "private": true,
"scripts": { "scripts": {
"rebuild": "pnpm run clean && pnpm -r run build && pnpm run gulp", "rebuild": "pnpm run clean && pnpm -r run build && pnpm run gulp",
@ -27,7 +27,7 @@
"e2e": "start-server-and-test start:test http://localhost:61812 cy:run", "e2e": "start-server-and-test start:test http://localhost:61812 cy:run",
"mocha": "pnpm --filter backend run mocha", "mocha": "pnpm --filter backend run mocha",
"test": "pnpm run mocha", "test": "pnpm run mocha",
"format": "pnpm rome format packages/**/* --write && pnpm --filter client run format", "format": "pnpm -r run format",
"clean": "pnpm node ./scripts/clean.js", "clean": "pnpm node ./scripts/clean.js",
"clean-all": "pnpm node ./scripts/clean-all.js", "clean-all": "pnpm node ./scripts/clean-all.js",
"cleanall": "pnpm run clean-all" "cleanall": "pnpm run clean-all"
@ -36,12 +36,10 @@
"chokidar": "^3.3.1" "chokidar": "^3.3.1"
}, },
"dependencies": { "dependencies": {
"@bull-board/api": "^4.10.2", "@bull-board/api": "5.2.0",
"@bull-board/ui": "^4.10.2", "@bull-board/ui": "5.2.0",
"@napi-rs/cli": "^2.15.0", "@napi-rs/cli": "^2.16.1",
"@tensorflow/tfjs": "^3.21.0", "@tensorflow/tfjs": "^3.21.0",
"focus-trap": "^7.2.0",
"focus-trap-vue": "^4.0.1",
"js-yaml": "4.1.0", "js-yaml": "4.1.0",
"seedrandom": "^3.0.5" "seedrandom": "^3.0.5"
}, },

View file

@ -5,7 +5,6 @@
<!-- needed for adaptive design --> <!-- needed for adaptive design -->
<meta charset="utf-8"/> <meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700" rel="stylesheet">
<!-- <!--
ReDoc doesn't change outer page styles ReDoc doesn't change outer page styles

View file

@ -4,10 +4,5 @@
"module": "commonjs", "module": "commonjs",
"allowSyntheticDefaultImports": true "allowSyntheticDefaultImports": true
}, },
"exclude": [ "exclude": ["node_modules", "jspm_packages", "tmp", "temp"]
"node_modules",
"jspm_packages",
"tmp",
"temp"
]
} }

View file

@ -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 '/assets/ai.png', "bannerUrl" character varying(512), "errorImageUrl" character varying(512) DEFAULT 'https://xn--931a.moe/aiart/yubitun.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 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"))`,
); );
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"))`,

View file

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

View file

@ -47,6 +47,6 @@ export class noteRepliesFunction1658656633972 {
} }
async down(queryRunner) { async down(queryRunner) {
await queryRunner.query(`DROP FUNCTION note_replies`); await queryRunner.query("DROP FUNCTION note_replies");
} }
} }

View file

@ -12,7 +12,7 @@ export class addFkAbuseUserReportTargetUserIdToUserId1671199573000 {
async down(queryRunner) { async down(queryRunner) {
await queryRunner.query( await queryRunner.query(
`ALTER TABLE abuse_user_report DROP CONSTRAINT fk_7f4e851a35d81b64dda28eee0`, "ALTER TABLE abuse_user_report DROP CONSTRAINT fk_7f4e851a35d81b64dda28eee0",
); );
} }
} }

View file

@ -4,22 +4,22 @@ export class CleanCharts1680375641101 {
} }
async up(queryRunner) { async up(queryRunner) {
await queryRunner.query( await queryRunner.query(
`delete from __chart__hashtag where ___local_users = 0 and ___remote_users = 0;`, "delete from __chart__hashtag where ___local_users = 0 and ___remote_users = 0;",
); );
await queryRunner.query( await queryRunner.query(
`delete from __chart_day__hashtag where ___local_users = 0 and ___remote_users = 0;`, "delete from __chart_day__hashtag where ___local_users = 0 and ___remote_users = 0;",
); );
await queryRunner.query(`COMMIT;`); await queryRunner.query("COMMIT;");
await queryRunner.query(`vacuum __chart__hashtag;`); await queryRunner.query("vacuum __chart__hashtag;");
await queryRunner.query(`vacuum __chart_day__hashtag;`); await queryRunner.query("vacuum __chart_day__hashtag;");
await queryRunner.query(`COMMIT;`); await queryRunner.query("COMMIT;");
} }
async down(queryRunner) { async down(queryRunner) {
await queryRunner.query( await queryRunner.query(
`delete from __chart__hashtag where ___local_users = 0 and ___remote_users = 0;`, "delete from __chart__hashtag where ___local_users = 0 and ___remote_users = 0;",
); );
await queryRunner.query( await queryRunner.query(
`delete from __chart_day__hashtag where ___local_users = 0 and ___remote_users = 0;`, "delete from __chart_day__hashtag where ___local_users = 0 and ___remote_users = 0;",
); );
} }
} }

View file

@ -0,0 +1,53 @@
export class NoteEdit1682753227899 {
name = "NoteEdit1682753227899";
async up(queryRunner) {
await queryRunner.query(`
CREATE TABLE "note_edit" (
"id" character varying(32) NOT NULL,
"noteId" character varying(32) NOT NULL,
"text" text,
"cw" character varying(512),
"fileIds" character varying(32) array NOT NULL DEFAULT '{}',
"updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL,
CONSTRAINT "PK_736fc6e0d4e222ecc6f82058e08" PRIMARY KEY ("id")
)
`);
await queryRunner.query(`
COMMENT ON COLUMN "note_edit"."noteId" IS 'The ID of note.'
`);
await queryRunner.query(`
COMMENT ON COLUMN "note_edit"."updatedAt" IS 'The updated date of the Note.'
`);
await queryRunner.query(`
CREATE INDEX "IDX_702ad5ae993a672e4fbffbcd38" ON "note_edit" ("noteId")
`);
await queryRunner.query(`
ALTER TABLE "note"
ADD "updatedAt" TIMESTAMP WITH TIME ZONE
`);
await queryRunner.query(`
COMMENT ON COLUMN "note"."updatedAt" IS 'The updated date of the Note.'
`);
await queryRunner.query(`
ALTER TABLE "note_edit"
ADD CONSTRAINT "FK_702ad5ae993a672e4fbffbcd38c"
FOREIGN KEY ("noteId")
REFERENCES "note"("id")
ON DELETE CASCADE
ON UPDATE NO ACTION
`);
}
async down(queryRunner) {
await queryRunner.query(`
ALTER TABLE "note_edit" DROP CONSTRAINT "FK_702ad5ae993a672e4fbffbcd38c"
`);
await queryRunner.query(`
ALTER TABLE "note" DROP COLUMN "updatedAt"
`);
await queryRunner.query(`
DROP TABLE "note_edit"
`);
}
}

View file

@ -0,0 +1,15 @@
export class AddHiddenPosts1682891891317 {
name = "AddHiddenPosts1682891891317";
async up(queryRunner) {
await queryRunner.query(
`ALTER TYPE note_visibility_enum ADD VALUE IF NOT EXISTS 'hidden'`,
);
}
async down(queryRunner) {
await queryRunner.query(
`ALTER TYPE note_visibility_enum REMOVE VALUE IF EXISTS 'hidden'`,
);
}
}

View file

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

View file

@ -0,0 +1,16 @@
export class ExperimentalFeatures1683980686995 {
name = "ExperimentalFeatures1683980686995";
async up(queryRunner) {
await queryRunner.query(`
ALTER TABLE "meta"
ADD "experimentalFeatures" jsonb NOT NULL DEFAULT '{}'
`);
}
async down(queryRunner) {
await queryRunner.query(`
ALTER TABLE "meta" DROP COLUMN "experimentalFeatures"
`);
}
}

View file

@ -0,0 +1,19 @@
export class EmojiSize1684494870830 {
name = "EmojiSize1684494870830";
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "emoji" ADD "width" integer`);
await queryRunner.query(
`COMMENT ON COLUMN "emoji"."width" IS 'Image width'`,
);
await queryRunner.query(`ALTER TABLE "emoji" ADD "height" integer`);
await queryRunner.query(
`COMMENT ON COLUMN "emoji"."height" IS 'Image height'`,
);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "emoji" DROP COLUMN "height"`);
await queryRunner.query(`ALTER TABLE "emoji" DROP COLUMN "width"`);
}
}

View file

@ -0,0 +1,3 @@
[*.rs]
indent_style = space
indent_size = 4

View file

@ -3,13 +3,42 @@ edition = "2021"
name = "native-utils" name = "native-utils"
version = "0.0.0" version = "0.0.0"
[workspace]
members = ["migration"]
[features]
default = []
noarray = []
napi = ["dep:napi", "dep:napi-derive", "dep:radix_fmt"]
[lib] [lib]
crate-type = ["cdylib"] crate-type = ["cdylib", "lib"]
[dependencies] [dependencies]
async-trait = "0.1.68"
cfg-if = "1.0.0"
chrono = "0.4.24"
cuid2 = "0.1.0"
derive_more = "0.99.17"
jsonschema = "0.17.0"
once_cell = "1.17.1"
parse-display = "0.8.0"
rand = "0.8.5"
schemars = { version = "0.8.12", features = ["chrono"] }
sea-orm = { version = "0.11.3", features = ["sqlx-postgres", "postgres-array", "sqlx-sqlite", "runtime-tokio-rustls"] }
serde = { version = "1.0.163", features = ["derive"] }
serde_json = "1.0.96"
thiserror = "1.0.40"
tokio = { version = "1.28.1", features = ["full"] }
utoipa = "3.3.0"
# Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix # Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix
napi = { version = "2.12.0", default-features = false, features = ["napi4"] } napi = { version = "2.13.1", default-features = false, features = ["napi6", "tokio_rt"], optional = true }
napi-derive = "2.12.0" napi-derive = { version = "2.12.0", optional = true }
radix_fmt = { version = "1.0.0", optional = true }
[dev-dependencies]
pretty_assertions = "1.3.0"
[build-dependencies] [build-dependencies]
napi-build = "2.0.1" napi-build = "2.0.1"

View file

@ -1,7 +1,32 @@
import test from "ava"; import test from "ava";
import { sum } from "../index.js"; import {
convertId,
IdConvertType,
nativeInitIdGenerator,
nativeCreateId,
nativeRandomStr,
} from "../built/index.js";
test("sum from native", (t) => { test("convert to mastodon id", (t) => {
t.is(sum(1, 2), 3); t.is(convertId("9gf61ehcxv", IdConvertType.MastodonId), "960365976481219");
t.is(
convertId("9fbr9z0wbrjqyd3u", IdConvertType.MastodonId),
"3954607381600562394",
);
t.is(
convertId("9fbs680oyviiqrol9md73p8g", IdConvertType.MastodonId),
"3494513243013053824",
);
});
test("create cuid2 with timestamp prefix", (t) => {
nativeInitIdGenerator(16, "");
t.not(nativeCreateId(BigInt(Date.now())), nativeCreateId(BigInt(Date.now())));
t.is(nativeCreateId(BigInt(Date.now())).length, 16);
});
test("create random string", (t) => {
t.not(nativeRandomStr(16), nativeRandomStr(16));
t.is(nativeRandomStr(24).length, 24);
}); });

View file

@ -1,5 +1,5 @@
extern crate napi_build; extern crate napi_build;
fn main() { fn main() {
napi_build::setup(); napi_build::setup();
} }

View file

@ -0,0 +1,34 @@
[package]
name = "migration"
version = "0.1.0"
edition = "2021"
publish = false
[lib]
name = "migration"
path = "src/lib.rs"
[features]
default = []
convert = ["dep:native-utils"]
[dependencies]
serde_json = "1.0.96"
native-utils = { path = "../", optional = true }
indicatif = { version = "0.17.4", features = ["tokio"] }
tokio = { version = "1.28.2", features = ["full"] }
futures = "0.3.28"
serde_yaml = "0.9.21"
serde = { version = "1.0.163", features = ["derive"] }
urlencoding = "2.1.2"
[dependencies.sea-orm-migration]
version = "0.11.0"
features = [
# Enable at least one `ASYNC_RUNTIME` and `DATABASE_DRIVER` feature if you want to run migration via CLI.
# View the list of supported features at https://www.sea-ql.org/SeaORM/docs/install-and-config/database-and-async-runtime.
# e.g.
"runtime-tokio-rustls", # `ASYNC_RUNTIME` feature
"sqlx-postgres", # `DATABASE_DRIVER` feature
"sqlx-sqlite",
]

View file

@ -0,0 +1,41 @@
# Running Migrator CLI
- Generate a new migration file
```sh
cargo run -- migrate generate MIGRATION_NAME
```
- Apply all pending migrations
```sh
cargo run
```
```sh
cargo run -- up
```
- Apply first 10 pending migrations
```sh
cargo run -- up -n 10
```
- Rollback last applied migrations
```sh
cargo run -- down
```
- Rollback last 10 applied migrations
```sh
cargo run -- down -n 10
```
- Drop all tables from the database, then reapply all migrations
```sh
cargo run -- fresh
```
- Rollback all applied migrations, then reapply all migrations
```sh
cargo run -- refresh
```
- Rollback all applied migrations
```sh
cargo run -- reset
```
- Check the status of all migrations
```sh
cargo run -- status
```

View file

@ -0,0 +1,12 @@
pub use sea_orm_migration::prelude::*;
mod m20230531_180824_drop_reversi;
pub struct Migrator;
#[async_trait::async_trait]
impl MigratorTrait for Migrator {
fn migrations() -> Vec<Box<dyn MigrationTrait>> {
vec![Box::new(m20230531_180824_drop_reversi::Migration)]
}
}

View file

@ -0,0 +1,51 @@
use sea_orm_migration::{
prelude::*,
sea_orm::{DbBackend, Statement},
};
#[derive(DeriveMigrationName)]
pub struct Migration;
#[async_trait::async_trait]
impl MigrationTrait for Migration {
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
if manager.get_database_backend() == DbBackend::Sqlite {
return Ok(());
}
let db = manager.get_connection();
db.query_one(Statement::from_string(
DbBackend::Postgres,
Table::drop()
.table(ReversiGame::Table)
.if_exists()
.to_string(PostgresQueryBuilder),
))
.await?;
db.query_one(Statement::from_string(
DbBackend::Postgres,
Table::drop()
.table(ReversiMatching::Table)
.if_exists()
.to_string(PostgresQueryBuilder),
))
.await?;
Ok(())
}
async fn down(&self, _manager: &SchemaManager) -> Result<(), DbErr> {
// Replace the sample below with your own migration scripts
Ok(())
}
}
/// Learn more at https://docs.rs/sea-query#iden
#[derive(Iden)]
enum ReversiGame {
Table,
}
#[derive(Iden)]
enum ReversiMatching {
Table,
}

View file

@ -0,0 +1,50 @@
use serde::Deserialize;
use std::env;
use std::fs;
use urlencoding::encode;
use sea_orm_migration::prelude::*;
#[cfg(feature = "convert")]
mod vec_to_json;
#[tokio::main]
async fn main() {
let cwd = env::current_dir().unwrap();
let yml = fs::File::open(cwd.join("../../.config/default.yml"))
.expect("Failed to open '.config/default.yml'");
let config: Config = serde_yaml::from_reader(yml).expect("Failed to parse yaml");
env::set_var(
"DATABASE_URL",
format!(
"postgres://{}:{}@{}:{}/{}",
config.db.user,
encode(&config.db.pass),
config.db.host,
config.db.port,
config.db.db,
),
);
cli::run_cli(migration::Migrator).await;
#[cfg(feature = "convert")]
vec_to_json::convert().await;
}
#[derive(Debug, PartialEq, Deserialize)]
#[serde(rename = "camelCase")]
pub struct Config {
pub db: DbConfig,
}
#[derive(Debug, PartialEq, Deserialize)]
#[serde(rename = "camelCase")]
pub struct DbConfig {
pub host: String,
pub port: u32,
pub db: String,
pub user: String,
pub pass: String,
}

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