yarny stuff

This commit is contained in:
Puniko 2022-09-17 09:08:02 +02:00
commit e3f48872b0
300 changed files with 27680 additions and 19608 deletions

View file

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

View file

@ -1,5 +1,5 @@
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Misskey configuration
# FoundKey configuration
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# ┌─────┐
@ -15,19 +15,19 @@ url: https://example.tld/
#───┘ Port and TLS settings └───────────────────────────────────
#
# Misskey requires a reverse proxy to support HTTPS connections.
# FoundKey requires a reverse proxy to support HTTPS connections.
#
# +----- https://example.tld/ ------------+
# +------+ |+-------------+ +----------------+|
# | User | ---> || Proxy (443) | ---> | Misskey (3000) ||
# +------+ |+-------------+ +----------------+|
# +---------------------------------------+
# +-------- https://example.tld/ ----------+
# +------+ |+-------------+ +-----------------+|
# | User | ---> || Proxy (443) | ---> | FoundKey (3000) ||
# +------+ |+-------------+ +-----------------+|
# +----------------------------------------+
#
# You need to set up a reverse proxy. (e.g. nginx)
# An encrypted connection with HTTPS is highly recommended
# because tokens may be transferred in GET requests.
# The port that your Misskey server should listen on.
# The port that your FoundKey server should listen on.
port: 3000
# ┌──────────────────────────┐
@ -38,11 +38,11 @@ db:
port: 5432
# Database name
db: misskey
db: foundkey
# Auth
user: example-misskey-user
pass: example-misskey-pass
user: example-foundkey-user
pass: example-foundkey-pass
# Whether disable Caching queries
#disableCache: true

14
.gitignore vendored
View file

@ -50,3 +50,17 @@ ormconfig.json
*.blend3
*.blend4
*.blend5
# Yarn
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
packages/client/.yarn/*
packages/backend/.yarn/*
packages/sw/.yarn/*
# TypeScript
tsconfig.tsbuildinfo

3
.gitmodules vendored
View file

@ -1,3 +0,0 @@
[submodule "misskey-assets"]
path = misskey-assets
url = https://github.com/misskey-dev/assets.git

2
.npmrc
View file

@ -1,2 +0,0 @@
save-exact = true
package-lock = false

View file

@ -1,7 +1,6 @@
{
"recommendations": [
"editorconfig.editorconfig",
"eg2.vscode-npm-script",
"dbaeumer.vscode-eslint",
"Vue.volar",
"Vue.vscode-typescript-vue-plugin"

View file

@ -19,4 +19,4 @@ pipeline:
- pull_request
image: node:18.6.0
commands:
- yarn --cwd ./packages/backend lint
- yarn workspace backend run lint

View file

@ -19,4 +19,4 @@ pipeline:
- pull_request
image: node:18.6.0
commands:
- yarn --cwd ./packages/client lint
- yarn workspace client run lint

View file

@ -0,0 +1,22 @@
clone:
git:
image: woodpeckerci/plugin-git
settings:
depth: 1 # CI does not need commit history
recursive: true
pipeline:
install:
when:
event:
- pull_request
image: node:18.6.0
commands:
- yarn install
lint:
when:
event:
- pull_request
image: node:18.6.0
commands:
- yarn workspace foundkey-js run lint

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

783
.yarn/releases/yarn-3.2.3.cjs vendored Executable file

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
network-timeout 600000

11
.yarnrc.yml Normal file
View file

@ -0,0 +1,11 @@
httpTimeout: 600000
nodeLinker: node-modules
plugins:
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
spec: "@yarnpkg/plugin-interactive-tools"
- path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
spec: "@yarnpkg/plugin-workspace-tools"
yarnPath: .yarn/releases/yarn-3.2.3.cjs

View file

@ -1,13 +1,6 @@
<!--
## 12.x.x (unreleased)
**This is the changelog for Misskey v12.111.1 and earlier for historical reference. Changes for FoundKey versions post-fork can be found in the current [CHANGELOG.md](./CHANGELOG.md).**
### Improvements
### Bugfixes
-
You should also include the user name that made the change.
-->
**Contributors should use [changelog trailers](./CONTRIBUTING.md#changelog-trailer) for any changes that should be noted in the current changelog.**
## 12.x.x (unreleased)

View file

@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
This changelog covers changes since Misskey v12.111.1, the version prior to the FoundKey fork.
For older Misskey versions, see [CHANGELOG-OLD.md](./CHANGELOG-OLD.md).
Unreleased changes should not be listed in this file.
Instead, run `git shortlog --format='%h %s' --group=trailer:changelog <last tag>..` to see unreleased changes; replace `<last tag>` with the tag you wish to compare from.
If you are a contributor, please read [CONTRIBUTING.md, section "Changelog Trailer"](./CONTRIBUTING.md#changelog-trailer) on what to do instead.
## Unreleased
### Added
- Client: Show instance info in ticker
@ -31,10 +35,13 @@ For older Misskey versions, see [CHANGELOG-OLD.md](./CHANGELOG-OLD.md).
Foundkey will now work as if it was set to `true`.
### Fixed
- Client: Notifications for ended polls can now be turned off
- Client: Emoji picker should load faster now
- Server: Blocking remote accounts
### Security
- Server: Update `multer` dependency to resolve [CVE-2022-24434](https://nvd.nist.gov/vuln/detail/CVE-2022-24434)
- Server: Update `file-type`, `got`, and `sharp` dependencies to fix various security issues
## 13.0.0-preview1 - 2022-08-05
### Added

View file

@ -1,61 +1,47 @@
# Contribution guide
We're glad you're interested in contributing Misskey! In this document you will find the information you need to contribute to the project.
We're glad you're interested in contributing to Foundkey! In this document you will find the information you need to contribute to the project.
> **Note**
> This project uses Japanese as its major language, **but you do not need to translate and write the Issues/PRs in Japanese.**
> Also, you might receive comments on your Issue/PR in Japanese, but you do not need to reply to them in Japanese as well.\
> The accuracy of machine translation into Japanese is not high, so it will be easier for us to understand if you write it in the original language.
> It will also allow the reader to use the translation tool of their preference if necessary.
The project uses English as its primary language. However due to being a fork of Misskey (which uses Japanese as its primary language) you may find things that are in Japanese.
If you make contributions (pull requests, commits, comments in newly added code etc.) we expect that these should be in English.
We won't mind if issues are not in English but we cannot guarantee we will understand you correctly.
However it might stíll be better if you write issues in your original language if you are not confident of your English skills because we might be able to use different translators or ask people to translate if we are not sure what you mean.
Please understand that in such cases we might edit your issue to translate it, to help us avoid duplicating issues.
## Development platform
FoundKey generally assumes that it is running on a Unix-like platform (e.g. Linux or macOS). If you are using Windows for development, we highly suggest using the Windows Subsystem for Linux (WSL) as the development environment.
## Roadmap
See [ROADMAP.md](./ROADMAP.md)
## Issues
Before creating an issue, please check the following:
- To avoid duplication, please search for similar issues before creating a new issue.
- Do not use Issues to ask questions or troubleshooting.
- Issues should only be used to feature requests, suggestions, and bug tracking.
- Please ask questions or troubleshooting in the [Misskey Forum](https://forum.misskey.io/) or [Discord](https://discord.gg/Wp8gVStHW3).
Issues are intended for feature requests and bug tracking.
> **Warning**
> Do not close issues that are about to be resolved. It should remain open until a commit that actually resolves it is merged.
For technical support or if you are not sure if what you are experiencing is a bug you can talk to people on the [IRC server](https://irc.akkoma.dev) in the `#foundkey` channel first.
## Before implementation
When you want to add a feature or fix a bug, **first have the design and policy reviewed in an Issue** (if it is not there, please make one). Without this step, there is a high possibility that the PR will not be merged even if it is implemented.
At this point, you also need to clarify the goals of the PR you will create, and make sure that the other members of the team are aware of them.
PRs that do not have a clear set of do's and don'ts tend to be bloated and difficult to review.
Also, when you start implementation, assign yourself to the Issue (if you cannot do it yourself, ask another member to assign you). By expressing your intention to work the Issue, you can prevent conflicts in the work.
Please do not close issues that are about to be resolved. It should remain open until a commit that actually resolves it is merged.
## Well-known branches
- **`master`** branch is tracking the latest release and used for production purposes.
- **`develop`** branch is where we work for the next release.
- When you create a PR, basically target it to this branch.
- **`l10n_develop`** branch is reserved for localization management.
branch|what it's for
---|---
main|development branch
translate|managed by weblate, see [section about translation](#Translation)
## Creating a PR
Thank you for your PR! Before creating a PR, please check the following:
- If possible, prefix the title with a keyword that identifies the type of this PR, as shown below.
- `fix` / `refactor` / `feat` / `enhance` / `perf` / `chore` etc
- Also, make sure that the granularity of this PR is appropriate. Please do not include more than one type of change or interest in a single PR.
- If there is an Issue which will be resolved by this PR, please include a reference to the Issue in the text.
- Please add the summary of the changes to [`CHANGELOG.md`](/CHANGELOG.md). However, this is not necessary for changes that do not affect the users, such as refactoring.
- Check if there are any documents that need to be created or updated due to this change.
- If you have added a feature or fixed a bug, please add a test case if possible.
- Please make sure that tests and Lint are passed in advance.
- You can run it with `npm run test` and `npm run lint`. [See more info](#testing)
- If this PR includes UI changes, please attach a screenshot in the text.
For a production environment you might not want to follow the `main` branch directly but instead check out one of the git tags.
Thanks for your cooperation 🤗
## Considerations to be made for all contributions
## Reviewers guide
Be willing to comment on the good points and not just the things you want fixed 💯
This project follows [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html).
Significant changes should be listed in the changelog (i.e. the file called `CHANGELOG.md`, see also section "Changelog Trailer" below).
Although Semantic Versioning talks about "the API", changes to the user interface should also be tracked.
Consider if any of the existing documentation has to be updated because of your contribution.
Some more points you might want to consider are:
### Review perspective
- Scope
- Are the goals of the PR clear?
- Is the granularity of the PR appropriate?
- Are the goals of the PR clear?
- Is the granularity of the PR appropriate?
- Security
- Does merging this PR create a vulnerability?
- Performance
@ -66,39 +52,103 @@ Be willing to comment on the good points and not just the things you want fixed
- Are there any omissions or gaps?
- Does it check for anomalies?
## Deploy
The `/deploy` command by issue comment can be used to deploy the contents of a PR to the preview environment.
```
/deploy sha=<commit hash>
```
An actual domain will be assigned so you can test the federation.
## Code contributions
## Merge
For now, basically only @syuilo has the authority to merge PRs into develop because he is most familiar with the codebase.
However, minor fixes, refactoring, and urgent changes may be merged at the discretion of a contributor.
There are different "rules" of how you can contribute, depending on your access privileges to the repository.
### Without push access
If you do not have push access, you have to create a pull request to get your changes into Foundkey.
Someone with push access should review your contribution.
If they are satisfied that what you are doing seems like a good idea and the considerations from the section above are fulfilled, they can merge your pull request.
Or, they might request another member to also review your changes.
Please be patient as nobody is getting paid to do this, so it might take a bit longer.
### With push access
You can push stuff directly to any branch.
But y'know, "with great power comes great responsibility" and so on, be sensible.
We most likely will not kick you out if you made a mistake, it happens to the best.
But this of course means that the erroneous contributions may be either fixed or undone.
Alternatively, you can also proceed as for "without push access" above.
In this case it will be assumed that you wish for a review of the changes you want to make.
Instead of having someone else merge the pull request when they have approved your changes, you can also merge yourself if you think the given feedback is sufficient.
### Changelog Trailer
To keep track of changes that should go into the CHANGELOG, we use a standard [trailer](https://git-scm.com/docs/git-interpret-trailers).
For single-commits that should be included in the changeset, include the trailer directly.
For multiple commits, the merge commit (in case of a branch) or an empty final commit should include the trailer.
Valid values for the trailer are: "Added", "Changed", "Removed", "Fixed", "Security".
For breaking changes, include a "BREAKING:" in the summary.
Any additional notes should go into the commit body.
If you forget to include it, you can create an empty commit after the fact with it (`--allow-empty`).
Try not to include invalid values in the trailer.
Here is an example complete breaking commit with notes.
```
BREAKING: client: remove rooms
Rooms were removed by syuilo some time ago.
This commit is an example of what the changelog trailer usage is like.
Admins should ensure to run migrations on startup, else foundkey will fail to start.
Changelog: Removed
```
### Creating a PR
- Please prefix the title with the part of Misskey you are changing, i.e. `server:` or `client:`
- The rest of the title should roughly describe what you did.
- Make sure that the granularity of this PR is appropriate. Please do not include more than one type of change in a single PR.
- If there is an issue which will be resolved by this PR, please include a reference to the Issue in the text.
- If you have added a feature or fixed a bug, please add a test case if possible.
- Please make sure that tests and Lint are passed in advance.
- You can run it with `npm run test` and `npm run lint`. [See more info](#testing)
- Don't forget to update the changelog and/or documentation as appropriate (see above).
Thanks for your cooperation!
## Release
### Release Instructions
1. Commit version changes in the `develop` branch ([package.json](https://github.com/misskey-dev/misskey/blob/develop/package.json))
2. Create a release PR.
- Into `master` from `develop` branch.
- The title must be in the format `Release: x.y.z`.
- `x.y.z` is the new version you are trying to release.
3. Deploy and perform a simple QA check. Also verify that the tests passed.
4. Merge it.
5. Create a [release of GitHub](https://github.com/misskey-dev/misskey/releases)
- The target branch must be `master`
- The tag name must be the version
## Localization (l10n)
Misskey uses [Crowdin](https://crowdin.com/project/misskey) for localization management.
You can improve our translations with your Crowdin account.
Your changes in Crowdin are automatically submitted as a PR (with the title "New Crowdin translations") to the repository.
The owner [@syuilo](https://github.com/syuilo) merges the PR into the develop branch before the next release.
### Fork transition
If your language is not listed in Crowdin, please open an issue.
**Note:**
Since Foundkey was forked from Misskey recently, there might be some breaking changes we want to make.
For this purpose there will be several pre-release versions of 13.0.0 (e.g. `13.0.0-preview1`).
Until major version 13 is released, the below process is not fully in effect.
![Crowdin](https://d322cqt584bo4o.cloudfront.net/misskey/localized.svg)
### Release process
Before a stable version is released, there should be a comment period which should usually be 7 days to give everyone the chance to comment.
If a (critical) bug or similar is found during the comment period, the release may be postponed until a fix is found.
For commenting, an issue should be created, and the comment period should also be announced in the `#foundkey-dev` [IRC](https://irc.akkoma.dev) channel.
Pre-releases do not require as much scrutiny and can be useful for "field testing" before a stable release is made.
All releases are managed as git tags.
If the released version is 1.2.3, the git tag should be "v1.2.3".
Pre-releases are marked "previewN".
The first pre-release for 1.2.3 should be tagged "v1.2.3-preview1".
The tag should be a "lightweight" tag (not annotated) of the commit that modifies the CHANGELOG and package.json version.
To generate the changelog, we use a standard shortlog command: `git shortlog --format='%h %s' --group=trailer:changelog LAST_TAG..`.
The person performing the release process should build the next CHANGELOG section based on this output, not use it as-is.
Full releases should also remove any pre-release CHANGELOG sections.
## Translation
[![Translation status](http://translate.akkoma.dev/widgets/foundkey/-/svg-badge.svg)](http://translate.akkoma.dev/engage/foundkey/)
<small>a.k.a. Localization (l10n) or Internationalization (i18n)</small>
To translate text used in Foundkey, we use weblate at <https://translate.akkoma.dev/projects/foundkey/>.
Localization files are found in `/locales/` and are YAML files using the `yml` file extension.
The file name consists of the [IETF BCP 47](https://www.rfc-editor.org/info/bcp47) language code.
## Development
During development, it is useful to use the `npm run dev` command.
@ -132,27 +182,34 @@ npx cross-env TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT="./
### e2e tests
TODO
## Continuous integration
Misskey uses GitHub Actions for executing automated tests.
Configuration files are located in [`/.github/workflows`](/.github/workflows).
## Continuous integration (CI)
Foundkey uses Woodpecker for executing automated tests and lints.
CI runs can be found at [ci.akkoma.dev](https://ci.akkoma.dev/FoundKeyGang/FoundKey)
Configuration files are located in `/.woodpecker/`.
## Vue
Misskey uses Vue(v3) as its front-end framework.
- Use TypeScript.
- **When creating a new component, please use the Composition API (with [setup sugar](https://v3.vuejs.org/api/sfc-script-setup.html) and [ref sugar](https://github.com/vuejs/rfcs/discussions/369)) instead of the Options API.**
- Some of the existing components are implemented in the Options API, but it is an old implementation. Refactors that migrate those components to the Composition API are also welcome.
- Use TypeScript functionality.
- Use the type only variant of `defineProps` and `defineEmits`.
- When creating a new component, please use the Composition API (with [setup sugar](https://v3.vuejs.org/api/sfc-script-setup.html) and [ref sugar](https://github.com/vuejs/rfcs/discussions/369)) instead of the Options API.
- Some of the existing components are implemented in the Options API, but it is an old implementation. Refactors that migrate those components to the Composition API are welcome.
You might be able to use this shell command to find components that have not yet been refactored: `find packages/client/src -name '*.vue' | xargs grep '<script' | grep -v 'setup'`
## Notes
### How to resolve conflictions occurred at yarn.lock?
Just execute `yarn` to fix it.
### INSERTするときにはsaveではなくinsertを使用する
#6441
### Use `insert` instead of `save` to create new objects
When using `save`, you may accidentally update an existing item, because `save` circumvents uniqueness constraints.
### placeholder
SQLをクエリビルダで組み立てる際、使用するプレースホルダは重複してはならない
例えば
See also <https://github.com/misskey-dev/misskey/issues/6441>.
### typeorm placeholders
The names of placeholders used in queries must be unique in each query.
For example
``` ts
query.andWhere(new Brackets(qb => {
for (const type of ps.fileType) {
@ -160,8 +217,8 @@ query.andWhere(new Brackets(qb => {
}
}));
```
と書くと、ループ中で`type`というプレースホルダが複数回使われてしまいおかしくなる
だから次のようにする必要がある
would mean that `type` is used multiple times because it is used in a loop.
This is incorrect. instead you would need to do something like the following:
```ts
query.andWhere(new Brackets(qb => {
for (const type of ps.fileType) {
@ -171,82 +228,85 @@ query.andWhere(new Brackets(qb => {
}));
```
### Not `null` in TypeORM
```ts
const foo = await Foos.findOne({
bar: Not(null)
});
```
のようなクエリ(`bar`が`null`ではない)は期待通りに動作しない。
次のようにします:
### `null` (JS/TS) and `NULL` (SQL)
#### in TypeORM FindOptions
Using the JavaScript/TypeScript `null` constant is not supported in Typeorm. Instead you need to use the special `Null()` function Typeorm provides.
It can also be combined with other similar TypeORM functions.
For example to make a condition similar to SQL `IS NOT NULL`, do the following:
```ts
import { IsNull, Not } from 'typeorm';
const foo = await Foos.findOne({
bar: Not(IsNull())
});
```
### `null` in SQL
SQLを発行する際、パラメータが`null`になる可能性のある場合はSQL文を出し分けなければならない
例えば
#### in SQL queries or `QueryBuilder`s
In SQL statements, you need to have separate statements for cases where parameters may be `null`.
Take for example this snippet:
``` ts
query.where('file.folderId = :folderId', { folderId: ps.folderId });
```
という処理で、`ps.folderId`が`null`だと結果的に`file.folderId = null`のようなクエリが発行されてしまい、これは正しいSQLではないので期待した結果が得られない
だから次のようにする必要がある
If `ps.folderId === null`, the resulting query would be `file.folderId = null` which is incorrect and might produce unexpected results.
What you need to do instead is something like the following:
``` ts
if (ps.folderId) {
if (ps.folderId != null) {
query.where('file.folderId = :folderId', { folderId: ps.folderId });
} else {
query.where('file.folderId IS NULL');
}
```
### `[]` in SQL
SQLを発行する際、`IN`のパラメータが`[]`(空の配列)になる可能性のある場合はSQL文を出し分けなければならない
例えば
### Empty array handling in TypeORM FindOptions
If you are using the `In` function in `FindOptions`, there must be different behaviour if it may receive empty arrays.
``` ts
const users = await Users.find({
id: In(userIds)
});
```
という処理で、`userIds`が`[]`だと結果的に`user.id IN ()`のようなクエリが発行されてしまい、これは正しいSQLではないので期待した結果が得られない
だから次のようにする必要がある
This would produce erroneous SQL, i.e. `user.id IN ()`.
To fix this you would need separate handling for an empty array, for example like this:
``` ts
const users = userIds.length > 0 ? await Users.find({
id: In(userIds)
}) : [];
```
### 配列のインデックス in SQL
SQLでは配列のインデックスは**1始まり**。
`[a, b, c]``a`にアクセスしたいなら`[0]`ではなく`[1]`と書く
### typeorm: selecting only specific columns
### null IN
nullが含まれる可能性のあるカラムにINするときは、そのままだとおかしくなるのでORなどでnullのハンドリングをしよう。
If you select specific columns of a table only, you will probably not be able to use the usual `getOne`, `getMany` etc.
Instead you might want to try using `getRawOne` and `getRawMany`.
For that, you may also want to add aliases to the columns you select, which can be done using the second parameter of `select` or `addSelect`.
### `undefined`にご用心
MongoDBの時とは違い、findOneでレコードを取得する時に対象レコードが存在しない場合 **`undefined`** が返ってくるので注意。
MongoDBは`null`で返してきてたので、その感覚で`if (x === null)`とか書くとバグる。代わりに`if (x == null)`と書いてください
### Array indexing in SQL
PostgreSQL array indices **start at 1**.
### Migration作成方法
packages/backendで:
### `NULL IN ...`
When `IN` is performed on a column that may contain `NULL` values, use `OR` or similar to handle `NULL` values.
### creating migrations
In `packages/backend`, run:
```sh
npx typeorm migration:generate -d ormconfig.js -o <migration name>
```
- 生成後、ファイルをmigration下に移してください
- 作成されたスクリプトは不必要な変更を含むため除去してください
After generating (and potentially editing) the file, move it to the `packages/backend/migration` folder.
### コネクションには`markRaw`せよ
**Vueのコンポーネントのdataオプションとして**misskey.jsのコネクションを設定するとき、必ず`markRaw`でラップしてください。インスタンスが不必要にリアクティブ化されることで、misskey.js内の処理で不具合が発生するとともに、パフォーマンス上の問題にも繋がる。なお、Composition APIを使う場合はこの限りではない(リアクティブ化はマニュアルなため)。
### `markRaw` for connections
When setting up a foundkey-js streaming connection as a data option to a Vue component, be sure to wrap it in `markRaw`.
Unnecessarily reactivating a connection causes problems with processing in foundkey-js and leads to performance issues.
This does not apply when using the Composition API since reactivation is manual.
### JSONのimportに気を付けよう
TypeScriptでjsonをimportすると、tscでコンパイルするときにそのjsonファイルも一緒にdistディレクトリに吐き出されてしまう。この挙動により、意図せずファイルの書き換えが発生することがあるので、jsonをimportするときは書き換えられても良いものかどうか確認すること。書き換えされて欲しくない場合は、importで読み込むのではなく、`fs.readFileSync`などの関数を使って読み込むようにすればよい。
### JSON imports
If you import json in TypeScript, the json file will be spit out together with the TypeScript file into the dist directory when compiling with tsc. This behavior may cause unintentional rewriting of files, so when importing json files, be sure to check whether the files are allowed to be rewritten or not. If you do not want the file to be rewritten, you should make sure that the file can be rewritten by importing the json file. If you do not want the file to be rewritten, use functions such as `fs.readFileSync` to read the file instead of importing it.
### コンポーネントのスタイル定義でmarginを持たせない
コンポーネント自身がmarginを設定するのは問題の元となることはよく知られている
marginはそのコンポーネントを使う側が設定する
### Component style definitions do not have a `margin`
Setting the `margin` of a component may be confusing.
Instead, it should always be the user of a component that sets a `margin`.
## その他
### HTMLのクラス名で follow という単語は使わない
広告ブロッカーで誤ってブロックされる
### Do not use the word "follow" in HTML class names
This has caused things to be blocked by an ad blocker in the past.

View file

@ -1,4 +1,4 @@
FROM node:18.0.0-alpine3.15 AS base
FROM node:18.9.0-alpine3.16 AS base
ARG NODE_ENV=production
@ -28,7 +28,7 @@ COPY --from=builder /misskey/node_modules ./node_modules
COPY --from=builder /misskey/built ./built
COPY --from=builder /misskey/packages/backend/node_modules ./packages/backend/node_modules
COPY --from=builder /misskey/packages/backend/built ./packages/backend/built
COPY --from=builder /misskey/packages/client/node_modules ./packages/client/node_modules
COPY --from=builder /misskey/packages/foundkey-js/built ./packages/foundkey-js/built
COPY . ./
ENV NODE_ENV=production

View file

@ -1,55 +1,13 @@
<div align="center">
<a href="https://misskey-hub.net">
<img src="./assets/title_float.svg" alt="Misskey logo" style="border-radius:50%" width="400"/>
</a>
**🌎 **[Misskey](https://misskey-hub.net/)** is an open source, decentralized social media platform that's free forever! 🚀**
---
# FoundKey
FoundKey is a free and open source microblogging server compatible with ActivityPub. Forked from Misskey, FoundKey improves on maintainability and behaviour, while also bringing in useful features.
<a href="https://misskey-hub.net/instances.html">
<img src="https://custom-icon-badges.herokuapp.com/badge/find_an-instance-acea31?logoColor=acea31&style=for-the-badge&logo=misskey&labelColor=363B40" alt="find an instance"/></a>
<a href="https://misskey-hub.net/docs/install.html">
<img src="https://custom-icon-badges.herokuapp.com/badge/create_an-instance-FBD53C?logoColor=FBD53C&style=for-the-badge&logo=server&labelColor=363B40" alt="create an instance"/></a>
<a href="./CONTRIBUTING.md">
<img src="https://custom-icon-badges.herokuapp.com/badge/become_a-contributor-A371F7?logoColor=A371F7&style=for-the-badge&logo=git-merge&labelColor=363B40" alt="become a contributor"/></a>
<a href="https://discord.gg/Wp8gVStHW3">
<img src="https://custom-icon-badges.herokuapp.com/badge/join_the-community-5865F2?logoColor=5865F2&style=for-the-badge&logo=discord&labelColor=363B40" alt="join the community"/></a>
<a href="https://www.patreon.com/syuilo">
<img src="https://custom-icon-badges.herokuapp.com/badge/become_a-patron-F96854?logoColor=F96854&style=for-the-badge&logo=patreon&labelColor=363B40" alt="become a patron"/></a>
---
</div>
<div>
<a href="https://xn--931a.moe/"><img src="https://github.com/misskey-dev/misskey/blob/develop/assets/ai.png?raw=true" align="right" height="320px"/></a>
## ✨ Features
- **ActivityPub support**\
Not on Misskey? No problem! Not only can Misskey instances talk to each other, but you can make friends with people on other networks like Mastodon and Pixelfed!
- **Reactions**\
You can add emoji reactions to any post! No longer are you bound by a like button, show everyone exactly how you feel with the tap of a button.
- **Drive**\
With Misskey's built in drive, you get cloud storage right in your social media, where you can upload any files, make folders, and find media from posts you've made!
- **Rich Web UI**\
Misskey has a rich and easy to use Web UI!
It is highly customizable, from changing the layout and adding widgets to making custom themes.
Furthermore, plugins can be created using AiScript, an original programming language.
- And much more...
</div>
<div style="clear: both;"></div>
See the [changelog](./CHANGELOG.md) and [roadmap](./ROADMAP.md) for more on what's changed and future plans.
## Documentation
FoundKey's documentation is a work in progress. In the meantime, much of the documentation on the [Misskey Hub](https://misskey-hub.net/) will also apply to FoundKey.
Misskey Documentation can be found at [Misskey Hub](https://misskey-hub.net/), some of the links and graphics above also lead to specific portions of it.
## Contributing
If you're interested in helping out with the project, please read the [contributing guide](./CONTRIBUTING.md).
## Sponsors
FoundKey is not interested in sponsorships.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -19,7 +19,7 @@ services:
redis:
restart: always
image: redis:4.0-alpine
image: redis:7.0-alpine
networks:
- internal_network
volumes:
@ -27,7 +27,7 @@ services:
db:
restart: always
image: postgres:12.2-alpine
image: postgres:14.5-alpine
networks:
- internal_network
env_file:

59
docs/migrating.md Normal file
View file

@ -0,0 +1,59 @@
# Migrating to FoundKey
Migrating from Misskey to FoundKey is relatively straightforward. However, additional steps are required as there are significant changes between the two projects.
## Backup
The process will take some time and it's possible something will go wrong. It's highly suggested to make a database dump using `pgdump` and backing up `.config/default.yml` and the `files/` directory before proceeding any further.
## Reverting migrations
If you're migrating from Misskey 12.112.0 or higher, you'll need to revert some database migrations as they have diverged from that point. Specifically, you'll need to revert `nsfwDetection1655368940105` and newer migrations.
Run the following to revert those migrations:
```sh
cd packages/backend
LINE_NUM="$(npx typeorm migration:show -d ormconfig.js | grep -n nsfwDetection1655368940105 | cut -d ':' -f 1)"
NUM_MIGRATIONS="$(npx typeorm migration:show -d ormconfig.js | tail -n+"$LINE_NUM" | grep '\[X\]' | nl)"
for i in $(seq 1 $NUM_MIGRAIONS); do
npx typeorm migration:revert -d ormconfig.js
done
```
## Switching repositories
To switch to the FoundKey repository, do the following in your Misskey install location:
```sh
git remote set-url origin https://akkoma.dev/FoundKeyGang/FoundKey.git
git fetch origin
```
We recommend using a local branch and merging in upstream releases as they get tagged. This allows for easy local customization of your install.
For example, say your local branch is `toast.cafe` and you want to use release `v13.0.0-preview1`. To create that branch:
```sh
git checkout tags/v13.0.0-preview1 -b toast.cafe
```
When a new release comes out, simply fetch and merge in the new tag. Here we opt to squash upstream commits as it allows for easy reverts in case something goes wrong.
```sh
git fetch -t
git merge tags/v13.0.0-preview2 --squash
# you are now on the "next" release
```
## Rebuilding and running database migrations
This will be pretty much the same as a regular update of Misskey. Note that `yarn install` may take a while since dependency versions have been updated or removed and we use a newer version of Yarn.
```sh
yarn install
NODE_ENV=production yarn build
yarn migrate
```
## Restarting your instance
To let the changes take effect restart your instance as usual:
```sh
# Systemd
systemctl restart misskey
# OpenRC
rc-service misskey restart
```

View file

@ -16,11 +16,11 @@ gulp.task('copy:backend:views', () =>
);
gulp.task('copy:client:fonts', () =>
gulp.src('./packages/client/node_modules/three/examples/fonts/**/*').pipe(gulp.dest('./built/_client_dist_/fonts/'))
gulp.src('./node_modules/three/examples/fonts/**/*').pipe(gulp.dest('./built/_client_dist_/fonts/'))
);
gulp.task('copy:client:fontawesome', () =>
gulp.src('./packages/client/node_modules/@fortawesome/fontawesome-free/**/*').pipe(gulp.dest('./built/_client_dist_/fontawesome/'))
gulp.src('./node_modules/@fortawesome/fontawesome-free/**/*').pipe(gulp.dest('./built/_client_dist_/fontawesome/'))
);
gulp.task('copy:client:locales', cb => {

View file

@ -108,7 +108,6 @@ add: "إضافة"
reaction: "التفاعلات"
reactionSetting: "التفاعلات المراد عرضها في منتقي التفاعلات."
reactionSettingDescription2: "اسحب لترتيب ، انقر للحذف ، استخدم \"+\" للإضافة."
rememberNoteVisibility: "تذكر إعدادت مدى رؤية الملاحظات"
attachCancel: "أزل المرفق"
markAsSensitive: "علّمه كمحتوى حساس"
unmarkAsSensitive: "ألغ تعيينه كمحتوى حساس"
@ -196,7 +195,7 @@ noUsers: "ليس هناك مستخدمون"
editProfile: "تعديل الملف التعريفي"
noteDeleteConfirm: "هل تريد حذف هذه الملاحظة؟"
pinLimitExceeded: "لا يمكنك تدبيس الملاحظات بعد الآن."
intro: "لقد انتهت عملية تنصيب Misskey. الرجاء إنشاء حساب إداري."
intro: "لقد انتهت عملية تنصيب FoundKey. الرجاء إنشاء حساب إداري."
done: "تمّ"
processing: "المعالجة جارية"
preview: "معاينة"
@ -254,6 +253,7 @@ remoteUserCaution: "هذه المعلومات قد لا تكون مكتملة ب
activity: "النشاط"
images: "الصور"
birthday: "تاريخ الميلاد"
yearsOld: "{age} سنة"
registeredDate: "انضم في"
location: "الموقع الجغرافي"
theme: "المظهر"
@ -370,7 +370,7 @@ exploreFediverse: "استكشف الفديفرس"
popularTags: "الوسوم الرائجة"
userList: "القوائم"
about: "عن"
aboutMisskey: "عن Misskey"
aboutMisskey: "عن FoundKey"
administrator: "المدير"
token: "الرمز المميز"
twoStepAuthentication: "الإستيثاق بعاملَيْن"
@ -503,7 +503,6 @@ sort: "ترتيب حسب"
ascendingOrder: "تصاعدي"
descendingOrder: "تنازلي"
output: "الخارجة"
disablePagesScript: "عطّل AiScript في الصفحات"
updateRemoteUser: "تحديث المعلومات عن المستخدم البعيد"
deleteAllFiles: "حذف كافة الملفات"
deleteAllFilesConfirm: "أتريد حذف كل الملفات؟"
@ -660,8 +659,6 @@ clearCache: "امسح التخزين المؤقت"
onlineUsersCount: "{n} مستخدم متصل"
nUsers: "{n} مستخدم"
nNotes: "{n} ملاحظة"
sendErrorReports: "أرسل تقارير الأخطاء"
sendErrorReportsDescription: "إذا فعّلته ستساعد في تحسين ميسكي وذلك عبر مشاركة معلومات تفصيلية عن الخطأ.\nومما تحتويه التقارير: نسخة نظام التشغيل ونوع المتصفح وسجل نشاطك إلخ."
myTheme: "سماتي"
backgroundColor: "لون الخلفية"
accentColor: "طابع لوني"
@ -849,9 +846,6 @@ _aboutMisskey:
allContributors: "كل المساهمين"
source: "الشفرة المصدرية"
translation: "ترجم ميسكي"
donate: "تبرع لميسكي"
morePatrons: "نحن نقدر الدعم الذي قدمه العديد من الأشخاص الذين لم نذكرهم. شكرًا لكم 🥰"
patrons: "الداعمون"
_nsfw:
respect: "اخف الوسائط ذات المحتوى الحساس"
ignore: "اعرض الوسائط ذات المحتوى الحساس"
@ -1015,7 +1009,7 @@ _time:
hour: "سا"
day: "ي"
_tutorial:
title: "كيف تستخدم Misskey"
title: "كيف تستخدم FoundKey"
step1_1: "مرحبًا!"
step1_2: "تدعى هذه الصفحة 'الخيط الزمني' وهي تحوي ملاحظات الأشخاص الذي تتابعهم مرتبة حسب تاريخ نشرها."
step1_3: "خيطك الزمني فارغ حاليًا بما أنك لا تتابع أي شخص ولم تنشر أي ملاحظة."

View file

@ -108,7 +108,6 @@ add: "যুক্ত করুন"
reaction: "প্রতিক্রিয়া"
reactionSetting: "রিঅ্যাকশন পিকারে যেসকল প্রতিক্রিয়া দেখানো হবে"
reactionSettingDescription2: "পুনরায় সাজাতে টেনে আনুন, মুছতে ক্লিক করুন, যোগ করতে + টিপুন।"
rememberNoteVisibility: "নোটের দৃশ্যমান্যতার সেটিংস মনে রাখুন"
attachCancel: "অ্যাটাচমেন্ট সরান "
markAsSensitive: "সংবেদনশীল হিসাবে চিহ্নিত করুন"
unmarkAsSensitive: "সংবেদনশীল চিহ্ন সরান"
@ -198,7 +197,7 @@ noUsers: "কোন ব্যাবহারকারী নেই"
editProfile: "প্রোফাইল সম্পাদনা করুন"
noteDeleteConfirm: "আপনি কি নোট ডিলিট করার ব্যাপারে নিশ্চিত?"
pinLimitExceeded: "আপনি আর কোন নোট পিন করতে পারবেন না"
intro: "Misskey এর ইন্সটলেশন সম্পন্ন হয়েছে!দয়া করে অ্যাডমিন ইউজার তৈরি করুন।"
intro: "FoundKey এর ইন্সটলেশন সম্পন্ন হয়েছে!দয়া করে অ্যাডমিন ইউজার তৈরি করুন।"
done: "সম্পন্ন"
processing: "প্রক্রিয়াধীন..."
preview: "পূর্বরূপ দেখুন"
@ -258,6 +257,7 @@ remoteUserCaution: "এই ব্যাবহারকারী রিমোট
activity: "কার্যকলাপ"
images: "ছবি"
birthday: "জন্মদিন"
yearsOld: "{age} বছর"
registeredDate: "যোগদানের তারিখ"
location: "অবস্থান"
theme: "থিম"
@ -375,7 +375,7 @@ exploreFediverse: "Fediverse ঘুরে দেখুন"
popularTags: "জনপ্রিয় ট্যাগগুলি"
userList: "লিস্ট"
about: "আপনার সম্পর্কে"
aboutMisskey: "Misskey সম্পর্কে"
aboutMisskey: "FoundKey সম্পর্কে"
administrator: "প্রশাসক"
token: "টোকেন"
twoStepAuthentication: "২-ধাপ প্রমাণীকরণ"
@ -521,7 +521,6 @@ scratchpad: "স্ক্র্যাচপ্যাড"
scratchpadDescription: "স্ক্র্যাচপ্যাড AiScript-এর জন্য একটি পরীক্ষামূলক পরিবেশ প্রদান করে। আপনি মিস্কির সাথে ইন্টারঅ্যাক্ট করে এমন কোড লিখতে, চালাতে এবং তার ফলাফল দেখতে পারেন।"
output: "আউটপুট"
script: "স্ক্রিপ্ট"
disablePagesScript: "পেজগুলোতে AiScript অক্ষম করুন"
updateRemoteUser: "রিমোট ব্যবহারকারীর তথ্য আপডেট করুন"
deleteAllFiles: "সকল ফাইল ডিলিট করুন"
deleteAllFilesConfirm: "সকল ফাইল ডিলিট করতে চান?"
@ -640,7 +639,7 @@ createNew: "নতুন"
optional: "প্রয়োজনীয় নয়"
createNewClip: "নতুন ক্লিপ তৈরি করুন"
public: "সর্বজনীন"
i18nInfo: "Misskey স্বেচ্ছাসেবকদের দ্বারা বিভিন্ন ভাষায় অনুবাদ করা হচ্ছে। আপনি {link} এ গিয়ে অনুবাদে সহযোগিতা করতে পারেন।"
i18nInfo: "FoundKey স্বেচ্ছাসেবকদের দ্বারা বিভিন্ন ভাষায় অনুবাদ করা হচ্ছে। আপনি {link} এ গিয়ে অনুবাদে সহযোগিতা করতে পারেন।"
manageAccessTokens: "অ্যাক্সেস টোকেন পরিচালনা করুন"
accountInfo: "অ্যাকাউন্টের তথ্য"
notesCount: "নোটের সংখ্যা"
@ -690,8 +689,6 @@ clearCache: "ক্যাশ পরিষ্কার করুন"
onlineUsersCount: "{n} জন ব্যাবহারকারী অনলাইন"
nUsers: "{n} জন ব্যাবহারকারী"
nNotes: "{n} টি নোট"
sendErrorReports: "ক্রুটি প্রতিবেদন পাঠান"
sendErrorReportsDescription: "চালু থাকলে, বিস্তারিত ত্রুটির তথ্য Misskey-এর সাথে শেয়ার করা হয়। যা সফ্টওয়্যারটির গুণমান উন্নত করতে সাহায্য করে। ত্রুটির তথ্যের মধ্যে রয়েছে OS সংস্করণ, ব্রাউজারের ধরন, কর্মের ইতিহাস ইত্যাদি।"
myTheme: "আমার থিম"
backgroundColor: "পটভূমির রং"
accentColor: "এক্সেন্টের রং"
@ -781,13 +778,12 @@ hashtags: "হ্যাশট্যাগ"
troubleshooting: "ট্রাবলশুটিং"
useBlurEffect: "UI তে ব্লার ইফেক্ট ব্যাবহার করুন"
learnMore: "আরও জানুন"
misskeyUpdated: "Misskey আপডেট করা হয়েছে!"
misskeyUpdated: "FoundKey আপডেট করা হয়েছে!"
whatIsNew: "পরিবর্তনগুলি দেখান"
translate: "অনুবাদ"
translatedFrom: "{x} হতে অনুবাদ করা"
accountDeletionInProgress: "অ্যাকাউন্ট মুছে ফেলা হচ্ছে"
usernameInfo: "একটি নাম যা সার্ভারে আপনার অ্যাকাউন্টটিকে অনন্যভাবে সনাক্ত করে। আপনি বর্ণমালা (a ~ z, A ~ Z), সংখ্যা (0 ~ 9), এবং আন্ডারস্কোর (_) ব্যবহার করতে পারেন। ব্যবহারকারীর নাম পরে পরিবর্তন করা যাবে না।"
aiChanMode: "Ai মোড"
keepCw: "CW রাখুন"
pubSub: "Pub/Sub অ্যাকাউন্টগুলো"
lastCommunication: "শেষ যোগাযোগ"
@ -885,21 +881,18 @@ _registry:
domain: "ডোমেন"
createKey: "কী বানান"
_aboutMisskey:
about: "Misskey, একটি ওপেন সোর্স সফ্টওয়্যার যা 2014 সাল থেকে syuilo তৈরি করছেন।"
about: "FoundKey, একটি ওপেন সোর্স সফ্টওয়্যার যা 2014 সাল থেকে syuilo তৈরি করছেন।"
contributors: "প্রধান কন্ট্রিবিউটারগণ"
allContributors: "সকল কন্ট্রিবিউটারগণ"
source: "সোর্স কোড"
translation: "Misskey অনুবাদ করুন"
donate: "Misskey তে দান করুন"
morePatrons: "আরও অনেকে আমাদের সাহায্য করছেন। তাদের সবাইকে ধন্যবাদ 🥰"
patrons: "সমর্থনকারী"
translation: "FoundKey অনুবাদ করুন"
_nsfw:
respect: "স্পর্শকাতর মিডিয়া লুকান"
ignore: "স্পর্শকাতর মিডিয়া লুকাবেন না"
force: "সকল মিডিয়া লুকান"
_mfm:
cheatSheet: "MFM চিটশিট"
intro: "MFM একটি মার্কআপ ভাষা যা Misskey-এর মধ্যে বিভিন্ন জায়গায় ব্যবহার করা যেতে পারে। এখানে আপনি MFM-এর সিনট্যাক্সগুলির একটি তালিকা দেখতে পারবেন।"
intro: "MFM একটি মার্কআপ ভাষা যা FoundKey-এর মধ্যে বিভিন্ন জায়গায় ব্যবহার করা যেতে পারে। এখানে আপনি MFM-এর সিনট্যাক্সগুলির একটি তালিকা দেখতে পারবেন।"
dummy: "মিসকি ফেডিভার্সের বিশ্বকে প্রসারিত করে"
mention: "উল্লেখ"
mentionDescription: "@ চিহ্ন + ব্যবহারকারীর নাম একটি নির্দিষ্ট ব্যবহারকারীকে নির্দেশ করতে ব্যবহার করা যায়।"
@ -1096,7 +1089,7 @@ _time:
hour: "ঘণ্টা"
day: "দিন"
_tutorial:
title: "Misskey কিভাবে ব্যাবহার করবেন"
title: "FoundKey কিভাবে ব্যাবহার করবেন"
step1_1: "স্বাগতম!"
step1_2: "এই স্ক্রীনটিকে \"টাইমলাইন\" বলা হয় এবং কালানুক্রমিক ক্রমে আপনার এবং আপনি যাদের \"অনুসরণ করেন\" তাদের \"নোটগুলি\" দেখায়৷"
step1_3: "আপনি আপনার টাইমলাইনে কিছু দেখতে পাবেন না কারণ আপনি এখনও কোনো নোট পোস্ট করেননি এবং আপনি কাউকে অনুসরণ করছেন না৷"
@ -1115,9 +1108,9 @@ _tutorial:
step6_1: "সবকিছু ঠিক থাকলে আপনি টাইমলাইনে অন্য ব্যবহারকারীদের নোট দেখতে পাবেন।"
step6_2: "আপনি সহজেই আপনার প্রতিক্রিয়া জানাতে অন্য ব্যক্তির নোটে \"রিঅ্যাকশন\" যোগ করতে পারেন।"
step6_3: "একটি রিঅ্যাকশন যোগ করতে, নোটে \"+\" চিহ্নে ক্লিক করুন এবং আপনার পছন্দের রিঅ্যাকশন নির্বাচন করুন।"
step7_1: "অভিনন্দন! আপনি এখন Misskey-র প্রাথমিক টিউটোরিয়ালটি শেষ করেছেন।"
step7_2: "আপনি যদি Misskey সম্পর্কে আরও জানতে চান, তাহলে {help} এ দেখুন।"
step7_3: "এখন Misskey উপভোগ করুন 🚀"
step7_1: "অভিনন্দন! আপনি এখন FoundKey-র প্রাথমিক টিউটোরিয়ালটি শেষ করেছেন।"
step7_2: "আপনি যদি FoundKey সম্পর্কে আরও জানতে চান, তাহলে {help} এ দেখুন।"
step7_3: "এখন FoundKey উপভোগ করুন 🚀"
_2fa:
alreadyRegistered: "আপনি ইতিমধ্যে একটি 2-ফ্যাক্টর অথেনটিকেশন ডিভাইস নিবন্ধন করেছেন৷"
registerDevice: "নতুন ডিভাইস নিবন্ধন করুন"

View file

@ -1,7 +1,7 @@
---
_lang_: "Català"
headlineMisskey: "Una xarxa connectada per notes"
introMisskey: "Benvingut! Misskey és un servei de microblogging descentralitzat de codi obert.\nCrea \"notes\" per compartir els teus pensaments amb tots els que t'envolten. 📡\nAmb \"reaccions\", també pots expressar ràpidament els teus sentiments sobre les notes de tothom. 👍\nExplorem un món nou! 🚀"
introMisskey: "Benvingut! FoundKey és un servei de microblogging descentralitzat de codi obert.\nCrea \"notes\" per compartir els teus pensaments amb tots els que t'envolten. 📡\nAmb \"reaccions\", també pots expressar ràpidament els teus sentiments sobre les notes de tothom. 👍\nExplorem un món nou! 🚀"
monthAndDay: "{day}/{month}"
search: "Cercar"
notifications: "Notificacions"
@ -108,7 +108,6 @@ add: "Afegir"
reaction: "Reaccions"
reactionSetting: "Reaccions a mostrar al selector de reaccions"
reactionSettingDescription2: "Arrossega per reordenar, fes clic per suprimir, prem \"+\" per afegir."
rememberNoteVisibility: "Recorda la configuració de visibilitat de les notes"
attachCancel: "Eliminar el fitxer adjunt"
markAsSensitive: "Marcar com a NSFW"
instances: "Instàncies"

View file

@ -1,7 +1,7 @@
---
_lang_: "Čeština"
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! FoundKey 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! 🚀"
monthAndDay: "{day}. {month}."
search: "Vyhledávání"
notifications: "Oznámení"
@ -105,7 +105,6 @@ sensitive: "NSFW"
add: "Přidat"
reaction: "Reakce"
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"
attachCancel: "Odstranit přílohu"
markAsSensitive: "Označit jako NSFW"
unmarkAsSensitive: "Odznačit jako NSFW"
@ -135,7 +134,7 @@ settingGuide: "Doporučené nastavení"
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."
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í FoundKey systém aby se choval k tomuhle účtu jako bot."
flagAsCat: "Tenhle účet je kočka"
flagAsCatDescription: "Vyberte tuto možnost aby tento účet byl označen jako kočka."
flagShowTimelineReplies: "Zobrazovat odpovědi na časové ose"
@ -188,7 +187,7 @@ blockedInstances: "Blokované instance"
noUsers: "Žádní uživatelé"
editProfile: "Upravit můj profil"
pinLimitExceeded: "Nemůžete připnout další poznámky."
intro: "Instalace Misskey byla dokončena! Prosím vytvořte admina."
intro: "Instalace FoundKey byla dokončena! Prosím vytvořte admina."
done: "Hotovo"
processing: "Zpracovávám"
preview: "Náhled"
@ -241,6 +240,7 @@ remoteUserCaution: "Tyto informace nemusí být aktuální jelikož uživatel je
activity: "Aktivita"
images: "Obrázky"
birthday: "Datum narození"
yearsOld: "{age} let"
registeredDate: "Datum registrace"
location: "Lokace"
theme: "Vzhled"
@ -322,7 +322,7 @@ connectedTo: "Následující účty jsou připojeny"
popularTags: "Populární tagy"
userList: "Seznamy"
about: "Informace"
aboutMisskey: "O Misskey"
aboutMisskey: "O FoundKey"
administrator: "Administrátor"
token: "Token"
twoStepAuthentication: "Dvoufaktorová autentikace"

View file

@ -1,7 +1,7 @@
---
_lang_: "Deutsch"
headlineMisskey: "Ein durch Notizen verbundenes Netzwerk"
introMisskey: "Willkommen! Misskey ist eine dezentralisierte Open-Source Microblogging-Platform.\nVerfasse „Notizen“ um mitzuteilen, was gerade passiert oder um Ereignisse mit anderen zu teilen. 📡\nMit „Reaktionen“ kannst du außerdem schnell deine Gefühle über Notizen anderer Benutzer zum Ausdruck bringen. 👍\nEine neue Welt wartet auf dich! 🚀"
introMisskey: "Willkommen! FoundKey ist eine dezentralisierte Open-Source Microblogging-Platform.\nVerfasse „Notizen“ um mitzuteilen, was gerade passiert oder um Ereignisse mit anderen zu teilen. 📡\nMit „Reaktionen“ kannst du außerdem schnell deine Gefühle über Notizen anderer Benutzer zum Ausdruck bringen. 👍\nEine neue Welt wartet auf dich! 🚀"
monthAndDay: "{day}.{month}."
search: "Suchen"
notifications: "Benachrichtigungen"
@ -109,7 +109,6 @@ add: "Hinzufügen"
reaction: "Reaktionen"
reactionSetting: "In der Reaktionsauswahl anzuzeigende Reaktionen"
reactionSettingDescription2: "Ziehe um Anzuordnen, klicke um zu löschen, drücke „+“ um hinzuzufügen"
rememberNoteVisibility: "Notizsichtbarkeit merken"
attachCancel: "Anhang entfernen"
markAsSensitive: "Als NSFW markieren"
unmarkAsSensitive: "Als nicht NSFW markieren"
@ -139,7 +138,7 @@ settingGuide: "Empfohlene Einstellung"
cacheRemoteFiles: "Dateien von fremden Instanzen im Cache speichern"
cacheRemoteFilesDescription: "Ist diese Einstellung deaktiviert, so werden Dateien fremder Instanzen direkt von dort geladen. Hierdurch wird Speicherplatz auf diesem Server gespart, aber durch fehlende Generierung von Vorschaubildern mehr Bandbreite verwendet."
flagAsBot: "Als Bot markieren"
flagAsBotDescription: "Aktiviere diese Option, falls dieses Benutzerkonto durch ein Programm gesteuert wird. Falls aktiviert, agiert es als Flag für andere Entwickler zur Verhinderung von endlosen Kettenreaktionen mit anderen Bots und lässt Misskeys interne Systeme dieses Benutzerkonto als Bot behandeln."
flagAsBotDescription: "Aktiviere diese Option, falls dieses Benutzerkonto durch ein Programm gesteuert wird. Falls aktiviert, agiert es als Flag für andere Entwickler zur Verhinderung von endlosen Kettenreaktionen mit anderen Bots und lässt FoundKeys interne Systeme dieses Benutzerkonto als Bot behandeln."
flagAsCat: "Als Katze markieren"
flagAsCatDescription: "Aktiviere diese Option, um dieses Benutzerkonto als Katze zu markieren."
flagShowTimelineReplies: "Antworten in der Chronik anzeigen"
@ -199,7 +198,7 @@ noUsers: "Keine Benutzer gefunden"
editProfile: "Profil bearbeiten"
noteDeleteConfirm: "Möchtest du diese Notiz wirklich löschen?"
pinLimitExceeded: "Du kannst nicht noch mehr Notizen anheften."
intro: "Misskey ist installiert! Lass uns nun ein Administratorkonto einrichten."
intro: "FoundKey ist installiert! Lass uns nun ein Administratorkonto einrichten."
done: "Fertig"
processing: "In Bearbeitung …"
preview: "Vorschau"
@ -259,6 +258,7 @@ remoteUserCaution: "Diese Informationen sind möglicherweise unvollständig, da
activity: "Aktivität"
images: "Bilder"
birthday: "Geburtstag"
yearsOld: "{age} Jahre alt"
registeredDate: "Registrationsdatum"
location: "Ort"
theme: "Farbschema"
@ -376,7 +376,7 @@ exploreFediverse: "Das Fediverse erkunden"
popularTags: "Beliebte Schlagwörter"
userList: "Liste"
about: "Über"
aboutMisskey: "Über Misskey"
aboutMisskey: "Über FoundKey"
administrator: "Administrator"
token: "Token"
twoStepAuthentication: "Zwei-Faktor-Authentifizierung"
@ -519,10 +519,9 @@ sort: "Sortieren"
ascendingOrder: "Aufsteigende Reihenfolge"
descendingOrder: "Absteigende Reihenfolge"
scratchpad: "Testumgebung"
scratchpadDescription: "Die Testumgebung bietet einen Bereich für AiScript-Experimente. Dort kannst du AiScript schreiben, ausführen sowie dessen Auswirkungen auf Misskey überprüfen."
scratchpadDescription: "Die Testumgebung bietet einen Bereich für AiScript-Experimente. Dort kannst du AiScript schreiben, ausführen sowie dessen Auswirkungen auf FoundKey überprüfen."
output: "Ausgabe"
script: "Skript"
disablePagesScript: "AiScript auf Seiten deaktivieren"
updateRemoteUser: "Benutzerinformationen aktualisieren"
deleteAllFiles: "Alle Dateien löschen"
deleteAllFilesConfirm: "Möchtest du wirklich alle Dateien löschen?"
@ -641,7 +640,7 @@ createNew: "Neu erstellen"
optional: "Optional"
createNewClip: "Neuen Clip erstellen"
public: "Öffentlich"
i18nInfo: "Misskey wird durch freiwillige Helfer in viele verschiedene Sprachen übersetzt. Auf {link} kannst du mithelfen."
i18nInfo: "FoundKey wird durch freiwillige Helfer in viele verschiedene Sprachen übersetzt. Auf {link} kannst du mithelfen."
manageAccessTokens: "Zugriffstokens verwalten"
accountInfo: "Benutzerkonto-Informationen"
notesCount: "Anzahl der Notizen"
@ -691,8 +690,6 @@ clearCache: "Cache leeren"
onlineUsersCount: "{n} Benutzer sind online"
nUsers: "{n} Benutzer"
nNotes: "{n} Notizen"
sendErrorReports: "Fehlerberichte senden"
sendErrorReportsDescription: "Ist diese Option aktiviert, so werden beim Auftreten von Fehlern detaillierte Fehlerinformationen an Misskey weitergegeben, was zur Verbesserung der Qualität von Misskey beiträgt.\nEnthalten in diesen Informationen sind u.a. die Version deines Betriebssystems, welchen Browser du verwendest und ein Verlauf deiner Aktivitäten innerhalb Misskey."
myTheme: "Mein Farbschema"
backgroundColor: "Hintergrundfarbe"
accentColor: "Akzentfarbe"
@ -758,6 +755,7 @@ noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert.
noBotProtectionWarning: "Schutz vor Bots ist nicht konfiguriert."
configure: "Konfigurieren"
postToGallery: "Neuen Galeriebeitrag erstellen"
attachmentRequired: "Mindestens 1 Anhang ist erforderlich."
gallery: "Galerie"
recentPosts: "Neue Beiträge"
popularPosts: "Beliebte Beiträge"
@ -782,13 +780,12 @@ hashtags: "Hashtags"
troubleshooting: "Problembehandlung"
useBlurEffect: "Weichzeichnungseffekt in der Benutzeroberfläche verwenden"
learnMore: "Mehr erfahren"
misskeyUpdated: "Misskey wurde aktualisiert!"
misskeyUpdated: "FoundKey wurde aktualisiert!"
whatIsNew: "Änderungen anzeigen"
translate: "Übersetzen"
translatedFrom: "Aus {x} übersetzt"
accountDeletionInProgress: "Die Löschung deines Benutzerkontos ist momentan in Bearbeitung."
usernameInfo: "Ein Name, durch den dein Benutzerkonto auf diesem Server identifiziert werden kann. Du kannst das Alphabet (a~z, A~Z), Ziffern (0~9) oder Unterstriche (_) verwenden. Benutzernamen können später nicht geändert werden."
aiChanMode: "Ai-Modus"
keepCw: "Inhaltswarnungen beibehalten"
pubSub: "Pub/Sub Benutzerkonten"
lastCommunication: "Letzte Kommunikation"
@ -888,22 +885,19 @@ _registry:
domain: "Domain"
createKey: "Schlüssel erstellen"
_aboutMisskey:
about: "Misskey ist Open-Source-Software, welche von syuilo seit 2014 entwickelt wird."
about: "FoundKey ist Open-Source-Software, welche von syuilo seit 2014 entwickelt wird."
contributors: "Hauptmitwirkende"
allContributors: "Alle Mitwirkenden"
source: "Quellcode"
translation: "Misskey übersetzen"
donate: "An Misskey spenden"
morePatrons: "Wir schätzen ebenso die Unterstützung vieler anderer hier nicht gelisteter Personen sehr. Danke! 🥰"
patrons: "UnterstützerInnen"
translation: "FoundKey übersetzen"
_nsfw:
respect: "Als NSFW markierte Bilder verbergen"
ignore: "Als NSFW markierte Bilder nicht verbergen"
force: "Alle Medien verbergen"
_mfm:
cheatSheet: "MFM Spickzettel"
intro: "MFM ist eine Misskey-exklusive Markup-Sprache, die in Misskey an vielen Stellen verwendet werden kann. Hier kannst du eine Liste von verfügbarer MFM-Syntax einsehen."
dummy: "Misskey erweitert die Welt des Fediverse"
intro: "MFM ist eine FoundKey-exklusive Markup-Sprache, die in FoundKey an vielen Stellen verwendet werden kann. Hier kannst du eine Liste von verfügbarer MFM-Syntax einsehen."
dummy: "FoundKey erweitert die Welt des Fediverse"
mention: "Erwähnung"
mentionDescription: "Mit At-Zeichen und Benutzername kann ein individueller Nutzer angegeben werden."
hashtag: "Hashtag"
@ -1099,7 +1093,7 @@ _time:
hour: "Stunde(n)"
day: "Tag(en)"
_tutorial:
title: "Wie du Misskey verwendest"
title: "Wie du FoundKey verwendest"
step1_1: "Willkommen!"
step1_2: "Diese Seite ist die „Chronik“. Sie zeigt dir deine geschrieben „Notizen“ sowie die aller Benutzer, denen du „folgst“, in chronologischer Reihenfolge."
step1_3: "Deine Chronik sollte momentan leer sein, da du bis jetzt noch keine Notizen geschrieben hast und auch noch keinen Benutzern folgst."
@ -1108,7 +1102,7 @@ _tutorial:
step3_1: "Mit dem Einrichten deines Profils fertig?"
step3_2: "Dann lass uns als nächstes versuchen, eine Notiz zu schreiben. Dies kannst du tun, indem du auf den Knopf mit dem Stift-Icon auf dem Bildschirm drückst."
step3_3: "Fülle das Fenster aus und drücke auf den Knopf oben rechts zum Senden."
step3_4: "Fällt dir nichts ein, das du schreiben möchtest? Versuch's mit \"Hallo Misskey!\""
step3_4: "Fällt dir nichts ein, das du schreiben möchtest? Versuch's mit \"Hallo FoundKey!\""
step4_1: "Fertig mit dem Senden deiner ersten Notiz?"
step4_2: "Falls deine Notiz nun in deiner Chronik auftaucht, hast du alles richtig gemacht."
step5_1: "Lass uns nun deiner Chronik etwas mehr Leben einhauchen, indem du einigen anderen Benutzern folgst."
@ -1118,9 +1112,9 @@ _tutorial:
step6_1: "Wenn du nun auch die Notizen anderer Benutzer in deiner Chronik siehst, hast du auch diesmal alles richtig gemacht."
step6_2: "Du kannst ebenso „Reaktionen“ verwenden, um schnell auf Notizen anderer Benutzer zu reagieren."
step6_3: "Um eine Reaktion anzufügen, klicke auf das „+“-Symbol in der Notiz und wähle ein Emoji aus, mit dem du reagieren möchtest."
step7_1: "Glückwunsch! Du hast die Einführung in die Verwendung von Misskey abgeschlossen."
step7_2: "Wenn du mehr über Misskey lernen möchtest, schau dich im {help}-Bereich um."
step7_3: "Und nun, viel Spaß mit Misskey! 🚀"
step7_1: "Glückwunsch! Du hast die Einführung in die Verwendung von FoundKey abgeschlossen."
step7_2: "Wenn du mehr über FoundKey lernen möchtest, schau dich im {help}-Bereich um."
step7_3: "Und nun, viel Spaß mit FoundKey! 🚀"
_2fa:
alreadyRegistered: "Du hast bereits ein Gerät für Zwei-Faktor-Authentifizierung registriert."
registerDevice: "Neues Gerät registrieren"

View file

@ -1,7 +1,7 @@
---
_lang_: "English"
headlineMisskey: "A network connected by notes"
introMisskey: "Welcome! Misskey is an open source, decentralized microblogging service.\nCreate \"notes\" to share your thoughts with everyone around you. 📡\nWith \"reactions\", you can also quickly express your feelings about everyone's notes. 👍\nLet's explore a new world! 🚀"
introMisskey: "Welcome! FoundKey is an open source, decentralized microblogging service.\nCreate \"notes\" to share your thoughts with everyone around you. 📡\nWith \"reactions\", you can also quickly express your feelings about everyone's notes. 👍\nLet's explore a new world! 🚀"
monthAndDay: "{month}/{day}"
search: "Search"
notifications: "Notifications"
@ -109,7 +109,6 @@ add: "Add"
reaction: "Reactions"
reactionSetting: "Reactions to show in the reaction picker"
reactionSettingDescription2: "Drag to reorder, click to delete, press \"+\" to add."
rememberNoteVisibility: "Remember note visibility settings"
attachCancel: "Remove attachment"
markAsSensitive: "Mark as NSFW"
unmarkAsSensitive: "Unmark as NSFW"
@ -139,7 +138,7 @@ settingGuide: "Recommended settings"
cacheRemoteFiles: "Cache remote files"
cacheRemoteFilesDescription: "When this setting is disabled, remote files are loaded directly from the remote instance. Disabling this will decrease storage usage, but increase traffic, as thumbnails will not be generated."
flagAsBot: "Mark this account as a bot"
flagAsBotDescription: "Enable this option if this account is controlled by a program. If enabled, it will act as a flag for other developers to prevent endless interaction chains with other bots and adjust Misskey's internal systems to treat this account as a bot."
flagAsBotDescription: "Enable this option if this account is controlled by a program. If enabled, it will act as a flag for other developers to prevent endless interaction chains with other bots and adjust FoundKey's internal systems to treat this account as a bot."
flagAsCat: "Mark this account as a cat"
flagAsCatDescription: "Enable this option to mark this account as a cat."
flagShowTimelineReplies: "Show replies in timeline"
@ -199,7 +198,7 @@ noUsers: "There are no users"
editProfile: "Edit profile"
noteDeleteConfirm: "Are you sure you want to delete this note?"
pinLimitExceeded: "You cannot pin any more notes"
intro: "Installation of Misskey has been finished! Please create an admin user."
intro: "Installation of FoundKey has been finished! Please create an admin user."
done: "Done"
processing: "Processing..."
preview: "Preview"
@ -259,6 +258,7 @@ remoteUserCaution: "As this user is from a remote instance, the shown informatio
activity: "Activity"
images: "Images"
birthday: "Birthday"
yearsOld: "{age} years old"
registeredDate: "Joined on"
location: "Location"
theme: "Themes"
@ -376,7 +376,7 @@ exploreFediverse: "Explore the Fediverse"
popularTags: "Popular tags"
userList: "Lists"
about: "About"
aboutMisskey: "About Misskey"
aboutMisskey: "About FoundKey"
administrator: "Administrator"
token: "Token"
twoStepAuthentication: "Two-factor authentication"
@ -519,10 +519,9 @@ sort: "Sort"
ascendingOrder: "Ascending"
descendingOrder: "Descending"
scratchpad: "Scratchpad"
scratchpadDescription: "The Scratchpad provides an environment for AiScript experiments. You can write, execute, and check the results of it interacting with Misskey in it."
scratchpadDescription: "The Scratchpad provides an environment for AiScript experiments. You can write, execute, and check the results of it interacting with FoundKey in it."
output: "Output"
script: "Script"
disablePagesScript: "Disable AiScript on Pages"
updateRemoteUser: "Update remote user information"
deleteAllFiles: "Delete all files"
deleteAllFilesConfirm: "Are you sure that you want to delete all files?"
@ -641,7 +640,7 @@ createNew: "Create new"
optional: "Optional"
createNewClip: "Create new clip"
public: "Public"
i18nInfo: "Misskey is being translated into various languages by volunteers. You can help at {link}."
i18nInfo: "FoundKey is being translated into various languages by volunteers. You can help at {link}."
manageAccessTokens: "Manage access tokens"
accountInfo: "Account Info"
notesCount: "Number of notes"
@ -691,8 +690,6 @@ clearCache: "Clear cache"
onlineUsersCount: "{n} users are online"
nUsers: "{n} Users"
nNotes: "{n} Notes"
sendErrorReports: "Send error reports"
sendErrorReportsDescription: "When turned on, detailed error information will be shared with Misskey when a problem occurs, helping to improve the quality of Misskey.\nThis will include information such the version of your OS, what browser you're using, your activity in Misskey, etc."
myTheme: "My theme"
backgroundColor: "Background color"
accentColor: "Accent color"
@ -758,6 +755,7 @@ noMaintainerInformationWarning: "Maintainer information is not configured."
noBotProtectionWarning: "Bot protection is not configured."
configure: "Configure"
postToGallery: "Create new gallery post"
attachmentRequired: "At least 1 attachment is required."
gallery: "Gallery"
recentPosts: "Recent posts"
popularPosts: "Popular posts"
@ -782,13 +780,12 @@ hashtags: "Hashtags"
troubleshooting: "Troubleshooting"
useBlurEffect: "Use blur effects in the UI"
learnMore: "Learn more"
misskeyUpdated: "Misskey has been updated!"
misskeyUpdated: "FoundKey has been updated!"
whatIsNew: "Show changes"
translate: "Translate"
translatedFrom: "Translated from {x}"
accountDeletionInProgress: "Account deletion is currently in progress"
usernameInfo: "A name that identifies your account from others on this server. You can use the alphabet (a~z, A~Z), digits (0~9) or underscores (_). Usernames cannot be changed later."
aiChanMode: "Ai Mode"
keepCw: "Keep content warnings"
pubSub: "Pub/Sub Accounts"
lastCommunication: "Last communication"
@ -847,6 +844,7 @@ typeToConfirm: "Please enter {x} to confirm"
deleteAccount: "Delete account"
numberOfPageCache: "Number of cached pages"
numberOfPageCacheDescription: "Increasing this number will improve convenience for users but cause more server load as well as more memory to be used."
document: "Document"
file: "File"
unclip: "Unclip"
confirmToUnclipAlreadyClippedNote: "This note is already part of the \"{name}\" clip. Do you want to remove it from this clip instead?"
@ -854,6 +852,7 @@ noEmailServerWarning: "Email server not configured."
thereIsUnresolvedAbuseReportWarning: "There are unsolved reports."
recommended: "Recommended"
check: "Check"
unlimited: "Unlimited"
_emailUnavailable:
used: "This email address is already being used"
format: "The format of this email address is invalid"
@ -903,22 +902,19 @@ _registry:
domain: "Domain"
createKey: "Create key"
_aboutMisskey:
about: "Misskey is open-source software being developed by syuilo since 2014."
about: "FoundKey is a fork of Misskey developed since July 2022."
contributors: "Main contributors"
allContributors: "All contributors"
source: "Source code"
translation: "Translate Misskey"
donate: "Donate to Misskey"
morePatrons: "We also appreciate the support of many other helpers not listed here. Thank you! 🥰"
patrons: "Patrons"
translation: "Translate FoundKey"
_nsfw:
respect: "Hide NSFW media"
ignore: "Don't hide NSFW media"
force: "Hide all media"
_mfm:
cheatSheet: "MFM Cheatsheet"
intro: "MFM is a Misskey-exclusive markup language that can be used in many places. Here you can view a list of all available MFM syntax."
dummy: "Misskey expands the world of the Fediverse"
intro: "MFM is a FoundKey-exclusive markup language that can be used in many places. Here you can view a list of all available MFM syntax."
dummy: "FoundKey expands the world of the Fediverse"
mention: "Mention"
mentionDescription: "You can specify a user by using an At-Symbol and a username."
hashtag: "Hashtag"
@ -987,6 +983,8 @@ _serverDisconnectedBehavior:
reload: "Automatically reload"
dialog: "Show warning dialog"
quiet: "Show unobtrusive warning"
maxCustomEmojiPicker: "Maximum suggested custom emoji in picker"
maxUnicodeEmojiPicker: "Maximum suggested unicode emoji in picker"
_channel:
create: "Create channel"
edit: "Edit channel"
@ -1114,7 +1112,7 @@ _time:
hour: "Hour(s)"
day: "Day(s)"
_tutorial:
title: "How to use Misskey"
title: "How to use FoundKey"
step1_1: "Welcome!"
step1_2: "This page is called the \"timeline\". It shows chronologically ordered \"notes\" of people who you \"follow\"."
step1_3: "Your timeline is currently empty, since you have not posted any notes or followed anyone yet."
@ -1133,9 +1131,9 @@ _tutorial:
step6_1: "You should be able to see other users' notes on your timeline now."
step6_2: "You can also put \"reactions\" on other people's notes to quickly respond to them."
step6_3: "To attach a \"reaction\", press the \"+\" mark on another user's note and choose an emoji you'd like to react with."
step7_1: "Congratulations! You have now finished Misskey's basic tutorial."
step7_2: "If you would like to learn more about Misskey, try the {help} section."
step7_3: "Now then, good luck and have fun with Misskey! 🚀"
step7_1: "Congratulations! You have now finished FoundKey's basic tutorial."
step7_2: "If you would like to learn more about FoundKey, try the {help} section."
step7_3: "Now then, good luck and have fun with FoundKey! 🚀"
_2fa:
alreadyRegistered: "You have already registered a 2-factor authentication device."
registerDevice: "Register a new device"
@ -1410,3 +1408,13 @@ _deck:
list: "List"
mentions: "Mentions"
direct: "Direct notes"
_services:
_discord:
connected: "Discord: @{username}#{discriminator} connected to FoundKey: @{mkUsername}!"
disconnected: "Discord linkage has been removed :v:"
_twitter:
connected: "Twitter: @{twitterUserName} connected to FoundKey: @{userName}!"
disconnected: "Twitter linkage has been removed :v:"
_github:
connected: "GitHub: @{login} connected to FoundKey: @{userName}!"
disconnected: "GitHub linkage has been removed :v:"

View file

@ -1,7 +1,7 @@
---
_lang_: "Español"
headlineMisskey: "Red conectada por notas"
introMisskey: "¡Bienvenido/a! Misskey es un servicio de microblogging descentralizado de código abierto.\nEscribe \"notas\" para compartir lo que te ocurre ahora o para contar sobre ti a todos 📡\nCon la función de \"reacciones\", puedes también añadir una reacción rápida a las notas de todos 👍\nExplora un nuevo mundo 🚀"
introMisskey: "¡Bienvenido/a! FoundKey es un servicio de microblogging descentralizado de código abierto.\nEscribe \"notas\" para compartir lo que te ocurre ahora o para contar sobre ti a todos 📡\nCon la función de \"reacciones\", puedes también añadir una reacción rápida a las notas de todos 👍\nExplora un nuevo mundo 🚀"
monthAndDay: "{day}/{month}"
search: "Buscar"
notifications: "Notificaciones"
@ -108,7 +108,6 @@ add: "Agregar"
reaction: "Reacción"
reactionSetting: "Reacciones para mostrar en el menú de reacciones"
reactionSettingDescription2: "Arrastre para reordenar, click para borrar, apriete la tecla + para añadir."
rememberNoteVisibility: "Recordar visibilidad"
attachCancel: "Quitar adjunto"
markAsSensitive: "Marcar como sensible"
unmarkAsSensitive: "Desmarcar como sensible"
@ -138,7 +137,7 @@ settingGuide: "Configuración sugerida"
cacheRemoteFiles: "Mantener en cache los archivos remotos"
cacheRemoteFilesDescription: "Si desactiva esta configuración, Los archivos remotos se cargarán desde el link directo sin usar la caché. Con eso se puede ahorrar almacenamiento del servidor, pero eso aumentará el tráfico al no crear miniaturas."
flagAsBot: "Esta cuenta es un bot"
flagAsBotDescription: "En caso de que esta cuenta fuera usada por un programa, active esta opción. Al hacerlo, esta opción servirá para otros desarrolladores para evitar cadenas infinitas de reacciones, y ajustará los sistemas internos de Misskey para que trate a esta cuenta como un bot."
flagAsBotDescription: "En caso de que esta cuenta fuera usada por un programa, active esta opción. Al hacerlo, esta opción servirá para otros desarrolladores para evitar cadenas infinitas de reacciones, y ajustará los sistemas internos de FoundKey para que trate a esta cuenta como un bot."
flagAsCat: "Esta cuenta es un gato"
flagAsCatDescription: "En caso de que declare que esta cuenta es de un gato, active esta opción."
flagShowTimelineReplies: "Mostrar respuestas a las notas en la biografía"
@ -198,7 +197,7 @@ noUsers: "No hay usuarios"
editProfile: "Editar perfil"
noteDeleteConfirm: "¿Desea borrar esta nota?"
pinLimitExceeded: "Ya no se pueden fijar más posts"
intro: "¡La instalación de Misskey ha terminado! Crea el usuario administrador."
intro: "¡La instalación de FoundKey ha terminado! Crea el usuario administrador."
done: "Terminado"
processing: "Procesando"
preview: "Vista previa"
@ -258,6 +257,7 @@ remoteUserCaution: "Para el usuario remoto, la información está incompleta"
activity: "Actividad"
images: "Imágenes"
birthday: "Fecha de nacimiento"
yearsOld: "{age} años"
registeredDate: "Fecha de registro"
location: "Lugar"
theme: "Tema"
@ -375,7 +375,7 @@ exploreFediverse: "Explorar fediverso"
popularTags: "Etiquetas populares"
userList: "Lista"
about: "Información"
aboutMisskey: "Sobre Misskey"
aboutMisskey: "Sobre FoundKey"
administrator: "Administrador"
token: "Token"
twoStepAuthentication: "Autenticación de dos factores"
@ -518,10 +518,9 @@ sort: "Ordenar"
ascendingOrder: "Ascendente"
descendingOrder: "Descendente"
scratchpad: "Scratch pad"
scratchpadDescription: "Scratchpad proporciona un entorno experimental para AiScript. Puede escribir, ejecutar y verificar los resultados que interactúan con Misskey."
scratchpadDescription: "Scratchpad proporciona un entorno experimental para AiScript. Puede escribir, ejecutar y verificar los resultados que interactúan con FoundKey."
output: "Salida"
script: "Script"
disablePagesScript: "Deshabilitar AiScript en Páginas"
updateRemoteUser: "Actualizar información de usuario remoto"
deleteAllFiles: "Borrar todos los archivos"
deleteAllFilesConfirm: "¿Desea borrar todos los archivos?"
@ -637,7 +636,7 @@ createNew: "Crear"
optional: "Opcional"
createNewClip: "Crear clip nuevo"
public: "Público"
i18nInfo: "Misskey está siendo traducido a varios idiomas gracias a voluntarios. Se puede colaborar traduciendo en {link}"
i18nInfo: "FoundKey está siendo traducido a varios idiomas gracias a voluntarios. Se puede colaborar traduciendo en {link}"
manageAccessTokens: "Administrar tokens de acceso"
accountInfo: "Información de la Cuenta"
notesCount: "Cantidad de notas"
@ -687,8 +686,6 @@ clearCache: "Limpiar caché"
onlineUsersCount: "{n} usuarios en línea"
nUsers: "{n} Usuarios"
nNotes: "{n} Notas"
sendErrorReports: "Envíar informe de errores"
sendErrorReportsDescription: "Si habilita esta opción, ayudará a mejorar la calidad de Misskey compartiendo información detallada sobre los errores cuando se produzca un problema.\nEsto incluye información como la versión de su sistema operativo, el tipo de navegador que utiliza, su historial de actividad, etc."
myTheme: "Mi Tema"
backgroundColor: "Fondo"
accentColor: "Acento"
@ -777,13 +774,12 @@ hashtags: "Hashtag"
troubleshooting: "Solución de problemas"
useBlurEffect: "Utilizar efecto de desenfoque en la interfaz de usuario"
learnMore: "Ver más"
misskeyUpdated: Misskey ha sido actualizado!"
misskeyUpdated: FoundKey ha sido actualizado!"
whatIsNew: "Mostrar cambios"
translate: "Traducir"
translatedFrom: "Traducido de {x}"
accountDeletionInProgress: "La eliminación de la cuenta está en curso"
usernameInfo: "Un nombre que identifique su cuenta de otras en este servidor. Puede utilizar el alfabeto (a~z, A~Z), dígitos (0~9) o guiones bajos (_). Los nombres de usuario no se pueden cambiar posteriormente."
aiChanMode: "Modo Ai"
keepCw: "Mantener la advertencia de contenido"
pubSub: "Cuentas Pub/Sub"
lastCommunication: "Última comunicación"
@ -833,22 +829,19 @@ _registry:
domain: "Dominio"
createKey: "Crear una llave"
_aboutMisskey:
about: "Misskey es un software de código abierto, desarrollado por syuilo desde el 2014"
about: "FoundKey es un software de código abierto, desarrollado por syuilo desde el 2014"
contributors: "Principales colaboradores"
allContributors: "Todos los colaboradores"
source: "Código fuente"
translation: "Traducir Misskey"
donate: "Donar a Misskey"
morePatrons: "Muchas más personas nos apoyan. Muchas gracias🥰"
patrons: "Patrocinadores"
translation: "Traducir FoundKey"
_nsfw:
respect: "Ocultar medios NSFW"
ignore: "No esconder medios NSFW "
force: "Ocultar todos los medios"
_mfm:
cheatSheet: "Hoja de referencia de MFM"
intro: "MFM es un lenguaje de marcado dedicado que se puede usar en varios lugares dentro de Misskey. Aquí puede ver una lista de sintaxis disponibles en MFM."
dummy: "Misskey expande el mundo de la Fediverso"
intro: "MFM es un lenguaje de marcado dedicado que se puede usar en varios lugares dentro de FoundKey. Aquí puede ver una lista de sintaxis disponibles en MFM."
dummy: "FoundKey expande el mundo de la Fediverso"
mention: "Menciones"
mentionDescription: "El signo @ seguido de un nombre de usuario se puede utilizar para notificar a un usuario en particular."
hashtag: "Hashtag"
@ -998,7 +991,7 @@ _time:
hour: "Horas"
day: "Días"
_tutorial:
title: "Cómo usar Misskey"
title: "Cómo usar FoundKey"
step1_1: "Bienvenido"
step1_2: "Esta imagen se llama \"Linea de tiempo\" y muestra en orden cronológico las \"notas\" tuyas y de la gente que \"sigues\""
step1_3: "Si no estás escribiendo ninguna nota y no estás siguiendo a nadie, es esperable que no se muestre nada en la linea de tiempo"
@ -1007,7 +1000,7 @@ _tutorial:
step3_1: "¿Has podido crear tu perfil sin problemas?"
step3_2: "Con esto, prueba hacer una nota. Aprieta el botón con forma de lápiz que está arriba de la imagen y abre el formulario."
step3_3: "Si has escrito el contenido, aprieta el botón que está arriba a la derecha del formulario para postear."
step3_4: "¿No se te ocurre un contenido? Prueba con decir \"Empecé a usar Misskey\""
step3_4: "¿No se te ocurre un contenido? Prueba con decir \"Empecé a usar FoundKey\""
step4_1: "¿Has posteado?"
step4_2: "Si tu nota puede verse en la linea de tiempo, fue todo un éxito."
step5_1: "Luego, ponte a seguir a otra gente y haz que tu linea de tiempo esté más animada."
@ -1017,9 +1010,9 @@ _tutorial:
step6_1: "Si puedes ver en la linea de tiempo las notas de otros usuarios, fue todo un éxito."
step6_2: "En las notas de otros usuarios puedes añadir una \"reacción\", para poder responder rápidamente."
step6_3: "Para añadir una reacción, haz click en el botón \"+\" de la nota y elige la reacción que prefieras."
step7_1: "Así terminó la explicación del funcionamiento básico de Misskey. Eso fue todo."
step7_2: "Si quieres conocer más sobre Misskey, prueba con la sección {help}."
step7_3: "Así, disfruta de Misskey 🚀"
step7_1: "Así terminó la explicación del funcionamiento básico de FoundKey. Eso fue todo."
step7_2: "Si quieres conocer más sobre FoundKey, prueba con la sección {help}."
step7_3: "Así, disfruta de FoundKey 🚀"
_2fa:
alreadyRegistered: "Ya has completado la configuración."
registerDevice: "Registrar dispositivo"

View file

@ -1,7 +1,7 @@
---
_lang_: "Français"
headlineMisskey: "Réseau relié par des notes"
introMisskey: "Bienvenue ! Misskey est un service de microblogage décentralisé, libre et ouvert.\nÉcrivez des « notes » et partagez ce qui se passe à linstant présent, autour de vous avec les autres 📡\nLa fonction « réactions », vous permet également dajouter une réaction rapide aux notes des autres utilisateur·rice·s 👍\nExplorons un nouveau monde 🚀"
introMisskey: "Bienvenue ! FoundKey est un service de microblogage décentralisé, libre et ouvert.\nÉcrivez des « notes » et partagez ce qui se passe à linstant présent, autour de vous avec les autres 📡\nLa fonction « réactions », vous permet également dajouter une réaction rapide aux notes des autres utilisateur·rice·s 👍\nExplorons un nouveau monde 🚀"
monthAndDay: "{day}/{month}"
search: "Rechercher"
notifications: "Notifications"
@ -108,7 +108,6 @@ add: "Ajouter"
reaction: "Réactions"
reactionSetting: "Réactions à afficher dans le sélecteur de réactions"
reactionSettingDescription2: "Déplacer pour réorganiser, cliquer pour effacer, utiliser « + » pour ajouter."
rememberNoteVisibility: "Activer l'option \" se souvenir de la visibilité des notes \" vous permet de réutiliser automatiquement la visibilité utilisée lors de la publication de votre note précédente."
attachCancel: "Supprimer le fichier attaché"
markAsSensitive: "Marquer comme sensible"
unmarkAsSensitive: "Supprimer le marquage comme sensible"
@ -138,7 +137,7 @@ settingGuide: "Configuration proposée"
cacheRemoteFiles: "Mise en cache des fichiers distants"
cacheRemoteFilesDescription: "Lorsque cette option est désactivée, les fichiers distants sont chargés directement depuis linstance distante. La désactiver diminuera certes lutilisation de lespace de stockage local mais augmentera le trafic réseau puisque les miniatures ne seront plus générées."
flagAsBot: "Ce compte est un robot"
flagAsBotDescription: "Si ce compte est géré de manière automatisée, choisissez cette option. Si elle est activée, elle agira comme un marqueur pour les autres développeurs afin d'éviter des chaînes d'interaction sans fin avec d'autres robots et d'ajuster les systèmes internes de Misskey pour traiter ce compte comme un robot."
flagAsBotDescription: "Si ce compte est géré de manière automatisée, choisissez cette option. Si elle est activée, elle agira comme un marqueur pour les autres développeurs afin d'éviter des chaînes d'interaction sans fin avec d'autres robots et d'ajuster les systèmes internes de FoundKey pour traiter ce compte comme un robot."
flagAsCat: "Ce compte est un chat"
flagAsCatDescription: "Activer l'option \" Je suis un chat \" pour ce compte."
flagShowTimelineReplies: "Afficher les réponses dans le fil"
@ -197,7 +196,7 @@ noUsers: "Il ny a pas dutilisateur·rice·s"
editProfile: "Modifier votre profil"
noteDeleteConfirm: "Êtes-vous sûr·e de vouloir supprimer cette note ?"
pinLimitExceeded: "Vous ne pouvez plus épingler dautres notes."
intro: "Linstallation de Misskey est terminée ! Veuillez créer un compte administrateur."
intro: "Linstallation de FoundKey est terminée ! Veuillez créer un compte administrateur."
done: "Terminé"
processing: "Traitement en cours"
preview: "Aperçu"
@ -256,6 +255,7 @@ remoteUserCaution: "Les informations de ce compte risqueraient dêtre incompl
activity: "Activité"
images: "Images"
birthday: "Date de naissance"
yearsOld: "{age} ans"
registeredDate: "Inscrit le"
location: "Localisation"
theme: "Thème"
@ -373,7 +373,7 @@ exploreFediverse: "Explorer le Fediverse"
popularTags: "Mots-clés populaires"
userList: "Listes"
about: "Informations"
aboutMisskey: "À propos de Misskey"
aboutMisskey: "À propos de FoundKey"
administrator: "Administrateur"
token: "Jeton"
twoStepAuthentication: "Authentification à deux facteurs"
@ -515,10 +515,9 @@ sort: "Trier"
ascendingOrder: "Ascendant"
descendingOrder: "Descendant"
scratchpad: "ScratchPad"
scratchpadDescription: "ScratchPad fournit un environnement expérimental pour AiScript. Vous pouvez vérifier la rédaction de votre code, sa bonne exécution et le résultat de son interaction avec Misskey."
scratchpadDescription: "ScratchPad fournit un environnement expérimental pour AiScript. Vous pouvez vérifier la rédaction de votre code, sa bonne exécution et le résultat de son interaction avec FoundKey."
output: "Sortie"
script: "Script"
disablePagesScript: "Désactiver AiScript sur les Pages"
updateRemoteUser: "Mettre à jour les informations de lutilisateur·rice distant·e"
deleteAllFiles: "Supprimer tous les fichiers"
deleteAllFilesConfirm: "Êtes-vous sûr·e de vouloir supprimer tous les fichiers ?"
@ -635,7 +634,7 @@ createNew: "Créer nouveau"
optional: "Facultatif"
createNewClip: "Créer un nouveau clip"
public: "Public"
i18nInfo: "Misskey est traduit dans différentes langues par des bénévoles. Vous pouvez contribuer à {link}."
i18nInfo: "FoundKey est traduit dans différentes langues par des bénévoles. Vous pouvez contribuer à {link}."
manageAccessTokens: "Gérer les jetons d'accès"
accountInfo: " Informations du compte "
notesCount: "Nombre de notes"
@ -685,8 +684,6 @@ clearCache: "Vider le cache"
onlineUsersCount: "{n} utilisateur(s) en ligne"
nUsers: "{n} utilisateur·rice·s"
nNotes: "{n} Notes"
sendErrorReports: "Envoyer les rapports derreur"
sendErrorReportsDescription: "Si vous activez l'envoi des rapports d'erreur, vous contribuerez à améliorer la qualité de Misskey grâce au partage d'informations détaillées sur les erreurs lorsqu'un problème survient.\nCela inclut des informations telles que la version de votre système d'exploitation, le type de navigateur que vous utilisez, votre historique d'activité, etc."
myTheme: "Mes thèmes"
backgroundColor: "Arrière-plan"
accentColor: "Accentuation"
@ -776,13 +773,12 @@ hashtags: "Hashtags"
troubleshooting: "Résolution de problèmes"
useBlurEffect: "Utiliser des effets de flou dans l'interface"
learnMore: "Plus d'informations"
misskeyUpdated: "Misskey a été mis à jour !"
misskeyUpdated: "FoundKey a été mis à jour !"
whatIsNew: "Voir les derniers changements"
translate: "Traduire"
translatedFrom: "Traduit depuis {x}"
accountDeletionInProgress: "La suppression de votre compte est en cours"
usernameInfo: "C'est un nom qui identifie votre compte sur l'instance de manière unique. Vous pouvez utiliser des lettres de l'alphabet (minuscules et majuscules), des chiffres (de 0 à 9), ou bien le tiret « _ ». Vous ne pourrez pas modifier votre nom d'utilisateur·rice par la suite."
aiChanMode: "Mode Ai"
keepCw: "Garder le CW"
pubSub: "Comptes Pub/Sub"
lastCommunication: "Dernière communication"
@ -874,22 +870,19 @@ _registry:
domain: "Domaine"
createKey: "Créer une clé"
_aboutMisskey:
about: "Misskey est un logiciel libre et ouvert, développé par syuilo depuis 2014."
about: "FoundKey est un logiciel libre et ouvert, développé par syuilo depuis 2014."
contributors: "Principaux contributeurs"
allContributors: "Tous les contributeurs"
source: "Code source"
translation: "Traduire Misskey"
donate: "Soutenir Misskey"
morePatrons: "Nous apprécions vraiment le soutien de nombreuses autres personnes non mentionnées ici. Merci à toutes et à tous ! 🥰"
patrons: "Contributeurs"
translation: "Traduire FoundKey"
_nsfw:
respect: "Cacher les médias marqués comme contenu sensible"
ignore: "Afficher les médias sensibles"
force: "Cacher tous les médias"
_mfm:
cheatSheet: "Antisèche MFM"
intro: "MFM est un langage Markdown spécifique utilisable ici et là dans Misskey. Vous pouvez vérifier ici les structures utilisables avec MFM."
dummy: "La Fédiverse s'agrandit avec Misskey"
intro: "MFM est un langage Markdown spécifique utilisable ici et là dans FoundKey. Vous pouvez vérifier ici les structures utilisables avec MFM."
dummy: "La Fédiverse s'agrandit avec FoundKey"
mention: "Mentionner"
mentionDescription: "Vous pouvez afficher un utilisateur spécifique en indiquant une arobase suivie d'un nom d'utilisateur"
hashtag: "Hashtags"
@ -1083,7 +1076,7 @@ _time:
hour: "h"
day: "j"
_tutorial:
title: "Comment utiliser Misskey"
title: "Comment utiliser FoundKey"
step1_1: "Bienvenue,"
step1_2: "Cette page est appelée « un fil ». Elle affiche les « notes » des personnes auxquelles vous êtes abonné dans un ordre chronologique."
step1_3: "Votre fil est actuellement vide vu que vous ne suivez aucun compte et que vous navez publié aucune note, pour linstant."
@ -1092,7 +1085,7 @@ _tutorial:
step3_1: "Vous avez fini de créer votre profil ?"
step3_2: "Létape suivante consiste à créer une note. Vous pouvez commencer en cliquant sur licône crayon sur lécran."
step3_3: "Remplissez le cadran et cliquez sur le bouton en haut à droite pour envoyer."
step3_4: "Vous navez rien à dire ? Essayez décrire « Jai commencé à utiliser Misskey »."
step3_4: "Vous navez rien à dire ? Essayez décrire « Jai commencé à utiliser FoundKey »."
step4_1: "Avez-vous publié votre première note ?"
step4_2: "Youpi ! Celle-ci est maintenant affichée sur votre fil dactualité."
step5_1: "Maintenant, essayons de nous abonner à dautres personnes afin de rendre votre fil plus vivant."
@ -1102,9 +1095,9 @@ _tutorial:
step6_1: "Maintenant, vous êtes en mesure de voir safficher les notes des autres utilisateur·rice·s sur votre propre fil."
step6_2: "Vous avez également la possibilité dintéragir rapidement avec les notes des autres utilisateur·rice·s en ajoutant des « réactions »."
step6_3: "Pour ajouter une réaction à une note, cliquez sur le signe « + » de celle-ci et sélectionnez lémoji souhaité."
step7_1: "Félicitations ! Vous avez atteint la fin du tutoriel de base pour lutilisation de Misskey."
step7_2: "Si vous désirez en savoir plus sur Misskey, jetez un œil sur la section {help}."
step7_3: "Bon courage et amusez-vous bien sur Misskey ! 🚀"
step7_1: "Félicitations ! Vous avez atteint la fin du tutoriel de base pour lutilisation de FoundKey."
step7_2: "Si vous désirez en savoir plus sur FoundKey, jetez un œil sur la section {help}."
step7_3: "Bon courage et amusez-vous bien sur FoundKey ! 🚀"
_2fa:
alreadyRegistered: "Configuration déjà achevée."
registerDevice: "Ajouter un nouvel appareil"

View file

@ -1,7 +1,7 @@
---
_lang_: "Bahasa Indonesia"
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! FoundKey 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🚀"
monthAndDay: "{day} {month}"
search: "Penelusuran"
notifications: "Pemberitahuan"
@ -108,7 +108,6 @@ add: "Tambahkan"
reaction: "Reaksi"
reactionSetting: "Reaksi untuk dimunculkan di bilah reaksi"
reactionSettingDescription2: "Geser untuk memindah urutkan, klik untuk menghapus, tekan \"+\" untuk menambahkan"
rememberNoteVisibility: "Ingat pengaturan visibilitas catatan"
attachCancel: "Hapus lampiran"
markAsSensitive: "Tandai sebagai konten sensitif"
unmarkAsSensitive: "Hapus tanda konten sensitif"
@ -138,7 +137,7 @@ settingGuide: "Pengaturan rekomendasi"
cacheRemoteFiles: "Tembolokkan berkas remote"
cacheRemoteFilesDescription: "Ketika pengaturan ini dinonaktifkan, berkas luar akan dimuat langsung dari instansi luar. Menonaktifkan ini akan mengurangi penggunaan penyimpanan, namun dapat menyebabkan meningkatkan lalu lintas bandwidth, karena thumbnail tidak dihasilkan."
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 FoundKey untuk memperlakukan akun ini sebagai bot."
flagAsCat: "Atur akun ini sebagai kucing"
flagAsCatDescription: "Nyalakan tanda ini untuk menandai akun ini sebagai kucing."
flagShowTimelineReplies: "Tampilkan balasan di linimasa"
@ -198,7 +197,7 @@ noUsers: "Tidak ada pengguna"
editProfile: "Sunting profil"
noteDeleteConfirm: "Apakah kamu yakin ingin menghapus catatan ini?"
pinLimitExceeded: "Kamu tidak dapat menyematkan catatan lagi"
intro: "Instalasi Misskey telah selesai! Mohon untuk membuat pengguna admin."
intro: "Instalasi FoundKey telah selesai! Mohon untuk membuat pengguna admin."
done: "Selesai"
processing: "Memproses"
preview: "Pratinjau"
@ -258,6 +257,7 @@ remoteUserCaution: "Informasi ini mungkin tidak mutakhir, karena pengguna ini be
activity: "Aktivitas"
images: "Gambar"
birthday: "Tanggal lahir"
yearsOld: "{age} tahun"
registeredDate: "Bergabung pada"
location: "Lokasi"
theme: "Tema"
@ -375,7 +375,7 @@ exploreFediverse: "Jelajahi Fediverse"
popularTags: "Tag populer"
userList: "Daftar"
about: "Informasi"
aboutMisskey: "Tentang Misskey"
aboutMisskey: "Tentang FoundKey"
administrator: "Admin"
token: "Token"
twoStepAuthentication: "Otentikasi dua faktor"
@ -518,10 +518,9 @@ sort: "Urutkan"
ascendingOrder: "Urutkan naik"
descendingOrder: "Urutkan menurun"
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 FoundKey."
output: "Keluaran"
script: "Script"
disablePagesScript: "Nonaktifkan script pada halaman"
updateRemoteUser: "Perbaharui informasi pengguna luar"
deleteAllFiles: "Hapus semua berkas"
deleteAllFilesConfirm: "Apakah kamu yakin ingin menghapus semua berkas?"
@ -640,7 +639,7 @@ createNew: "Buat baru"
optional: "Opsional"
createNewClip: "Buat klip baru"
public: "Publik"
i18nInfo: "Misskey diterjemahkan ke dalam banyak bahasa oleh sukarelawan. Kamu dapat ikut membantu di {link}."
i18nInfo: "FoundKey diterjemahkan ke dalam banyak bahasa oleh sukarelawan. Kamu dapat ikut membantu di {link}."
manageAccessTokens: "Kelola access token"
accountInfo: "Informasi akun"
notesCount: "Jumlah catatan"
@ -690,8 +689,6 @@ clearCache: "Hapus tembolok"
onlineUsersCount: "{n} orang sedang daring"
nUsers: "{n} Pengguna"
nNotes: "{n} Catatan"
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."
myTheme: "Tema saya"
backgroundColor: "Latar Belakang"
accentColor: "Aksen"
@ -781,13 +778,12 @@ hashtags: "Tagar"
troubleshooting: "Penyelesaian Masalah"
useBlurEffect: "Gunakan efek blur pada antarmuka"
learnMore: "Pelajari lebih lanjut"
misskeyUpdated: "Misskey telah dimutakhirkan!"
misskeyUpdated: "FoundKey telah dimutakhirkan!"
whatIsNew: "Lihat perubahan pemutakhiran"
translate: "Terjemahkan"
translatedFrom: "Terjemahkan dari {x}"
accountDeletionInProgress: "Penghapusan akun sedang dalam proses"
usernameInfo: "Nama yang mengidentifikasikan akun kamu dari yang lain pada server ini. Kamu dapat menggunakan alfabet (a~z, A~Z), digit (0~9) atau garis bawah (_). Username tidak dapat diubah setelahnya."
aiChanMode: "Mode Ai"
keepCw: "Biarkan Peringatan Konten"
pubSub: "Akun Pub/Sub"
lastCommunication: "Komunikasi terakhir"
@ -887,22 +883,19 @@ _registry:
domain: "Domain"
createKey: "Buat kunci"
_aboutMisskey:
about: "Misskey adalah perangkat lunak sumber terbuka yang sedang dikembangkan oleh syuilo sejak 2014."
about: "FoundKey adalah perangkat lunak sumber terbuka yang sedang dikembangkan oleh syuilo sejak 2014."
contributors: "Kontributor utama"
allContributors: "Seluruh kontributor"
source: "Sumber kode"
translation: "Terjemahkan Misskey"
donate: "Donasi ke Misskey"
morePatrons: "Kami sangat mengapresiasi dukungan dari banyak penolong lain yang tidak tercantum disini. Terima kasih! 🥰"
patrons: "Pendukung"
translation: "Terjemahkan FoundKey"
_nsfw:
respect: "Sembunyikan media NSFW"
ignore: "Jangan sembunyikan media NSFW"
force: "Sembunyikan semua media"
_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."
dummy: "Misskey membentangkan dunia Fediverse"
intro: "MFM adalah FoundKey-exclusive Markup Language yang dapat digunakan di banyak tempat. Berikut kamu bisa melihat daftar dari syntax MFM yang ada."
dummy: "FoundKey membentangkan dunia Fediverse"
mention: "Sebut"
mentionDescription: "Kamu dapat menentukan pengguna tertentu dengan menggunakan simbol-At dan nama engguna mereka."
hashtag: "Tagar"
@ -1098,7 +1091,7 @@ _time:
hour: "jam"
day: "hari"
_tutorial:
title: "Cara menggunakan Misskey"
title: "Cara menggunakan FoundKey"
step1_1: "Selamat datang!"
step1_2: "Halaman ini disebut \"linimasa\". Halaman ini menampilkan \"catatan\" yang diurutkan secara kronologis dari orang-orang yang kamu \"ikuti\"."
step1_3: "Linimasa kamu kosong, karena kamu belum mencatat catatan apapun atau mengikuti siapapun."
@ -1117,8 +1110,8 @@ _tutorial:
step6_1: "Sekarang kamu dapat melihat catatan pengguna lain pada linimasamu."
step6_2: "Kamu juga bisa memberikan \"reaksi\" ke catatan orang lain untuk merespon dengan cepat."
step6_3: "Untuk memberikan \"reaksi\", tekan tanda \"+\" pada catatan pengguna lain dan pilih emoji yang kamu suka untuk memberikan reaksimu kepada mereka."
step7_1: "Yay, Selamat! Kamu sudah menyelesaikan tutorial dasar Misskey."
step7_2: "Jika kamu ingin mempelajari lebih lanjut tentang Misskey, cobalah berkunjung ke bagian {help}."
step7_1: "Yay, Selamat! Kamu sudah menyelesaikan tutorial dasar FoundKey."
step7_2: "Jika kamu ingin mempelajari lebih lanjut tentang FoundKey, cobalah berkunjung ke bagian {help}."
step7_3: "Semoga berhasil dan bersenang-senanglah! 🚀"
_2fa:
alreadyRegistered: "Kamu telah mendaftarkan perangkat otentikasi dua faktor."

View file

@ -1,7 +1,7 @@
---
_lang_: "Italiano"
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@! FoundKey è 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}"
search: "Cerca"
notifications: "Notifiche"
@ -108,7 +108,6 @@ add: "Aggiungi"
reaction: "Reazione"
reactionSetting: "Reazioni visualizzate sul pannello"
reactionSettingDescription2: "Trascina per riorganizzare, clicca per cancellare, usa il pulsante \"+\" per aggiungere."
rememberNoteVisibility: "Ricordare le impostazioni di visibilità delle note"
attachCancel: "Rimuovi allegato"
markAsSensitive: "Segna come sensibile"
unmarkAsSensitive: "Segna come non sensibile"
@ -138,7 +137,7 @@ settingGuide: "Configurazione suggerita"
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."
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 FoundKey perché trattino questo account come un bot."
flagAsCat: "Io sono un gatto"
flagAsCatDescription: "Abilita l'opzione \"Io sono un gatto\" per l'account."
autoAcceptFollowed: "Accetta automaticamente le richieste di follow da utenti che già segui"
@ -196,7 +195,7 @@ noUsers: "Nessun utente trovato"
editProfile: "Modifica profilo"
noteDeleteConfirm: "Eliminare questo Nota?"
pinLimitExceeded: "Non puoi fissare altre note "
intro: "L'installazione di Misskey è finita! Si prega di creare un account amministratore."
intro: "L'installazione di FoundKey è finita! Si prega di creare un account amministratore."
done: "Fine"
processing: "In elaborazione"
preview: "Anteprima"
@ -254,6 +253,7 @@ remoteUserCaution: "Può darsi che le informazioni siano incomplete perché ques
activity: "Attività"
images: "Immagini"
birthday: "Compleanno"
yearsOld: "{age}Anni"
registeredDate: "Iscrizione a.."
location: "Posizione"
theme: "Tema"
@ -371,7 +371,7 @@ exploreFediverse: "Esplora il Fediverso"
popularTags: "Tag di tendenza"
userList: "Liste"
about: "Informazioni"
aboutMisskey: "Informazioni di Misskey"
aboutMisskey: "Informazioni di FoundKey"
administrator: "Amministratore"
token: "Token"
twoStepAuthentication: "Autenticazione a due fattori"
@ -514,10 +514,9 @@ sort: "Ordina per"
ascendingOrder: "Ascendente"
descendingOrder: "Discendente"
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 FoundKey."
output: "Uscita"
script: "Script"
disablePagesScript: "Disabilita AiScript nelle pagine"
updateRemoteUser: "Aggiornare le informazioni di utente remot@"
deleteAllFiles: "Elimina tutti i file"
deleteAllFilesConfirm: "Vuoi davvero eliminare tutti i file?"
@ -632,7 +631,7 @@ createNew: "Crea nuov@"
optional: "Opzionale"
createNewClip: "Nuova clip"
public: "Pubblica"
i18nInfo: "Misskey è tradotto in diverse lingue da volontari. Anche tu puoi contribuire su {link}."
i18nInfo: "FoundKey è tradotto in diverse lingue da volontari. Anche tu puoi contribuire su {link}."
manageAccessTokens: "Gestisci token di accesso"
accountInfo: "Informazioni account"
notesCount: "Conteggio note"
@ -681,8 +680,6 @@ clearCache: "Svuota cache"
onlineUsersCount: "{n} utenti online"
nUsers: "{n} utenti"
nNotes: "{n}Note"
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."
myTheme: "I miei temi"
backgroundColor: "Sfondo"
textColor: "Testo"
@ -768,13 +765,12 @@ hashtags: "Hashtag"
troubleshooting: "Risoluzione problemi"
useBlurEffect: "Utilizza effetto sfocatura per l'interfaccia utente"
learnMore: "Più dettagli"
misskeyUpdated: "Misskey è stato aggiornato!"
misskeyUpdated: "FoundKey è stato aggiornato!"
whatIsNew: "Visualizza le informazioni sull'aggiornamento"
translate: "Traduzione"
translatedFrom: "Tradotto da {x}"
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."
aiChanMode: "Modalità Ai"
keepCw: "Mantieni il CW"
resolved: "Risolto"
unresolved: "Non risolto"
@ -848,22 +844,19 @@ _registry:
domain: "Dominio"
createKey: "Crea chiave"
_aboutMisskey:
about: "Misskey è un software libero e open source, sviluppato da syuilo dal 2014."
about: "FoundKey è un software libero e open source, sviluppato da syuilo dal 2014."
contributors: "Principali sostenitori"
allContributors: "Tutti i sostenitori"
source: "Codice sorgente"
translation: "Tradurre Misskey"
donate: "Sostieni Misskey"
morePatrons: "Apprezziamo sinceramente il supporto di tante altre persone. Grazie mille! 🥰"
patrons: "Sostenitori"
translation: "Tradurre FoundKey"
_nsfw:
respect: "Nascondere i media segnati come sensibli"
ignore: "Visualizzare i media segnati come sensibili"
force: "Nascondere tutti i media"
_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."
dummy: "Il Fediverso si espande con Misskey"
intro: "MFM è un linguaggio Markdown particolare che si può usare in diverse parti di FoundKey. Qui puoi visualizzare a colpo d'occhio tutta la sintassi MFM utile."
dummy: "Il Fediverso si espande con FoundKey"
mention: "Menzioni"
mentionDescription: "Si può menzionare un utente specifico digitando il suo nome utente subito dopo il segno @."
hashtag: "Hashtag"
@ -1012,7 +1005,7 @@ _time:
hour: "ore"
day: "giorni"
_tutorial:
title: "Come usare Misskey"
title: "Come usare FoundKey"
step1_1: "Benvenuto/a!"
step1_2: "Questa pagina si chiama una \" Timeline \". Mostra in ordine cronologico le \" note \" delle persone che segui."
step1_3: "Attualmente la tua Timeline è vuota perché non segui alcun account e non hai pubblicato alcuna nota ancora."
@ -1021,7 +1014,7 @@ _tutorial:
step3_1: "Hai finito di impostare il tuo profilo?"
step3_2: "Ora, puoi pubblicare una nota. Facciamo una prova! Premi il pulsante a forma di penna in cima allo schermo per aprire una finestra di dialogo. "
step3_3: "Scritto il testo della nota, puoi pubblicarla premendo il pulsante nella parte superiore destra della finestra di dialogo."
step3_4: "Non ti viene niente in mente? Perché non scrivi semplicemente \"Ho appena cominciato a usare Misskey\"?"
step3_4: "Non ti viene niente in mente? Perché non scrivi semplicemente \"Ho appena cominciato a usare FoundKey\"?"
step4_1: "Hai pubblicato qualcosa?"
step4_2: "Se puoi visualizzare la tua nota sulla timeline, ce l'hai fatta!"
step5_1: "Adesso, cerca di seguire altre persone per vivacizzare la tua timeline. "
@ -1031,9 +1024,9 @@ _tutorial:
step6_1: "Ora, se puoi visualizzare le note di altrə utenti sulla tua timeline, ce l'hai fatta!"
step6_2: "Puoi inviare una risposta rapida alle note di altrə utenti mandando loro \"reazioni\"."
step6_3: "Per inviare una reazione, premi l'icona + della nota e scegli l'emoji che vuoi mandare."
step7_1: "Complimenti! Sei arrivat@ alla fine dell'esercitazione di base su come usare Misskey. "
step7_2: "Se vuoi saperne di più su Misskey, puoi dare un'occhiata alla sezione {help}."
step7_3: "Da ultimo, buon divertimento su Misskey! 🚀"
step7_1: "Complimenti! Sei arrivat@ alla fine dell'esercitazione di base su come usare FoundKey. "
step7_2: "Se vuoi saperne di più su FoundKey, puoi dare un'occhiata alla sezione {help}."
step7_3: "Da ultimo, buon divertimento su FoundKey! 🚀"
_2fa:
registerDevice: "Aggiungi dispositivo"
_permissions:

View file

@ -1,7 +1,7 @@
_lang_: "日本語"
headlineMisskey: "ノートでつながるネットワーク"
introMisskey: "ようこそ!Misskeyは、オープンソースの分散型マイクロブログサービスです。\n「ート」を作成して、いま起こっていることを共有したり、あなたについて皆に発信しよう📡\n「リアクション」機能で、皆のートに素早く反応を追加することもできます👍\n新しい世界を探検しよう🚀"
introMisskey: "ようこそ!FoundKeyは、オープンソースの分散型マイクロブログサービスです。\n「ート」を作成して、いま起こっていることを共有したり、あなたについて皆に発信しよう📡\n「リアクション」機能で、皆のートに素早く反応を追加することもできます👍\n新しい世界を探検しよう🚀"
monthAndDay: "{month}月 {day}日"
search: "検索"
notifications: "通知"
@ -109,7 +109,6 @@ add: "追加"
reaction: "リアクション"
reactionSetting: "ピッカーに表示するリアクション"
reactionSettingDescription2: "ドラッグして並び替え、クリックして削除、+を押して追加します。"
rememberNoteVisibility: "公開範囲を記憶する"
attachCancel: "添付取り消し"
markAsSensitive: "閲覧注意にする"
unmarkAsSensitive: "閲覧注意を解除する"
@ -139,7 +138,7 @@ settingGuide: "おすすめ設定"
cacheRemoteFiles: "リモートのファイルをキャッシュする"
cacheRemoteFilesDescription: "この設定を無効にすると、リモートファイルをキャッシュせず直リンクするようになります。サーバーのストレージを節約できますが、サムネイルが生成されないので通信量が増加します。"
flagAsBot: "Botとして設定"
flagAsBotDescription: "このアカウントがプログラムによって運用される場合は、このフラグをオンにします。オンにすると、反応の連鎖を防ぐためのフラグとして他の開発者に役立ったり、Misskeyのシステム上での扱いがBotに合ったものになります。"
flagAsBotDescription: "このアカウントがプログラムによって運用される場合は、このフラグをオンにします。オンにすると、反応の連鎖を防ぐためのフラグとして他の開発者に役立ったり、FoundKeyのシステム上での扱いがBotに合ったものになります。"
flagAsCat: "Catとして設定"
flagAsCatDescription: "このアカウントが猫であることを示す場合は、このフラグをオンにします。"
flagShowTimelineReplies: "タイムラインにノートへの返信を表示する"
@ -199,7 +198,7 @@ noUsers: "ユーザーはいません"
editProfile: "プロフィールを編集"
noteDeleteConfirm: "このノートを削除しますか?"
pinLimitExceeded: "これ以上ピン留めできません"
intro: "Misskeyのインストールが完了しました管理者アカウントを作成しましょう。"
intro: "FoundKeyのインストールが完了しました管理者アカウントを作成しましょう。"
done: "完了"
processing: "処理中"
preview: "プレビュー"
@ -259,6 +258,7 @@ remoteUserCaution: "リモートユーザーのため、情報が不完全です
activity: "アクティビティ"
images: "画像"
birthday: "誕生日"
yearsOld: "{age}歳"
registeredDate: "登録日"
location: "場所"
theme: "テーマ"
@ -376,7 +376,7 @@ exploreFediverse: "Fediverseを探索"
popularTags: "人気のタグ"
userList: "リスト"
about: "情報"
aboutMisskey: "Misskeyについて"
aboutMisskey: "FoundKeyについて"
administrator: "管理者"
token: "トークン"
twoStepAuthentication: "二段階認証"
@ -519,10 +519,9 @@ sort: "ソート"
ascendingOrder: "昇順"
descendingOrder: "降順"
scratchpad: "スクラッチパッド"
scratchpadDescription: "スクラッチパッドは、AiScriptの実験環境を提供します。Misskeyと対話するコードの記述、実行、結果の確認ができます。"
scratchpadDescription: "スクラッチパッドは、AiScriptの実験環境を提供します。FoundKeyと対話するコードの記述、実行、結果の確認ができます。"
output: "出力"
script: "スクリプト"
disablePagesScript: "Pagesのスクリプトを無効にする"
updateRemoteUser: "リモートユーザー情報の更新"
deleteAllFiles: "すべてのファイルを削除"
deleteAllFilesConfirm: "すべてのファイルを削除しますか?"
@ -643,7 +642,7 @@ createNewClip: "新しいクリップを作成"
unclip: "クリップ解除"
confirmToUnclipAlreadyClippedNote: "このノートはすでにクリップ「{name}」に含まれています。ノートをこのクリップから除外しますか?"
public: "パブリック"
i18nInfo: "Misskeyは有志によって様々な言語に翻訳されています。{link}で翻訳に協力できます。"
i18nInfo: "FoundKeyは有志によって様々な言語に翻訳されています。{link}で翻訳に協力できます。"
manageAccessTokens: "アクセストークンの管理"
accountInfo: "アカウント情報"
notesCount: "ノートの数"
@ -693,8 +692,6 @@ clearCache: "キャッシュをクリア"
onlineUsersCount: "{n}人がオンライン"
nUsers: "{n}ユーザー"
nNotes: "{n}ノート"
sendErrorReports: "エラーリポートを送信"
sendErrorReportsDescription: "オンにすると、問題が発生したときにエラーの詳細情報がMisskeyに共有され、ソフトウェアの品質向上に役立てることができます。エラー情報には、OSのバージョン、ブラウザの種類、行動履歴などが含まれます。"
myTheme: "マイテーマ"
backgroundColor: "背景"
accentColor: "アクセント"
@ -784,13 +781,12 @@ hashtags: "ハッシュタグ"
troubleshooting: "トラブルシューティング"
useBlurEffect: "UIにぼかし効果を使用"
learnMore: "詳しく"
misskeyUpdated: "Misskeyが更新されました"
misskeyUpdated: "FoundKeyが更新されました"
whatIsNew: "更新情報を見る"
translate: "翻訳"
translatedFrom: "{x}から翻訳"
accountDeletionInProgress: "アカウントの削除が進行中です"
usernameInfo: "サーバー上であなたのアカウントを一意に識別するための名前。アルファベット(a~z, A~Z)、数字(0~9)、およびアンダーバー(_)が使用できます。ユーザー名は後から変更することは出来ません。"
aiChanMode: "藍モード"
keepCw: "CWを維持する"
pubSub: "Pub/Subのアカウント"
lastCommunication: "直近の通信"
@ -853,6 +849,7 @@ typeToConfirm: "この操作を行うには {x} と入力してください"
deleteAccount: "アカウント削除"
numberOfPageCache: "ページキャッシュ数"
numberOfPageCacheDescription: "多くすると利便性が向上しますが、負荷とメモリ使用量が増えます。"
document: "ドキュメント"
_emailUnavailable:
used: "既に使用されています"
@ -913,14 +910,11 @@ _registry:
createKey: "キーを作成"
_aboutMisskey:
about: "Misskeyはsyuiloによって2014年から開発されている、オープンソースのソフトウェアです。"
about: "FoundKeyはsyuiloによって2014年から開発されている、オープンソースのソフトウェアです。"
contributors: "主なコントリビューター"
allContributors: "全てのコントリビューター"
source: "ソースコード"
translation: "Misskeyを翻訳"
donate: "Misskeyに寄付"
morePatrons: "他にも多くの方が支援してくれています。ありがとうございます🥰"
patrons: "支援者"
translation: "FoundKeyを翻訳"
_nsfw:
respect: "閲覧注意のメディアは隠す"
@ -929,8 +923,8 @@ _nsfw:
_mfm:
cheatSheet: "MFMチートシート"
intro: "MFMは、Misskey内の様々な場所で使用できる専用のマークアップ言語です。ここでは、MFMで使用可能な構文一覧が確認できます。"
dummy: "MisskeyでFediverseの世界が広がります"
intro: "MFMは、FoundKey内の様々な場所で使用できる専用のマークアップ言語です。ここでは、MFMで使用可能な構文一覧が確認できます。"
dummy: "FoundKeyでFediverseの世界が広がります"
mention: "メンション"
mentionDescription: "アットマーク + ユーザー名で、特定のユーザーを示すことができます。"
hashtag: "ハッシュタグ"
@ -1138,7 +1132,7 @@ _time:
day: "日"
_tutorial:
title: "Misskeyの使い方"
title: "FoundKeyの使い方"
step1_1: "ようこそ。"
step1_2: "この画面は「タイムライン」と呼ばれ、あなたや、あなたが「フォロー」する人の「ノート」が時系列で表示されます。"
step1_3: "あなたはまだ何もノートを投稿しておらず、誰もフォローしていないので、タイムラインには何も表示されていないはずです。"
@ -1147,7 +1141,7 @@ _tutorial:
step3_1: "プロフィール設定はうまくできましたか?"
step3_2: "では試しに、何かノートを投稿してみてください。画面上にある鉛筆マークのボタンを押すとフォームが開きます。"
step3_3: "内容を書いたら、フォーム右上のボタンを押すと投稿できます。"
step3_4: "内容が思いつかない?「Misskey始めました」というのはいかがでしょう。"
step3_4: "内容が思いつかない?「FoundKey始めました」というのはいかがでしょう。"
step4_1: "投稿できましたか?"
step4_2: "あなたのノートがタイムラインに表示されていれば成功です。"
step5_1: "次は、他の人をフォローしてタイムラインを賑やかにしたいところです。"
@ -1157,9 +1151,9 @@ _tutorial:
step6_1: "タイムラインに他のユーザーのノートが表示されていれば成功です。"
step6_2: "他の人のノートには、「リアクション」を付けることができ、簡単にあなたの反応を伝えられます。"
step6_3: "リアクションを付けるには、ノートの「+」マークをクリックして、好きなリアクションを選択します。"
step7_1: "これで、Misskeyの基本的な使い方の説明は終わりました。お疲れ様でした。"
step7_2: "もっとMisskeyについて知りたいときは、{help}を見てみてください。"
step7_3: "では、Misskeyをお楽しみください🚀"
step7_1: "これで、FoundKeyの基本的な使い方の説明は終わりました。お疲れ様でした。"
step7_2: "もっとFoundKeyについて知りたいときは、{help}を見てみてください。"
step7_3: "では、FoundKeyをお楽しみください🚀"
_2fa:
alreadyRegistered: "既に設定は完了しています。"
@ -1456,3 +1450,13 @@ _deck:
list: "リスト"
mentions: "あなた宛て"
direct: "ダイレクト"
_services:
_discord:
connected: "Discord: @{username}#{discriminator} を、FoundKey: @{mkUsername} に接続しました!"
disconnected: "Discordの連携を解除しました :v:"
_twitter:
connected: "Twitter: @{twitterUserName} を、FoundKey: @{userName} に接続しました!"
disconnected: "Twitterの連携を解除しました :v:"
_github:
connected: "GitHub: @{login} を、FoundKey: @{userName} に接続しました!"
disconnected: "GitHubの連携を解除しました :v:"

View file

@ -1,7 +1,7 @@
---
_lang_: "日本語 (関西弁)"
headlineMisskey: "ノートでつながるネットワーク"
introMisskey: "ようお越し!Misskeyは、オープンソースの分散型マイクロブログサービスやねん。\n「ート」を作って、いま起こっとることを共有したり、あんたについて皆に発信しよう📡\n「リアクション」機能で、皆のートに素早く反応を追加したりもできるで✌\nほな新しい世界を探検しよか🚀"
introMisskey: "ようお越し!FoundKeyは、オープンソースの分散型マイクロブログサービスやねん。\n「ート」を作って、いま起こっとることを共有したり、あんたについて皆に発信しよう📡\n「リアクション」機能で、皆のートに素早く反応を追加したりもできるで✌\nほな新しい世界を探検しよか🚀"
monthAndDay: "{month}月 {day}日"
search: "探す"
notifications: "通知"
@ -108,7 +108,6 @@ add: "増やす"
reaction: "リアクション"
reactionSetting: "Reaction that will be displayed in Picker. "
reactionSettingDescription2: "ドラッグで並び替え、クリックで削除、+を押して追加やで。"
rememberNoteVisibility: "公開範囲覚えといて"
attachCancel: "のっけるのやめる"
markAsSensitive: "ちょっとこれはアカン"
unmarkAsSensitive: "そこまでアカンことないやろ"
@ -138,7 +137,7 @@ settingGuide: "ええ感じの設定"
cacheRemoteFiles: "リモートのファイルをキャッシュする"
cacheRemoteFilesDescription: "この設定を切っとくと、リモートファイルをキャッシュせず直リンクするようになるで。サーバーの容量は節約できるけど、サムネイルが作られんくなるから通信量が増えるで。"
flagAsBot: "Botやで"
flagAsBotDescription: "もしこのアカウントがプログラムによって運用されるんやったら、このフラグをオンにしてたのむで。オンにすると、反応の連鎖を防ぐためのフラグとして他の開発者に役立ったり、Misskeyのシステム上での扱いがBotに合ったもんになるんやで。"
flagAsBotDescription: "もしこのアカウントがプログラムによって運用されるんやったら、このフラグをオンにしてたのむで。オンにすると、反応の連鎖を防ぐためのフラグとして他の開発者に役立ったり、FoundKeyのシステム上での扱いがBotに合ったもんになるんやで。"
flagAsCat: "Catやで"
flagAsCatDescription: "ワレ、猫ちゃんならこのフラグをつけてみ?"
flagShowTimelineReplies: "It will display the reply to the note in the timeline. "
@ -198,7 +197,7 @@ noUsers: "ユーザーはおらへん"
editProfile: "プロフィールをいじる"
noteDeleteConfirm: "このノートを削除しまっか?"
pinLimitExceeded: "これ以上ピン留めできひん"
intro: "Misskeyのインストールが完了してん管理者アカウントを作ってや。"
intro: "FoundKeyのインストールが完了してん管理者アカウントを作ってや。"
done: "でけた"
processing: "処理しとる"
preview: "プレビュー"
@ -258,6 +257,7 @@ remoteUserCaution: "リモートユーザーやから、足りひん情報ある
activity: "アクティビティ"
images: "画像"
birthday: "生まれた日"
yearsOld: "{age}歳"
registeredDate: "始めた日"
location: "場所"
theme: "テーマ"
@ -370,7 +370,7 @@ exploreFediverse: "Fediverseを探ってみる"
popularTags: "人気のタグ"
userList: "リスト"
about: "情報"
aboutMisskey: "Misskeyってなんや"
aboutMisskey: "FoundKeyってなんや"
administrator: "管理者"
token: "トークン"
twoStepAuthentication: "二段階認証"
@ -503,10 +503,9 @@ sort: "仕分ける"
ascendingOrder: "小さい順"
descendingOrder: "大きい順"
scratchpad: "スクラッチパッド"
scratchpadDescription: "スクラッチパッドではAiScriptを色々試すことができるんや。Misskeyに対して色々できるコードを書いて動かしてみたり、結果を見たりできるで。"
scratchpadDescription: "スクラッチパッドではAiScriptを色々試すことができるんや。FoundKeyに対して色々できるコードを書いて動かしてみたり、結果を見たりできるで。"
output: "出力"
script: "スクリプト"
disablePagesScript: "Pagesのスクリプトを無効にしてや"
updateRemoteUser: "リモートユーザー情報の更新してくれん?"
deleteAllFiles: "すべてのファイルを削除"
deleteAllFilesConfirm: "ホンマにすべてのファイルを削除するん?消したもんはもう戻ってこんのやで?"
@ -604,8 +603,6 @@ clearCache: "キャッシュをほかす"
onlineUsersCount: "{n}人が起きとるで"
nUsers: "{n}ユーザー"
nNotes: "{n}ノート"
sendErrorReports: "エラーリポートを送る"
sendErrorReportsDescription: "オンにしたら、なんか変なことが起きたときにエラーの詳細がMisskeyに共有されて、ソフトウェアの品質向上に役立てられるんや。エラー情報には、OSのバージョン、ブラウザの種類、行動履歴などが含まれるで。"
myTheme: "マイテーマ"
backgroundColor: "背景"
accentColor: "アクセント"
@ -671,14 +668,11 @@ _registry:
domain: "ドメイン"
createKey: "キーを作る"
_aboutMisskey:
about: "Misskeyはsyuiloが2014年からずっと作ってはる、オープンソースなソフトウェアや。"
about: "FoundKeyはsyuiloが2014年からずっと作ってはる、オープンソースなソフトウェアや。"
contributors: "主な貢献者"
allContributors: "全ての貢献者"
source: "ソースコード"
translation: "Misskeyを翻訳"
donate: "Misskeyに寄付"
morePatrons: "他にもぎょうさんの人からサポートしてもろてんねん。ほんまおおきに🥰"
patrons: "支援者"
translation: "FoundKeyを翻訳"
_mfm:
cheatSheet: "MFMチートシート"
mention: "メンション"

View file

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

View file

@ -1,7 +1,7 @@
---
_lang_: "한국어"
headlineMisskey: "노트로 연결되는 네트워크"
introMisskey: "환영합니다! Misskey 는 오픈 소스 분산형 마이크로 블로그 서비스입니다.\n\"노트\" 를 작성해서, 지금 일어나고 있는 일을 공유하거나, 당신만의 이야기를 모두에게 발신하세요📡\n\"리액션\" 기능으로, 친구의 노트에 총알같이 반응을 추가할 수도 있습니다👍\n새로운 세계를 탐험해 보세요🚀"
introMisskey: "환영합니다! FoundKey 는 오픈 소스 분산형 마이크로 블로그 서비스입니다.\n\"노트\" 를 작성해서, 지금 일어나고 있는 일을 공유하거나, 당신만의 이야기를 모두에게 발신하세요📡\n\"리액션\" 기능으로, 친구의 노트에 총알같이 반응을 추가할 수도 있습니다👍\n새로운 세계를 탐험해 보세요🚀"
monthAndDay: "{month}월 {day}일"
search: "검색"
notifications: "알림"
@ -108,7 +108,6 @@ add: "추가"
reaction: "리액션"
reactionSetting: "선택기에 표시할 리액션"
reactionSettingDescription2: "끌어서 순서 변경, 클릭해서 삭제, +를 눌러서 추가할 수 있습니다."
rememberNoteVisibility: "공개 범위를 기억하기"
attachCancel: "첨부 취소"
markAsSensitive: "열람주의로 설정"
unmarkAsSensitive: "열람주의 해제"
@ -198,7 +197,7 @@ noUsers: "아무도 없습니다"
editProfile: "프로필 수정"
noteDeleteConfirm: "이 노트를 삭제하시겠습니까?"
pinLimitExceeded: "더 이상 고정할 수 없습니다."
intro: "Misskey의 설치가 완료되었습니다! 관리자 계정을 생성해주세요."
intro: "FoundKey의 설치가 완료되었습니다! 관리자 계정을 생성해주세요."
done: "완료"
processing: "처리중"
preview: "미리보기"
@ -258,6 +257,7 @@ remoteUserCaution: "리모트 유저이기 때문에, 정보가 정확하지 않
activity: "활동"
images: "이미지"
birthday: "생일"
yearsOld: "{age}세"
registeredDate: "등록일"
location: "장소"
theme: "테마"
@ -375,7 +375,7 @@ exploreFediverse: "연합우주를 탐색"
popularTags: "인기 태그"
userList: "리스트"
about: "정보"
aboutMisskey: "Misskey에 대하여"
aboutMisskey: "FoundKey에 대하여"
administrator: "관리자"
token: "토큰"
twoStepAuthentication: "2단계 인증"
@ -518,10 +518,9 @@ sort: "정렬"
ascendingOrder: "오름차순"
descendingOrder: "내림차순"
scratchpad: "스크래치 패드"
scratchpadDescription: "스크래치 패드는 AiScript 의 테스트 환경을 제공합니다. Misskey 와 상호 작용하는 코드를 작성, 실행 및 결과를 확인할 수 있습니다."
scratchpadDescription: "스크래치 패드는 AiScript 의 테스트 환경을 제공합니다. FoundKey 와 상호 작용하는 코드를 작성, 실행 및 결과를 확인할 수 있습니다."
output: "출력"
script: "스크립트"
disablePagesScript: "Pages 에서 AiScript 를 사용하지 않음"
updateRemoteUser: "리모트 유저 정보 갱신"
deleteAllFiles: "모든 파일 삭제"
deleteAllFilesConfirm: "모든 파일을 삭제하시겠습니까?"
@ -640,7 +639,7 @@ createNew: "새로 만들기"
optional: "옵션"
createNewClip: "새 클립 만들기"
public: "공개"
i18nInfo: "Misskey는 자원봉사자들에 의해 다양한 언어로 번역되고 있습니다. {link}에서 번역에 참가할 수 있습니다."
i18nInfo: "FoundKey는 자원봉사자들에 의해 다양한 언어로 번역되고 있습니다. {link}에서 번역에 참가할 수 있습니다."
manageAccessTokens: "액세스 토큰 관리"
accountInfo: "계정 정보"
notesCount: "노트 수"
@ -690,8 +689,6 @@ clearCache: "캐시 비우기"
onlineUsersCount: "{n}명이 접속 중"
nUsers: "{n} 유저"
nNotes: "{n} 노트"
sendErrorReports: "오류 보고서 보내기"
sendErrorReportsDescription: "이 설정을 활성화하면, 문제가 발생했을 때 오류에 대한 상세 정보를 Misskey에 보내어 더 나은 소프트웨어를 만드는 데에 도움을 줄 수 있습니다."
myTheme: "내 테마"
backgroundColor: "배경 색"
accentColor: "강조 색상"
@ -781,13 +778,12 @@ hashtags: "해시태그"
troubleshooting: "문제 해결"
useBlurEffect: "UI에 흐림 효과 사용"
learnMore: "자세히"
misskeyUpdated: "Misskey가 업데이트 되었습니다!"
misskeyUpdated: "FoundKey가 업데이트 되었습니다!"
whatIsNew: "패치 정보 보기"
translate: "번역"
translatedFrom: "{x}에서 번역"
accountDeletionInProgress: "계정 삭제 작업을 진행하고 있습니다"
usernameInfo: "서버상에서 계정을 식별하기 위한 이름. 알파벳(a~z, A~Z), 숫자(0~9) 및 언더바(_)를 사용할 수 있습니다. 사용자명은 나중에 변경할 수 없습니다."
aiChanMode: "아이 모드"
keepCw: "CW 유지하기"
pubSub: "Pub/Sub 계정"
lastCommunication: "마지막 통신"
@ -887,22 +883,19 @@ _registry:
domain: "도메인"
createKey: "키 생성"
_aboutMisskey:
about: "Misskey는 syuilo에 의해서 2014년부터 개발되어 온 오픈소스 소프트웨어 입니다."
about: "FoundKey는 syuilo에 의해서 2014년부터 개발되어 온 오픈소스 소프트웨어 입니다."
contributors: "주요 기여자"
allContributors: "모든 기여자"
source: "소스 코드"
translation: "Misskey를 번역하기"
donate: "Misskey에 기부하기"
morePatrons: "이 외에도 다른 많은 분들이 도움을 주시고 계십니다. 감사합니다🥰"
patrons: "후원자"
translation: "FoundKey를 번역하기"
_nsfw:
respect: "열람주의로 설정된 미디어 숨기기"
ignore: "열람 주의 미디어 항상 표시"
force: "미디어 항상 숨기기"
_mfm:
cheatSheet: "MFM 도움말"
intro: "MFM는 Misskey의 다양한 곳에서 사용할 수 있는 전용 마크업 언어입니다. 여기에서는 MFM에서 사용할 수 있는 구문을 확인할 수 있습니다."
dummy: "Misskey로 연합우주의 세계가 펼쳐집니다"
intro: "MFM는 FoundKey의 다양한 곳에서 사용할 수 있는 전용 마크업 언어입니다. 여기에서는 MFM에서 사용할 수 있는 구문을 확인할 수 있습니다."
dummy: "FoundKey로 연합우주의 세계가 펼쳐집니다"
mention: "멘션"
mentionDescription: "골뱅이표(@) 뒤에 사용자명을 넣어 특정 유저를 나타낼 수 있습니다."
hashtag: "해시태그"
@ -1098,7 +1091,7 @@ _time:
hour: "시간"
day: "일"
_tutorial:
title: "Misskey의 사용 방법"
title: "FoundKey의 사용 방법"
step1_1: "환영합니다!"
step1_2: "이 페이지는 \"타임라인\"이라고 불립니다. 당신이 \"팔로우\"하고 있는 사람들의 \"노트\"가 시간순으로 나타납니다."
step1_3: "아직 아무 유저도 팔로우하고 있지 않기에 타임라인은 비어 있을 것입니다."
@ -1117,9 +1110,9 @@ _tutorial:
step6_1: "타임라인에 다른 사용자의 노트가 나타난다면 성공입니다."
step6_2: "다른 유저의 노트에 \"리액션\"을 붙여 간단하게 당신의 반응을 전달할 수도 있습니다."
step6_3: "리액션을 붙이려면, 노트의 \"+\" 버튼을 클릭하고 원하는 이모지를 선택합니다."
step7_1: "이것으로 Misskey의 기본 튜토리얼을 마치겠습니다. 수고하셨습니다!"
step7_2: "Misskey에 대해 더 알고 싶으시다면 {help}를 참고해 주세요."
step7_3: "그럼 Misskey를 즐기세요! 🚀"
step7_1: "이것으로 FoundKey의 기본 튜토리얼을 마치겠습니다. 수고하셨습니다!"
step7_2: "FoundKey에 대해 더 알고 싶으시다면 {help}를 참고해 주세요."
step7_3: "그럼 FoundKey를 즐기세요! 🚀"
_2fa:
alreadyRegistered: "이미 설정이 완료되었습니다."
registerDevice: "디바이스 등록"

View file

@ -1,7 +1,7 @@
---
_lang_: "Nederlands"
headlineMisskey: "Netwerk verbonden door notities"
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! 🚀"
introMisskey: "Welkom! FoundKey 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! 🚀"
monthAndDay: "{day} {month}"
search: "Zoeken"
notifications: "Meldingen"
@ -108,7 +108,6 @@ sensitive: "NSFW"
add: "Toevoegen"
reaction: "Reacties"
reactionSettingDescription2: "Sleep om opnieuw te ordenen, Klik om te verwijderen, Druk op \"+\" om toe te voegen"
rememberNoteVisibility: "Vergeet niet de notitie zichtbaarheidsinstellingen"
attachCancel: "Verwijder bijlage"
markAsSensitive: "Markeren als NSFW"
unmarkAsSensitive: "Geen NSFW"
@ -124,7 +123,7 @@ unblockConfirm: "Ben je zeker dat je deze account wil blokkeren?"
suspendConfirm: "Ben je zeker dat je deze account wil suspenderen?"
unsuspendConfirm: "Ben je zeker dat je deze account wil opnieuw aanstellen?"
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 FoundKey meer geschikt te maken."
flagAsCat: "Markeer dit account als een kat."
flagAsCatDescription: "Zet deze vlag aan als je wilt aangeven dat dit account een kat is."
flagShowTimelineReplies: "Toon antwoorden op de tijdlijn."
@ -184,7 +183,7 @@ noUsers: "Er zijn geen gebruikers."
editProfile: "Bewerk Profiel"
noteDeleteConfirm: "Ben je zeker dat je dit bericht wil verwijderen?"
pinLimitExceeded: "Je kunt geen berichten meer vastprikken"
intro: "Installatie van Misskey geëindigd! Maak nu een beheerder aan."
intro: "Installatie van FoundKey geëindigd! Maak nu een beheerder aan."
done: "Klaar"
processing: "Bezig met verwerken"
preview: "Voorbeeld"
@ -244,6 +243,7 @@ remoteUserCaution: "Aangezien deze gebruiker van een externe server afkomstig is
activity: "Activiteit"
images: "Afbeeldingen"
birthday: "Geboortedatum"
yearsOld: "{age} jaar"
registeredDate: "Inschrijvingsdatum"
location: "Locatie"
theme: "Thema's"
@ -280,7 +280,7 @@ disconnectedFromServer: "Verbinding met de server onderbroken."
inMb: "in megabytes"
pinnedNotes: "Vastgemaakte notitie"
userList: "Lijsten"
aboutMisskey: "Over Misskey"
aboutMisskey: "Over FoundKey"
administrator: "Beheerder"
token: "Token"
securityKeyName: "Sleutelnaam"

View file

@ -1,7 +1,7 @@
---
_lang_: "język polski"
headlineMisskey: "Sieć połączona wpisami"
introMisskey: "Misskey jest serwisem mikroblogowym typu open source.\nMisskey to opensource'owy serwis mikroblogowy, w którym możesz tworzyć \"notatki\", aby dzielić się tym, co się dzieje i opowiadać wszystkim o sobie.\nMożesz również użyć funkcji \"Reakcje\", aby szybko dodać własne reakcje do notatek innych użytkowników👍.\nOdkrywaj nowy świat🚀!"
introMisskey: "FoundKey jest serwisem mikroblogowym typu open source.\nFoundKey to opensource'owy serwis mikroblogowy, w którym możesz tworzyć \"notatki\", aby dzielić się tym, co się dzieje i opowiadać wszystkim o sobie.\nMożesz również użyć funkcji \"Reakcje\", aby szybko dodać własne reakcje do notatek innych użytkowników👍.\nOdkrywaj nowy świat🚀!"
monthAndDay: "{month}-{day}"
search: "Szukaj"
notifications: "Powiadomienia"
@ -108,7 +108,6 @@ add: "Dodaj"
reaction: "Reakcja"
reactionSetting: "Reakcje do pokazania w wyborniku reakcji"
reactionSettingDescription2: "Przeciągnij aby zmienić kolejność, naciśnij aby usunąć, naciśnij „+” aby dodać"
rememberNoteVisibility: "Zapamiętuj ustawienia widoczności wpisu"
attachCancel: "Usuń załącznik"
markAsSensitive: "Oznacz jako NSFW"
unmarkAsSensitive: "Cofnij NSFW"
@ -138,7 +137,7 @@ settingGuide: "Proponowana konfiguracja"
cacheRemoteFiles: "Przechowuj zdalne pliki w pamięci podręcznej"
cacheRemoteFilesDescription: "Gdy ta opcja jest wyłączona, zdalne pliki są ładowane bezpośrednio ze zdalnych instancji. Wyłączenie the opcji zmniejszy użycie powierzchni dyskowej, ale zwiększy transfer, ponieważ miniaturki nie będą generowane."
flagAsBot: "To konto jest botem"
flagAsBotDescription: "Jeżeli ten kanał jest kontrolowany przez jakiś program, ustaw tę opcję. Jeżeli włączona, będzie działać jako flaga informująca innych programistów, aby zapobiegać nieskończonej interakcji z różnymi botami i dostosowywać wewnętrzne systemy Misskey, traktując konto jako bota."
flagAsBotDescription: "Jeżeli ten kanał jest kontrolowany przez jakiś program, ustaw tę opcję. Jeżeli włączona, będzie działać jako flaga informująca innych programistów, aby zapobiegać nieskończonej interakcji z różnymi botami i dostosowywać wewnętrzne systemy FoundKey, traktując konto jako bota."
flagAsCat: "To konto jest kotem"
flagAsCatDescription: "Przełącz tę opcję, aby konto było oznaczone jako kot."
autoAcceptFollowed: "Automatycznie przyjmuj prośby o możliwość obserwacji od użytkowników, których obserwujesz"
@ -195,7 +194,7 @@ noUsers: "Brak użytkowników"
editProfile: "Edytuj profil"
noteDeleteConfirm: "Czy na pewno chcesz usunąć ten wpis?"
pinLimitExceeded: "Nie możesz przypiąć więcej wpisów."
intro: "Zakończono instalację Misskey! Utwórz konto administratora."
intro: "Zakończono instalację FoundKey! Utwórz konto administratora."
done: "Gotowe"
processing: "Przetwarzanie"
preview: "Podgląd"
@ -253,6 +252,7 @@ remoteUserCaution: "Te informacje mogą nie być aktualne, ponieważ użytkownik
activity: "Aktywność"
images: "Zdjęcia"
birthday: "Data urodzenia"
yearsOld: "{age} lat"
registeredDate: "Zarejestrowano"
location: "Lokalizacja"
theme: "Motywy"
@ -370,7 +370,7 @@ exploreFediverse: "Eksploruj Fediwersum"
popularTags: "Tagi na czasie"
userList: "Listy"
about: "Informacje"
aboutMisskey: "O Misskey"
aboutMisskey: "O FoundKey"
administrator: "Admin"
token: "Token"
twoStepAuthentication: "Uwierzytelnianie dwuskładnikowe"
@ -509,10 +509,9 @@ sort: "Sortuj"
ascendingOrder: "Rosnąco"
descendingOrder: "Malejąco"
scratchpad: "Brudnopis"
scratchpadDescription: "Brudnopis zawiera eksperymentalne środowisko dla AiScript. Możesz pisać, wykonywać i sprawdzać wyniki w interakcji z Misskey."
scratchpadDescription: "Brudnopis zawiera eksperymentalne środowisko dla AiScript. Możesz pisać, wykonywać i sprawdzać wyniki w interakcji z FoundKey."
output: "Wyjście"
script: "Skrypt"
disablePagesScript: "Wyłącz AiScript na Stronach"
updateRemoteUser: "Aktualizuj zdalne dane o użytkowniku"
deleteAllFiles: "Usuń wszystkie pliki"
deleteAllFilesConfirm: "Czy na pewno chcesz usunąć wszystkie pliki?"
@ -617,7 +616,7 @@ desktop: "Pulpit"
createNew: "Utwórz nowy"
optional: "Nieobowiązkowe"
public: "Publiczny"
i18nInfo: "Misskey jest tłumaczone na wiele języków przez wolontariuszy. Możesz pomóc na {link}."
i18nInfo: "FoundKey jest tłumaczone na wiele języków przez wolontariuszy. Możesz pomóc na {link}."
manageAccessTokens: "Zarządzaj tokenami dostępu"
accountInfo: "Informacje o koncie"
notesCount: "Liczba wpisów"
@ -666,7 +665,6 @@ clearCache: "Wyczyść pamięć podręczną"
onlineUsersCount: "{n} osób jest online"
nUsers: "{n} użytkowników"
nNotes: "{n} wpisów"
sendErrorReports: "Wyślij raporty o błędach"
myTheme: "Mój motyw"
backgroundColor: "Tło"
accentColor: "Akcent"
@ -783,22 +781,19 @@ _registry:
domain: "Domena"
createKey: "Utwórz klucz"
_aboutMisskey:
about: "Misskey jest oprogramowanie open source rozwijanym przez syuilo od 2014."
about: "FoundKey jest oprogramowanie open source rozwijanym przez syuilo od 2014."
contributors: "Główni twórcy"
allContributors: "Wszyscy twórcy"
source: "Kod źródłowy"
translation: "Tłumacz Misskey"
donate: "Przekaż darowiznę na Misskey"
morePatrons: "Naprawdę doceniam wsparcie ze strony wielu niewymienionych tu osób. Dziękuję! 🥰"
patrons: "Wspierający"
translation: "Tłumacz FoundKey"
_nsfw:
respect: "Ukrywaj media NSFW"
ignore: "Nie ukrywaj mediów NSFW"
force: "Ukrywaj wszystkie media"
_mfm:
cheatSheet: "Ściąga MFM"
intro: "MFM to język składniowy wyjątkowy dla Misskey, który może być użyty w wielu miejscach. Tu znajdziesz listę wszystkich możliwych elementów składni MFM."
dummy: "Misskey rozszerza świat Fediwersum"
intro: "MFM to język składniowy wyjątkowy dla FoundKey, który może być użyty w wielu miejscach. Tu znajdziesz listę wszystkich możliwych elementów składni MFM."
dummy: "FoundKey rozszerza świat Fediwersum"
mention: "Wspomnij"
mentionDescription: "Używając znaku @ i nazwy użytkownika, możesz określić danego użytkownika."
hashtag: "Hashtag"
@ -955,7 +950,7 @@ _time:
hour: "godz."
day: "dzień"
_tutorial:
title: "Jak korzystać z Misskey"
title: "Jak korzystać z FoundKey"
step1_1: "Witaj!"
step1_3: "Twoja oś czasu jest jeszcze pusta, ponieważ nie opublikowałeś(-aś) jeszcze żadnych wpisów i nie obserwujesz jeszcze nikogo."
step2_1: "Ukończmy konfigurację profilu zanim utworzymy wpis lub zaczniemy kogoś obserwować."

View file

@ -1,7 +1,7 @@
---
_lang_: "Português"
headlineMisskey: "Rede conectada 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! FoundKey é 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}"
search: "Pesquisar"
notifications: "Notificações"
@ -106,7 +106,6 @@ sensitive: "Conteúdo sensível"
add: "Adicionar"
reaction: "Reações"
reactionSetting: "Quais reações a mostrar no selecionador de reações"
rememberNoteVisibility: "Lembrar das configurações de visibilidade de notas"
attachCancel: "Remover anexo"
markAsSensitive: "Marcar como sensível"
unmarkAsSensitive: "Desmarcar como sensível"

View file

@ -1,7 +1,7 @@
---
_lang_: "Română"
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! FoundKey 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}"
search: "Caută"
notifications: "Notificări"
@ -108,7 +108,6 @@ add: "Adaugă"
reaction: "Reacție"
reactionSetting: "Reacții care să apară in selectorul de reacții"
reactionSettingDescription2: "Trage pentru a rearanja, apasă pe \"+\" pentru a adăuga."
rememberNoteVisibility: "Amintește setarea de vizibilitate a notelor"
attachCancel: "Înlătură atașament"
markAsSensitive: "Marchează ca NSFW"
unmarkAsSensitive: "Demarchează ca NSFW"
@ -138,7 +137,7 @@ settingGuide: "Setări recomandate"
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."
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 FoundKey pentru a trata acest cont drept un bot."
flagAsCat: "Marchează acest cont ca pisică"
flagAsCatDescription: "Activează această opțiune dacă acest cont este o pisică."
flagShowTimelineReplies: "Arată răspunsurile în cronologie"
@ -198,7 +197,7 @@ noUsers: "Niciun utilizator"
editProfile: "Editează profilul"
noteDeleteConfirm: "Ești sigur că vrei să ștergi această notă?"
pinLimitExceeded: "Nu poți mai fixa mai multe note"
intro: "Misskey s-a instalat! Te rog crează un utilizator admin."
intro: "FoundKey s-a instalat! Te rog crează un utilizator admin."
done: "Gata"
processing: "Se procesează"
preview: "Previzualizare"
@ -258,6 +257,7 @@ remoteUserCaution: "Deoarece acest utilizator este dintr-o instanță externă,
activity: "Activitate"
images: "Imagini"
birthday: "Zi de naștere"
yearsOld: "{age} ani"
registeredDate: "Data înregistrării"
location: "Locație"
theme: "Teme"
@ -375,7 +375,7 @@ exploreFediverse: "Explorează Fediverse-ul"
popularTags: "Taguri populare"
userList: "Liste"
about: "Despre"
aboutMisskey: "Despre Misskey"
aboutMisskey: "Despre FoundKey"
administrator: "Administrator"
token: "Token"
twoStepAuthentication: "Autentificare în doi pași"
@ -518,10 +518,9 @@ sort: "Sortează"
ascendingOrder: "Crescător"
descendingOrder: "Descrescător"
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 FoundKey în el."
output: "Ieșire"
script: "Script"
disablePagesScript: "Dezactivează AiScript în Pagini"
updateRemoteUser: "Actualizează informațiile utilizatorului extern"
deleteAllFiles: "Șterge toate fișierele"
deleteAllFilesConfirm: "Ești sigur că vrei să ștergi toate fișierele?"

View file

@ -1,7 +1,7 @@
---
_lang_: "Русский"
headlineMisskey: "Сеть, сплетённая из заметок"
introMisskey: "Добро пожаловать! Misskey — это децентрализованный сервис микроблогов с открытым исходным кодом.\nПишите «заметки» — делитесь со всеми происходящим вокруг или рассказывайте о себе 📡\nСтавьте «реакции» — выражайте свои чувства и эмоции от заметок других 👍\nОткройте для себя новый мир 🚀"
introMisskey: "Добро пожаловать! FoundKey — это децентрализованный сервис микроблогов с открытым исходным кодом.\nПишите «заметки» — делитесь со всеми происходящим вокруг или рассказывайте о себе 📡\nСтавьте «реакции» — выражайте свои чувства и эмоции от заметок других 👍\nОткройте для себя новый мир 🚀"
monthAndDay: "{day}.{month}"
search: "Поиск"
notifications: "Уведомления"
@ -108,7 +108,6 @@ add: "Добавить"
reaction: "Реакции"
reactionSetting: "Реакции, отображаемые в палитре"
reactionSettingDescription2: "Расставляйте перетаскиванием, удаляйте нажатием, добавляйте кнопкой «+»."
rememberNoteVisibility: "Запоминать видимость заметок"
attachCancel: "Удалить вложение"
markAsSensitive: "Отметить как «не для всех»"
unmarkAsSensitive: "Снять отметку «не для всех»"
@ -138,7 +137,7 @@ settingGuide: "Рекомендуемые настройки"
cacheRemoteFiles: "Кешировать внешние файлы"
cacheRemoteFilesDescription: "Когда эта настройка отключена, файлы с других сайтов будут загружаться прямо оттуда. Это сэкономит место на сервере, но увеличит трафик, так как не будут создаваться эскизы."
flagAsBot: "Аккаунт бота"
flagAsBotDescription: "Включите, если этот аккаунт управляется программой. Это позволит системе Misskey учитывать это, а также поможет разработчикам других ботов предотвратить бесконечные циклы взаимодействия."
flagAsBotDescription: "Включите, если этот аккаунт управляется программой. Это позволит системе FoundKey учитывать это, а также поможет разработчикам других ботов предотвратить бесконечные циклы взаимодействия."
flagAsCat: "Аккаунт кота"
flagAsCatDescription: "Включите, и этот аккаунт будет помечен как кошачий."
flagShowTimelineReplies: "Показывать ответы на заметки в ленте"
@ -198,7 +197,7 @@ noUsers: "Нет ни одного пользователя"
editProfile: "Редактировать профиль"
noteDeleteConfirm: "Вы хотите удалить эту заметку?"
pinLimitExceeded: "Нельзя закрепить ещё больше заметок"
intro: "Установка Misskey завершена! А теперь создайте учетную запись администратора."
intro: "Установка FoundKey завершена! А теперь создайте учетную запись администратора."
done: "Готово"
processing: "Обработка"
preview: "Предпросмотр"
@ -258,6 +257,7 @@ remoteUserCaution: "Это пользователь с другого сайта
activity: "Активность"
images: "Изображения"
birthday: "День рождения"
yearsOld: "Возраст: {age}"
registeredDate: "Дата регистрации"
location: "Местоположение"
theme: "Тема"
@ -375,7 +375,7 @@ exploreFediverse: "Исследуйте Fediverse"
popularTags: "Популярные теги"
userList: "Списки"
about: "Описание"
aboutMisskey: "О Misskey"
aboutMisskey: "О FoundKey"
administrator: "Администратор"
token: "Токен"
twoStepAuthentication: "Двухфакторная аутентификация"
@ -518,10 +518,9 @@ sort: "Сортировать"
ascendingOrder: "по возрастанию"
descendingOrder: "По убыванию"
scratchpad: "Когтеточка"
scratchpadDescription: "«Когтеточка» — это место для опытов с AiScript. Здесь можно писать программы, взаимодействующие с Misskey, запускать и смотреть что из этого получается."
scratchpadDescription: "«Когтеточка» — это место для опытов с AiScript. Здесь можно писать программы, взаимодействующие с FoundKey, запускать и смотреть что из этого получается."
output: "Выходы"
script: "Скрипт"
disablePagesScript: "Отключить скрипты на «Страницах»"
updateRemoteUser: "Обновить данные пользователя с его сервера"
deleteAllFiles: "Удалить все файлы"
deleteAllFilesConfirm: "Вы хотите удалить все файлы?"
@ -688,8 +687,6 @@ clearCache: "Очистить кэш"
onlineUsersCount: "Пользователей сейчас в сети: {n}"
nUsers: "Пользователей: {n}"
nNotes: "Заметок: {n}"
sendErrorReports: "Посылать отчёты о сбоях"
sendErrorReportsDescription: "Если включено, когда возникнет какая-нибудь техническая проблема, подробные сведения об этом будут отправлены разработчикам Misskey. Это очень помогает делать программу лучше. В отчёты попадают тип и версия ОС, браузера, журнал действий (что привело к сбою) и тому подобное."
myTheme: "Личная тема"
backgroundColor: "Фон"
accentColor: "Акцент"
@ -779,13 +776,12 @@ hashtags: "Хэштег"
troubleshooting: "Разрешение проблем"
useBlurEffect: "Размытие в интерфейсе"
learnMore: "Подробнее"
misskeyUpdated: "Misskey обновился!"
misskeyUpdated: "FoundKey обновился!"
whatIsNew: "Что новенького?"
translate: "Перевод"
translatedFrom: "Перевод. Язык оригинала — {x}"
accountDeletionInProgress: "В настоящее время выполняется удаление учетной записи"
usernameInfo: "Имя, которое отличает вашу учетную запись от других на этом сервере. Вы можете использовать алфавит (a~z, A~Z), цифры (0~9) или символы подчеркивания (_). Имена пользователей не могут быть изменены позже."
aiChanMode: "ИИ режим"
keepCw: "Сохраняйте Предупреждения о содержимом"
pubSub: "Учётные записи Pub/Sub"
lastCommunication: "Последнее сообщение"
@ -874,22 +870,19 @@ _registry:
domain: "Домен"
createKey: "Новый ключ"
_aboutMisskey:
about: "Misskey — программа с открытым исходным кодом, которую разрабатывает syuilo с 2014 года."
about: "FoundKey — программа с открытым исходным кодом, которую разрабатывает syuilo с 2014 года."
contributors: "Основные соавторы"
allContributors: "Все соавторы"
source: "Исходный код"
translation: "Перевод Misskey"
donate: "Пожертвование на Misskey"
morePatrons: "Большое спасибо и многим другим, кто принял участие в этом проекте! 🥰"
patrons: "Материальная поддержка"
translation: "Перевод FoundKey"
_nsfw:
respect: "Скрывать содержимое не для всех"
ignore: "Показывать содержимое не для всех"
force: "Скрывать вообще все файлы"
_mfm:
cheatSheet: "Подсказка по разметке MFM"
intro: "MFM — язык оформления текста, который придуман специально для Misskey и готов для применения во многих местах. На этой странице собраны и кратко изложены способы его использовать."
dummy: "Misskey расширяет границы Федиверса."
intro: "MFM — язык оформления текста, который придуман специально для FoundKey и готов для применения во многих местах. На этой странице собраны и кратко изложены способы его использовать."
dummy: "FoundKey расширяет границы Федиверса."
mention: "Упоминание"
mentionDescription: "При помощи знака «собака» перед именем можно упомянуть какого-нибудь пользователя."
hashtag: "Хэштег"
@ -1082,7 +1075,7 @@ _time:
hour: "ч"
day: "сут"
_tutorial:
title: "Как пользоваться Misskey"
title: "Как пользоваться FoundKey"
step1_1: "Добро пожаловать!"
step1_2: "Эта страница называется «лента». Здесь будут появляться «заметки»: ваши личные и тех, на кого вы «подписаны». Они будут располагаться в порядке времени их появления."
step1_3: "Правда, ваша лента пока пуста. Она начнёт заполняться, когда вы будете писать свои заметки и подписываться на других."
@ -1091,7 +1084,7 @@ _tutorial:
step3_1: "Успешно заполнили профиль?"
step3_2: "Что ж, теперь самое время опубликуовать заметку. Если нажать вверху страницы на изображение карандаша, появится форма для текста."
step3_3: "Напишите в неё, что хотите, и нажмите на кнопку в правом верхнем углу."
step3_4: "Ничего не приходит в голову? Как насчёт: «Я новенький, пока осваиваюсь в Misskey»?"
step3_4: "Ничего не приходит в голову? Как насчёт: «Я новенький, пока осваиваюсь в FoundKey»?"
step4_1: "С написанием первой заметки покончено?"
step4_2: "Отлично, теперь она должна появиться в вашей ленте."
step5_1: "А теперь самое время немного оживить ленту, подписавшись на других."
@ -1101,9 +1094,9 @@ _tutorial:
step6_1: "Если теперь в ленте видны и чужие заметки, значит у вас получилось."
step6_2: "Здесь можно непринуждённо выразить свои чувства к чьей-то заметке, отметив «реакцию» под ней."
step6_3: "Отмечайте реакции, нажмая на символ «+» под заметкой и выбирая значок по душе."
step7_1: "На этом вводный урок по использованию Misskey закончен. Спасибо, что прошли его до конца!"
step7_2: "Хотите изучить Misskey глубже — добро пожаловать в раздел «{help}»."
step7_3: "Приятно вам провести время с Misskey🚀"
step7_1: "На этом вводный урок по использованию FoundKey закончен. Спасибо, что прошли его до конца!"
step7_2: "Хотите изучить FoundKey глубже — добро пожаловать в раздел «{help}»."
step7_3: "Приятно вам провести время с FoundKey🚀"
_2fa:
alreadyRegistered: "Двухфакторная аутентификация уже настроена."
registerDevice: "Зарегистрируйте ваше устройство"

View file

@ -1,7 +1,7 @@
---
_lang_: "Slovenčina"
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! FoundKey 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}."
search: "Hľadať"
notifications: "Oznámenia"
@ -108,7 +108,6 @@ add: "Pridať"
reaction: "Reakcie"
reactionSetting: "Reakcie zobrazené vo výbere reakcií"
reactionSettingDescription2: "Ťahaním preusporiadate, kliknutím odstránite, Stlačením \"+\" pridáte"
rememberNoteVisibility: "Zapamätať nastavenia viditeľnosti poznámky"
attachCancel: "Odstrániť prílohu"
markAsSensitive: "Označiť ako NSFW"
unmarkAsSensitive: "Odznačiť NSFW"
@ -138,7 +137,7 @@ settingGuide: "Odporúčané nastavenia"
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."
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 FoundKey, aby ho považoval za bota."
flagAsCat: "Tento účet je 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"
@ -198,7 +197,7 @@ noUsers: "Žiadni používatelia"
editProfile: "Upraviť profil"
noteDeleteConfirm: "Naozaj chcete odstrániť túto poznámku?"
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 FoundKey je dokončená! Prosím vytvorte administrátora."
done: "Hotovo"
processing: "Pracujem..."
preview: "Náhľad"
@ -258,6 +257,7 @@ remoteUserCaution: "Tieto informácie nemusia byť aktuálne, keďže používat
activity: "Aktivita"
images: "Obrázky"
birthday: "Dátum narodenia"
yearsOld: "{age} rokov"
registeredDate: "Dátum registrácie"
location: "Lokalita"
theme: "Téma"
@ -375,7 +375,7 @@ exploreFediverse: "Objavovať Fediverzum"
popularTags: "Populárne značky"
userList: "Zoznamy"
about: "Informácie"
aboutMisskey: "O Misskey"
aboutMisskey: "O FoundKey"
administrator: "Administrátor"
token: "Token"
twoStepAuthentication: "Dvojfaktorová autentifikácia"
@ -518,10 +518,9 @@ sort: "Zoradiť"
ascendingOrder: "Vzostupne"
descendingOrder: "Zostupne"
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 FoundKey."
output: "Výstup"
script: "Skript"
disablePagesScript: "Vypnúť AiScript na stránkach"
updateRemoteUser: "Aktualizovať informácie o vzdialenom účte"
deleteAllFiles: "Odstrániť všetky súbory"
deleteAllFilesConfirm: "Naozaj chcete odstrániť všetky súbory"
@ -639,7 +638,7 @@ createNew: "Vytvoriť nový"
optional: "Voliteľné"
createNewClip: "Vytvoriť nový klip"
public: "Verejné"
i18nInfo: "Misskey je prekladaný do rôznych jazykov dobrovoľníkmi. Pomôcť môžete na {link}."
i18nInfo: "FoundKey je prekladaný do rôznych jazykov dobrovoľníkmi. Pomôcť môžete na {link}."
manageAccessTokens: "Spravovať prístupové tokeny"
accountInfo: "Informácie o účte"
notesCount: "Počet poznámok"
@ -689,8 +688,6 @@ clearCache: "Vyprázdniť cache"
onlineUsersCount: "{n} používateľov je online"
nUsers: "{n} používateľov"
nNotes: "{n} poznámok"
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ď."
myTheme: "Moja téma"
backgroundColor: "Pozadie"
accentColor: "Akcent"
@ -780,13 +777,12 @@ hashtags: "Hashtagy"
troubleshooting: "Riešenie problémov"
useBlurEffect: "Používať efekty rozmazania v UI"
learnMore: "Zistiť viac"
misskeyUpdated: "Misskey sa aktualizoval!"
misskeyUpdated: "FoundKey sa aktualizoval!"
whatIsNew: "Čo je nové?"
translate: "Preložiť"
translatedFrom: "Preložené z {x}"
accountDeletionInProgress: "Odstraňovanie účtu prebieha"
usernameInfo: "Meno, ktoré odlišuje váš účet od ostatných na tomto serveri. Môžete použiť abecedu (a~z, A~Z), čísla (0~9) alebo podtržník (_). Používateľské mená sa nedajú neskôr zmeniť."
aiChanMode: "Ai režim"
keepCw: "Nechať varovania obsahu"
pubSub: "Pub/Sub účty"
lastCommunication: "Posledná komunikácia"
@ -884,22 +880,19 @@ _registry:
domain: "Doména"
createKey: "Vytvoriť kľúč"
_aboutMisskey:
about: "Misskey je open-source softvér, ktorý vyvíja syuilo od 2014."
about: "FoundKey je open-source softvér, ktorý vyvíja syuilo od 2014."
contributors: "Hlavní prispievatelia"
allContributors: "Všetci prispievatelia"
source: "Zdrojový kód"
translation: "Preložiť Misskey"
donate: "Podporiť Misskey"
morePatrons: "Takisto oceňujeme podporu mnoých ďalších, ktorí tu nie sú uvedení. Ďakujeme! 🥰"
patrons: "Prispievatelia"
translation: "Preložiť FoundKey"
_nsfw:
respect: "Skryť NSFW médiá"
ignore: "Neskrývať NSFW médiá"
force: "Skryť všetky médiá"
_mfm:
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."
dummy: "Misskey rozširuje svet Fediverza"
intro: "MFM je FoundKey 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: "FoundKey rozširuje svet Fediverza"
mention: "Zmienka"
mentionDescription: "Používateľa spomeniete použítím zavináča a mena používateľa"
hashtag: "Hashtag"
@ -1095,7 +1088,7 @@ _time:
hour: "hod"
day: "dní"
_tutorial:
title: "Ako používať Misskey"
title: "Ako používať FoundKey"
step1_1: "Vitajte!"
step1_2: "Táto stránka sa volá \"časová os\". Zobrazuje chronologicky zoradené \"poznámky\" od ľudí, ktorých sledujete."
step1_3: "Vaša časová os je teraz prázdna pretože ste nepridali žiadne poznámky ani nikoho zatiaľ nesledujete."
@ -1114,9 +1107,9 @@ _tutorial:
step6_1: "Teraz by ste mali vidieť poznámky ďalších používateľov na svojej časovej osi."
step6_2: "Môžete dať \"reakcie\" na poznámky ďalších ľudí ako rýchlu odpoveď."
step6_3: "Reakciu pridáte kliknutím na \"+\" niekoho poznámke a vybratím emoji, ktorou chcete reagovať."
step7_1: "Gralujeme! Dokončili ste základného sprievodcu Misskey."
step7_2: "Ak sa chcete naučiť viac o Misskey, skúste sekciu {help}."
step7_3: "A teraz, veľa šťastia, bavte sa s Misskey! 🚀"
step7_1: "Gralujeme! Dokončili ste základného sprievodcu FoundKey."
step7_2: "Ak sa chcete naučiť viac o FoundKey, skúste sekciu {help}."
step7_3: "A teraz, veľa šťastia, bavte sa s FoundKey! 🚀"
_2fa:
alreadyRegistered: "Už ste zaregistrovali 2-faktorové autentifikačné zariadenie."
registerDevice: "Registrovať nové zariadenie"

View file

@ -1,7 +1,7 @@
---
_lang_: "Svenska"
headlineMisskey: "Ett nätverk kopplat av noter"
introMisskey: "Välkommen! Misskey är en öppen och decentraliserad mikrobloggningstjänst.\nSkapa en \"not\" och dela dina tankar med alla runtomkring dig. 📡\nMed \"reaktioner\" kan du snabbt uttrycka dina känslor kring andras noter.👍\nLåt oss utforska en nya värld!🚀"
introMisskey: "Välkommen! FoundKey är en öppen och decentraliserad mikrobloggningstjänst.\nSkapa en \"not\" och dela dina tankar med alla runtomkring dig. 📡\nMed \"reaktioner\" kan du snabbt uttrycka dina känslor kring andras noter.👍\nLåt oss utforska en nya värld!🚀"
monthAndDay: "{day}/{month}"
search: "Sök"
notifications: "Notifikationer"
@ -108,7 +108,6 @@ add: "Lägg till"
reaction: "Reaktioner"
reactionSetting: "Reaktioner som ska visas i reaktionsväljaren"
reactionSettingDescription2: "Dra för att omordna, klicka för att radera, tryck \"+\" för att lägga till."
rememberNoteVisibility: "Komihåg notvisningsinställningar"
attachCancel: "Ta bort bilaga"
markAsSensitive: "Markera som känsligt innehåll"
unmarkAsSensitive: "Avmarkera som känsligt innehåll"
@ -138,7 +137,7 @@ settingGuide: "Rekommenderade inställningar"
cacheRemoteFiles: "Spara externa filer till cachen"
cacheRemoteFilesDescription: "När denna inställning är avstängd kommer externa filer laddas direkt från den externa instansen. Genom att stänga av detta kommer lagringsutrymme minska i användning men kommer öka datatrafiken eftersom miniatyrer inte kommer genereras."
flagAsBot: "Markera konto som bot"
flagAsBotDescription: "Aktivera det här alternativet om kontot är kontrollerat av ett program. Om aktiverat kommer den fungera som en flagga för andra utvecklare för att hindra ändlösa kedjor med andra bottar. Det kommer också få Misskeys interna system att hantera kontot som en bot."
flagAsBotDescription: "Aktivera det här alternativet om kontot är kontrollerat av ett program. Om aktiverat kommer den fungera som en flagga för andra utvecklare för att hindra ändlösa kedjor med andra bottar. Det kommer också få FoundKeys interna system att hantera kontot som en bot."
flagAsCat: "Markera konto som katt"
flagAsCatDescription: "Aktivera denna inställning för att markera kontot som en katt."
flagShowTimelineReplies: "Visa svar i tidslinje"
@ -198,7 +197,7 @@ noUsers: "Det finns inga användare"
editProfile: "Redigera profil"
noteDeleteConfirm: "Är du säker på att du vill ta bort denna not?"
pinLimitExceeded: "Du kan inte fästa fler noter"
intro: "Misskey har installerats! Vänligen skapa en adminanvändare."
intro: "FoundKey har installerats! Vänligen skapa en adminanvändare."
done: "Klar"
processing: "Bearbetar..."
preview: "Förhandsvisning"

View file

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

View file

@ -1,7 +1,7 @@
---
_lang_: "Українська"
headlineMisskey: "Мережа об'єднана записами"
introMisskey: "Ласкаво просимо! Misskey - децентралізована служба мікроблогів з відкритим кодом.\nСтворюйте \"нотатки\", щоб поділитися тим, що відбувається, і розповісти всім про себе 📡\nЗа допомогою \"реакцій\" ви також можете швидко висловити свої почуття щодо нотаток інших 👍\nДосліджуймо новий світ! 🚀"
introMisskey: "Ласкаво просимо! FoundKey - децентралізована служба мікроблогів з відкритим кодом.\nСтворюйте \"нотатки\", щоб поділитися тим, що відбувається, і розповісти всім про себе 📡\nЗа допомогою \"реакцій\" ви також можете швидко висловити свої почуття щодо нотаток інших 👍\nДосліджуймо новий світ! 🚀"
monthAndDay: "{month}/{day}"
search: "Пошук"
notifications: "Сповіщення"
@ -108,7 +108,6 @@ add: "Додати"
reaction: "Реакції"
reactionSetting: "Налаштування реакцій"
reactionSettingDescription2: "Перемістити щоб змінити порядок, Клацнути мишою щоб видалити, Натиснути \"+\" щоб додати."
rememberNoteVisibility: "Пам’ятати параметри видимісті"
attachCancel: "Видалити вкладення"
markAsSensitive: "Позначити як NSFW"
unmarkAsSensitive: "Зняти позначку NSFW"
@ -138,7 +137,7 @@ settingGuide: "Рекомендована конфігурація"
cacheRemoteFiles: "Кешувати дані з інших інстансів"
cacheRemoteFilesDescription: "Якщо кешування вимкнено, віддалені файли завантажуються безпосередньо з віддаленого інстансу. Це зменшує використання сховища, але збільшує трафік, оскільки не генеруются ескізи."
flagAsBot: "Акаунт бота"
flagAsBotDescription: "Ввімкніть якщо цей обліковий запис використовується ботом. Ця опція позначить обліковий запис як бота. Це потрібно щоб виключити безкінечну інтеракцію між ботами а також відповідного підлаштування Misskey."
flagAsBotDescription: "Ввімкніть якщо цей обліковий запис використовується ботом. Ця опція позначить обліковий запис як бота. Це потрібно щоб виключити безкінечну інтеракцію між ботами а також відповідного підлаштування FoundKey."
flagAsCat: "Акаунт кота"
flagAsCatDescription: "Ввімкніть, щоб позначити, що обліковий запис є котиком."
flagShowTimelineReplies: "Показувати відповіді на нотатки на часовій шкалі"
@ -198,7 +197,7 @@ noUsers: "Немає користувачів"
editProfile: "Редагувати обліковий запис"
noteDeleteConfirm: "Ви дійсно хочете видалити цей запис?"
pinLimitExceeded: "Більше записів не можна закріпити"
intro: "Встановлення Misskey завершено! Будь ласка, створіть обліковий запис адміністратора."
intro: "Встановлення FoundKey завершено! Будь ласка, створіть обліковий запис адміністратора."
done: "Готово"
processing: "Обробка"
preview: "Попередній перегляд"
@ -258,6 +257,7 @@ remoteUserCaution: "Інформація може бути неповною, о
activity: "Активність"
images: "Зображення"
birthday: "День народження"
yearsOld: "{age} років"
registeredDate: "Приєднався(лась)"
location: "Локація"
theme: "Тема"
@ -375,7 +375,7 @@ exploreFediverse: "Огляд федіверсу"
popularTags: "Популярні теги"
userList: "Списки"
about: "Інформація"
aboutMisskey: "Про Misskey"
aboutMisskey: "Про FoundKey"
administrator: "Адмін"
token: "Токен"
twoStepAuthentication: "Двохфакторна аутентифікація"
@ -518,10 +518,9 @@ sort: "Сортування"
ascendingOrder: "За зростанням"
descendingOrder: "За спаданням"
scratchpad: "Чернетка"
scratchpadDescription: "Scratchpad надає середовище для експериментів з AiScript. Ви можете писати, виконувати його і тестувати взаємодію з Misskey."
scratchpadDescription: "Scratchpad надає середовище для експериментів з AiScript. Ви можете писати, виконувати його і тестувати взаємодію з FoundKey."
output: "Вихід"
script: "Скрипт"
disablePagesScript: "Вимкнути AiScript на Сторінках"
updateRemoteUser: "Оновити інформацію про віддаленого користувача"
deleteAllFiles: "Видалити всі файли"
deleteAllFilesConfirm: "Ви дійсно хочете видалити всі файли?"
@ -690,8 +689,6 @@ clearCache: "Очистити кеш"
onlineUsersCount: "{n} користувачів онлайн"
nUsers: "{n} Користувачів"
nNotes: "{n} Записів"
sendErrorReports: "Надіслати звіт про помилки"
sendErrorReportsDescription: "При увімкненні детальна інформація про помилки буде надана Misskey у разі виникнення проблем, що дасть можливість покращити Misskey."
myTheme: "Моя тема"
backgroundColor: "Фон"
accentColor: "Акцент"
@ -747,22 +744,19 @@ _registry:
domain: "Домен"
createKey: "Створити ключ"
_aboutMisskey:
about: "Misskey - це програмне забезпечення з відкритим кодом, яке розробляє syuilo з 2014 року."
about: "FoundKey - це програмне забезпечення з відкритим кодом, яке розробляє syuilo з 2014 року."
contributors: "Головні помічники"
allContributors: "Всі помічники"
source: "Вихідний код"
translation: "Перекладати Misskey"
donate: "Пожертвувати Misskey"
morePatrons: "Ми дуже цінуємо підтримку багатьох інших помічників, не перелічених тут. Дякуємо! 🥰"
patrons: "Підтримали"
translation: "Перекладати FoundKey"
_nsfw:
respect: "Приховувати NSFW медіа"
ignore: "Не приховувати NSFW медіа"
force: "Приховувати всі медіа файли"
_mfm:
cheatSheet: " Довідка MFM"
intro: "MFM це ексклюзивна мова розмітки тексту в Misskey, яку можна використовувати в багатьох місцях. Тут ви можете переглянути приклади її синтаксису."
dummy: "Misskey розширює світ Федіверсу"
intro: "MFM це ексклюзивна мова розмітки тексту в FoundKey, яку можна використовувати в багатьох місцях. Тут ви можете переглянути приклади її синтаксису."
dummy: "FoundKey розширює світ Федіверсу"
mention: "Згадка"
mentionDescription: "За допомогою знака \"@\" перед ім'ям можна згадати конкретного користувача."
hashtag: "Хештеґ"
@ -929,7 +923,7 @@ _time:
hour: "г"
day: "д"
_tutorial:
title: "Як користуватись Misskey"
title: "Як користуватись FoundKey"
step1_1: "Ласкаво просимо!"
step1_2: "Ця сторінка має назву \"стрічка подій\". На ній з'являються записи користувачів на яких ви підписані."
step1_3: "Наразі ваша стрічка порожня, оскільки ви ще не написали жодної нотатки і не підписані на інших."
@ -948,9 +942,9 @@ _tutorial:
step6_1: "Тепер ви повинні бачити записи інших користувачів на вашій стрічці подій."
step6_2: "Також ви можете швидко відповісти, або \"відреагувати\" на записи інших користувачів."
step6_3: "Щоб \"відреагувати\", нажміть на знак плюс \"+\" на записі і виберіть емоджі яким ви хочете \"відреагувати\"."
step7_1: "Вітаю! Ви пройшли ознайомлення з Misskey."
step7_2: "Якщо ви хочете більше дізнатись про Misskey, зайдіть в розділ {help}."
step7_3: "Насолоджуйтесь Misskey! 🚀"
step7_1: "Вітаю! Ви пройшли ознайомлення з FoundKey."
step7_2: "Якщо ви хочете більше дізнатись про FoundKey, зайдіть в розділ {help}."
step7_3: "Насолоджуйтесь FoundKey! 🚀"
_2fa:
registerKey: "Зареєструвати новий ключ безпеки"
_permissions:

View file

@ -1,7 +1,7 @@
---
_lang_: "Tiếng Việt"
headlineMisskey: "Mạng xã hội liên hợp"
introMisskey: "Xin chào! Misskey là một nền tảng tiểu blog phi tập trung mã nguồn mở.\nViết \"tút\" để chia sẻ những suy nghĩ của bạn 📡\nBằng \"biểu cảm\", bạn có thể bày tỏ nhanh chóng cảm xúc của bạn với các tút 👍\nHãy khám phá một thế giới mới! 🚀"
introMisskey: "Xin chào! FoundKey là một nền tảng tiểu blog phi tập trung mã nguồn mở.\nViết \"tút\" để chia sẻ những suy nghĩ của bạn 📡\nBằng \"biểu cảm\", bạn có thể bày tỏ nhanh chóng cảm xúc của bạn với các tút 👍\nHãy khám phá một thế giới mới! 🚀"
monthAndDay: "{day} tháng {month}"
search: "Tìm kiếm"
notifications: "Thông báo"
@ -108,7 +108,6 @@ add: "Thêm"
reaction: "Biểu cảm"
reactionSetting: "Chọn những biểu cảm hiển thị"
reactionSettingDescription2: "Kéo để sắp xếp, nhấn để xóa, nhấn \"+\" để thêm."
rememberNoteVisibility: "Lưu kiểu tút mặc định"
attachCancel: "Gỡ tập tin đính kèm"
markAsSensitive: "Đánh dấu là nhạy cảm"
unmarkAsSensitive: "Bỏ đánh dấu nhạy cảm"
@ -138,7 +137,7 @@ settingGuide: "Cài đặt đề xuất"
cacheRemoteFiles: "Tập tin cache từ xa"
cacheRemoteFilesDescription: "Khi tùy chọn này bị tắt, các tập tin từ xa sẽ được tải trực tiếp từ máy chủ khác. Điều này sẽ giúp giảm dung lượng lưu trữ nhưng lại tăng lưu lượng truy cập, vì hình thu nhỏ sẽ không được tạo."
flagAsBot: "Đánh dấu đây là tài khoản bot"
flagAsBotDescription: "Bật tùy chọn này nếu tài khoản này được kiểm soát bởi một chương trình. Nếu được bật, nó sẽ được đánh dấu để các nhà phát triển khác ngăn chặn chuỗi tương tác vô tận với các bot khác và điều chỉnh hệ thống nội bộ của Misskey để coi tài khoản này như một bot."
flagAsBotDescription: "Bật tùy chọn này nếu tài khoản này được kiểm soát bởi một chương trình. Nếu được bật, nó sẽ được đánh dấu để các nhà phát triển khác ngăn chặn chuỗi tương tác vô tận với các bot khác và điều chỉnh hệ thống nội bộ của FoundKey để coi tài khoản này như một bot."
flagAsCat: "Tài khoản này là mèo"
flagAsCatDescription: "Bật tùy chọn này để đánh dấu tài khoản là một con mèo."
flagShowTimelineReplies: "Hiện lượt trả lời trong bảng tin"
@ -198,7 +197,7 @@ noUsers: "Chưa có ai"
editProfile: "Sửa hồ sơ"
noteDeleteConfirm: "Bạn có chắc muốn xóa tút này?"
pinLimitExceeded: "Bạn đã đạt giới hạn số lượng tút có thể ghim"
intro: "Đã cài đặt Misskey! Xin hãy tạo tài khoản admin."
intro: "Đã cài đặt FoundKey! Xin hãy tạo tài khoản admin."
done: "Xong"
processing: "Đang xử lý"
preview: "Xem trước"
@ -258,6 +257,7 @@ remoteUserCaution: "Vì người dùng này ở máy chủ khác, thông tin hi
activity: "Hoạt động"
images: "Hình ảnh"
birthday: "Sinh nhật"
yearsOld: "{age} tuổi"
registeredDate: "Tham gia"
location: "Đến từ"
theme: "Chủ đề"
@ -375,7 +375,7 @@ exploreFediverse: "Khám phá Fediverse"
popularTags: "Hashtag thông dụng"
userList: "Danh sách"
about: "Giới thiệu"
aboutMisskey: "Về Misskey"
aboutMisskey: "Về FoundKey"
administrator: "Quản trị viên"
token: "Token"
twoStepAuthentication: "Xác minh 2 bước"
@ -518,10 +518,9 @@ sort: "Sắp xếp"
ascendingOrder: "Tăng dần"
descendingOrder: "Giảm dần"
scratchpad: "Scratchpad"
scratchpadDescription: "Scratchpad cung cấp môi trường cho các thử nghiệm AiScript. Bạn có thể viết, thực thi và kiểm tra kết quả tương tác với Misskey trong đó."
scratchpadDescription: "Scratchpad cung cấp môi trường cho các thử nghiệm AiScript. Bạn có thể viết, thực thi và kiểm tra kết quả tương tác với FoundKey trong đó."
output: "Nguồn ra"
script: "Kịch bản"
disablePagesScript: "Tắt AiScript trên Trang"
updateRemoteUser: "Cập nhật thông tin người dùng ở máy chủ khác"
deleteAllFiles: "Xóa toàn bộ tập tin"
deleteAllFilesConfirm: "Bạn có chắc xóa toàn bộ tập tin?"
@ -640,7 +639,7 @@ createNew: "Tạo mới"
optional: "Không bắt buộc"
createNewClip: "Tạo một ghim mới"
public: "Công khai"
i18nInfo: "Misskey đang được các tình nguyện viên dịch sang nhiều thứ tiếng khác nhau. Bạn có thể hỗ trợ tại {link}."
i18nInfo: "FoundKey đang được các tình nguyện viên dịch sang nhiều thứ tiếng khác nhau. Bạn có thể hỗ trợ tại {link}."
manageAccessTokens: "Tạo mã truy cập"
accountInfo: "Thông tin tài khoản"
notesCount: "Số lượng tút"
@ -690,8 +689,6 @@ clearCache: "Xóa bộ nhớ đệm"
onlineUsersCount: "{n} người đang online"
nUsers: "{n} Người"
nNotes: "{n} Tút"
sendErrorReports: "Báo lỗi"
sendErrorReportsDescription: "Khi được bật, thông tin chi tiết về lỗi sẽ được chia sẻ với Misskey khi xảy ra sự cố, giúp nâng cao chất lượng của Misskey.\nBao gồm thông tin như phiên bản hệ điều hành của bạn, trình duyệt bạn đang sử dụng, hoạt động của bạn trong Misskey, v.v."
myTheme: "Theme của tôi"
backgroundColor: "Màu nền"
accentColor: "Màu phụ"
@ -781,13 +778,12 @@ hashtags: "Hashtag"
troubleshooting: "Khắc phục sự cố"
useBlurEffect: "Dùng hiệu ứng làm mờ trong giao diện"
learnMore: "Tìm hiểu thêm"
misskeyUpdated: "Misskey vừa được cập nhật!"
misskeyUpdated: "FoundKey vừa được cập nhật!"
whatIsNew: "Hiện những thay đổi"
translate: "Dịch"
translatedFrom: "Dịch từ {x}"
accountDeletionInProgress: "Đang xử lý việc xóa tài khoản"
usernameInfo: "Bạn có thể sử dụng chữ cái (a ~ z, A ~ Z), chữ số (0 ~ 9) hoặc dấu gạch dưới (_). Tên người dùng không thể thay đổi sau này."
aiChanMode: "Chế độ Ai"
keepCw: "Giữ cảnh báo nội dung"
pubSub: "Tài khoản Chính/Phụ"
lastCommunication: "Lần giao tiếp cuối"
@ -885,22 +881,19 @@ _registry:
domain: "Tên miền"
createKey: "Tạo mã"
_aboutMisskey:
about: "Misskey là phần mềm mã nguồn mở được phát triển bởi syuilo từ năm 2014."
about: "FoundKey là phần mềm mã nguồn mở được phát triển bởi syuilo từ năm 2014."
contributors: "Những người đóng góp nổi bật"
allContributors: "Toàn bộ người đóng góp"
source: "Mã nguồn"
translation: "Dịch Misskey"
donate: "Ủng hộ Misskey"
morePatrons: "Chúng tôi cũng trân trọng sự hỗ trợ của nhiều người đóng góp khác không được liệt kê ở đây. Cảm ơn! 🥰"
patrons: "Người ủng hộ"
translation: "Dịch FoundKey"
_nsfw:
respect: "Ẩn nội dung NSFW"
ignore: "Hiện nội dung NSFW"
force: "Ẩn mọi media"
_mfm:
cheatSheet: "MFM Cheatsheet"
intro: "MFM là ngôn ngữ phát triển độc quyền của Misskey có thể được sử dụng ở nhiều nơi. Tại đây bạn có thể xem danh sách tất cả các cú pháp MFM có sẵn."
dummy: "Misskey mở rộng thế giới Fediverse"
intro: "MFM là ngôn ngữ phát triển độc quyền của FoundKey có thể được sử dụng ở nhiều nơi. Tại đây bạn có thể xem danh sách tất cả các cú pháp MFM có sẵn."
dummy: "FoundKey mở rộng thế giới Fediverse"
mention: "Nhắc đến"
mentionDescription: "Bạn có thể nhắc đến ai đó bằng cách sử dụng @tên người dùng."
hashtag: "Hashtag"
@ -1096,7 +1089,7 @@ _time:
hour: "giờ"
day: "ngày"
_tutorial:
title: "Cách dùng Misskey"
title: "Cách dùng FoundKey"
step1_1: "Xin chào!"
step1_2: "Trang này gọi là \"bảng tin\". Nó hiện \"tút\" từ những người mà bạn \"theo dõi\" theo thứ tự thời gian."
step1_3: "Bảng tin của bạn đang trống, bởi vì bạn chưa đăng tút nào hoặc chưa theo dõi ai."
@ -1105,7 +1098,7 @@ _tutorial:
step3_1: "Hoàn thành thiết lập hồ sơ của bạn?"
step3_2: "Sau đó, hãy thử đăng một tút tiếp theo. Bạn có thể làm như vậy bằng cách nhấn vào nút có biểu tượng bút chì trên màn hình."
step3_3: "Nhập nội dung vào khung soạn thảo và nhấn nút đăng ở góc trên."
step3_4: "Chưa biết nói gì? Thử \"Tôi mới tham gia Misskey\"!"
step3_4: "Chưa biết nói gì? Thử \"Tôi mới tham gia FoundKey\"!"
step4_1: "Đăng xong tút đầu tiên của bạn?"
step4_2: "De! Tút đầu tiên của bạn đã hiện trên bảng tin."
step5_1: "Bây giờ, hãy thử làm cho bảng tin của bạn sinh động hơn bằng cách theo dõi những người khác."
@ -1115,9 +1108,9 @@ _tutorial:
step6_1: "Bạn sẽ có thể xem tút của những người dùng khác trên bảng tin của mình ngay bây giờ."
step6_2: "Bạn cũng có thể đặt \"biểu cảm\" trên tút của người khác để phản hồi nhanh chúng."
step6_3: "Để đính kèm \"biểu cảm\", hãy nhấn vào dấu \"+\" trên tút của người dùng khác rồi chọn biểu tượng cảm xúc mà bạn muốn dùng."
step7_1: "Xin chúc mừng! Bây giờ bạn đã hoàn thành phần hướng dẫn cơ bản của Misskey."
step7_2: "Nếu bạn muốn tìm hiểu thêm về Misskey, hãy thử phần {help}."
step7_3: "Bây giờ, chúc may mắn và vui vẻ với Misskey! 🚀"
step7_1: "Xin chúc mừng! Bây giờ bạn đã hoàn thành phần hướng dẫn cơ bản của FoundKey."
step7_2: "Nếu bạn muốn tìm hiểu thêm về FoundKey, hãy thử phần {help}."
step7_3: "Bây giờ, chúc may mắn và vui vẻ với FoundKey! 🚀"
_2fa:
alreadyRegistered: "Bạn đã đăng ký thiết bị xác minh 2 bước."
registerDevice: "Đăng ký một thiết bị"

View file

@ -1,7 +1,7 @@
---
_lang_: "中文(简体)"
headlineMisskey: "通过帖子连接在一起的网络"
introMisskey: "欢迎!Misskey是一个开源的、去中心化的“微博客”服务。\n通过编写「帖文」来和大家分享你的以及你周围的事情吧📡\n通过「回应」功能可以让你快速地对大家的帖文表达反馈👍\n来探索新的世界吧🚀"
introMisskey: "欢迎!FoundKey是一个开源的、去中心化的“微博客”服务。\n通过编写「帖文」来和大家分享你的以及你周围的事情吧📡\n通过「回应」功能可以让你快速地对大家的帖文表达反馈👍\n来探索新的世界吧🚀"
monthAndDay: "{month}月 {day}日"
search: "搜索"
notifications: "通知"
@ -108,7 +108,6 @@ add: "添加"
reaction: "回应"
reactionSetting: "在选择器中显示的回应"
reactionSettingDescription2: "拖动重新排序,单击删除,点击 + 添加。"
rememberNoteVisibility: "保存上次设置的可见性"
attachCancel: "删除附件"
markAsSensitive: "标记为敏感内容"
unmarkAsSensitive: "取消标记为敏感内容"
@ -138,7 +137,7 @@ settingGuide: "推荐配置"
cacheRemoteFiles: "远程文件缓存"
cacheRemoteFilesDescription: "当禁用此设定时远程文件将直接从远程实例载入。禁用后会减小储存空间需求,但是会增加流量,因为缩略图不会被生成。"
flagAsBot: "这是一个机器人账号"
flagAsBotDescription: "如果此帐户由程序控制,请启用此项。启用后,此标志可以帮助其他开发人员防止机器人之间产生无限互动的行为,并让Misskey的内部系统将此帐户识别为机器人。"
flagAsBotDescription: "如果此帐户由程序控制,请启用此项。启用后,此标志可以帮助其他开发人员防止机器人之间产生无限互动的行为,并让FoundKey的内部系统将此帐户识别为机器人。"
flagAsCat: "将这个账户设定为一只猫"
flagAsCatDescription: "如果您想表明此帐户是一只猫,请打开此标志。"
flagShowTimelineReplies: "在时间线上显示帖子的回复"
@ -198,7 +197,7 @@ noUsers: "无用户"
editProfile: "编辑资料"
noteDeleteConfirm: "要删除该帖子吗?"
pinLimitExceeded: "无法置顶更多了"
intro: "Misskey的部署结束啦填写管理员账号吧"
intro: "FoundKey的部署结束啦填写管理员账号吧"
done: "完成"
processing: "正在处理"
preview: "预览"
@ -258,6 +257,7 @@ remoteUserCaution: "由于此用户来自其它实例,显示的信息可能不
activity: "活动"
images: "图片"
birthday: "生日"
yearsOld: "{age}岁"
registeredDate: "注册于"
location: "位置"
theme: "主题"
@ -375,7 +375,7 @@ exploreFediverse: "探索联邦宇宙"
popularTags: "热门标签"
userList: "列表"
about: "关于"
aboutMisskey: "关于 Misskey"
aboutMisskey: "关于 FoundKey"
administrator: "管理员"
token: "Token (令牌)"
twoStepAuthentication: "两步验证"
@ -518,10 +518,9 @@ sort: "排序"
ascendingOrder: "升序"
descendingOrder: "降序"
scratchpad: "AiScript控制台"
scratchpadDescription: "AiScript控制台为AiScript提供了实验环境。您可以编写代码以与Misskey交互运行它并查看结果。"
scratchpadDescription: "AiScript控制台为AiScript提供了实验环境。您可以编写代码以与FoundKey交互运行它并查看结果。"
output: "输出"
script: "脚本"
disablePagesScript: "禁用页面脚本"
updateRemoteUser: "更新远程用户信息"
deleteAllFiles: "删除所有文件"
deleteAllFilesConfirm: "要删除所有文件吗?"
@ -640,7 +639,7 @@ createNew: "新建"
optional: "可选"
createNewClip: "新建书签"
public: "公开"
i18nInfo: "Misskey已经被志愿者们翻译成了各种语言。如果你也有兴趣可以通过{link}帮助翻译。"
i18nInfo: "FoundKey已经被志愿者们翻译成了各种语言。如果你也有兴趣可以通过{link}帮助翻译。"
manageAccessTokens: "管理 Access Tokens"
accountInfo: "账户信息"
notesCount: "帖子数量"
@ -690,8 +689,6 @@ clearCache: "清除缓存"
onlineUsersCount: "{n}人在线"
nUsers: "{n}用户"
nNotes: "{n}帖子"
sendErrorReports: "发送错误报告"
sendErrorReportsDescription: "启用后如果出现问题可以与Misskey共享详细的错误信息从而帮助提高软件的质量。"
myTheme: "我的主题"
backgroundColor: "背景"
accentColor: "强调色"
@ -781,13 +778,12 @@ hashtags: "话题标签"
troubleshooting: "故障排除"
useBlurEffect: "在UI上使用模糊效果"
learnMore: "更多信息"
misskeyUpdated: "Misskey更新完成"
misskeyUpdated: "FoundKey更新完成"
whatIsNew: "显示更新信息"
translate: "翻译"
translatedFrom: "从 {x} 翻译"
accountDeletionInProgress: "正在删除账户"
usernameInfo: "在服务器上唯一标识您的帐户的名称。您可以使用字母 (a ~ z, A ~ Z)、数字 (0 ~ 9) 和下划线 (_)。用户名以后不能更改。"
aiChanMode: "小蓝模式"
keepCw: "保留CW"
pubSub: "Pub/Sub账户"
lastCommunication: "最近通信"
@ -884,22 +880,19 @@ _registry:
domain: "域"
createKey: "创建键"
_aboutMisskey:
about: "Misskey是由syuilo于2014年开发的开源软件。"
about: "FoundKey是由syuilo于2014年开发的开源软件。"
contributors: "主要贡献者"
allContributors: "全体贡献者"
source: "源代码"
translation: "翻译Misskey"
donate: "赞助Misskey"
morePatrons: "还有很多其他的人也在支持我们,非常感谢🥰"
patrons: "支持者"
translation: "翻译FoundKey"
_nsfw:
respect: "隐藏敏感内容"
ignore: "不隐藏敏感内容"
force: "总是隐藏内容"
_mfm:
cheatSheet: "MFM代码速查表"
intro: "MFM是一种在Misskey中的各个位置使用的专用标记语言。在这里您可以看到MFM中可用的语法列表。"
dummy: "通过Misskey扩展联邦宇宙的世界"
intro: "MFM是一种在FoundKey中的各个位置使用的专用标记语言。在这里您可以看到MFM中可用的语法列表。"
dummy: "通过FoundKey扩展联邦宇宙的世界"
mention: "提及"
mentionDescription: "可以使用 @+用户名 来指示特定用户"
hashtag: "话题标签"
@ -1095,7 +1088,7 @@ _time:
hour: "小时"
day: "日"
_tutorial:
title: "Misskey的使用方法"
title: "FoundKey的使用方法"
step1_1: "欢迎!"
step1_2: "这个页面叫做「时间线」,它会按照时间顺序显示所有你「关注」的人所发的「帖子」。"
step1_3: "如果你并没有发布任何帖子,也没有关注其他的人,你的时间线页面应当什么都没有显示。"
@ -1104,7 +1097,7 @@ _tutorial:
step3_1: "已经设置完个人资料了吗?"
step3_2: "那么接下来,试着写一些什么东西来发布吧。你可以通过点击屏幕上的铅笔图标来打开投稿页面。"
step3_3: "写完内容后,点击窗口右上方的按钮就可以投稿。"
step3_4: "不知道说些什么好吗?那就写下「Misskey我来啦」这样的话吧。"
step3_4: "不知道说些什么好吗?那就写下「FoundKey我来啦」这样的话吧。"
step4_1: "将你的话语发布出去了吗?"
step4_2: "太棒了!现在你可以在你的时间线中看到你刚刚发布的帖子了。"
step5_1: "接下来,关注其他人来使时间线更生动吧。"
@ -1114,9 +1107,9 @@ _tutorial:
step6_1: "现在,您将可以在时间线上看到其他用户的帖子。"
step6_2: "您还可以在其他人的帖子上进行「回应」,以快速做出简单回复。"
step6_3: "在他人的贴子上按下「+」图标,即可选择想要的表情来进行「回应」。"
step7_1: "对Misskey基本操作的简单介绍就到此结束了。 辛苦了!"
step7_2: "如果你想了解更多有关Misskey的信息请参见{help}。"
step7_3: "接下来,享受Misskey带来的乐趣吧🚀"
step7_1: "对FoundKey基本操作的简单介绍就到此结束了。 辛苦了!"
step7_2: "如果你想了解更多有关FoundKey的信息请参见{help}。"
step7_3: "接下来,享受FoundKey带来的乐趣吧🚀"
_2fa:
alreadyRegistered: "此设备已被注册"
registerDevice: "注册设备"

View file

@ -1,7 +1,7 @@
---
_lang_: "繁體中文"
headlineMisskey: "貼文連繫網路"
introMisskey: "歡迎! Misskey是一個開放原始碼且去中心化的社群網路。\n透過「貼文」分享周邊新鮮事並告訴其他人您的想法📡\n透過「情感」功能對大家的貼文表達情感👍\n一起來探索這個新的世界吧🚀"
introMisskey: "歡迎! FoundKey是一個開放原始碼且去中心化的社群網路。\n透過「貼文」分享周邊新鮮事並告訴其他人您的想法📡\n透過「情感」功能對大家的貼文表達情感👍\n一起來探索這個新的世界吧🚀"
monthAndDay: "{month}月 {day}日"
search: "搜尋"
notifications: "通知"
@ -108,7 +108,6 @@ add: "新增"
reaction: "情感"
reactionSetting: "在選擇器中顯示反應"
reactionSettingDescription2: "拖動以重新列序,點擊以刪除,按下 + 添加。"
rememberNoteVisibility: "記住貼文可見性"
attachCancel: "移除附件"
markAsSensitive: "標記為敏感內容"
unmarkAsSensitive: "取消標記為敏感內容"
@ -138,7 +137,7 @@ settingGuide: "推薦設定"
cacheRemoteFiles: "快取遠端檔案"
cacheRemoteFilesDescription: "禁用此設定會停止遠端檔案的緩存,從而節省儲存空間,但資料會因直接連線從而產生額外連接數據。"
flagAsBot: "此使用者是機器人"
flagAsBotDescription: "如果本帳戶是由程式控制,請啟用此選項。啟用後,會作為標示幫助其他開發者防止機器人之間產生無限互動的行為,並會調整Misskey內部系統將本帳戶識別為機器人"
flagAsBotDescription: "如果本帳戶是由程式控制,請啟用此選項。啟用後,會作為標示幫助其他開發者防止機器人之間產生無限互動的行為,並會調整FoundKey內部系統將本帳戶識別為機器人"
flagAsCat: "此使用者是貓"
flagAsCatDescription: "如果想將本帳戶標示為一隻貓,請開啟此標示"
flagShowTimelineReplies: "在時間軸上顯示貼文的回覆"
@ -198,7 +197,7 @@ noUsers: "沒有任何使用者"
editProfile: "編輯個人檔案"
noteDeleteConfirm: "確定刪除此貼文嗎?"
pinLimitExceeded: "不能置頂更多貼文了"
intro: "Misskey 部署完成!請建立管理員帳戶。"
intro: "FoundKey 部署完成!請建立管理員帳戶。"
done: "完成"
processing: "處理中"
preview: "預覽"
@ -258,6 +257,7 @@ remoteUserCaution: "由於該使用者來自遠端實例,因此資訊可能非
activity: "動態"
images: "圖片"
birthday: "生日"
yearsOld: "{age}歲"
registeredDate: "註冊日期"
location: "位置"
theme: "外觀主題"
@ -375,7 +375,7 @@ exploreFediverse: "探索聯邦世界"
popularTags: "熱門標籤"
userList: "清單"
about: "資訊"
aboutMisskey: "關於 Misskey"
aboutMisskey: "關於 FoundKey"
administrator: "管理員"
token: "權杖"
twoStepAuthentication: "兩階段驗證"
@ -518,10 +518,9 @@ sort: "排序"
ascendingOrder: "昇冪"
descendingOrder: "降冪"
scratchpad: "暫存記憶體"
scratchpadDescription: "AiScript控制台為AiScript提供了實驗環境。您可以在此編寫、執行和確認代碼與Misskey互動的结果。"
scratchpadDescription: "AiScript控制台為AiScript提供了實驗環境。您可以在此編寫、執行和確認代碼與FoundKey互動的结果。"
output: "輸出"
script: "腳本"
disablePagesScript: "停用頁面的AiScript腳本"
updateRemoteUser: "更新遠端使用者資訊"
deleteAllFiles: "刪除所有檔案"
deleteAllFilesConfirm: "要删除所有檔案嗎?"
@ -640,7 +639,7 @@ createNew: "新建"
optional: "可選"
createNewClip: "建立新摘錄"
public: "公開"
i18nInfo: "Misskey已經被志願者們翻譯成各種語言版本如果想要幫忙的話可以進入{link}幫助翻譯。"
i18nInfo: "FoundKey已經被志願者們翻譯成各種語言版本如果想要幫忙的話可以進入{link}幫助翻譯。"
manageAccessTokens: "管理存取權杖"
accountInfo: "帳戶資訊"
notesCount: "貼文數量"
@ -690,8 +689,6 @@ clearCache: "清除快取資料"
onlineUsersCount: "{n}人正在線上"
nUsers: "{n}用戶"
nNotes: "{n}貼文"
sendErrorReports: "傳送錯誤報告"
sendErrorReportsDescription: "啟用後問題報告將傳送至開發者以提升軟體品質。問題報告可能包括OS版本瀏覽器類型行為歷史記錄等。"
myTheme: "我的佈景主題"
backgroundColor: "背景"
accentColor: "重點色彩"
@ -781,13 +778,12 @@ hashtags: "#tag"
troubleshooting: "故障排除"
useBlurEffect: "在 UI 上使用模糊效果"
learnMore: "更多資訊"
misskeyUpdated: "Misskey 更新完成!"
misskeyUpdated: "FoundKey 更新完成!"
whatIsNew: "顯示更新資訊"
translate: "翻譯"
translatedFrom: "從 {x} 翻譯"
accountDeletionInProgress: "正在刪除帳戶"
usernameInfo: "在伺服器上您的帳戶是唯一的識別名稱。您可以使用字母 (a ~ z, A ~ Z)、數字 (0 ~ 9) 和下底線 (_)。之後帳戶名是不能更改的。"
aiChanMode: "小藍模式"
keepCw: "保持CW"
pubSub: "Pub/Sub 帳戶"
lastCommunication: "最近的通信"
@ -884,22 +880,19 @@ _registry:
domain: "域"
createKey: "新增機碼"
_aboutMisskey:
about: "Misskey是由syuilo自2014年起開發的開源軟體。"
about: "FoundKey是由syuilo自2014年起開發的開源軟體。"
contributors: "主要貢獻者"
allContributors: "全體貢獻人員"
source: "原始碼"
translation: "翻譯Misskey"
donate: "贊助Misskey"
morePatrons: "還有許許多多幫助我們的其他人,非常感謝你們。 🥰"
patrons: "贊助者"
translation: "翻譯FoundKey"
_nsfw:
respect: "隱藏敏感內容"
ignore: "不隱藏敏感內容"
force: "隱藏所有內容"
_mfm:
cheatSheet: "MFM代碼小抄"
intro: "MFM是Misskey專用的標記語言可以在Misskey中的各個位置使用。 您可以這裏看到MFM可用語法列表。"
dummy: "Misskey拓展了Fediverse的世界"
intro: "MFM是FoundKey專用的標記語言可以在FoundKey中的各個位置使用。 您可以這裏看到MFM可用語法列表。"
dummy: "FoundKey拓展了Fediverse的世界"
mention: "提及"
mentionDescription: "透過 @+用戶名 來標示特定使用者。"
hashtag: "#tag"
@ -1095,7 +1088,7 @@ _time:
hour: "小時"
day: "日"
_tutorial:
title: "Misskey使用方法"
title: "FoundKey使用方法"
step1_1: "歡迎!"
step1_2: "此為「時間軸」頁面,它會按照時間順序顯示你「追隨」的人發出的「貼文」"
step1_3: "由於你沒有發佈任何貼文,也沒有追隨任何人,所以你的時間軸目前是空的。"
@ -1104,7 +1097,7 @@ _tutorial:
step3_1: "個人資料都設定好了嗎?"
step3_2: "接下來,讓我們來試試看發個文,按一下畫面上的鉛筆圖示來開始"
step3_3: "輸入完內容後,按視窗右上角的按鈕來發文"
step3_4: "不知道該寫什麼內容嗎?試試看「開始使用Misskey了」如何。"
step3_4: "不知道該寫什麼內容嗎?試試看「開始使用FoundKey了」如何。"
step4_1: "貼文發出去了嗎?"
step4_2: "如果你的貼文出現在時間軸上,就代表發文成功。"
step5_1: "現在試試看追隨其他人來讓你的時間軸變得更生動吧。"
@ -1114,9 +1107,9 @@ _tutorial:
step6_1: "現在你可以在時間軸上看到其他用戶的貼文。"
step6_2: "你也可以對別人的貼文作出「情感」,作出簡單的回覆。"
step6_3: "在他人的貼文按下\"+\"圖標,即可選擇喜好的表情符號進行回應。"
step7_1: "以上為Misskey的基本操作說明教學在此告一段落。辛苦了。"
step7_2: "歡迎到{help}來瞭解更多Misskey相關介紹。"
step7_3: "那麼,祝您在Misskey玩的開心~ 🚀"
step7_1: "以上為FoundKey的基本操作說明教學在此告一段落。辛苦了。"
step7_2: "歡迎到{help}來瞭解更多FoundKey相關介紹。"
step7_3: "那麼,祝您在FoundKey玩的開心~ 🚀"
_2fa:
alreadyRegistered: "此設備已經被註冊過了"
registerDevice: "註冊裝置"

@ -1 +0,0 @@
Subproject commit 0179793ec891856d6f37a3be16ba4c22f67a81b5

View file

@ -6,27 +6,33 @@
"url": "https://akkoma.dev/FoundKeyGang/FoundKey.git"
},
"private": true,
"workspaces": [
"packages/*"
],
"scripts": {
"postinstall": "node ./scripts/install-packages.js",
"build": "node ./scripts/build.js",
"start": "cd packages/backend && node --experimental-json-modules ./built/index.js",
"start:test": "cd packages/backend && cross-env NODE_ENV=test node --experimental-json-modules ./built/index.js",
"init": "npm run migrate",
"migrate": "cd packages/backend && npx typeorm migration:run -d ormconfig.js",
"migrateandstart": "npm run migrate && npm run start",
"build": "yarn workspaces foreach --parallel --topological run build && yarn run gulp",
"start": "yarn workspace backend run start",
"start:test": "yarn workspace backend run start:test",
"init": "yarn migrate",
"migrate": "yarn workspace backend run migrate",
"migrateandstart": "yarn migrate && yarn start",
"gulp": "gulp build",
"watch": "npm run dev",
"watch": "yarn dev",
"dev": "node ./scripts/dev.js",
"lint": "node ./scripts/lint.js",
"lint": "yarn workspaces foreach run lint",
"cy:open": "cypress open --browser --e2e --config-file=cypress.config.ts",
"cy:run": "cypress run",
"e2e": "start-server-and-test start:test http://localhost:61812 cy:run",
"mocha": "cd packages/backend && cross-env NODE_ENV=test TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT=\"./test/tsconfig.json\" npx mocha",
"test": "npm run mocha",
"mocha": "yarn workspace backend run mocha",
"test": "yarn mocha",
"format": "gulp format",
"clean": "node ./scripts/clean.js",
"clean-all": "node ./scripts/clean-all.js",
"cleanall": "npm run clean-all"
"clean": "yarn workspaces foreach run clean && rm -rf built/",
"clean-all": "yarn workspaces foreach run clean-all && rm -rf built/ node_modules/",
"cleanall": "yarn clean-all"
},
"resolutions": {
"chokidar": "^3.3.1",
"lodash": "^4.17.21"
},
"dependencies": {
"execa": "5.1.1",
@ -40,10 +46,11 @@
"devDependencies": {
"@types/gulp": "4.0.9",
"@types/gulp-rename": "2.0.1",
"@typescript-eslint/parser": "5.30.0",
"@typescript-eslint/parser": "^5.36.2",
"cross-env": "7.0.3",
"cypress": "10.3.0",
"start-server-and-test": "1.14.0",
"typescript": "4.7.4"
}
"typescript": "4.8.3"
},
"packageManager": "yarn@3.2.3"
}

View file

@ -1,4 +1,4 @@
node_modules
/built
/.eslintrc.js
/.eslintrc.cjs
/@types/**/*

View file

@ -1,2 +0,0 @@
save-exact = true
package-lock = false

View file

@ -1 +0,0 @@
network-timeout 600000

View file

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<title>Misskey API</title>
<title>FoundKey API</title>
<!-- needed for adaptive design -->
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1">

View file

@ -0,0 +1,12 @@
export class removeMentionedRemoteUsersColumn1661376843000 {
name = 'removeMentionedRemoteUsersColumn1661376843000';
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "note" DROP COLUMN "mentionedRemoteUsers"`);
}
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")`);
}
}

View file

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

View file

@ -0,0 +1,12 @@
export class largerFollowRequestIds1662943835603 {
name = 'largerFollowRequestIds1662943835603';
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "follow_request" ALTER COLUMN "requestId" TYPE VARCHAR(2048)`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "follow_request" ALTER COLUMN "requestId" TYPE VARCHAR(128)`);
}
}

View file

@ -0,0 +1,11 @@
export class updatePinnedPages1662999442223 {
name = 'updatePinnedPages1662999442223'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" ALTER COLUMN "pinnedPages" SET DEFAULT '{"/featured", "/channels", "/explore", "/pages", "/about-foundkey"}'::varchar[]`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" ALTER COLUMN "pinnedPages" SET DEFAULT '{"/featured", "/channels", "/explore", "/pages", "/about-misskey"}'::varchar[]`);
}
}

View file

@ -1,26 +1,30 @@
{
"name": "backend",
"version": "13.0.0-preview1",
"main": "./index.js",
"private": true,
"type": "module",
"scripts": {
"build": "tsc -p tsconfig.json || echo done. && tsc-alias -p tsconfig.json",
"clean": "rm -rf built/ tsconfig.tsbuildinfo",
"clean-all": "yarn clean && rm -rf node_modules/",
"watch": "node watch.mjs",
"lint": "eslint src --ext .ts",
"mocha": "cross-env NODE_ENV=test TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT=\"./test/tsconfig.json\" mocha",
"migrate": "npx typeorm migration:run -d ormconfig.js",
"start": "node --experimental-json-modules ./built/index.js",
"start:test": "cross-env NODE_ENV=test node --experimental-json-modules ./built/index.js",
"test": "npm run mocha"
},
"resolutions": {
"chokidar": "^3.3.1",
"lodash": "^4.17.21"
},
"dependencies": {
"@bull-board/api": "^4.2.2",
"@bull-board/koa": "4.0.0",
"@discordapp/twemoji": "14.0.2",
"@elastic/elasticsearch": "7.11.0",
"@koa/cors": "3.1.0",
"@koa/multer": "3.0.0",
"@koa/router": "9.0.1",
"@peertube/http-signature": "1.6.0",
"@peertube/http-signature": "1.7.0",
"@sinonjs/fake-timers": "9.1.2",
"@syuilo/aiscript": "0.11.1",
"abort-controller": "3.0.0",
@ -43,9 +47,10 @@
"deep-email-validator": "0.1.21",
"escape-regexp": "0.0.1",
"feed": "4.2.2",
"file-type": "17.1.2",
"file-type": "18.0.0",
"fluent-ffmpeg": "2.1.2",
"got": "12.1.0",
"foundkey-js": "workspace:*",
"got": "12.3.1",
"hpagent": "0.1.2",
"ioredis": "4.28.5",
"ip-cidr": "3.0.10",
@ -67,7 +72,6 @@
"koa-views": "7.0.2",
"mfm-js": "0.22.1",
"mime-types": "2.1.35",
"misskey-js": "0.0.14",
"mocha": "10.0.0",
"multer": "1.4.5-lts.1",
"nested-property": "4.0.0",
@ -82,7 +86,7 @@
"pug": "3.0.2",
"punycode": "2.1.1",
"pureimage": "0.3.14",
"qrcode": "1.5.0",
"qrcode": "1.5.1",
"random-seed": "0.3.0",
"ratelimiter": "3.4.1",
"re2": "1.17.7",
@ -92,10 +96,9 @@
"require-all": "3.0.0",
"rndstr": "1.0.0",
"rss-parser": "3.12.0",
"s-age": "1.1.2",
"sanitize-html": "2.7.0",
"semver": "7.3.7",
"sharp": "0.29.3",
"sharp": "0.30.7",
"speakeasy": "2.0.0",
"strict-event-emitter-types": "2.0.0",
"stringz": "2.1.0",
@ -106,9 +109,9 @@
"tinycolor2": "1.4.2",
"tmp": "0.2.1",
"ts-loader": "9.3.1",
"ts-node": "10.8.1",
"tsc-alias": "1.6.11",
"tsconfig-paths": "4.0.0",
"ts-node": "10.9.1",
"tsc-alias": "1.7.0",
"tsconfig-paths": "4.1.0",
"twemoji-parser": "14.0.0",
"typeorm": "0.3.7",
"unzipper": "0.10.11",
@ -130,7 +133,7 @@
"@types/jsdom": "16.2.14",
"@types/jsonld": "1.5.6",
"@types/jsrsasign": "10.5.1",
"@types/koa": "2.13.4",
"@types/koa": "2.13.5",
"@types/koa-bodyparser": "4.3.7",
"@types/koa-cors": "0.0.2",
"@types/koa-favicon": "2.0.21",
@ -142,20 +145,21 @@
"@types/koa__multer": "2.0.4",
"@types/koa__router": "8.0.11",
"@types/mocha": "9.1.1",
"@types/node": "18.0.0",
"@types/node": "18.7.16",
"@types/node-fetch": "3.0.3",
"@types/nodemailer": "6.4.4",
"@types/oauth": "0.9.1",
"@types/nodemailer": "6.4.5",
"@types/oauth": "^0.9.1",
"@types/pg": "^8.6.5",
"@types/pug": "2.0.6",
"@types/punycode": "2.1.0",
"@types/qrcode": "1.4.2",
"@types/qrcode": "1.5.0",
"@types/random-seed": "0.3.3",
"@types/ratelimiter": "3.4.3",
"@types/redis": "4.0.11",
"@types/rename": "1.0.4",
"@types/sanitize-html": "2.6.2",
"@types/semver": "7.3.10",
"@types/sharp": "0.30.4",
"@types/semver": "7.3.12",
"@types/sharp": "0.30.5",
"@types/sinonjs__fake-timers": "8.1.2",
"@types/speakeasy": "2.0.7",
"@types/tinycolor2": "1.4.3",
@ -164,12 +168,13 @@
"@types/web-push": "3.3.2",
"@types/websocket": "1.0.5",
"@types/ws": "8.5.3",
"@typescript-eslint/eslint-plugin": "^5.30.0",
"@typescript-eslint/parser": "^5.30.0",
"@typescript-eslint/eslint-plugin": "^5.36.2",
"@typescript-eslint/parser": "^5.36.2",
"cross-env": "7.0.3",
"eslint": "^8.20.0",
"eslint-plugin-import": "^2.26.0",
"execa": "6.1.0",
"typescript": "^4.7.4"
"form-data": "^4.0.0",
"typescript": "^4.8.3"
}
}

View file

@ -17,8 +17,8 @@ const ev = new Xev();
/**
* Init process
*/
export default async function(): void {
process.title = `Misskey (${cluster.isPrimary ? 'master' : 'worker'})`;
export default async function(): Promise<void> {
process.title = `FoundKey (${cluster.isPrimary ? 'master' : 'worker'})`;
if (cluster.isPrimary || envOption.disableClustering) {
await masterMain();
@ -32,8 +32,8 @@ export default async function(): void {
await workerMain();
}
// ユニットテスト時にMisskeyが子プロセスで起動された時のため
// それ以外のときは process.send は使えないので弾く
// for when FoundKey is launched as a child process during unit testing
// otherwise, process.send cannot be used, so it is suppressed
if (process.send) {
process.send('ok');
}

View file

@ -26,30 +26,28 @@ const themeColor = chalk.hex('#86b300');
function greet(): void {
if (!envOption.quiet) {
//#region Misskey logo
const v = `v${meta.version}`;
console.log(themeColor(' _____ _ _ '));
console.log(themeColor(' | |_|___ ___| |_ ___ _ _ '));
console.log(themeColor(' | | | | |_ -|_ -| \'_| -_| | |'));
console.log(themeColor(' |_|_|_|_|___|___|_,_|___|_ |'));
console.log(' ' + chalk.gray(v) + themeColor(' |___|\n'.substr(v.length)));
//#region FoundKey logo
console.log(themeColor(' ___ _ _ __ '));
console.log(themeColor(' | __|__ _ _ _ _ __| | |/ /___ _ _ '));
console.log(themeColor(' | _/ _ \\ || | \' \\/ _` | \' </ -_) || |'));
console.log(themeColor(' |_|\\___/\\_,_|_||_\\__,_|_|\\_\\___|\\_, |'));
console.log(themeColor(' |__/ '));
//#endregion
console.log(' Misskey is an open-source decentralized microblogging platform.');
console.log(chalk.rgb(255, 136, 0)(' If you like Misskey, please donate to support development. https://www.patreon.com/syuilo'));
console.log(' FoundKey is an open-source decentralized microblogging platform.');
console.log('');
console.log(chalkTemplate`--- ${os.hostname()} {gray (PID: ${process.pid.toString()})} ---`);
}
bootLogger.info('Welcome to Misskey!');
bootLogger.info(`Misskey v${meta.version}`, null, true);
bootLogger.info('Welcome to FoundKey!');
bootLogger.info(`FoundKey v${meta.version}`, null, true);
}
/**
* Init master process
*/
export async function masterMain(): void {
export async function masterMain(): Promise<void> {
let config!: Config;
// initialize app
@ -61,11 +59,11 @@ export async function masterMain(): void {
config = loadConfigBoot();
await connectDb();
} catch (e) {
bootLogger.error('Fatal error occurred during initialization', null, true);
bootLogger.error('Fatal error occurred during initialization', {}, true);
process.exit(1);
}
bootLogger.succ('Misskey initialized');
bootLogger.succ('FoundKey initialized');
if (!envOption.disableClustering) {
await spawnWorkers(config.clusterLimit);
@ -74,9 +72,9 @@ export async function masterMain(): void {
bootLogger.succ(`Now listening on port ${config.port} on ${config.url}`, null, true);
if (!envOption.noDaemons) {
import('../daemons/server-stats.js').then(x => x.default());
import('../daemons/queue-stats.js').then(x => x.default());
import('../daemons/janitor.js').then(x => x.default());
import('../daemons/server-stats.js').then(x => x.serverStats());
import('../daemons/queue-stats.js').then(x => x.queueStats());
import('../daemons/janitor.js').then(x => x.janitor());
}
}
@ -87,7 +85,7 @@ function showEnvironment(): void {
if (env !== 'production') {
logger.warn('The environment is not in production mode.');
logger.warn('DO NOT USE FOR PRODUCTION PURPOSE!', null, true);
logger.warn('DO NOT USE FOR PRODUCTION PURPOSE!', {}, true);
}
}
@ -110,8 +108,9 @@ function loadConfigBoot(): Config {
try {
config = loadConfig();
} catch (exception) {
if (exception.code === 'ENOENT') {
configLogger.error('Configuration file not found', null, true);
const e = exception as Partial<NodeJS.ErrnoException> | Error;
if ('code' in e && e.code === 'ENOENT') {
configLogger.error('Configuration file not found', {}, true);
process.exit(1);
} else if (e instanceof Error) {
configLogger.error(e.message);
@ -135,13 +134,13 @@ async function connectDb(): Promise<void> {
const v = await db.query('SHOW server_version').then(x => x[0].server_version);
dbLogger.succ(`Connected: v${v}`);
} catch (e) {
dbLogger.error('Cannot connect', null, true);
dbLogger.error(e);
dbLogger.error('Cannot connect', {}, true);
dbLogger.error(e as Error | string);
process.exit(1);
}
}
async function spawnWorkers(limit = 1): void {
async function spawnWorkers(limit = 1): Promise<void> {
const workers = Math.min(limit, os.cpus().length);
bootLogger.info(`Starting ${workers} worker${workers === 1 ? '' : 's'}...`);
await Promise.all([...Array(workers)].map(spawnWorker));

View file

@ -4,7 +4,7 @@ import { initDb } from '@/db/postgre.js';
/**
* Init worker process
*/
export async function workerMain() {
export async function workerMain(): Promise<void> {
await initDb();
// start server
@ -15,6 +15,6 @@ export async function workerMain() {
if (cluster.isWorker) {
// Send a 'ready' message to parent process
process.send!('ready');
process.send?.('ready');
}
}

View file

@ -6,7 +6,7 @@ import * as fs from 'node:fs';
import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';
import * as yaml from 'js-yaml';
import { Source, Mixin } from './types.js';
import { Source, Mixin, Config } from './types.js';
const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename);
@ -23,7 +23,7 @@ const path = process.env.NODE_ENV === 'test'
? `${dir}/test.yml`
: `${dir}/default.yml`;
export default function load() {
export default function load(): Config {
const meta = JSON.parse(fs.readFileSync(`${_dirname}/../../../../built/meta.json`, 'utf-8'));
const clientManifest = JSON.parse(fs.readFileSync(`${_dirname}/../../../../built/_client_dist_/manifest.json`, 'utf-8'));
const config = yaml.load(fs.readFileSync(path, 'utf-8')) as Source;
@ -47,7 +47,7 @@ export default function load() {
mixin.apiUrl = `${mixin.scheme}://${mixin.host}/api`;
mixin.authUrl = `${mixin.scheme}://${mixin.host}/auth`;
mixin.driveUrl = `${mixin.scheme}://${mixin.host}/files`;
mixin.userAgent = `Misskey/${meta.version} (${config.url})`;
mixin.userAgent = `FoundKey/${meta.version} (${config.url})`;
mixin.clientEntry = clientManifest['src/init.ts'];
if (!config.redis.prefix) config.redis.prefix = mixin.host;
@ -55,7 +55,7 @@ export default function load() {
return Object.assign(config, mixin);
}
function tryCreateUrl(url: string) {
function tryCreateUrl(url: string): URL {
try {
return new URL(url);
} catch (e) {

View file

@ -66,7 +66,7 @@ export type Source = {
};
/**
* Misskeyが自動的に()
* Information that FoundKey automatically sets (by inference from information set by the user)
*/
export type Mixin = {
version: string;

View file

@ -8,8 +8,8 @@ const interval = 30 * 60 * 1000;
/**
* Clean up database occasionally
*/
export default function() {
async function tick() {
export function janitor(): void {
async function tick(): Promise<void> {
await AttestationChallenges.delete({
createdAt: LessThan(new Date(new Date().getTime() - 5 * 60 * 1000)),
});

View file

@ -8,8 +8,8 @@ const interval = 10000;
/**
* Report queue stats regularly
*/
export default function() {
const log = [] as any[];
export function queueStats(): void {
const log: Record<string, Record<string, number>>[] = [];
ev.on('requestQueueStatsLog', x => {
ev.emit(`queueStatsLog:${x.id}`, log.slice(0, x.length || 50));
@ -26,7 +26,7 @@ export default function() {
activeInboxJobs++;
});
async function tick() {
async function tick(): Promise<void> {
const deliverJobCounts = await deliverQueue.getJobCounts();
const inboxJobCounts = await inboxQueue.getJobCounts();

View file

@ -6,20 +6,20 @@ const ev = new Xev();
const interval = 2000;
const roundCpu = (num: number) => Math.round(num * 1000) / 1000;
const round = (num: number) => Math.round(num * 10) / 10;
const roundCpu = (num: number): number => Math.round(num * 1000) / 1000;
const round = (num: number): number => Math.round(num * 10) / 10;
/**
* Report server stats regularly
*/
export default function() {
const log = [] as any[];
export function serverStats(): void {
const log: Record<string, Record<string, number> | number>[] = [];
ev.on('requestServerStatsLog', x => {
ev.emit(`serverStatsLog:${x.id}`, log.slice(0, x.length || 50));
});
async function tick() {
async function tick(): Promise<void> {
const cpu = await cpuUsage();
const memStats = await mem();
const netStats = await net();
@ -52,7 +52,7 @@ export default function() {
// CPU STAT
function cpuUsage(): Promise<number> {
return new Promise((res, rej) => {
return new Promise((res) => {
osUtils.cpuUsage((cpuUsage) => {
res(cpuUsage);
});
@ -60,20 +60,23 @@ function cpuUsage(): Promise<number> {
}
// MEMORY STAT
async function mem() {
async function mem(): Promise<si.Systeminformation.MemData> {
const data = await si.mem();
return data;
}
// NETWORK STAT
async function net() {
async function net(): Promise<si.Systeminformation.NetworkStatsData> {
const iface = await si.networkInterfaceDefault();
const data = await si.networkStats(iface);
return data[0];
}
// FS STAT
async function fs() {
async function fs(): Promise<si.Systeminformation.DisksIoData | {
rIO_sec: number;
wIO_sec: number;
}> {
const data = await si.disksIO().catch(() => ({ rIO_sec: 0, wIO_sec: 0 }));
return data || { rIO_sec: 0, wIO_sec: 0 };
return data;
}

View file

@ -1,8 +1,8 @@
import { URL } from 'node:url';
import * as parse5 from 'parse5';
import * as TreeAdapter from '../../node_modules/parse5/dist/tree-adapters/default.js';
import * as TreeAdapter from 'parse5/dist/tree-adapters/default';
const treeAdapter = TreeAdapter.defaultTreeAdapter;
const treeAdapter = parse5.defaultTreeAdapter;
const urlRegex = /^https?:\/\/[\w\/:%#@$&?!()\[\]~.,=+\-]+/;
const urlRegexFull = /^https?:\/\/[\w\/:%#@$&?!()\[\]~.,=+\-]+$/;
@ -26,7 +26,7 @@ export function fromHtml(html: string, hashtagNames?: string[]): string {
if (!treeAdapter.isElementNode(node)) return '';
if (node.nodeName === 'br') return '\n';
if (node.childNodes) {
if (node.childNodes.length > 0) {
return node.childNodes.map(n => getText(n)).join('');
}
@ -34,14 +34,14 @@ export function fromHtml(html: string, hashtagNames?: string[]): string {
}
function appendChildren(childNodes: TreeAdapter.ChildNode[]): void {
if (childNodes) {
if (childNodes.length > 0) {
for (const n of childNodes) {
analyze(n);
}
}
}
function analyze(node: TreeAdapter.Node) {
function analyze(node: TreeAdapter.Node): void {
if (treeAdapter.isTextNode(node)) {
text += node.value;
return;

View file

@ -1,56 +1,53 @@
import { JSDOM } from 'jsdom';
import * as mfm from 'mfm-js';
import config from '@/config/index.js';
import { UserProfiles } from '@/models/index.js';
import { extractMentions } from '@/misc/extract-mentions.js';
import { intersperse } from '@/prelude/array.js';
import { IMentionedRemoteUsers } from '@/models/entities/note.js';
export function toHtml(nodes: mfm.MfmNode[] | null, mentionedRemoteUsers: IMentionedRemoteUsers = []) {
if (nodes == null) {
// Transforms MFM to HTML, given the MFM text and a list of user IDs that are
// mentioned in the text. If the list of mentions is not given, all mentions
// from the text will be extracted.
export async function toHtml(mfmText: string, mentions?: string[]): Promise<string | null> {
const nodes = mfm.parse(mfmText);
if (nodes.length === 0) {
return null;
}
const { window } = new JSDOM('');
const doc = new JSDOM('').window.document;
const doc = window.document;
function appendChildren(children: mfm.MfmNode[], targetElement: any): void {
if (children) {
for (const child of children.map(x => (handlers as any)[x.type](x))) targetElement.appendChild(child);
}
}
const handlers: { [K in mfm.MfmNode['type']]: (node: mfm.NodeType<K>) => any } = {
bold(node) {
const handlers: { [K in mfm.MfmNode['type']]: (node: mfm.NodeType<K>) => Promise<Node> } = {
async bold(node) {
const el = doc.createElement('b');
appendChildren(node.children, el);
return el;
},
small(node) {
async small(node) {
const el = doc.createElement('small');
appendChildren(node.children, el);
return el;
},
strike(node) {
async strike(node) {
const el = doc.createElement('del');
appendChildren(node.children, el);
return el;
},
italic(node) {
async italic(node) {
const el = doc.createElement('i');
appendChildren(node.children, el);
return el;
},
fn(node) {
async fn(node) {
const el = doc.createElement('i');
appendChildren(node.children, el);
return el;
},
blockCode(node) {
async blockCode(node) {
const pre = doc.createElement('pre');
const inner = doc.createElement('code');
inner.textContent = node.props.code;
@ -58,21 +55,21 @@ export function toHtml(nodes: mfm.MfmNode[] | null, mentionedRemoteUsers: IMenti
return pre;
},
center(node) {
async center(node) {
const el = doc.createElement('div');
appendChildren(node.children, el);
return el;
},
emojiCode(node) {
async emojiCode(node) {
return doc.createTextNode(`\u200B:${node.props.name}:\u200B`);
},
unicodeEmoji(node) {
async unicodeEmoji(node) {
return doc.createTextNode(node.props.emoji);
},
hashtag(node) {
async hashtag(node) {
const a = doc.createElement('a');
a.href = `${config.url}/tags/${node.props.hashtag}`;
a.textContent = `#${node.props.hashtag}`;
@ -80,53 +77,68 @@ export function toHtml(nodes: mfm.MfmNode[] | null, mentionedRemoteUsers: IMenti
return a;
},
inlineCode(node) {
async inlineCode(node) {
const el = doc.createElement('code');
el.textContent = node.props.code;
return el;
},
mathInline(node) {
async mathInline(node) {
const el = doc.createElement('code');
el.textContent = node.props.formula;
return el;
},
mathBlock(node) {
async mathBlock(node) {
const el = doc.createElement('code');
el.textContent = node.props.formula;
return el;
},
link(node) {
async link(node) {
const a = doc.createElement('a');
a.href = node.props.url;
appendChildren(node.children, a);
return a;
},
mention(node) {
// Mastodon microformat: span.h-card > a.u-url.mention
const a = doc.createElement('a');
async mention(node): Promise<HTMLElement | Text> {
const { username, host, acct } = node.props;
const remoteUserInfo = mentionedRemoteUsers.find(remoteUser => remoteUser.username === username && remoteUser.host === host);
a.href = remoteUserInfo?.url ?? remoteUserInfo?.uri ?? `${config.url}/${acct}`;
a.className = 'u-url mention';
a.textContent = acct;
const ids = mentions ?? extractMentions(nodes);
if (ids.length > 0) {
const mentionedUsers = await UserProfiles.createQueryBuilder('user_profile')
.leftJoin('user_profile.user', 'user')
.select('user.username', 'username')
.addSelect('user.host', 'host')
// links should preferably use user friendly urls, only fall back to AP ids
.addSelect('COALESCE(user_profile.url, user.uri)', 'url')
.where('"userId" IN (:...ids)', { ids })
.getRawMany();
const userInfo = mentionedUsers.find(user => user.username === username && user.host === host);
if (userInfo != null) {
// Mastodon microformat: span.h-card > a.u-url.mention
const a = doc.createElement('a');
a.href = userInfo.url ?? `${config.url}/${acct}`;
a.className = 'u-url mention';
a.textContent = acct;
const card = doc.createElement('span');
card.className = 'h-card';
card.appendChild(a);
return card;
const card = doc.createElement('span');
card.className = 'h-card';
card.appendChild(a);
return card;
}
}
// this user does not actually exist
return doc.createTextNode(acct);
},
quote(node) {
async quote(node) {
const el = doc.createElement('blockquote');
appendChildren(node.children, el);
return el;
},
text(node) {
async text(node) {
const el = doc.createElement('span');
const nodes = node.props.text.split(/\r\n|\r|\n/).map(x => doc.createTextNode(x));
@ -137,14 +149,14 @@ export function toHtml(nodes: mfm.MfmNode[] | null, mentionedRemoteUsers: IMenti
return el;
},
url(node) {
async url(node) {
const a = doc.createElement('a');
a.href = node.props.url;
a.textContent = node.props.url;
return a;
},
search(node) {
async search(node) {
const a = doc.createElement('a');
a.href = `https://searx.absturztau.be/?q=${node.props.query}`;
a.textContent = node.props.content;
@ -152,7 +164,16 @@ export function toHtml(nodes: mfm.MfmNode[] | null, mentionedRemoteUsers: IMenti
},
};
appendChildren(nodes, doc.body);
async function appendChildren(children: mfm.MfmNode[], targetElement: HTMLElement): Promise<void> {
type HandlerFunc = (node: mfm.MfmNode) => Promise<Node>;
const htmlChildren = await Promise.all(children.map(x => (handlers[x.type] as HandlerFunc)(x)));
for (const child of htmlChildren) {
targetElement.appendChild(child);
}
}
await appendChildren(nodes, doc.body);
return `<p>${doc.body.innerHTML}</p>`;
}

View file

@ -40,7 +40,7 @@ export class FollowRequest {
public follower: User | null;
@Column('varchar', {
length: 128, nullable: true,
length: 2048, nullable: true,
comment: 'id of Follow Activity.',
})
public requestId: string | null;

View file

@ -78,7 +78,7 @@ export class Meta {
public blockedHosts: string[];
@Column('varchar', {
length: 512, array: true, default: '{/featured,/channels,/explore,/pages,/about-misskey}',
length: 512, array: true, default: '{/featured,/channels,/explore,/pages,/about-foundkey}',
})
public pinnedPages: string[];

View file

@ -1,5 +1,5 @@
import { Entity, Index, JoinColumn, Column, ManyToOne, PrimaryColumn } from 'typeorm';
import { mutedNoteReasons } from '@/types.js';
import { mutedNoteReasons } from 'foundkey-js';
import { id } from '../id.js';
import { Note } from './note.js';
import { User } from './user.js';

View file

@ -1,5 +1,5 @@
import { Entity, Index, JoinColumn, Column, PrimaryColumn, ManyToOne } from 'typeorm';
import { noteVisibilities } from '@/types.js';
import { noteVisibilities } from 'foundkey-js';
import { id } from '../id.js';
import { User } from './user.js';
import { DriveFile } from './drive-file.js';
@ -155,11 +155,6 @@ export class Note {
})
public mentions: User['id'][];
@Column('text', {
default: '[]',
})
public mentionedRemoteUsers: string;
@Column('varchar', {
length: 128, array: true, default: '{}',
})
@ -233,10 +228,3 @@ export class Note {
}
}
}
export type IMentionedRemoteUsers = {
uri: string;
url?: string;
username: string;
host: string;
}[];

View file

@ -1,5 +1,5 @@
import { Entity, Index, JoinColumn, ManyToOne, Column, PrimaryColumn } from 'typeorm';
import { notificationTypes } from '@/types.js';
import { notificationTypes } from 'foundkey-js';
import { id } from '../id.js';
import { User } from './user.js';
import { Note } from './note.js';

View file

@ -1,5 +1,5 @@
import { PrimaryColumn, Entity, Index, JoinColumn, Column, OneToOne } from 'typeorm';
import { noteVisibilities } from '@/types.js';
import { noteVisibilities } from 'foundkey-js';
import { id } from '../id.js';
import { Note } from './note.js';
import { User } from './user.js';

View file

@ -1,5 +1,5 @@
import { Entity, Column, Index, OneToOne, JoinColumn, PrimaryColumn } from 'typeorm';
import { ffVisibility, notificationTypes } from '@/types.js';
import { ffVisibility, notificationTypes } from 'foundkey-js';
import { id } from '../id.js';
import { User } from './user.js';
import { Page } from './page.js';
@ -124,13 +124,6 @@ export class UserProfile {
})
public clientData: Record<string, any>;
// TODO: そのうち消す
@Column('jsonb', {
default: {},
comment: 'The room data of the User.',
})
public room: Record<string, any>;
@Column('boolean', {
default: false,
})

View file

@ -35,7 +35,7 @@ export const NoteReactionRepository = db.getRepository(NoteReaction).extend({
src: NoteReaction[],
me?: { id: User['id'] } | null | undefined,
options?: {
withNote: booleam;
withNote: boolean;
},
): Promise<Packed<'NoteReaction'>[]> {
const reactions = await Promise.allSettled(src.map(reaction => this.pack(reaction, me, options)));

View file

@ -1,4 +1,4 @@
import { notificationTypes } from '@/types.js';
import { notificationTypes } from 'foundkey-js';
export const packedNotificationSchema = {
type: 'object',

View file

@ -1,3 +1,3 @@
# Prelude
このディレクトリのコードはJavaScriptの表現能力を補うためのコードです。
Misskey固有の処理とは独立したコードの集まりですが、Misskeyのコードを読みやすくすることを目的としています。
The code in this directory is intended to complement the expressive capabilities of JavaScript.
It is a collection of code that is independent of FoundKey-specific processing, but is intended to make FoundKey code easier to read.

View file

@ -127,13 +127,18 @@ export default async (job: Bull.Job<InboxJobData>): Promise<string> => {
}
}
// activity.idがあればホストが署名者のホストであることを確認する
if (typeof activity.id === 'string') {
// Verify that activity and actor are from the same host.
const signerHost = extractDbHost(authUser.user.uri!);
const activityIdHost = extractDbHost(activity.id);
if (signerHost !== activityIdHost) {
return `skip: signerHost(${signerHost}) !== activity.id host(${activityIdHost}`;
}
// Verify that the id has a sane length
if (activity.id.length > 2048) {
return `skip: overly long id from ${signerHost}`;
}
}
// Update stats

View file

@ -56,7 +56,7 @@ export default class DbResolver {
}
/**
* AP Note => Misskey Note in DB
* AP Note => FoundKey Note in DB
*/
public async getNoteFromApId(value: string | IObject): Promise<Note | null> {
const parsed = parseUri(value);
@ -91,7 +91,7 @@ export default class DbResolver {
}
/**
* AP Person => Misskey User in DB
* AP Person => FoundKey User in DB
*/
public async getUserFromApId(value: string | IObject): Promise<CacheableUser | null> {
const parsed = parseUri(value);
@ -110,7 +110,7 @@ export default class DbResolver {
}
/**
* AP KeyId => Misskey User and Key
* AP KeyId => FoundKey User and Key
*/
public async getAuthUserFromKeyId(keyId: string): Promise<{
user: CacheableRemoteUser;
@ -135,7 +135,7 @@ export default class DbResolver {
}
/**
* AP Actor id => Misskey User and Key
* AP Actor id => FoundKey User and Key
*/
public async getAuthUserFromApId(uri: string): Promise<{
user: CacheableRemoteUser;

View file

@ -1,8 +0,0 @@
import * as mfm from 'mfm-js';
import { Note } from '@/models/entities/note.js';
import { toHtml } from '../../../mfm/to-html.js';
export default function(note: Note) {
if (!note.text) return '';
return toHtml(mfm.parse(note.text), JSON.parse(note.mentionedRemoteUsers));
}

View file

@ -55,10 +55,10 @@ export async function createImage(actor: CacheableRemoteUser, value: any): Promi
}
/**
* Imageを解決します
* Resolve Image.
*
* Misskeyに対象のImageが登録されていればそれを返し
* Misskeyに登録しそれを返します
* If the target Image is registered in FoundKey, return it; otherwise, fetch it from the remote server and return it.
* Fetch the image from the remote server, register it in FoundKey and return it.
*/
export async function resolveImage(actor: CacheableRemoteUser, value: any): Promise<DriveFile> {
// TODO

View file

@ -53,9 +53,9 @@ export function validateNote(object: any, uri: string) {
}
/**
* Noteをフェッチします
* Fetch Note.
*
* Misskeyに対象のNoteが登録されていればそれを返します
* Returns the target Note if it is registered in FoundKey.
*/
export async function fetchNote(object: string | IObject): Promise<Note | null> {
const dbResolver = new DbResolver();
@ -263,10 +263,10 @@ export async function createNote(value: string | IObject, resolver?: Resolver =
}
/**
* Noteを解決します
* Resolve Note.
*
* Misskeyに対象のNoteが登録されていればそれを返し
* Misskeyに登録しそれを返します
* If the target Note is registered in FoundKey, return it; otherwise, fetch it from a remote server and return it.
* Fetch the Note from the remote server, register it in FoundKey, and return it.
*/
export async function resolveNote(value: string | IObject, resolver?: Resolver): Promise<Note | null> {
const uri = typeof value === 'string' ? value : value.id;

View file

@ -101,9 +101,9 @@ function validateActor(x: IObject, uri: string): IActor {
}
/**
* Personをフェッチします
* Fetches a person.
*
* Misskeyに対象のPersonが登録されていればそれを返します
* If the target Person is registered in FoundKey, it is returned.
*/
export async function fetchPerson(uri: string, resolver?: Resolver): Promise<CacheableUser | null> {
if (typeof uri !== 'string') throw new Error('uri is not string');
@ -275,11 +275,11 @@ export async function createPerson(uri: string, resolver?: Resolver = new Resolv
}
/**
* Personの情報を更新します
* Misskeyに対象のPersonが登録されていなければ無視します
* Update Person information.
* If the target Person is not registered in FoundKey, it is ignored.
* @param uri URI of Person
* @param resolver Resolver
* @param hint Hint of Person object (Personの場合Remote resolveをせずに更新に利用します)
* @param hint Hint of Person object (If this value is a valid Person, it is used for updating without Remote resolve.)
*/
export async function updatePerson(uri: string, resolver?: Resolver = new Resolver(), hint?: IObject): Promise<void> {
if (typeof uri !== 'string') throw new Error('uri is not string');
@ -384,10 +384,10 @@ export async function updatePerson(uri: string, resolver?: Resolver = new Resolv
}
/**
* Personを解決します
* Resolve Person.
*
* Misskeyに対象のPersonが登録されていればそれを返し
* Misskeyに登録しそれを返します
* If the target Person is registered in FoundKey, return it; otherwise, fetch it from a remote server and return it.
* Fetch the person from the remote server, register it in FoundKey, and return it.
*/
export async function resolvePerson(uri: string, resolver?: Resolver): Promise<CacheableUser> {
if (typeof uri !== 'string') throw new Error('uri is not string');

View file

@ -35,10 +35,10 @@ export async function extractPollFromQuestion(source: string | IObject, resolver
/**
* Update votes of Question
* @param uri URI of AP Question object
* @param value AP Question object or its id
* @returns true if updated
*/
export async function updateQuestion(value: any) {
export async function updateQuestion(value: string | IObject) {
const uri = typeof value === 'string' ? value : value.id;
// URIがこのサーバーを指しているならスキップ

View file

@ -1,11 +1,11 @@
import { In, IsNull } from 'typeorm';
import config from '@/config/index.js';
import { Note, IMentionedRemoteUsers } from '@/models/entities/note.js';
import { Note } from '@/models/entities/note.js';
import { DriveFile } from '@/models/entities/drive-file.js';
import { DriveFiles, Notes, Users, Emojis, Polls } from '@/models/index.js';
import { Emoji } from '@/models/entities/emoji.js';
import { Poll } from '@/models/entities/poll.js';
import toHtml from '../misc/get-note-html.js';
import { toHtml } from '@/mfm/to-html.js';
import renderEmoji from './emoji.js';
import renderMention from './mention.js';
import renderHashtag from './hashtag.js';
@ -55,28 +55,31 @@ export default async function renderNote(note: Note, dive = true, isTalk = false
const attributedTo = `${config.url}/users/${note.userId}`;
const mentions = (JSON.parse(note.mentionedRemoteUsers) as IMentionedRemoteUsers).map(x => x.uri);
const mentionedUsers = note.mentions.length > 0 ? await Users.findBy({
id: In(note.mentions),
}) : [];
const mentionUris = mentionedUsers
// only remote users
.filter(user => Users.isRemoteUser(user))
.map(user => user.uri);
let to: string[] = [];
let cc: string[] = [];
if (note.visibility === 'public') {
to = ['https://www.w3.org/ns/activitystreams#Public'];
cc = [`${attributedTo}/followers`].concat(mentions);
cc = [`${attributedTo}/followers`].concat(mentionUris);
} else if (note.visibility === 'home') {
to = [`${attributedTo}/followers`];
cc = ['https://www.w3.org/ns/activitystreams#Public'].concat(mentions);
cc = ['https://www.w3.org/ns/activitystreams#Public'].concat(mentionUris);
} else if (note.visibility === 'followers') {
to = [`${attributedTo}/followers`];
cc = mentions;
cc = mentionUris;
} else {
to = mentions;
to = mentionUris;
}
const mentionedUsers = note.mentions.length > 0 ? await Users.findBy({
id: In(note.mentions),
}) : [];
const hashtagTags = (note.tags || []).map(tag => renderHashtag(tag));
const mentionTags = mentionedUsers.map(u => renderMention(u));
@ -97,9 +100,7 @@ export default async function renderNote(note: Note, dive = true, isTalk = false
const summary = note.cw === '' ? String.fromCharCode(0x200B) : note.cw;
const content = toHtml(Object.assign({}, note, {
text: apText,
}));
const content = await toHtml(apText, note.mentions);
const emojis = await getEmojis(note.emojis);
const apemojis = emojis.map(emoji => renderEmoji(emoji));
@ -112,7 +113,7 @@ export default async function renderNote(note: Note, dive = true, isTalk = false
const asPoll = poll ? {
type: 'Question',
content: toHtml(Object.assign({}, note, { text })),
content: await toHtml(text, note.mentions),
[poll.expiresAt && poll.expiresAt < new Date() ? 'closed' : 'endTime']: poll.expiresAt,
[poll.multiple ? 'anyOf' : 'oneOf']: poll.choices.map((text, i) => ({
type: 'Note',

View file

@ -1,5 +1,4 @@
import { URL } from 'node:url';
import * as mfm from 'mfm-js';
import config from '@/config/index.js';
import { ILocalUser } from '@/models/entities/user.js';
import { toHtml } from '@/mfm/to-html.js';
@ -66,7 +65,7 @@ export async function renderPerson(user: ILocalUser) {
url: `${config.url}/@${user.username}`,
preferredUsername: user.username,
name: user.name,
summary: profile.description ? toHtml(mfm.parse(profile.description)) : null,
summary: profile.description ? await toHtml(profile.description) : null,
icon: avatar ? renderImage(avatar) : null,
image: banner ? renderImage(banner) : null,
tag,

View file

@ -206,16 +206,19 @@ router.get('/emojis/:emoji', async ctx => {
// like
router.get('/likes/:like', async ctx => {
const reaction = await NoteReactions.findOneBy({ id: ctx.params.like });
const note = await Notes.findOneBy({
id: reaction.noteId,
visibility: In(['public' as const, 'home' as const]),
});
if (reaction == null) {
if (note == null) {
ctx.status = 404;
return;
}
const note = await Notes.findOneBy({ id: reaction.noteId });
const reaction = await NoteReactions.findOneBy({ id: ctx.params.like });
if (note == null) {
if (reaction == null) {
ctx.status = 404;
return;
}

View file

@ -13,6 +13,7 @@ export async function readNotification(
// Update documents
const result = await Notifications.update({
notifieeId: userId,
id: In(notificationIds),
isRead: false,
}, {

View file

@ -1,6 +1,6 @@
import { Brackets } from 'typeorm';
import { notificationTypes } from 'foundkey-js';
import { Notifications, Followings, Mutings, Users, UserProfiles } from '@/models/index.js';
import { notificationTypes } from '@/types.js';
import read from '@/services/note/read.js';
import { readNotification } from '../../common/read-notification.js';
import define from '../../define.js';

View file

@ -1,5 +1,6 @@
import RE2 from 're2';
import * as mfm from 'mfm-js';
import { notificationTypes } from 'foundkey-js';
import { publishMainStream, publishUserEvent } from '@/services/stream.js';
import acceptAllFollowRequests from '@/services/following/requests/accept-all.js';
import { publishToFollowers } from '@/services/i/update.js';
@ -9,7 +10,6 @@ import { updateUsertags } from '@/services/update-hashtag.js';
import { Users, DriveFiles, UserProfiles, Pages } from '@/models/index.js';
import { User } from '@/models/entities/user.js';
import { UserProfile } from '@/models/entities/user-profile.js';
import { notificationTypes } from '@/types.js';
import { normalizeForSearch } from '@/misc/normalize-for-search.js';
import { langmap } from '@/misc/langmap.js';
import define from '../../define.js';

View file

@ -1,4 +1,5 @@
import { In } from 'typeorm';
import { noteVisibilities } from 'foundkey-js';
import create from '@/services/note/create.js';
import { User } from '@/models/entities/user.js';
import { Users, DriveFiles, Notes, Channels, Blockings } from '@/models/index.js';
@ -7,7 +8,6 @@ import { Note } from '@/models/entities/note.js';
import { Channel } from '@/models/entities/channel.js';
import { MAX_NOTE_TEXT_LENGTH, HOUR } from '@/const.js';
import { isPureRenote } from '@/misc/renote.js';
import { noteVisibilities } from '../../../../types.js';
import { ApiError } from '../../error.js';
import define from '../../define.js';
import { getNote } from '../../common/getters.js';

View file

@ -34,11 +34,11 @@ export const errors = {
},
},
'418': {
'I_AM_AI': {
'I_AM_A_TEAPOT': {
value: {
error: {
message: 'You sent a request to Ai-chan, Misskey\'s showgirl, instead of the server.',
code: 'I_AM_AI',
message: 'I am a teapot.',
code: 'I_AM_A_TEAPOT',
id: '60c46cd1-f23a-46b1-bebe-5d2b73951a84',
},
},

View file

@ -9,7 +9,7 @@ export function genOpenapiSpec() {
info: {
version: 'v1',
title: 'Misskey API',
title: 'FoundKey API',
'x-logo': { url: '/static-assets/api-doc.png' },
},

View file

@ -10,6 +10,7 @@ import { fetchMeta } from '@/misc/fetch-meta.js';
import { Users, UserProfiles } from '@/models/index.js';
import { ILocalUser } from '@/models/entities/user.js';
import { redisClient } from '@/db/redis.js';
import { I18n } from '@/misc/i18n.js';
import signin from '../common/signin.js';
function getUserToken(ctx: Koa.BaseContext): string | null {
@ -26,6 +27,8 @@ function compareOrigin(ctx: Koa.BaseContext): boolean {
return (normalizeUrl(referer) === normalizeUrl(config.url));
}
const locales = await import('../../../../../../locales/index.js').then(mod => mod.default);
// Init router
const router = new Router();
@ -47,6 +50,8 @@ router.get('/disconnect/discord', async ctx => {
});
const profile = await UserProfiles.findOneByOrFail({ userId: user.id });
const locale = locales[profile.lang || 'en-US'];
const i18n = new I18n(locale);
delete profile.integrations.discord;
@ -54,7 +59,7 @@ router.get('/disconnect/discord', async ctx => {
integrations: profile.integrations,
});
ctx.body = 'Discordの連携を解除しました :v:';
ctx.body = i18n.t('_services._discord.disconnected');
// Publish i updated event
publishMainStream(user.id, 'meUpdated', await Users.pack(user, user, {
@ -189,7 +194,7 @@ router.get('/dc/cb', async ctx => {
.getOne();
if (profile == null) {
ctx.throw(404, `@${username}#${discriminator}と連携しているMisskeyアカウントはありませんでした...`);
ctx.throw(404, `There were no FoundKey accounts linked to @${username}#${discriminator}...`);
return;
}
@ -259,6 +264,8 @@ router.get('/dc/cb', async ctx => {
});
const profile = await UserProfiles.findOneByOrFail({ userId: user.id });
const locale = locales[profile.lang || 'en-US'];
const i18n = new I18n(locale);
await UserProfiles.update(user.id, {
integrations: {
@ -274,7 +281,11 @@ router.get('/dc/cb', async ctx => {
},
});
ctx.body = `Discord: @${username}#${discriminator} を、Misskey: @${user.username} に接続しました!`;
ctx.body = i18n.t('_services._discord.connected', {
username,
discriminator,
mkUsername: user.username,
});
// Publish i updated event
publishMainStream(user.id, 'meUpdated', await Users.pack(user, user, {

View file

@ -11,6 +11,7 @@ import { Users, UserProfiles } from '@/models/index.js';
import { ILocalUser } from '@/models/entities/user.js';
import { redisClient } from '@/db/redis.js';
import signin from '../common/signin.js';
import { I18n } from '@/misc/i18n.js';
function getUserToken(ctx: Koa.BaseContext): string | null {
return ((ctx.headers['cookie'] || '').match(/igi=(\w+)/) || [null, null])[1];
@ -26,6 +27,8 @@ function compareOrigin(ctx: Koa.BaseContext): boolean {
return (normalizeUrl(referer) === normalizeUrl(config.url));
}
const locales = await import('../../../../../../locales/index.js').then(mod => mod.default);
// Init router
const router = new Router();
@ -47,6 +50,8 @@ router.get('/disconnect/github', async ctx => {
});
const profile = await UserProfiles.findOneByOrFail({ userId: user.id });
const locale = locales[profile.lang || 'en-US'];
const i18n = new I18n(locale);
delete profile.integrations.github;
@ -54,7 +59,7 @@ router.get('/disconnect/github', async ctx => {
integrations: profile.integrations,
});
ctx.body = 'GitHubの連携を解除しました :v:';
ctx.body = i18n.t('_services._github.disconnected');
// Publish i updated event
publishMainStream(user.id, 'meUpdated', await Users.pack(user, user, {
@ -181,7 +186,7 @@ router.get('/gh/cb', async ctx => {
.getOne();
if (link == null) {
ctx.throw(404, `@${login}と連携しているMisskeyアカウントはありませんでした...`);
ctx.throw(404, `There were no FoundKey accounts linked to @${login}...`);
return;
}
@ -234,6 +239,8 @@ router.get('/gh/cb', async ctx => {
});
const profile = await UserProfiles.findOneByOrFail({ userId: user.id });
const locale = locales[profile.lang || 'en-US'];
const i18n = new I18n(locale);
await UserProfiles.update(user.id, {
integrations: {
@ -246,7 +253,10 @@ router.get('/gh/cb', async ctx => {
},
});
ctx.body = `GitHub: @${login} を、Misskey: @${user.username} に接続しました!`;
ctx.body = i18n.t('_services._github.connected', {
login,
userName: user.username,
});
// Publish i updated event
publishMainStream(user.id, 'meUpdated', await Users.pack(user, user, {

View file

@ -10,6 +10,7 @@ import { Users, UserProfiles } from '@/models/index.js';
import { ILocalUser } from '@/models/entities/user.js';
import { redisClient } from '@/db/redis.js';
import signin from '../common/signin.js';
import { I18n } from '@/misc/i18n.js';
function getUserToken(ctx: Koa.BaseContext): string | null {
return ((ctx.headers['cookie'] || '').match(/igi=(\w+)/) || [null, null])[1];
@ -25,6 +26,8 @@ function compareOrigin(ctx: Koa.BaseContext): boolean {
return (normalizeUrl(referer) === normalizeUrl(config.url));
}
const locales = await import('../../../../../../locales/index.js').then(mod => mod.default);
// Init router
const router = new Router();
@ -46,6 +49,8 @@ router.get('/disconnect/twitter', async ctx => {
});
const profile = await UserProfiles.findOneByOrFail({ userId: user.id });
const locale = locales[profile.lang || 'en-US'];
const i18n = new I18n(locale);
delete profile.integrations.twitter;
@ -53,7 +58,7 @@ router.get('/disconnect/twitter', async ctx => {
integrations: profile.integrations,
});
ctx.body = 'Twitterの連携を解除しました :v:';
ctx.body = i18n.t('_services._twitter.disconnected');
// Publish i updated event
publishMainStream(user.id, 'meUpdated', await Users.pack(user, user, {
@ -146,7 +151,7 @@ router.get('/tw/cb', async ctx => {
.getOne();
if (link == null) {
ctx.throw(404, `@${result.screenName}と連携しているMisskeyアカウントはありませんでした...`);
ctx.throw(404, `There were no FoundKey accounts linked to @${result.screenName}...`);
return;
}
@ -175,6 +180,8 @@ router.get('/tw/cb', async ctx => {
});
const profile = await UserProfiles.findOneByOrFail({ userId: user.id });
const locale = locales[profile.lang || 'en-US'];
const i18n = new I18n(locale);
await UserProfiles.update(user.id, {
integrations: {
@ -188,7 +195,10 @@ router.get('/tw/cb', async ctx => {
},
});
ctx.body = `Twitter: @${result.screenName} を、Misskey: @${user.username} に接続しました!`;
ctx.body = i18n.t('_services._twitter.connected', {
twitterUserName: result.screenName,
userName: user.username,
});
// Publish i updated event
publishMainStream(user.id, 'meUpdated', await Users.pack(user, user, {

View file

@ -26,7 +26,7 @@ export default async function(user: User) {
id: author.link,
title: `${author.name} (@${user.username}@${config.host})`,
updated: notes[0].createdAt,
generator: 'Misskey',
generator: 'FoundKey',
description: `${user.notesCount} Notes, ${profile.ffVisibility === 'public' ? user.followingCount : '?'} Following, ${profile.ffVisibility === 'public' ? user.followersCount : '?'} Followers${profile.description ? ` · ${profile.description}` : ''}`,
link: author.link,
image: await Users.getAvatarUrl(user),

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