Merge branch 'develop'

This commit is contained in:
ThatOneCalculator 2023-07-19 11:22:58 -07:00
commit 65157a42ea
No known key found for this signature in database
GPG key ID: 8703CACD01000000
1635 changed files with 147657 additions and 68547 deletions

13
.config/LICENSE Normal file
View file

@ -0,0 +1,13 @@
Copyright 2023 Firefish
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View file

@ -1,5 +1,5 @@
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Calckey configuration # Firefish configuration
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# ┌─────┐ # ┌─────┐

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: firefish
user: firefish
pass: firefish
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

@ -1,4 +1,4 @@
# db settings # db settings
POSTGRES_PASSWORD=example-calckey-pass POSTGRES_PASSWORD=example-firefish-pass
POSTGRES_USER=example-calckey-user POSTGRES_USER=example-firefish-user
POSTGRES_DB=calckey POSTGRES_DB=firefish

View file

@ -1,33 +1,32 @@
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Calckey configuration # Firefish 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. # Firefish requires a reverse proxy to support HTTPS connections.
# #
# +----- https://example.tld/ ------------+ # +----- https://example.com/ ------------+
# +------+ |+-------------+ +----------------+| # +------+ |+-------------+ +----------------+|
# | User | ---> || Proxy (443) | ---> | Misskey (3000) || # | User | ---> || Proxy (443) | ---> | Firefish (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 Firefish server should listen on.
port: 3000 port: 3000
# ┌──────────────────────────┐ # ┌──────────────────────────┐
@ -36,20 +35,22 @@ port: 3000
db: db:
host: localhost host: localhost
port: 5432 port: 5432
#ssl: false
# Database name # Database name
db: calckey db: firefish
# Auth # Auth
user: example-calckey-user user: example-firefish-user
pass: example-calckey-pass pass: example-firefish-pass
# Whether disable Caching queries # Whether disable Caching queries
#disableCache: true #disableCache: true
# Extra Connection options # Extra Connection options
#extra: #extra:
# ssl: true # ssl:
# host: localhost
# rejectUnauthorized: false
# ┌─────────────────────┐ # ┌─────────────────────┐
#───┘ Redis configuration └───────────────────────────────────── #───┘ Redis configuration └─────────────────────────────────────
@ -57,51 +58,93 @@ db:
redis: redis:
host: localhost host: localhost
port: 6379 port: 6379
#tls:
# host: localhost
# rejectUnauthorized: false
#family: 0 # 0=Both, 4=IPv4, 6=IPv6
#pass: example-pass
#prefix: example-prefix
#db: 1
#user: default
# ┌─────────────────────────────┐
#───┘ Cache server configuration └─────────────────────────────────────
# A Redis-compatible server (DragonflyDB, Keydb, Redis) for caching
# If left blank, it will use the Redis server from above
#cacheServer:
#host: localhost
#port: 6379
#family: 0 # 0=Both, 4=IPv4, 6=IPv6 #family: 0 # 0=Both, 4=IPv4, 6=IPv6
#pass: example-pass #pass: example-pass
#prefix: example-prefix #prefix: example-prefix
#db: 1 #db: 1
# ┌─────────────────────────────┐ # Please configure either MeiliSearch *or* Sonic.
#───┘ Elasticsearch configuration └───────────────────────────── # If both MeiliSearch and Sonic configurations are present, MeiliSearch will take precedence.
#elasticsearch: # ┌───────────────────────────┐
# host: localhost #───┘ MeiliSearch configuration └─────────────────────────────────────
# port: 9200 #meilisearch:
# host: meilisearch
# port: 7700
# ssl: false # ssl: false
# user: # apiKey:
# pass:
# ┌─────────────────────┐
#───┘ Sonic configuration └─────────────────────────────────────
#sonic:
# host: localhost
# port: 1491
# auth: SecretPassword
# collection: notes
# bucket: default
# ┌───────────────┐ # ┌───────────────┐
#───┘ 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 100000)
#maxNoteLength: 3000 #maxNoteLength: 3000
# Maximum length of an image caption (default 1500, max 8192)
#maxCaptionLength: 1500
# Reserved usernames that only the administrator can register with
reservedUsernames: [
'root',
'admin',
'administrator',
'me',
'system'
]
# Whether disable HSTS # Whether disable HSTS
#disableHsts: true #disableHsts: true
# 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
@ -126,6 +169,7 @@ id: 'aid'
#proxy: http://127.0.0.1:3128 #proxy: http://127.0.0.1:3128
#proxyBypassHosts: [ #proxyBypassHosts: [
# 'web.kaiteki.app',
# 'example.com', # 'example.com',
# '192.0.2.8' # '192.0.2.8'
#] #]
@ -154,13 +198,21 @@ id: 'aid'
# 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 Firefish 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
@ -198,4 +250,4 @@ id: 'aid'
# !!!!!!!!!! # !!!!!!!!!!
# Seriously. Do NOT fill out the above settings if you're self-hosting. # Seriously. Do NOT fill out the above settings if you're self-hosting.
# They're much better off being set from the control panel. # They're much better off being set from the control panel.

View file

@ -8,7 +8,7 @@ resources:
cpu: 1 cpu: 1
memory: 1Gi memory: 1Gi
calckey: firefish:
domain: example.tld domain: example.tld
smtp: smtp:
from_address: noreply@example.tld from_address: noreply@example.tld

View file

@ -1,17 +1,17 @@
# Visual Studio Code # Visual Studio Code
/.vscode .vscode
!/.vscode/extensions.json
# Intelij-IDEA # Intelij-IDEA
/.idea .idea
packages/backend/.idea/backend.iml
packages/backend/.idea/modules.xml
packages/backend/.idea/vcs.xml
# Node.js # Node.js
node_modules node_modules
**/node_modules
report.*.json report.*.json
# Rust
packages/backend/native-utils/target
# Cypress # Cypress
cypress/screenshots cypress/screenshots
cypress/videos cypress/videos
@ -20,12 +20,7 @@ cypress/videos
coverage coverage
# config # config
/.config/* /.config
!/.config/example.yml
!/.config/docker_example.env
#docker dev config
/dev/docker-compose.yml
# misskey # misskey
built built
@ -46,3 +41,4 @@ packages/backend/assets/instance.css
# dockerignore custom # dockerignore custom
.git .git
Dockerfile Dockerfile
docker-compose.yml

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

20
.gitignore vendored
View file

@ -22,10 +22,12 @@ 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 !/.config/helm_values_example.yml
!/.config/LICENSE
#docker dev config # docker dev config
/dev/docker-compose.yml /dev/docker-compose.yml
# misskey # misskey
@ -43,6 +45,14 @@ api-docs.json
files files
ormconfig.json ormconfig.json
packages/backend/assets/instance.css packages/backend/assets/instance.css
packages/backend/assets/sounds/None.mp3
packages/backend/assets/LICENSE
!/packages/backend/queue/processors/db
!packages/backend/src/db
packages/megalodon/lib
packages/megalodon/.idea
# blender backups # blender backups
*.blend1 *.blend1
@ -54,3 +64,11 @@ packages/backend/assets/instance.css
# 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

1
.npmrc Normal file
View file

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

View file

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

View file

@ -1,4 +0,0 @@
{
"eslint.packageManager": "pnpm",
"workspace.workspaceFolderCheckCwd": false
}

3
.weblate Normal file
View file

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

View file

@ -1,7 +1,8 @@
pipeline: pipeline:
testCommit: testCommit:
image: node:latest image: node:alpine
commands: commands:
- apk add --no-cache cargo python3 make g++
- cp .config/ci.yml .config/default.yml - cp .config/ci.yml .config/default.yml
- corepack enable - corepack enable
- corepack prepare pnpm@latest --activate - corepack prepare pnpm@latest --activate
@ -18,4 +19,4 @@ services:
image: redis image: redis
branches: branches:
include: [ main, develop, feature/* ] include: [ main, beta, develop, feature/* ]

View file

@ -2,7 +2,7 @@ pipeline:
publish-docker-latest: publish-docker-latest:
image: plugins/kaniko image: plugins/kaniko
settings: settings:
repo: thatonecalculator/calckey repo: thatonecalculator/firefish
tags: latest tags: latest
dockerfile: Dockerfile dockerfile: Dockerfile
username: username:

View file

@ -2,7 +2,7 @@ pipeline:
publish-docker-latest: publish-docker-latest:
image: plugins/kaniko image: plugins/kaniko
settings: settings:
repo: thatonecalculator/calckey repo: thatonecalculator/firefish
tags: rc tags: rc
dockerfile: Dockerfile dockerfile: Dockerfile
username: username:

View file

@ -2,7 +2,7 @@ pipeline:
publish-docker-tag: publish-docker-tag:
image: plugins/kaniko image: plugins/kaniko
settings: settings:
repo: thatonecalculator/calckey repo: thatonecalculator/firefish
# Uses the tag from git for the container tag # Uses the tag from git for the container tag
tags: ${CI_COMMIT_TAG} tags: ${CI_COMMIT_TAG}
dockerfile: Dockerfile dockerfile: Dockerfile

View file

@ -2,7 +2,7 @@ pipeline:
docker-build: docker-build:
image: plugins/kaniko image: plugins/kaniko
settings: settings:
repo: thatonecalculator/calckey repo: thatonecalculator/firefish
tags: test tags: test
dockerfile: Dockerfile dockerfile: Dockerfile
no_push: true no_push: true

File diff suppressed because it is too large Load diff

View file

@ -61,8 +61,8 @@ 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, @t1c on Prometheus Gitlab,
`@thatonecalculator@stop.voring.me` or `@t1c@i.calckey.cloud` on the Fediverse, `@kainoa@firefish.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,26 +1,26 @@
# 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 Firefish! In this document you will find the information you need to contribute to the project.
## Translation (i18n) ## Translation (i18n)
Calckey uses [Weblate](hhttps://hosted.weblate.org/engage/calckey/) for translation and internationalization management. Firefish uses [Weblate](hhttps://hosted.weblate.org/engage/firefish/) 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.
You can contribute without knowing how to code by helping translate here: You can contribute without knowing how to code by helping translate here:
[![Translation status](https://hosted.weblate.org/widgets/calckey/-/287x66-grey.png)](https://hosted.weblate.org/engage/calckey/) [![Translation status](https://hosted.weblate.org/widgets/firefish/-/287x66-grey.png)](https://hosted.weblate.org/engage/firefish/)
[![Translation bars](https://hosted.weblate.org/widgets/calckey/-/multi-auto.svg)](https://hosted.weblate.org/engage/calckey/) [![Translation bars](https://hosted.weblate.org/widgets/firefish/-/multi-auto.svg)](https://hosted.weblate.org/engage/firefish/)
## Roadmap ## Roadmap
See [CALCKEY.md](./CALCKEY.md) See [FIREFISH.md](./FIREFISH.md)
## Issues ## Issues
Before creating an issue, please check the following: Before creating an issue, please check the following:
- To avoid duplication, please search for similar issues before creating a new issue. - To avoid duplication, please search for similar issues before creating a new issue.
- Do not use Issues to ask questions or troubleshooting. - Do not use Issues to ask questions or troubleshooting.
- Issues should only be used to feature requests, suggestions, and bug tracking. - Issues should only be used to feature requests, suggestions, and bug tracking.
- Please ask questions or troubleshooting in the [Matrix room](https://matrix.to/#/#calckey:matrix.fedibird.com). - Please ask questions or troubleshooting in the [Matrix room](https://matrix.to/#/#firefish:matrix.fedibird.com).
> **Warning** > **Warning**
> Do not close issues that are about to be resolved. It should remain open until a commit that actually resolves it is merged. > Do not close issues that are about to be resolved. It should remain open until a commit that actually resolves it is merged.
@ -48,8 +48,8 @@ Thank you for your PR! Before creating a PR, please check the following:
- If there is an Issue which will be resolved by this PR, please include a reference to the Issue in the text. Good examples include `Closing: #21` or `Resolves: #21` - If there is an Issue which will be resolved by this PR, please include a reference to the Issue in the text. Good examples include `Closing: #21` or `Resolves: #21`
- Check if there are any documents that need to be created or updated due to this change. - Check if there are any documents that need to be created or updated due to this change.
- If you have added a feature or fixed a bug, please add a test case if possible. - If you have added a feature or fixed a bug, please add a test case if possible.
- Please make sure that tests and Lint are passed in advance. - Please make sure that formatting, tests and Lint are passed in advance.
- You can run it with `pnpm run test` and `pnpm run lint`. [See more info](#testing) - You can run it with `pnpm run format`, `pnpm run test` and `pnpm run lint`. [See more info](#testing)
- If this PR includes UI changes, please attach a screenshot in the text. - If this PR includes UI changes, please attach a screenshot in the text.
Thanks for your cooperation 🤗 Thanks for your cooperation 🤗

27
COPYING
View file

@ -1,15 +1,24 @@
Unless otherwise stated this repository is Unless specified otherwise, the entirety of this repository is subject to the following:
Copyright © 2014-2022 syuilo and contributers Copyright © 2014-2023 syuilo and contributors
Copyright © 2022 thatonecalculator and contributers Copyright © 2022-2023 Kainoa Kanter and contributors
And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE. And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE.
---
Calckey includes several third-party Open-Source softwares. These specific configuration directories:
Emoji keywords for Unicode 11 and below by Mu-An Chiou - .config/
License: MIT - custom/assets/
https://github.com/muan/emojilib/blob/master/LICENSE
and their contents are
Copyright © 2022-2023 Kainoa Kanter and contributors
And are distributed under The Apache License, Version 2.0, you should have received a copy of the license file as LICENSE in each specified directory.
---
Firefish includes several third-party open-source softwares and software libraries.
RsaSignature2017 implementation by Transmute Industries Inc RsaSignature2017 implementation by Transmute Industries Inc
License: MIT License: MIT
@ -18,3 +27,7 @@ https://github.com/transmute-industries/RsaSignature2017/blob/master/LICENSE
Machine learning model for sensitive images by Infinite Red, Inc. Machine learning model for sensitive images by Infinite Red, Inc.
License: MIT License: MIT
https://github.com/infinitered/nsfwjs/blob/master/LICENSE https://github.com/infinitered/nsfwjs/blob/master/LICENSE
Licenses for all softwares and software libraries installed via the Node Package Manager ("npm") can be found by running the following shell command in the root directory of this repository:
pnpm licenses list

View file

@ -1,51 +1,73 @@
## Install dev and compilation dependencies, build files ## Install dev and compilation dependencies, build files
FROM node:19-alpine as build FROM alpine:3.18 as build
WORKDIR /calckey WORKDIR /firefish
# Install compilation dependencies # Install compilation dependencies
RUN apk add --no-cache --no-progress git alpine-sdk python3 RUN apk add --no-cache --no-progress git alpine-sdk python3 nodejs-current npm rust cargo vips
# Copy only the cargo dependency-related files first, to cache efficiently
COPY packages/backend/native-utils/Cargo.toml packages/backend/native-utils/Cargo.toml
COPY packages/backend/native-utils/Cargo.lock packages/backend/native-utils/Cargo.lock
COPY packages/backend/native-utils/src/lib.rs packages/backend/native-utils/src/
COPY packages/backend/native-utils/migration/Cargo.toml packages/backend/native-utils/migration/Cargo.toml
COPY packages/backend/native-utils/migration/src/lib.rs packages/backend/native-utils/migration/src/
# Install cargo dependencies
RUN cargo fetch --locked --manifest-path /firefish/packages/backend/native-utils/Cargo.toml
# Copy only the dependency-related files first, to cache efficiently # Copy only the dependency-related files first, to cache efficiently
COPY package.json pnpm*.yaml ./ COPY package.json pnpm*.yaml ./
COPY packages/backend/package.json packages/backend/package.json COPY packages/backend/package.json packages/backend/package.json
COPY packages/client/package.json packages/client/package.json COPY packages/client/package.json packages/client/package.json
COPY packages/sw/package.json packages/sw/package.json COPY packages/sw/package.json packages/sw/package.json
COPY packages/firefish-js/package.json packages/firefish-js/package.json
COPY packages/megalodon/package.json packages/megalodon/package.json
COPY packages/backend/native-utils/package.json packages/backend/native-utils/package.json
COPY packages/backend/native-utils/npm/linux-x64-musl/package.json packages/backend/native-utils/npm/linux-x64-musl/package.json
COPY packages/backend/native-utils/npm/linux-arm64-musl/package.json packages/backend/native-utils/npm/linux-arm64-musl/package.json
# Configure corepack and pnpm # Configure corepack and pnpm, and install dev mode dependencies for compilation
RUN corepack enable RUN corepack enable && corepack prepare pnpm@latest --activate && pnpm i --frozen-lockfile
RUN corepack prepare pnpm@latest --activate
# Install dev mode dependencies for compilation # Copy in the rest of the native-utils rust files
RUN pnpm i --frozen-lockfile COPY packages/backend/native-utils packages/backend/native-utils/
# Copy in the rest of the files, to compile from TS to JS # Compile native-utils
RUN pnpm run --filter native-utils build
# Copy in the rest of the files to compile
COPY . ./ COPY . ./
RUN pnpm run build RUN env NODE_ENV=production sh -c "pnpm run --filter '!native-utils' build && pnpm run gulp"
# Trim down the dependencies to only the prod deps # Trim down the dependencies to only those for production
RUN pnpm i --prod --frozen-lockfile RUN pnpm i --prod --frozen-lockfile
## Runtime container ## Runtime container
FROM node:19-alpine FROM alpine:3.18
WORKDIR /calckey WORKDIR /firefish
# Install runtime dependencies # Install runtime dependencies
RUN apk add --no-cache --no-progress tini ffmpeg RUN apk add --no-cache --no-progress tini ffmpeg vips-dev zip unzip nodejs-current
COPY . ./ COPY . ./
COPY --from=build /firefish/packages/megalodon /firefish/packages/megalodon
# Copy node modules # Copy node modules
COPY --from=build /calckey/node_modules /calckey/node_modules COPY --from=build /firefish/node_modules /firefish/node_modules
COPY --from=build /calckey/packages/backend/node_modules /calckey/packages/backend/node_modules COPY --from=build /firefish/packages/backend/node_modules /firefish/packages/backend/node_modules
COPY --from=build /calckey/packages/sw/node_modules /calckey/packages/sw/node_modules COPY --from=build /firefish/packages/sw/node_modules /firefish/packages/sw/node_modules
COPY --from=build /calckey/packages/client/node_modules /calckey/packages/client/node_modules COPY --from=build /firefish/packages/client/node_modules /firefish/packages/client/node_modules
COPY --from=build /firefish/packages/firefish-js/node_modules /firefish/packages/firefish-js/node_modules
# Copy the finished compiled files # Copy the finished compiled files
COPY --from=build /calckey/built /calckey/built COPY --from=build /firefish/built /firefish/built
COPY --from=build /calckey/packages/backend/built /calckey/packages/backend/built COPY --from=build /firefish/packages/backend/built /firefish/packages/backend/built
COPY --from=build /calckey/packages/backend/assets/instance.css /calckey/packages/backend/assets/instance.css COPY --from=build /firefish/packages/backend/assets/instance.css /firefish/packages/backend/assets/instance.css
COPY --from=build /firefish/packages/backend/native-utils/built /firefish/packages/backend/native-utils/built
RUN corepack enable RUN corepack enable && corepack prepare pnpm@latest --activate
ENV NODE_ENV=production
VOLUME "/firefish/files"
ENTRYPOINT [ "/sbin/tini", "--" ] ENTRYPOINT [ "/sbin/tini", "--" ]
CMD [ "pnpm", "run", "migrateandstart" ] CMD [ "pnpm", "run", "migrateandstart" ]

View file

@ -1,42 +1,29 @@
# All the changes to Calckey from stock Misskey # All the changes to Firefish from stock Misskey
> **Warning**
> This list is incomplete. Please check the [Releases](https://gitlab.prometheus.systems/firefish/firefish/releases) and [Changelog](https://gitlab.prometheus.systems/firefish/firefish/src/branch/develop/CHANGELOG.md) for a more complete list of changes. There have been [>4000 commits (laggy link)](https://gitlab.prometheus.systems/firefish/firefish/compare/700a7110f7e34f314b070987aa761c451ec34efc...develop) since we forked Misskey!
## Planned ## Planned
- Stucture - Stucture
- [Sonic](https://crates.io/crates/sonic-server) support as an ElasticSearch alternative - Rewrite backend in Rust and [Rocket](https://rocket.rs/)
- [DragonflyDB](https://dragonflydb.io/) support as a Redis alternative
- Optionally use [ScyllaDB](https://www.scylladb.com/open-source-nosql-database/) for storing notes
- Rewrite backend in Rust and [Axum](https://github.com/tokio-rs/axum)
- Function - Function
- Federate with note edits - User "choices" (recommended users) and featured hashtags like Mastodon and Soapbox
- Admin customizable max note length (100-8000)
- 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
- Backfill remote users - More antenna options
- Build flag to remove NSFW/AI stuff - Groups
- Timeline filters
- Filter notifications by user
- Non-nyaify cat mode
- Exclude self from antenna
- Form
- MFM button
- Personal notes for all accounts
- Fully revamp non-logged-in screen
- Classic mode make instance icon bring up new context menu
- [Rat mode?](https://stop.voring.me/notes/933fx97bmd)
## Work in progress ## Work in progress
- Weblate project
- Customizable max note length
- Link verification
- Better Messaging UI - Better Messaging UI
- Better API Documentation - Better API Documentation
- Remote follow button - Remote follow button
- Admin custom CSS
- Add back time machine (jump to date)
- Improve accesibility - Improve accesibility
- Timeline filters
- Events
- Fully revamp non-logged-in screen
- Optionally use [ScyllaDB](https://www.scylladb.com/open-source-nosql-database/) for storing notes
## Implemented ## Implemented
@ -46,7 +33,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
@ -74,10 +61,9 @@
- 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
- Always signToActivityPubGet - Always signToActivityPubGet
- Spacing on group items - Spacing on group items
- Quotes have solid border - Quotes have solid border
@ -99,16 +85,43 @@
- Undo renote button inside original note - Undo renote button inside original note
- Custom locales - Custom locales
- Obliteration of Ai-chan - Obliteration of Ai-chan
- Switch to [Calckey.js](https://codeberg.org/calckey/calckey.js) - Switch to [Firefish.js](https://gitlab.prometheus.systems/firefish/firefish.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
- Allows custom emoji - Allows custom emoji
- Fix lint errors - Fix lint errors
- Use Rome instead of ESLint - Use Rome instead of ESLint
- Keyboard accesibility - Mastodon API support
- More antenna options
- New dashboard
- Backfill follower counts
- Compile time compression
- Sonic search
- Popular color schemes, including Nord, Gruvbox, and Catppuccin
- Non-nyaify cat mode
- Post imports from other Firefish/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
- Meilisearch with filters
- Post editing
- Display remaining time on rate-limits
- Proper 2FA input dialog
- Let moderators see moderation nodes
- Non-mangled unicode emojis
- Skin tone selection support
- [DragonflyDB](https://dragonflydb.io/) support as a Redis alternative
- Link verification
- Importing posts from other Firefish/Misskey/Mastodon/Akkoma/Pleroma instances
## Implemented (remote)
- MissV: [fix Misskey Forkbomb](https://code.vtopia.live/Vtopia/MissV/commit/40b23c070bd4adbb3188c73546c6c625138fb3c1) - MissV: [fix Misskey Forkbomb](https://code.vtopia.live/Vtopia/MissV/commit/40b23c070bd4adbb3188c73546c6c625138fb3c1)
- [Make showing ads optional](https://github.com/misskey-dev/misskey/pull/8996) - [Make showing ads optional](https://github.com/misskey-dev/misskey/pull/8996)
- [Tapping avatar in mobile opens account modal](https://github.com/misskey-dev/misskey/pull/9056) - [Tapping avatar in mobile opens account modal](https://github.com/misskey-dev/misskey/pull/9056)
@ -121,7 +134,7 @@
- 👍 also triggers generic like/favorite - 👍 also triggers generic like/favorite
- [Add additional background for acrylic popups if backdrop-filter is unsupported](https://github.com/misskey-dev/misskey/pull/8671) - [Add additional background for acrylic popups if backdrop-filter is unsupported](https://github.com/misskey-dev/misskey/pull/8671)
- [Add parameters to MFM rotate](https://github.com/misskey-dev/misskey/pull/8549) - [Add parameters to MFM rotate](https://github.com/misskey-dev/misskey/pull/8549)
- Many changes from [Foundkey](https://akkoma.dev/FoundKeyGang/Foundkey) - Many changes from [FoundKey](https://akkoma.dev/FoundKeyGang/FoundKey)
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/0ece67b04c3f0365057624c1068808276ccab981: refactor pages/auth.form.vue to composition API - https://akkoma.dev/FoundKeyGang/FoundKey/commit/0ece67b04c3f0365057624c1068808276ccab981: refactor pages/auth.form.vue to composition API
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/4bc9610d8bf5af736b5e89e4782395705de45d7d: remove unnecessary joins - https://akkoma.dev/FoundKeyGang/FoundKey/commit/4bc9610d8bf5af736b5e89e4782395705de45d7d: remove unnecessary joins
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/9ee609d70082f7a6dc119a5d83c0e7c5e1208676: enhance privacy of notes - https://akkoma.dev/FoundKeyGang/FoundKey/commit/9ee609d70082f7a6dc119a5d83c0e7c5e1208676: enhance privacy of notes
@ -150,3 +163,4 @@
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/ca90cedba0a0704b503c2778694230f5a7dfbace: server: reduce dead instance detection to 7 days - https://akkoma.dev/FoundKeyGang/FoundKey/commit/ca90cedba0a0704b503c2778694230f5a7dfbace: server: reduce dead instance detection to 7 days
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/e9ab42c10afb4e27516c2d2b5e3e06630efe9edd: Alt text in image viewer - https://akkoma.dev/FoundKeyGang/FoundKey/commit/e9ab42c10afb4e27516c2d2b5e3e06630efe9edd: Alt text in image viewer
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/ed9d4023d41bba7c4ac53a1a3422246feed37de2: add argon2 support - https://akkoma.dev/FoundKeyGang/FoundKey/commit/ed9d4023d41bba7c4ac53a1a3422246feed37de2: add argon2 support
- https://akkoma.dev/FoundKeyGang/FoundKey/commit/c414f24a2c123774246c7eca65edda4d3afaf8b3: feat: per-user renote muting

213
README.md
View file

@ -1,41 +1,50 @@
# :warning: Repo has moved!
https://gitlab.prometheus.systems/firefish/firefish/
<div align="center"> <div align="center">
<a href="https://i.calckey.cloud/"> <a href="https://joinfirefish.org/">
<img src="./title_float.svg" alt="Calckey logo" style="border-radius:50%" width="400"/> <img src="./title.svg" alt="Firefish 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! 🚀** **🌎 **[Firefish](https://joinfirefish.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/firefish/firefish/status.svg)](https://ci.codeberg.org/firefish/firefish) -->
[![opencollective badge](https://opencollective.com/firefish/tiers/badge.svg)](https://opencollective.com/Firefish)
[![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/firefish/-/svg-badge.svg)](https://hosted.weblate.org/engage/firefish/)
[![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/firefish?logo=docker)](https://hub.docker.com/r/thatonecalculator/firefish) -->
[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](./CODE_OF_CONDUCT.md) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](./CODE_OF_CONDUCT.md)
[![Codeberg badge](https://custom-icon-badges.demolab.com/badge/hosted%20on-codeberg-4793CC.svg?logo=codeberg&logoColor=white)](https://codeberg.org/calckey/calckey/)
</div> </div>
<div> <div>
<img src="https://pool.jortage.com/voringme/misskey/e7cd2a17-8b23-4e1e-b5cf-709480c623e2.png" align="right" height="320px" alt="Calc (the Calckey mascot) smoking a fat dart"/> <img src="./animated.svg" align="right" height="320px"/>
# ✨ About Calckey # ✨ About Firefish
- 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! - Firefish 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. - Firefish 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](./FIREFISH.md)** all for current and future differences.
- Notable differences: - Notable differences:
- Improved UI/UX (especially on mobile) - Improved UI/UX (especially on mobile)
- Post editing
- Content importing
- Improved notifications - Improved notifications
- Fediverse account migration - Improved server security
- Improved instance security
- Improved accessibility - Improved accessibility
- Recommended Instances timeline - Improved threads
- Recommended Servers timeline
- OCR image captioning - OCR image captioning
- New and improved Groups - New and improved Groups
- Better intro tutorial - Better intro tutorial
- Compatibility with Mastodon clients/apps
- Backfill user information
- Advanced search
- Many more user and admin settings - Many more user and admin settings
- [So much more!](./CALCKEY.md) - [So much more!](./FIREFISH.md)
</div> </div>
@ -43,48 +52,78 @@
# 🥂 Links # 🥂 Links
- 💸 Liberapay: <https://liberapay.com/ThatOneCalculator> ### Want to get involved? Great!
- If you have the means to, [donations](https://opencollective.com/Firefish) are a great way to keep us going.
- If you know how to program in TypeScript, Vue, or Rust, read the [contributing](./CONTRIBUTING.md) document.
- If you know a non-English language, translating Firefish on [Weblate](https://hosted.weblate.org/engage/firefish/) help bring Firefish to more people. No technical experience needed!
- Want to write/report about us, have any professional inquiries, or just have questions to ask? Contact us [here!](https://joinfirefish.org/contact/)
### All links
- 🌐 Homepage: <https://joinfirefish.org>
- 💸 Donations:
- OpenCollective: <https://opencollective.com/Firefish>
- 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://firefish.social>
- 📣 Official account: <https://i.calckey.cloud/@calckey> - 💁 Matrix support room: <https://matrix.to/#/#firefish:matrix.fedibird.com>
- 💁 Matrix support room: <https://matrix.to/#/#calckey:matrix.fedibird.com> - 📣 Official account: <https://i.firefish.cloud/@firefish>
- 📜 Instance list: <https://calckey.fediverse.observer/list> - 📜 Server list: <https://joinfirefish.org/join>
- 📖 JoinFediverse Wiki: <https://joinfediverse.wiki/What_is_Calckey%3F> - ✍️ Weblate: <https://hosted.weblate.org/engage/firefish/>
- 🐋 Docker Hub: <https://hub.docker.com/r/thatonecalculator/calckey> - ️️📬 Contact: <https://joinfirefish.org/contact/>
- ✍️ Weblate: <https://hosted.weblate.org/engage/calckey/>
- 📦 Yunohost: <https://github.com/YunoHost-Apps/calckey_ynh>
# 🌠 Getting started # 🌠 Getting started
Want to just join a Firefish server? View the list here, pick one, and join:
### https://joinfirefish.org/join
---
Want to make your own? Keep reading!
This guide will work for both **starting from scratch** and **migrating from Misskey**. This guide will work for both **starting from scratch** and **migrating from Misskey**.
## 🔰 Easy installers ## 🔰 Easy installers
If you have access to a server that supports one of the sources below, I recommend you use it! Note that these methods *won't* allow you to migrate from Misskey without manual intervention. If you have access to a server that supports one of the sources below, I recommend you use it! Note that these methods *won't* allow you to migrate from Misskey without manual intervention.
[![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 the Arch User Repository](https://pool.jortage.com/voringme/misskey/ba2a5c07-f078-43f1-8483-2e01acca9c40.png)](https://aur.archlinux.org/packages/firefish)   -->
### 🐋 Docker [![Install on Ubuntu](https://pool.jortage.com/voringme/misskey/3b62a443-1b44-45cf-8f9e-f1c588f803ed.png)](https://gitlab.prometheus.systems/firefish/ubuntu-bash-install)  [![Install Firefish with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=firefish)
[How to run Calckey with Docker](https://codeberg.org/calckey/calckey/src/branch/develop/docs/docker.md). ## 🛳️ Containerization
- [🐳 How to run Firefish with Docker](https://gitlab.prometheus.systems/firefish/firefish/src/branch/develop/docs/docker.md)
- [🛞 How to run Firefish with Kubernetes/Helm](https://gitlab.prometheus.systems/firefish/firefish/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) - 🐘 At least [PostgreSQL](https://www.postgresql.org/) v12 (v14 recommended)
- 🐘 At least [PostgreSQL](https://www.postgresql.org/) v12 - 🍱 At least [Redis](https://redis.io/) v6 (v7 recommended)
- 🍱 At least [Redis](https://redis.io/) v6 (v7 recommend)
- Web Proxy (one of the following) - Web Proxy (one of the following)
- 🍀 Nginx (recommended) - 🍀 Nginx (recommended)
- 🦦 Caddy
- 🪶 Apache - 🪶 Apache
- ⚡ [libvips](https://www.libvips.org/)
### 😗 Optional dependencies ### 😗 Optional dependencies
- [FFmpeg](https://ffmpeg.org/) for video transcoding - [FFmpeg](https://ffmpeg.org/) for video transcoding
- [ElasticSearch](https://www.elastic.co/elasticsearch/) for full-text search - Full text search (one of the following)
- 🦔 [Sonic](https://crates.io/crates/sonic-server)
- [MeiliSearch](https://www.meilisearch.com/)
- [ElasticSearch](https://www.elastic.co/elasticsearch/)
- Caching server (one of the following)
- 🐲 [DragonflyDB](https://www.dragonflydb.io/) (recommended)
- 👻 [KeyDB](https://keydb.dev/)
- 🍱 Another [Redis](https://redis.io/) server
### 🏗️ Build dependencies ### 🏗️ Build dependencies
- 🦀 At least [Rust](https://www.rust-lang.org/) v1.68.0
- 🦬 C/C++ compiler & build tools - 🦬 C/C++ compiler & build tools
- `build-essential` on Debian/Ubuntu Linux - `build-essential` on Debian/Ubuntu Linux
- `base-devel` on Arch Linux - `base-devel` on Arch Linux
@ -93,11 +132,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://gitlab.prometheus.systems/firefish/firefish.git
cd calckey/ cd firefish/
``` ```
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
@ -109,68 +149,127 @@ 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 Firefish 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 firefish 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 firefish with encoding = 'UTF8';"
``` ```
In Firefish's directory, fill out the `db` section of `.config/default.yml` with the correct information, where the `db` key is `firefish`.
## 💰 Caching server
If you experience a lot of traffic, it's a good idea to set up another Redis-compatible caching server. If you don't set one one up, it'll fall back to the mandatory Redis server. DragonflyDB is the recommended option due to its unrivaled performance and ease of use.
## 🔎 Set up search
### 🦔 Sonic
Sonic is better suited for self hosters with smaller deployments. It uses almost no resources, barely any any disk space, and is relatively fast.
Follow sonic's [installation guide](https://github.com/valeriansaliou/sonic#installation)
> **Note**
> If you use IPv4: in Sonic's directory, edit the `config.cfg` file to change `inet` to `"0.0.0.0:1491"`.
In Firefish'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 Firefish'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 Firefish. 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.
- Also copy and edit `.config/docker_example.env` to `.config/docker.env` if you're using Docker. - Also copy and edit `.config/docker_example.env` to `.config/docker.env` if you're using Docker.
## 🚚 Migrating from Misskey to Calckey ## 🚚 Migrating from Misskey/FoundKey to Firefish
For migrating from Misskey v13, Misskey v12, and Foundkey, read [this document](https://codeberg.org/calckey/calckey/src/branch/develop/docs/migrate.md). For migrating from Misskey v13, Misskey v12, and FoundKey, read [this document](https://gitlab.prometheus.systems/firefish/firefish/src/branch/develop/docs/migrate.md).
## 🌐 Web proxy ## 🌐 Web proxy
### 🍀 Nginx (recommended) ### 🍀 Nginx (recommended)
- Run `sudo cp ./calckey.nginx.conf /etc/nginx/sites-available/ && cd /etc/nginx/sites-available/` - Run `sudo cp ./firefish.nginx.conf /etc/nginx/sites-available/ && cd /etc/nginx/sites-available/`
- Edit `calckey.nginx.conf` to reflect your instance properly - Edit `firefish.nginx.conf` to reflect your server properly
- Run `sudo ln -s ./calckey.nginx.conf ../sites-enabled/calckey.nginx.conf` - Run `sudo ln -s ./firefish.nginx.conf ../sites-enabled/firefish.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.
### 🦦 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 ### 🪶 Apache
- Run `sudo cp ./calckey.apache.conf /etc/apache2/sites-available/ && cd /etc/apache2/sites-available/` > **Warning**
- Edit `calckey.apache.conf` to reflect your instance properly > Apache has some known problems with Firefish. Only use it if you have to.
- Run `sudo a2ensite calckey.apache` to enable the site
- Run `sudo cp ./firefish.apache.conf /etc/apache2/sites-available/ && cd /etc/apache2/sites-available/`
- Edit `firefish.apache.conf` to reflect your server properly
- Run `sudo a2ensite firefish.apache` to enable the site
- Run `sudo service apache2 restart` to reload apache2 configuration - Run `sudo service apache2 restart` to reload apache2 configuration
</details>
## 🚀 Build and launch! ## 🚀 Build and launch!
### 🐢 NodeJS + pm2 ### 🐢 NodeJS + pm2
#### `git pull` and run these steps to update Calckey in the future! #### `git pull` and run these steps to update Firefish in the future!
```sh ```sh
# git pull # git pull
pnpm install pnpm install
NODE_ENV=production pnpm run build && pnpm run migrate NODE_ENV=production pnpm run build && pnpm run migrate
pm2 start "NODE_ENV=production pnpm run start" --name Calckey pm2 start "NODE_ENV=production pnpm run start" --name Firefish
``` ```
## 😉 Tips & Tricks ## 😉 Tips & Tricks
- 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 Firefish'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 Firefish, 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.
@ -178,6 +277,6 @@ pm2 start "NODE_ENV=production pnpm run start" --name Calckey
- To add another admin account: - To add another admin account:
- Go to the user's page > 3 Dots > About > Moderation > turn on "Moderator" - Go to the user's page > 3 Dots > About > Moderation > turn on "Moderator"
- Go back to Overview > click the clipboard icon next to the ID - Go back to Overview > click the clipboard icon next to the ID
- Run `psql -d calckey` (or whatever the database name is) - Run `psql -d firefish` (or whatever the database name is)
- Run `UPDATE "user" SET "isAdmin" = true WHERE id='999999';` (replace `999999` with the copied ID) - Run `UPDATE "user" SET "isAdmin" = true WHERE id='999999';` (replace `999999` with the copied ID)
- Have the new admin log out and log back in - Restart your Firefish server

119
RELEASE_NOTES.md Normal file
View file

@ -0,0 +1,119 @@
# Firefish
Welcome to the new era of FIREFISH!
<img src="https://gitlab.prometheus.systems/firefish/firefish/-/raw/develop/animated.svg" height="320px"/>
# Changelog
## Major changes from last release candidate
- Firefish branding and [new repo](https://gitlab.prometheus.systems/firefish/firefish)!
- Far better Mastodon API support
- Edits are now non-experimental
- Support for secondary cache server
- Link verification with `rel=me`
- Store antennas in cache
- Post imports with media
- Sytle fixes
- More translations
- Performance upgrades
- Bug fixes
- Faster build
- [FoundKey](https://genau.qwertqwefsday.eu/notes/9h0lqlg05m) -> Firefish migration fixes
## Major changes from stable
All of the above, plus:
- Post editing
- Post imports
- New post design
- New header design
- Better accessibility
- Server silences
- Modmail
- New MFM effects
- Meilisearch search engine
- Channel search
- Improved system emails
- cuid2 IDs
- Emoji skin tones
- New 2FA flow
- Reduced visual clutter
- Deck view improvements
# Upgrading
## If upgrading from v13 (old stable)
**In addition to the rest of the steps after this**:
- Install the Rust toolchain (v1.68.0 or higher): <https://www.rust-lang.org/tools/install>
- (Optional) install Meilisearch to use as a search engine instead of Sonic: <https://www.meilisearch.com/>
- Replace your config file (`.config/default.yml`) with a blank version of the example (`.config/example.yml`) and re-enter the information. This will make things easier.
## Dependencies
- Upgrade to at least Node v20.3.1 (v20.4.0 recommended).
- (Optional, recommended) install DragonflyDB and configure under `cacheServer`: <https://www.dragonflydb.io/>
## Set new repo and pull
```sh
git remote set-url origin https://gitlab.prometheus.systems/firefish/firefish.git
git pull --ff
```
In case you get an error like:
```
error: The following untracked working tree files would be overwritten by merge:
packages/backend/assets/LICENSE
Please move or remove them before you merge.
Aborting
```
Run:
```sh
rm ./packages/backend/assets/LICENSE
git pull --ff
```
## Upgrade packages
```sh
corepack enable
pnpm i
```
## Build
```sh
NODE_ENV=production pnpm run buld
```
## Migrate
There are 3 new envoriment variables for this upgrade only, because antennas have been moved from the database to the cache.
- `ANTENNA_MIGRATION_SKIP`: skips copying antennas to cache if `true`. Default is `false` (will clear all antennas if skipped).
- `ANTENNA_MIGRATION_COPY_LIMIT`: limits how many entries are copied to cache. Default is `0` (no limit).
- `ANTENNA_MIGRATION_READ_LIMIT`: limits how many entires are read from the database
in each iteration of migration. Large value may result in faster migration, but also may consume more memory. Default is `10000`.
With default options:
```sh
NODE_ENV=production pnpm run migrate
```
With custom options (feel free to only use some):
```sh
NODE_ENV=production ANTENNA_MIGRATION_SKIP=false ANTENNA_MIGRATION_COPY_LIMIT=0 ANTENNA_MIGRATION_READ_LIMIT=1000 pnpm run migrate
```
And then restart Calckey...uh... Firefish!

View file

@ -2,7 +2,7 @@
## Minor Security Issues ## Minor Security Issues
If you discover a minor security issue in Calckey, please report it by sending an If you discover a minor security issue in Firefish, please report it by sending an
email to [kainoa@t1c.dev](mailto:kainoa@t1c.dev). email to [kainoa@t1c.dev](mailto:kainoa@t1c.dev).
## High Security Issues ## High Security Issues
@ -11,6 +11,6 @@ If you discover a security issue, which is so high risk, that too much is affect
This will allow us to assess the risk, and make a fix available before we add a This will allow us to assess the risk, and make a fix available before we add a
bug report to the Codeberg repository. bug report to the Gitlab repository.
Thanks for helping make Calckey safe for everyone. Thanks for helping make Firefish safe for everyone.

153
animated.svg Normal file
View file

@ -0,0 +1,153 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1792 1792">
<style>
/* Eyes */
@keyframes firefish-logo-blink {
95% {
transform: scaleY(1);
}
97.5% {
transform: scaleY(0);
}
100% {
transform: scaleY(1);
}
}
#firefish-logo-eye-l,
#firefish-logo-eye-r {
transform-origin: center;
transform-box: fill-box;
animation-name: firefish-logo-blink;
animation-duration: 3s;
animation-iteration-count: infinite;
animation-timing-function: ease-in-out;
}
/* Bubbles */
@keyframes firefish-logo-bloop {
0% {
transform: translateY(400px);
opacity: 0;
}
20% {
opacity: 0;
}
30% {
opacity: 1;
}
80% {
opacity: 1;
}
90% {
opacity: 0;
}
100% {
transform: translateY(-400px);
}
}
.firefish-logo-bubble {
animation-name: firefish-logo-bloop;
animation-fill-mode: forwards;
animation-iteration-count: infinite;
animation-duration: 2s;
animation-timing-function: ease-out;
fill: #31748f;
opacity: 0;
}
#firefish-logo-bubble-1 {
animation-delay: 0s;
}
#firefish-logo-bubble-2 {
animation-delay: .2s;
}
#firefish-logo-bubble-3 {
animation-delay: .6s;
}
#firefish-logo-bubble-4 {
animation-delay: .8s;
}
#firefish-logo-bubble-5 {
animation-delay: 1s;
}
</style>
<defs>
<linearGradient id="firefish-logo-linear-gradient" x1="26.41" y1="1765.71" x2="1492.49" y2="299.62"
gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#ec476d" />
<stop offset="1" stop-color="#f6ae4a" />
</linearGradient>
<linearGradient id="firefish-logo-linear-gradient-purple" x1="512" y1="1788" x2="512" y2="1398.68"
gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#db44db" stop-opacity=".3" />
<stop offset=".11" stop-color="#db44db" stop-opacity=".21" />
<stop offset=".27" stop-color="#db44db" stop-opacity=".12" />
<stop offset=".44" stop-color="#db44db" stop-opacity=".05" />
<stop offset=".65" stop-color="#db44db" stop-opacity=".01" />
<stop offset="1" stop-color="#db44db" stop-opacity="0" />
</linearGradient>
<linearGradient id="firefish-logo-linear-gradient-3" x1="-351.25" y1="1382.82" x2="1150.74" y2="-119.17"
xlink:href="#firefish-logo-linear-gradient" />
<linearGradient id="firefish-logo-linear-gradient-4" x1="412.3" y1="2147.8" x2="1915.31" y2="644.8"
xlink:href="#firefish-logo-linear-gradient" />
<linearGradient id="firefish-logo-linear-gradient-5" x1="28.25" y1="1763.75" x2="1531.25" y2="260.75"
xlink:href="#firefish-logo-linear-gradient" />
</defs>
<!-- Bubbles -->
<circle id="firefish-logo-bubble-1" class="firefish-logo-bubble" cx="205" cy="500" r="40" />
<circle id="firefish-logo-bubble-2" class="firefish-logo-bubble" cx="140" cy="500" r="80" />
<circle id="firefish-logo-bubble-3" class="firefish-logo-bubble" cx="95" cy="500" r="70" />
<circle id="firefish-logo-bubble-4" class="firefish-logo-bubble" cx="200" cy="500" r="40" />
<circle id="firefish-logo-bubble-5" class="firefish-logo-bubble" cx="95" cy="500" r="20" />
<g id="firefish-logo-firefish">
<g id="firefish-logo-fish">
<g id="firefish-logo-body">
<path
d="m928,768.11H96c-53.02,0-96,42.98-96,96v832c0,53.02,42.98,96,96,96h832c53.02,0,96-42.98,96-96v-832c0-53.02-42.98-96-96-96Z"
fill="url(#firefish-logo-linear-gradient)" />
</g>
<g id="firefish-logo-body-purple-grad">
<path
d="m928,768.11H96C42.98,768.11,0,811.09,0,864.11v832c0,53.02,42.98,96,96,96h832c53.02,0,96-42.98,96-96v-832c0-53.02-42.98-96-96-96Z"
fill="url(#firefish-logo-linear-gradient-purple)" />
</g>
<g id="firefish-logo-fin-l">
<path
d="m927.66,639.79h-439.94c-52.98,0-95.94-42.95-95.94-95.94V103.91c0-85.47,103.34-128.27,163.77-67.84l439.94,439.94c60.44,60.44,17.63,163.77-67.84,163.77Z"
fill="url(#firefish-logo-linear-gradient-3)" />
</g>
<g id="firefish-logo-fin-b">
<path
d="m1694.66,1408.11h-445.51c-53.65,0-97.15-43.5-97.15-97.15v-445.51c0-86.55,104.64-129.9,165.84-68.7l445.51,445.51c61.2,61.2,17.86,165.84-68.7,165.84Z"
fill="url(#firefish-logo-linear-gradient-4)" />
</g>
<g id="firefish-logo-fin-r">
<path
d="m1694.66,640h-445.51c-53.65,0-97.15-43.5-97.15-97.15V97.34c0-86.55,104.64-129.9,165.84-68.7l445.51,445.51c61.2,61.2,17.86,165.84-68.7,165.84Z"
fill="url(#firefish-logo-linear-gradient-5)" />
</g>
<g id="firefish-logo-eye-l">
<circle cx="256" cy="1408.11" r="128" fill="#fff" />
</g>
<g id="firefish-logo-eye-r">
<circle cx="576" cy="1408.11" r="128" fill="#fff" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View file

@ -1,6 +1,6 @@
apiVersion: v2 apiVersion: v2
name: calckey name: firefish
description: A fun, new, open way to experience social media https://calckey.org description: A fun, new, open way to experience social media https://joinfirefish.org
# A chart can be either an 'application' or a 'library' chart. # A chart can be either an 'application' or a 'library' chart.
# #
@ -15,7 +15,7 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes # 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. # to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/) # Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0 version: 0.1.2
# This is the version number of the application being deployed. This version number should be # 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 # incremented each time you make changes to the application. Versions are not expected to

View file

@ -1,8 +1,8 @@
# calckey # firefish
![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-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) ![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 A fun, new, open way to experience social media https://joinfirefish.org
## Requirements ## Requirements
@ -21,33 +21,39 @@ A fun, new, open way to experience social media https://calckey.org
| autoscaling.maxReplicas | int | `100` | | | autoscaling.maxReplicas | int | `100` | |
| autoscaling.minReplicas | int | `1` | | | autoscaling.minReplicas | int | `1` | |
| autoscaling.targetCPUUtilizationPercentage | int | `80` | | | autoscaling.targetCPUUtilizationPercentage | int | `80` | |
| calckey.allowedPrivateNetworks | list | `[]` | If you want to allow calckey to connect to private ips, enter the cidrs here. | | firefish.allowedPrivateNetworks | list | `[]` | If you want to allow firefish to connect to private ips, enter the cidrs here. |
| calckey.domain | string | `"calckey.local"` | | | firefish.deepl.authKey | string | `""` | |
| calckey.isManagedHosting | bool | `true` | | | firefish.deepl.isPro | bool | `false` | |
| calckey.objectStorage.access_key | string | `""` | | | firefish.deepl.managed | bool | `false` | |
| calckey.objectStorage.access_secret | string | `""` | | | firefish.domain | string | `"firefish.local"` | |
| calckey.objectStorage.baseUrl | string | `""` | | | firefish.isManagedHosting | bool | `true` | |
| calckey.objectStorage.bucket | string | `""` | | | firefish.libreTranslate.apiKey | string | `""` | |
| calckey.objectStorage.endpoint | string | `""` | | | firefish.libreTranslate.apiUrl | string | `""` | |
| calckey.objectStorage.managed | bool | `true` | | | firefish.libreTranslate.managed | bool | `false` | |
| calckey.objectStorage.prefix | string | `"files"` | | | firefish.objectStorage.access_key | string | `""` | |
| calckey.objectStorage.region | string | `""` | | | firefish.objectStorage.access_secret | string | `""` | |
| calckey.reservedUsernames[0] | string | `"root"` | | | firefish.objectStorage.baseUrl | string | `""` | |
| calckey.reservedUsernames[1] | string | `"admin"` | | | firefish.objectStorage.bucket | string | `""` | |
| calckey.reservedUsernames[2] | string | `"administrator"` | | | firefish.objectStorage.endpoint | string | `""` | |
| calckey.reservedUsernames[3] | string | `"me"` | | | firefish.objectStorage.managed | bool | `true` | |
| calckey.reservedUsernames[4] | string | `"system"` | | | firefish.objectStorage.prefix | string | `"files"` | |
| calckey.smtp.from_address | string | `"notifications@example.com"` | | | firefish.objectStorage.region | string | `""` | |
| calckey.smtp.login | string | `""` | | | firefish.reservedUsernames[0] | string | `"root"` | |
| calckey.smtp.managed | bool | `true` | | | firefish.reservedUsernames[1] | string | `"admin"` | |
| calckey.smtp.password | string | `""` | | | firefish.reservedUsernames[2] | string | `"administrator"` | |
| calckey.smtp.port | int | `587` | | | firefish.reservedUsernames[3] | string | `"me"` | |
| calckey.smtp.server | string | `"smtp.mailgun.org"` | | | firefish.reservedUsernames[4] | string | `"system"` | |
| calckey.smtp.useImplicitSslTls | bool | `false` | | | firefish.smtp.from_address | string | `"notifications@example.com"` | |
| elasticsearch | object | `{"auth":null,"enabled":false,"hostname":"","port":9200,"ssl":false}` | https://github.com/bitnami/charts/tree/master/bitnami/elasticsearch#parameters | | firefish.smtp.login | string | `""` | |
| firefish.smtp.managed | bool | `true` | |
| firefish.smtp.password | string | `""` | |
| firefish.smtp.port | int | `587` | |
| firefish.smtp.server | string | `"smtp.mailgun.org"` | |
| firefish.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 | `""` | | | fullnameOverride | string | `""` | |
| image.pullPolicy | string | `"IfNotPresent"` | | | image.pullPolicy | string | `"IfNotPresent"` | |
| image.repository | string | `"docker.io/thatonecalculator/calckey"` | | | image.repository | string | `"docker.io/thatonecalculator/firefish"` | |
| image.tag | string | `""` | | | image.tag | string | `""` | |
| imagePullSecrets | list | `[]` | | | imagePullSecrets | list | `[]` | |
| ingress.annotations | object | `{}` | | | ingress.annotations | object | `{}` | |
@ -61,9 +67,9 @@ A fun, new, open way to experience social media https://calckey.org
| nodeSelector | object | `{}` | | | nodeSelector | object | `{}` | |
| podAnnotations | object | `{}` | | | podAnnotations | object | `{}` | |
| podSecurityContext | object | `{}` | | | podSecurityContext | object | `{}` | |
| postgresql.auth.database | string | `"calckey_production"` | | | postgresql.auth.database | string | `"firefish_production"` | |
| postgresql.auth.password | string | `""` | | | postgresql.auth.password | string | `""` | |
| postgresql.auth.username | string | `"calckey"` | | | postgresql.auth.username | string | `"firefish"` | |
| 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 | | 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.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.enabled | bool | `true` | |

View file

@ -6,16 +6,16 @@
{{- end }} {{- end }}
{{- end }} {{- end }}
{{- else if contains "NodePort" .Values.service.type }} {{- 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_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "firefish.fullname" . }})
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT echo http://$NODE_IP:$NODE_PORT
{{- else if contains "LoadBalancer" .Values.service.type }} {{- else if contains "LoadBalancer" .Values.service.type }}
NOTE: It may take a few minutes for the LoadBalancer IP to be available. 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" . }}' You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "firefish.fullname" . }}'
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "calckey.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "firefish.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
echo http://$SERVICE_IP:{{ .Values.service.port }} echo http://$SERVICE_IP:{{ .Values.service.port }}
{{- else if contains "ClusterIP" .Values.service.type }} {{- 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 POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "firefish.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}") 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" echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT

View file

@ -1,7 +1,7 @@
{{/* {{/*
Expand the name of the chart. Expand the name of the chart.
*/}} */}}
{{- define "calckey.name" -}} {{- define "firefish.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 "calckey.fullname" -}} {{- define "firefish.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 "calckey.chart" -}} {{- define "firefish.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 "calckey.labels" -}} {{- define "firefish.labels" -}}
helm.sh/chart: {{ include "calckey.chart" . }} helm.sh/chart: {{ include "firefish.chart" . }}
{{ include "calckey.selectorLabels" . }} {{ include "firefish.selectorLabels" . }}
{{- if .Chart.AppVersion }} {{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }} {{- end }}
@ -45,17 +45,17 @@ app.kubernetes.io/managed-by: {{ .Release.Service }}
{{/* {{/*
Selector labels Selector labels
*/}} */}}
{{- define "calckey.selectorLabels" -}} {{- define "firefish.selectorLabels" -}}
app.kubernetes.io/name: {{ include "calckey.name" . }} app.kubernetes.io/name: {{ include "firefish.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 "calckey.serviceAccountName" -}} {{- define "firefish.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }} {{- if .Values.serviceAccount.create }}
{{- default (include "calckey.fullname" .) .Values.serviceAccount.name }} {{- default (include "firefish.fullname" .) .Values.serviceAccount.name }}
{{- else }} {{- else }}
{{- default "default" .Values.serviceAccount.name }} {{- default "default" .Values.serviceAccount.name }}
{{- end }} {{- end }}
@ -65,31 +65,31 @@ Create the name of the service account to use
Create a default fully qualified name for dependent services. 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). We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
*/}} */}}
{{- define "calckey.elasticsearch.fullname" -}} {{- define "firefish.elasticsearch.fullname" -}}
{{- printf "%s-%s" .Release.Name "elasticsearch" | trunc 63 | trimSuffix "-" -}} {{- printf "%s-%s" .Release.Name "elasticsearch" | trunc 63 | trimSuffix "-" -}}
{{- end -}} {{- end -}}
{{- define "calckey.redis.fullname" -}} {{- define "firefish.redis.fullname" -}}
{{- printf "%s-%s" .Release.Name "redis" | trunc 63 | trimSuffix "-" -}} {{- printf "%s-%s" .Release.Name "redis" | trunc 63 | trimSuffix "-" -}}
{{- end -}} {{- end -}}
{{- define "calckey.postgresql.fullname" -}} {{- define "firefish.postgresql.fullname" -}}
{{- printf "%s-%s" .Release.Name "postgresql" | trunc 63 | trimSuffix "-" -}} {{- printf "%s-%s" .Release.Name "postgresql" | trunc 63 | trimSuffix "-" -}}
{{- end -}} {{- end -}}
{{/* {{/*
config/default.yml content config/default.yml content
*/}} */}}
{{- define "calckey.configDir.default.yml" -}} {{- define "firefish.configDir.default.yml" -}}
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Calckey configuration # Firefish configuration
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# ┌─────┐ # ┌─────┐
#───┘ URL └───────────────────────────────────────────────────── #───┘ URL └─────────────────────────────────────────────────────
# Final accessible URL seen by a user. # Final accessible URL seen by a user.
url: "https://{{ .Values.calckey.domain }}/" url: "https://{{ .Values.firefish.domain }}/"
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE # ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# URL SETTINGS AFTER THAT! # URL SETTINGS AFTER THAT!
@ -118,7 +118,7 @@ port: 3000
db: db:
{{- if .Values.postgresql.enabled }} {{- if .Values.postgresql.enabled }}
host: {{ template "calckey.postgresql.fullname" . }} host: {{ template "firefish.postgresql.fullname" . }}
port: '5432' port: '5432'
{{- else }} {{- else }}
host: {{ .Values.postgresql.postgresqlHostname }} host: {{ .Values.postgresql.postgresqlHostname }}
@ -137,14 +137,16 @@ db:
# Extra Connection options # Extra Connection options
#extra: #extra:
# ssl: true # ssl:
# host: localhost
# rejectUnauthorized: false
# ┌─────────────────────┐ # ┌─────────────────────┐
#───┘ Redis configuration └───────────────────────────────────── #───┘ Redis configuration └─────────────────────────────────────
redis: redis:
{{- if .Values.redis.enabled }} {{- if .Values.redis.enabled }}
host: {{ template "calckey.redis.fullname" . }}-master host: {{ template "firefish.redis.fullname" . }}-master
{{- else }} {{- else }}
host: {{ required "When the redis chart is disabled .Values.redis.hostname is required" .Values.redis.hostname }} host: {{ required "When the redis chart is disabled .Values.redis.hostname is required" .Values.redis.hostname }}
{{- end }} {{- end }}
@ -153,6 +155,10 @@ redis:
pass: {{ .Values.redis.auth.password | quote }} pass: {{ .Values.redis.auth.password | quote }}
#prefix: example-prefix #prefix: example-prefix
#db: 1 #db: 1
#user: default
#tls:
# host: localhost
# rejectUnauthorized: false
# ┌─────────────────────┐ # ┌─────────────────────┐
#───┘ Sonic configuration └───────────────────────────────────── #───┘ Sonic configuration └─────────────────────────────────────
@ -212,7 +218,7 @@ id: 'aid'
# Reserved usernames that only the administrator can register with # Reserved usernames that only the administrator can register with
reservedUsernames: reservedUsernames:
{{ .Values.calckey.reservedUsernames | toYaml }} {{ .Values.firefish.reservedUsernames | toYaml }}
# Whether disable HSTS # Whether disable HSTS
#disableHsts: true #disableHsts: true
@ -260,7 +266,7 @@ reservedUsernames:
#proxyRemoteFiles: true #proxyRemoteFiles: true
allowedPrivateNetworks: allowedPrivateNetworks:
{{ .Values.calckey.allowedPrivateNetworks | toYaml }} {{ .Values.firefish.allowedPrivateNetworks | toYaml }}
# TWA # TWA
#twa: #twa:
@ -280,29 +286,34 @@ allowedPrivateNetworks:
# 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: {{ .Values.calckey.isManagedHosting }} isManagedHosting: {{ .Values.firefish.isManagedHosting }}
deepl: deepl:
managed: false managed: {{ .Values.firefish.deepl.managed }}
# authKey: '' authKey: {{ .Values.firefish.deepl.authKey | quote}}
# isPro: false isPro: {{ .Values.firefish.deepl.isPro }}
#
libreTranslate:
managed: {{ .Values.firefish.libreTranslate.managed }}
apiUrl: {{ .Values.firefish.libreTranslate.apiUrl | quote }}
apiKey: {{ .Values.firefish.libreTranslate.apiKey | quote }}
email: email:
managed: {{ .Values.calckey.smtp.managed }} managed: {{ .Values.firefish.smtp.managed }}
address: {{ .Values.calckey.smtp.from_address | quote }} address: {{ .Values.firefish.smtp.from_address | quote }}
host: {{ .Values.calckey.smtp.server | quote }} host: {{ .Values.firefish.smtp.server | quote }}
port: {{ .Values.calckey.smtp.port }} port: {{ .Values.firefish.smtp.port }}
user: {{ .Values.calckey.smtp.login | quote }} user: {{ .Values.firefish.smtp.login | quote }}
pass: {{ .Values.calckey.smtp.password | quote }} pass: {{ .Values.firefish.smtp.password | quote }}
useImplicitSslTls: {{ .Values.calckey.smtp.useImplicitSslTls }} useImplicitSslTls: {{ .Values.firefish.smtp.useImplicitSslTls }}
objectStorage: objectStorage:
managed: {{ .Values.calckey.objectStorage.managed }} managed: {{ .Values.firefish.objectStorage.managed }}
baseUrl: {{ .Values.calckey.objectStorage.baseUrl | quote }} baseUrl: {{ .Values.firefish.objectStorage.baseUrl | quote }}
bucket: {{ .Values.calckey.objectStorage.bucket | quote }} bucket: {{ .Values.firefish.objectStorage.bucket | quote }}
prefix: {{ .Values.calckey.objectStorage.prefix | quote }} prefix: {{ .Values.firefish.objectStorage.prefix | quote }}
endpoint: {{ .Values.calckey.objectStorage.endpoint | quote }} endpoint: {{ .Values.firefish.objectStorage.endpoint | quote }}
region: {{ .Values.calckey.objectStorage.region | quote }} region: {{ .Values.firefish.objectStorage.region | quote }}
accessKey: {{ .Values.calckey.objectStorage.access_key | quote }} accessKey: {{ .Values.firefish.objectStorage.access_key | quote }}
secretKey: {{ .Values.calckey.objectStorage.access_secret | quote }} secretKey: {{ .Values.firefish.objectStorage.access_secret | quote }}
useSsl: true useSsl: true
connnectOverProxy: false connnectOverProxy: false
setPublicReadOnUpload: true setPublicReadOnUpload: true

View file

@ -1,16 +1,16 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: {{ include "calckey.fullname" . }} name: {{ include "firefish.fullname" . }}
labels: labels:
{{- include "calckey.labels" . | nindent 4 }} {{- include "firefish.labels" . | nindent 4 }}
spec: spec:
{{- if not .Values.autoscaling.enabled }} {{- if not .Values.autoscaling.enabled }}
replicas: {{ .Values.replicaCount }} replicas: {{ .Values.replicaCount }}
{{- end }} {{- end }}
selector: selector:
matchLabels: matchLabels:
{{- include "calckey.selectorLabels" . | nindent 6 }} {{- include "firefish.selectorLabels" . | nindent 6 }}
template: template:
metadata: metadata:
annotations: annotations:
@ -19,31 +19,35 @@ spec:
{{- toYaml . | nindent 8 }} {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
labels: labels:
{{- include "calckey.selectorLabels" . | nindent 8 }} {{- include "firefish.selectorLabels" . | nindent 8 }}
spec: spec:
{{- with .Values.imagePullSecrets }} {{- with .Values.imagePullSecrets }}
imagePullSecrets: imagePullSecrets:
{{- toYaml . | nindent 8 }} {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
serviceAccountName: {{ include "calckey.serviceAccountName" . }} serviceAccountName: {{ include "firefish.serviceAccountName" . }}
securityContext: securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }} {{- toYaml .Values.podSecurityContext | nindent 8 }}
volumes: volumes:
- name: config-volume - name: config-volume
secret: secret:
secretName: {{ template "calckey.fullname" . }}-config secretName: {{ template "firefish.fullname" . }}-config
containers: containers:
- name: {{ .Chart.Name }} - name: {{ .Chart.Name }}
securityContext: securityContext:
{{- toYaml .Values.securityContext | nindent 12 }} {{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }} imagePullPolicy: {{ .Values.image.pullPolicy }}
command:
- pnpm
- run
- start
env: env:
- name: "NODE_ENV" - name: "NODE_ENV"
value: "production" value: "production"
volumeMounts: volumeMounts:
- name: config-volume - name: config-volume
mountPath: /calckey/.config mountPath: /firefish/.config
ports: ports:
- name: http - name: http
containerPort: 3000 containerPort: 3000

View file

@ -2,14 +2,14 @@
apiVersion: autoscaling/v2beta1 apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler kind: HorizontalPodAutoscaler
metadata: metadata:
name: {{ include "calckey.fullname" . }} name: {{ include "firefish.fullname" . }}
labels: labels:
{{- include "calckey.labels" . | nindent 4 }} {{- include "firefish.labels" . | nindent 4 }}
spec: spec:
scaleTargetRef: scaleTargetRef:
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
name: {{ include "calckey.fullname" . }} name: {{ include "firefish.fullname" . }}
minReplicas: {{ .Values.autoscaling.minReplicas }} minReplicas: {{ .Values.autoscaling.minReplicas }}
maxReplicas: {{ .Values.autoscaling.maxReplicas }} maxReplicas: {{ .Values.autoscaling.maxReplicas }}
metrics: metrics:

View file

@ -1,5 +1,5 @@
{{- if .Values.ingress.enabled -}} {{- if .Values.ingress.enabled -}}
{{- $fullName := include "calckey.fullname" . -}} {{- $fullName := include "firefish.fullname" . -}}
{{- $svcPort := .Values.service.port -}} {{- $svcPort := .Values.service.port -}}
{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} {{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }}
{{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }}
@ -17,7 +17,7 @@ kind: Ingress
metadata: metadata:
name: {{ $fullName }} name: {{ $fullName }}
labels: labels:
{{- include "calckey.labels" . | nindent 4 }} {{- include "firefish.labels" . | nindent 4 }}
{{- with .Values.ingress.annotations }} {{- with .Values.ingress.annotations }}
annotations: annotations:
{{- toYaml . | nindent 4 }} {{- toYaml . | nindent 4 }}

View file

@ -0,0 +1,59 @@
apiVersion: batch/v1
kind: Job
metadata:
name: {{ include "firefish.fullname" . }}-db-migrate
labels:
{{- include "firefish.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 "firefish.fullname" . }}-db-migrate
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
spec:
restartPolicy: Never
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ include "firefish.serviceAccountName" . }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
volumes:
- name: config-volume
secret:
secretName: {{ template "firefish.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: /firefish/.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

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

View file

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

View file

@ -2,9 +2,9 @@
apiVersion: v1 apiVersion: v1
kind: ServiceAccount kind: ServiceAccount
metadata: metadata:
name: {{ include "calckey.serviceAccountName" . }} name: {{ include "firefish.serviceAccountName" . }}
labels: labels:
{{- include "calckey.labels" . | nindent 4 }} {{- include "firefish.labels" . | nindent 4 }}
{{- with .Values.serviceAccount.annotations }} {{- with .Values.serviceAccount.annotations }}
annotations: annotations:
{{- toYaml . | nindent 4 }} {{- toYaml . | nindent 4 }}

View file

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

View file

@ -1,18 +1,28 @@
# Default values for calckey. # Default values for firefish.
# This is a YAML-formatted file. # This is a YAML-formatted file.
# Declare variables to be passed into your templates. # Declare variables to be passed into your templates.
replicaCount: 1 replicaCount: 1
image: image:
repository: docker.io/thatonecalculator/calckey repository: docker.io/thatonecalculator/firefish
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion. # Overrides the image tag whose default is the chart appVersion.
tag: "" tag: ""
calckey: firefish:
isManagedHosting: true isManagedHosting: true
domain: calckey.local domain: firefish.local
deepl:
managed: false
authKey: ""
isPro: false
libreTranslate:
managed: false
apiUrl: ""
apiKey: ""
smtp: smtp:
managed: true managed: true
@ -33,7 +43,7 @@ calckey:
endpoint: "" # e.g. "nyc3.digitaloceanspaces.com:443" endpoint: "" # e.g. "nyc3.digitaloceanspaces.com:443"
region: "" # e.g. "nyc3" region: "" # e.g. "nyc3"
# -- If you want to allow calckey to connect to private ips, enter the cidrs here. # -- If you want to allow firefish to connect to private ips, enter the cidrs here.
allowedPrivateNetworks: [] allowedPrivateNetworks: []
# - "10.0.0.0/8" # - "10.0.0.0/8"
@ -52,8 +62,8 @@ postgresql:
# postgresqlHostname: preexisting-postgresql # postgresqlHostname: preexisting-postgresql
# postgresqlPort: 5432 # postgresqlPort: 5432
auth: auth:
database: calckey_production database: firefish_production
username: calckey username: firefish
# you must set a password; the password generated by the postgresql chart will # you must set a password; the password generated by the postgresql chart will
# be rotated on each upgrade: # be rotated on each upgrade:
# https://github.com/bitnami/charts/tree/master/bitnami/postgresql#upgrade # https://github.com/bitnami/charts/tree/master/bitnami/postgresql#upgrade

View file

@ -4,7 +4,7 @@
# changelog header # changelog header
header = """ header = """
# Changelog\n # Changelog\n
All changes from v13.0.0 onwards, for a full list of differences read CALCKEY.md\n All changes from v13.0.0 onwards, for a list of differences read FIREFISH.md\n
""" """
# template for the changelog body # template for the changelog body
# https://tera.netlify.app/docs/#introduction # https://tera.netlify.app/docs/#introduction
@ -35,10 +35,6 @@ conventional_commits = false
filter_unconventional = true filter_unconventional = true
# process each line of a commit as an individual commit # process each line of a commit as an individual commit
split_commits = false split_commits = false
# regex for preprocessing the commit messages
commit_preprocessors = [
{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](https://github.com/orhun/git-cliff/issues/${2}))"},
]
# regex for parsing and grouping commits # regex for parsing and grouping commits
commit_parsers = [ commit_parsers = [
{ message = "^feat", group = "Features"}, { message = "^feat", group = "Features"},

13
custom/assets/LICENSE Normal file
View file

@ -0,0 +1,13 @@
Copyright 2023 Firefish
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

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,14 +1,14 @@
describe('After user signed in', () => { describe("After user signed in", () => {
beforeEach(() => { beforeEach(() => {
cy.resetState(); cy.resetState();
cy.viewport('macbook-16'); cy.viewport("macbook-16");
// インスタンス初期セットアップ // インスタンス初期セットアップ
cy.registerUser('admin', 'pass', true); cy.registerUser("admin", "pass", true);
// ユーザー作成 // ユーザー作成
cy.registerUser('alice', 'alice1234'); cy.registerUser("alice", "alice1234");
cy.login('alice', 'alice1234'); cy.login("alice", "alice1234");
}); });
afterEach(() => { afterEach(() => {
@ -17,47 +17,47 @@ describe('After user signed in', () => {
cy.wait(1000); cy.wait(1000);
}); });
it('widget edit toggle is visible', () => { it("widget edit toggle is visible", () => {
cy.get('.mk-widget-edit').should('be.visible'); cy.get(".mk-widget-edit").should("be.visible");
}); });
it('widget select should be visible in edit mode', () => { it("widget select should be visible in edit mode", () => {
cy.get('.mk-widget-edit').click(); cy.get(".mk-widget-edit").click();
cy.get('.mk-widget-select').should('be.visible'); cy.get(".mk-widget-select").should("be.visible");
}); });
it('first widget should be removed', () => { it("first widget should be removed", () => {
cy.get('.mk-widget-edit').click(); cy.get(".mk-widget-edit").click();
cy.get('.customize-container:first-child .remove._button').click(); cy.get(".customize-container:first-child .remove._button").click();
cy.get('.customize-container').should('have.length', 2); cy.get(".customize-container").should("have.length", 2);
}); });
function buildWidgetTest(widgetName) { function buildWidgetTest(widgetName) {
it(`${widgetName} widget should get added`, () => { it(`${widgetName} widget should get added`, () => {
cy.get('.mk-widget-edit').click(); cy.get(".mk-widget-edit").click();
cy.get('.mk-widget-select select').select(widgetName, { force: true }); cy.get(".mk-widget-select select").select(widgetName, { force: true });
cy.get('.bg._modalBg.transparent').click({ multiple: true, force: true }); cy.get(".bg._modalBg.transparent").click({ multiple: true, force: true });
cy.get('.mk-widget-add').click({ force: true }); cy.get(".mk-widget-add").click({ force: true });
cy.get(`.mkw-${widgetName}`).should('exist'); cy.get(`.mkw-${widgetName}`).should("exist");
}); });
} }
buildWidgetTest('memo'); buildWidgetTest("memo");
buildWidgetTest('notifications'); buildWidgetTest("notifications");
buildWidgetTest('timeline'); buildWidgetTest("timeline");
buildWidgetTest('calendar'); buildWidgetTest("calendar");
buildWidgetTest('rss'); buildWidgetTest("rss");
buildWidgetTest('trends'); buildWidgetTest("trends");
buildWidgetTest('clock'); buildWidgetTest("clock");
buildWidgetTest('activity'); buildWidgetTest("activity");
buildWidgetTest('photos'); buildWidgetTest("photos");
buildWidgetTest('digitalClock'); buildWidgetTest("digitalClock");
buildWidgetTest('federation'); buildWidgetTest("federation");
buildWidgetTest('postForm'); buildWidgetTest("postForm");
buildWidgetTest('slideshow'); buildWidgetTest("slideshow");
buildWidgetTest('serverMetric'); buildWidgetTest("serverMetric");
buildWidgetTest('onlineUsers'); buildWidgetTest("onlineUsers");
buildWidgetTest('jobQueue'); buildWidgetTest("jobQueue");
buildWidgetTest('button'); buildWidgetTest("button");
buildWidgetTest('aiscript'); buildWidgetTest("aiscript");
}); });

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

@ -2,9 +2,9 @@ version: "3"
services: services:
web: web:
image: docker.io/thatonecalculator/calckey image: docker.io/thatonecalculator/firefish
build: .. build: ..
container_name: calckey_web container_name: firefish_web
restart: always restart: always
depends_on: depends_on:
- db - db
@ -16,12 +16,12 @@ services:
- network - network
# - web # - web
volumes: volumes:
- ../files:/calckey/files - ../files:/firefish/files
- ../.config:/calckey/.config:ro - ../.config:/firefish/.config:ro
redis: redis:
restart: always restart: always
container_name: calckey_redis container_name: firefish_redis
image: docker.io/redis:7.0-alpine image: docker.io/redis:7.0-alpine
networks: networks:
- network - network
@ -31,7 +31,7 @@ services:
db: db:
restart: always restart: always
image: docker.io/postgres:12.2-alpine image: docker.io/postgres:12.2-alpine
container_name: calckey_db container_name: firefish_db
networks: networks:
- network - network
env_file: env_file:

View file

@ -2,13 +2,15 @@ version: "3"
services: services:
web: web:
image: docker.io/thatonecalculator/calckey image: docker.io/thatonecalculator/firefish
container_name: calckey_web container_name: firefish_web
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
- db - db
- redis - redis
# - es ### Uncomment one of the following to use a search engine
# - meilisearch
# - sonic
ports: ports:
- "3000:3000" - "3000:3000"
networks: networks:
@ -17,13 +19,13 @@ services:
environment: environment:
NODE_ENV: production NODE_ENV: production
volumes: volumes:
- ./files:/calckey/files - ./files:/firefish/files
- ./.config:/calckey/.config:ro - ./.config:/firefish/.config:ro
redis: redis:
restart: unless-stopped restart: unless-stopped
image: docker.io/redis:7.0-alpine image: docker.io/redis:7.0-alpine
container_name: calckey_redis container_name: firefish_redis
networks: networks:
- calcnet - calcnet
volumes: volumes:
@ -32,7 +34,7 @@ services:
db: db:
restart: unless-stopped restart: unless-stopped
image: docker.io/postgres:12.2-alpine image: docker.io/postgres:12.2-alpine
container_name: calckey_db container_name: firefish_db
networks: networks:
- calcnet - calcnet
env_file: env_file:
@ -40,19 +42,33 @@ services:
volumes: volumes:
- ./db:/var/lib/postgresql/data - ./db:/var/lib/postgresql/data
# es: ### 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.elastic.co/elasticsearch/elasticsearch-oss:6.4.2
# environment: # meilisearch:
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # container_name: meilisearch
# - "TAKE_FILE_OWNERSHIP=111" # image: getmeili/meilisearch:v1.1.1
# environment:
# - MEILI_ENV=${MEILI_ENV:-development}
# ports:
# - "7700:7700"
# networks: # networks:
# - calcnet # - calcnet
# volumes: # volumes:
# - ./elasticsearch:/usr/share/elasticsearch/data # - ./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

5
docs/api-doc.md Normal file
View file

@ -0,0 +1,5 @@
# API Documentation
You can find interactive API documentation at any Firefish instance. https://firefish.social/api-doc
You can also find auto-generated documentation for firefish-js [here](../packages/firefish-js/markdown/firefish-js.md).

108
docs/development.md Normal file
View file

@ -0,0 +1,108 @@
# 🌎 Firefish Developer Docs
## Nix Dev Environment
The Firefish 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 Firefish 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 **Firefish** server in dev mode.
- Once you see the Firefish 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/#/#firefish: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:
```
> firefish@14.0.0-dev32 start /mnt/.../firefish
> pnpm --filter backend run start
> backend@ start /mnt/.../firefish/packages/backend
> pnpm node ./built/index.js
node:internal/modules/cjs/loader:1078
throw err;
^
Error: Cannot find module '/mnt/.../firefish/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/.../firefish/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 "Firefish" 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,41 +1,42 @@
# 🐳 Running a Calckey instance with Docker # 🐳 Running a Firefish server with Docker
## Pre-built docker container ## Pre-built docker container
[thatonecalculator/calckey](https://hub.docker.com/r/thatonecalculator/calckey) [thatonecalculator/firefish](https://hub.docker.com/r/thatonecalculator/firefish)
## `docker-compose` ## `docker-compose`
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 (**firefish server settings**)
## Configuring ## Configuring
Rename the files: Rename the files:
`cp .config/default_example.yml .config/default.yml` `cp .config/example.yml .config/default.yml`
`cp .config/example.env .config/docker.env` `cp .config/example.env .config/docker.env`
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: *firefish_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: *firefish_redis_1*)
- `auth` will need to be configured in the *Sonic* section - cannot be the default `SecretPassword`
Everything else can be left as-is. Everything else can be left as-is.
## Running docker-compose ## Running docker-compose
The [prebuilt container for calckey](https://hub.docker.com/r/thatonecalculator/calckey) is fairly large, and may take a few minutes to download and extract using docker. The [prebuilt container for firefish](https://hub.docker.com/r/thatonecalculator/firefish) is fairly large, and may take a few minutes to download and extract using docker.
Copy `docker-compose.yml` and the `config/` to a directory, then run the **docker-compose** command: Copy `docker-compose.yml` and the `config/` to a directory, then run the **docker-compose** command:
`docker-compose up -d`. `docker-compose up -d`.
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 firefish 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 firefish server on).
## Docker for development ## Docker for development

41
docs/fk.patch Normal file
View file

@ -0,0 +1,41 @@
diff --git a/packages/backend/migration/1661376843000-remove-mentioned-remote-users-column.js b/packages/backend/migration/1661376843000-remove-mentioned-remote-users-column.js
index 42d79b5b5..1fd5e0f10 100644
--- a/packages/backend/migration/1661376843000-remove-mentioned-remote-users-column.js
+++ b/packages/backend/migration/1661376843000-remove-mentioned-remote-users-column.js
@@ -7,6 +7,22 @@ export class removeMentionedRemoteUsersColumn1661376843000 {
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "note" ADD "mentionedRemoteUsers" TEXT NOT NULL DEFAULT '[]'::text`);
- await queryRunner.query(`UPDATE "note" SET "mentionedRemoteUsers" = (SELECT COALESCE(json_agg(row_to_json("data"))::text, '[]') FROM (SELECT "url", "uri", "username", "host" FROM "user" JOIN "user_profile" ON "user"."id" = "user_profile". "userId" WHERE "user"."host" IS NOT NULL AND "user"."id" = ANY("note"."mentions")) AS "data")`);
+ await queryRunner.query(`
+ CREATE TEMP TABLE IF NOT EXISTS "temp_mentions" AS
+ SELECT "id", "url", "uri", "username", "host"
+ FROM "user"
+ JOIN "user_profile" ON "user"."id" = "user_profile"."userId" WHERE "user"."host" IS NOT NULL
+ `);
+
+ await queryRunner.query(`
+ CREATE UNIQUE INDEX "temp_mentions_id" ON "temp_mentions"("id")
+ `);
+
+ await queryRunner.query(`
+ UPDATE "note" SET "mentionedRemoteUsers" = (
+ SELECT COALESCE(json_agg(row_to_json("data")::jsonb - 'id')::text, '[]') FROM "temp_mentions" AS "data"
+ WHERE "data"."id" = ANY("note"."mentions")
+ )
+ `);
}
}
diff --git a/packages/backend/migration/1663399074403-resize-comments-drive-file.js b/packages/backend/migration/1663399074403-resize-comments-drive-file.js
index a037f1655..0873aec9b 100644
--- a/packages/backend/migration/1663399074403-resize-comments-drive-file.js
+++ b/packages/backend/migration/1663399074403-resize-comments-drive-file.js
@@ -9,6 +9,6 @@ export class resizeCommentsDriveFile1663399074403 {
}
async down(queryRunner) {
- await queryRunner.query(`ALTER TABLE "drive_file" ALTER COLUMN "comment" TYPE character varying(512)`);
- }
+ console.log('This migration cannot be reverted, skipping...');
+ }
}

45
docs/kubernetes.md Normal file
View file

@ -0,0 +1,45 @@
# Running a Firefish 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 firefish 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 firefish helm release (also used to update existing deployment):
```shell
helm upgrade \
--install \
--namespace firefish \
--create-namespace \
firefish chart/ \
-f .config/helm_values.yml
```
4. Watch your firefish server spin up:
```shell
kubectl -n firefish get po -w
```
5. Initial the admin user and managed config:
```shell
export firefish_USERNAME="my_desired_admin_handle" && \
export firefish_PASSWORD="myDesiredInitialPassword" && \
export firefish_HOST="firefish.example.com" && \
export firefish_TOKEN=$(curl -X POST https://$firefish_HOST/api/admin/accounts/create -H "Content-Type: application/json" -d "{ \"username\":\"$firefish_USERNAME\", \"password\":\"$firefish_PASSWORD\" }" | jq -r '.token') && \
echo "Save this token: ${firefish_TOKEN}" && \
curl -X POST -H "Authorization: Bearer $firefish_TOKEN" https://$firefish_HOST/api/admin/accounts/hosted
```
6. Enjoy!

106
docs/migrate.md Normal file
View file

@ -0,0 +1,106 @@
# 🚚 Migrating from Misskey/FoundKey to Firefish
All the guides below assume you're starting in the root of the repo directory.
### Before proceeding
- **Ensure you have stopped all master and worker processes of Misskey.**
- **Ensure you have backups of the database before performing any commands.**
## 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
wget -O mkv13.patch https://gitlab.prometheus.systems/firefish/firefish/-/raw/develop/docs/mkv13.patch
wget -O mkv13_restore.patch https://gitlab.prometheus.systems/firefish/firefish/-/raw/develop/docs/mkv13_restore.patch
git apply mkv13.patch mkv13_restore.patch
cd packages/backend
LINE_NUM="$(pnpm typeorm migration:show -d ormconfig.js | grep -n activeEmailValidation1657346559800 | cut -d ':' -f 1)"
NUM_MIGRATIONS="$(pnpm typeorm migration:show -d ormconfig.js | tail -n+"$LINE_NUM" | grep '\[X\]' | wc -l)"
for i in $(seq 1 $NUM_MIGRATIONS); do pnpm typeorm migration:revert -d ormconfig.js; done
cd ../../
git remote set-url origin https://gitlab.prometheus.systems/firefish/firefish.git
git fetch origin
git stash push
rm -rf fluent-emojis misskey-assets
git switch main # or beta or develop
git pull --ff
wget -O renote_muting.patch https://gitlab.prometheus.systems/firefish/firefish/-/raw/develop/docs/renote_muting.patch
git apply renote_muting.patch
pnpm install
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:
```sql
ALTER TABLE "meta" ADD COLUMN "disableLocalTimeline" boolean DEFAULT false;
ALTER TABLE "meta" ADD COLUMN "disableGlobalTimeline" boolean DEFAULT false;
ALTER TABLE "meta" ADD COLUMN "localDriveCapacityMb" integer DEFAULT 512;
ALTER TABLE "meta" ADD COLUMN "remoteDriveCapacityMb" integer DEFAULT 128;
ALTER TABLE "user" ADD COLUMN "isSilenced" boolean DEFAULT false;
ALTER TABLE "user" ADD COLUMN "isAdmin" boolean DEFAULT false;
ALTER TABLE "user" ADD COLUMN "isModerator" boolean DEFAULT false;
ALTER TABLE "user" ADD COLUMN "remoteDriveCapacityMb" integer DEFAULT 128;
ALTER TABLE "user" ADD COLUMN "driveCapacityOverrideMb" integer DEFAULT 128;
ALTER TABLE "instance" ADD COLUMN "caughtAt" date;
ALTER TABLE "instance" ADD COLUMN "latestRequestSentAt" date;
ALTER TABLE "instance" ADD COLUMN "latestStatus" character varying(512);
ALTER TABLE "instance" ADD COLUMN "lastCommunicatedAt" date;
```
then quit with `\q`, and restart Firefish.
Note: Ignore errors of `column "xxx" of relation "xxx" already exists`.
If no other errors happened, your Firefish is ready to launch!
## Misskey v12.119 and before
```sh
git remote set-url origin https://gitlab.prometheus.systems/firefish/firefish.git
git fetch
git checkout main # or beta or develop
git pull --ff
NODE_ENV=production pnpm run migrate
# build using prefered method
```
## FoundKey
```sh
wget -O fk.patch https://gitlab.prometheus.systems/firefish/firefish/-/raw/develop/docs/fk.patch
git apply fk.patch
cd packages/backend
LINE_NUM="$(npx typeorm migration:show -d ormconfig.js | grep -n uniformThemecolor1652859567549 | cut -d ':' -f 1)"
NUM_MIGRATIONS="$(npx typeorm migration:show -d ormconfig.js | tail -n+"$LINE_NUM" | grep '\[X\]' | wc -l)"
for i in $(seq 1 $NUM_MIGRATIONS); do
npx typeorm migration:revert -d ormconfig.js
done
git remote set-url origin https://gitlab.prometheus.systems/firefish/firefish.git
git fetch
git checkout main # or beta or develop
git pull --ff
NODE_ENV=production pnpm run migrate
# build using prefered method
```
## Reverse
You ***cannot*** migrate back to Misskey from Firefish due to re-hashing passwords on signin with argon2. You can migrate from Calckey to FoundKey, although this is not recommended due to FoundKey being end-of-life, and may have some problems with alt-text.

45
docs/mkv13.patch Normal file
View file

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

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) {}

13
firefish.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>

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 = "Firefish 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 = "firefish-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 = "firefish";
}];
initialScript = ''
CREATE USER firefish WITH PASSWORD 'firefish';
ALTER USER firefish WITH SUPERUSER;
GRANT ALL ON DATABASE firefish TO firefish;
'';
listen_addresses = "127.0.0.1";
port = 5432;
};
redis = {
enable = true;
bind = "127.0.0.1";
port = 6379;
};
};
};
};
};
};
};
}

View file

@ -2,69 +2,98 @@
* Gulp tasks * Gulp tasks
*/ */
const fs = require('fs'); const fs = require("fs");
const gulp = require('gulp'); const gulp = require("gulp");
const replace = require('gulp-replace'); const replace = require("gulp-replace");
const terser = require('gulp-terser'); const terser = require("gulp-terser");
const cssnano = require('gulp-cssnano'); const cssnano = require("gulp-cssnano");
const locales = require('./locales'); const locales = require("./locales");
const meta = require('./package.json'); const meta = require("./package.json");
gulp.task('copy:backend:views', () => gulp.task("copy:backend:views", () =>
gulp.src('./packages/backend/src/server/web/views/**/*').pipe(gulp.dest('./packages/backend/built/server/web/views')) gulp
.src("./packages/backend/src/server/web/views/**/*")
.pipe(gulp.dest("./packages/backend/built/server/web/views")),
); );
gulp.task('copy:backend:custom', () => gulp.task("copy:backend:custom", () =>
gulp.src('./custom/assets/*').pipe(gulp.dest('./packages/backend/assets/')) gulp
.src("./custom/assets/**/*")
.pipe(gulp.dest("./packages/backend/assets/")),
); );
gulp.task('copy:client:fonts', () => gulp.task("copy:client:fonts", () =>
gulp.src('./packages/client/node_modules/three/examples/fonts/**/*').pipe(gulp.dest('./built/_client_dist_/fonts/')) gulp
.src("./packages/client/node_modules/three/examples/fonts/**/*")
.pipe(gulp.dest("./built/_client_dist_/fonts/")),
); );
gulp.task('copy:client:phosphor', () => gulp.task("copy:client:locales", (cb) => {
gulp.src('./node_modules/phosphor-icons/src/fonts/*').pipe(gulp.dest('./built/_client_dist_/phosphor/')) fs.mkdirSync("./built/_client_dist_/locales", { recursive: true });
);
gulp.task('copy:client:locales', cb => { const v = { _version_: meta.version };
fs.mkdirSync('./built/_client_dist_/locales', { recursive: true });
const v = { '_version_': meta.version };
for (const [lang, locale] of Object.entries(locales)) { for (const [lang, locale] of Object.entries(locales)) {
fs.writeFileSync(`./built/_client_dist_/locales/${lang}.${meta.version}.json`, JSON.stringify({ ...locale, ...v }), 'utf-8'); fs.writeFileSync(
`./built/_client_dist_/locales/${lang}.${meta.version}.json`,
JSON.stringify({ ...locale, ...v }),
"utf-8",
);
} }
cb(); cb();
}); });
gulp.task("build:backend:script", () => {
gulp.task('build:backend:script', () => { return gulp
return gulp.src(['./packages/backend/src/server/web/boot.js', './packages/backend/src/server/web/bios.js', './packages/backend/src/server/web/cli.js']) .src([
.pipe(replace('LANGS', JSON.stringify(Object.keys(locales)))) "./packages/backend/src/server/web/boot.js",
.pipe(terser({ "./packages/backend/src/server/web/bios.js",
toplevel: true "./packages/backend/src/server/web/cli.js",
})) ])
.pipe(gulp.dest('./packages/backend/built/server/web/')); .pipe(replace("LANGS", JSON.stringify(Object.keys(locales))))
.pipe(
terser({
toplevel: true,
}),
)
.pipe(gulp.dest("./packages/backend/built/server/web/"));
}); });
gulp.task('build:backend:style', () => { gulp.task("build:backend:style", () => {
return gulp.src(['./packages/backend/src/server/web/style.css', './packages/backend/src/server/web/bios.css', './packages/backend/src/server/web/cli.css']) return gulp
.pipe(cssnano({ .src([
zindex: false "./packages/backend/src/server/web/style.css",
})) "./packages/backend/src/server/web/bios.css",
.pipe(gulp.dest('./packages/backend/built/server/web/')); "./packages/backend/src/server/web/cli.css",
])
.pipe(
cssnano({
zindex: false,
}),
)
.pipe(gulp.dest("./packages/backend/built/server/web/"));
}); });
gulp.task('build', gulp.parallel( gulp.task(
'copy:client:locales', 'copy:backend:views', 'copy:backend:custom', 'build:backend:script', 'build:backend:style', 'copy:client:fonts', 'copy:client:phosphor' "build",
)); gulp.parallel(
"copy:client:locales",
"copy:backend:views",
"copy:backend:custom",
"build:backend:script",
"build:backend:style",
"copy:client:fonts",
),
);
gulp.task('default', gulp.task('build')); gulp.task("default", gulp.task("build"));
gulp.task('watch', () => { gulp.task("watch", () => {
gulp.watch([ gulp.watch(
'./packages/*/src/**/*', ["./packages/*/src/**/*"],
], { ignoreInitial: false }, gulp.task('build')); { ignoreInitial: false },
gulp.task("build"),
);
}); });

View file

@ -1,18 +1,28 @@
name: Bug Report name: 🐛 Bug Report
about: File a bug report about: File a bug report
title: "[Bug]: " title: "[Bug]: "
blank_issues_enabled: true
contact_links:
- name: 💁 Support Matrix
url: https://matrix.to/#/%23firefish:matrix.fedibird.com
about: Having trouble with deployment? Ask the support chat.
- name: 🔒 Resposible Disclosure
url: https://gitlab.prometheus.systems/firefish/firefish/src/branch/develop/SECURITY.md
about: Found a security vulnerability? Please disclose it responsibly.
body: body:
- type: markdown - type: markdown
attributes: attributes:
value: | value: |
Thanks for taking the time to fill out this bug report! 💖 Thanks for taking the time to fill out this bug report!
💁 Having trouble with deployment? [Ask the support chat.](https://matrix.to/#/%23firefish:matrix.fedibird.com)
🔒 Found a security vulnerability? [Please disclose it responsibly.](https://gitlab.prometheus.systems/firefish/firefish/src/branch/develop/SECURITY.md)
🤝 By submitting this issue, you agree to follow our [Contribution Guidelines.](https://gitlab.prometheus.systems/firefish/firefish/src/branch/develop/CONTRIBUTING.md)
- type: textarea - type: textarea
id: what-happened id: what-happened
attributes: attributes:
label: What happened? label: What happened?
description: Please give us a brief description of what happened. description: Please give us a brief description of what happened.
placeholder: Tell us what you see! placeholder: Tell us what you see!
value: "A bug happened!"
validations: validations:
required: true required: true
- type: textarea - type: textarea
@ -21,31 +31,41 @@ body:
label: What did you expect to happen? label: What did you expect to happen?
description: Please give us a brief description of what you expected to happen. description: Please give us a brief description of what you expected to happen.
placeholder: Tell us what you wish happened! placeholder: Tell us what you wish happened!
value: "Instead of x, y should happen instead!"
validations: validations:
required: true required: true
- type: input - type: input
id: version id: version
attributes: attributes:
label: Version label: Version
description: What version of calckey is your instance running? You can find this by clicking your instance's logo at the bottom left and then clicking instance information. description: What version of firefish is your instance running? You can find this by clicking your instance's logo at the bottom left and then clicking instance information.
placeholder: Calckey Version 13.0.4 placeholder: v13.1.4.1
validations: validations:
required: true required: true
- type: input - type: input
id: instance id: instance
attributes: attributes:
label: Instance label: Instance
description: What instance of calckey are you using? description: What instance of firefish are you using?
placeholder: stop.voring.me placeholder: firefish.social
validations: validations:
required: false required: false
- type: dropdown - type: dropdown
id: browsers id: issue-type
attributes: attributes:
label: What browser are you using? label: What type of issue is this?
description: If this happens on your device and has to do with the user interface, it's client-side. If this happens on either with the API or the backend, or you got a server-side error in the client, it's server-side.
multiple: false multiple: false
options: options:
- Client-side
- Server-side
- Other (Please Specify)
- type: dropdown
id: browsers
attributes:
label: What browser are you using? (Client-side issues only)
multiple: false
options:
- N/A
- Firefox - Firefox
- Chrome - Chrome
- Brave - Brave
@ -54,6 +74,50 @@ body:
- Safari - Safari
- Microsoft Edge - Microsoft Edge
- Other (Please Specify) - Other (Please Specify)
- type: dropdown
id: device
attributes:
label: What operating system are you using? (Client-side issues only)
multiple: false
options:
- N/A
- Windows
- MacOS
- Linux
- Android
- iOS
- Other (Please Specify)
- type: dropdown
id: deplotment-method
attributes:
label: How do you deploy Firefish on your server? (Server-side issues only)
multiple: false
options:
- N/A
- Manual
- Ubuntu Install Script
- Docker Compose
- Docker Prebuilt Image
- Helm Chart
- YunoHost
- AUR Package
- Other (Please Specify)
- type: dropdown
id: operating-system
attributes:
label: What operating system are you using? (Server-side issues only)
multiple: false
options:
- N/A
- Ubuntu >= 22.04
- Ubuntu < 22.04
- Debian
- Arch
- RHEL (CentOS/AlmaLinux/Rocky Linux)
- FreeBSD
- OpenBSD
- Android
- Other (Please Specify)
- type: textarea - type: textarea
id: logs id: logs
attributes: attributes:
@ -64,7 +128,9 @@ body:
id: terms id: terms
attributes: attributes:
label: Contribution Guidelines label: Contribution Guidelines
description: By submitting this issue, you agree to follow our [Contribution Guidelines](https://codeberg.org/calckey/calckey/src/branch/develop/CONTRIBUTING.md) description: By submitting this issue, you agree to follow our [Contribution Guidelines](https://gitlab.prometheus.systems/firefish/firefish/src/branch/develop/CONTRIBUTING.md)
options: options:
- label: I agree to follow this project's Contribution Guidelines - label: I agree to follow this project's Contribution Guidelines
required: true required: true
- label: I have searched the issue tracker for similar issues, and this is not a duplicate.
required: true

View file

@ -1,18 +1,28 @@
name: Feature Request name: Feature Request
about: Request a Feature about: Request a Feature
title: "[Feature]: " title: "[Feature]: "
blank_issues_enabled: true
contact_links:
- name: 💁 Support Matrix
url: https://matrix.to/#/%23firefish:matrix.fedibird.com
about: Having trouble with deployment? Ask the support chat.
- name: 🔒 Resposible Disclosure
url: https://gitlab.prometheus.systems/firefish/firefish/src/branch/develop/SECURITY.md
about: Found a security vulnerability? Please disclose it responsibly.
body: body:
- type: markdown - type: markdown
attributes: attributes:
value: | value: |
Thanks for taking the time to fill out this feature request! 💖 Thanks for taking the time to fill out this feature request!
💁 Having trouble with deployment? [Ask the support chat.](https://matrix.to/#/%23firefish:matrix.fedibird.com)
🔒 Found a security vulnerability? [Please disclose it responsibly.](https://gitlab.prometheus.systems/firefish/firefish/src/branch/develop/SECURITY.md)
🤝 By submitting this issue, you agree to follow our [Contribution Guidelines.](https://gitlab.prometheus.systems/firefish/firefish/src/branch/develop/CONTRIBUTING.md)
- type: textarea - type: textarea
id: what-feature id: what-feature
attributes: attributes:
label: What feature would you like implemented? label: What feature would you like implemented?
description: Please give us a brief description of what you'd like. description: Please give us a brief description of what you'd like.
placeholder: Tell us what you want! placeholder: Tell us what you want!
value: "x feature would be great!"
validations: validations:
required: true required: true
- type: textarea - type: textarea
@ -21,50 +31,31 @@ body:
label: Why should we add this feature? label: Why should we add this feature?
description: Please give us a brief description of why your feature is important. description: Please give us a brief description of why your feature is important.
placeholder: Tell us why you want this feature! placeholder: Tell us why you want this feature!
value: "x feature is super useful because y!"
validations: validations:
required: true required: true
- type: input - type: input
id: version id: version
attributes: attributes:
label: Version label: Version
description: What version of calckey is your instance running? You can find this by clicking your instance's logo at the bottom left and then clicking instance information. description: What version of firefish is your instance running? You can find this by clicking your instance's logo at the bottom left and then clicking instance information.
placeholder: Calckey Version 13.0.4 placeholder: Firefish Version 13.1.4.1
validations: validations:
required: true required: true
- type: input - type: input
id: instance id: instance
attributes: attributes:
label: Instance label: Instance
description: What instance of calckey are you using? description: What instance of firefish are you using?
placeholder: stop.voring.me placeholder: firefish.social
validations: validations:
required: false required: false
- type: dropdown
id: browsers
attributes:
label: What browser are you using?
multiple: false
options:
- Firefox
- Chrome
- Brave
- Librewolf
- Chromium
- Safari
- Microsoft Edge
- Other (Please Specify)
- type: textarea
id: logs
attributes:
label: Relevant log output
description: Please copy and paste any relevant log output. You can find your log by inspecting the page, and going to the "console" tab. This will be automatically formatted into code, so no need for backticks.
render: shell
- type: checkboxes - type: checkboxes
id: terms id: terms
attributes: attributes:
label: Contribution Guidelines label: Contribution Guidelines
description: By submitting this issue, you agree to follow our [Contribution Guidelines](https://codeberg.org/calckey/calckey/src/branch/develop/CONTRIBUTING.md) description: By submitting this issue, you agree to follow our [Contribution Guidelines](https://gitlab.prometheus.systems/firefish/firefish/src/branch/develop/CONTRIBUTING.md)
options: options:
- label: I agree to follow this project's Contribution Guidelines - label: I agree to follow this project's Contribution Guidelines
required: true required: true
- label: I have searched the issue tracker for similar requests, and this is not a duplicate.
required: true

View file

@ -1,45 +0,0 @@
# Running a Calckey instance 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 instance 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

@ -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: "لقد انتهت عملية تنصيب Firefish. الرجاء إنشاء حساب إداري."
done: "تمّ" done: "تمّ"
processing: "المعالجة جارية" processing: "المعالجة جارية"
preview: "معاينة" preview: "معاينة"
@ -372,7 +371,7 @@ exploreFediverse: "استكشف الفديفرس"
popularTags: "الوسوم الرائجة" popularTags: "الوسوم الرائجة"
userList: "القوائم" userList: "القوائم"
about: "عن" about: "عن"
aboutMisskey: "عن Misskey" aboutFirefish: "عن Firefish"
administrator: "المدير" administrator: "المدير"
token: "الرمز المميز" token: "الرمز المميز"
twoStepAuthentication: "الإستيثاق بعاملَيْن" twoStepAuthentication: "الإستيثاق بعاملَيْن"
@ -856,7 +855,7 @@ _registry:
keys: "المفاتيح" keys: "المفاتيح"
domain: "النّطاق" domain: "النّطاق"
createKey: "أنشئ مفتاحًا" createKey: "أنشئ مفتاحًا"
_aboutMisskey: _aboutFirefish:
about: "ميسكي هو برمجية مفتوحة المصدر يطورها syuilo منذ 2014." about: "ميسكي هو برمجية مفتوحة المصدر يطورها syuilo منذ 2014."
contributors: "المساهمون الرئيسيون" contributors: "المساهمون الرئيسيون"
allContributors: "كل المساهمين" allContributors: "كل المساهمين"
@ -1028,7 +1027,7 @@ _time:
hour: "سا" hour: "سا"
day: "ي" day: "ي"
_tutorial: _tutorial:
title: "How to use Calckey" title: "How to use Firefish"
step1_1: "Welcome!" step1_1: "Welcome!"
step1_2: "Let's get you set up. You'll be up and running in no time!" step1_2: "Let's get you set up. You'll be up and running in no time!"
step2_1: "First, please fill out your profile." step2_1: "First, please fill out your profile."
@ -1045,13 +1044,13 @@ _tutorial:
step5_6: "The Social {icon} timeline is where you can see posts from friends of your followers." 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." 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_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_2: "Well, you didn't just join Firefish. 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_3: "Each server works in different ways, and not all servers run Firefish. 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!" step6_4: "Now go, explore, and have fun!"
_2fa: _2fa:
alreadyRegistered: "سجلت سلفًا جهازًا للاستيثاق بعاملين." alreadyRegistered: "سجلت سلفًا جهازًا للاستيثاق بعاملين."
registerDevice: "سجّل جهازًا جديدًا" registerTOTP: "سجّل جهازًا جديدًا"
registerKey: "تسجيل مفتاح أمان جديد" registerSecurityKey: "تسجيل مفتاح أمان جديد"
step1: "أولًا ثبّت تطبيق استيثاق على جهازك (مثل {a} و{b})." step1: "أولًا ثبّت تطبيق استيثاق على جهازك (مثل {a} و{b})."
step2: "امسح رمز الاستجابة السريعة الموجد على الشاشة." step2: "امسح رمز الاستجابة السريعة الموجد على الشاشة."
step3: "أدخل الرمز الموجود في تطبيقك لإكمال التثبيت." step3: "أدخل الرمز الموجود في تطبيقك لإكمال التثبيت."
@ -1180,7 +1179,6 @@ _profile:
youCanIncludeHashtags: "يمكنك أيضًا إضافة وسوم إلى سيرتك التعريفية." youCanIncludeHashtags: "يمكنك أيضًا إضافة وسوم إلى سيرتك التعريفية."
metadata: "معلومات إضافية" metadata: "معلومات إضافية"
metadataEdit: "عدّل المعلومات الإضافية" metadataEdit: "عدّل المعلومات الإضافية"
metadataDescription: "يُمكنك عرض 4 حقول معلومات في ملفك الشخصي"
metadataLabel: "التسمية" metadataLabel: "التسمية"
metadataContent: "المحتوى" metadataContent: "المحتوى"
changeAvatar: "غيّر الصورة الرمزية" changeAvatar: "غيّر الصورة الرمزية"

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: "Firefish এর ইন্সটলেশন সম্পন্ন হয়েছে!দয়া করে অ্যাডমিন ইউজার তৈরি করুন।"
done: "সম্পন্ন" done: "সম্পন্ন"
processing: "প্রক্রিয়াধীন..." processing: "প্রক্রিয়াধীন"
preview: "পূর্বরূপ দেখুন" preview: "পূর্বরূপ দেখুন"
default: "পূর্বনির্ধারিত" default: "পূর্বনির্ধারিত"
noCustomEmojis: "কোন ইমোজি নাই" noCustomEmojis: "কোন ইমোজি নাই"
@ -377,7 +376,7 @@ exploreFediverse: "Fediverse ঘুরে দেখুন"
popularTags: "জনপ্রিয় ট্যাগগুলি" popularTags: "জনপ্রিয় ট্যাগগুলি"
userList: "লিস্ট" userList: "লিস্ট"
about: "আপনার সম্পর্কে" about: "আপনার সম্পর্কে"
aboutMisskey: "Misskey সম্পর্কে" aboutFirefish: "Firefish সম্পর্কে"
administrator: "প্রশাসক" administrator: "প্রশাসক"
token: "টোকেন" token: "টোকেন"
twoStepAuthentication: "২-ধাপ প্রমাণীকরণ" twoStepAuthentication: "২-ধাপ প্রমাণীকরণ"
@ -644,7 +643,7 @@ createNew: "নতুন"
optional: "প্রয়োজনীয় নয়" optional: "প্রয়োজনীয় নয়"
createNewClip: "নতুন ক্লিপ তৈরি করুন" createNewClip: "নতুন ক্লিপ তৈরি করুন"
public: "সর্বজনীন" public: "সর্বজনীন"
i18nInfo: "Calckey স্বেচ্ছাসেবকদের দ্বারা বিভিন্ন ভাষায় অনুবাদ করা হচ্ছে। আপনি {link} এ গিয়ে অনুবাদে সহযোগিতা করতে পারেন।" i18nInfo: "Firefish স্বেচ্ছাসেবকদের দ্বারা বিভিন্ন ভাষায় অনুবাদ করা হচ্ছে। আপনি {link} এ গিয়ে অনুবাদে সহযোগিতা করতে পারেন।"
manageAccessTokens: "অ্যাক্সেস টোকেন পরিচালনা করুন" manageAccessTokens: "অ্যাক্সেস টোকেন পরিচালনা করুন"
accountInfo: "অ্যাকাউন্টের তথ্য" accountInfo: "অ্যাকাউন্টের তথ্য"
notesCount: "নোটের সংখ্যা" notesCount: "নোটের সংখ্যা"
@ -695,7 +694,7 @@ onlineUsersCount: "{n} জন ব্যাবহারকারী অনলা
nUsers: "{n} জন ব্যাবহারকারী" nUsers: "{n} জন ব্যাবহারকারী"
nNotes: "{n} টি নোট" nNotes: "{n} টি নোট"
sendErrorReports: "ক্রুটি প্রতিবেদন পাঠান" sendErrorReports: "ক্রুটি প্রতিবেদন পাঠান"
sendErrorReportsDescription: "চালু থাকলে, বিস্তারিত ত্রুটির তথ্য Misskey-এর সাথে শেয়ার করা হয়। যা সফ্টওয়্যারটির গুণমান উন্নত করতে সাহায্য করে। ত্রুটির তথ্যের মধ্যে রয়েছে OS সংস্করণ, ব্রাউজারের ধরন, কর্মের ইতিহাস ইত্যাদি।" sendErrorReportsDescription: "চালু থাকলে, বিস্তারিত ত্রুটির তথ্য Firefish-এর সাথে শেয়ার করা হয়। যা সফ্টওয়্যারটির গুণমান উন্নত করতে সাহায্য করে। ত্রুটির তথ্যের মধ্যে রয়েছে OS সংস্করণ, ব্রাউজারের ধরন, কর্মের ইতিহাস ইত্যাদি।"
myTheme: "আমার থিম" myTheme: "আমার থিম"
backgroundColor: "পটভূমির রং" backgroundColor: "পটভূমির রং"
accentColor: "এক্সেন্টের রং" accentColor: "এক্সেন্টের রং"
@ -786,7 +785,7 @@ hashtags: "হ্যাশট্যাগ"
troubleshooting: "ট্রাবলশুটিং" troubleshooting: "ট্রাবলশুটিং"
useBlurEffect: "UI তে ব্লার ইফেক্ট ব্যাবহার করুন" useBlurEffect: "UI তে ব্লার ইফেক্ট ব্যাবহার করুন"
learnMore: "আরও জানুন" learnMore: "আরও জানুন"
misskeyUpdated: "Misskey আপডেট করা হয়েছে!" misskeyUpdated: "Firefish আপডেট করা হয়েছে!"
whatIsNew: "পরিবর্তনগুলি দেখান" whatIsNew: "পরিবর্তনগুলি দেখান"
translate: "অনুবাদ" translate: "অনুবাদ"
translatedFrom: "{x} হতে অনুবাদ করা" translatedFrom: "{x} হতে অনুবাদ করা"
@ -897,13 +896,13 @@ _registry:
keys: "কী - সমূহ" keys: "কী - সমূহ"
domain: "ডোমেন" domain: "ডোমেন"
createKey: "কী বানান" createKey: "কী বানান"
_aboutMisskey: _aboutFirefish:
about: "Misskey, একটি ওপেন সোর্স সফ্টওয়্যার যা 2014 সাল থেকে syuilo তৈরি করছেন।" about: "Misskey, একটি ওপেন সোর্স সফ্টওয়্যার যা 2014 সাল থেকে syuilo তৈরি করছেন।"
contributors: "প্রধান কন্ট্রিবিউটারগণ" contributors: "প্রধান কন্ট্রিবিউটারগণ"
allContributors: "সকল কন্ট্রিবিউটারগণ" allContributors: "সকল কন্ট্রিবিউটারগণ"
source: "সোর্স কোড" source: "সোর্স কোড"
translation: "Misskey অনুবাদ করুন" translation: "Firefish অনুবাদ করুন"
donate: "Misskey তে দান করুন" donate: "Firefish তে দান করুন"
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 একটি মার্কআপ ভাষা যা Firefish-এর মধ্যে বিভিন্ন জায়গায় ব্যবহার করা যেতে পারে। এখানে আপনি MFM-এর সিনট্যাক্সগুলির একটি তালিকা দেখতে পারবেন।"
dummy: "মিসকি ফেডিভার্সের বিশ্বকে প্রসারিত করে" dummy: "মিসকি ফেডিভার্সের বিশ্বকে প্রসারিত করে"
mention: "উল্লেখ" mention: "উল্লেখ"
mentionDescription: "@ চিহ্ন + ব্যবহারকারীর নাম একটি নির্দিষ্ট ব্যবহারকারীকে নির্দেশ করতে ব্যবহার করা যায়।" mentionDescription: "@ চিহ্ন + ব্যবহারকারীর নাম একটি নির্দিষ্ট ব্যবহারকারীকে নির্দেশ করতে ব্যবহার করা যায়।"
@ -1109,7 +1108,7 @@ _time:
hour: "ঘণ্টা" hour: "ঘণ্টা"
day: "দিন" day: "দিন"
_tutorial: _tutorial:
title: "How to use Calckey" title: "How to use Firefish"
step1_1: "Welcome!" step1_1: "Welcome!"
step1_2: "Let's get you set up. You'll be up and running in no time!" step1_2: "Let's get you set up. You'll be up and running in no time!"
step2_1: "First, please fill out your profile." step2_1: "First, please fill out your profile."
@ -1126,13 +1125,13 @@ _tutorial:
step5_6: "The Social {icon} timeline is where you can see posts from friends of your followers." 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." 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_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_2: "Well, you didn't just join Firefish. 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_3: "Each server works in different ways, and not all servers run Firefish. 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!" step6_4: "Now go, explore, and have fun!"
_2fa: _2fa:
alreadyRegistered: "আপনি ইতিমধ্যে একটি 2-ফ্যাক্টর অথেনটিকেশন ডিভাইস নিবন্ধন করেছেন৷" alreadyRegistered: "আপনি ইতিমধ্যে একটি 2-ফ্যাক্টর অথেনটিকেশন ডিভাইস নিবন্ধন করেছেন৷"
registerDevice: "নতুন ডিভাইস নিবন্ধন করুন" registerTOTP: "নতুন ডিভাইস নিবন্ধন করুন"
registerKey: "সিকিউরিটি কী নিবন্ধন করুন" registerSecurityKey: "সিকিউরিটি কী নিবন্ধন করুন"
step1: "প্রথমে, আপনার ডিভাইসে {a} বা {b} এর মতো একটি অথেনটিকেশন অ্যাপ ইনস্টল করুন৷" step1: "প্রথমে, আপনার ডিভাইসে {a} বা {b} এর মতো একটি অথেনটিকেশন অ্যাপ ইনস্টল করুন৷"
step2: "এরপরে, অ্যাপের সাহায্যে প্রদর্শিত QR কোডটি স্ক্যান করুন।" step2: "এরপরে, অ্যাপের সাহায্যে প্রদর্শিত QR কোডটি স্ক্যান করুন।"
step2Url: "ডেস্কটপ অ্যাপে, নিম্নলিখিত URL লিখুন:" step2Url: "ডেস্কটপ অ্যাপে, নিম্নলিখিত URL লিখুন:"
@ -1269,7 +1268,7 @@ _profile:
youCanIncludeHashtags: "হ্যাশট্যাগ অন্তর্ভুক্ত করা যেতে পারে।" youCanIncludeHashtags: "হ্যাশট্যাগ অন্তর্ভুক্ত করা যেতে পারে।"
metadata: "অতিরিক্ত তথ্য" metadata: "অতিরিক্ত তথ্য"
metadataEdit: "অতিরিক্ত তথ্য সম্পাদনা করুন" metadataEdit: "অতিরিক্ত তথ্য সম্পাদনা করুন"
metadataDescription: "আপনি আপনার প্রোফাইলে একটি টেবিল হিসাবে চারটি অতিরিক্ত তথ্য দেখাতে পারেন।" metadataDescription: "আপনি আপনার প্রোফাইলে একটি টেবিল হিসাবে চারটি অতিরিক্ত তথ্য দেখাতে পারেন।. আপনি আপনার প্রোফাইলে লিঙ্কটি যাচাই করতে {rel} এর সাথে একটি {a} ট্যাগ বা {l} ট্যাগ যোগ করতে পারেন!"
metadataLabel: "লেবেল" metadataLabel: "লেবেল"
metadataContent: "বিষয়বস্তু" metadataContent: "বিষয়বস্তু"
changeAvatar: "অ্যাভাটার পরিবর্তন করুন" changeAvatar: "অ্যাভাটার পরিবর্তন করুন"

1
locales/bul_BG.yml Normal file
View file

@ -0,0 +1 @@
{}

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! Firefish 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í Firefish 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 Firefish 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" aboutFirefish: "O Firefish"
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"
@ -630,7 +646,7 @@ _registry:
keys: "Klíče" keys: "Klíče"
domain: "Doména" domain: "Doména"
createKey: "Vytvořit klíč" createKey: "Vytvořit klíč"
_aboutMisskey: _aboutFirefish:
allContributors: "Všichni přispěvatelé" allContributors: "Všichni přispěvatelé"
source: "Zdrojový kód" source: "Zdrojový kód"
_mfm: _mfm:
@ -682,8 +698,8 @@ _time:
minute: "Minut" minute: "Minut"
hour: "Hodin" hour: "Hodin"
_2fa: _2fa:
registerDevice: "Přidat zařízení" registerTOTP: "Přidat zařízení"
registerKey: "Přidat bezpečnostní klíč" registerSecurityKey: "Přidat bezpečnostní klíč"
_weekday: _weekday:
sunday: "Neděle" sunday: "Neděle"
monday: "Pondělí" monday: "Pondělí"
@ -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 dne {date} {time}'
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,236 @@
---
_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 den {date} {time}'
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! Firefish 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
Firefish'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
muteAndBlock: Mutes og blokeringer
mutedUsers: Mutede brugere
newer: nyere
older: ældre
silencedInstances: Nedtonede servere
clearQueue: Ryd kø
clearQueueConfirmTitle: Er du sikker på, at du ønsker at rydde køen?
clearCachedFiles: Ryd cache
clearCachedFilesConfirm: Er du sikker på, at du ønsker at slette alle cachede eksterne
filer?
blockedInstances: Blokerede servere
blockedInstancesDescription: Listen af navne på servere, du ønsker at blokere. Servere
på listen vil ikke længere kunne kommunikere med denne server.
hiddenTags: Skjulte hashtags
clearQueueConfirmText: De indlæg i denne kø, der ikke allerede er leveret, vil ikke
blive federeret. Denne operation er almindeligvis ikke påkrævet.
jumpToPrevious: Spring til tidligere
cw: Advarsel om indhold

File diff suppressed because it is too large Load diff

View file

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

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

970
locales/fi.yml Normal file
View file

@ -0,0 +1,970 @@
_lang_: "Suomi"
username: Käyttäjänimi
fetchingAsApObject: Hae Fedeversestä
gotIt: Selvä!
cancel: Peruuta
enterUsername: Anna käyttäjänimi
renotedBy: Buustannut {user}
noNotes: Ei lähetyksiä
noNotifications: Ei ilmoituksia
instance: Instanssi
settings: Asetukset
basicSettings: Perusasetukset
otherSettings: Muut asetukset
openInWindow: Avaa ikkunaan
profile: Profiili
timeline: Aikajana
noAccountDescription: Käyttäjä ei ole vielä kirjoittanut kuvaustaan vielä.
login: Kirjaudu sisään
loggingIn: Kirjautuu sisään
logout: Kirjaudu ulos
uploading: Tallentaa ylös...
save: Tallenna
favorites: Kirjanmerkit
unfavorite: Poista kirjanmerkeistä
favorited: Lisätty kirjanmerkkeihin.
alreadyFavorited: Lisätty jo kirjanmerkkeihin.
cantFavorite: Ei voitu lisätä kirjanmerkkeihin.
pin: Kiinnitä profiiliin
unpin: Irroita profiilista
delete: Poista
forgotPassword: Unohtunut salasana
search: Etsi
notifications: Ilmoitukset
password: Salasana
ok: OK
noThankYou: Ei kiitos
signup: Rekisteröidy
users: Käyttäjät
addUser: Lisää käyttäjä
addInstance: Lisää instanssi
favorite: Lisää kirjanmerkkeihin
copyContent: Kopioi sisältö
deleteAndEdit: Poista ja muokkaa
copyLink: Kopioi linkki
makeFollowManuallyApprove: Seuraajapyyntö vaatii hyväksymistä
follow: Seuraa
pinned: Kiinnitä profiiliin
followRequestPending: Seuraajapyyntö odottaa
you: Sinä
unrenote: Peruuta buustaus
reaction: Reaktiot
reactionSettingDescription2: Vedä uudelleenjärjestelläksesi, napsauta poistaaksesi,
paina "+" lisätäksesi.
attachCancel: Poista liite
enterFileName: Anna tiedostonimi
mute: Hiljennä
unmute: Poista hiljennys
headlineMisskey: Avoimen lähdekoodin, hajautettu sosiaalisen median alusta, joka on
ikuisesti ilmainen! 🚀
monthAndDay: '{day}/{month}'
deleteAndEditConfirm: Oletko varma, että haluat poistaa tämän lähetyksen ja muokata
sitä? Menetät kaikki reaktiot, buustaukset ja vastaukset lähetyksestäsi.
addToList: Lisää listaan
sendMessage: Lähetä viesti
reply: Vastaa
loadMore: Lataa enemmän
showMore: Näytä enemmän
receiveFollowRequest: Seuraajapyyntö vastaanotettu
followRequestAccepted: Seuraajapyyntö hyväksytty
mentions: Maininnat
importAndExport: Tuo/Vie Tietosisältö
import: Tuo
export: Vie
files: Tiedostot
download: Lataa
unfollowConfirm: Oletko varma, ettet halua seurata enää käyttäjää {name}?
noLists: Sinulla ei ole listoja
note: Viesti
notes: Viestit
following: Seuraa
createList: Luo lista
manageLists: Hallitse listoja
error: Virhe
somethingHappened: On tapahtunut virhe
retry: Yritä uudelleen
pageLoadError: Virhe ladattaessa sivua.
serverIsDead: Tämä palvelin ei vastaa. Yritä hetken kuluttua uudelleen.
youShouldUpgradeClient: Nähdäksesi tämän sivun, virkistä päivittääksesi asiakasohjelmasi.
privacy: Tietosuoja
defaultNoteVisibility: Oletusnäkyvyys
followRequest: Seuraajapyyntö
followRequests: Seuraajapyynnöt
unfollow: Poista seuraaminen
enterEmoji: Syötä emoji
renote: Buustaa
renoted: Buustattu.
cantRenote: Tätä lähetystä ei voi buustata.
cantReRenote: Buustausta ei voi buustata.
quote: Lainaus
pinnedNote: Lukittu lähetys
clickToShow: Napsauta nähdäksesi
sensitive: Herkkää sisältöä (NSFW)
add: Lisää
enableEmojiReactions: Ota käyttöön emoji-reaktiot
showEmojisInReactionNotifications: Näytä emojit reaktioilmoituksissa
reactionSetting: Reaktiot näytettäväksi reaktiovalitsimessa
rememberNoteVisibility: Muista lähetyksen näkyvyysasetukset
markAsSensitive: Merkitse herkäksi sisällöksi (NSFW)
unmarkAsSensitive: Poista merkintä herkkää sisältöä (NSFW)
renoteMute: Hiljennä buustit
renoteUnmute: Poista buustien hiljennys
block: Estä
unblock: Poista esto
unsuspend: Poista keskeytys
suspend: Keskeytys
blockConfirm: Oletko varma, että haluat estää tämän tilin?
unblockConfirm: Oletko varma, että haluat poistaa tämän tilin eston?
selectAntenna: Valitse antenni
selectWidget: Valitse vimpain
editWidgets: Muokkaa vimpaimia
editWidgetsExit: Valmis
emoji: Emoji
emojis: Emojit
emojiName: Emojin nimi
emojiUrl: Emojin URL-linkki
cacheRemoteFiles: Taltioi etätiedostot välimuistiin
flagAsBot: Merkitse tili botiksi
flagAsBotDescription: Ota tämä vaihtoehto käyttöön, jos tätä tiliä ohjaa ohjelma.
Jos se on käytössä, se toimii lippuna muille kehittäjille, jotta estetään loputtomat
vuorovaikutusketjut muiden bottien kanssa ja säädetään Firefishn sisäiset järjestelmät
käsittelemään tätä tiliä botina.
flagAsCat: Oletko kissa? 🐱
flagAsCatDescription: Saat kissan korvat ja puhut kuin kissa!
flagSpeakAsCat: Puhu kuin kissa
flagShowTimelineReplies: Näytä vastaukset aikajanalla
addAccount: Lisää tili
loginFailed: Kirjautuminen epäonnistui
showOnRemote: Katsele etäinstanssilla
general: Yleistä
accountMoved: 'Käyttäjä on muuttanut uuteen tiliin:'
wallpaper: Taustakuva
setWallpaper: Aseta taustakuva
searchWith: 'Etsi: {q}'
youHaveNoLists: Sinulla ei ole listoja
followConfirm: Oletko varma, että haluat seurata käyttäjää {name}?
host: Isäntä
selectUser: Valitse käyttäjä
annotation: Kommentit
registeredAt: Rekisteröity
latestRequestReceivedAt: Viimeisin pyyntö vastaanotettu
latestRequestSentAt: Viimeisin pyyntö lähetetty
storageUsage: Tallennustilan käyttö
charts: Kaaviot
stopActivityDelivery: Lopeta toimintojen lähettäminen
blockThisInstance: Estä tämä instanssi
operations: Toiminnot
metadata: Metatieto
monitor: Seuranta
jobQueue: Työjono
cpuAndMemory: Prosessori ja muisti
network: Verkko
disk: Levy
clearCachedFiles: Tyhjennä välimuisti
clearCachedFilesConfirm: Oletko varma, että haluat tyhjentää kaikki välimuistiin tallennetut
etätiedostot?
blockedInstances: Estetyt instanssit
hiddenTags: Piilotetut asiatunnisteet
mention: Maininta
copyUsername: Kopioi käyttäjänimi
searchUser: Etsi käyttäjää
showLess: Sulje
youGotNewFollower: seurasi sinua
directNotes: Yksityisviestit
driveFileDeleteConfirm: Oletko varma, että haluat poistaa tiedoston " {name}"? Se
poistetaan kaikista viesteistä, jotka sisältävät sen liitetiedostona.
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
kun tuonti valmistuu.
lists: Listat
followers: Seuraajat
followsYou: Seuraa sinua
pageLoadErrorDescription: Tämä yleensä johtuu verkkovirheistä tai selaimen välimuistista.
Kokeile tyhjentämällä välimuisti ja yritä sitten hetken kuluttua uudelleen.
enterListName: Anna listalle nimi
instanceInfo: Instanssin tiedot
clearQueue: Tyhjennä jono
suspendConfirm: Oletko varma, että haluat keskeyttää tämän tilin?
unsuspendConfirm: Oletko varma, että haluat poistaa tämän tilin keskeytyksen?
selectList: Valitse lista
customEmojis: Kustomoitu Emoji
addEmoji: Lisää
settingGuide: Suositellut asetukset
cacheRemoteFilesDescription: Kun tämä asetus ei ole käytössä, etätiedostot on ladattu
suoraan etäinstanssilta. Asetuksen poistaminen käytöstä vähentää tallennustilan
käyttöä, mutta lisää verkkoliikennettä kun pienoiskuvat eivät muodostu.
flagSpeakAsCatDescription: Lähetyksesi nyanifioidaan, kun olet kissatilassa
flagShowTimelineRepliesDescription: Näyttää käyttäjien vastaukset muiden käyttäjien
lähetyksiin aikajanalla, jos se on päällä.
autoAcceptFollowed: Automaattisesti hyväksy seuraamispyynnöt käyttäjiltä, joita seuraat
perHour: Tunnissa
removeWallpaper: Poista taustakuva
recipient: Vastaanottaja(t)
federation: Federaatio
software: Ohjelmisto
proxyAccount: Proxy-tili
proxyAccountDescription: Välitystili (Proxy-tili) on tili, joka toimii käyttäjien
etäseuraajana tietyin edellytyksin. Kun käyttäjä esimerkiksi lisää etäkäyttäjän
luetteloon, etäkäyttäjän toimintaa ei toimiteta instanssiin, jos yksikään paikallinen
käyttäjä ei seuraa kyseistä käyttäjää, joten välitystili seuraa sen sijaan.
latestStatus: Viimeisin tila
selectInstance: Valitse instanssi
instances: Instanssit
perDay: Päivässä
version: Versio
statistics: Tilastot
clearQueueConfirmTitle: Oletko varma, että haluat tyhjentää jonon?
introMisskey: Tervetuloa! Firefish on avoimen lähdekoodin, hajautettu sosiaalisen median
alusta, joka on ikuisesti ilmainen! 🚀
clearQueueConfirmText: Mitkään välittämättömät lähetykset, jotka ovat jonossa, eivät
federoidu. Yleensä tätä toimintoa ei tarvita.
blockedInstancesDescription: Lista instanssien isäntänimistä, jotka haluat estää.
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: Firefish -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
aboutFirefish: Tietoja Firefishstä
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
Firefishn 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 Firefishta 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\
\ Firefishn kanssa ongelman ilmetessä, mikä auttaa parantamaan Firefishn laatua.\n\
Näihin tietoihin sisältyy esimerkiksi käyttöjärjestelmäversio, käyttämäsi selain,\
\ toimintasi Firefishssä 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 klo {date} {time}'
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: Firefish 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.

File diff suppressed because it is too large Load diff

17
locales/gl.yml Normal file
View file

@ -0,0 +1,17 @@
_lang_: Inglés
introMisskey: Benvida! Firefish é unha plataforma de medios sociais de código aberto,
descentralizada e gratuíta para sempre!🚀
monthAndDay: '{day}/{month}'
notifications: Notificacións
password: Contrasinal
forgotPassword: Esquecín o contrasinal
gotIt: Vale!
cancel: Cancelar
noThankYou: Non, grazas
headlineMisskey: Plataforma de medios sociais de código aberto e descentralizada,
gratuíta para sempre!🚀
search: Buscar
searchPlaceholder: Buscar en Firefish
username: Identificador
fetchingAsApObject: Descargando desde o Fediverso
ok: OK

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! Firefish 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 Firefish 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 Firefish 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" aboutFirefish: "Tentang Firefish"
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\
\ Firefish."
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: "Firefish 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 Firefish ketika masalah terjadi, hal ini untuk membantu kualitas Firefish.\
\ 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: "Firefish 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"
@ -901,14 +988,16 @@ _registry:
keys: "Kunci" keys: "Kunci"
domain: "Domain" domain: "Domain"
createKey: "Buat kunci" createKey: "Buat kunci"
_aboutMisskey: _aboutFirefish:
about: "Misskey adalah perangkat lunak sumber terbuka yang sedang dikembangkan oleh syuilo sejak 2014." about: "Firefish 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 Firefish"
donate: "Donasi ke Misskey" donate: "Donasi ke Firefish"
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 Firefish-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: "Firefish 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 Firefish"
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 Firefish."
step7_2: "Jika kamu ingin mempelajari lebih lanjut tentang Firefish, 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" registerTOTP: "Daftarkan perangkat baru"
registerKey: "Daftarkan kunci keamanan baru" registerSecurityKey: "Daftarkan kunci keamanan baru"
step1: "Pertama, pasang aplikasi otentikasi (seperti {a} atau {b}) di perangkat 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. Anda dapat menambahkan tag {a} atau tag {l} dengan {rel} untuk memverifikasi tautan di profil Anda!"
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 = [] const languages = [];
let languages_custom = [] const languages_custom = [];
const merge = (...args) => args.reduce((a, c) => ({
...a,
...c,
...Object.entries(a)
.filter(([k]) => c && typeof c[k] === 'object')
.reduce((a, [k, v]) => (a[k] = merge(v, c[k]), a), {})
}), {});
const merge = (...args) =>
args.reduce(
(a, c) => ({
...a,
...c,
...Object.entries(a)
.filter(([k]) => c && typeof c[k] === "object")
.reduce((a, [k, v]) => ((a[k] = merge(v, c[k])), a), {}),
}),
{},
);
fs.readdirSync(__dirname).forEach((file) => { fs.readdirSync(__dirname).forEach((file) => {
if (file.includes('.yml')){ if (file.includes(".yml")) {
file = file.slice(0, file.indexOf('.')) file = file.slice(0, file.indexOf("."));
languages.push(file); languages.push(file);
} }
}) });
fs.readdirSync(__dirname + '/../custom/locales').forEach((file) => { fs.readdirSync(__dirname + "/../custom/locales").forEach((file) => {
if (file.includes('.yml')){ if (file.includes(".yml")) {
file = file.slice(0, file.indexOf('.')) file = file.slice(0, file.indexOf("."));
languages_custom.push(file); languages_custom.push(file);
} }
}) });
const primaries = { const primaries = {
'en': 'US', en: "US",
'ja': 'JP', ja: "JP",
'zh': 'CN', zh: "CN",
}; };
// 何故か文字列にバックスペース文字が混入することがあり、YAMLが壊れるので取り除く // 何故か文字列にバックスペース文字が混入することがあり、YAMLが壊れるので取り除く
const clean = (text) => text.replace(new RegExp(String.fromCodePoint(0x08), 'g'), ''); const clean = (text) =>
text.replace(new RegExp(String.fromCodePoint(0x08), "g"), "");
const locales = languages.reduce((a, c) => (a[c] = yaml.load(clean(fs.readFileSync(`${__dirname}/${c}.yml`, 'utf-8'))) || {}, a), {}); const locales = languages.reduce(
const locales_custom = languages_custom.reduce((a, c) => (a[c] = yaml.load(clean(fs.readFileSync(`${__dirname}/../custom/locales/${c}.yml`, 'utf-8'))) || {}, a), {}); (a, c) => (
Object.assign(locales, locales_custom) (a[c] =
yaml.load(clean(fs.readFileSync(`${__dirname}/${c}.yml`, "utf-8"))) ||
{}),
a
),
{},
);
const locales_custom = languages_custom.reduce(
(a, c) => (
(a[c] =
yaml.load(
clean(
fs.readFileSync(`${__dirname}/../custom/locales/${c}.yml`, "utf-8"),
),
) || {}),
a
),
{},
);
Object.assign(locales, locales_custom);
module.exports = Object.entries(locales) module.exports = Object.entries(locales).reduce(
.reduce((a, [k ,v]) => (a[k] = (() => { (a, [k, v]) => (
const [lang] = k.split('-'); (a[k] = (() => {
switch (k) { const [lang] = k.split("-");
case 'ja-JP': return v; switch (k) {
case 'ja-KS': case "ja-JP":
case 'en-US': return merge(locales['ja-JP'], v); return v;
default: return merge( case "ja-KS":
locales['ja-JP'], case "en-US":
locales['en-US'], return merge(locales["ja-JP"], v);
locales[`${lang}-${primaries[lang]}`] || {}, default:
v return merge(
); locales["ja-JP"],
} locales["en-US"],
})(), a), {}); locales[`${lang}-${primaries[lang]}`] || {},
v,
);
}
})()),
a
),
{},
);

View file

@ -1,7 +1,10 @@
---
_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@! Firefish è un servizio di microblogging decentralizzato,
libero e aperto. \nScrivi \"note\" per condividere ciò che sta succedendo adesso
o per dire a tutti qualcosa di te. 📡\nGrazie alla funzione \"reazioni\" puoi anche
mandare reazioni rapide alle note delle altre persone del Fediverso. 👍\nEsplora
un nuovo mondo! 🚀"
monthAndDay: "{day}/{month}" monthAndDay: "{day}/{month}"
search: "Cerca" search: "Cerca"
notifications: "Notifiche" notifications: "Notifiche"
@ -10,7 +13,7 @@ password: "Password"
forgotPassword: "Hai dimenticato la tua password?" forgotPassword: "Hai dimenticato la tua password?"
fetchingAsApObject: "Recuperando dal Fediverso" fetchingAsApObject: "Recuperando dal Fediverso"
ok: "OK" ok: "OK"
gotIt: "Ho capito" gotIt: "Ho capito!"
cancel: "Annulla" cancel: "Annulla"
enterUsername: "Inserisci un nome utente" enterUsername: "Inserisci un nome utente"
renotedBy: "Rinotato da {user}" renotedBy: "Rinotato da {user}"
@ -30,9 +33,9 @@ logout: "Esci"
signup: "Iscriviti" signup: "Iscriviti"
uploading: "Caricamento..." uploading: "Caricamento..."
save: "Salva" save: "Salva"
users: "Utente" users: "Utenti"
addUser: "Aggiungi utente" addUser: "Aggiungi utente"
favorite: "Preferiti" favorite: "Aggiungi ai preferiti"
favorites: "Preferiti" favorites: "Preferiti"
unfavorite: "Rimuovi nota dai preferiti" unfavorite: "Rimuovi nota dai preferiti"
favorited: "Aggiunta ai tuoi preferiti." favorited: "Aggiunta ai tuoi preferiti."
@ -44,7 +47,8 @@ copyContent: "Copia il contenuto"
copyLink: "Copia il link" copyLink: "Copia il link"
delete: "Elimina" delete: "Elimina"
deleteAndEdit: "Elimina e modifica" deleteAndEdit: "Elimina e modifica"
deleteAndEditConfirm: "Vuoi davvero cancellare questa nota e scriverla di nuovo? Verrano eliminate anche tutte le reazioni, Rinote e risposte collegate." deleteAndEditConfirm: "Vuoi davvero cancellare questa nota e scriverla di nuovo? Verrano
eliminate anche tutte le reazioni, Rinote e risposte collegate."
addToList: "Aggiungi alla lista" addToList: "Aggiungi alla lista"
sendMessage: "Invia messaggio" sendMessage: "Invia messaggio"
copyUsername: "Copia nome utente" copyUsername: "Copia nome utente"
@ -54,7 +58,7 @@ loadMore: "Mostra di più"
showMore: "Mostra di più" showMore: "Mostra di più"
showLess: "Chiudi" showLess: "Chiudi"
youGotNewFollower: "Ha iniziato a seguirti" youGotNewFollower: "Ha iniziato a seguirti"
receiveFollowRequest: "Hai ricevuto una richiesta di follow." receiveFollowRequest: "Hai ricevuto una richiesta di follow"
followRequestAccepted: "Richiesta di follow accettata" followRequestAccepted: "Richiesta di follow accettata"
mention: "Menzioni" mention: "Menzioni"
mentions: "Menzioni" mentions: "Menzioni"
@ -64,9 +68,11 @@ import: "Importa"
export: "Esporta" export: "Esporta"
files: "Allegati" files: "Allegati"
download: "Scarica" download: "Scarica"
driveFileDeleteConfirm: "Vuoi davvero eliminare il file「{name}? Anche gli allegati verranno eliminati." driveFileDeleteConfirm: "Vuoi davvero eliminare il file「{name}? Anche gli allegati
verranno eliminati."
unfollowConfirm: "Vuoi davvero smettere di seguire {name}?" unfollowConfirm: "Vuoi davvero smettere di seguire {name}?"
exportRequested: "Hai richiesto un'esportazione, e potrebbe volerci tempo. Quando sarà compiuta, il file verrà aggiunto direttamente al Drive." exportRequested: "Hai richiesto un'esportazione, e potrebbe volerci tempo. Quando
sarà compiuta, il file verrà aggiunto direttamente al Drive."
importRequested: "Hai richiesto un'importazione. Può volerci tempo. " importRequested: "Hai richiesto un'importazione. Può volerci tempo. "
lists: "Liste" lists: "Liste"
noLists: "Nessuna lista" noLists: "Nessuna lista"
@ -81,9 +87,11 @@ error: "Errore"
somethingHappened: "Si è verificato un problema" somethingHappened: "Si è verificato un problema"
retry: "Riprova" retry: "Riprova"
pageLoadError: "Caricamento pagina non riuscito. " pageLoadError: "Caricamento pagina non riuscito. "
pageLoadErrorDescription: "Questo viene normalmente causato dalla rete o dalla cache del browser. Si prega di pulire la cache, o di attendere e riprovare più tardi." pageLoadErrorDescription: "Questo viene normalmente causato dalla rete o dalla cache
del browser. Si prega di pulire la cache, o di attendere e riprovare più tardi."
serverIsDead: "Il server non risponde. Si prega di attendere e riprovare più tardi." serverIsDead: "Il server non risponde. Si prega di attendere e riprovare più tardi."
youShouldUpgradeClient: "Per visualizzare la pagina è necessario aggiornare il client alla nuova versione e ricaricare." youShouldUpgradeClient: "Per visualizzare la pagina è necessario aggiornare il client
alla nuova versione e ricaricare."
enterListName: "Nome della lista" enterListName: "Nome della lista"
privacy: "Privacy" privacy: "Privacy"
makeFollowManuallyApprove: "Richiedi di approvare i follower manualmente" makeFollowManuallyApprove: "Richiedi di approvare i follower manualmente"
@ -108,7 +116,8 @@ sensitive: "Contenuto sensibile"
add: "Aggiungi" add: "Aggiungi"
reaction: "Reazione" reaction: "Reazione"
reactionSetting: "Reazioni visualizzate sul pannello" reactionSetting: "Reazioni visualizzate sul pannello"
reactionSettingDescription2: "Trascina per riorganizzare, clicca per cancellare, usa il pulsante \"+\" per aggiungere." reactionSettingDescription2: "Trascina per riorganizzare, clicca per cancellare, usa
il pulsante \"+\" per aggiungere."
rememberNoteVisibility: "Ricordare le impostazioni di visibilità delle note" rememberNoteVisibility: "Ricordare le impostazioni di visibilità delle note"
attachCancel: "Rimuovi allegato" attachCancel: "Rimuovi allegato"
markAsSensitive: "Segna come sensibile" markAsSensitive: "Segna come sensibile"
@ -137,12 +146,19 @@ emojiUrl: "URL dell'emoji"
addEmoji: "Aggiungi un emoji" addEmoji: "Aggiungi un emoji"
settingGuide: "Configurazione suggerita" settingGuide: "Configurazione suggerita"
cacheRemoteFiles: "Memorizzazione nella cache dei file remoti" cacheRemoteFiles: "Memorizzazione nella cache dei file remoti"
cacheRemoteFilesDescription: "Disabilitando questa opzione, i file remoti verranno linkati direttamente senza essere memorizzati nella cache. Sarà possibile risparmiare spazio di archiviazione sul server, ma il traffico aumenterà in quanto non verranno generate anteprime." cacheRemoteFilesDescription: "Disabilitando questa opzione, i file remoti verranno
linkati direttamente senza essere memorizzati nella cache. Sarà possibile risparmiare
spazio di archiviazione sul server, ma il traffico aumenterà in quanto non verranno
generate anteprime."
flagAsBot: "Io sono un robot" flagAsBot: "Io sono un robot"
flagAsBotDescription: "Se l'account esegue principalmente operazioni automatiche, attiva quest'opzione. Quando attivata, opera come un segnalatore per gli altri sviluppatori allo scopo di prevenire catene 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 Firefish perché trattino questo account come un bot."
flagAsCat: "Io sono un gatto" flagAsCat: "Io sono un gatto"
flagAsCatDescription: "Abilita l'opzione \"Io sono un gatto\" per l'account." flagAsCatDescription: "Abilita l'opzione \"Io sono un gatto\" per l'account."
autoAcceptFollowed: "Accetta automaticamente le richieste di follow da utenti che già segui" autoAcceptFollowed: "Accetta automaticamente le richieste di follow da utenti che
già segui"
addAccount: "Aggiungi account" addAccount: "Aggiungi account"
loginFailed: "Accesso non riuscito" loginFailed: "Accesso non riuscito"
showOnRemote: "Sfoglia sull'istanza remota" showOnRemote: "Sfoglia sull'istanza remota"
@ -154,7 +170,10 @@ searchWith: "Cerca: {q}"
youHaveNoLists: "Non hai ancora creato nessuna lista" youHaveNoLists: "Non hai ancora creato nessuna lista"
followConfirm: "Sei sicur@ di voler seguire {name}?" followConfirm: "Sei sicur@ di voler seguire {name}?"
proxyAccount: "Account proxy" proxyAccount: "Account proxy"
proxyAccountDescription: "Un account proxy è un account che funziona da follower remoto per gli utenti sotto certe condizioni. Ad esempio, quando un utente aggiunge un utente remoto alla lista, dato che se nessun utente locale segue quell'utente le sue attività non verranno distribuite, al suo posto lo seguirà un account proxy." proxyAccountDescription: "Un account proxy è un account che funziona da follower remoto
per gli utenti sotto certe condizioni. Ad esempio, quando un utente aggiunge un
utente remoto alla lista, dato che se nessun utente locale segue quell'utente le
sue attività non verranno distribuite, al suo posto lo seguirà un account proxy."
host: "Server remoto" host: "Server remoto"
selectUser: "Seleziona utente" selectUser: "Seleziona utente"
recipient: "Destinatario" recipient: "Destinatario"
@ -175,7 +194,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"
@ -185,11 +203,13 @@ instanceInfo: "Informazioni sull'istanza"
statistics: "Statistiche" statistics: "Statistiche"
clearQueue: "Svuota coda" clearQueue: "Svuota coda"
clearQueueConfirmTitle: "Vuoi davvero svuotare la coda?" clearQueueConfirmTitle: "Vuoi davvero svuotare la coda?"
clearQueueConfirmText: "Le note ancora non distribuite non verranno rilasciate. Solitamente, non è necessario eseguire questa operazione." clearQueueConfirmText: "Le note ancora non distribuite non verranno rilasciate. Solitamente,
non è necessario eseguire questa operazione."
clearCachedFiles: "Svuota cache" clearCachedFiles: "Svuota cache"
clearCachedFilesConfirm: "Vuoi davvero svuotare la cache da tutti i file remoti?" clearCachedFilesConfirm: "Vuoi davvero svuotare la cache da tutti i file remoti?"
blockedInstances: "Istanze bloccate" blockedInstances: "Istanze bloccate"
blockedInstancesDescription: "Elenca le istanze che vuoi bloccare, una per riga. Esse non potranno più interagire con la tua istanza." blockedInstancesDescription: "Elenca le istanze che vuoi bloccare, una per riga. Esse
non potranno più interagire con la tua istanza."
muteAndBlock: "Silenziati / Bloccati" muteAndBlock: "Silenziati / Bloccati"
mutedUsers: "Account silenziati" mutedUsers: "Account silenziati"
blockedUsers: "Account bloccati" blockedUsers: "Account bloccati"
@ -197,7 +217,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 Firefish è finita! Si prega di creare un account amministratore."
done: "Fine" done: "Fine"
processing: "In elaborazione" processing: "In elaborazione"
preview: "Anteprima" preview: "Anteprima"
@ -251,7 +271,8 @@ agreeTo: "Sono d'accordo con {0}"
tos: "Termini di servizio" tos: "Termini di servizio"
start: "Inizia!" start: "Inizia!"
home: "Home" home: "Home"
remoteUserCaution: "Può darsi che le informazioni siano incomplete perché questo è un utente remoto." remoteUserCaution: "Può darsi che le informazioni siano incomplete perché questo è
un utente remoto."
activity: "Attività" activity: "Attività"
images: "Immagini" images: "Immagini"
birthday: "Compleanno" birthday: "Compleanno"
@ -284,7 +305,8 @@ unableToDelete: "Eliminazione impossibile"
inputNewFileName: "Inserisci nome del nuovo file" inputNewFileName: "Inserisci nome del nuovo file"
inputNewDescription: "Inserisci una nuova descrizione" inputNewDescription: "Inserisci una nuova descrizione"
inputNewFolderName: "Inserisci nome della nuova cartella" inputNewFolderName: "Inserisci nome della nuova cartella"
circularReferenceFolder: "La cartella di destinazione è una sottocartella della cartella che vuoi spostare." circularReferenceFolder: "La cartella di destinazione è una sottocartella della cartella
che vuoi spostare."
hasChildFilesOrFolders: "Impossibile eliminare la cartella perché non è vuota" hasChildFilesOrFolders: "Impossibile eliminare la cartella perché non è vuota"
copyUrl: "Copia URL" copyUrl: "Copia URL"
rename: "Modifica nome" rename: "Modifica nome"
@ -318,7 +340,8 @@ connectService: "Connessione"
disconnectService: "Disconnessione " disconnectService: "Disconnessione "
enableLocalTimeline: "Abilita Timeline locale" enableLocalTimeline: "Abilita Timeline locale"
enableGlobalTimeline: "Abilita Timeline federata" enableGlobalTimeline: "Abilita Timeline federata"
disablingTimelinesInfo: "Anche se disabiliti queste timeline, gli amministratori e i moderatori potranno sempre accederci." disablingTimelinesInfo: "Anche se disabiliti queste timeline, gli amministratori e
i moderatori potranno sempre accederci."
registration: "Iscriviti" registration: "Iscriviti"
enableRegistration: "Permettere nuove registrazioni" enableRegistration: "Permettere nuove registrazioni"
invite: "Invita" invite: "Invita"
@ -330,9 +353,11 @@ bannerUrl: "URL dell'immagine d'intestazione"
backgroundImageUrl: "URL dello sfondo" backgroundImageUrl: "URL dello sfondo"
basicInfo: "Informazioni fondamentali" basicInfo: "Informazioni fondamentali"
pinnedUsers: "Utenti in evidenza" pinnedUsers: "Utenti in evidenza"
pinnedUsersDescription: "Elenca gli/le utenti che vuoi fissare in cima alla pagina \"Esplora\", un@ per riga." pinnedUsersDescription: "Elenca gli/le utenti che vuoi fissare in cima alla pagina
\"Esplora\", un@ per riga."
pinnedPages: "Pagine in evidenza" pinnedPages: "Pagine in evidenza"
pinnedPagesDescription: "Specifica il percorso delle pagine che vuoi fissare in cima alla pagina dell'istanza. Una pagina per riga." pinnedPagesDescription: "Specifica il percorso delle pagine che vuoi fissare in cima
alla pagina dell'istanza. Una pagina per riga."
pinnedClipId: "ID della clip in evidenza" pinnedClipId: "ID della clip in evidenza"
pinnedNotes: "Nota fissata" pinnedNotes: "Nota fissata"
hcaptcha: "hCaptcha" hcaptcha: "hCaptcha"
@ -343,14 +368,17 @@ recaptcha: "reCAPTCHA"
enableRecaptcha: "Abilita reCAPTCHA" enableRecaptcha: "Abilita reCAPTCHA"
recaptchaSiteKey: "Chiave del sito" recaptchaSiteKey: "Chiave del sito"
recaptchaSecretKey: "Chiave segreta" recaptchaSecretKey: "Chiave segreta"
avoidMultiCaptchaConfirm: "Utilizzare diversi Captcha può causare interferenze. Vuoi disattivare l'altro Captcha? Puoi lasciare diversi Captcha attivi premendo \"Cancella\"." avoidMultiCaptchaConfirm: "Utilizzare diversi Captcha può causare interferenze. Vuoi
disattivare l'altro Captcha? Puoi lasciare diversi Captcha attivi premendo \"Cancella\"\
."
antennas: "Antenne" antennas: "Antenne"
manageAntennas: "Gestore delle antenne" manageAntennas: "Gestore delle antenne"
name: "Nome" name: "Nome"
antennaSource: "Fonte dell'antenna" antennaSource: "Fonte dell'antenna"
antennaKeywords: "Parole chiavi da ricevere" antennaKeywords: "Parole chiavi da ricevere"
antennaExcludeKeywords: "Parole chiavi da escludere" antennaExcludeKeywords: "Parole chiavi da escludere"
antennaKeywordsDescription: "Separare con uno spazio indica la condizione \"E\". Separare con un'interruzzione riga indica la condizione \"O\"." antennaKeywordsDescription: "Separare con uno spazio indica la condizione \"E\". Separare
con un'interruzzione riga indica la condizione \"O\"."
notifyAntenna: "Invia notifiche delle nuove note" notifyAntenna: "Invia notifiche delle nuove note"
withFileAntenna: "Solo note con file in allegato" withFileAntenna: "Solo note con file in allegato"
enableServiceworker: "Abilita ServiceWorker" enableServiceworker: "Abilita ServiceWorker"
@ -373,7 +401,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" aboutFirefish: "Informazioni di Firefish"
administrator: "Amministratore" administrator: "Amministratore"
token: "Token" token: "Token"
twoStepAuthentication: "Autenticazione a due fattori" twoStepAuthentication: "Autenticazione a due fattori"
@ -478,19 +506,26 @@ showFeaturedNotesInTimeline: "Mostrare le note di tendenza nella tua timeline"
objectStorage: "Stoccaggio oggetti" objectStorage: "Stoccaggio oggetti"
useObjectStorage: "Utilizza stoccaggio oggetti" useObjectStorage: "Utilizza stoccaggio oggetti"
objectStorageBaseUrl: "Base URL" objectStorageBaseUrl: "Base URL"
objectStorageBaseUrlDesc: "URL di riferimento. In caso di utilizzo di proxy o CDN l'URL è 'https://<bucket>.s3.amazonaws.com' per S3, 'https://storage.googleapis.com/<bucket>' per GCS eccetera. " objectStorageBaseUrlDesc: "URL di riferimento. In caso di utilizzo di proxy o CDN
l'URL è 'https://<bucket>.s3.amazonaws.com' per S3, 'https://storage.googleapis.com/<bucket>'
per GCS eccetera. "
objectStorageBucket: "Bucket" objectStorageBucket: "Bucket"
objectStorageBucketDesc: "Specificare il nome del bucket utilizzato dal provider." objectStorageBucketDesc: "Specificare il nome del bucket utilizzato dal provider."
objectStoragePrefix: "Prefix" objectStoragePrefix: "Prefix"
objectStoragePrefixDesc: "I file saranno conservati sotto la directory di questo prefisso." objectStoragePrefixDesc: "I file saranno conservati sotto la directory di questo prefisso."
objectStorageEndpoint: "Endpoint" objectStorageEndpoint: "Endpoint"
objectStorageEndpointDesc: "Lasciare vuoto se si sta utilizzando S3. In caso contrario si prega di specificare l'endpoint come '<host>' oppure '<host>:<port>' a seconda del servizio utilizzato." objectStorageEndpointDesc: "Lasciare vuoto se si sta utilizzando S3. In caso contrario
si prega di specificare l'endpoint come '<host>' oppure '<host>:<port>' a seconda
del servizio utilizzato."
objectStorageRegion: "Region" objectStorageRegion: "Region"
objectStorageRegionDesc: "Specificate una regione, quale 'xx-east-1'. Se il servizio in utilizzo non distingue tra regioni, lasciate vuoto o inserite 'us-east-1'." objectStorageRegionDesc: "Specificate una regione, quale 'xx-east-1'. Se il servizio
in utilizzo non distingue tra regioni, lasciate vuoto o inserite 'us-east-1'."
objectStorageUseSSL: "Usare SSL" objectStorageUseSSL: "Usare SSL"
objectStorageUseSSLDesc: "Disabilita quest'opzione se non utilizzi HTTPS per le connessioni API." objectStorageUseSSLDesc: "Disabilita quest'opzione se non utilizzi HTTPS per le connessioni
API."
objectStorageUseProxy: "Usa proxy" objectStorageUseProxy: "Usa proxy"
objectStorageUseProxyDesc: "Disabilita quest'opzione se non usi proxy per la connessione API." objectStorageUseProxyDesc: "Disabilita quest'opzione se non usi proxy per la connessione
API."
objectStorageSetPublicRead: "Imposta \"visibilità pubblica\" al momento di caricare" objectStorageSetPublicRead: "Imposta \"visibilità pubblica\" al momento di caricare"
serverLogs: "Log del server" serverLogs: "Log del server"
deleteAll: "Cancella cronologia" deleteAll: "Cancella cronologia"
@ -518,7 +553,9 @@ sort: "Ordina per"
ascendingOrder: "Ascendente" ascendingOrder: "Ascendente"
descendingOrder: "Discendente" descendingOrder: "Discendente"
scratchpad: "ScratchPad" scratchpad: "ScratchPad"
scratchpadDescription: "Lo Scratchpad offre un ambiente per esperimenti di AiScript. È possibile scrivere, eseguire e confermare i risultati dell'interazione del codice con Misskey." scratchpadDescription: "Lo Scratchpad offre un ambiente per esperimenti di AiScript.
È possibile scrivere, eseguire e confermare i risultati dell'interazione del codice
con Firefish."
output: "Uscita" output: "Uscita"
script: "Script" script: "Script"
disablePagesScript: "Disabilita AiScript nelle pagine" disablePagesScript: "Disabilita AiScript nelle pagine"
@ -526,11 +563,14 @@ updateRemoteUser: "Aggiornare le informazioni di utente remot@"
deleteAllFiles: "Elimina tutti i file" deleteAllFiles: "Elimina tutti i file"
deleteAllFilesConfirm: "Vuoi davvero eliminare tutti i file?" deleteAllFilesConfirm: "Vuoi davvero eliminare tutti i file?"
removeAllFollowing: "Cancella tutti i follows" removeAllFollowing: "Cancella tutti i follows"
removeAllFollowingDescription: "Cancella tutti i follows del server {host}. Per favore, esegui se, ad esempio, l'istanza non esiste più." removeAllFollowingDescription: "Cancella tutti i follows del server {host}. Per favore,
esegui se, ad esempio, l'istanza non esiste più."
userSuspended: "L'utente è sospes@." userSuspended: "L'utente è sospes@."
userSilenced: "L'utente è silenziat@." userSilenced: "L'utente è silenziat@."
yourAccountSuspendedTitle: "Questo account è sospeso." yourAccountSuspendedTitle: "Questo account è sospeso."
yourAccountSuspendedDescription: "Questo account è stato sospeso a causa di una violazione dei termini di servizio del server. Contattare l'amministrazione per i dettagli. Si prega di non creare un nuovo account." yourAccountSuspendedDescription: "Questo account è stato sospeso a causa di una violazione
dei termini di servizio del server. Contattare l'amministrazione per i dettagli.
Si prega di non creare un nuovo account."
menu: "Menù" menu: "Menù"
divider: "Linea di separazione" divider: "Linea di separazione"
addItem: "Aggiungi elemento" addItem: "Aggiungi elemento"
@ -570,12 +610,14 @@ permission: "Autorizzazioni "
enableAll: "Abilita tutto" enableAll: "Abilita tutto"
disableAll: "Disabilita tutto" disableAll: "Disabilita tutto"
tokenRequested: "Autorizza accesso all'account" tokenRequested: "Autorizza accesso all'account"
pluginTokenRequestedDescription: "Il plugin potrà utilizzare le autorizzazioni impostate qui." pluginTokenRequestedDescription: "Il plugin potrà utilizzare le autorizzazioni impostate
qui."
notificationType: "Tipo di notifiche" notificationType: "Tipo di notifiche"
edit: "Modifica" edit: "Modifica"
emailServer: "Server email" emailServer: "Server email"
enableEmail: "Abilita consegna email" enableEmail: "Abilita consegna email"
emailConfigInfo: "Utilizzato per verificare il tuo indirizzo di posta elettronica e per reimpostare la tua password" emailConfigInfo: "Utilizzato per verificare il tuo indirizzo di posta elettronica
e per reimpostare la tua password"
email: "Email" email: "Email"
emailAddress: "Indirizzo di posta elettronica" emailAddress: "Indirizzo di posta elettronica"
smtpConfig: "Impostazioni del server SMTP" smtpConfig: "Impostazioni del server SMTP"
@ -583,7 +625,8 @@ smtpHost: "Server remoto"
smtpPort: "Porta" smtpPort: "Porta"
smtpUser: "Nome utente" smtpUser: "Nome utente"
smtpPass: "Password" smtpPass: "Password"
emptyToDisableSmtpAuth: "Lasciare il nome utente e la password vuoti per disabilitare la verifica SMTP" emptyToDisableSmtpAuth: "Lasciare il nome utente e la password vuoti per disabilitare
la verifica SMTP"
smtpSecure: "Usare la porta SSL/TLS implicito per le connessioni SMTP" smtpSecure: "Usare la porta SSL/TLS implicito per le connessioni SMTP"
smtpSecureInfo: "Disabilitare quando è attivo STARTTLS." smtpSecureInfo: "Disabilitare quando è attivo STARTTLS."
testEmail: "Testare la consegna di posta elettronica" testEmail: "Testare la consegna di posta elettronica"
@ -603,10 +646,13 @@ create: "Crea"
notificationSetting: "Impostazioni notifiche" notificationSetting: "Impostazioni notifiche"
notificationSettingDesc: "Seleziona il tipo di notifiche da visualizzare." notificationSettingDesc: "Seleziona il tipo di notifiche da visualizzare."
useGlobalSetting: "Usa impostazioni generali" useGlobalSetting: "Usa impostazioni generali"
useGlobalSettingDesc: "Se abilitato, le impostazioni notifiche dell'account verranno utilizzate. Se disabilitato, si possono definire diverse singole impostazioni." useGlobalSettingDesc: "Se abilitato, le impostazioni notifiche dell'account verranno
utilizzate. Se disabilitato, si possono definire diverse singole impostazioni."
other: "Avanzate" other: "Avanzate"
regenerateLoginToken: "Genera di nuovo un token di connessione" regenerateLoginToken: "Genera di nuovo un token di connessione"
regenerateLoginTokenDescription: "Genera un nuovo token di autenticazione. Solitamente questa operazione non è necessaria: quando si genera un nuovo token, tutti i dispositivi vanno disconnessi." regenerateLoginTokenDescription: "Genera un nuovo token di autenticazione. Solitamente
questa operazione non è necessaria: quando si genera un nuovo token, tutti i dispositivi
vanno disconnessi."
setMultipleBySeparatingWithSpace: "È possibile creare multiple voci separate da spazi." setMultipleBySeparatingWithSpace: "È possibile creare multiple voci separate da spazi."
fileIdOrUrl: "ID o URL del file" fileIdOrUrl: "ID o URL del file"
behavior: "Comportamento" behavior: "Comportamento"
@ -614,7 +660,8 @@ sample: "Esempio"
abuseReports: "Segnalazioni" abuseReports: "Segnalazioni"
reportAbuse: "Segnalazioni" reportAbuse: "Segnalazioni"
reportAbuseOf: "Segnala {name}" reportAbuseOf: "Segnala {name}"
fillAbuseReportDescription: "Si prega di spiegare il motivo della segnalazione. Se riguarda una nota precisa, si prega di collegare anche l'URL della nota." fillAbuseReportDescription: "Si prega di spiegare il motivo della segnalazione. Se
riguarda una nota precisa, si prega di collegare anche l'URL della nota."
abuseReported: "La segnalazione è stata inviata. Grazie." abuseReported: "La segnalazione è stata inviata. Grazie."
reporter: "il corrispondente" reporter: "il corrispondente"
reporteeOrigin: "Origine del segnalato" reporteeOrigin: "Origine del segnalato"
@ -624,7 +671,8 @@ abuseMarkAsResolved: "Contrassegna la segnalazione come risolta"
openInNewTab: "Apri in una nuova scheda" openInNewTab: "Apri in una nuova scheda"
openInSideView: "Apri in vista laterale" openInSideView: "Apri in vista laterale"
defaultNavigationBehaviour: "Navigazione preimpostata" defaultNavigationBehaviour: "Navigazione preimpostata"
editTheseSettingsMayBreakAccount: "Modificare queste impostazioni può danneggiare l'account." editTheseSettingsMayBreakAccount: "Modificare queste impostazioni può danneggiare
l'account."
instanceTicker: "Informazioni sull'istanza da cui vengono le note" instanceTicker: "Informazioni sull'istanza da cui vengono le note"
waitingFor: "Aspettando {x}" waitingFor: "Aspettando {x}"
random: "Casuale" random: "Casuale"
@ -636,7 +684,8 @@ createNew: "Crea nuov@"
optional: "Opzionale" optional: "Opzionale"
createNewClip: "Nuova clip" createNewClip: "Nuova clip"
public: "Pubblica" public: "Pubblica"
i18nInfo: "Calckey è tradotto in diverse lingue da volontari. Anche tu puoi contribuire su {link}." i18nInfo: "Firefish è tradotto in diverse lingue da volontari. Anche tu puoi contribuire
su {link}."
manageAccessTokens: "Gestisci token di accesso" manageAccessTokens: "Gestisci token di accesso"
accountInfo: "Informazioni account" accountInfo: "Informazioni account"
notesCount: "Conteggio note" notesCount: "Conteggio note"
@ -655,12 +704,16 @@ no: "No"
driveFilesCount: "Numero di file nel Drive" driveFilesCount: "Numero di file nel Drive"
driveUsage: "Utilizzazione del Drive" driveUsage: "Utilizzazione del Drive"
noCrawle: "Rifiuta l'indicizzazione dai robot." noCrawle: "Rifiuta l'indicizzazione dai robot."
noCrawleDescription: "Richiedi che i motori di ricerca non indicizzino la tua pagina di profilo, le tue note, pagine, ecc." noCrawleDescription: "Richiedi che i motori di ricerca non indicizzino la tua pagina
lockedAccountInfo: "A meno che non imposti la visibilità delle tue note su \"Solo ai follower\", le tue note sono visibili da tutti, anche se hai configurato l'account per confermare manualmente le richieste di follow." di profilo, le tue note, pagine, ecc."
lockedAccountInfo: "A meno che non imposti la visibilità delle tue note su \"Solo
ai follower\", le tue note sono visibili da tutti, anche se hai configurato l'account
per confermare manualmente le richieste di follow."
alwaysMarkSensitive: "Segnare i media come sensibili per impostazione predefinita" alwaysMarkSensitive: "Segnare i media come sensibili per impostazione predefinita"
loadRawImages: "Visualizza le intere immagini allegate invece delle miniature." loadRawImages: "Visualizza le intere immagini allegate invece delle miniature."
disableShowingAnimatedImages: "Disabilita le immagini animate" disableShowingAnimatedImages: "Disabilita le immagini animate"
verificationEmailSent: "Una mail di verifica è stata inviata. Si prega di accedere al collegamento per compiere la verifica." verificationEmailSent: "Una mail di verifica è stata inviata. Si prega di accedere
al collegamento per compiere la verifica."
notSet: "Non impostato" notSet: "Non impostato"
emailVerified: "Il tuo indirizzo email è stato verificato" emailVerified: "Il tuo indirizzo email è stato verificato"
noteFavoritesCount: "Conteggio note tra i preferiti" noteFavoritesCount: "Conteggio note tra i preferiti"
@ -672,13 +725,15 @@ clips: "Clip"
experimentalFeatures: "Funzioni sperimentali" experimentalFeatures: "Funzioni sperimentali"
developer: "Sviluppatore" developer: "Sviluppatore"
makeExplorable: "Account visibile sulla pagina \"Esplora\"" makeExplorable: "Account visibile sulla pagina \"Esplora\""
makeExplorableDescription: "Se disabiliti l'opzione, il tuo account non verrà visualizzato sulla pagina \"Esplora\"." makeExplorableDescription: "Se disabiliti l'opzione, il tuo account non verrà visualizzato
sulla pagina \"Esplora\"."
showGapBetweenNotesInTimeline: "Mostrare un intervallo tra le note sulla timeline" showGapBetweenNotesInTimeline: "Mostrare un intervallo tra le note sulla timeline"
duplicate: "Duplica" duplicate: "Duplica"
left: "Sinistra" left: "Sinistra"
center: "Centro" center: "Centro"
wide: "Largo" wide: "Largo"
reloadToApplySetting: "Le tue preferenze verranno impostate dopo il ricaricamento della pagina. Vuoi ricaricare adesso?" reloadToApplySetting: "Le tue preferenze verranno impostate dopo il ricaricamento
della pagina. Vuoi ricaricare adesso?"
needReloadToApply: "È necessario riavviare per rendere effettive le modifiche." needReloadToApply: "È necessario riavviare per rendere effettive le modifiche."
showTitlebar: "Visualizza la barra del titolo" showTitlebar: "Visualizza la barra del titolo"
clearCache: "Svuota cache" clearCache: "Svuota cache"
@ -686,7 +741,10 @@ onlineUsersCount: "{n} utenti online"
nUsers: "{n} utenti" nUsers: "{n} utenti"
nNotes: "{n}Note" nNotes: "{n}Note"
sendErrorReports: "Invia segnalazioni di errori" sendErrorReports: "Invia segnalazioni di errori"
sendErrorReportsDescription: "Quando abilitato, se si verifica un problema, informazioni dettagliate sugli errori verranno condivise con 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 Firefish 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"
@ -712,7 +770,8 @@ receiveAnnouncementFromInstance: "Ricevi i messaggi informativi dall'istanza"
emailNotification: "Eventi per notifiche via mail" emailNotification: "Eventi per notifiche via mail"
publish: "Pubblico" publish: "Pubblico"
inChannelSearch: "Cerca in canale" inChannelSearch: "Cerca in canale"
useReactionPickerForContextMenu: "Cliccare sul tasto destro per aprire il pannello di reazioni" useReactionPickerForContextMenu: "Cliccare sul tasto destro per aprire il pannello
di reazioni"
typingUsers: "{users} sta(nno) scrivendo" typingUsers: "{users} sta(nno) scrivendo"
jumpToSpecifiedDate: "Vai alla data " jumpToSpecifiedDate: "Vai alla data "
showingPastTimeline: "Stai visualizzando una vecchia timeline" showingPastTimeline: "Stai visualizzando una vecchia timeline"
@ -723,14 +782,17 @@ unlikeConfirm: "Non ti piace più?"
fullView: "Schermo intero" fullView: "Schermo intero"
quitFullView: "Esci dalla modalità a schermo intero" quitFullView: "Esci dalla modalità a schermo intero"
addDescription: "Aggiungi descrizione" addDescription: "Aggiungi descrizione"
userPagePinTip: "Qui puoi appuntare note, premendo \"Fissa sul profilo\" nel menù delle singole note." userPagePinTip: "Qui puoi appuntare note, premendo \"Fissa sul profilo\" nel menù
notSpecifiedMentionWarning: "Sono menzionati account che non vengono inclusi fra i destinatari" delle singole note."
notSpecifiedMentionWarning: "Sono menzionati account che non vengono inclusi fra i
destinatari"
info: "Informazioni" info: "Informazioni"
userInfo: "Informazioni utente" userInfo: "Informazioni utente"
unknown: "Sconosciuto" unknown: "Sconosciuto"
onlineStatus: "Stato di connessione" onlineStatus: "Stato di connessione"
hideOnlineStatus: "Stato invisibile" hideOnlineStatus: "Stato invisibile"
hideOnlineStatusDescription: "Abilitare l'opzione di stato invisibile può guastare la praticità di singole funzioni, come la ricerca." hideOnlineStatusDescription: "Abilitare l'opzione di stato invisibile può guastare
la praticità di singole funzioni, come la ricerca."
online: "Online" online: "Online"
active: "Attiv@" active: "Attiv@"
offline: "Offline" offline: "Offline"
@ -773,12 +835,14 @@ 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: "Firefish è 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}"
accountDeletionInProgress: "La cancellazione dell'account è in corso" accountDeletionInProgress: "La cancellazione dell'account è in corso"
usernameInfo: "Un nome per identificare univocamente il tuo account sul server. È possibile utilizzare caratteri alfanumerici (a~z, A~Z, 0~9) e il trattino basso (_). Non sarà possibile cambiare il nome utente in seguito." usernameInfo: "Un nome per identificare univocamente il tuo account sul server. È
possibile utilizzare caratteri alfanumerici (a~z, A~Z, 0~9) e il trattino basso
(_). Non sarà possibile cambiare il nome utente in seguito."
aiChanMode: "Modalità Ai" aiChanMode: "Modalità Ai"
keepCw: "Mantieni il CW" keepCw: "Mantieni il CW"
resolved: "Risolto" resolved: "Risolto"
@ -802,7 +866,8 @@ leaveGroup: "Esci dal gruppo"
leaveGroupConfirm: "Uscire da「{name}」?" leaveGroupConfirm: "Uscire da「{name}」?"
useDrawerReactionPickerForMobile: "Mostra sul drawer da dispositivo mobile" useDrawerReactionPickerForMobile: "Mostra sul drawer da dispositivo mobile"
welcomeBackWithName: "Bentornato/a, {name}" welcomeBackWithName: "Bentornato/a, {name}"
clickToFinishEmailVerification: "Fai click su [{ok}] per completare la verifica dell'indirizzo email." clickToFinishEmailVerification: "Fai click su [{ok}] per completare la verifica dell'indirizzo
email."
searchByGoogle: "Cerca" searchByGoogle: "Cerca"
indefinitely: "Non scade" indefinitely: "Non scade"
tenMinutes: "10 minuti" tenMinutes: "10 minuti"
@ -830,7 +895,8 @@ _signup:
emailAddressInfo: "Inserisci il tuo indirizzo email. Non verrà reso pubblico." emailAddressInfo: "Inserisci il tuo indirizzo email. Non verrà reso pubblico."
_accountDelete: _accountDelete:
accountDelete: "Cancellazione account" accountDelete: "Cancellazione account"
sendEmail: "Al termine della cancellazione dell'account, verrà inviata una mail all'indirizzo a cui era registrato." sendEmail: "Al termine della cancellazione dell'account, verrà inviata una mail
all'indirizzo a cui era registrato."
requestAccountDelete: "Richiesta di cancellazione account" requestAccountDelete: "Richiesta di cancellazione account"
started: "Il processo di cancellazione è iniziato." started: "Il processo di cancellazione è iniziato."
inProgress: "Cancellazione in corso" inProgress: "Cancellazione in corso"
@ -838,9 +904,13 @@ _ad:
back: "Indietro" back: "Indietro"
reduceFrequencyOfThisAd: "Visualizza questa pubblicità meno spesso" reduceFrequencyOfThisAd: "Visualizza questa pubblicità meno spesso"
_forgotPassword: _forgotPassword:
enterEmail: "Inserisci l'indirizzo di posta elettronica che hai registrato nel tuo profilo. Il collegamento necessario per ripristinare la password verrà inviato a questo indirizzo." enterEmail: "Inserisci l'indirizzo di posta elettronica che hai registrato nel tuo
ifNoEmail: "Se nessun indirizzo e-mail è stato registrato, si prega di contattare l'amministratore·trice dell'istanza." profilo. Il collegamento necessario per ripristinare la password verrà inviato
contactAdmin: "Poiché questa istanza non permette l'utilizzo di una mail, si prega di contattare l'amministratore·trice dell'istanza per poter ripristinare la password." a questo indirizzo."
ifNoEmail: "Se nessun indirizzo e-mail è stato registrato, si prega di contattare
l'amministratore·trice dell'istanza."
contactAdmin: "Poiché questa istanza non permette l'utilizzo di una mail, si prega
di contattare l'amministratore·trice dell'istanza per poter ripristinare la password."
_gallery: _gallery:
my: "Le mie pubblicazioni" my: "Le mie pubblicazioni"
liked: "Pubblicazioni che mi piacciono" liked: "Pubblicazioni che mi piacciono"
@ -853,21 +923,23 @@ _email:
title: "Hai ricevuto una richiesta di follow" title: "Hai ricevuto una richiesta di follow"
_plugin: _plugin:
install: "Installa estensioni" install: "Installa estensioni"
installWarn: "Si prega di installare soltanto estensioni che provengono da fonti affidabili." installWarn: "Si prega di installare soltanto estensioni che provengono da fonti
affidabili."
manage: "Gestisci estensioni" manage: "Gestisci estensioni"
_registry: _registry:
key: "Dati" key: "Dati"
keys: "Dati" keys: "Dati"
domain: "Dominio" domain: "Dominio"
createKey: "Crea chiave" createKey: "Crea chiave"
_aboutMisskey: _aboutFirefish:
about: "Misskey è un software libero e open source, sviluppato da syuilo dal 2014." about: "Misskey è un software libero e open source, sviluppato da syuilo dal 2014."
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 Firefish"
donate: "Sostieni Misskey" donate: "Sostieni Firefish"
morePatrons: "Apprezziamo sinceramente il supporto di tante altre persone. Grazie mille! 🥰" morePatrons: "Apprezziamo sinceramente il supporto di tante altre persone. Grazie
mille! 🥰"
patrons: "Sostenitori" patrons: "Sostenitori"
_nsfw: _nsfw:
respect: "Nascondere i media segnati come sensibli" respect: "Nascondere i media segnati come sensibli"
@ -875,10 +947,12 @@ _nsfw:
force: "Nascondere tutti i media" force: "Nascondere tutti i media"
_mfm: _mfm:
cheatSheet: "Bigliettino MFM" cheatSheet: "Bigliettino MFM"
intro: "MFM è un linguaggio Markdown particolare che si può usare in diverse parti di 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
dummy: "Il Fediverso si espande con Misskey" di Firefish. Qui puoi visualizzare a colpo d'occhio tutta la sintassi MFM utile."
dummy: "Il Fediverso si espande con Firefish"
mention: "Menzioni" mention: "Menzioni"
mentionDescription: "Si può menzionare un utente specifico digitando il suo nome utente subito dopo il segno @." mentionDescription: "Si può menzionare un utente specifico digitando il suo nome
utente subito dopo il segno @."
hashtag: "Hashtag" hashtag: "Hashtag"
url: "URL" url: "URL"
link: "Link" link: "Link"
@ -905,11 +979,14 @@ _mfm:
x4: "Estremamente più grande" x4: "Estremamente più grande"
x4Description: "Mostra il contenuto estremamente più ingrandito." x4Description: "Mostra il contenuto estremamente più ingrandito."
blur: "Sfocatura" blur: "Sfocatura"
blurDescription: "È possibile rendere sfocato il contenuto. Spostando il cursore su di esso tornerà visibile chiaramente." blurDescription: "È possibile rendere sfocato il contenuto. Spostando il cursore
su di esso tornerà visibile chiaramente."
font: "Tipo di carattere" font: "Tipo di carattere"
fontDescription: "Puoi scegliere il tipo di carattere per il contenuto." fontDescription: "Puoi scegliere il tipo di carattere per il contenuto."
rainbow: "Arcobaleno" rainbow: "Arcobaleno"
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ə"
@ -932,10 +1009,15 @@ _menuDisplay:
hide: "Nascondere" hide: "Nascondere"
_wordMute: _wordMute:
muteWords: "Parole da filtrare" muteWords: "Parole da filtrare"
muteWordsDescription: "Separare con uno spazio indica la condizione \"E\". Separare con un'interruzzione riga indica la condizione \"O\"." muteWordsDescription: "Separare con uno spazio indica la condizione \"E\". Separare
muteWordsDescription2: "Metti le parole chiavi tra slash per usare espressioni regolari (regexp)." con un'interruzzione riga indica la condizione \"O\"."
softDescription: "Nascondi della timeline note che rispondono alle condizioni impostate qui." muteWordsDescription2: "Metti le parole chiavi tra slash per usare espressioni regolari
hardDescription: "Impedisci alla timeline di caricare le note che rispondono alle condizioni impostate qui. Inoltre, le note scompariranno in modo irreversibile, anche se le condizioni verranno successivamente rimosse." (regexp)."
softDescription: "Nascondi della timeline note che rispondono alle condizioni impostate
qui."
hardDescription: "Impedisci alla timeline di caricare le note che rispondono alle
condizioni impostate qui. Inoltre, le note scompariranno in modo irreversibile,
anche se le condizioni verranno successivamente rimosse."
soft: "Moderato" soft: "Moderato"
hard: "Severo" hard: "Severo"
mutedNotes: "Note silenziate" mutedNotes: "Note silenziate"
@ -1025,28 +1107,39 @@ _time:
hour: "ore" hour: "ore"
day: "giorni" day: "giorni"
_tutorial: _tutorial:
titolo: "Come usare Calckey" titolo: "Come usare Firefish"
step1_1: "Benvenuto!" step1_1: "Benvenuto!"
step1_2: "Vediamo di configurarla. Sarete operativi in men che non si dica!" step1_2: "Vediamo di configurarla. Sarete operativi in men che non si dica!"
step2_1: "Per prima cosa, compila il tuo profilo" step2_1: "Per prima cosa, compila il tuo profilo"
step2_2: "Fornendo alcune informazioni su chi siete, sarà più facile per gli altri capire se vogliono vedere le vostre note o seguirvi" step2_2: "Fornendo alcune informazioni su chi siete, sarà più facile per gli altri
capire se vogliono vedere le vostre note o seguirvi"
step3_1: "Ora è il momento di seguire alcune persone!" step3_1: "Ora è il momento di seguire alcune persone!"
step3_2: "La vostra home e le vostre timeline social si basano su chi seguite, quindi provate a seguire un paio di account per iniziare.\nCliccate sul cerchio più in alto a destra di un profilo per seguirlo" step3_2: "La vostra home e le vostre timeline social si basano su chi seguite, quindi
provate a seguire un paio di account per iniziare.\nCliccate sul cerchio più in
alto a destra di un profilo per seguirlo"
step4_1: "Fatevi conoscere" step4_1: "Fatevi conoscere"
step4_2: "Per il vostro primo post, alcuni preferiscono fare un post di {introduction} o un semplice \"Ciao mondo!\"" step4_2: "Per il vostro primo post, alcuni preferiscono fare un post di {introduction}
o un semplice \"Ciao mondo!\""
step5_1: "Linee temporali, linee temporali dappertutto!" step5_1: "Linee temporali, linee temporali dappertutto!"
step5_2: "La tua istanza ha attivato {timelines} diverse timelines" step5_2: "La tua istanza ha attivato {timelines} diverse timelines"
step5_3: "La timeline Home {icon} è quella in cui si possono vedere i post dei propri follower" step5_3: "La timeline Home {icon} è quella in cui si possono vedere i post dei propri
step5_4: "La timeline Locale {icon} è quella in cui si possono vedere i post di tutti gli altri utenti di questa istanza" follower"
step5_5: "La timeline Raccomandati {icon} è quella in cui si possono vedere i post delle istanze raccomandate dagli amministratori" step5_4: "La timeline Locale {icon} è quella in cui si possono vedere i post di
step5_6: "La timeline Social {icon} è quella in cui si possono vedere i post degli amici dei propri follower" tutti gli altri utenti di questa istanza"
step5_7: "La timeline Globale {icon} è quella in cui si possono vedere i post di ogni altra istanza collegata" step5_5: "La timeline Raccomandati {icon} è quella in cui si possono vedere i post
delle istanze raccomandate dagli amministratori"
step5_6: "La timeline Social {icon} è quella in cui si possono vedere i post degli
amici dei propri follower"
step5_7: "La timeline Globale {icon} è quella in cui si possono vedere i post di
ogni altra istanza collegata"
step6_1: "Allora, cos'è questo posto?" step6_1: "Allora, cos'è questo posto?"
step6_2: "Beh, non ti sei semplicemente unito a Calckey. Sei entrato in un portale del Fediverse, una rete interconnessa di migliaia di server, chiamata \"istanze\"" step6_2: "Beh, non ti sei semplicemente unito a Firefish. Sei entrato in un portale
step6_3: "Ogni server funziona in modo diverso, e non tutti i server eseguono Calckey. Questo però lo fa! È un po' complicato, ma ci riuscirete in poco tempo" del Fediverse, una rete interconnessa di migliaia di server, chiamata \"istanze\""
step6_3: "Ogni server funziona in modo diverso, e non tutti i server eseguono Firefish.
Questo però lo fa! È un po' complicato, ma ci riuscirete in poco tempo"
step6_4: "Ora andate, esplorate e divertitevi!" step6_4: "Ora andate, esplorate e divertitevi!"
_2fa: _2fa:
registerDevice: "Aggiungi dispositivo" registerTOTP: "Aggiungi dispositivo"
_permissions: _permissions:
"read:account": "Visualizzare le informazioni dell'account" "read:account": "Visualizzare le informazioni dell'account"
"write:account": "Modificare le informazioni dell'account" "write:account": "Modificare le informazioni dell'account"
@ -1172,7 +1265,8 @@ _profile:
youCanIncludeHashtags: "Puoi anche includere hashtag." youCanIncludeHashtags: "Puoi anche includere hashtag."
metadata: "Informazioni aggiuntive" metadata: "Informazioni aggiuntive"
metadataEdit: "Modifica informazioni aggiuntive" metadataEdit: "Modifica informazioni aggiuntive"
metadataDescription: "Puoi pubblicare fino a quattro informazioni aggiuntive sul profilo." metadataDescription: "Puoi pubblicare fino a quattro informazioni aggiuntive sul
profilo. Puoi aggiungere un tag {a} o {l} con {rel} per verificare il link sul tuo profilo!"
metadataLabel: "Etichetta" metadataLabel: "Etichetta"
metadataContent: "Contenuto" metadataContent: "Contenuto"
changeAvatar: "Modifica immagine profilo" changeAvatar: "Modifica immagine profilo"
@ -1464,3 +1558,6 @@ _deck:
list: "Liste" list: "Liste"
mentions: "Menzioni" mentions: "Menzioni"
direct: "Diretta" direct: "Diretta"
noThankYou: No grazie
addInstance: Aggiungi un'istanza
deleted: Eliminato

File diff suppressed because it is too large Load diff

View file

@ -177,7 +177,6 @@ operations: "操作"
software: "ソフトウェア" software: "ソフトウェア"
version: "バージョン" version: "バージョン"
metadata: "メタデータ" metadata: "メタデータ"
withNFiles: "{n}個のファイル"
monitor: "モニター" monitor: "モニター"
jobQueue: "ジョブキュー" jobQueue: "ジョブキュー"
cpuAndMemory: "CPUとメモリ" cpuAndMemory: "CPUとメモリ"
@ -378,7 +377,7 @@ exploreFediverse: "Fediverseを探ってみる"
popularTags: "人気のタグ" popularTags: "人気のタグ"
userList: "リスト" userList: "リスト"
about: "情報" about: "情報"
aboutMisskey: "Misskeyってなんや" aboutFirefish: "Misskeyってなんや"
administrator: "管理者" administrator: "管理者"
token: "トークン" token: "トークン"
twoStepAuthentication: "二段階認証" twoStepAuthentication: "二段階認証"
@ -648,7 +647,7 @@ createNewClip: "新しいクリップを作るで"
unclip: "クリップ解除するで" unclip: "クリップ解除するで"
confirmToUnclipAlreadyClippedNote: "このノートはすでにクリップ「{name}」に含まれとるで。ノートをこのクリップから除外したる?" confirmToUnclipAlreadyClippedNote: "このノートはすでにクリップ「{name}」に含まれとるで。ノートをこのクリップから除外したる?"
public: "パブリック" public: "パブリック"
i18nInfo: "Calckeyは有志によっていろんな言語に翻訳されとるで。{link}で翻訳に協力したってやー。" i18nInfo: "Firefishは有志によっていろんな言語に翻訳されとるで。{link}で翻訳に協力したってやー。"
manageAccessTokens: "アクセストークンの管理" manageAccessTokens: "アクセストークンの管理"
accountInfo: "アカウント情報" accountInfo: "アカウント情報"
notesCount: "ノートの数やで" notesCount: "ノートの数やで"
@ -868,7 +867,7 @@ _registry:
keys: "キー" keys: "キー"
domain: "ドメイン" domain: "ドメイン"
createKey: "キーを作る" createKey: "キーを作る"
_aboutMisskey: _aboutFirefish:
about: "Misskeyはsyuiloが2014年からずっと作ってはる、オープンソースなソフトウェアや。" about: "Misskeyはsyuiloが2014年からずっと作ってはる、オープンソースなソフトウェアや。"
contributors: "主な貢献者" contributors: "主な貢献者"
allContributors: "全ての貢献者" allContributors: "全ての貢献者"

View file

@ -1,6 +1,6 @@
--- ---
_lang_: "ಕನ್ನಡ" _lang_: "ಕನ್ನಡ"
introMisskey: "ಸ್ವಾಗತ! Misskey ಓಪನ್ ಸೋರ್ಸ್ ಒಕ್ಕೂಟ ಮೈಕ್ರೋಬ್ಲಾಗಿಂಗ್ ಸೇವೆಯಾಗಿದೆ.\n ಏನಾಗುತ್ತಿದೆ ಎಂಬುದನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಅಥವಾ ನಿಮ್ಮ ಬಗ್ಗೆ ಎಲ್ಲರಿಗೂ ಹೇಳಲು \"ಟಿಪ್ಪಣಿ\"ಗಳನ್ನು ರಚಿಸಿ📡\n \"ಸ್ಪಂದನೆ\" ಕ್ರಿಯೆಯೊಂದಿಗೆ, ನೀವು ಎಲ್ಲರ ಟಿಪ್ಪಣಿಗಳಿಗೆ ತ್ವರಿತವಾಗಿ ಸ್ಪಂದನೆಗಳನ್ನು ಕೂಡ ಸೇರಿಸಬಹುದು.👍\n ಹೊಸ ಜಗತ್ತನ್ನು ಅನ್ವೇಷಿಸಿ🚀" introMisskey: "ಸ್ವಾಗತ! Firefish ಓಪನ್ ಸೋರ್ಸ್ ಒಕ್ಕೂಟ ಮೈಕ್ರೋಬ್ಲಾಗಿಂಗ್ ಸೇವೆಯಾಗಿದೆ.\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: "환영합니다! Firefish 는 오픈 소스 분산형 마이크로 블로그 서비스입니다.\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와 메모리"
@ -378,7 +377,7 @@ exploreFediverse: "연합우주를 탐색"
popularTags: "인기 태그" popularTags: "인기 태그"
userList: "리스트" userList: "리스트"
about: "정보" about: "정보"
aboutMisskey: "Misskey에 대하여" aboutFirefish: "Misskey에 대하여"
administrator: "관리자" administrator: "관리자"
token: "토큰" token: "토큰"
twoStepAuthentication: "2단계 인증" twoStepAuthentication: "2단계 인증"
@ -524,7 +523,7 @@ sort: "정렬"
ascendingOrder: "오름차순" ascendingOrder: "오름차순"
descendingOrder: "내림차순" descendingOrder: "내림차순"
scratchpad: "스크래치 패드" scratchpad: "스크래치 패드"
scratchpadDescription: "스크래치 패드는 AiScript 의 테스트 환경을 제공합니다. Misskey 와 상호 작용하는 코드를 작성, 실행 및 결과를 확인할 수 있습니다." scratchpadDescription: "스크래치 패드는 AiScript 의 테스트 환경을 제공합니다. Firefish 와 상호 작용하는 코드를 작성, 실행 및 결과를 확인할 수 있습니다."
output: "출력" output: "출력"
script: "스크립트" script: "스크립트"
disablePagesScript: "Pages 에서 AiScript 를 사용하지 않음" disablePagesScript: "Pages 에서 AiScript 를 사용하지 않음"
@ -649,7 +648,7 @@ createNewClip: "새 클립 만들기"
unclip: "클립 해제" unclip: "클립 해제"
confirmToUnclipAlreadyClippedNote: "이 노트는 이미 \"{name}\" 클립에 포함되어 있습니다. 클립을 해제하시겠습니까?" confirmToUnclipAlreadyClippedNote: "이 노트는 이미 \"{name}\" 클립에 포함되어 있습니다. 클립을 해제하시겠습니까?"
public: "공개" public: "공개"
i18nInfo: "Calckey는 자원봉사자들에 의해 다양한 언어로 번역되고 있습니다. {link}에서 번역에 참가할 수 있습니다." i18nInfo: "Firefish는 자원봉사자들에 의해 다양한 언어로 번역되고 있습니다. {link}에서 번역에 참가할 수 있습니다."
manageAccessTokens: "액세스 토큰 관리" manageAccessTokens: "액세스 토큰 관리"
accountInfo: "계정 정보" accountInfo: "계정 정보"
notesCount: "노트 수" notesCount: "노트 수"
@ -965,7 +964,7 @@ _registry:
keys: "키" keys: "키"
domain: "도메인" domain: "도메인"
createKey: "키 생성" createKey: "키 생성"
_aboutMisskey: _aboutFirefish:
about: "Misskey는 syuilo에 의해서 2014년부터 개발되어 온 오픈소스 소프트웨어 입니다." about: "Misskey는 syuilo에 의해서 2014년부터 개발되어 온 오픈소스 소프트웨어 입니다."
contributors: "주요 기여자" contributors: "주요 기여자"
allContributors: "모든 기여자" allContributors: "모든 기여자"
@ -1180,8 +1179,8 @@ _time:
day: "일" day: "일"
_2fa: _2fa:
alreadyRegistered: "이미 설정이 완료되었습니다." alreadyRegistered: "이미 설정이 완료되었습니다."
registerDevice: "디바이스 등록" registerTOTP: "디바이스 등록"
registerKey: "키를 등록" registerSecurityKey: "키를 등록"
step1: "먼저, {a}나 {b}등의 인증 앱을 사용 중인 디바이스에 설치합니다." step1: "먼저, {a}나 {b}등의 인증 앱을 사용 중인 디바이스에 설치합니다."
step2: "그 후, 표시되어 있는 QR코드를 앱으로 스캔합니다." step2: "그 후, 표시되어 있는 QR코드를 앱으로 스캔합니다."
step2Url: "데스크톱 앱에서는 다음 URL을 입력하세요:" step2Url: "데스크톱 앱에서는 다음 URL을 입력하세요:"
@ -1320,7 +1319,7 @@ _profile:
youCanIncludeHashtags: "해시 태그를 포함할 수 있습니다." youCanIncludeHashtags: "해시 태그를 포함할 수 있습니다."
metadata: "추가 정보" metadata: "추가 정보"
metadataEdit: "추가 정보 편집" metadataEdit: "추가 정보 편집"
metadataDescription: "프로필에 추가 정보를 표시할 수 있어요" metadataDescription: "프로필에 추가 정보를 표시할 수 있어요. {rel}과 함께 {a} 태그 또는 {l} 태그를 추가하여 프로필의 링크를 확인할 수 있습니다!"
metadataLabel: "라벨" metadataLabel: "라벨"
metadataContent: "내용" metadataContent: "내용"
changeAvatar: "아바타 이미지 변경" changeAvatar: "아바타 이미지 변경"

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! Firefish 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 Firefish 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 Firefish 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" aboutFirefish: "Over Firefish"
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,278 @@ _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 om {date} {time}'
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
objectStorageUseSSLDesc: Schakel dit uit als je geen HTTPS voor je API connecties
gebruikt
objectStorageUseProxy: Verbind over Proxy
objectStorageUseProxyDesc: Schakel dit uit als je geen Proxy voor je API connecties
gebruikt
sounds: Geluiden
lastUsedDate: Laatst gebruikt op
installedDate: Geautoriseerd op
sort: Sorteren
output: Uitvoer
script: Script
popout: Pop-out
descendingOrder: Aflopend
showInPage: Toon in de pagina
chooseEmoji: Kies een emoji
ascendingOrder: Oplopend
volume: Volume
masterVolume: Master volume
details: Details
unableToProcess: Deze operatie kon niet worden voltooid
nothing: Niks te zien hier
scratchpad: Kladblok
recentUsed: Recentelijk gebruikt
install: Installeer
uninstall: Verwijderen
installedApps: Geautoriseerde Applicaties
state: Status
updateRemoteUser: Update externe gebruikersinformatie
listen: Luister
none: Geen
scratchpadDescription: Het kladblok is een omgeving voor AiScript experimenten. Je
kan hier schrijven, uitvoeren, en de resultaten bekijken van de interactie met Firefish.
disablePagesScript: Zet AiScript op Pages uit
deleteAllFiles: Verwijder alle bestanden
deleteAllFilesConfirm: Weet je zeker dat je alle bestanden wil verwijderen?
removeAllFollowing: Ontvolg alle gevolgde gebruikers
serverLogs: Server logboek
deleteAll: Verwijder alles
showFixedPostForm: Toon het post formulier bovenaan de tijdlijn
newNoteRecived: Er zijn nieuwe posts

View file

@ -1,2 +1,83 @@
---
_lang_: "Norsk Bokmål" _lang_: "Norsk Bokmål"
search: Søk
monthAndDay: '{day}/{month}'
fetchingAsApObject: Henter fra fediverset
ok: OK
gotIt: Jeg forstår!
profile: Profil
timeline: Tidslinje
save: Lagre
addToList: Legg til liste
searchPlaceholder: Søk Firefish
username: Brukernavn
password: Passord
notifications: Meldinger
forgotPassword: Glemt passord
cancel: Avbryt
noNotes: Ingen poster
instance: Server
settings: Innstillinger
noAccountDescription: Denne brukeren har ikke fylt ut bio'en sin ennå.
login: Logg inn
loggingIn: Logger inn
signup: Oppretter bruker
uploading: Laster opp..
enterUsername: Skriv inn brukernavn
noNotifications: Ingen meldinger
users: Brukere
addUser: Legg til en bruker
favorite: Legg til i bokmerker
cantFavorite: Kunne ikke legges til i bokmerker.
pin: Fest til profilen
copyContent: Kopier innhold
deleteAndEdit: Slett og rediger
sendMessage: Send en melding
copyUsername: Kopier brukernavn
reply: Svar
loadMore: Last mer
showLess: Lukk
receiveFollowRequest: Følgeforespørsel mottatt
directNotes: Direktemelding
importAndExport: Importer/eksporter data
importRequested: Du har bedt om en importering. Dette vil ta litt tid.
lists: Lister
listsDesc: Lister lar deg lage tidslinjer med utvalgte brukere. De kan hentes frem
fra tidslinje-siden.
deleted: Slettet
editNote: Rediger notat
followsYou: Følger deg
createList: Lag liste
newer: nyere
older: eldre
download: Last ned
unfollowConfirm: Er du sikker på at du ikke lenger vil følge {name}?
noLists: Du har ingen lister
following: Følger
files: Filer
note: Post
notes: Poster
followers: Følgere
otherSettings: Andre innstillinger
addInstance: Legg til en server
alreadyFavorited: Allerede lagt til i bokmerker.
delete: Slett
openInWindow: Åpne i vindu
basicSettings: Grunnleggende innstillinger
headlineMisskey: En desentralisert sosialt media-plattform, basert på åpen kildekode,
som alltid vil være gratis! 🚀
introMisskey: Velkommen! Firefish er en desentralisert sosialt media-plattform, basert
på åpen kildekode, som alltid vil være gratis! 🚀
exportRequested: Du har bedt om en eksportering. Dette vil ta litt tid. Den vil bli
lagt til på disken din når den er ferdig.
noThankYou: Nei takk
favorites: Bokmerker
unfavorite: Fjern fra bokmerker
favorited: Lagt til i bokmerker.
copyLink: Kopier lenke
searchUser: Søk etter en bruker
jumpToPrevious: Gå til foregående
showMore: Vis mer
followRequestAccepted: Følgeforespørsel godtatt
import: Importer
export: Eksporter
logout: Logger ut

File diff suppressed because it is too large Load diff

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! Firefish é 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 Firefish é 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 Firefish 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" aboutFirefish: "Sobre Firefish"
administrator: "Administrador" administrator: "Administrador"
token: "Símbolo" token: "Símbolo"
twoStepAuthentication: "Verificação em duas etapas" twoStepAuthentication: "Verificação em duas etapas"

112
locales/pt_BR.yml Normal file
View file

@ -0,0 +1,112 @@
username: Nome de usuário
ok: OK
_lang_: Inglês
headlineMisskey: Uma plataforma de mídia social descentralizada e de código aberto
que é gratuita para sempre! 🚀
search: Pesquisar
gotIt: Entendi!
introMisskey: Bem vinde! Firefish é uma plataforma de mídia social descentralizada
e de código aberto que é gratuita para sempre! 🚀
searchPlaceholder: Pesquise no Firefish
notifications: Notificações
password: Senha
forgotPassword: Esqueci a senha
cancel: Cancelar
noThankYou: Não, obrigade
save: Salvar
enterUsername: Insira nome de usuário
cw: Aviso de conteúdo
driveFileDeleteConfirm: Tem a certeza de que pretende apagar o arquivo "{name}"? O
arquivo será removido de todas as mensagens que o contenham como anexo.
deleteAndEdit: Deletar e editar
import: Importar
exportRequested: Você pediu uma exportação. Isso pode demorar um pouco. Será adicionado
ao seu Drive quando for completo.
note: Postar
notes: Postagens
deleteAndEditConfirm: Você tem certeza que quer deletar esse post e edita-lo? Você
vai perder todas as reações, impulsionamentos e respostas dele.
showLess: Fechar
importRequested: Você requisitou uma importação. Isso pode demorar um pouco.
listsDesc: Listas deixam você criar linhas do tempo com usuários específicos. Elas
podem ser acessadas pela página de linhas do tempo.
edited: 'Editado às {date} {time}'
sendMessage: Enviar uma mensagem
older: antigo
createList: Criar lista
loadMore: Carregar mais
mentions: Menções
importAndExport: Importar/Exportar Dados
files: Arquivos
lists: Listas
manageLists: Gerenciar listas
error: Erro
somethingHappened: Ocorreu um erro
retry: Tentar novamente
renotedBy: Impulsionado por {user}
noNotes: Nenhum post
noNotifications: Nenhuma notificação
instance: Servidor
settings: Configurações
basicSettings: Configurações Básicas
otherSettings: Outras Configurações
openInWindow: Abrir em janela
profile: Perfil
noAccountDescription: Esse usuário ainda não escreveu sua bio.
login: Entrar
loggingIn: Entrando
logout: Sair
signup: Criar conta
uploading: Enviando...
users: Usuários
addUser: Adicione um usuário
addInstance: Adicionar um servidor
cantFavorite: Não foi possível adicionar aos marcadores.
pin: Fixar no perfil
unpin: Desfixar do perfil
copyContent: Copiar conteúdos
copyLink: Copiar link
delete: Deletar
deleted: Deletado
editNote: Editar anotação
addToList: Adicionar a lista
copyUsername: Copiar nome de usuário
searchUser: Procurar por um usuário
reply: Responder
jumpToPrevious: Pular para o anterior
showMore: Mostrar mais
newer: novo
youGotNewFollower: seguiu você
mention: Mencionar
directNotes: Mensagens diretas
export: Exportar
unfollowConfirm: Você tem certez que deseja para de seguir {name}?
noLists: Você não possui nenhuma lista
following: Seguindo
followers: Seguidores
followsYou: Segue você
fetchingAsApObject: Buscando do Fediverse
timeline: Linha do tempo
favorite: Adicionar aos marcadores
favorites: Marcadores
unfavorite: Remover dos marcadores
favorited: Adicionado aos marcadores.
alreadyFavorited: Já foi adicionado aos marcadores.
download: Download
pageLoadError: Ocorreu um erro ao carregar a página.
pageLoadErrorDescription: Isso normalmente é causado por erros de rede ou pelo cache
do navegador. Tente limpar o cache e, depois de esperar um pouquinho, tente novamente.
serverIsDead: Esse servidos não está respondendo. Por favor espere um pouco e tente
novamente.
youShouldUpgradeClient: Para visualizar essa página, favor reiniciar para atualizar
seu cliente.
enterListName: Insira um nome para a lista
privacy: Privacidade
defaultNoteVisibility: Visibilidade padrão
makeFollowManuallyApprove: Pedidos de seguimento precisam de aprovação
follow: Seguir
followRequest: Seguir
followRequests: Pedidos de seguimento
unfollow: Parar de seguir
followRequestPending: Pedido de seguimento pendente
enterEmoji: Insira um emoji

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! Firefish 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 Firefish 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: "Firefish 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" aboutFirefish: "Despre Firefish"
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 Firefish în el."
output: "Ieșire" output: "Ieșire"
script: "Script" script: "Script"
disablePagesScript: "Dezactivează AiScript în Pagini" disablePagesScript: "Dezactivează AiScript în Pagini"

File diff suppressed because it is too large Load diff

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! Firefish 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 Firefish, 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 Firefish 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" aboutFirefish: "O Firefish"
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 Firefish."
output: "Výstup" output: "Výstup"
script: "Skript" script: "Skript"
disablePagesScript: "Vypnúť AiScript na stránkach" disablePagesScript: "Vypnúť AiScript na stránkach"
@ -648,7 +647,7 @@ createNewClip: "Vytvoriť nový klip"
unclip: "Odopnúť" unclip: "Odopnúť"
confirmToUnclipAlreadyClippedNote: "Táto poznámka je už pripnutá ako \"{name}\". Naozaj ju chcete odopnúť?" confirmToUnclipAlreadyClippedNote: "Táto poznámka je už pripnutá ako \"{name}\". Naozaj ju chcete odopnúť?"
public: "Verejné" public: "Verejné"
i18nInfo: "Calckey je prekladaný do rôznych jazykov dobrovoľníkmi. Pomôcť môžete na {link}." i18nInfo: "Firefish je prekladaný do rôznych jazykov dobrovoľníkmi. Pomôcť môžete na {link}."
manageAccessTokens: "Spravovať prístupové tokeny" manageAccessTokens: "Spravovať prístupové tokeny"
accountInfo: "Informácie o účte" accountInfo: "Informácie o účte"
notesCount: "Počet poznámok" notesCount: "Počet poznámok"
@ -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 Firefish. Pomôžete tak zvýšiť kvalitu Firefish.\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: "Firefish 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}"
@ -961,13 +960,13 @@ _registry:
keys: "Kľúče" keys: "Kľúče"
domain: "Doména" domain: "Doména"
createKey: "Vytvoriť kľúč" createKey: "Vytvoriť kľúč"
_aboutMisskey: _aboutFirefish:
about: "Misskey je open-source softvér, ktorý vyvíja syuilo od 2014." about: "Misskey je open-source softvér, ktorý vyvíja syuilo od 2014."
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ť Firefish"
donate: "Podporiť Misskey" donate: "Podporiť Firefish"
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 Firefish 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: "Firefish 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"
@ -1175,7 +1174,7 @@ _time:
hour: "hod" hour: "hod"
day: "dní" day: "dní"
_tutorial: _tutorial:
title: "How to use Calckey" title: "How to use Firefish"
step1_1: "Welcome!" step1_1: "Welcome!"
step1_2: "Let's get you set up. You'll be up and running in no time!" step1_2: "Let's get you set up. You'll be up and running in no time!"
step2_1: "First, please fill out your profile." step2_1: "First, please fill out your profile."
@ -1192,13 +1191,13 @@ _tutorial:
step5_6: "The Social {icon} timeline is where you can see posts from friends of your followers." 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." 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_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_2: "Well, you didn't just join Firefish. 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_3: "Each server works in different ways, and not all servers run Firefish. 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!" step6_4: "Now go, explore, and have fun!"
_2fa: _2fa:
alreadyRegistered: "Už ste zaregistrovali 2-faktorové autentifikačné zariadenie." alreadyRegistered: "Už ste zaregistrovali 2-faktorové autentifikačné zariadenie."
registerDevice: "Registrovať nové zariadenie" registerTOTP: "Registrovať nové zariadenie"
registerKey: "Registrovať bezpečnostný kľúč" registerSecurityKey: "Registrovať bezpečnostný kľúč"
step1: "Najprv si nainštalujte autentifikačnú aplikáciu (napríklad {a} alebo {b}) na svoje zariadenie." step1: "Najprv si nainštalujte autentifikačnú aplikáciu (napríklad {a} alebo {b}) na svoje zariadenie."
step2: "Potom, naskenujte QR kód zobrazený na obrazovke." step2: "Potom, naskenujte QR kód zobrazený na obrazovke."
step2Url: "Do aplikácie zadajte nasledujúcu URL adresu:" step2Url: "Do aplikácie zadajte nasledujúcu URL adresu:"
@ -1338,7 +1337,7 @@ _profile:
youCanIncludeHashtags: "Vo svojom bio môžete mať aj hashtagy." youCanIncludeHashtags: "Vo svojom bio môžete mať aj hashtagy."
metadata: "Dodatočné informácie" metadata: "Dodatočné informácie"
metadataEdit: "Upraviť dodatočné informácie" metadataEdit: "Upraviť dodatočné informácie"
metadataDescription: "Vo svojom profile môžete uviesť až štyri dodatočné informačné polia." metadataDescription: "Vo svojom profile môžete uviesť až štyri dodatočné informačné polia. Dodate lahko oznako {a} ali oznako {l} z {rel}, da preverite povezavo v svojem profile!"
metadataLabel: "Popisok" metadataLabel: "Popisok"
metadataContent: "Obsah" metadataContent: "Obsah"
changeAvatar: "Zmeniť avatara" changeAvatar: "Zmeniť avatara"

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