diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 32a05fd6fc..0000000000 --- a/.babelrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "plugins": [ - [ - "@babel/plugin-transform-runtime", - { - "corejs": { - "version": 3, - "proposals": true - } - } - ] - ] -} diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000..730647b086 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,7 @@ +contact_links: + - name: 👪 Misskey Forum + url: https://forum.misskey.io/ + about: Ask questions and share knowledge + - name: 💬 Misskey official Discord + url: https://discord.gg/Wp8gVStHW3 + about: Chat freely about Misskey diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 5ae21482a7..30b804f0b5 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,13 +1,40 @@ -## Summary + + - +# What + + + +# Why + + + +# Additional info (optional) + + diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..8abca405fb --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "npm" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "daily" diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 7e02ba39fb..c6e5329c26 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -35,6 +35,8 @@ jobs: node-version: ${{ matrix.node-version }} - name: Install dependencies run: yarn install + - name: Check yarn.lock + run: git diff --exit-code yarn.lock - name: Copy Configure run: cp .circleci/misskey/*.yml .config - name: Build diff --git a/.node-version b/.node-version index e27f7a8bf6..971a6537e5 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -v16.2.0 +v16.6.2 diff --git a/CHANGELOG.md b/CHANGELOG.md index b60eb59313..159de1dea4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1 +1,65 @@ -see [releases](https://github.com/misskey-dev/misskey/releases) + + +## 12.x.x (unreleased) + +### Improvements +- 依存関係の更新 + +### Bugfixes +- チャンネルを作成しているとアカウントを削除できないのを修正 + +## 12.88.0 (2021/08/17) + +### Features +- ノートの翻訳機能を追加 + - 有効にするには、サーバー管理者がDeepLの無料アカウントを登録し、取得した認証キーを「インスタンス設定 > その他 > DeepL Auth Key」に設定する必要があります。 +- Misskey更新時にダイアログを表示するように +- ジョブキューウィジェットに警報音を鳴らす設定を追加 + +### Improvements +- ブロックの挙動を改修 + - ブロックされたユーザーがブロックしたユーザーに対してアクション出来ないようになりました。詳細はドキュメントをご確認ください。 +- UIデザインの調整 +- データベースのインデックスを最適化 +- Proxy使用時にKeep-Aliveをサポート +- DNSキャッシュでネガティブキャッシュをサポート +- 依存関係の更新 + +### Bugfixes +- タッチ操作でウィンドウを閉じることができない問題を修正 +- Renoteされた時刻が投稿された時刻のように表示される問題を修正 +- コントロールパネルでファイルを削除した際の表示を修正 +- ActivityPub: 長いユーザーの名前や自己紹介の対応 + +## 12.87.0 (2021/08/12) + +### Improvements +- 絵文字オートコンプリートで一文字目は最近使った絵文字をサジェストするように +- 絵文字オートコンプリートのパフォーマンスを改善 +- about-misskeyページにドキュメントへのリンクを追加 +- Docker: Node.jsを16.6.2に +- 依存関係の更新 +- 翻訳の更新 + +### Bugfixes +- Misskey更新時、テーマキャッシュの影響でスタイルがおかしくなる問題を修正 + +## 12.86.0 (2021/08/11) + +### Improvements +- ドキュメントの更新 + - ドキュメントにchangelogを追加 +- ぼかし効果のオプションを追加 +- Vueを3.2.1に更新 +- UIの調整 + +### Bugfixes +- ハッシュタグ入力が空のときに#が付くのを修正 +- フォローリクエストのEメール通知を修正 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 436d4224d2..b16d9a75d8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -35,6 +35,11 @@ If your language is not listed in Crowdin, please open an issue. ## Test * Test codes are located in [`/test`](/test). +### Run specify test +``` +npx cross-env TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT="./test/tsconfig.json" npx mocha test/foo.ts --require ts-node/register +``` + ## Continuous integration Misskey uses GitHub Actions for executing automated tests. Configuration files are located in [`/.github/workflows`](/.github/workflows). diff --git a/Dockerfile b/Dockerfile index c090839e7d..1e8584551f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:16.2.0-alpine3.13 AS base +FROM node:16.6.2-alpine3.13 AS base ENV NODE_ENV=production @@ -18,9 +18,7 @@ RUN apk add --no-cache \ nasm \ pkgconfig \ python3 \ - zlib-dev \ - vips-dev \ - vips + zlib-dev COPY package.json yarn.lock .yarnrc ./ RUN yarn install @@ -31,8 +29,7 @@ FROM base AS runner RUN apk add --no-cache \ ffmpeg \ - tini \ - vips + tini ENTRYPOINT ["/sbin/tini", "--"] diff --git a/assets/client/sounds/syuilo/queue-jammed.mp3 b/assets/client/sounds/syuilo/queue-jammed.mp3 new file mode 100644 index 0000000000..99e0c437fe Binary files /dev/null and b/assets/client/sounds/syuilo/queue-jammed.mp3 differ diff --git a/crowdin.yml b/crowdin.yml index 160b9184d3..2d2cd5a49d 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -2,6 +2,6 @@ files: - source: /locales/ja-JP.yml translation: /locales/%locale%.yml update_option: update_as_unapproved - - source: /src/docs/ja-JP/*.md - translation: /src/docs/%locale%/%original_file_name% + - source: /src/docs/ja-JP/**/*.md + translation: /src/docs/%locale%/**/%original_file_name% update_option: update_as_unapproved diff --git a/cypress.json b/cypress.json new file mode 100644 index 0000000000..f2c02689e4 --- /dev/null +++ b/cypress.json @@ -0,0 +1,3 @@ +{ + "baseUrl": "http://localhost" +} diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json new file mode 100644 index 0000000000..02e4254378 --- /dev/null +++ b/cypress/fixtures/example.json @@ -0,0 +1,5 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io", + "body": "Fixtures are a great way to mock data for responses to routes" +} diff --git a/cypress/integration/basic.js b/cypress/integration/basic.js new file mode 100644 index 0000000000..69d59bc2c6 --- /dev/null +++ b/cypress/integration/basic.js @@ -0,0 +1,69 @@ +describe('Basic', () => { + before(() => { + cy.request('POST', '/api/reset-db'); + }); + + beforeEach(() => { + cy.reload(true); + }); + + it('successfully loads', () => { + cy.visit('/'); + }); + + it('setup instance', () => { + cy.visit('/'); + + cy.get('[data-cy-admin-username] input').type('admin'); + + cy.get('[data-cy-admin-password] input').type('admin1234'); + + cy.get('[data-cy-admin-ok]').click(); + }); + + it('signup', () => { + cy.visit('/'); + + cy.get('[data-cy-signup]').click(); + + cy.get('[data-cy-signup-username] input').type('alice'); + + cy.get('[data-cy-signup-password] input').type('alice1234'); + + cy.get('[data-cy-signup-password-retype] input').type('alice1234'); + + cy.get('[data-cy-signup-submit]').click(); + }); + + it('signin', () => { + cy.visit('/'); + + cy.get('[data-cy-signin]').click(); + + cy.get('[data-cy-signin-username] input').type('alice'); + + // Enterキーでサインインできるかの確認も兼ねる + cy.get('[data-cy-signin-password] input').type('alice1234{enter}'); + }); + + it('note', () => { + cy.visit('/'); + + //#region TODO: この辺はUI操作ではなくAPI操作でログインする + cy.get('[data-cy-signin]').click(); + + cy.get('[data-cy-signin-username] input').type('alice'); + + // Enterキーでサインインできるかの確認も兼ねる + cy.get('[data-cy-signin-password] input').type('alice1234{enter}'); + //#endregion + + cy.get('[data-cy-open-post-form]').click(); + + cy.get('[data-cy-post-form-text]').type('Hello, Misskey!'); + + cy.get('[data-cy-open-post-form-submit]').click(); + + // TODO: 投稿した文字列が画面内にあるか(=タイムラインに流れてきたか)のテスト + }); +}); diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js new file mode 100644 index 0000000000..59b2bab6e4 --- /dev/null +++ b/cypress/plugins/index.js @@ -0,0 +1,22 @@ +/// +// *********************************************************** +// This example plugins/index.js can be used to load plugins +// +// You can change the location of this file or turn off loading +// the plugins file with the 'pluginsFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/plugins-guide +// *********************************************************** + +// This function is called when a project is opened or re-opened (e.g. due to +// the project's config changing) + +/** + * @type {Cypress.PluginConfig} + */ +// eslint-disable-next-line no-unused-vars +module.exports = (on, config) => { + // `on` is used to hook into various events Cypress emits + // `config` is the resolved Cypress config +} diff --git a/cypress/support/commands.js b/cypress/support/commands.js new file mode 100644 index 0000000000..119ab03f7c --- /dev/null +++ b/cypress/support/commands.js @@ -0,0 +1,25 @@ +// *********************************************** +// This example commands.js shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** +// +// +// -- This is a parent command -- +// Cypress.Commands.add('login', (email, password) => { ... }) +// +// +// -- This is a child command -- +// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) diff --git a/cypress/support/index.js b/cypress/support/index.js new file mode 100644 index 0000000000..d68db96df2 --- /dev/null +++ b/cypress/support/index.js @@ -0,0 +1,20 @@ +// *********************************************************** +// This example support/index.js is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands' + +// Alternatively you can use CommonJS syntax: +// require('./commands') diff --git a/index.js b/index.js index 9b91b0a03e..aa103e667e 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,13 @@ +/* +import * as fs from 'fs'; + +if (fs.existsSync('./built')) { + import('./built/index.js').then(built => built()); +} else { + console.log('Built code is not found. Probably an error occurred during a build or you just forgot to build.'); +} +*/ + const fs = require('fs'); if (fs.existsSync('./built')) { diff --git a/locales/ar-SA.yml b/locales/ar-SA.yml index 6b1f53caeb..3de8ac764e 100644 --- a/locales/ar-SA.yml +++ b/locales/ar-SA.yml @@ -427,9 +427,13 @@ inUse: "مستخدم" info: "عن" user: "المستخدمون" administration: "إدارة " +postToGallery: "انشر في المعرض" +gallery: "المعرض" expiration: "ينتهي استطلاع الرأي في" middle: "متوسط" global: "الشامل" +_docs: + admin: "إدارة " _email: _follow: title: "يتابعك" diff --git a/locales/cs-CZ.yml b/locales/cs-CZ.yml index 958323525a..1897f3f2aa 100644 --- a/locales/cs-CZ.yml +++ b/locales/cs-CZ.yml @@ -111,6 +111,7 @@ editWidgets: "Upravit widget" editWidgetsExit: "Hotovo" customEmojis: "Vlastní emoji" emoji: "Emoji" +emojis: "Emoji" emojiName: "Jméno emoji" emojiUrl: "URL obrázku" addEmoji: "Přidat emoji" diff --git a/locales/de-DE.yml b/locales/de-DE.yml index 751290441e..1f9afbdc2b 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -1,14 +1,14 @@ --- _lang_: "Deutsch" -headlineMisskey: "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. 👍\nLass uns eine neue Welt erforschen! 🚀" -monthAndDay: "{day}/{month}" +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! 🚀" +monthAndDay: "{day}.{month}." search: "Suchen" notifications: "Benachrichtigungen" username: "Benutzername" password: "Passwort" forgotPassword: "Passwort vergessen" -fetchingAsApObject: "Wird aus dem Fediverse angefragt..." +fetchingAsApObject: "Wird aus dem Fediverse angefragt …" ok: "OK" gotIt: "Verstanden!" cancel: "Abbrechen" @@ -19,16 +19,16 @@ noNotifications: "Keine Benachrichtigungen" instance: "Instanz" settings: "Einstellungen" basicSettings: "Allgemeine Einstellungen" -otherSettings: "Andere Einstellungen" +otherSettings: "Weitere Einstellungen" openInWindow: "In Fenster öffnen" profile: "Profil" timeline: "Chronik" noAccountDescription: "Dieser Nutzer hat seine Profilbeschreibung noch nicht ausgefüllt." -login: "Einloggen" -loggingIn: "Du wirst eingeloggt..." -logout: "Ausloggen" +login: "Anmelden" +loggingIn: "Du wirst angemeldet …" +logout: "Abmelden" signup: "Registrieren" -uploading: "Upload läuft" +uploading: "Wird hochgeladen …" save: "Speichern" users: "Benutzer" addUser: "Benutzer hinzufügen" @@ -47,28 +47,28 @@ deleteAndEdit: "Löschen und Bearbeiten" deleteAndEditConfirm: "Möchtest du diese Notiz wirklich löschen und bearbeiten? Alle Reaktionen, Renotes und Antworten dieser Notiz werden verloren gehen." addToList: "Zu Liste hinzufügen" sendMessage: "Nachricht senden" -copyUsername: "Benutzernamen kopieren" -searchUser: "Benutzersuche" +copyUsername: "Benutzername kopieren" +searchUser: "Nach einem Benutzer suchen" reply: "Antworten" -loadMore: "Mehr anzeigen" +loadMore: "Mehr laden" showMore: "Mehr anzeigen" -youGotNewFollower: "Du hast einen neuen Follower" +youGotNewFollower: "ist dir gefolgt" receiveFollowRequest: "Follow-Anfrage erhalten" followRequestAccepted: "Follow-Anfrage akzeptiert" mention: "Erwähnung" mentions: "Erwähnungen" directNotes: "Direktnachrichten" -importAndExport: "Importieren und Exportieren" -import: "Importieren" -export: "Exportieren" +importAndExport: "Import und Export" +import: "Import" +export: "Export" files: "Dateien" download: "Herunterladen" -driveFileDeleteConfirm: "Möchtest du die Datei \"{name}\" löschen? Die zugehörige Notiz wird ebenso verschwinden." +driveFileDeleteConfirm: "Möchtest du die Datei „{name}“ wirklich löschen? Die zugehörige Notiz wird ebenso verschwinden." unfollowConfirm: "Möchtest du {name} nicht mehr folgen?" exportRequested: "Du hast einen Export angefragt. Dies kann etwas Zeit in Anspruch nehmen. Sobald der Export abgeschlossen ist, wird er deiner Drive hinzugefügt." importRequested: "Du hast einen Import angefragt. Dies kann etwas Zeit in Anspruch nehmen." lists: "Listen" -noLists: "Du hast keine Listen" +noLists: "Keine Listen" note: "Notiz" notes: "Notizen" following: "Folgt" @@ -80,8 +80,8 @@ error: "Fehler" somethingHappened: "Ein Fehler ist aufgetreten" retry: "Wiederholen" pageLoadError: "Laden der Seite fehlgeschlagen." -pageLoadErrorDescription: "Dieser Fehler wird meist durch Netzwerkfehler oder den Browser-Cache verursacht. Versuche den Browser-Cache zu leeren und es nach kurzer Zeit noch einmal zu probieren." -enterListName: "Listennamen eingeben" +pageLoadErrorDescription: "Dieser Fehler wird meist durch Netzwerkfehler oder den Browser-Cache verursacht. Bitte leere den Cache oder versuche es nach einiger Zeit erneut." +enterListName: "Name der Liste eingeben" privacy: "Privatsphäre" makeFollowManuallyApprove: "Follow-Anfragen benötigen Bestätigung" defaultNoteVisibility: "Standardsichtbarkeit" @@ -89,7 +89,7 @@ follow: "Folgen" followRequest: "Follow-Anfrage" followRequests: "Follow-Anfragen" unfollow: "Nicht mehr folgen" -followRequestPending: "Ausstehende Follow-Anfrage" +followRequestPending: "Follow-Anfrage ausstehend" enterEmoji: "Gib ein Emoji ein" renote: "Renote" unrenote: "Renote zurücknehmen" @@ -97,19 +97,19 @@ renoted: "Renote getätigt." cantRenote: "Renote dieses Beitrags nicht möglich." cantReRenote: "Renote einer Renote nicht möglich." quote: "Zitieren" -pinnedNote: "Angepinnte Notiz" -pinned: "Anheften" +pinnedNote: "Angeheftete Notiz" +pinned: "Angeheftet" you: "Du" -clickToShow: "Klicke, um diesen Inhalt anzusehen" +clickToShow: "Zum Anzeigen anklicken" sensitive: "NSFW" add: "Hinzufügen" reaction: "Reaktionen" -reactionSettingDescription: "Gib deine Lieblingsreaktionen ein, um sie der Reaktionsauswahl hinzuzufügen." -reactionSettingDescription2: "Ziehe zum Anordnen, Klicke zum Löschen, Drücke \"+\" zum Hinzufügen" +reactionSettingDescription: "Wähle die Reaktionen aus, die in der Reaktionsauswahl angezeigt werden sollen." +reactionSettingDescription2: "Ziehe zum Anordnen, klicke zum Löschen, drücke + zum Hinzufügen" rememberNoteVisibility: "Notizsichtbarkeit merken" attachCancel: "Anhang entfernen" markAsSensitive: "Als NSFW markieren" -unmarkAsSensitive: "Markierung als NSFW zurücknehmen" +unmarkAsSensitive: "NSFW-Markierung entfernen" enterFileName: "Dateinamen eingeben" mute: "Stummschalten" unmute: "Stummschaltung aufheben" @@ -120,27 +120,28 @@ unsuspend: "Sperrung aufheben" blockConfirm: "Möchtest du diesen Benutzer wirklich blockieren?" unblockConfirm: "Möchtest du diese Blockierung wirklich aufheben?" suspendConfirm: "Möchtest du diesen Benutzer wirklich sperren?" -unsuspendConfirm: "Möchtest du die Sperrung dieses Benutzers wirklich aufheben?" -selectList: "Wähle eine Liste aus" +unsuspendConfirm: "Möchtest du diesen Benutzer wirklich entsperren?" +selectList: "Liste auswählen" selectAntenna: "Antenne auswählen" selectWidget: "Widget auswählen" editWidgets: "Widgets bearbeiten" editWidgetsExit: "Fertig" customEmojis: "Benutzerdefinierte Emojis" -emoji: "Emoji" -emojiName: "Emojiname" +emoji: "Emojis" +emojis: "Emojis" +emojiName: "Emoji-Name" emojiUrl: "Emoji-URL" addEmoji: "Emoji hinzufügen" settingGuide: "Empfohlene Einstellung" -cacheRemoteFiles: "Dateien von anderen Instanzen im Cache speichern" -cacheRemoteFilesDescription: "Wenn diese Einstellung deaktiviert ist, werden Dateien anderer Instanzen direkt von dort geladen. Hierdurch wird Speicherplatz gespart, aber mehr Bandbreite verbraucht, da keine Vorschaubilder generiert werden." +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 dem Server gespart, aber durch fehlende Generierung von Vorschaubildern mehr Bandbreite verwendet." flagAsBot: "Als Bot markieren" -flagAsBotDescription: "Wenn dieses Benutzerkonto durch ein Programm gesteuert wird, setze diesen Haken. Falls aktiviert, agiert es als Flag für andere Entwickler um endlose Kettenreaktionen mit anderen Bots zu verhindern und lässt Misskey's interne Systeme dieses Benutzerkonto als Bot behandeln." +flagAsBotDescription: "Aktiviere diese Option, falls dieses Benutzerkonto durch ein Programm gesteuert wird. Falls aktiviert, agiert es als Flag für andere Entwickler zur Verhinderung von endlosen Kettenreaktionen mit anderen Bots und lässt Misskeys interne Systeme dieses Benutzerkonto als Bot behandeln." flagAsCat: "Als Katze markieren" -flagAsCatDescription: "Setze diese Flag um dieses Benutzerkonto als Katze zu markieren." -autoAcceptFollowed: "Follow-Anfragen automatisch akzeptieren" +flagAsCatDescription: "Aktiviere diese Option, um dieses Benutzerkonto als Katze zu markieren." +autoAcceptFollowed: "Follow-Anfragen von Benutzern, denen du folgst, automatisch akzeptieren" addAccount: "Benutzerkonto hinzufügen" -loginFailed: "Login fehlgeschlagen" +loginFailed: "Anmeldung fehlgeschlagen" showOnRemote: "Auf Ursprungsinstanz ansehen" general: "Allgemein" wallpaper: "Hintergrund" @@ -152,16 +153,16 @@ followConfirm: "Möchtest du {name} wirklich folgen?" proxyAccount: "Proxy-Benutzerkonto" proxyAccountDescription: "Ein Proxy-Benutzerkonto ist ein Benutzerkonto, das sich für Nutzer unter bestimmten Konditionen wie ein Follower aus einer fremden Instanz verhält. Zum Beispiel wird die Aktivität eines Nutzers aus einer fremden Instanz nicht an diese Instanz übermittelt, falls es keinen Benutzer dieser Instanz gibt, der diesem Nutzer aus fremder Instanz folgt. In diesem Fall folgt stattdessen das Proxy-Benutzerkonto." host: "Host" -selectUser: "Benutzer wählen" +selectUser: "Benutzer auswählen" recipient: "Empfänger" annotation: "Anmerkung" federation: "Föderation" -instances: "Instanz" +instances: "Instanzen" registeredAt: "Registriert am" -latestRequestSentAt: "Letzte Anfrage gesendet am" -latestRequestReceivedAt: "Letzte Anfrage erhalten am" -latestStatus: "Neuester Status" -storageUsage: "Speicherplatzverbrauch" +latestRequestSentAt: "Letzte Anfrage gesendet" +latestRequestReceivedAt: "Letzte Anfrage erhalten" +latestStatus: "Neuster Status" +storageUsage: "Verbrauchter Speicherplatz" charts: "Diagramme" perHour: "Pro Stunde" perDay: "Pro Tag" @@ -181,39 +182,39 @@ instanceInfo: "Instanzinformationen" statistics: "Statistiken" clearQueue: "Warteschlange leeren" clearQueueConfirmTitle: "Möchtest du die Warteschlange wirklich leeren?" -clearQueueConfirmText: "Jegliche Notizen, die sich noch in der Warteschlange befinden, werden hierdurch nicht föderiert. Diese Aktion wird normalerweise NICHT benötigt." +clearQueueConfirmText: "Hierdurch werden jegliche noch nicht gesendete Notizen nicht förderiert. Normalerweise wird dies nicht benötigt." clearCachedFiles: "Cache leeren" clearCachedFilesConfirm: "Sollen alle im Cache gespeicherten Dateien von anderen Instanzen wirklich gelöscht werden?" blockedInstances: "Blockierte Instanzen" -blockedInstancesDescription: "Gib den Hostnamen der Instanz an, die blockiert werden soll. Blockierte Instanzen können nicht mehr mit dieser kommunizieren." -muteAndBlock: "Stummschaltungen / Blockierungen" +blockedInstancesDescription: "Gib die Hostnamen der Instanzen, welche blockiert werden sollen, durch Zeilenumbrüche getrennt an. Blockierte Instanzen können mit dieser instanz nicht mehr kommunizieren." +muteAndBlock: "Stummschaltungen und Blockierungen" mutedUsers: "Stummgeschaltete Benutzer" blockedUsers: "Blockierte Benutzer" noUsers: "Keine Benutzer" editProfile: "Profil bearbeiten" noteDeleteConfirm: "Möchtest du diese Notiz wirklich löschen?" -pinLimitExceeded: "Du kannst nicht noch mehr Notizen anpinnen." +pinLimitExceeded: "Es können nicht noch mehr Notizen angeheftet werden" intro: "Misskey Installation abgeschlossen! Lass uns nun ein Administratorkonto erstellen." done: "Fertig" -processing: "In Bearbeitung" +processing: "In Bearbeitung …" preview: "Vorschau" default: "Standard" -noCustomEmojis: "Es existieren keine Emojis" +noCustomEmojis: "Keine benutzerdefinierten Emojis vorhanden" noJobs: "Es gibt keine Jobs" -federating: "Föderiert" +federating: "Wird föderiert" blocked: "Blockiert" suspended: "Gesperrt" all: "Alles" -subscribing: "Abonnieren" -publishing: "Veröffentlichen" +subscribing: "Wird abonniert" +publishing: "Wird veröffentlicht" notResponding: "Antwortet nicht" instanceFollowing: "Gefolgt auf der Instanz" instanceFollowers: "Follower der Instanz" -instanceUsers: "Benutzer dieser Instanz" +instanceUsers: "Benutzer der Instanz" changePassword: "Passwort ändern" security: "Sicherheit" -retypedNotMatch: "Eingaben stimmen nicht überein." -currentPassword: "Momentanes Passwort" +retypedNotMatch: "Beide Eingaben stimmen nicht überein." +currentPassword: "Aktuelles Passwort" newPassword: "Neues Passwort" newPasswordRetype: "Neues Passwort (wiederholen)" attachFile: "Datei anhängen" @@ -221,13 +222,13 @@ more: "Mehr!" featured: "Beliebt" usernameOrUserId: "Benutzername oder Benutzer-ID" noSuchUser: "Benutzer nicht gefunden" -lookup: "Abfragen" +lookup: "Anfragen" announcements: "Ankündigungen" imageUrl: "Bild-URL" remove: "Löschen" removed: "Erfolgreich gelöscht" -removeAreYouSure: "Möchtest du \"{x}\" wirklich löschen?" -deleteAreYouSure: "Möchtest du \"{x}\" wirklich löschen?" +removeAreYouSure: "Möchtest du „{x}“ wirklich entfernen?" +deleteAreYouSure: "Möchtest du „{x}“ wirklich löschen?" resetAreYouSure: "Wirklich zurücksetzen?" saved: "Gespeichert" messaging: "Chat" @@ -237,46 +238,46 @@ fromUrl: "Von einer URL" uploadFromUrl: "Von einer URL hochladen" uploadFromUrlDescription: "URL der hochzuladenden Datei" uploadFromUrlRequested: "Upload angefordert" -uploadFromUrlMayTakeTime: "Es kann eine Weile dauern, bis der Upload abgeschlossen ist." +uploadFromUrlMayTakeTime: "Es kann eine Weile dauern, bis das Hochladen abgeschlossen ist." explore: "Erkunden" -games: "Misskey Spiele" +games: "Misskey-Spiele" messageRead: "Gelesen" noMoreHistory: "Kein weiterer Verlauf vorhanden" startMessaging: "Neuen Chat erstellen" -nUsersRead: "Von {n} gelesen" +nUsersRead: "Von {n} Benutzern gelesen" agreeTo: "Ich stimme {0} zu" tos: "Nutzungsbedingungen" start: "Anfangen" home: "Startseite" -remoteUserCaution: "Diese Informationen sind möglicherweise veraltet, da der Benutzer von einer anderen Instanz stammt." +remoteUserCaution: "Diese Informationen sind möglicherweise unvollständig, da der Benutzer von einer fremden Instanz stammt." activity: "Aktivität" images: "Bilder" birthday: "Geburtstag" yearsOld: "{age} Jahre alt" registeredDate: "Registrationsdatum" location: "Ort" -theme: "Farbthemen" -themeForLightMode: "Farbthema, das im Hellmodus genutzt wird" -themeForDarkMode: "Farbthema, das im Dunkelmodus genutzt wird" +theme: "Farbschema" +themeForLightMode: "Helles Farbschema" +themeForDarkMode: "Dunkles Farbschema" light: "Hell" dark: "Dunkel" -lightThemes: "Helle Farbthemen" -darkThemes: "Dunkle Farbthemen" -syncDeviceDarkMode: "Dunkelmodus mit den Einstellungen deines Gerätes synchronisieren" +lightThemes: "Helle Farbschemata" +darkThemes: "Dunkle Farbschemata" +syncDeviceDarkMode: "Einstellung deines Geräts übernehmen" drive: "Drive" fileName: "Dateiname" selectFile: "Datei auswählen" selectFiles: "Dateien auswählen" -selectFolder: "Wähle einen Ordner" -selectFolders: "Wähle Ordner" +selectFolder: "Ordner auswählen" +selectFolders: "Ordner auswählen" renameFile: "Datei umbenennen" folderName: "Ordnername" createFolder: "Ordner erstellen" renameFolder: "Ordner umbenennen" deleteFolder: "Ordner löschen" addFile: "Datei hinzufügen" -emptyDrive: "Drive ist leer" -emptyFolder: "Der Ordner ist leer" +emptyDrive: "Deine Drive ist leer" +emptyFolder: "Dieser Ordner ist leer" unableToDelete: "Nicht löschbar" inputNewFileName: "Gib einen neuen Dateinamen ein" inputNewDescription: "Gib eine neue Beschreibung ein" @@ -292,7 +293,7 @@ whenServerDisconnected: "Bei Verbindungsverlust zum Server" disconnectedFromServer: "Verbindung zum Server wurde getrennt" reload: "Aktualisieren" doNothing: "Ignorieren" -reloadConfirm: "Möchtest du die Chronik aktualisieren?" +reloadConfirm: "Seite neu laden?" watch: "Beobachten" unwatch: "Nicht mehr beobachten" accept: "Akzeptieren" @@ -300,11 +301,11 @@ reject: "Ablehnen" normal: "Normal" instanceName: "Name der Instanz" instanceDescription: "Beschreibung der Instanz" -maintainerName: "Administrator" -maintainerEmail: "Administrator-Email" +maintainerName: "Betreiber" +maintainerEmail: "Betreiber-E-Mail" tosUrl: "URL der Nutzungsbedingungen" -thisYear: "Dieses Jahr" -thisMonth: "Dieser Monat" +thisYear: "Jahr" +thisMonth: "Monat" today: "Heute" dayX: "{day}" monthX: "{month}" @@ -319,21 +320,21 @@ disablingTimelinesInfo: "Administratoren und Moderatoren haben immer Zugriff auf registration: "Registrieren" enableRegistration: "Registration neuer Benutzer erlauben" invite: "Einladen" -proxyRemoteFiles: "Dateien anderer Instanzen durch Proxy leiten" -proxyRemoteFilesDescription: "Wenn diese Einstellung aktiviert ist, dann werden Dateien von anderen Instanzen, welche entweder nicht lokal gespeichert sind oder durch Überschreiten des Speicherlimits gelöscht wurden, durch einen Proxy geleitet. Hierbei wird auch ein Vorschaubild generiert. \n Dies hat keinen Effekt auf den Speicherplatz des Servers." +proxyRemoteFiles: "Dateien fremder Instanzen durch Proxy leiten" +proxyRemoteFilesDescription: "Wenn diese Einstellung aktiviert ist, dann werden Dateien von fremdem Instanzen, welche entweder nicht lokal gespeichert sind oder durch Überschreiten des Speicherlimits gelöscht wurden, durch einen Proxy geleitet. Hierbei wird auch ein Vorschaubild generiert. \n Dies hat keinen Effekt auf den Speicherplatz des Servers." driveCapacityPerLocalAccount: "Drive-Kapazität pro lokales Benutzerkonto" -driveCapacityPerRemoteAccount: "Drive-Kapazität pro Benutzer anderer Instanzen" +driveCapacityPerRemoteAccount: "Drive-Kapazität pro Benutzer fremder Instanzen" inMb: "In Megabytes" -iconUrl: "Icon-URL" +iconUrl: "Icon-URL (favicon etc)" bannerUrl: "Banner-URL" backgroundImageUrl: "Hintergrundbild-URL" basicInfo: "Basisdaten" -pinnedUsers: "Angepinnte Benutzer" -pinnedUsersDescription: "Gib einen Benutzernamen pro Zeile ein. Diese werden im \"Erkunden\" Tab angezeigt." -pinnedPages: "Angepinnte Seiten" -pinnedPagesDescription: "Gib hier die Pfäde zu den Seiten an, die du an die Spitze dieser Instanz anheften möchtest, getrennt durch neue Zeilen." +pinnedUsers: "Angeheftete Benutzer" +pinnedUsersDescription: "Gib durch Leerzeichen getrennte Benutzer an, die an die \"Erkunden\"-Seite angeheftet werden sollen." +pinnedPages: "Angeheftete Seiten" +pinnedPagesDescription: "Gib durch Leerzeilen getrennte Pfäde zu Seiten an, die du an die Startseite dieser Instanz anheften möchtest.\n" pinnedClipId: "ID des angehefteten Clips" -pinnedNotes: "Angepinnte Notizen" +pinnedNotes: "Angeheftete Notizen" hcaptcha: "hCaptcha" enableHcaptcha: "hCaptcha aktivieren" hcaptchaSiteKey: "Site key" @@ -342,14 +343,14 @@ recaptcha: "reCAPTCHA" enableRecaptcha: "reCAPTCHA aktivieren" recaptchaSiteKey: "Site key" recaptchaSecretKey: "Secret key" -avoidMultiCaptchaConfirm: "Das Verwenden von mehreren Captcha-Systemen kann zu Störungen führen. Möchtest du die anderen Systeme deaktivieren? Du kannst mehrere aktiviert lassen, in dem du auf Abbrechen drückst." +avoidMultiCaptchaConfirm: "Das Verwenden von mehreren Captcha-Systemen kann zu Störungen führen. Möchtest du die anderen Systeme deaktivieren? Du kannst mehrere Systeme aktiviert lassen, in dem du auf Abbrechen drückst." antennas: "Antennen" manageAntennas: "Antennen verwalten" name: "Name" antennaSource: "Antennenquelle" -antennaKeywords: "Schlüsselwörter, die beobachtet werden sollen" -antennaExcludeKeywords: "Schlüsselwörter, die ignoriert werden sollen" -antennaKeywordsDescription: "Mit Leerzeichen für eine \"UND\"-Verknüpfung trennen, durch Zeilenumbrüche für eine \"ODER\"-Verknüpfung trennen." +antennaKeywords: "Zu beobachtende Schlüsselwörter" +antennaExcludeKeywords: "Zu ignorierende Schlüsselwörter" +antennaKeywordsDescription: "Mit Leerzeichen für eine \"UND\"-Verknüpfung trennen, durch Zeilenumbrüche für eine \"ODER\"-Verknüpfung trennen" notifyAntenna: "Über neue Notizen benachrichtigen" withFileAntenna: "Nur Notizen mit Dateien" enableServiceworker: "ServiceWorker aktivieren" @@ -394,7 +395,7 @@ uploadFolder: "Standardordner für Uploads" cacheClear: "Cache leeren" markAsReadAllNotifications: "Alle Benachrichtigungen als gelesen markieren" markAsReadAllUnreadNotes: "Alle Notizen als gelesen markieren" -markAsReadAllTalkMessages: "Alle Nachrichten als gelesen markieren" +markAsReadAllTalkMessages: "Alle Chats als gelesen markieren" help: "Hilfe" inputMessageHere: "Hier Nachricht eingeben" close: "Schließen" @@ -428,11 +429,11 @@ invitationCode: "Einladungscode" checking: "Wird überprüft..." available: "Verfügbar" unavailable: "Unverfügbar" -usernameInvalidFormat: "Buchstaben, Zahlen und Unterstriche sind verwendbar." +usernameInvalidFormat: "Klein- und Großbuchstaben, Zahlen sowie Unterstriche sind verwendbar." tooShort: "Zu kurz" tooLong: "Zu lang" weakPassword: "Schwaches Passwort" -normalPassword: "Standardpasswort" +normalPassword: "Normales Passwort" strongPassword: "Starkes Passwort" passwordMatched: "Stimmt überein" passwordNotMatched: "Stimmt nicht überein" @@ -450,7 +451,7 @@ joinOrCreateGroup: "Lass dich zu einer Gruppe einladen oder erstelle deine eigen noHistory: "Kein Verlauf" signinHistory: "Anmeldungsverlauf" disableAnimatedMfm: "MFM, die Animationen enthalten, deaktivieren" -doing: "In Bearbeitung" +doing: "In Bearbeitung..." category: "Kategorie" tags: "Schlagwörter" docSource: "Quelle dieses Dokuments" @@ -458,14 +459,14 @@ createAccount: "Benutzerkonto erstellen" existingAccount: "Bestehendes Benutzerkonto" regenerate: "Regenerieren" fontSize: "Schriftgröße" -noFollowRequests: "Du hast keine Follow-Anfragen" +noFollowRequests: "Du hast keine ausstehende Follow-Anfragen" openImageInNewTab: "Bilder in neuem Tab öffnen" dashboard: "Dashboard" local: "Lokal" remote: "Fremd" total: "Gesamt" -weekOverWeekChanges: "Wöchentlich" -dayOverDayChanges: "Täglich" +weekOverWeekChanges: "Veränderung zu letzter Woche" +dayOverDayChanges: "Veränderung zu Gestern" appearance: "Aussehen" clientSettings: "Client-Einstellungen" accountSettings: "Benutzerkonto-Einstellungen" @@ -477,19 +478,19 @@ showFeaturedNotesInTimeline: "Beliebte Notizen in Chronik anzeigen" objectStorage: "Objektspeicher" useObjectStorage: "Objektspeicher verwenden" objectStorageBaseUrl: "Basis-URL" -objectStorageBaseUrlDesc: "URL-Prefix, der zum Konstruieren der Objekt- bzw. Mediareferenz-URL genutzt wird. Falls du ein CDN- oder einen Proxy nutzt, gib dessen URL ein. Ansonsten gib die Adresse, der dir von deinem Anbieter z.B. in dessen Servicehandbuch gegeben wurde, an. Beispielsweise 'https://.s3.amazonaws.com' für AWS S3 oder 'https://storage.googleapis.com/' für GCS." +objectStorageBaseUrlDesc: "Als Referenz verwendete URL. Verwendest du einen CDN oder Proxy, gib dessen URL an. S3: 'https://.s3.amazonaws.com', GCS: 'https://storage.googleapis.com/' etc." objectStorageBucket: "Bucket" objectStorageBucketDesc: "Bitte gib den Bucket-Namen an, der bei deinem Anbieter verwendet wird." objectStoragePrefix: "Prefix" -objectStoragePrefixDesc: "Dateien werden im Ordner dieses Prefixes gespeichert." +objectStoragePrefixDesc: "Dateien werden in Ordnern unter diesem Prefix gespeichert." objectStorageEndpoint: "Endpoint" -objectStorageEndpointDesc: "Dieses Feld leerlassen, falls du AWS S3 verwendest. Ansonsten trage den Endpoint im Format \"\" oder \":\" an, den Angaben deines Anbieters entsprechend." +objectStorageEndpointDesc: "Im Falle von S3 leerlassen, für andere Anbieter den relevanten Endpoint im Format \"\" oder \":\" angeben." objectStorageRegion: "Region" -objectStorageRegionDesc: "Gib eine Region (wie z.B. \"xx-east-1\") an. Falls dein Anbieter nicht zwischen Regionen unterscheidet, lass dieses Feld leer oder gib \"us-east-1\" an." +objectStorageRegionDesc: "Gib eine Region wie z.B. \"xx-east-1\" an. Falls dein Anbieter nicht zwischen Regionen unterscheidet, lass dieses Feld leer oder gib \"us-east-1\" an." objectStorageUseSSL: "SSL verwenden" -objectStorageUseSSLDesc: "Deaktiviere dies falls du für die API-Verbindungen kein HTTPS verwenden wirst" +objectStorageUseSSLDesc: "Deaktiviere dies, falls du für die API-Verbindungen kein HTTPS verwenden wirst" objectStorageUseProxy: "Über Proxy verbinden" -objectStorageUseProxyDesc: "Deaktiviere dies falls du keinen Proxy für den Objektspeicher verwenden wirst" +objectStorageUseProxyDesc: "Deaktiviere dies, falls du keinen Proxy für den Objektspeicher verwenden wirst" objectStorageSetPublicRead: "Bei Upload auf \"public-read\" stellen" serverLogs: "Serverprotokolle" deleteAll: "Alle löschen" @@ -503,29 +504,29 @@ popout: "Pop-Up" volume: "Lautstärke" masterVolume: "Gesamtlautstärke" details: "Details" -chooseEmoji: "Wähle ein Emoji" -unableToProcess: "Der Vorgang konnte nicht abgeschlossen werden." +chooseEmoji: "Emoji auswählen" +unableToProcess: "Der Vorgang konnte nicht abgeschlossen werden" recentUsed: "Vor kurzem verwendet" install: "Installieren" uninstall: "Uninstallieren" installedApps: "Authorisierte Anwendungen" nothing: "Hier gibt es nichts zu sehen" -installedDate: "Authorisiert" -lastUsedDate: "Zuletzt verwendet" +installedDate: "Authorisiert am" +lastUsedDate: "Zuletzt verwendet am" state: "Status" sort: "Sortieren" ascendingOrder: "Aufsteigende Reihenfolge" descendingOrder: "Absteigende Reihenfolge" scratchpad: "Testumgebung" -scratchpadDescription: "Die Testumgebung bietet eine experimentale Umgebung für AiScript. Dort kannst du AiScript schreiben, ausführen sowie dessen Auswirkungen auf Misskey überprüfen." +scratchpadDescription: "Die Testumgebung bietet eine Umgebung für AiScript-Experimente. Dort kannst du AiScript schreiben, ausführen sowie dessen Auswirkungen auf Misskey überprüfen." output: "Ausgabe" script: "Skript" disablePagesScript: "AiScript auf Seiten deaktivieren" -updateRemoteUser: "Informationen über den Benutzer der fremder Instanz aktualisieren" +updateRemoteUser: "Benutzerinformationen aktualisieren" deleteAllFiles: "Alle Dateien löschen" deleteAllFilesConfirm: "Möchtest du wirklich alle Dateien löschen?" removeAllFollowing: "Allen gefolgten Benutzern entfolgen" -removeAllFollowingDescription: "Allen Benutzerkonten von {host} entfolgen. Bitte führe dies durch, falls diese Instanz nicht mehr existiert." +removeAllFollowingDescription: "Dies entfolgt allen Benutzerkonten von {host}. Bitte führe dies durch, falls diese Instanz z.B. nicht mehr existiert." userSuspended: "Dieser Benutzer wurde gesperrt." userSilenced: "Dieser Benutzer wurde instanzweit stummgeschaltet." menu: "Menü" @@ -542,7 +543,7 @@ invisibleNote: "Private Notiz" enableInfiniteScroll: "Automatisch mehr Notizen laden" visibility: "Sichtbarkeit" poll: "Umfrage" -useCw: "Inhalt verdecken" +useCw: "Inhalt verbergen" enablePlayer: "Video-Player öffnen" disablePlayer: "Video-Player schließen" expandTweet: "Tweet ausklappen" @@ -557,7 +558,7 @@ plugins: "Plugins" deck: "Deck" undeck: "Deck verlassen" useBlurEffectForModal: "Weichzeichnungseffekt für Modals verwenden" -useFullReactionPicker: "Vollständige Reaktionsauswahl nutzen" +useFullReactionPicker: "Vollständige Reaktionsauswahl verwenden" width: "Breite" height: "Höhe" large: "Groß" @@ -567,14 +568,14 @@ generateAccessToken: "Zugriffstoken generieren" permission: "Berechtigungen" enableAll: "Alle aktivieren" disableAll: "Alle deaktivieren" -tokenRequested: "Benutzerkontozugriff gewähren" +tokenRequested: "Zugriff zum Benutzerkonto gewähren" pluginTokenRequestedDescription: "Dieses Plugin wird die hier konfigurierten Berechtigungen verwenden können." -notificationType: "Benachrichtigungsart" +notificationType: "Art der Benachrichtigung" edit: "Bearbeiten" useStarForReactionFallback: "Verwende ★ falls das Reaktions-Emoji unbekannt ist" emailServer: "Email-Server" enableEmail: "Email-Versand aktivieren" -emailConfigInfo: "Zur Email-Bestätigung bei Registrierung und zum Zurücksetzen des Passworts verwendet" +emailConfigInfo: "Zur Email-Bestätigung bei Registrierung oder zum Zurücksetzen des Passworts verwendet" email: "Email" emailAddress: "Email-Adresse" smtpConfig: "SMTP-Server Konfiguration" @@ -587,9 +588,9 @@ smtpSecure: "Für SMTP-Verbindungen implizit SSL/TLS verwenden" smtpSecureInfo: "Schalte dies aus, falls du STARTTLS verwendest" testEmail: "Email-Versand testen" wordMute: "Wort-Stummschaltung" -userSaysSomething: "{name} hat etwas gesagt." +userSaysSomething: "{name} hat etwas gesagt" makeActive: "Aktivieren" -display: "Anzeige" +display: "Anzeigeart" copy: "Kopieren" metrics: "Metriken" overview: "Übersicht" @@ -601,19 +602,19 @@ create: "Erstellen" notificationSetting: "Benachrichtigungseinstellungen" notificationSettingDesc: "Wähle die Art der anzuzeigenden Benachrichtigung" useGlobalSetting: "Globale Einstellung verwenden" -useGlobalSettingDesc: "Wenn dies eingeschaltet ist, werden die Benachrichtigungseinstellungen deines Benutzerkontos verwendet. Wenn dies ausgeschaltet ist, können individuelle Einstellungen vorgenommen werden." +useGlobalSettingDesc: "Ist dies eingeschaltet, so werden die Benachrichtigungseinstellungen deines Benutzerkontos verwendet. Wenn dies ausgeschaltet ist, können individuelle Einstellungen vorgenommen werden." other: "Andere" -regenerateLoginToken: "Login-Token regenerieren" -regenerateLoginTokenDescription: "Den bei Logins intern verwendeten Token regenerieren. Normalerweise wird dies nicht benötigt. Bei Regeneration werden alle Geräte ausgeloggt." +regenerateLoginToken: "Anmeldungstoken regenerieren" +regenerateLoginTokenDescription: "Den zur Anmeldung intern verwendeten Token regenerieren. Normalerweise wird dies nicht benötigt. Bei Regeneration werden alle Geräte ausgeloggt." setMultipleBySeparatingWithSpace: "Trenne Elemente durch ein Leerzeichen um mehrere Einstellungen zu kofigurieren." fileIdOrUrl: "Datei-ID oder URL" chatOpenBehavior: "Verhalten des Chatfensters bei Öffnung" behavior: "Verhalten" sample: "Beispiel" -abuseReports: "Melden" +abuseReports: "Meldungen" reportAbuse: "Melden" reportAbuseOf: "{name} melden" -fillAbuseReportDescription: "Bitte gib Details für diese Meldung an. Falls es sich um eine spezielle Notiz handelt, bitte gib dessen URL an." +fillAbuseReportDescription: "Bitte gib zusätzliche Informationen zu dieser Meldung an. Falls es sich um eine spezielle Notiz handelt, bitte gib dessen URL an." abuseReported: "Die Meldung wurde versendet. Vielen Dank." send: "Senden" abuseMarkAsResolved: "Meldung als gelöst markieren" @@ -635,34 +636,34 @@ public: "Öffentlich" i18nInfo: "Misskey wird durch freiwillige Helfer in viele verschiedene Sprachen übersetzt. Auf {link} kannst du mithelfen." manageAccessTokens: "Zugriffstoken verwalten" accountInfo: "Benutzerkonto-Informationen" -notesCount: "Anzahl von Notizen" +notesCount: "Anzahl der Notizen" repliesCount: "Anzahl gesendeter Antworten" -renotesCount: "Anzahl gesendeter Renotes" +renotesCount: "Anzahl getätigter Renotes" repliedCount: "Anzahl erhaltener Antworten" renotedCount: "Anzahl erhaltener Renotes" followingCount: "Anzahl gefolgter Benutzer" followersCount: "Anzahl an Followern" sentReactionsCount: "Anzahl gesendeter Reaktionen" receivedReactionsCount: "Anzahl erhaltener Reaktionen" -pollVotesCount: "Anzahl beantworteter Umfragen" -pollVotedCount: "Anzahl erhaltener Umfrageantworten" +pollVotesCount: "Anzahl gesendeter Antworten auf Umfragen" +pollVotedCount: "Anzahl erhaltener Antworten auf Umfragen" yes: "Ja" no: "Nein" -driveFilesCount: "Anzahl von Drive-Dateien" +driveFilesCount: "Anzahl an Drive-Dateien" driveUsage: "Drive-Auslastung" noCrawle: "Crawler-Indexierung ablehnen" noCrawleDescription: "Suchmaschinen bitten, die eigene Profilseite, Notizen, Seiten usw. nicht zu indexieren" lockedAccountInfo: "Auch wenn du Follow-Anfragen auf manuelle Bestätigung setzt, wird jeder deine Notizen öffentlich sehen können, sofern du die Notizsichtbarkeit nicht auf \"Nur Follower\" setzt." -alwaysMarkSensitive: "Immer als NSFW markieren" -loadRawImages: "Anstatt Vorschaubild immer volles Bild laden" +alwaysMarkSensitive: "Medien standardmäßig als NSFW markieren" +loadRawImages: "Anstatt Vorschaubilder immer Originalbilder anzeigen" disableShowingAnimatedImages: "Animierte Bilder nicht abspielen" verificationEmailSent: "Eine Verifizierungsnachricht wurde versendet. Besuche den dort enthaltenen Link, um die Verifizierung abzuschließen." notSet: "Nicht konfiguriert" emailVerified: "Email-Adresse bestätigt" -noteFavoritesCount: "Anzahl favorisierter Notizen" -pageLikesCount: "Anzahl der Seiten, die mir gefallen" +noteFavoritesCount: "Anzahl an als Favorit markierter Notizen" +pageLikesCount: "Anzahl an als \"Gefällt mir\" markierter Seiten" pageLikedCount: "Anzahl erhaltener \"Gefällt mir\" auf Seiten" -reversiCount: "Anzahl von Reversi-Runden" +reversiCount: "Anzahl an Reversi-Runden" contact: "Kontakt" useSystemFont: "Standardschriftart des Systems verwenden" clips: "Clips" @@ -683,11 +684,11 @@ 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." +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." myTheme: "Mein Farbthema" -backgroundColor: "Hintergrund" +backgroundColor: "Hintergrundfarbe" accentColor: "Akzentfarbe" -textColor: "Text" +textColor: "Textfarbe" saveAs: "Speichern als…" advanced: "Fortgeschritten" value: "Wert" @@ -707,14 +708,14 @@ capacity: "Kapazität" inUse: "Verwendet" editCode: "Code bearbeiten" apply: "Anwenden" -receiveAnnouncementFromInstance: "E-Mail-Benachrichtigungen von dieser Instanz empfangen" +receiveAnnouncementFromInstance: "Benachrichtigungen von dieser Instanz empfangen" emailNotification: "E-Mail-Benachrichtigungen" publish: "Veröffentlichen" inChannelSearch: "In Kanal suchen" useReactionPickerForContextMenu: "Reaktionsauswahl durch Rechtsklick öffnen" typingUsers: "{users} ist/sind am schreiben..." jumpToSpecifiedDate: "Zu bestimmtem Datum springen" -showingPastTimeline: "Momentan wird eine alte Chronik angezeigt" +showingPastTimeline: "Es wird eine alte Chronik angezeigt" clear: "Zurückkehren" markAllAsRead: "Alle als gelesen markieren" goBack: "Zurück" @@ -722,7 +723,7 @@ unlikeConfirm: "\"Gefällt mir\" wirklich entfernen?" fullView: "Vollansicht" quitFullView: "Vollansicht verlassen" addDescription: "Beschreibung hinzufügen" -userPagePinTip: "Um Notizen hier erscheinen zu lassen, drücke \"Anpinnen\" im Menü individueller Notizen" +userPagePinTip: "Um Notizen hier erscheinen zu lassen, drücke \"Anheften\" im Menü individueller Notizen." notSpecifiedMentionWarning: "Diese Notiz enthält Erwähnungen von Nutzern, die nicht als Empfänger ausgewählt sind" info: "Über" userInfo: "Benutzerinformation" @@ -744,7 +745,7 @@ user: "Benutzer" administration: "Verwaltung" accounts: "Benutzerkonten" switch: "Wechseln" -noMaintainerInformationWarning: "Administratorinformationen sind nicht konfiguriert." +noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert." noBotProtectionWarning: "Bot-Schutz ist nicht konfiguriert." configure: "Konfigurieren" postToGallery: "Beitrag zu Galerie hinzufügen" @@ -765,16 +766,34 @@ customCss: "Benutzerdefiniertes CSS" customCssWarn: "Verwende diese Einstellung nur, wenn du weißt, was sie tut. Ungültige Eingaben können dazu führen, dass der Client nicht mehr normal funktioniert." global: "Global" squareAvatars: "Profilbilder quadratisch anzeigen" +sent: "Gesendet" +received: "Erhalten" +searchResult: "Suchergebnisse" +hashtags: "Hashtags" +troubleshooting: "Problembehandlung" +useBlurEffect: "Weichzeichnungseffekt in der Benutzeroberfläche verwenden" +learnMore: "Mehr erfahren" +misskeyUpdated: "Misskey wurde aktualisiert!" +whatIsNew: "Änderungen anzeigen" +translate: "Übersetzen" +translatedFrom: "Aus {x} übersetzt" +_docs: + continueReading: "Mehr lesen" + features: "Funktionen" + generalTopics: "Allgemeine Themen" + advancedTopics: "Erweiterte Themen" + admin: "Administration" + translateWarn: "Dies ist ein übersetztes Dokument. Es kann zu Unterschieden mit dem Original kommen." _ad: back: "Zurück" reduceFrequencyOfThisAd: "Diese Werbung weniger anzeigen" _forgotPassword: enterEmail: "Gib die Email-Adresse ein, mit der du dich registriert hast. An diese wird ein Link gesendet, mit der du dein Passwort zurücksetzen kannst." ifNoEmail: "Solltest du bei der Registrierung keine Email-Adresse angegeben haben, wende dich bitte an den Administrator." - contactAdmin: "Diese Instanz unterstützt die Verwendung von Email-Adressen nicht. Wende dich, um dein Passwort zurückzusetzen, an den Administrator." + contactAdmin: "Diese Instanz unterstützt die Verwendung von Email-Adressen nicht. Wende dich an den Administrator, um dein Passwort zurückzusetzen." _gallery: my: "Meine Galerie" - liked: "Beiträge, die mir gefallen" + liked: "Mit \"Gefällt mir\" markierte Beiträge" like: "Gefällt mir" unlike: "\"Gefällt mir\" entfernen" _email: @@ -802,12 +821,12 @@ _aboutMisskey: morePatrons: "Wir schätzen ebenso die Unterstützung vieler anderer hier nicht gelisteter Personen sehr. Danke! 🥰" patrons: "UnterstützerInnen" _nsfw: - respect: "Als NSFW markierte Bilder verdecken" - ignore: "Als NSFW markierte Bilder nicht verdecken" - force: "Alle Medien verdecken" + 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 an vielen Stellen verwendbare und Misskey-exklusive Markup-Sprache. Hier kannst du eine Liste von verfügbarer MFM-Syntax anschauen." + intro: "MFM ist eine Misskey-exklusive Markup-Sprache, die in Misskey an vielen Stellen verwendet werden kann. Hier kannst du eine Liste von verfügbarer MFM-Syntax einsehen." dummy: "Misskey erweitert die Welt des Fediverse" mention: "Erwähnung" mentionDescription: "Mit At-Zeichen und Nutzername kann ein individueller Nutzer angegeben werden." @@ -816,29 +835,29 @@ _mfm: url: "URL" urlDescription: "Zeigt URLs an." link: "Link" - linkDescription: "Ein spezifizierter Textabschnitt kann als URL angezeigt werden." + linkDescription: "Spezifische Textabschnitte als URL anzeigen." bold: "Fett" boldDescription: "Zeichen zur Betonung dicker erscheinen lassen." small: "Klein" smallDescription: "Inhalt klein und dünn erscheinen lassen." center: "Zentrieren" - centerDescription: "Inhalt zentriert anzeigen lassen." + centerDescription: "Inhalt zentriert anzeigen." inlineCode: "Code (Eingebettet)" - inlineCodeDescription: "Syntax-Hervorhebung für (Programm-)Code eingebettet anzeigen lassen." + inlineCodeDescription: "Syntax-Hervorhebung für (Programm-)Code eingebettet anzeigen." blockCode: "Code (Block)" - blockCodeDescription: "Syntax-Hervorhebung für mehrzeiligen (Programm-)Code als Block anzeigen lassen." + blockCodeDescription: "Syntax-Hervorhebung für mehrzeiligen (Programm-)Code als Block anzeigen." inlineMath: "Mathe (Eingebettet)" inlineMathDescription: "Mathematische Formeln (KaTeX) eingebettet anzeigen." blockMath: "Mathe (Block)" blockMathDescription: "Mehrzeilige mathematische Formeln (KaTeX) als Block einbetten." quote: "Zitationen" - quoteDescription: "Inhalt als Zitat anzeigen lassen." + quoteDescription: "Inhalt als Zitat anzeigen." emoji: "Benutzerdefinierte Emojis" - emojiDescription: "Emoji-Namen mit Doppelpunkten umschließen, um benutzerdefinierte Emojis anzeigen zu lassen." + emojiDescription: "Durch das Umschließen von Emoji-Namen durch Doppelpunkte können benutzerdefinierte Emojis angezeigt werden." search: "Suche" - searchDescription: "Eine vorgefertige Suchanfragebox anzeigen lassen." + searchDescription: "Eine vorgefertige Suchanfragebox anzeigen." flip: "Spiegelung" - flipDescription: "Inhalt horizontal oder vertikal gespiegelt anzeigen lassen." + flipDescription: "Inhalt horizontal oder vertikal gespiegelt anzeigen." jelly: "Animation (Dehnen)" jellyDescription: "Verleiht eine sich dehnende Animation." tada: "Animation (Tada)" @@ -846,7 +865,7 @@ _mfm: jump: "Animation (Sprung)" jumpDescription: "Verleiht eine springende Animation." bounce: "Animation (Federn)" - bounceDescription: "Erzeugt eine federnde Animation." + bounceDescription: "Verleiht eine federnde Animation." shake: "Animation (Zittern)" shakeDescription: "Verleiht eine zitternde Animation." twitch: "Animation (Zucken)" @@ -854,15 +873,17 @@ _mfm: spin: "Animation (Rotieren)" spinDescription: "Verleiht eine rotierende Animation." x2: "Groß" - x2Description: "Lässt Inhalte größer angezeigt werden." + x2Description: "Inhalte größer anzeigen." x3: "Sehr groß" - x3Description: "Lässt Inhalte noch größer angezeigt werden." - x4: "Am größten" + x3Description: "Inhalte noch größer anzeigen." + x4: "Unglaublich groß" x4Description: "Lässt Inhalte noch größer als größer als groß angezeigt werden." - blur: "Weichzeichner" + blur: "Weichzeichnen" blurDescription: "Inhalte durch Weihzeichnung verschwimmen lassen. Durch das Bewegen des Mauszeigers auf den Inhalt wird er klar angezeigt." font: "Schriftart" fontDescription: "Setzt die Schriftart des Inhaltes fest." + rainbow: "Regenbogen" + rainbowDescription: "Lässt den Inhalt in Regenbogenfarben erscheinen." _reversi: reversi: "Reversi" gameSettings: "Spieleinstellungen" @@ -879,12 +900,12 @@ _reversi: cancelReady: "Nicht bereit" opponentTurn: "Zug deines Gegners" myTurn: "Dein Zug" - turnOf: "Zug von {name}" + turnOf: "{name} ist am Zug" pastTurnOf: "Zug von {name}" surrender: "Aufgeben" - surrendered: "durch Aufgabe" + surrendered: "Durch Aufgabe" drawn: "Unentschieden" - won: "{name} hat gesiegt" + won: "{name} gewinnt" black: "Schwarz" white: "Weiß" total: "Gesamt" @@ -910,21 +931,21 @@ _channel: setBanner: "Kanalbanner festlegen" removeBanner: "Kanalbanner entfernen" featured: "Trends" - owned: "Besitzt" + owned: "In Besitz" following: "Gefolgt" usersCount: "{n} Teilnehmer" notesCount: "{n} Notizen" _menuDisplay: - sideFull: "Horizontal" - sideIcon: "Horizontal (Icons)" + sideFull: "Seitlich" + sideIcon: "Seitlich (Icons)" top: "Oben" hide: "Ausblenden" _wordMute: - muteWords: "Wort stummschalten" + muteWords: "Stummgeschaltete Wörter" muteWordsDescription: "Mit Leerzeichen für eine \"UND\"-Verknüpfung trennen, durch Zeilenumbrüche für eine \"ODER\"-Verknüpfung trennen." muteWordsDescription2: "Umgib Schlüsselworter mit Schrägstrichen, um Reguläre Ausdrücke zu verwenden." - softDescription: "Notizen, die die eingestellten Konditionen erfüllen, in der Chronik ausblenden" - hardDescription: "Verhindern, dass Notizen, die die eingestellten Konditionen erfüllen, der Chronik hinzugefügt werden. Zudem werden diese Notizen auch nicht der Chronik hinzugefügt, falls die Konditionen geändert werden." + softDescription: "Notizen, die die angegebenen Konditionen erfüllen, in der Chronik ausblenden." + hardDescription: "Verhindern, dass Notizen, die die angegebenen Konditionen erfüllen, der Chronik hinzugefügt werden. Zudem werden diese Notizen auch nicht der Chronik hinzugefügt, falls die Konditionen geändert werden." soft: "Leicht" hard: "Schwer" mutedNotes: "Stummgeschaltete Notizen" @@ -932,15 +953,15 @@ _theme: explore: "Themen erforschen" install: "Thema installieren" manage: "Themaverwaltung" - code: "Themen-Code" + code: "Themencode" description: "Beschreibung" installed: "{name} wurde installiert" installedThemes: "Installierte Themen" builtinThemes: "Eingebaute Themen" alreadyInstalled: "Dieses Thema ist bereits installiert" - invalid: "Themenformat ist ungültig" + invalid: "Der Themencode dieses Themas ist ungültig" make: "Farbthema erstellen" - base: "Basis" + base: "Vorlage" addConstant: "Konstante hinzufügen" constant: "Konstante" defaultValue: "Standardwert" @@ -956,7 +977,7 @@ _theme: darken: "Verdunkeln" lighten: "Erhellen" inputConstantName: "Name der Konstanten eingeben" - importInfo: "Du kannst hier Themen-Code einfügen, um ihn in den Editor zu importieren" + importInfo: "Du kannst hier Themencode einfügen, um ihn in den Editor zu importieren" deleteConstantConfirm: "Die Konstante {const} wirklich löschen?" keys: accent: "Akzentfarbe" @@ -974,10 +995,10 @@ _theme: navIndicator: "Indikator der Seitenleiste" link: "Link" hashtag: "Hashtag" - mention: "Erwähnungen" - mentionMe: "Erwähnungen (Ich)" + mention: "Erwähnung" + mentionMe: "Erwähnung (Ich)" renote: "Renote" - modalBg: "Hintergrund des Modals" + modalBg: "Modalhintergrund" divider: "Trenner" scrollbarHandle: "Griff des Scrollbalkens" scrollbarHandleHover: "Griff des Scrollbalkens (Mouseover)" @@ -985,10 +1006,10 @@ _theme: infoBg: "Hintergrund von Informationen" infoFg: "Text von Informationen" infoWarnBg: "Hintergrund von Warnungen" - infoWarnFg: "Text von Informationen" - cwBg: "Hintergrund von verdeckten Inhalten" - cwFg: "Text von verdeckten Inhalten" - cwHoverBg: "Hintergrund von verdeckten Inhalten (Mouseover)" + infoWarnFg: "Text von Warnungen" + cwBg: "Hintergrund von verborgenen Inhalten" + cwFg: "Text von verborgenen Inhalten" + cwHoverBg: "Hintergrund von verborgenen Inhalten (Mouseover)" toastBg: "Hintergrund von Benachrichtigungen" toastFg: "Text von Benachrichtigungen" buttonBg: "Hintergrund von Schaltflächen" @@ -1007,7 +1028,7 @@ _sfx: noteMy: "Meine Notizen" notification: "Benachrichtigungen" chat: "Chat" - chatBg: "Nachrichten (Hintergrund)" + chatBg: "Chat (Hintergrund)" antenna: "Antennen" channel: "Kanalbenachrichtigung" reversiPutBlack: "Reversi: Schwarz macht einen Zug" @@ -1031,35 +1052,35 @@ _time: _tutorial: title: "Wie du Misskey 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_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." step2_1: "Lass uns zuerst dein Profil vervollständigen, bevor du Notizen schreibst oder jemandem folgst." - step2_2: "Informationen darüber, wer du bist, macht es anderen leichter zu wissen, ob sie deine Notizen sehen wollen und ob sie dir folgen möchten." + step2_2: "Informationen darüber, was für eine Person du bist, macht es anderen leichter zu wissen, ob sie deine Notizen sehen wollen und ob sie dir folgen möchten." step3_1: "Mit dem Einrichten deines Profils fertig?" - step3_2: "Der nächste Schritt ist das Schreiben einer Notiz. Dies kannst du tun, indem du auf das Stift-Icon auf dem Bildschirm drückst." + step3_2: "Dann lass uns als nächstes versuchen, eine Notiz zu schreiben. Dies kannst du tun, indem du auf das Stift-Icon oben auf dem Bildschirm drückst." step3_3: "Fülle das Fenster aus und drücke auf den Knopf oben rechts zum Senden." - step3_4: "Gibt es nichts, das du momentan sagen möchtest? Versuch's mit \"Hallo Misskey!\"" + step3_4: "Fällt dir nichts ein, das du schreiben möchtest? Versuch's mit \"Hallo Misskey!\"" step4_1: "Fertig mit dem Senden deiner ersten Notiz?" - step4_2: "Falls deine Notiz nun auf deiner Chronik auftaucht, hast du alles richtig gemacht." + 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." step5_2: "{featured} zeigt dir beliebte Notizen dieser Instanz. In {explore} kannst du beliebte Benutzer finden. Schau dort, ob du Benutzer findest, die dich interessieren." - step5_3: "Um anderen Benutzern zu folgen, klicke auf ihr Profilbild und klicke dann auf den \"Folgen\" Knopf in ihrem Profil." - step5_4: "Wenn der Benutzer neben seinem Namen ein Schloss hat, dann muss er deine Follow-Anfrage manuell bestätigen." - step6_1: "Wenn du nun auch die Notizen anderer Benutzer auf deiner Chronik siehst, hast du alles richtig gemacht." - step6_2: "Du kannst ebenso \"Reaktionen\" verwenden, um schnell auf Notizen anderer Benutzer zu antworten." - step6_3: "Um eine \"Reaktion\" anzufügen, klicke auf das \"+\"-Symbol in der Notiz eines anderen Benutzers und wähle ein Emoji, mit dem du reagieren möchtest." - step7_1: "Glückwunsch! Du hast die Misskey-Einführung abgeschlossen." + step5_3: "Klicke zum Anzeigen des Profils eines Benutzers auf dessen Profilbild und dann auf den \"Folgen\"-Knopf, um diesem zu folgen." + step5_4: "Je nach Benutzer kann es etwas Zeit in Anspruch nehmen, bis dieser deine Follow-Anfrage bestätigt." + 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! 🚀" _2fa: - alreadyRegistered: "Du hast bereits ein Gerät für Zwei-Faktor-Authentifizierung registriert" + alreadyRegistered: "Du hast bereits ein Gerät für Zwei-Faktor-Authentifizierung registriert." registerDevice: "Neues Gerät registrieren" registerKey: "Neuen Sicherheitsschlüssel registrieren" - step1: "Als Erstes, installiere eine Authentifizierungsapp (z.B. {a} oder {b}) auf deinem Gerät." + step1: "Installiere zuerst eine Authentifizierungsapp (z.B. {a} oder {b}) auf deinem Gerät." step2: "Dann, scanne den angezeigten QR-Code mit deinem Gerät." - step3: "Um die Einrichtung abzuschließen, gib den Token ein, der von deiner Authentifizierungsapp angezeigt wird." - step4: "Ab jetzt benötigen alle Loginversuche auch einen Login-Token." - securityKeyInfo: "Du kannst neben Fingerabdruck- oder PIN-Authentifizierung auf deinem Gerät auch Authentifizierung mit FIDO2-kompatiblen Hardware-Sicherheitsschlüsseln einrichten." + step3: "Gib zum Abschluss den Token ein, der von deiner App angezeigt wird." + step4: "Alle folgenden Anmeldungsversuche werden ab sofort die Eingabe eines solchen Tokens benötigen." + securityKeyInfo: "Du kannst neben Fingerabdruck- oder PIN-Authentifizierung auf deinem Gerät auch Anmeldung mit Hilfe eines FIDO2-kompatiblen Hardware-Sicherheitsschlüssels einrichten." _permissions: "read:account": "Deine Benutzerkontoinformationen lesen" "write:account": "Deine Benutzerkontoinformationen bearbeiten" @@ -1069,18 +1090,18 @@ _permissions: "write:drive": "Deine Drive-Dateien und Ordner bearbeiten oder löschen" "read:favorites": "Deine Favoriten-Liste lesen" "write:favorites": "Deine Favoriten-Liste bearbeiten" - "read:following": "Deine Follower-Liste lesen" + "read:following": "Die Liste der Benutzer, denen du folgst, lesen" "write:following": "Anderen Benutzern folgen oder entfolgen" "read:messaging": "Chats lesen" - "write:messaging": "Chatnachrichten schicken oder löschen" + "write:messaging": "Chats bedienen" "read:mutes": "Stummschaltungen lesen" "write:mutes": "Stummschaltungen bearbeiten" "write:notes": "Notizen schreiben oder löschen" "read:notifications": "Benachrichtigungen lesen" - "write:notifications": "Benachrichtigungen bearbeiten" + "write:notifications": "Benachrichtigungen bedienen" "read:reactions": "Reaktionen lesen" - "write:reactions": "Reaktionen hinzufügen und ändern" - "write:votes": "In Umfragen abstimmen" + "write:reactions": "Reaktionen bedienen" + "write:votes": "Umfragen bedienen" "read:pages": "Deine Seiten lesen" "write:pages": "Deine Seiten bearbeiten oder löschen" "read:page-likes": "Liste der Seiten, die mir gefallen, lesen" @@ -1088,20 +1109,20 @@ _permissions: "read:user-groups": "Benutzergruppen lesen" "write:user-groups": "Benutzergruppen bearbeiten oder löschen" "read:channels": "Kanäle lesen" - "write:channels": "Kanäle bearbeiten" + "write:channels": "Kanäle bedienen" _auth: shareAccess: "Möchtest du \"{name}\" authorisieren, auf dieses Benuzerkonto zugreifen zu können?" shareAccessAsk: "Bist du dir sicher, dass du diese Anwendung authorisieren möchtest, auf dein Benutzerkonto zugreifen zu können?" - permissionAsk: "Diese Anwendung erfordert folgende Berechtigungen:" - pleaseGoBack: "Bitte gehe zurück zur Anwendung" - callback: "Rückkehr zur Anwendung" + permissionAsk: "Diese Anwendung fordert folgende Berechtigungen" + pleaseGoBack: "Bitte kehre zur Anwendung zurück" + callback: "Es wird zur Anwendung zurückgekehrt" denied: "Zugriff verweigert" _antennaSources: all: "Alle Notizen" homeTimeline: "Notizen von Benutzern, denen gefolgt wird" - users: "Notizen von konkreten Benutzern" - userList: "Notizen von allen Benutzern aus einer Liste" - userGroup: "Notizen von allen Benutzern aus einer Gruppe" + users: "Notizen von einem oder mehreren angegebenen Benutzern" + userList: "Notizen von allen Benutzern einer Liste" + userGroup: "Notizen von allen Benutzern einer Gruppe" _weekday: sunday: "Sonntag" monday: "Montag" @@ -1122,7 +1143,7 @@ _widgets: photos: "Fotos" digitalClock: "Digitaluhr" federation: "Föderation" - postForm: "Neue Notiz anfertigen" + postForm: "Notizfenster" slideshow: "Diashow" button: "Knopf" onlineUsers: "Benutzer Online" @@ -1130,37 +1151,37 @@ _widgets: serverMetric: "Servermetriken" aiscript: "AiScript-Konsole" _cw: - hide: "Ausblenden" - show: "Mehr anzeigen" + hide: "Verbergen" + show: "Inhalt anzeigen" chars: "{count} Zeichen" - files: "{count} Dateien" + files: "{count} Datei(en)" _poll: - noOnlyOneChoice: "Mindestens zwei Antwortmöglichkeiten werden benötigt." + noOnlyOneChoice: "Es müssen mindestens zwei Antwortmöglichkeiten vorhanden sein" choiceN: "Auswahl {n}" noMore: "Du kannst keine weiteren Auswahlmöglichkeiten hinzufügen" - canMultipleVote: "Mehrfachantworten erlauben" - expiration: "Abstimmung endet am" + canMultipleVote: "Auswahl mehrerer Antworten erlauben" + expiration: "Abstimmung beenden" infinite: "Nie" at: "Beenden am..." after: "Beenden nach..." - deadlineDate: "Abstimmungsende" + deadlineDate: "Enddatum" deadlineTime: "Zeit" - duration: "Laufzeit" + duration: "Dauer" votesCount: "{n} Stimmen" totalVotes: "Insgesamt {n} Stimmen" vote: "Abstimmen" showResult: "Ergebnis anzeigen" voted: "Abgestimmt" closed: "Beendet" - remainingDays: "{d} Tage {h} Stunden verbleibend" - remainingHours: "{h} Stunden {m} Minuten verbleibend" - remainingMinutes: "{m} Minuten {s} Sekunden verbleibend" - remainingSeconds: "{s} Sekunden verbleibend" + remainingDays: "{d} Tag(e) {h} Stunde(n) verbleibend" + remainingHours: "{h} Stunde(n) {m} Minute(n) verbleibend" + remainingMinutes: "{m} Minute(n) {s} Sekunde(n) verbleibend" + remainingSeconds: "{s} Sekunde(n) verbleibend" _visibility: public: "Öffentlich" - publicDescription: "Deine Notiz wird global sichtbar sein" + publicDescription: "Deine Notiz wird global für alle Benutzer sichtbar sein" home: "Startseite" - homeDescription: "Deine Notiz wird nur in der Chronik deiner Instanz angezeigt." + homeDescription: "Notiz nur in die Startseiten-Chronik schicken" followers: "Follower" followersDescription: "Nur für Follower sichtbar" specified: "Direkt" @@ -1186,7 +1207,7 @@ _profile: metadata: "Zusätzliche Informationen" metadataEdit: "Zusätzliche Informationen bearbeiten" metadataDescription: "Du kannst auf deinem Profil vier zusätzliche Informationsblöcke anzeigen lassen." - metadataLabel: "Name" + metadataLabel: "Beschriftung" metadataContent: "Inhalt" changeAvatar: "Profilbild ändern" changeBanner: "Banner ändern" @@ -1204,10 +1225,10 @@ _charts: activeUsers: "Aktive Benutzer" notesIncDec: "Unterschied in der Anzahl von Notizen" localNotesIncDec: "Unterschied in der Anzahl von lokalen Notizen" - remoteNotesIncDec: "Unterschied in Anzahl der Notizen von anderen Instanzen" + remoteNotesIncDec: "Unterschied in Anzahl der Notizen von fremden Instanzen" notesTotal: "Anzahl aller Notizen" - filesIncDec: "Unterschied in der Anzahl von Dateien" - filesTotal: "Anzahl aller Dateien" + filesIncDec: "Unterschied an Dateien" + filesTotal: "Summe der Dateien" storageUsageIncDec: "Unterschied in der Höhe der Speichernutzung" storageUsageTotal: "Gesamte Speichernutzung" _instanceCharts: @@ -1216,8 +1237,8 @@ _instanceCharts: usersTotal: "Gesamtanzahl an Benutzern" notes: "Unterschied in der Anzahl von Notizen" notesTotal: "Gesamtanzahl an Notizen" - ff: "Unterschied in der Anzahl von Followern" - ffTotal: "Gesamtanzahl an Followern" + ff: "Unterschied in der Anzahl von gefolgten Benutzern und Followern" + ffTotal: "Gesamtanzahl an gefolgten Benutzern und Followern" cacheSize: "Unterschied in der Größe des Caches" cacheSizeTotal: "Gesamtgröße des Caches" files: "Unterschied in der Anzahl der Dateien" @@ -1291,7 +1312,7 @@ _rooms: banknote: "Geldscheine" _pages: newPage: "Seite erstellen" - editPage: "Diese Seite bearbeiten" + editPage: "Seite bearbeiten" readPage: "Quelltext-Ansicht" created: "Seite erfolgreich erstellt" updated: "Seite erfolgreich aktualisiert" @@ -1309,22 +1330,22 @@ _pages: liked: "Seiten, die mir gefallen" featured: "Beliebt" inspector: "Inspektor" - contents: "Inhalt" - content: "Inhalt" + contents: "Inhalte" + content: "Seitenblock" variables: "Variablen" title: "Titel" url: "Seiten-URL" summary: "Zusammenfassung" - alignCenter: "Bestandteile zentrieren" - hideTitleWhenPinned: "Seitentitel ausblenden, wenn an dein Profil angepinnt " + alignCenter: "Zentrieren" + hideTitleWhenPinned: "Seitentitel ausblenden, wenn angeheftet" font: "Schriftart" fontSerif: "Serif" fontSansSerif: "Sans Serif" eyeCatchingImageSet: "Vorschaubild festlegen" eyeCatchingImageRemove: "Vorschaubild entfernen" chooseBlock: "Block hinzufügen" - selectType: "Wähle einen Typ" - enterVariableName: "Gib einen Namen für deine Variable ein" + selectType: "Typ auswählen" + enterVariableName: "Gib einen Variablennamen ein" variableNameIsAlreadyUsed: "Dieser Name wird bereits von einer anderen Variable verwendet" contentBlocks: "Inhalt" inputBlocks: "Eingabe" @@ -1338,10 +1359,10 @@ _pages: if: "Falls" _if: variable: "Variable" - post: "Neue Notiz anfertigen" + post: "Notizfenster" _post: text: "Inhalt" - attachCanvasImage: "Leinwand als Bild anfügen" + attachCanvasImage: "Leinwandbild anfügen" canvasId: "Leinwand-ID" textInput: "Texteingabe" _textInput: @@ -1365,7 +1386,7 @@ _pages: height: "Höhe" note: "Eingebettete Notiz" _note: - id: "Notiz ID" + id: "Notiz-ID" idDescription: "Du kannst alternativ auch die Notiz-URL angeben." detailed: "Detailierte Ansicht" switch: "Fallunterscheidung" @@ -1381,16 +1402,16 @@ _pages: _button: text: "Titel" colored: "Farbig" - action: "Aktion, die beim Knopfdruck ausgeführt werden soll" + action: "Aktion, die bei Knopfdruck ausgeführt wird" _action: - dialog: "Zeige ein Dialogfenster" + dialog: "Dialogfenster anzeigen" _dialog: content: "Inhalt" - resetRandom: "Setze den Zufallswert zurück" - pushEvent: "Sende ein Event" + resetRandom: "Zufallswert zurücksetzen" + pushEvent: "Ein Event senden" _pushEvent: event: "Eventname" - message: "Nachricht, die bei Aktivierung gezeigt werden soll" + message: "Nachricht, die bei Auslösung des Events angezeigt werden soll" variable: "Variable, die gesendet werden soll" no-variable: "Keine" callAiScript: "AiScript ausführen" @@ -1400,7 +1421,7 @@ _pages: _radioButton: name: "Variablenname" title: "Titel" - values: "Auswahlmöglichkeiten (getrennt durch Zeilenumbrüche)" + values: "Durch Zeilenümbrüche getrennte Auswahlmöglichkeiten" default: "Standardwert" script: categories: @@ -1412,7 +1433,7 @@ _pages: value: "Werte" fn: "Funktionen" text: "Textoperationen" - convert: "Konvertierung" + convert: "Konvertierungen" list: "Listen" blocks: text: "Text" @@ -1459,7 +1480,7 @@ _pages: _mod: arg1: "A" arg2: "B" - round: "Runden" + round: "Rundung von Dezimalstellen" _round: arg1: "Nummer" eq: "A und B sind gleich" @@ -1511,17 +1532,17 @@ _pages: arg2: "Maximum" randomPick: "Zufallswahl aus Liste" _randomPick: - arg1: "Listen" - dailyRandom: "Zufallswahl (Läuft für einen Tag)" + arg1: "Liste" + dailyRandom: "Zufällig (Pro Nutzer jeden Tag verschieden)" _dailyRandom: arg1: "Warscheinlichkeit" - dailyRannum: "Zufallsnummer (Läuft für einen Tag)" + dailyRannum: "Zufallsnummer (Pro Nutzer jeden Tag verschieden)" _dailyRannum: arg1: "Minimum" arg2: "Maximum" - dailyRandomPick: "Zufallswahl aus Liste (Läuft für einen Tag)" + dailyRandomPick: "Zufallsauswahl aus einer Liste (Pro Nutzer jeden Tag verschieden)" _dailyRandomPick: - arg1: "Listen" + arg1: "Liste" seedRandom: "Zufällig (mit Startwert / Seed)" _seedRandom: arg1: "Startwert / Seed" @@ -1531,20 +1552,20 @@ _pages: arg1: "Startwert / Seed" arg2: "Minimum" arg3: "Maximum" - seedRandomPick: "Zufallswahl aus Liste (mit Startwert / Seed)" + seedRandomPick: "Zufallsauswahl aus Liste (mit Startwert / Seed)" _seedRandomPick: arg1: "Startwert / Seed" - arg2: "Listen" - DRPWPM: "Zufallswahl aus gewichteter Liste (Läuft für einen Tag)" + arg2: "Liste" + DRPWPM: "Zufallsauswahl aus gewichteter Liste (Pro Nutzer jeden Tag verschieden)" _DRPWPM: arg1: "Textliste" pick: "Aus einer Liste wählen" _pick: - arg1: "Listen" + arg1: "Liste" arg2: "Position" listLen: "Listenlänge abrufen" _listLen: - arg1: "Listen" + arg1: "Liste" number: "Nummer" stringToNumber: "Text zu Nummer" _stringToNumber: @@ -1555,29 +1576,29 @@ _pages: splitStrByLine: "Text nach Zeilenumbrüchen aufteilen" _splitStrByLine: arg1: "Text" - ref: "Variablen" - aiScriptVar: "AiScript Variablen" - fn: "Funktionen" + ref: "Variable" + aiScriptVar: "AiScript Variable" + fn: "Funktion" _fn: slots: "Slots" slots-info: "Trenne jeden Slot mit einem Zeilenumbruch" arg1: "Ausgabe" - for: "Wiederholen" + for: "for-Schleife" _for: - arg1: "Anzahl der Wiederholungen" + arg1: "Anzahl der Schleifendurchläufe" arg2: "Aktion" typeError: "Slot {slot} akzeptiert Werte vom Typ \"{expect}\", aber es wurde ein \"{actual}\" Wert angegeben!" thereIsEmptySlot: "Slot {slot} ist leer!" types: string: "Text" number: "Nummer" - boolean: "Flag" - array: "Listen" + boolean: "Wahrheitswert" + array: "Liste" stringArray: "Textliste" emptySlot: "Leerer Slot" enviromentVariables: "Umgebungsvariable" - pageVariables: "Seitenelement" - argVariables: "Eingabe-Slot" + pageVariables: "Seitenelemente" + argVariables: "Eingabe-Slots" _relayStatus: requesting: "Ausstehend" accepted: "Akzeptiert" @@ -1588,7 +1609,7 @@ _notification: youGotReply: "{name} hat dir geantwortet" youGotQuote: "{name} hat dich zitiert" youRenoted: "Renote deiner Notiz von {name}" - youGotPoll: "{name} hat auf deiner Umfrage abgestimmt" + youGotPoll: "{name} hat in deiner Umfrage abgestimmt" youGotMessagingMessageFromUser: "{name} hat dir eine Chatnachricht gesendet" youGotMessagingMessageFromGroup: "In die Gruppe {name} wurde eine Chatnachricht gesendet" youWereFollowed: "ist dir gefolgt" @@ -1604,13 +1625,13 @@ _notification: quote: "Zitationen" reaction: "Reaktionen" pollVote: "Antworten auf Umfragen" - receiveFollowRequest: "Follow-Anfrage erhalten" - followRequestAccepted: "Follow-Anfrage akzeptiert" - groupInvited: "Gruppeneinladung erhalten" + receiveFollowRequest: "Erhaltene Follow-Anfragen" + followRequestAccepted: "Akzeptierte Follow-Anfragen" + groupInvited: "Erhaltene Gruppeneinladungen" app: "Benachrichtigungen von Apps" _deck: alwaysShowMainColumn: "Hauptspalte immer zeigen" - columnAlign: "Spalten ausrichten" + columnAlign: "Spaltenausrichtung" columnMargin: "Spaltenabstand" columnHeaderHeight: "Spaltenkopfhöhe" addColumn: "Spalte hinzufügen" @@ -1629,4 +1650,4 @@ _deck: antenna: "Antennen" list: "Listen" mentions: "Erwähnungen" - direct: "Direkt" + direct: "Direktnachrichten" diff --git a/locales/en-US.yml b/locales/en-US.yml index f9d6047964..24569eeec7 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -1,6 +1,6 @@ --- _lang_: "English" -headlineMisskey: "Network connected by notes" +headlineMisskey: "A network connected by notes" introMisskey: "Welcome! Misskey is an open source, decentralized microblogging service.\nCreate \"notes\" to share what is happening now, or to share it 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" @@ -28,7 +28,7 @@ login: "Sign In" loggingIn: "Signing In" logout: "Sign Out" signup: "Sign Up" -uploading: "Uploading" +uploading: "Uploading..." save: "Save" users: "Users" addUser: "Add a user" @@ -48,11 +48,11 @@ deleteAndEditConfirm: "Are you sure you want to delete this note and edit it? Yo addToList: "Add to list" sendMessage: "Send a message" copyUsername: "Copy username" -searchUser: "User search" +searchUser: "Search for a user" reply: "Reply" loadMore: "Load more" -showMore: "Load more" -youGotNewFollower: "Followed you" +showMore: "Show more" +youGotNewFollower: "followed you" receiveFollowRequest: "Follow request received" followRequestAccepted: "Follow request accepted" mention: "Mention" @@ -65,8 +65,8 @@ files: "Files" download: "Download" driveFileDeleteConfirm: "Are you sure you want to delete the file \"{name}\"? Notes with this file attached will also be deleted." unfollowConfirm: "Are you sure that you want to unfollow {name}?" -exportRequested: "You have requested an export. This may take a while. After the export is complete, the resulting file will be added to the drive." -importRequested: "You requested an import. This may take a while." +exportRequested: "You've requested an export. This may take a while. It will be added to your Drive once completed." +importRequested: "You've requested an import. This may take a while." lists: "Lists" noLists: "You don't have any lists" note: "Note" @@ -79,9 +79,9 @@ manageLists: "Manage lists" error: "Error" somethingHappened: "An error occurred" retry: "Retry" -pageLoadError: "Failed to load page" +pageLoadError: "Failed to load page." pageLoadErrorDescription: "This is normally caused by network errors or the browser's cache. Try clearing the cache and then try again after waiting a little while." -enterListName: "List name" +enterListName: "Enter a list name" privacy: "Privacy" makeFollowManuallyApprove: "Follow requests require approval" defaultNoteVisibility: "Default visibility" @@ -92,7 +92,7 @@ unfollow: "Unfollow" followRequestPending: "Pending follow request" enterEmoji: "Enter an emoji" renote: "Renote" -unrenote: "Unrenote" +unrenote: "Take back Renote" renoted: "Renoted." cantRenote: "This post can't be renoted." cantReRenote: "A renote can't be renoted." @@ -103,8 +103,8 @@ you: "You" clickToShow: "Click to show" sensitive: "NSFW" add: "Add" -reaction: "Reaction" -reactionSettingDescription: "Assign your favorite reactions which want to pin in reaction picker." +reaction: "Reactions" +reactionSettingDescription: "Configure which reactions you want to display in the reaction picker." reactionSettingDescription2: "Drag to reorder, Click to delete, Press \"+\" to add" rememberNoteVisibility: "Remember note visibility settings" attachCancel: "Remove attachment" @@ -120,24 +120,25 @@ unsuspend: "Unsuspend" blockConfirm: "Are you sure that you want to block this account?" unblockConfirm: "Are you sure that you want to unblock this account?" suspendConfirm: "Are you sure that you want to suspend this account?" -unsuspendConfirm: "Are you sure you that want to unsuspend this account?" +unsuspendConfirm: "Are you sure that you want to unsuspend this account?" selectList: "Select a list" -selectAntenna: "Select an Antenna" +selectAntenna: "Select an antenna" selectWidget: "Select a widget" editWidgets: "Edit widgets" editWidgetsExit: "Done" customEmojis: "Custom Emoji" emoji: "Emoji" +emojis: "Emoji" emojiName: "Emoji name" emojiUrl: "Emoji URL" addEmoji: "Add an emoji" -settingGuide: "Suggested Configuration" +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 will increase traffic, because thumbnails will not be generated." -flagAsBot: "This account is a bot" -flagAsBotDescription: "If this account is controlled by a program, set this option. If enabled, it will act as 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." -flagAsCat: "This account is a cat" -flagAsCatDescription: "Toggle this flag on for this account to be marked as a cat." +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 as bot" +flagAsBotDescription: "Enable this option if this account is controlled by a program. If enabled, it will act as 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." +flagAsCat: "Mark this account as a cat" +flagAsCatDescription: "Enable this option to mark this account as a cat." autoAcceptFollowed: "Automatically approve follow requests from users you're following" addAccount: "Add account" loginFailed: "Failed to sign in" @@ -152,14 +153,14 @@ followConfirm: "Are you sure that you want to follow {name}?" proxyAccount: "Proxy account" proxyAccountDescription: "A proxy account is an account that acts as a remote follower for users under certain conditions. For example, when a user adds a remote user to the list, the remote user's activity will not be delivered to the instance if no local user is following that user, so the proxy account will follow instead." host: "Host" -selectUser: "Select user" +selectUser: "Select a user" recipient: "Recipient" annotation: "Comments" federation: "Federation" -instances: "Instance" +instances: "Instances" registeredAt: "Registered at" -latestRequestSentAt: "Last request sent at" -latestRequestReceivedAt: "Last request received at" +latestRequestSentAt: "Last request sent" +latestRequestReceivedAt: "Last request received" latestStatus: "Latest status" storageUsage: "Storage usage" charts: "Charts" @@ -181,21 +182,21 @@ instanceInfo: "Instance Information" statistics: "Statistics" clearQueue: "Clear queue" clearQueueConfirmTitle: "Are you sure that you want to clear the queue?" -clearQueueConfirmText: "Any undelivered notes remaining in the queue will not be federated. Usually this operation is NOT needed." +clearQueueConfirmText: "Any undelivered notes remaining in the queue will not be federated. Usually this operation is not needed." clearCachedFiles: "Clear cache" -clearCachedFilesConfirm: "Are you sure that you want to delete all the cached remote files?" +clearCachedFilesConfirm: "Are you sure that you want to delete all cached remote files?" blockedInstances: "Blocked Instances" -blockedInstancesDescription: "List the hostname of the instances that need to be blocked. Listed instances will no longer be able to communicate with this instance." -muteAndBlock: "Mute / Block" +blockedInstancesDescription: "List the hosts of the instances to be blocked separated by line breaks. Blocked instances will no longer be able to communicate with this instance." +muteAndBlock: "Mutes and Blocks" mutedUsers: "Muted users" blockedUsers: "Blocked users" 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." +pinLimitExceeded: "You cannot pin any more notes" intro: "Installation of Misskey has been finished! Please create an admin user." done: "Done" -processing: "Processing" +processing: "Processing..." preview: "Preview" default: "Default" noCustomEmojis: "There are no emojis" @@ -212,7 +213,7 @@ instanceFollowers: "Followers of instance" instanceUsers: "Users of this instance" changePassword: "Change password" security: "Security" -retypedNotMatch: "The input does not match." +retypedNotMatch: "The inputs does not match." currentPassword: "Current password" newPassword: "New password" newPasswordRetype: "Retype new password" @@ -226,11 +227,11 @@ announcements: "Announcements" imageUrl: "Image URL" remove: "Delete" removed: "Successfully deleted" -removeAreYouSure: "Are you sure that you want to delete \"{x}\"?" +removeAreYouSure: "Are you sure that you want to remove \"{x}\"?" deleteAreYouSure: "Are you sure that you want to delete \"{x}\"?" resetAreYouSure: "Really reset?" saved: "Saved" -messaging: "Messaging" +messaging: "Chat" upload: "Upload" fromDrive: "From Drive" fromUrl: "From URL" @@ -242,13 +243,13 @@ explore: "Explore" games: "Misskey Games" messageRead: "Read" noMoreHistory: "There is no further history" -startMessaging: "Start messaging" +startMessaging: "Start a new chat" nUsersRead: "read by {n}" agreeTo: "I agree to {0}" tos: "Terms of Service" start: "Begin" home: "Home" -remoteUserCaution: "This information may not be up-to-date, because the user is from a remote instance." +remoteUserCaution: "As this user is from a remote instance, the shown information may be incomplete." activity: "Activity" images: "Images" birthday: "Birthday" @@ -260,8 +261,8 @@ themeForLightMode: "Theme to use in Light Mode" themeForDarkMode: "Theme to use in Dark Mode" light: "Light" dark: "Dark" -lightThemes: "Light theme" -darkThemes: "Dark theme" +lightThemes: "Light themes" +darkThemes: "Dark themes" syncDeviceDarkMode: "Sync Dark Mode with your device settings" drive: "Drive" fileName: "Filename" @@ -275,7 +276,7 @@ createFolder: "Create a folder" renameFolder: "Rename this folder" deleteFolder: "Delete this folder" addFile: "Add a file" -emptyDrive: "The drive is empty" +emptyDrive: "Your Drive is empty" emptyFolder: "This folder is empty" unableToDelete: "Unable to delete" inputNewFileName: "Enter a new filename" @@ -289,12 +290,12 @@ avatar: "Avatar" banner: "Banner" nsfw: "NSFW" whenServerDisconnected: "When losing connection to the server" -disconnectedFromServer: "Connection to the server was interrupted." +disconnectedFromServer: "Connection to server has been lost" reload: "Refresh" doNothing: "Ignore" -reloadConfirm: "Would you like to refresh timeline?" +reloadConfirm: "Would you like to refresh the timeline?" watch: "Watch" -unwatch: "Undo Watch" +unwatch: "Stop watching" accept: "Accept" reject: "Reject" normal: "Normal" @@ -308,19 +309,19 @@ thisMonth: "Month" today: "Today" dayX: "{day}" monthX: "{month}" -yearX: "{year} /" +yearX: "{year}" pages: "Pages" integration: "Integration" connectService: "Connect" disconnectService: "Disconnect" enableLocalTimeline: "Enable local timeline" enableGlobalTimeline: "Enable global timeline" -disablingTimelinesInfo: "Admins and Mods will always have access to all timelines, even if they are not enabled." +disablingTimelinesInfo: "Adminstrators and Moderators will always have access to all timelines, even if they are not enabled." registration: "Register" enableRegistration: "Enable new user registration" invite: "Invite" proxyRemoteFiles: "Proxy remote files" -proxyRemoteFilesDescription: "If enabled, remote files that (1) are not stored locally or (2) got deleted from exceeding storage limit will be locally proxied (with thumbnails). This does not affect the server's storage." +proxyRemoteFilesDescription: "If enabled, remote files that are either not stored locally or were deleted due to exceeding the storage limit will be proxied, including generation of thumbnails. This does not affect the server's storage." driveCapacityPerLocalAccount: "Drive capacity per local user" driveCapacityPerRemoteAccount: "Drive capacity per remote user" inMb: "In megabytes" @@ -328,10 +329,10 @@ iconUrl: "Icon URL" bannerUrl: "Banner image URL" backgroundImageUrl: "Background image URL" basicInfo: "Basic info" -pinnedUsers: "Pinned user" -pinnedUsersDescription: "List one username per line. Users listed here will be pinned under \"Explore\" tab." +pinnedUsers: "Pinned users" +pinnedUsersDescription: "List usernames separated by line breaks to be pinned in the \"Explore\" tab." pinnedPages: "Pinned pages" -pinnedPagesDescription: "Enter the paths of the pages you want to pin to the top page of this instance, separated by new lines." +pinnedPagesDescription: "Enter the paths of the pages you want to pin to the top page of this instance, separated by line breaks." pinnedClipId: "ID of the pinned clip" pinnedNotes: "Pinned notes" hcaptcha: "hCaptcha" @@ -342,41 +343,41 @@ recaptcha: "reCAPTCHA" enableRecaptcha: "Enable reCAPTCHA" recaptchaSiteKey: "Site key" recaptchaSecretKey: "Secret key" -avoidMultiCaptchaConfirm: "Using multiple Captchas may cause interferences. Would you like to disable the other Captcha? You can leave multiple Captchas enabled by pressing cancel." +avoidMultiCaptchaConfirm: "Using multiple Captcha systems may cause interferences. Would you like to disable the other Captcha systems? You can leave multiple enabled by pressing cancel." antennas: "Antennas" manageAntennas: "Manage Antennas" name: "Name" antennaSource: "Antenna source" -antennaKeywords: "Keywords to receive" +antennaKeywords: "Keywords to listen to" antennaExcludeKeywords: "Keywords to exclude" -antennaKeywordsDescription: "Separate with spaces for AND condition. Separate with line breaks for OR." -notifyAntenna: "Notify for new notes" -withFileAntenna: "Filter only notes with file(s) attached" +antennaKeywordsDescription: "Separate with spaces for an AND condition or with line breaks for an OR condition." +notifyAntenna: "Notify about new notes" +withFileAntenna: "Only notes with files" enableServiceworker: "Enable ServiceWorker" antennaUsersDescription: "List one username per line" caseSensitive: "Case sensitive" withReplies: "Include replies" connectedTo: "Following account(s) are connected" notesAndReplies: "Notes and replies" -withFiles: "Media" +withFiles: "Including files" silence: "Silence" silenceConfirm: "Are you sure that you want to silence this user?" -unsilence: "Unsilence" -unsilenceConfirm: "Are you sure that you want to undo silence of this user?" +unsilence: "Undo silencing" +unsilenceConfirm: "Are you sure that you want to undo the silencing of this user?" popularUsers: "Trending users" recentlyUpdatedUsers: "Users with recent activity" recentlyRegisteredUsers: "Newly joined users" recentlyDiscoveredUsers: "Newly discovered users" exploreUsersCount: "There are {count} users" -exploreFediverse: "Explore Fediverse" +exploreFediverse: "Explore the Fediverse" popularTags: "Trending Tags" userList: "Lists" about: "About" aboutMisskey: "About Misskey" -administrator: "Admin" +administrator: "Administrator" token: "Token" twoStepAuthentication: "Two-factor authentication" -moderator: "Mod" +moderator: "Moderator" nUsersMentioned: "{n} users mentioned" securityKey: "Security key" securityKeyName: "Key name" @@ -386,11 +387,11 @@ unregister: "Unregister" passwordLessLogin: "Set up password-less login" resetPassword: "Reset password" newPasswordIs: "The new password is \"{password}\"" -reduceUiAnimation: "Reduce UI animation" +reduceUiAnimation: "Reduce UI animations" share: "Share" notFound: "Not found" -notFoundDescription: "There was no page corresponding to the specified URL." -uploadFolder: "Default Upload location" +notFoundDescription: "No page corresponding to this URL could be found." +uploadFolder: "Default folder for uploads" cacheClear: "Clear cache" markAsReadAllNotifications: "Mark all notifications as read" markAsReadAllUnreadNotes: "Mark all notes as read" @@ -398,59 +399,59 @@ markAsReadAllTalkMessages: "Mark all messages as read" help: "Help" inputMessageHere: "Enter message here" close: "Close" -group: "Groups" +group: "Group" groups: "Groups" createGroup: "Create a group" ownedGroups: "Owned Groups" -joinedGroups: "Membership in groups" -invites: "Invite" +joinedGroups: "Joined groups" +invites: "Invites" groupName: "Group name" members: "Members" transfer: "Transfer" -messagingWithUser: "Messaging with other user" -messagingWithGroup: "Messaging within group" +messagingWithUser: "Private chat" +messagingWithGroup: "Group chat" title: "Title" text: "Text" enable: "Enable" next: "Next" retype: "Enter again" -noteOf: "{user}'s notes" +noteOf: "Note by {user}" inviteToGroup: "Invite to group" -maxNoteTextLength: "Character limit of notes" +maxNoteTextLength: "Character limit for notes" quoteAttached: "Quoted" -quoteQuestion: "Do you want to append a quote?" +quoteQuestion: "Append as quote?" noMessagesYet: "No messages yet" newMessageExists: "You've got a new message" onlyOneFileCanBeAttached: "You can only attach one file to a message" signinRequired: "Please sign in" -invitations: "Invitations" +invitations: "Invites" invitationCode: "Invitation code" -checking: "Checking" +checking: "Checking..." available: "Available" unavailable: "Not available" -usernameInvalidFormat: "letters, numbers and _ are acceptable." +usernameInvalidFormat: "You can use upper- and lowercase letters, numbers as well as underscores." tooShort: "Too short" tooLong: "Too long" weakPassword: "Weak password" -normalPassword: "Good password" +normalPassword: "Normal password" strongPassword: "Strong password" -passwordMatched: "Matched" -passwordNotMatched: "Doesn't match" +passwordMatched: "Matches" +passwordNotMatched: "Does not match" signinWith: "Sign in with {x}" -signinFailed: "Unable to sign in. The username or password you entered is incorrect." +signinFailed: "Unable to sign in. The entered username or password is incorrect." tapSecurityKey: "Tap your security key" or: "Or" language: "Language" -uiLanguage: "UI display language" -groupInvited: "Invited to group" +uiLanguage: "User interface language" +groupInvited: "You've been invited to a group" aboutX: "About {x}" useOsNativeEmojis: "Use OS native Emojis" youHaveNoGroups: "You have no groups" -joinOrCreateGroup: "Get invited to join the groups or you can create your own group." -noHistory: "No history items" +joinOrCreateGroup: "Get invited to a group or create your own." +noHistory: "No history available" signinHistory: "Login history" disableAnimatedMfm: "Disable MFM with animation" -doing: "On my way" +doing: "Processing..." category: "Category" tags: "Tags" docSource: "Source of this document" @@ -464,37 +465,37 @@ dashboard: "Dashboard" local: "Local" remote: "Remote" total: "Total" -weekOverWeekChanges: "Weekly" -dayOverDayChanges: "Daily" +weekOverWeekChanges: "Changes to last week" +dayOverDayChanges: "Changes to yesterday" appearance: "Appearance" clientSettings: "Client settings" accountSettings: "Account Settings" promotion: "Promoted" promote: "Promote" -numberOfDays: "Amount of days" +numberOfDays: "Number of days" hideThisNote: "Hide this note" -showFeaturedNotesInTimeline: "Show Featured notes in Timeline" +showFeaturedNotesInTimeline: "Show Featured notes in Timelines" objectStorage: "Object Storage" useObjectStorage: "Use object storage" objectStorageBaseUrl: "Base URL" -objectStorageBaseUrlDesc: "URL prefix used for construct URL to object (media) referencing. Specify its URL if you are using a CDN or Proxy, otherwise specify the address that publicly accessible according to the guide of service that you're going to use. i.g 'https://.s3.amazonaws.com' for AWS S3, and 'https://storage.googleapis.com/' for GCS." +objectStorageBaseUrlDesc: "URL used as reference. Specify the URL of your CDN or Proxy if you are using either. S3: 'https://.s3.amazonaws.com', GCS: 'https://storage.googleapis.com/' etc." objectStorageBucket: "Bucket" -objectStorageBucketDesc: "Please specify the bucket name used on configured service." +objectStorageBucketDesc: "Please specify the bucket name used at your provider." objectStoragePrefix: "Prefix" -objectStoragePrefixDesc: "Files will stored under the directory of this prefix." +objectStoragePrefixDesc: "Files will stored under directories with this prefix." objectStorageEndpoint: "Endpoint" -objectStorageEndpointDesc: "Leave this empty if you are using AWS S3, otherwise specify the endpoint as '' or ':' according to the guide of service that you're going to use." +objectStorageEndpointDesc: "Leave this empty if you are using AWS S3, otherwise specify the endpoint as '' or ':', depending on the service you are using." objectStorageRegion: "Region" -objectStorageRegionDesc: "Specify a region like 'xx-east-1'. If your service does not have distinction about regions, leave it blank or fill with 'us-east-1'." +objectStorageRegionDesc: "Specify a region like 'xx-east-1'. If your service does not distinct between regions, leave this blank or enter 'us-east-1'." objectStorageUseSSL: "Use SSL" -objectStorageUseSSLDesc: "Turn off this if you are not going to use HTTPS for API connection" +objectStorageUseSSLDesc: "Turn this off if you are not going to use HTTPS for API connections" objectStorageUseProxy: "Connect over Proxy" -objectStorageUseProxyDesc: "Turn off this if you are not going to use Proxy for ObjectStorage connection" +objectStorageUseProxyDesc: "Turn this off if you are not going to use a Proxy for API connections" objectStorageSetPublicRead: "Set \"public-read\" on upload" serverLogs: "Server logs" deleteAll: "Delete all" showFixedPostForm: "Display the posting form at the top of the timeline" -newNoteRecived: "You've got a new note" +newNoteRecived: "There are new notes" sounds: "Sounds" listen: "Listen" none: "None" @@ -503,29 +504,29 @@ popout: "Pop-out" volume: "Volume" masterVolume: "Master volume" details: "Details" -chooseEmoji: "Choose an emoji" -unableToProcess: "The operation could not be completed." +chooseEmoji: "Select an emoji" +unableToProcess: "The operation could not be completed" recentUsed: "Recently used" install: "Install" uninstall: "Uninstall" installedApps: "Authorized Applications" nothing: "There's nothing to see here" -installedDate: "Authorized" -lastUsedDate: "Last used" +installedDate: "Authorized at" +lastUsedDate: "Last used at" state: "State" sort: "Sort" ascendingOrder: "Ascending" descendingOrder: "Descending" -scratchpad: "Scratch pad" -scratchpadDescription: "Scratchpad provides experimental environment for AiScript. You can write, execute, and check the results that interact with Misskey." +scratchpad: "Scratchpad" +scratchpadDescription: "The Scratchpad provides an environment for AiScript experiments. You can write, execute, and check the results of it interacting with Misskey." 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?" -removeAllFollowing: "Withhold All Followings" -removeAllFollowingDescription: "Unfollow all accounts from {host}. Please run this if the instance no longer exists." +removeAllFollowing: "Unfollow all followed users" +removeAllFollowingDescription: "Executing this unfollows all accounts from {host}. Please run this if the instance e.g. no longer exists." userSuspended: "This user has been suspended." userSilenced: "This user has been silenced." menu: "Menu" @@ -574,7 +575,7 @@ edit: "Edit" useStarForReactionFallback: "Use ★ as fallback if the reaction emoji is unknown" emailServer: "Email server" enableEmail: "Enable email distribution" -emailConfigInfo: "Used to confirm your email during sign-up and if you forget your password" +emailConfigInfo: "Used to confirm your email during sign-up or if you forget your password" email: "Email" emailAddress: "Email address" smtpConfig: "SMTP Server configuration" @@ -613,7 +614,7 @@ sample: "Sample" abuseReports: "Reports" reportAbuse: "Report" reportAbuseOf: "Report {name}" -fillAbuseReportDescription: "Please fill in the report details. If it is about a specific note, please include its URL." +fillAbuseReportDescription: "Please fill in details regarding this report. If it is about a specific note, please include its URL." abuseReported: "Your report has been sent. Thank you very much." send: "Send" abuseMarkAsResolved: "Mark report as resolved" @@ -635,33 +636,33 @@ public: "Public" i18nInfo: "Misskey is being translated into various languages by volunteers. You can help at {link}." manageAccessTokens: "Manage access tokens" accountInfo: "Account Info" -notesCount: "Amount of notes" -repliesCount: "Amount of replies sent" -renotesCount: "Amount of renotes sent" -repliedCount: "Amount of replies received" -renotedCount: "Amount of renotes received" -followingCount: "Amount of followed accounts" -followersCount: "Amount of followers" -sentReactionsCount: "Amount of sent reactions" -receivedReactionsCount: "Amount of received reactions" -pollVotesCount: "Amount of sent poll votes" -pollVotedCount: "Amount of received poll votes" +notesCount: "Number of notes" +repliesCount: "Number of replies sent" +renotesCount: "Number of renotes sent" +repliedCount: "Number of replies received" +renotedCount: "Number of renotes received" +followingCount: "Number of followed accounts" +followersCount: "Number of followers" +sentReactionsCount: "Number of sent reactions" +receivedReactionsCount: "Number of received reactions" +pollVotesCount: "Number of sent poll votes" +pollVotedCount: "Number of received poll votes" yes: "Yes" no: "No" -driveFilesCount: "Amount of drive files" +driveFilesCount: "Number of drive files" driveUsage: "Drive space usage" noCrawle: "Reject crawler indexing" -noCrawleDescription: "Ask search engines not to index your profile page, notes, Pages, etc." -lockedAccountInfo: "Unless you set your note visiblity to \"Followers only\", your notes are visible to anyone, even if you require followers to be manually approved." -alwaysMarkSensitive: "Mark NSFW by default" -loadRawImages: "Display image attachments fully instead of thumbnails" +noCrawleDescription: "Ask search engines to not index your profile page, notes, Pages, etc." +lockedAccountInfo: "Unless you set your note visiblity to \"Followers only\", your notes will be visible to anyone, even if you require followers to be manually approved." +alwaysMarkSensitive: "Mark as NSFW by default" +loadRawImages: "Load original images instead of showing thumbnails" disableShowingAnimatedImages: "Don't play animated images" verificationEmailSent: "A verification email has been sent. Please access the included link to complete verification." notSet: "Not set" emailVerified: "Email has been verified" -noteFavoritesCount: "Amount of favorite notes" -pageLikesCount: "Amount of received Page likes" -pageLikedCount: "Amount of liked Pages" +noteFavoritesCount: "Number of favorite notes" +pageLikesCount: "Number of liked Pages" +pageLikedCount: "Number of received Page likes" reversiCount: "Number of Reversi matches" contact: "Contact" useSystemFont: "Use the system's default font" @@ -676,22 +677,22 @@ left: "Left" center: "Center" wide: "Wide" narrow: "Narrow" -reloadToApplySetting: "This setting will be applied upon page reload. Reload now?" +reloadToApplySetting: "This setting will only apply after a page reload. Reload now?" showTitlebar: "Show title bar" clearCache: "Clear cache" -onlineUsersCount: "{n} people are online" +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 may include informations such as your OS and its version, the kind of browser you're using, your activity history, etc." +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 history, etc." myTheme: "My theme" -backgroundColor: "Background" -accentColor: "Accent" -textColor: "Text" +backgroundColor: "Background color" +accentColor: "Accent color" +textColor: "Textfarbe" saveAs: "Save as..." advanced: "Advanced" value: "Value" -createdAt: "Created on" +createdAt: "Created at" updatedAt: "Updated at" saveConfirm: "Save changes?" deleteConfirm: "Really delete?" @@ -707,7 +708,7 @@ capacity: "Capacity" inUse: "Used" editCode: "Edit code" apply: "Apply" -receiveAnnouncementFromInstance: "Receive Email notifications from this instance" +receiveAnnouncementFromInstance: "Receive notifications from this instance" emailNotification: "Email notifications" publish: "Publish" inChannelSearch: "Search in channel" @@ -722,14 +723,14 @@ unlikeConfirm: "Really remove your like?" fullView: "Full view" quitFullView: "Exit full view" addDescription: "Add description" -userPagePinTip: "You can make notes be displayed here by selecting \"Pin to profile\" from the menu of individual notes" +userPagePinTip: "You can display notes here by selecting \"Pin to profile\" from the menu of individual notes." notSpecifiedMentionWarning: "This note contains mentions of users not included as recipient" info: "About" userInfo: "User information" unknown: "Unknown" onlineStatus: "Online status" hideOnlineStatus: "Hide online status" -hideOnlineStatusDescription: "Hiding your online status reduces the convenience of some functions such as search" +hideOnlineStatusDescription: "Hiding your online status reduces the convenience of some features such as the search." online: "Online" active: "Active" offline: "Offline" @@ -739,8 +740,8 @@ instanceBlocking: "Blocked Instances" selectAccount: "Select account" enabled: "Enabled" disabled: "Disabled" -quickAction: "Quick action" -user: "Users" +quickAction: "Quick actions" +user: "User" administration: "Management" accounts: "Accounts" switch: "Switch" @@ -759,12 +760,30 @@ priority: "Priority" high: "High" middle: "Medium" low: "Low" -emailNotConfiguredWarning: "Email address not set" +emailNotConfiguredWarning: "Email address not set." ratio: "Ratio" customCss: "Custom CSS" customCssWarn: "This setting should only be used if you know what it does. Entering improper values may cause the client to stop functioning normally." global: "Global" squareAvatars: "Display squared avatars" +sent: "Sent" +received: "Received" +searchResult: "Search results" +hashtags: "Hashtags" +troubleshooting: "Troubleshooting" +useBlurEffect: "Use blur effects in the UI" +learnMore: "Learn more" +misskeyUpdated: "Misskey has been updated!" +whatIsNew: "Show changes" +translate: "Translate" +translatedFrom: "Translated from {x}" +_docs: + continueReading: "Read more" + features: "Features" + generalTopics: "General topics" + advancedTopics: "Advanced Topics" + admin: "Administration" + translateWarn: "This is a translated document. Its contents may differ from the original." _ad: back: "Back" reduceFrequencyOfThisAd: "Show this ad less" @@ -799,8 +818,8 @@ _aboutMisskey: source: "Source code" translation: "Translate Misskey" donate: "Donate to Misskey" - morePatrons: "We really appreciate the support of many other helpers not listed here. Thank you! 🥰" - patrons: "Backers" + morePatrons: "We also appreciate the support of many other helpers not listed here. Thank you! 🥰" + patrons: "Patrons" _nsfw: respect: "Hide NSFW media" ignore: "Don't hide NSFW media" @@ -810,23 +829,23 @@ _mfm: 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" mention: "Mention" - mentionDescription: "Using an At-Symbol and a username, you can specify a specific user." + mentionDescription: "You can specify a user by using an At-Symbol and a username." hashtag: "Hashtag" - hashtagDescription: "Using a number sign and text, you can specify a hashtag." + hashtagDescription: "You can specify a hashtag using a number sign and text." url: "URL" urlDescription: "URLs can be displayed." link: "Link" - linkDescription: "Specific parts of text can be displayed as URL." + linkDescription: "Specific parts of text can be displayed as an URL." bold: "Bold" boldDescription: "Highlights letters by making them thicker." small: "Small" - smallDescription: "Displays contents small and thinn." + smallDescription: "Displays contents small and thin." center: "Center" centerDescription: "Displays content centered." - inlineCode: "Code (Inline)" - inlineCodeDescription: "Displays inline syntax highlighting for (program-)code." + inlineCode: "Code (In-line)" + inlineCodeDescription: "Displays inline syntax highlighting for (program) code." blockCode: "Code (Block)" - blockCodeDescription: "Displays syntax highlighting for multi-line (program-)code in a block." + blockCodeDescription: "Displays syntax highlighting for multi-line (program) code in a block." inlineMath: "Math (In-line)" inlineMathDescription: "Display math formulas (KaTeX) in-line" blockMath: "Math (Block)" @@ -840,29 +859,31 @@ _mfm: flip: "Flip" flipDescription: "Flips content horizontally or vertically." jelly: "Animation (Jelly)" - jellyDescription: "Infuses a jelly-like animation." + jellyDescription: "Gives content a jelly-like animation." tada: "Animation (Tada)" - tadaDescription: "Infuses a \"Tada!\"-like animation." + tadaDescription: "Gives content a \"Tada!\"-like animation." jump: "Animation (Jump)" - jumpDescription: "Infuses a jumping animation." + jumpDescription: "Gives content a jumping animation." bounce: "Animation (Bounce)" - bounceDescription: "Causes a bouncy animation." + bounceDescription: "Gives content a bouncy animation." shake: "Animation (Shake)" - shakeDescription: "Infuses a shaking animation." + shakeDescription: "Gives content a shaking animation." twitch: "Animation (Twitch)" - twitchDescription: "Infuses a strongly twitching animation." + twitchDescription: "Gives content a strongly twitching animation." spin: "Animation (Spin)" - spinDescription: "Infuses a spinning animation." + spinDescription: "Gives content a spinning animation." x2: "Big" x2Description: "Displays content bigger." x3: "Very big" x3Description: "Displays content even bigger." - x4: "Extremely big" + x4: "Unbelievably big" x4Description: "Displays content even bigger than bigger than big." blur: "Blur" - blurDescription: "Content can be blurred via this effect. It will be clearly displayed by hovering your cursor above it." + blurDescription: "Content can be blurred via this effect. It will be displayed clearly when hovered over." font: "Font" fontDescription: "Sets the font to display contents in." + rainbow: "Rainbow" + rainbowDescription: "Makes the content appear in rainbow colors." _reversi: reversi: "Reversi" gameSettings: "Game settings" @@ -879,12 +900,12 @@ _reversi: cancelReady: "Cancel ready" opponentTurn: "Opponent's turn" myTurn: "Your turn" - turnOf: "{name}'s turn" + turnOf: "It's {name}'s turn" pastTurnOf: "{name}'s turn" surrender: "Surrender" surrendered: "By surrender" drawn: "Draw" - won: "{name}'s win" + won: "{name} wins" black: "Black" white: "White" total: "Total" @@ -894,7 +915,7 @@ _reversi: ended: "Ended" playing: "Currently playing" isLlotheo: "The one with fewer stones wins (Llotheo)" - loopedMap: "Looped map" + loopedMap: "Looping map" canPutEverywhere: "Tiles are placeable everywhere" _instanceTicker: none: "Never show" @@ -915,30 +936,30 @@ _channel: usersCount: "{n} Participants" notesCount: "{n} Notes" _menuDisplay: - sideFull: "Horizontal" - sideIcon: "Horizontal (Icons)" + sideFull: "Side" + sideIcon: "Side (Icons)" top: "Top" hide: "Hide" _wordMute: - muteWords: "Word to mute" - muteWordsDescription: "Separate with spaces for AND condition. Separate with line breaks for OR." + muteWords: "Muted words" + muteWordsDescription: "Separate with spaces for an AND condition or with line breaks for an OR condition." muteWordsDescription2: "Surround keywords by slashes to use regular expressions." - softDescription: "Hide notes fulfilling the set conditions from the timeline." - hardDescription: "Prevent notes fulfilling the set conditions from being added to the timeline. In addition, these notes will not be added to the timeline even if the conditions are changed." + softDescription: "Hides notes fulfilling the set conditions from the timeline." + hardDescription: "Prevents notes fulfilling the set conditions from being added to the timeline. In addition, these notes will not be added to the timeline even if the conditions are changed." soft: "Soft" hard: "Hard" mutedNotes: "Muted notes" _theme: explore: "Explore Themes" - install: "Install theme" - manage: "Themes manager" + install: "Install a theme" + manage: "Manage themes" code: "Theme code" description: "Description" installed: "{name} has been installed" installedThemes: "Installed themes" builtinThemes: "Built-in themes" - alreadyInstalled: "The theme is already installed" - invalid: "Theme format is invalid" + alreadyInstalled: "This theme is already installed" + invalid: "The format of this theme is invalid" make: "Make a theme" base: "Base" addConstant: "Add constant" @@ -955,7 +976,7 @@ _theme: alpha: "Opacity" darken: "Darken" lighten: "Lighten" - inputConstantName: "Enter a name for the constant" + inputConstantName: "Enter a name for this constant" importInfo: "If you enter theme code here, you can import it to the theme editor" deleteConstantConfirm: "Do you really want to delete the constant {const}?" keys: @@ -986,9 +1007,9 @@ _theme: infoFg: "Information text" infoWarnBg: "Warning background" infoWarnFg: "Warning text" - cwBg: "CW background" - cwFg: "CW text" - cwHoverBg: "CW background (Hover)" + cwBg: "CW button background" + cwFg: "CW button text" + cwHoverBg: "CW button background (Hover)" toastBg: "Notification background" toastFg: "Notification text" buttonBg: "Button background" @@ -1004,11 +1025,11 @@ _theme: fgHighlighted: "Highlighted Text" _sfx: note: "New note" - noteMy: "My note" + noteMy: "Own note" notification: "Notifications" - chat: "Messaging" - chatBg: "Messaging (Background)" - antenna: "Antenna Reception" + chat: "Chat" + chatBg: "Chat (Background)" + antenna: "Antennas" channel: "Channel notifications" reversiPutBlack: "Reversi: Black makes a move" reversiPutWhite: "Reversi: White makes a move" @@ -1016,92 +1037,92 @@ _ago: unknown: "Unknown" future: "Future" justNow: "Just now" - secondsAgo: "{n}s ago" - minutesAgo: "{n}m ago" - hoursAgo: "{n}h ago" - daysAgo: "{n}d ago" - weeksAgo: "{n}week(s) ago" - monthsAgo: "{n}month(s) ago" - yearsAgo: "{n}year(s) ago" + secondsAgo: "{n} seconds ago" + minutesAgo: "{n} minutes ago" + hoursAgo: "{n} hours ago" + daysAgo: "{n} days ago" + weeksAgo: "{n} week(s) ago" + monthsAgo: "{n} month(s) ago" + yearsAgo: "{n} year(s) ago" _time: - second: "s" - minute: "m" - hour: "h" - day: "d" + second: "Second(s)" + minute: "Minute(s)" + hour: "Hour(s)" + day: "Day(s)" _tutorial: title: "How to use Misskey" step1_1: "Welcome!" - step1_2: "This page is called \"timeline\". It shows chronologically ordered \"notes\" of people who you \"follow\"." + 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." step2_1: "Let's finish setting up your profile before writing a note or following anyone." - step2_2: "Providing some information about who you are will make it easier for others to follow you back." + step2_2: "Providing some information about who you are will make it easier for others to tell if they want to see your notes or follow you." step3_1: "Finished setting up your profile?" - step3_2: "The next step is to post a note. You can do this by pressing the pencil icon on the screen." + step3_2: "Then let's try posting a note next. You can do this by pressing the pencil icon on the top of the screen." step3_3: "Fill in the modal and press the button on the top right to post." step3_4: "Have nothing to say? Try \"just setting up my msky\"!" step4_1: "Finished posting your first note?" - step4_2: "Hurray! Now your first note is displayed on your timeline." + step4_2: "Hurray! Now your first note should be displayed on your timeline." step5_1: "Now, let's try making your timeline more lively by following other people." - step5_2: "{featured} will show you trending notes in this instance. {explore} will let you find trending users. Try following people you like!" - step5_3: "To follow other users, click on their icon and press \"follow\" button on their profile." - step5_4: "If the other user has a lock icon next to their name, that user will have to manually approve your follow request." - step6_1: "Now you will be able to see other users' notes on your timeline." + step5_2: "{featured} will show you trending notes in this instance. {explore} will let you find trending users. Try finding people you'd like to follow there!" + step5_3: "To follow other users, click on their icon and press the \"Follow\" button on their profile." + step5_4: "If the other user has a lock icon next to their name, it may take some time for that user to manually approve your follow request." + 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." 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: "Good luck and have fun! 🚀" + step7_3: "Now then, good luck and have fun with Misskey! 🚀" _2fa: - alreadyRegistered: "You have already registered 2-factor authentication device." + alreadyRegistered: "You have already registered a 2-factor authentication device." registerDevice: "Register a new device" registerKey: "Register a new Security Key" step1: "First, install an authentication app (such as {a} or {b}) on your device." - step2: "Then, scan the QR code on the screen." + step2: "Then, scan the QR code displayed on this screen." step3: "Enter the token provided by your app to finish setup." - step4: "From now, any login attempt will ask for your login token." - securityKeyInfo: "You can setup WebAuthN authentication to further secure the log-in process with not only hardware security key which supports FIDO2, but also fingerprint or PIN authentication on your device." + step4: "From now, any future login attempts will ask for such a login token." + securityKeyInfo: "Besides fingerprint or PIN authentication, you can also setup authentication via hardware security keys that support FIDO2 to further secure your login process." _permissions: "read:account": "View your account information" "write:account": "Edit your account information" "read:blocks": "View the list of people you blocked" - "write:blocks": "Edit the list of people you blocked" + "write:blocks": "Edit your list of blocked users" "read:drive": "Access your drive files and folders" "write:drive": "Edit or delete your drive files and folders" - "read:favorites": "View your favorites list" - "write:favorites": "Edit your favorites list" - "read:following": "View your following information" + "read:favorites": "View your list of favorites" + "write:favorites": "Edit your list of favorites" + "read:following": "View information on who you follow" "write:following": "Follow or unfollow other accounts" - "read:messaging": "View your messages" - "write:messaging": "Compose or Delete messages" - "read:mutes": "View the list of people you muted" - "write:mutes": "Edit the list of people you muted" - "write:notes": "Compose or Delete notes" - "read:notifications": "View notifications" - "write:notifications": "Work with notifications" - "read:reactions": "View reactions" - "write:reactions": "Edit reactions" + "read:messaging": "View your chats" + "write:messaging": "Compose or delete chat messages" + "read:mutes": "View your list of muted users" + "write:mutes": "Edit your list of muted users" + "write:notes": "Compose or delete notes" + "read:notifications": "View your notifications" + "write:notifications": "Work with your notifications" + "read:reactions": "View your reactions" + "write:reactions": "Edit your reactions" "write:votes": "Vote on a poll" "read:pages": "View your pages" "write:pages": "Edit or delete your pages" - "read:page-likes": "View likes on pages" - "write:page-likes": "Edit likes on pages" - "read:user-groups": "View user groups" - "write:user-groups": "Edit or delete user groups" - "read:channels": "Read channels" - "write:channels": "Modify channels" + "read:page-likes": "View your likes on pages" + "write:page-likes": "Edit your likes on pages" + "read:user-groups": "View your user groups" + "write:user-groups": "Edit or delete your user groups" + "read:channels": "Read your channels" + "write:channels": "Modify your channels" _auth: shareAccess: "Would you like to authorize \"{name}\" to access this account?" shareAccessAsk: "Are you sure you want to authorize this application to access your account?" - permissionAsk: "This application requires following permissions:" + permissionAsk: "This application requests the following permissions" pleaseGoBack: "Please go back to the application" callback: "Returning back to the application" denied: "Access denied" _antennaSources: all: "All notes" - homeTimeline: "Notes from following users" + homeTimeline: "Notes from followed users" users: "Notes from specific users" - userList: "Notes from specific list" - userGroup: "Notes from users in the specified group" + userList: "Notes from a specified list of users" + userGroup: "Notes from users in a specified group" _weekday: sunday: "Sunday" monday: "Monday" @@ -1131,24 +1152,24 @@ _widgets: aiscript: "AiScript console" _cw: hide: "Hide" - show: "Load more" + show: "Show content" chars: "{count} characters" files: "{count} file(s)" _poll: noOnlyOneChoice: "At least two choices are needed" choiceN: "Choice {n}" noMore: "You cannot add more choices" - canMultipleVote: "Allow multiple replies" - expiration: "Poll ends on" + canMultipleVote: "Allow selecting multiple choices" + expiration: "End poll" infinite: "Never" at: "End at..." after: "End after..." deadlineDate: "End date" - deadlineTime: "h" + deadlineTime: "Time" duration: "Duration" votesCount: "{n} votes" - totalVotes: "Total {n} votes" - vote: "Vote on a poll" + totalVotes: "{n} votes in total" + vote: "Vote" showResult: "View results" voted: "Voted" closed: "Ended" @@ -1158,19 +1179,19 @@ _poll: remainingSeconds: "{s} seconds remaining" _visibility: public: "Public" - publicDescription: "Your note will appear on global timeline" + publicDescription: "Your note will be visible for all users" home: "Home" homeDescription: "Post to home timeline only" followers: "Followers" - followersDescription: "Post to followers only" + followersDescription: "Make visible to your followers only" specified: "Direct" - specifiedDescription: "Post to specified users only" + specifiedDescription: "Make visible for specified users only" localOnly: "Local only" localOnlyDescription: "Not visible to remote users" _postForm: replyPlaceholder: "Reply to this note..." quotePlaceholder: "Quote this note..." - channelPlaceholder: "Post to channel" + channelPlaceholder: "Post to a channel..." _placeholders: a: "What are you up to?" b: "What's happening around you?" @@ -1185,17 +1206,17 @@ _profile: youCanIncludeHashtags: "You can also include hashtags in your bio." metadata: "Additional Information" metadataEdit: "Edit additional Information" - metadataDescription: "You can display up to four additional information sections in your profile." + metadataDescription: "You can display up to four additional information fields in your profile." metadataLabel: "Label" metadataContent: "Content" changeAvatar: "Change avatar" changeBanner: "Change banner" _exportOrImport: allNotes: "All notes" - followingList: "Following" - muteList: "Mute" - blockingList: "Block" - userLists: "Lists" + followingList: "Followed users" + muteList: "Muted users" + blockingList: "Blocked users" + userLists: "User lists" _charts: federationInstancesIncDec: "Difference in # of federating instances" federationInstancesTotal: "Total # of federating instances" @@ -1208,7 +1229,7 @@ _charts: notesTotal: "Total # of notes" filesIncDec: "Difference in # of files" filesTotal: "Total # of files" - storageUsageIncDec: "Difference in storage use" + storageUsageIncDec: "Difference in storage usage" storageUsageTotal: "Total storage usage" _instanceCharts: requests: "Requests" @@ -1216,8 +1237,8 @@ _instanceCharts: usersTotal: "Cumulative total # of users" notes: "Difference in # of notes" notesTotal: "Cumulative total # of notes" - ff: "Difference in # of followers" - ffTotal: "Cumulative total # of followers" + ff: "Difference in # of followed users / followers " + ffTotal: "Cumulative total # of followed users / followers" cacheSize: "Difference in cache size" cacheSizeTotal: "Cumulative total cache size" files: "Difference in # of files" @@ -1235,11 +1256,11 @@ _rooms: exit: "Back" remove: "Remove" clear: "Remove All" - clearConfirm: "Are you sure to remove all furnitures in your room?" + clearConfirm: "Do you really want to remove all furniture from your room?" leaveConfirm: "There are unsaved changes. Do you really want to leave?" chooseImage: "Select an image" roomType: "Room type" - carpetColor: "Color of carpet" + carpetColor: "Carpet color" _roomType: default: "Default" washitsu: "Japanese-style" @@ -1263,14 +1284,14 @@ _rooms: book: "Book" book2: "Book 2" piano: "Piano" - facial-tissue: "Facial tissue" - server: "Servers" + facial-tissue: "Tissues" + server: "Server" moon: "Moon" corkboard: "Cork board" mousepad: "Mousepad" monitor: "Monitor" keyboard: "Keyboard" - carpet-stripe: "Carpet (stripe)" + carpet-stripe: "Carpet (striped)" mat: "Mat" color-box: "Bookshelf" wall-clock: "Wall clock" @@ -1278,13 +1299,13 @@ _rooms: cube: "Cube" tv: "TV" pinguin: "Penguin" - rubik-cube: "Rubik's Cube" + rubik-cube: "Puzzle Cube" poster-h: "Poster (Horizontal)" poster-v: "Poster (Vertical)" sofa: "Sofa" spiral: "Spiral Staircase" - bin: "Waste bin" - cup-noodle: "Cup noodle" + bin: "Garbage can" + cup-noodle: "Cup noodles" holo-display: "Holographic display" energy-drink: "Energy drink" doll-ai: "Ai doll" @@ -1293,13 +1314,13 @@ _pages: newPage: "Create a page" editPage: "Edit this page" readPage: "Source view activated" - created: "Successfully created a page!" - updated: "Successfully updated the page!" - deleted: "The page has been deleted" + created: "Page successfully created" + updated: "Page successfully edited" + deleted: "Page successfully deleted" pageSetting: "Page settings" nameAlreadyExists: "The specified page URL already exists" invalidNameTitle: "The specified page URL is invalid" - invalidNameText: "Check whether that is not a blank" + invalidNameText: "Make sure the page title is not empty" editThisPage: "Edit this page" viewSource: "View source" viewPage: "View your pages" @@ -1309,7 +1330,7 @@ _pages: liked: "Liked pages" featured: "Featured" inspector: "Inspector" - contents: "Content" + contents: "Contents" content: "Page block" variables: "Variables" title: "Title" @@ -1320,12 +1341,12 @@ _pages: font: "Font" fontSerif: "Serif" fontSansSerif: "Sans serif" - eyeCatchingImageSet: "Set the eye-catching image" - eyeCatchingImageRemove: "Delete the eye-catching image" + eyeCatchingImageSet: "Set thumbnail" + eyeCatchingImageRemove: "Delete thumbnail" chooseBlock: "Add a block" selectType: "Select a type" - enterVariableName: "Please enter a name for your variable" - variableNameIsAlreadyUsed: "This name is already being used by other variable" + enterVariableName: "Enter a variable name" + variableNameIsAlreadyUsed: "This variable name is already in use" contentBlocks: "Content" inputBlocks: "Input" specialBlocks: "Special" @@ -1341,7 +1362,7 @@ _pages: post: "Compose a note" _post: text: "Content" - attachCanvasImage: "Post with Canvas as Image" + attachCanvasImage: "Post with canvas image" canvasId: "Canvas ID" textInput: "Text input" _textInput: @@ -1366,7 +1387,7 @@ _pages: note: "Embedded note" _note: id: "Note ID" - idDescription: "You can also paste the Note's URL to set it instead." + idDescription: "You can alternatively paste the note URL here." detailed: "Detailed view" switch: "Switch" _switch: @@ -1400,7 +1421,7 @@ _pages: _radioButton: name: "Variable name" title: "Title" - values: "List of choices (separated by line breaks)" + values: "List of choices separated by line breaks" default: "Default value" script: categories: @@ -1412,7 +1433,7 @@ _pages: value: "Values" fn: "Functions" text: "Text operations" - convert: "Transformation" + convert: "Transformations" list: "Lists" blocks: text: "Text" @@ -1420,7 +1441,7 @@ _pages: textList: "Text list" _textList: info: "Separate each entry with a line break" - strLen: "Length of the text" + strLen: "Text length" _strLen: arg1: "Text" strPick: "Extract character" @@ -1431,7 +1452,7 @@ _pages: _strReplace: arg1: "Text" arg2: "Text to be replaced" - arg3: "Replaced with" + arg3: "Replace with" strReverse: "Flip text" _strReverse: arg1: "Text" @@ -1443,7 +1464,7 @@ _pages: _add: arg1: "A" arg2: "B" - subtract: "Substract" + subtract: "Subtract" _subtract: arg1: "A" arg2: "B" @@ -1459,7 +1480,7 @@ _pages: _mod: arg1: "A" arg2: "B" - round: "Round decimal" + round: "Decimal rounding" _round: arg1: "Number" eq: "A and B are equal" @@ -1490,15 +1511,15 @@ _pages: _ltEq: arg1: "A" arg2: "B" - gtEq: ">= A is more than or equal to B" + gtEq: ">= A is greater than or equal to B" _gtEq: arg1: "A" arg2: "B" if: "Branch" _if: arg1: "If" - arg2: "If true" - arg3: "If false" + arg2: "Then" + arg3: "Else" not: "NOT" _not: arg1: "NOT" @@ -1511,15 +1532,15 @@ _pages: arg2: "Maximum value" randomPick: "Randomly choose from list" _randomPick: - arg1: "Lists" - dailyRandom: "Random (lasts for a day)" + arg1: "List" + dailyRandom: "Random (Changes once a day for each user)" _dailyRandom: arg1: "Probability" - dailyRannum: "Random number (lasts for a day)" + dailyRannum: "Random number (Changes once a day for each user)" _dailyRannum: arg1: "Minimum value" arg2: "Maximum value" - dailyRandomPick: "Randomly choose from list (lasts for a day)" + dailyRandomPick: "Randomly choose from a list (Changes once a day for each user)" _dailyRandomPick: arg1: "Lists" seedRandom: "Random (with seed)" @@ -1534,17 +1555,17 @@ _pages: seedRandomPick: "Randomly choose from list (with seed)" _seedRandomPick: arg1: "Seed" - arg2: "Lists" - DRPWPM: "Randomly choose from weighted list (lasts for a day)" + arg2: "Liste" + DRPWPM: "Randomly choose from weighted list (Changes once a day for each user)" _DRPWPM: arg1: "Text list" pick: "Select from list" _pick: - arg1: "Lists" + arg1: "List" arg2: "Position" listLen: "Get length of list" _listLen: - arg1: "Lists" + arg1: "List" number: "Number" stringToNumber: "Text to number" _stringToNumber: @@ -1555,29 +1576,29 @@ _pages: splitStrByLine: "Split text by line breaks" _splitStrByLine: arg1: "Text" - ref: "Variables" - aiScriptVar: "Variable of AiScript" - fn: "Functions" + ref: "Variable" + aiScriptVar: "AiScript Variable" + fn: "Function" _fn: slots: "Slots" - slots-info: "Separate each slots with a line break" + slots-info: "Separate each slot with a line break" arg1: "Output" - for: "Repeat" + for: "for-Loop" _for: arg1: "Number of times to repeat" arg2: "Action" - typeError: "Slot {slot} accepts \"{expect}\" type, but the provided value is \"{actual}\"!" + typeError: "Slot {slot} accepts values of type \"{expect}\", but the provided value is of type \"{actual}\"!" thereIsEmptySlot: "Slot {slot} is empty!" types: string: "Text" number: "Number" boolean: "Flag" - array: "Lists" + array: "List" stringArray: "Text list" emptySlot: "Empty slot" - enviromentVariables: "Environment variable" - pageVariables: "Page element" - argVariables: "Input slot" + enviromentVariables: "Environment variables" + pageVariables: "Page variables" + argVariables: "Input slots" _relayStatus: requesting: "Pending" accepted: "Accepted" @@ -1587,32 +1608,32 @@ _notification: youGotMention: "{name} mentioned you" youGotReply: "{name} replied to you" youGotQuote: "{name} quoted you" - youRenoted: "{name} renoted you" + youRenoted: "Renote from {name}" youGotPoll: "{name} voted on your poll" - youGotMessagingMessageFromUser: "{name} sent you a message" - youGotMessagingMessageFromGroup: "A message was sent to the {name} group" - youWereFollowed: "Followed you" + youGotMessagingMessageFromUser: "{name} sent you a chat message" + youGotMessagingMessageFromGroup: "A chat message was sent to the {name} group" + youWereFollowed: "followed you" youReceivedFollowRequest: "You've received a follow request" yourFollowRequestAccepted: "Your follow request was accepted" - youWereInvitedToGroup: "Invited to group" + youWereInvitedToGroup: "You've been invited to a group" _types: all: "All" - follow: "Follows" + follow: "New followers" mention: "Mentions" reply: "Replies" renote: "Renotes" quote: "Quotes" reaction: "Reactions" pollVote: "Votes on polls" - receiveFollowRequest: "Follow request received" - followRequestAccepted: "Follow request accepted" - groupInvited: "Invited to groups" - app: "Notifications from apps" + receiveFollowRequest: "Received follow requests" + followRequestAccepted: "Accepted follow requests" + groupInvited: "Group invitations" + app: "Notifications from linked apps" _deck: alwaysShowMainColumn: "Always show main column" columnAlign: "Align columns" columnMargin: "Margin between columns" - columnHeaderHeight: " Column header height" + columnHeaderHeight: "Column header height" addColumn: "Add column" swapLeft: "Swap to left" swapRight: "Swap to right" @@ -1627,6 +1648,6 @@ _deck: notifications: "Notifications" tl: "Timeline" antenna: "Antennas" - list: "Lists" + list: "List" mentions: "Mentions" - direct: "Direct" + direct: "Direct notes" diff --git a/locales/eo-UY.yml b/locales/eo-UY.yml index e87afb4b2b..15575c7538 100644 --- a/locales/eo-UY.yml +++ b/locales/eo-UY.yml @@ -1,19 +1,19 @@ --- _lang_: "Esperanto" -headlineMisskey: "Reto ligiĝas per notoj" -introMisskey: "Bonvenon! Miskejo estas malferma kodaの分散型マイクロブログサービスです。\nBonvolu Krei「noto」、いま起こっていることを共有したり、あなたについて皆に発信しよう📡\n「 reaktigoj 」機能で、皆のnotojに素早く反応を追加することもできます👍\n新しい世界を探検しよう🚀" +headlineMisskey: "Reto ligata per notoj" +introMisskey: "Bonvenon! Misskey estas malfermitkoda malcentraliza mikrobloga servo.\nKreu \"noto\"n por diskonigi tion ke nun okazas, aŭ por dissendu pri vi📡\nPer la funkcio \"reago\" vi ankaŭ povas rapide esprimi vian senton pri ĉies noto👍\nVolu esplori nova mondo🚀" monthAndDay: "{day}-a/{month}" search: "Serĉi" notifications: "Sciigoj" -username: "Uzantonomo" +username: "Uzantnomo" password: "Pasvorto" forgotPassword: "Ĉu vi forgesis pasvorton?" -fetchingAsApObject: "Informpetado de fediverso..." -ok: "Okej" -gotIt: "Mi konprenas!" +fetchingAsApObject: "Informpetado de Fediverso..." +ok: "Akcepteble" +gotIt: "Mi komprenas" cancel: "Nuligi" -enterUsername: "Entajpu uzantonomon" -renotedBy: "Renotigojn faras {user}" +enterUsername: "Entajpu uzantnomon" +renotedBy: "Renoto farita de {user}" noNotes: "Neniu noto!" noNotifications: "Vi ne havas sciigojn." instance: "Ekzemplo" @@ -22,7 +22,8 @@ basicSettings: "Ĝeneralaj agordoj" otherSettings: "Aliaj agordoj" openInWindow: "Malfermi en nova fenestro" profile: "Profilo" -timeline: "Tempolinio" +timeline: "Templinio" +noAccountDescription: "Tiu uzanto ankoraŭ ne skribis biografieton" login: "Ensaluti" loggingIn: "Ensalutado..." logout: "Elsaluti" @@ -42,31 +43,33 @@ unpin: "Depingli" copyContent: "Kopii enhavon" copyLink: "Kopii ligilon" delete: "Forviŝi" -deleteAndEdit: "Forviŝi kaj redakti" -deleteAndEditConfirm: "Ĉu vi certas, ke vi volas forviŝi la noton? La reaktigoj, renotigoj, kaj respondoj ankaŭ forigiĝos." -addToList: "Aldoni al listo" +deleteAndEdit: "Forigi kaj redakti" +deleteAndEditConfirm: "Ĉu vi certas, ke vi volas forigi kaj redakti la noton? Ankaŭ ĉiuj reagoj, renotoj, kaj respondoj al ĝi foriĝos." +addToList: "Aldoni al la listo" sendMessage: "Sendi mesaĝon" -copyUsername: "Kopii uzantonomon" +copyUsername: "Kopii uzantnomon" searchUser: "Serĉi uzanton" reply: "Respondi" -loadMore: "Vidu plu" -showMore: "Vidi plu" -youGotNewFollower: "Vi estas eksekvita." +loadMore: "Vidu pli" +showMore: "Vidi pli" +youGotNewFollower: "sksekvis vin" +receiveFollowRequest: "Peto de sekvado estas ricevita" +followRequestAccepted: "La peto de sekvado akceptita" mention: "Mencioj" -mentions: "Mencioj" -directNotes: "Senperaj notoj" -importAndExport: "Importaĵo / Eksportaĵo" +mentions: "Al vi" +directNotes: "Rektaj notoj" +importAndExport: "Importi/eksporti" import: "Importi" export: "Eksporti" files: "Dosieroj" download: "Elŝuti" -driveFileDeleteConfirm: "Ĉu vi certas ke vi volas forviŝi la dosieron \"{name}\"? La notoj kun la aldonaĵo ankaŭ forviŝiĝos." -unfollowConfirm: "Ĉu vi certas, ke vi volas ne plu sekvi {name}?" +driveFileDeleteConfirm: "Ĉu vi certas, ke vi volas forviŝi la dosieron \"{name}\"? Ankaŭ notoj kiu enhavas ĝin forviŝiĝos." +unfollowConfirm: "Ĉu vi certas, ke vi volas ne plu sekvi {name}'(o)n?" lists: "Listoj" noLists: "Neniu listo" note: "Elsendi noto" notes: "Notoj" -following: "Sekvi" +following: "Sekvatoj" followers: "Sekvantoj" followsYou: "Sekvas vin" createList: "Kreii liston" @@ -76,13 +79,15 @@ retry: "Reprovi" enterListName: "Entajpu nomon de la listo" privacy: "Privateco" follow: "Sekvi" -followRequest: "Peti eksekvi" -followRequests: "Eksekvopetoj" -unfollow: "Ne plu sekvi" -renote: "Renotici" -unrenote: "Forigi renotici" -cantRenote: "Tiu noto estas renototebla." -cantReRenote: "Renotigo ne estas renotigebla." +followRequest: "Peti de sekvado" +followRequests: "Petoj de sekvado" +unfollow: "Malsekvi" +enterEmoji: "Entajpu emoĵion" +renote: "Fari renoton" +unrenote: "Malfari renoton" +renoted: "Renoton fariĝis." +cantRenote: "Tiu noto ne estas renototebla." +cantReRenote: "Oni ne povas fari renoton kiu enhavas renoto." quote: "Citi" pinnedNote: "Pinglita noto" pinned: "Alpingli sur la profilo" @@ -91,7 +96,7 @@ clickToShow: "Klaku por malkaŝu" sensitive: "Enhavo ne estas deca por laborejo (NSFW)" add: "Aldoni" reaction: "Reagoj" -enterFileName: "Entajpu dosiernomon" +enterFileName: "Entajpu nomon de dosiero" mute: "Silentigi" unmute: "Malsilentigi" block: "Bloki" @@ -103,201 +108,548 @@ unblockConfirm: "Ĉu vi certas ke vi volas malbloki la uzanton?" suspendConfirm: "Ĉu vi certas ke vi volas frostigi la uzanton?" unsuspendConfirm: "Ĉu vi certas ke vi volas fandi la uzanton?" selectList: "Elekti liston" -emojiUrl: "Retadreso de la emoĵio" +selectAntenna: "Elekti antenon" +selectWidget: "Elekti enestraĵon" +editWidgets: "Redakti fenestraĵon" +editWidgetsExit: "Fini la redaktadon" +customEmojis: "Personecigitaj emoĵioj" +emoji: "Emoĵio" +emojis: "Emoĵio" +emojiName: "Nomo de emoĵio" +emojiUrl: "URL de la emoĵio" +addEmoji: "Aldoni emoĵion" +settingGuide: "Rekomendaj agordoj" +cacheRemoteFiles: "Havi staplon por transaj dosieroj" flagAsBot: "Tiu uzanto estas roboto" flagAsCat: "Tiu uzanto estas kato" addAccount: "Aldoni konton" -showOnRemote: "Vidi sur la transa ekzemplo" +showOnRemote: "Vidi sur la fora ekzemplo" general: "Ĝenerala" +wallpaper: "Ekranfonoj" +setWallpaper: "Apliki ekranfonon" +removeWallpaper: "Forviŝi ekranfonon. " searchWith: "Serĉi: {q}" youHaveNoLists: "Vi ne havas listojn." -followConfirm: "Ĉu vi certas, ke vi volas sekvi {name}'n?" +followConfirm: "Ĉu vi certas ke vi volas sekvi {name}'(o)n?" selectUser: "Elekti uzanton" annotation: "Komentarioj" -federation: "Fediverso" +federation: "Kunfederaĵo" instances: "Ekzemplo" +perHour: "Po horo" +perDay: "Po tago" blockThisInstance: "Bloki tiu ekzemplo" +version: "Versio" +withNFiles: "{n} dosiero(j)" disk: "Diskilo" -blockedInstances: "Blokitaj ekzemploj" -muteAndBlock: "Silentitaj / Blokitaj" -mutedUsers: "Silentigitaj uzantoj" -blockedUsers: "Blokitaj uzantoj" +instanceInfo: "Informo pri la ekzemplo" +clearCachedFiles: "Malplenigi la staplon" +clearCachedFilesConfirm: "Ĉu vi certas, ke vi volas forviŝi ĉiujn transajn dosierojn en la staplo?" +blockedInstances: "Blokataj ekzemploj" +muteAndBlock: "Silentigatoj kaj blokatoj" +mutedUsers: "Silentigataj uzantoj" +blockedUsers: "Blokataj uzantoj" noUsers: "Sen uzantoj" editProfile: "Redakti profilon" noteDeleteConfirm: "Ĉu vi certas ke vi volas forviŝi la noton?" pinLimitExceeded: "Vi ne plu povas alpingli noton." +processing: "Traktado..." noCustomEmojis: "Neniu emoĵio" -federating: "Konfederado" -blocked: "Blokita" +federating: "Kunfederado" +blocked: "Blokata" +all: "Ĉiuj" subscribing: "Abonita" +publishing: "Dissendado" notResponding: "Alvokato ne disponeblas" -instanceFollowing: "Sekvi ekzemplon" -instanceFollowers: "Sekvantoj de la ekzemplo" +instanceFollowing: "Sekvatoj el la ekzemplo" +instanceFollowers: "Sekvantoj el la ekzemplo" instanceUsers: "Uzantoj de la ekzemplo" changePassword: "Ŝanĝi pasvorton" +security: "Sekureco" currentPassword: "Aktuala pasvorto" newPassword: "Nova pasvorto" newPasswordRetype: "Reentajpu la novan pasvorton" attachFile: "Aldoni dosieron" more: "Plu!" -usernameOrUserId: "Uzantonomo aŭ ID de uzanto" +featured: "Maksimumi" +usernameOrUserId: "Uzantnomo aŭ identigilo de uzanto" noSuchUser: "Neniuj uzantoj trovitaj." -remove: "Forviŝi" +lookup: "Informpeti" +announcements: "Novaĵoj" +imageUrl: "URL de bildo" +remove: "Forigi" removed: "Forviŝis" -removeAreYouSure: "Ĉu vi certas ke vi volas forigi \"{x}\"?" -deleteAreYouSure: "Ĉu vi certas ke vi volas forigi \"{x}\"?" -messaging: "Babilejoj" +removeAreYouSure: "Ĉu vi certas ke vi volas forigi \"{x}\"'(o)n?" +deleteAreYouSure: "Ĉu vi certas ke vi volas forviŝi \"{x}\"'(o)n?" +saved: "Konservita" +messaging: "Retbabili" upload: "Alŝuti" -fromDrive: "De la diskilo" -fromUrl: "De retadreso" -uploadFromUrl: "Aldoni de retadreso" -uploadFromUrlDescription: "Retadreso de la dosiero kiun vi volu alŝuti" -games: "Ludoj sur Miskejo" +fromDrive: "De la disko" +fromUrl: "De URL" +uploadFromUrl: "Alŝuti de URL" +uploadFromUrlDescription: "URL de la dosiero kiun vi volas alŝuti" +explore: "Esplori" +games: "Ludoj sur Misskey" messageRead: "Legita" startMessaging: "Komenci babiladon" -tos: "Kondiĉoj de Uzado" +nUsersRead: "Legita de {n} homoj" +tos: "Kondiĉoj de uzado" start: "Komenciĝi" -home: "Ĉefpaĝo" -drive: "Diskilo" +home: "Hejmo" +remoteUserCaution: "Ĉi tiu Infomoj estas ne tute ekzakta pro distanca uzanto." +activity: "Aktiveco" +images: "Bildoj" +birthday: "Naskiĝdato" +registeredDate: "Registriĝdato" +location: "Loko" +theme: "Koloraro" +light: "Luma" +dark: "Malluma" +drive: "Disko" fileName: "Dosiernomo" selectFile: "Elekti dosieron" selectFiles: "Elekti dosieron" -renameFile: "Renomigi dosieron" +selectFolder: "Elekti dosierujon" +selectFolders: "Elekti dosierujon" +renameFile: "Alinomi la dosieron" +folderName: "Nomo de la dosierujo" +createFolder: "Krei dosierujon" +renameFolder: "Alinomi la dosierujon" deleteFolder: "Forviŝi dosierujon" addFile: "Aldoni dosieron" -emptyDrive: "La diskilo enhavas neniun." +emptyDrive: "La disko malplenas" +emptyFolder: "La dosierujo malplenas" unableToDelete: "Ne forigebla" -inputNewFileName: "Entajpu nova dosiernomon" -hasChildFilesOrFolders: "La dosierujo estas neforviŝebla pro tio, ke ĝi enhavas dosieron." -copyUrl: "Kopii retadreson" +inputNewFileName: "Entajpu nova nomon de la dosiero" +inputNewFolderName: "Entajpu nova nomon de la dosierujo" +hasChildFilesOrFolders: "La dosierujo ne estas forviŝebla, ĉar ĝi ne malplenas." +copyUrl: "Kopii URL" +rename: "Alinomi" +avatar: "Ikono" +banner: "Standardo" nsfw: "Enhavo ne estas deca por laborejo (NSFW)" +reload: "Reŝargi" +watch: "Observi" +unwatch: "Malobservi" +accept: "Permesi" +normal: "Normala" instanceName: "Nomo de la ekzemplo" +maintainerName: "Nomo de la administranto" +maintainerEmail: "Retpoŝto de la administranto" +tosUrl: "URL de kondiĉoj de uzado" +thisYear: "Ĉi-jare" +thisMonth: "Ĉi-monate" +today: "Hodiaŭ" +dayX: "{day}-a" +monthX: "{month}" +yearX: "La jaro {year}" +pages: "Paĝoj" connectService: "Konekti" disconnectService: "Farkonektiĝi" -driveCapacityPerLocalAccount: "Volumo po unu loka-uzanto" -driveCapacityPerRemoteAccount: "Volumo po unu transa uzanto" +enableGlobalTimeline: "Ebligi mallokan templinion" +registration: "Registri" +driveCapacityPerLocalAccount: "Volumo de disko po unu loka uzanto" +driveCapacityPerRemoteAccount: "Volumo de disko po unu transa uzanto" +iconUrl: "URL de la ikono (retpaĝsimbolo, ktp)" +bannerUrl: "URL de standardo" +backgroundImageUrl: "URL de fona bildo" +basicInfo: "Baza informo" pinnedUsers: "Alpinglita uzanto" +pinnedPages: "Alpinglitaj paĝoj" pinnedNotes: "Pinglita noto" +antennas: "Antenoj" +name: "Nomo" withFileAntenna: "Nur kun aldonaĵo" +withReplies: "Inkluzive respondoj" notesAndReplies: "Kun respondoj" withFiles: "Kun aldonaĵo" -silenceConfirm: "Ĉu vi certas ke vi volas silentigi la uzanton?" -unsilenceConfirm: "Ĉu vi certas ke vi volas malsilentigi la uzanton?" +silence: "Mutigi" +silenceConfirm: "Ĉu vi certas ke vi volas mutigi la uzanton?" +unsilence: "Malmutigi" +unsilenceConfirm: "Ĉu vi certas ke vi volas malmutigi la uzanton?" +recentlyUpdatedUsers: "Uzantoj kiu lastatempe faris noton" +recentlyRegisteredUsers: "Nove aniĝintaj uzantoj" +popularTags: "Popularaj kradvortoj" userList: "Listoj" -aboutMisskey: "Pri Miskejo" +about: "Informoj" +aboutMisskey: "Pri Misskey" +administrator: "Administranto" +moderator: "Moderigisto" +securityKey: "Sekureca ŝlosilo" +securityKeyName: "Nomo de la ŝlosilo" +lastUsed: "Plej malnove uzita" passwordLessLogin: "Ensaluti sen pasvorto" resetPassword: "Restarigi pasvorton" newPasswordIs: "La nova pasvorto estas {password}." +share: "Diskonigi" +notFound: "Ne trovita" +cacheClear: "Malplenigi staplon" +help: "Manlibro de uzado" inputMessageHere: "Entajpu masaĝo tie ĉi" +close: "Fermi" +group: "Grupo" +groups: "Grupoj" +createGroup: "Krei grupon" +groupName: "Grupa nomo" +members: "Membroj" +messagingWithUser: "Mesaĝado kun uzanto" +messagingWithGroup: "Mesaĝado kun grupo" +title: "Titolo" +text: "Teksto" +enable: "Ebligi" +next: "Sekve" noteOf: "Noto de {user}" +noMessagesYet: "Neniu mesaĝo" newMessageExists: "Vi ricevis novan mesaĝon." onlyOneFileCanBeAttached: "Vi povas aldoni nur unu dosieron po unu mesaĝo." -uiLanguage: "Lingvo de la interfaco" -noFollowRequests: "Vi ne havas eksekvopetojn." +invitationCode: "Kodo de invito" +or: "Aŭ" +language: "Lingvo" +uiLanguage: "Lingvo de la fasado" +aboutX: "Pri {x}" +useOsNativeEmojis: "Oni uzas la emoĵioj de la denaska sistemo" +youHaveNoGroups: "Neniuj grupoj" +category: "Kategorio" +tags: "Etikedoj" +createAccount: "Krei konton" +existingAccount: "Ekzista konto" +fontSize: "Tipara grando" +noFollowRequests: "Vi ne havas peto de sekvado" +openImageInNewTab: "Fermi la bildon en nova tablo" +dashboard: "Stirpanelo" local: "Loka" remote: "Transa" +total: "Entute" +clientSettings: "Agordoj de kliento" +accountSettings: "Agordoj de Konto" +numberOfDays: "Nombro de tagoj" hideThisNote: "Kaŝi tiun noton" -deleteAllFiles: "Forvisi ĉiujn dosierojn" +objectStorageBaseUrl: "Baza URL" +objectStorageRegion: "Regiono" +objectStorageUseSSL: "Oni uzas SSL" +serverLogs: "Servila protokolo" +deleteAll: "Forviŝi ĉiujn" +sounds: "Sonoj" +listen: "Aŭdi" +none: "Neniu" +showInPage: "Vidi en paĝo" +deleteAllFiles: "Forviŝi ĉiujn dosierojn" deleteAllFilesConfirm: "Ĉu vi certas, ke vi volas forviŝi ĉiujn viajn dosierojn?" +userSilenced: "Tiu uzanto estas mutigata." +menu: "Menuo" +deletedNote: "Forviŝita noto" invisibleNote: "Malpublika noto" +poll: "Balotujo" +useCw: "Kaŝi enhavo" +themeEditor: "Redaktilo de koloraroj" +author: "Aŭtoro" +plugins: "Kromaĵoj" +deck: "Kartaro" +medium: "Meza" +small: "Malgranda" +edit: "Redakti" emailServer: "Retpoŝta servilo" email: "Retpoŝto" -emailAddress: "Retpoŝtadreso" -smtpUser: "Uzantonomo" +emailAddress: "Retpoŝta adreso" +smtpConfig: "Agordoj de la servilo SMTP" +smtpUser: "Uzantnomo" smtpPass: "Pasvorto" +wordMute: "Silentigo de vortoj" userSaysSomething: "{name} parolis ion" +display: "Vidi" +copy: "Kopii" database: "Datumbazo" channel: "Kanalo" -fileIdOrUrl: "Dosirero ID aŭ retadreso" +create: "Krei" +notificationSetting: "Agordoj de sciigoj" +useGlobalSetting: "Oni uzas malloka agordo" +fileIdOrUrl: "Dosiera identigilo aŭ URL" +abuseReports: "Signali" +reportAbuse: "Signali" +reportAbuseOf: "Signali {name}'(o)n" send: "Sendi" -i18nInfo: "Tradukojn de Misskey en diversaj lingvoj faras volontuloj. Vi povus kunlabori en tradukado sur {link}, se vi volus." -driveFilesCount: "Numero de dosieroj en la diskilo" -onlineUsersCount: "{n} uzanto(j) estas surkonektita" +openInNewTab: "Malfermi en nova langeto" +editTheseSettingsMayBreakAccount: "Redakti tiujn agordojn estas eble damaĝi konton." +public: "Publika" +i18nInfo: "Misskey estas tradukata en diversaj lingvoj far volontuloj. Oni povas kontribui por la tradukado ĉe {link}." +accountInfo: "Kontaj Informoj" +notesCount: "Numero de notoj" +repliesCount: "Numero de respondoj senditaj" +renotesCount: "Numero de renotoj kiun vi sendis" +repliedCount: "Numero de respondoj ricevitaj" +renotedCount: "Numero de renotoj kiun vi ricevis" +followingCount: "Numero de sekvatoj" +followersCount: "Numero de sekvantoj" +sentReactionsCount: "Numero de sentitaj reagoj" +receivedReactionsCount: "Numero de ricevitaj reagoj" +yes: "Jes" +no: "Ne" +driveFilesCount: "Numero de dosieroj sur la disko" +notSet: "Ne elektita" +noteFavoritesCount: "Numero de la preferataj notoj" +contact: "Kontakto" +makeExplorable: "Videbligi konton sur la paĝo \"Esplori\"" +duplicate: "Duobligi" +left: "Maldekstra" +center: "Centra" +showTitlebar: "Montri titola stango" +clearCache: "Malplenigi staplon" +onlineUsersCount: "{n} uzanto(j) estas surlinea" nUsers: "{n} uzanto(j)" +nNotes: "{n} notoj" +myTheme: "Miaj koloraroj" +backgroundColor: "Fona koloro" +textColor: "Teksto" +saveAs: "Konservi kiel…" +value: "Valoro" +createdAt: "Kreita je" +updatedAt: "Laste ĝisdatigita" +deleteConfirm: "Ĉu certas forviŝi?" +closeAccount: "Forigi konton" +currentVersion: "Nuna versio" +latestVersion: "Plej nova versio" +youAreRunningUpToDateClient: "Vi uzas la plej novan version de via kliento." +newVersionOfClientAvailable: "Nova versio de via kliento estas disponebla." +inUse: "Uzata" +editCode: "Redakti kodon" emailNotification: "Sciigoj per retpoŝto" publish: "Publikigi" inChannelSearch: "Serĉi en kanalo" +useReactionPickerForContextMenu: "Oni malfermas reago-elektilon per dekstro-kliki" typingUsers: "{users} estas entajpanta(j)..." +info: "Informoj" +unknown: "Nekonata" online: "Surkonektita" offline: "Forkonektita" -instanceBlocking: "Ekzempla blokado" +instanceBlocking: "Blokado de ekzemplo" +selectAccount: "Elekti konton" user: "Uzanto" +accounts: "Kontoj" +high: "Alta" +middle: "Meza" +low: "Malalta" +customCss: "Uzantula CSS" +global: "Malloka" +sent: "Sendi" +received: "Ricevita" +searchResult: "Serĉorezultoj" +hashtags: "Kradvorto" +learnMore: "Lernu pli" +translate: "Traduki" +translatedFrom: "Tradukita el {x}" +_docs: + continueReading: "Legi plu" + features: "Funkcioj" _gallery: liked: "Ŝatitaj notoj" + like: "Ŝati" _email: _follow: - title: "Vi estas eksekvita." + title: "Vi estas eksekvita" _receiveFollowRequest: - title: "Vi ricevis eksekvopeton." + title: "Vi ricevis peton de sekvado" +_registry: + key: "Ŝlosilo" + keys: "Ŝlosiloj" + domain: "Nomregno" + createKey: "Krei ŝlosilon" _aboutMisskey: - about: "Misskey estas malferma koda programo evoluigata far syuilo ekde la 2014." + about: "Misskey estas malfermitkoda programo evoluigata de syuilo ekde la 2014." + contributors: "Precipaj kontribuantoj" + allContributors: "Ĉiuj kontribuintoj" source: "Fontkodo" translation: "Traduki Misskey'on" + patrons: "Mecenatoj" _mfm: mention: "Mencioj" - url: "Retadreso" - blockCode: "Kodo (Ujo)" - blockMath: "Formulo (Ujo)" + hashtag: "Kradvorto" + url: "URL" + link: "Ligilo" + bold: "Grasa" + small: "Malgrande" + center: "Centrigi" + inlineCode: "Kodo (en linio)" + blockCode: "Kodo (bloko)" + inlineMath: "Formulo (en linio)" + blockMath: "Formulo (bloko)" quote: "Citi" + emoji: "Personecigitaj emoĵioj" search: "Serĉi" + flip: "Inversa" + x2: "Granda" + x3: "Grandega" + x4: "Pli grandega" +_reversi: + total: "Entute" _instanceTicker: none: "Ne montri" remote: "Montri al transaj uzantoj" + always: "Ĉiam montri" _channel: create: "Krei kanalon" edit: "Redakti kanalon" - following: "Sekvaton" + following: "Sekvante" + usersCount: "{n} partoprenanto(j)" +_menuDisplay: + hide: "Kaŝi" +_wordMute: + muteWords: "Kaŝigitaj vortoj" + mutedNotes: "Silentigataj notoj" _theme: + code: "Kodo de koloraro" + darken: "Malbrileco" + lighten: "Brileco" keys: + bg: "Fono" + navBg: "Fono de flanka stango" + hashtag: "Kradvorto" mention: "Mencioj" - renote: "Renotici" + renote: "Fari renoton" + buttonBg: "Fono de butono" + driveFolderBg: "Fono de dosierujo de la disko" _sfx: note: "Nova noto" + noteMy: "Mia noto" notification: "Sciigoj" - chat: "Babilejoj" - channel: "Kanala sciigoj" + chat: "Retbabili" + chatBg: "Retbabili (BG)" + antenna: "Ricevo de anteno" + channel: "Sciigoj de kanalo" +_ago: + future: "Futuro" + justNow: "Ĵus" + secondsAgo: "Antaŭ {n} sekundoj" + minutesAgo: "Antaŭ {n} minutoj" + hoursAgo: "Antaŭ {n} horo(j)" + daysAgo: "Antaŭ {n} tagoj" + weeksAgo: "Antaŭ {n} semajnoj" + monthsAgo: "Antaŭ {n} monatoj" + yearsAgo: "Antaŭ {n} jaroj" +_time: + second: "sek" + minute: "min" + hour: "hor" + day: "Tago" _tutorial: - title: "Uzado de Miskejo" + title: "Uzado de Misskey" + step1_1: "Bonvenon." + step7_2: "Se vi volas scii pli pri Misskey, rigardu la fakon {help}." + step7_3: "Do, bonvolu amuziĝi Misskey'on🚀" _permissions: - "read:blocks": "Vidi la listo de la uzantoj kiun vi blokis." - "read:drive": "Vidi dosierojn en la diskilo" - "read:channels": "Legi kanalon" + "read:blocks": "Vidi la liston de uzantoj kiun vi blokas" + "write:blocks": "Redakti vian liston de blokataj uzantoj" + "read:drive": "Operacio por legi la informon de dosiero en via disko de Misskey" + "write:drive": "Ĉia operacio por skribi, forviŝi, aŭ alimaniere ŝanĝi la informon de dosiero en via disko de Misskey" + "read:favorites": "Vidi vian liston de preferatoj" + "read:following": "Vidi tiun kiun vi sekvas" + "write:following": "Sekvi aŭ malsekvi alian uzanton" + "read:messaging": "Vidi vian retbabiladon" + "read:mutes": "Vidi vian liston de silentigoj" + "write:mutes": "Redakti vian liston de silentigoj" + "write:notes": "Krei / Forviŝi noton" + "read:notifications": "Vidi sciigojn" + "read:reactions": "Vidi reagojn" + "write:reactions": "Redakti viajn reagojn" + "read:pages": "Vidi via paĝojn" + "read:page-likes": "Vidi ŝatojn de paĝo" + "read:channels": "Vidi kanalojn" +_antennaSources: + all: "Ĉiuj notoj" + homeTimeline: "Notoj far uzantoj, kiujn vi sekvas" +_weekday: + sunday: "dimanĉo" + monday: "lundo" + tuesday: "mardo" + wednesday: "merkredo" + thursday: "ĵaŭdo" + friday: "vendredo" + saturday: "sabato" _widgets: notifications: "Sciigoj" - timeline: "Tempolinio" - federation: "Fediverso" + timeline: "Templinio" + clock: "Horloĝo" + activity: "Aktiveco" + federation: "Kunfederaĵo" + slideshow: "Bildoprezento" + button: "Butono" onlineUsers: "Surkonektita uzanto" _cw: - show: "Vidu plu" + show: "Vidu pli" files: "{count} dosiero(j)" +_poll: + choiceN: "Balotilo {n}" + noMore: "Oni ne povas aldoni pli." + infinite: "Neniam" + deadlineTime: "hor" + votesCount: "{n} balotiloj" + vote: "Baloti" + closed: "Oni jam balotis ĝin" _visibility: - publicDescription: "Via noto aperiĝos sur konfederacia tempolinio" - home: "Ĉefpaĝo" - homeDescription: "Elsendi nur sur hejma tempolinio" + publicDescription: "Via noto aperiĝos sur la konfederacia templinio" + home: "Hejmo" + homeDescription: "Elsendi nur sur la hejmtemplinio" followers: "Sekvantoj" - followersDescription: "Elsendi nur al sekvantoj de mi" + followersDescription: "Nur al sekvantoj al mi" localOnly: "Nur loka" - localOnlyDescription: "Nelegabla al transaj uzantoj" + localOnlyDescription: "Ne montri al transaj uzantoj" _postForm: - channelPlaceholder: "Elsendi sur la kanalo" + replyPlaceholder: "Respondi al tiu noto..." + quotePlaceholder: "Citado tiun noton..." + channelPlaceholder: "Sendi sur la kanalo" _profile: - username: "Uzantonomo" + name: "Nomo" + username: "Uzantnomo" + metadataEdit: "Redakti kromaj informoj" + changeAvatar: "Ŝanĝi profilbildon" + changeBanner: "Ŝanĝi standardon" _exportOrImport: - followingList: "Sekvi" - muteList: "Silentigi" + allNotes: "Ĉiuj notoj" + followingList: "Sekvataj" + muteList: "Silentigoj" blockingList: "Blokado" userLists: "Listoj" +_charts: + federationInstancesTotal: "Tuta numero de kunfederantaj ekzemploj" + filesTotal: "Tuta numero de dosieroj" _timelines: home: "Hejmo" local: "Loka" - social: "Hejmo kaj loka" + social: "Sociala" + global: "Malloka" _rooms: + translate: "Movi" + chooseImage: "Elekti bildon" _furnitures: server: "Servilo" + moon: "La luno" _pages: + editPage: "Redakti paĝon" + deleted: "La paĝo estas forigita." + editThisPage: "Redakti la paĝon" + viewPage: "Vidi via paĝojn" + my: "Miaj paĝoj" + featured: "Ravaĵoj" content: "Blokado de paĝo" - url: "Retadreso de la paĝo" - chooseBlock: "Aldoni blokado" + url: "URL de paĝo" + alignCenter: "Centrigi" + chooseBlock: "Aldoni blokon" + blocks: + image: "Bildo" + button: "Butono" + _post: + canvasId: "Kanvasa identigilo" + _numberInput: + text: "Titolo" + _canvas: + id: "Kanvasa identigilo" + _note: + id: "Identigilo de noto" + _counter: + text: "Titolo" + _button: + text: "Titolo" + _action: + _pushEvent: + event: "Nomo de la evento" script: categories: list: "Listoj" @@ -317,21 +669,28 @@ _pages: arg1: "Listoj" types: array: "Listoj" + stringArray: "List de teksto" _notification: fileUploaded: "La dosiero sukcese alŝutiĝis." - youWereFollowed: "Vi estas eksekvita." - youReceivedFollowRequest: "Vi ricevis eksekvopeton." - yourFollowRequestAccepted: "Via eksekvopeto estas akceptita." + youGotPoll: "{name} balotis" + youGotMessagingMessageFromUser: "{name} sentis mesaĝon al vi." + youGotMessagingMessageFromGroup: "Retbabilan mesaĝon oni sendis al la grupo {name}" + youWereFollowed: "sksekvis vin" + youReceivedFollowRequest: "Vi ricevis peton de sekvado" + yourFollowRequestAccepted: "Via peto por eksekvu estas akceptita." _types: - follow: "Sekvi" + follow: "Sekvatoj" mention: "Mencioj" - renote: "Renotici" + renote: "Fari renoton" quote: "Citi" reaction: "Reagoj" - receiveFollowRequest: "Eksekvopeto ricevita" + receiveFollowRequest: "Ricevita peton de sekvado" + followRequestAccepted: "Peto por eksekvu akceptita" _deck: + profile: "Agordaro" _columns: notifications: "Sciigoj" - tl: "Tempolinio" + tl: "Templinio" + antenna: "Antenoj" list: "Listoj" - mentions: "Mencioj" + mentions: "Al vi" diff --git a/locales/es-ES.yml b/locales/es-ES.yml index 81baa9b37f..0defcabd0e 100644 --- a/locales/es-ES.yml +++ b/locales/es-ES.yml @@ -127,6 +127,7 @@ editWidgets: "Editar widgets" editWidgetsExit: "Terminar edición" customEmojis: "Emojis personalizados" emoji: "Emoji" +emojis: "Emoji" emojiName: "Nombre del emoji" emojiUrl: "URL de la imágen del emoji" addEmoji: "Agregar emoji" @@ -665,6 +666,10 @@ administration: "Administrar" expiration: "Termina el" middle: "Mediano" global: "Global" +sent: "Enviar" +hashtags: "Hashtag" +_docs: + admin: "Administrar" _ad: back: "Deseleccionar" _gallery: diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index 1ebe492b8f..9b77a750e4 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -91,11 +91,11 @@ followRequests: "Demandes d’abonnement" unfollow: "Se désabonner" followRequestPending: "Demande d'abonnement en attente de confirmation" enterEmoji: "Insérer un émoji" -renote: "Partager" -unrenote: "Annuler le partage" -renoted: "Republié !" -cantRenote: "Ce message ne peut pas être republié." -cantReRenote: "Impossible de repartager un partage." +renote: "Renoter" +unrenote: "Annuler la Renote" +renoted: "Renoté !" +cantRenote: "Ce message ne peut pas être renoté." +cantReRenote: "Impossible de renoter une Renote." quote: "Citer" pinnedNote: "Note épinglée" pinned: "Épingler sur le profil" @@ -128,6 +128,7 @@ editWidgets: "Modifier les widgets" editWidgetsExit: "Valider les modifications" customEmojis: "Émojis personnalisés" emoji: "Émoji" +emojis: "Émoji" emojiName: "Nom de l’émoji" emojiUrl: "URL de l’émoji" addEmoji: "Ajouter un émoji" @@ -528,6 +529,7 @@ removeAllFollowing: "Retenir tous les abonnements" removeAllFollowingDescription: "Se désabonner de tous les comptes de {host}. Veuillez lancer cette action uniquement si l’instance n’existe plus." userSuspended: "Cet·te utilisateur·rice a été suspendu·e." userSilenced: "Cette utilisateur·trice a été mis·e en sourdine." +menu: "Menu" divider: "Séparateur" addItem: "Ajouter un élément" rooms: "Chambre" @@ -636,9 +638,9 @@ manageAccessTokens: "Gérer les jetons d'accès" accountInfo: " Informations du compte " notesCount: "Nombre de notes" repliesCount: "Nombre de réponses envoyées" -renotesCount: "Nombre de notes repartagées" +renotesCount: "Nombre de notes que vous avez renotées" repliedCount: "Nombre de réponses reçues" -renotedCount: "Nombre de Renotes" +renotedCount: "Nombre de vos notes renotées" followingCount: "Nombre de comptes suivis" followersCount: "Nombre d'abonnés" sentReactionsCount: "Nombre de réactions envoyées" @@ -760,7 +762,27 @@ middle: "Moyen" low: "Basse" emailNotConfiguredWarning: "Vous n'avez pas configuré d'adresse e-mail." ratio: "Ratio" +customCss: "CSS personnalisé" +customCssWarn: "Utilisez cette fonctionnalité uniquement si vous savez exactement ce que vous faites. Une configuration inadaptée peut empêcher le client de s'exécuter normalement." global: "Global" +squareAvatars: "Avatars carrés" +sent: "Envoyer" +searchResult: "Résultats de la recherche" +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 !" +whatIsNew: "Voir les derniers changements" +translate: "Traduire" +translatedFrom: "Traduit depuis {x}" +_docs: + continueReading: "Lire plus" + features: "Fonctionnalités" + generalTopics: "Sujets généraux" + advancedTopics: "Sujets avancés" + admin: "Gestion" + translateWarn: "Ceci est une traduction dont le contenu peut différer du texte original." _ad: back: "Retour" reduceFrequencyOfThisAd: "Voir cette publicité moins souvent" @@ -859,6 +881,8 @@ _mfm: blurDescription: "Le contenu peut être flouté ; il sera visible en le survolant avec le curseur." font: "Police de caractères" fontDescription: "Il est possible de choisir la police." + rainbow: "Arc-en-ciel" + rainbowDescription: "Permet d'afficher le contenu en couleurs arc-en-ciel." _reversi: reversi: "Reversi" gameSettings: "Réglages de la partie" @@ -911,6 +935,9 @@ _channel: usersCount: "{n} Participant·e·s" notesCount: "{n} Notes" _menuDisplay: + sideFull: "Latéral" + sideIcon: "Latéral (icônes)" + top: "Haut de page" hide: "Masquer" _wordMute: muteWords: "Mots à filtrer" @@ -969,7 +996,7 @@ _theme: hashtag: "Hashtags" mention: "Mentionner" mentionMe: "Mentions (Moi)" - renote: "Partager" + renote: "Renoter" modalBg: "Modal d'arrière-plan" divider: "Séparateur" scrollbarHandle: "Poignée de la barre de navigation" @@ -1590,11 +1617,11 @@ _notification: youWereInvitedToGroup: "Invité·e au groupe" _types: all: "Toutes" - follow: "Abonnements" + follow: "Nouvel·le abonné·e" mention: "Mentions" reply: "Réponses" - renote: "Partager" - quote: "Citer" + renote: "Renotes" + quote: "Citations" reaction: "Réactions" pollVote: "Votes dans des sondages" receiveFollowRequest: "Demande d'abonnement reçue" diff --git a/locales/id-ID.yml b/locales/id-ID.yml index 7b5cd6b869..236bd01ac3 100644 --- a/locales/id-ID.yml +++ b/locales/id-ID.yml @@ -128,6 +128,7 @@ editWidgets: "Sunting gawit" editWidgetsExit: "Selesai" customEmojis: "Emoji kustom" emoji: "Emoji" +emojis: "Emoji" emojiName: "Nama emoji" emojiUrl: "URL Emoji" addEmoji: "Tambahkan emoji" @@ -528,6 +529,7 @@ removeAllFollowing: "Tahan semua mengikuti" removeAllFollowingDescription: "Batal mengikuti semua akun dari {host}. Mohon jalankan ini ketika instansi sudah tidak ada lagi." userSuspended: "Pengguna ini telah dibekukan." userSilenced: "Pengguna ini telah dibungkam." +menu: "Menu" divider: "Pembagi" addItem: "Tambahkan item" rooms: "Ruang" @@ -760,7 +762,26 @@ middle: "Sedang" low: "Rendah" emailNotConfiguredWarning: "Alamat surel tidak disetel." ratio: "Rasio" +customCss: "Custom CSS" +customCssWarn: "Pengaturan ini seharusnya digunakan jika kamu tahu cara kerjanya. Memasukkan nilai yang tidak tepat dapat menyebabkan klien tidak berfungsi semestinya." global: "Global" +squareAvatars: "Tampilkan avatar sebagai persegi" +sent: "Kirim" +received: "Diterima" +searchResult: "Hasil Penelusuran" +hashtags: "Tagar" +troubleshooting: "Penyelesaian Masalah" +useBlurEffect: "Gunakan efek blur pada antarmuka" +learnMore: "Pelajari lebih lanjut" +misskeyUpdated: "Misskey telah dimutakhirkan!" +whatIsNew: "Lihat perubahan pemutakhiran" +_docs: + continueReading: "Baca lebih lanjut" + features: "Fitur" + generalTopics: "Topik umum" + advancedTopics: "Topik tingkat lanjut" + admin: "Manajemen" + translateWarn: "Ini merupakan dokumen terjemahan. Konten di dalamnya kemungkinan dapat berbeda dari yang aslinya." _ad: back: "Kembali" reduceFrequencyOfThisAd: "Tampilkan iklan ini lebih sedikit" @@ -859,6 +880,8 @@ _mfm: blurDescription: "Konten dapat diburamkan dengan efek ini. Konten dapat ditampilkan dengan jelas dengan melayangkan kursor tetikus di atasnya." font: "Font" fontDescription: "Setel font yang ditampilkan untuk konten." + rainbow: "Pelangi" + rainbowDescription: "Membuat konten muncul dalam warna pelangi." _reversi: reversi: "Reversi" gameSettings: "Pengaturan permainan" @@ -911,6 +934,9 @@ _channel: usersCount: "{n} Partisipan" notesCount: "terdapat {n} catatan" _menuDisplay: + sideFull: "Horisontal" + sideIcon: "Horisontal (Ikon)" + top: "Atas" hide: "Sembunyikan" _wordMute: muteWords: "Kata yang dibisukan" diff --git a/locales/it-IT.yml b/locales/it-IT.yml index 0ac8ccfba5..f291eaa17f 100644 --- a/locales/it-IT.yml +++ b/locales/it-IT.yml @@ -127,6 +127,7 @@ editWidgets: "Modifica i widget" editWidgetsExit: "Modifica fine" customEmojis: "Emoji personalizzati" emoji: "Emoji" +emojis: "Emoji" emojiName: "Nome dell'emoji" emojiUrl: "URL dell'emoji" addEmoji: "Aggiungi un emoji" @@ -741,6 +742,13 @@ low: "Bassa" emailNotConfiguredWarning: "Non hai impostato nessun indirizzo e-mail." ratio: "Rapporto" global: "Federata" +sent: "Inviare" +hashtags: "Hashtag" +troubleshooting: "Risoluzione problemi" +_docs: + continueReading: "Leggi di più" + features: "Funzionalità" + admin: "Gestione" _ad: back: "Indietro" reduceFrequencyOfThisAd: "Visualizza questa pubblicità meno spesso" @@ -799,6 +807,7 @@ _mfm: blur: "Sfocatura" font: "Tipo di carattere" fontDescription: "Puoi scegliere il tipo di carattere per il contenuto." + rainbow: "Arcobaleno" _reversi: reversi: "Reversi" gameSettings: "Impostazioni di gioco" @@ -1386,12 +1395,12 @@ _notification: youWereInvitedToGroup: "Invitat@ al gruppo" _types: all: "Tutto" - follow: "Follows" + follow: "Nuovə follower" mention: "Menzioni" - reply: "Rispondi" + reply: "Risposte" renote: "Rinota" quote: "Cita" - reaction: "Reazione" + reaction: "Reazioni" pollVote: "Voti ricevuti" receiveFollowRequest: "Richiesta di follow ricevuta" followRequestAccepted: "Richiesta di follow accettata" diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 406828e3ca..7499523b08 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -128,6 +128,7 @@ editWidgets: "ウィジェットを編集" editWidgetsExit: "編集を終了" customEmojis: "カスタム絵文字" emoji: "絵文字" +emojis: "絵文字" emojiName: "絵文字名" emojiUrl: "絵文字画像URL" addEmoji: "絵文字を追加" @@ -765,6 +766,25 @@ customCss: "カスタムCSS" customCssWarn: "この設定は必ず知識のある方が行ってください。不適切な設定を行うとクライアントが正常に使用できなくなる恐れがあります。" global: "グローバル" squareAvatars: "アイコンを四角形で表示" +sent: "送信" +received: "受信" +searchResult: "検索結果" +hashtags: "ハッシュタグ" +troubleshooting: "トラブルシューティング" +useBlurEffect: "UIにぼかし効果を使用" +learnMore: "詳しく" +misskeyUpdated: "Misskeyが更新されました!" +whatIsNew: "更新情報を見る" +translate: "翻訳" +translatedFrom: "{x}から翻訳" + +_docs: + continueReading: "続きを読む" + features: "機能" + generalTopics: "一般的なトピック" + advancedTopics: "高度なトピック" + admin: "管理" + translateWarn: "このドキュメントは翻訳されたものです。オリジナルとは内容が異なる場合があります。" _ad: back: "戻る" @@ -872,6 +892,8 @@ _mfm: blurDescription: "内容をぼかすことができます。ポインターを上に乗せるとはっきり見えるようになります。" font: "フォント" fontDescription: "内容のフォントを指定することができます。" + rainbow: "レインボー" + rainbowDescription: "内容をレインボーにします。" _reversi: reversi: "リバーシ" diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml index ef951adce6..e230594acb 100644 --- a/locales/ja-KS.yml +++ b/locales/ja-KS.yml @@ -7,6 +7,7 @@ search: "探す" notifications: "通知" username: "ユーザー名" password: "パスワード" +forgotPassword: "パスワード忘れてん" fetchingAsApObject: "今ちと連合に照会しとるで" ok: "OKや" gotIt: "ほい" @@ -127,6 +128,7 @@ editWidgets: "ウィジェットをいじる" editWidgetsExit: "編集終ったで" customEmojis: "カスタム絵文字" emoji: "絵文字" +emojis: "絵文字" emojiName: "絵文字名" emojiUrl: "絵文字画像URL" addEmoji: "絵文字を追加" @@ -138,6 +140,7 @@ flagAsBotDescription: "もしこのアカウントがプログラムによって flagAsCat: "Catやで" flagAsCatDescription: "ワレ、猫ちゃんならこのフラグをつけてみ?" autoAcceptFollowed: "フォローしとるユーザーからのフォローリクエストを勝手に許可しとく" +addAccount: "アカウントを追加" loginFailed: "ログインに失敗してしもうた…" showOnRemote: "リモートで見る" general: "全般" @@ -277,6 +280,7 @@ emptyDrive: "ドライブにはなんも残っとらん" emptyFolder: "ふぉろだーにはなんも残っとらん" unableToDelete: "消そうおもってんけどな、あかんかったわ" inputNewFileName: "今度のファイル名は何にするん?" +inputNewDescription: "新しいキャプションを入力しましょ" inputNewFolderName: "今度のフォルダ名は何にするん?" circularReferenceFolder: "移動先のフォルダーは、移動するフォルダーのサブフォルダーや。" hasChildFilesOrFolders: "このフォルダ、まだなんか入っとるから消されへん" @@ -647,6 +651,10 @@ high: "高い" middle: "中" low: "低い" global: "グローバル" +sent: "送信" +hashtags: "ハッシュタグ" +_docs: + admin: "管理" _ad: back: "戻る" _gallery: diff --git a/locales/kab-KAB.yml b/locales/kab-KAB.yml index e96f5b366f..199e4cc135 100644 --- a/locales/kab-KAB.yml +++ b/locales/kab-KAB.yml @@ -7,7 +7,9 @@ username: "Isem n umseqdac" password: "Awal uffir" ok: "IH" settings: "Iɣewwaṛen" +otherSettings: "Iɣewwaren nniḍen" profile: "Amaɣnu" +signup: "Jerred" save: "Sekles" delete: "Kkes" addToList: "Rnu ɣer tebdart" @@ -27,15 +29,31 @@ followers: "Imeḍfaṛen" followsYou: "Yeṭṭafaṛ-ik·em-id" createList: "Snulfu-d tabdart" enterListName: "Isem n tebdart" +privacy: "Tabaḍnit" follow: "Ḍfeṛ" you: "Kečči·mmi" selectList: "Fren tabdart" youHaveNoLists: "Ulac ɣur-k·m ula d yiwet n tabdart" +security: "Taɣellist" remove: "Kkes" userList: "Tibdarin" +securityKey: "Tasarutt n tɣellist" +securityKeyName: "Isem n tsarutt" +signinRequired: "Ttxil jerred" +signinWith: "Tuqqna s {x}" +tapSecurityKey: "Sekcem tasarutt-ik·im n tɣellist" uiLanguage: "Tutlayt n wegrudem" +accountSettings: "Iɣewwaṛen n umiḍan" +plugins: "Izegrar" +email: "Imayl" +emailAddress: "Tansa imayl" smtpUser: "Isem n umseqdac" smtpPass: "Awal uffir" +other: "Wiyyaḍ" +accountInfo: "Talɣut n umiḍan" +emailNotification: "Ilɣa imayl" +selectAccount: "Fren amiḍan" +accounts: "Imiḍan" _email: _follow: title: "Yeṭṭafaṛ-ik·em-id" @@ -48,6 +66,8 @@ _theme: mention: "Bder" _sfx: notification: "Ilɣuyen" +_permissions: + "write:account": "Ẓreg talɣut n umiḍan-ik·im" _widgets: notifications: "Ilɣuyen" _cw: diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index 50d920bf55..99fc0ba6f0 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -128,6 +128,7 @@ editWidgets: "위젯 편집" editWidgetsExit: "편집 종료" customEmojis: "커스텀 이모지" emoji: "이모지" +emojis: "이모지" emojiName: "이모지 이름" emojiUrl: "이모지 URL" addEmoji: "이모지 추가" @@ -528,6 +529,7 @@ removeAllFollowing: "모든 팔로잉 해제" removeAllFollowingDescription: "{host}(으)로부터 모든 팔로잉을 해제합니다. 해당 인스턴스가 더 이상 존재하지 않게 된 경우 등에 실행해 주세요." userSuspended: "이 계정은 정지된 상태입니다." userSilenced: "이 계정은 사일런스된 상태입니다." +menu: "메뉴" divider: "구분선" addItem: "항목 추가" rooms: "방" @@ -760,7 +762,28 @@ middle: "보통" low: "낮음" emailNotConfiguredWarning: "메일 주소가 설정되어 있지 않습니다." ratio: "비율" +customCss: "CSS 사용자화" +customCssWarn: "이 설정은 기능을 알고 있는 경우에만 사용해야 합니다. 잘못된 값을 입력하면 클라이언트가 정상적으로 작동하지 않을 수 있습니다." global: "글로벌" +squareAvatars: "프로필 아이콘을 사각형으로 표시" +sent: "전송" +received: "수신" +searchResult: "검색 결과" +hashtags: "해시태그" +troubleshooting: "문제 해결" +useBlurEffect: "UI에 흐림 효과 사용" +learnMore: "자세히" +misskeyUpdated: "Misskey가 업데이트 되었습니다!" +whatIsNew: "패치 정보 보기" +translate: "번역" +translatedFrom: "{x}에서 번역" +_docs: + continueReading: "계속 읽기" + features: "기능" + generalTopics: "일반 주제" + advancedTopics: "심화 주제" + admin: "관리" + translateWarn: "이 문서는 번역되었기 때문에 원본과는 내용이 다를 수 있습니다." _ad: back: "뒤로" reduceFrequencyOfThisAd: "이 광고의 표시 빈도 낮추기" @@ -859,6 +882,8 @@ _mfm: blurDescription: "내용이 흐리게 보입니다. 마우스를 위에 올려두면 내용이 보입니다." font: "폰트" fontDescription: "내용의 글꼴을 지정할 수 있습니다." + rainbow: "무지개" + rainbowDescription: "내용을 무지개로 표시합니다." _reversi: reversi: "리버시" gameSettings: "대국 설정" @@ -911,6 +936,9 @@ _channel: usersCount: "{n}명 참여 중" notesCount: "{n}노트" _menuDisplay: + sideFull: "가로" + sideIcon: "가로(아이콘)" + top: "상단" hide: "숨기기" _wordMute: muteWords: "뮤트할 단어" diff --git a/locales/pl-PL.yml b/locales/pl-PL.yml index db6241c019..379f06dd1b 100644 --- a/locales/pl-PL.yml +++ b/locales/pl-PL.yml @@ -128,6 +128,7 @@ editWidgets: "Edytuj widżet" editWidgetsExit: "Gotowe" customEmojis: "Niestandardowe emoji" emoji: "Emoji" +emojis: "Emoji" emojiName: "Nazwa emoji" emojiUrl: "Adres URL emoji" addEmoji: "Dodaj emoji" @@ -735,6 +736,10 @@ low: "Niski" emailNotConfiguredWarning: "Nie podano adresu e-mail" ratio: "Stosunek" global: "Globalna" +sent: "Wyślij" +hashtags: "Hashtag" +_docs: + admin: "Zarządzanie" _ad: back: "Wróć" reduceFrequencyOfThisAd: "Pokazuj tę reklamę rzadziej" diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml index 119a78de22..a6e759cc4b 100644 --- a/locales/ru-RU.yml +++ b/locales/ru-RU.yml @@ -128,6 +128,7 @@ editWidgets: "Редактировать виджеты" editWidgetsExit: "Готово" customEmojis: "Эмодзи пользователя" emoji: "Эмодзи" +emojis: "Эмодзи" emojiName: "Название эмодзи" emojiUrl: "URL эмодзи" addEmoji: "Добавить эмодзи" @@ -528,6 +529,7 @@ removeAllFollowing: "Удалить всех подписчиков" removeAllFollowingDescription: "Отменить все подписки с домена {host}? Пожалуйста, применяйте это действие, если инстанс больше не существует." userSuspended: "Эта учётная запись заморожена" userSilenced: "Этот пользователь был заглушен" +menu: "Меню" divider: "Линия-разделитель" addItem: "Добавить элемент" rooms: "Комната" @@ -760,7 +762,26 @@ middle: "Средне" low: "Низкий" emailNotConfiguredWarning: "Не указан адрес электронной почты" ratio: "Соотношение" +customCss: "Индивидуальный CSS" +customCssWarn: "Используйте эту настройку только если знаете, что делаете. Ошибки здесь чреваты тем, что сайт перестанет нормально работать у вас." global: "Всеобщая" +squareAvatars: "Квадратные аватарки" +sent: "Отправить" +received: "Получено" +searchResult: "Результаты поиска" +hashtags: "Хэштег" +troubleshooting: "Разрешение проблем" +useBlurEffect: "Размытие в интерфейсе" +learnMore: "Подробнее" +misskeyUpdated: "Misskey обновился!" +whatIsNew: "Что новенького?" +_docs: + continueReading: "Читать подробнее" + features: "Возможности" + generalTopics: "Основные темы" + advancedTopics: "Дополнительные темы" + admin: "Управление" + translateWarn: "Это перевод документа. Он может неточно отражать содержимое оригинала." _ad: back: "Выход" reduceFrequencyOfThisAd: "Реже показывать эту рекламу" @@ -859,6 +880,8 @@ _mfm: blurDescription: "Размывает текст до нечитаемости, будто его поместили за матовое стекло. Наведение указателя мыши на размытый текст возвращает чёткость." font: "Шрифт" fontDescription: "Так можно писать произвольным шрифтом." + rainbow: "Радуга" + rainbowDescription: "Заставлять содержимое отображаться в цветах радуги." _reversi: reversi: "Реверси" gameSettings: "Настройки игры" @@ -911,6 +934,9 @@ _channel: usersCount: "Участников: {n}" notesCount: "Заметок: {n}" _menuDisplay: + sideFull: "Сторона" + sideIcon: "Сторона (иконки)" + top: "Вверх" hide: "Спрятать" _wordMute: muteWords: "Скрыть слово" diff --git a/locales/uk-UA.yml b/locales/uk-UA.yml index 893fb3bcdc..b68f99c67b 100644 --- a/locales/uk-UA.yml +++ b/locales/uk-UA.yml @@ -127,6 +127,7 @@ editWidgets: "Редагувати віджети" editWidgetsExit: "Готово" customEmojis: "Кастомні емоджі" emoji: "Емоджі" +emojis: "Емоджі" emojiName: "Назва емоджі" emojiUrl: "URL емодзі" addEmoji: "Додати емодзі" @@ -689,6 +690,10 @@ administration: "Управління" expiration: "Опитування закінчується" middle: "Середній" global: "Глобальна" +sent: "Відправити" +hashtags: "Хештеґ" +_docs: + admin: "Управління" _ad: back: "Назад" _gallery: diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index 2612652c54..aad08d1b4b 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -128,6 +128,7 @@ editWidgets: "编辑小工具" editWidgetsExit: "完成编辑" customEmojis: "自定义表情符号" emoji: "表情符号" +emojis: "表情符号" emojiName: "表情符号名称" emojiUrl: "表情符号地址" addEmoji: "添加表情符号" @@ -765,6 +766,24 @@ customCss: "自定义 CSS" customCssWarn: "这些设置必须有相关的基础知识,不当的配置可能导致客户端无法正常使用!" global: "全局" squareAvatars: "显示方形头像图标" +sent: "发送" +received: "收取" +searchResult: "搜索结果" +hashtags: "话题标签" +troubleshooting: "故障排除" +useBlurEffect: "在UI上使用模糊效果" +learnMore: "更多信息" +misskeyUpdated: "Misskey更新完成!" +whatIsNew: "显示更新信息" +translate: "翻译" +translatedFrom: "从 {x} 翻译" +_docs: + continueReading: "继续阅读" + features: "特性" + generalTopics: "通常提示" + advancedTopics: "进阶提示" + admin: "管理" + translateWarn: "本文档是翻译后的文档。内容可能与原文有所不同。" _ad: back: "返回" reduceFrequencyOfThisAd: "减少此广告的频率" @@ -863,6 +882,8 @@ _mfm: blurDescription: "产生模糊效果。将鼠标指针放在上面即可将内容显示出来。" font: "字体" fontDescription: "可以设置内容所使用的字体。" + rainbow: "彩虹" + rainbowDescription: "用彩虹色来显示内容。" _reversi: reversi: "黑白棋" gameSettings: "对局设置" diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml index 7010220fc1..f362d4258b 100644 --- a/locales/zh-TW.yml +++ b/locales/zh-TW.yml @@ -128,6 +128,7 @@ editWidgets: "編輯小工具" editWidgetsExit: "完成" customEmojis: "自訂表情符號" emoji: "表情符號" +emojis: "表情符號" emojiName: "表情符號名稱" emojiUrl: "表情符號URL" addEmoji: "加入表情符號" @@ -751,6 +752,10 @@ low: "低" emailNotConfiguredWarning: "沒有設定電子郵件地址" ratio: "%" global: "公開" +sent: "發送" +hashtags: "#tag" +_docs: + admin: "管理" _ad: back: "返回" reduceFrequencyOfThisAd: "降低此廣告的頻率 " diff --git a/migration/1629004542760-chart-reindex.ts b/migration/1629004542760-chart-reindex.ts new file mode 100644 index 0000000000..c3d09f51ba --- /dev/null +++ b/migration/1629004542760-chart-reindex.ts @@ -0,0 +1,182 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class chartReindex1629004542760 implements MigrationInterface { + name = 'chartReindex1629004542760' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DELETE FROM "__chart__active_users" a USING "__chart__active_users" b WHERE a.id < b.id AND ((a.group IS NULL AND b.group IS NULL) OR a.group = b.group) AND a.date = b.date;`); + await queryRunner.query(`DELETE FROM "__chart__drive" a USING "__chart__drive" b WHERE a.id < b.id AND ((a.group IS NULL AND b.group IS NULL) OR a.group = b.group) AND a.date = b.date;`); + await queryRunner.query(`DELETE FROM "__chart__federation" a USING "__chart__federation" b WHERE a.id < b.id AND ((a.group IS NULL AND b.group IS NULL) OR a.group = b.group) AND a.date = b.date;`); + await queryRunner.query(`DELETE FROM "__chart__hashtag" a USING "__chart__hashtag" b WHERE a.id < b.id AND ((a.group IS NULL AND b.group IS NULL) OR a.group = b.group) AND a.date = b.date;`); + await queryRunner.query(`DELETE FROM "__chart__instance" a USING "__chart__instance" b WHERE a.id < b.id AND ((a.group IS NULL AND b.group IS NULL) OR a.group = b.group) AND a.date = b.date;`); + await queryRunner.query(`DELETE FROM "__chart__network" a USING "__chart__network" b WHERE a.id < b.id AND ((a.group IS NULL AND b.group IS NULL) OR a.group = b.group) AND a.date = b.date;`); + await queryRunner.query(`DELETE FROM "__chart__notes" a USING "__chart__notes" b WHERE a.id < b.id AND ((a.group IS NULL AND b.group IS NULL) OR a.group = b.group) AND a.date = b.date;`); + await queryRunner.query(`DELETE FROM "__chart__per_user_drive" a USING "__chart__per_user_drive" b WHERE a.id < b.id AND ((a.group IS NULL AND b.group IS NULL) OR a.group = b.group) AND a.date = b.date;`); + await queryRunner.query(`DELETE FROM "__chart__per_user_following" a USING "__chart__per_user_following" b WHERE a.id < b.id AND ((a.group IS NULL AND b.group IS NULL) OR a.group = b.group) AND a.date = b.date;`); + await queryRunner.query(`DELETE FROM "__chart__per_user_notes" a USING "__chart__per_user_notes" b WHERE a.id < b.id AND ((a.group IS NULL AND b.group IS NULL) OR a.group = b.group) AND a.date = b.date;`); + await queryRunner.query(`DELETE FROM "__chart__per_user_reaction" a USING "__chart__per_user_reaction" b WHERE a.id < b.id AND ((a.group IS NULL AND b.group IS NULL) OR a.group = b.group) AND a.date = b.date;`); + await queryRunner.query(`DELETE FROM "__chart__test_grouped" a USING "__chart__test_grouped" b WHERE a.id < b.id AND ((a.group IS NULL AND b.group IS NULL) OR a.group = b.group) AND a.date = b.date;`); + await queryRunner.query(`DELETE FROM "__chart__test_unique" a USING "__chart__test_unique" b WHERE a.id < b.id AND ((a.group IS NULL AND b.group IS NULL) OR a.group = b.group) AND a.date = b.date;`); + await queryRunner.query(`DELETE FROM "__chart__users" a USING "__chart__users" b WHERE a.id < b.id AND ((a.group IS NULL AND b.group IS NULL) OR a.group = b.group) AND a.date = b.date;`); + await queryRunner.query(`DROP INDEX "IDX_0ad37b7ef50f4ddc84363d7ccc"`); + await queryRunner.query(`DROP INDEX "IDX_00ed5f86db1f7efafb1978bf21"`); + await queryRunner.query(`DROP INDEX "IDX_9a3ed15a30ab7e3a37702e6e08"`); + await queryRunner.query(`DROP INDEX "IDX_13565815f618a1ff53886c5b28"`); + await queryRunner.query(`DROP INDEX "IDX_7a170f67425e62a8fabb76c872"`); + await queryRunner.query(`DROP INDEX "IDX_3313d7288855ec105b5bbf6c21"`); + await queryRunner.query(`DROP INDEX "IDX_36cb699c49580d4e6c2e6159f9"`); + await queryRunner.query(`DROP INDEX "IDX_76e87c7bfc5d925fcbba405d84"`); + await queryRunner.query(`DROP INDEX "IDX_dd907becf76104e4b656659e6b"`); + await queryRunner.query(`DROP INDEX "IDX_07747a1038c05f532a718fe1de"`); + await queryRunner.query(`DROP INDEX "IDX_99a7d2faaef84a6f728d714ad6"`); + await queryRunner.query(`DROP INDEX "IDX_25a97c02003338124b2b75fdbc"`); + await queryRunner.query(`DROP INDEX "IDX_6b8f34a1a64b06014b6fb66824"`); + await queryRunner.query(`DROP INDEX "IDX_da8a46ba84ca1d8bb5a29bfb63"`); + await queryRunner.query(`DROP INDEX "IDX_39ee857ab2f23493037c6b6631"`); + await queryRunner.query(`DROP INDEX "IDX_a1efd3e0048a5f2793a47360dc"`); + await queryRunner.query(`DROP INDEX "IDX_7b5da130992ec9df96712d4290"`); + await queryRunner.query(`DROP INDEX "IDX_0a905b992fecd2b5c3fb98759e"`); + await queryRunner.query(`DROP INDEX "IDX_42eb716a37d381cdf566192b2b"`); + await queryRunner.query(`DROP INDEX "IDX_7036f2957151588b813185c794"`); + await queryRunner.query(`DROP INDEX "IDX_f09d543e3acb16c5976bdb31fa"`); + await queryRunner.query(`DROP INDEX "IDX_5f86db6492274e07c1a3cdf286"`); + await queryRunner.query(`DROP INDEX "IDX_e496ca8096d28f6b9b509264dc"`); + await queryRunner.query(`DROP INDEX "IDX_30bf67687f483ace115c5ca642"`); + await queryRunner.query(`DROP INDEX "IDX_7af07790712aa3438ff6773f3b"`); + await queryRunner.query(`DROP INDEX "IDX_4b3593098b6edc9c5afe36b18b"`); + await queryRunner.query(`DROP INDEX "IDX_b77d4dd9562c3a899d9a286fcd"`); + await queryRunner.query(`DROP INDEX "IDX_84234bd1abb873f07329681c83"`); + await queryRunner.query(`DROP INDEX "IDX_55bf20f366979f2436de99206b"`); + await queryRunner.query(`DROP INDEX "IDX_5048e9daccbbbc6d567bb142d3"`); + await queryRunner.query(`DROP INDEX "IDX_f7bf4c62059764c2c2bb40fdab"`); + await queryRunner.query(`DROP INDEX "IDX_8cf3156fd7a6b15c43459c6e3b"`); + await queryRunner.query(`DROP INDEX "IDX_229a41ad465f9205f1f5703291"`); + await queryRunner.query(`DROP INDEX "IDX_0c641990ecf47d2545df4edb75"`); + await queryRunner.query(`DROP INDEX "IDX_234dff3c0b56a6150b95431ab9"`); + await queryRunner.query(`DROP INDEX "IDX_b14489029e4b3aaf4bba5fb524"`); + await queryRunner.query(`DROP INDEX "IDX_437bab3c6061d90f6bb65fd2cc"`); + await queryRunner.query(`DROP INDEX "IDX_bbfa573a8181018851ed0b6357"`); + await queryRunner.query(`DROP INDEX "IDX_a0cd75442dd10d0643a17c4a49"`); + await queryRunner.query(`DROP INDEX "IDX_b070a906db04b44c67c6c2144d"`); + await queryRunner.query(`DROP INDEX "IDX_d41cce6aee1a50bfc062038f9b"`); + await queryRunner.query(`DROP INDEX "IDX_a319e5dbf47e8a17497623beae"`); + await queryRunner.query(`DROP INDEX "IDX_845254b3eaf708ae8a6cac3026"`); + await queryRunner.query(`DROP INDEX "IDX_ed9b95919c672a13008e9487ee"`); + await queryRunner.query(`DROP INDEX "IDX_337e9599f278bd7537fe30876f"`); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_9a3ed15a30ab7e3a37702e6e08" ON "__chart__active_users" ("date", "group") `); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_60c5c6e7e538c09aa274ecd1cf" ON "__chart__active_users" ("date") WHERE "group" IS NULL`); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_3313d7288855ec105b5bbf6c21" ON "__chart__drive" ("date", "group") `); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_ceab80a6729f8e2e6f5b8a1a3d" ON "__chart__drive" ("date") WHERE "group" IS NULL`); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_dd907becf76104e4b656659e6b" ON "__chart__federation" ("date", "group") `); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_eddfed8fb40305a04c6f941050" ON "__chart__federation" ("date") WHERE "group" IS NULL`); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_25a97c02003338124b2b75fdbc" ON "__chart__hashtag" ("date", "group") `); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_53a3604b939e2b479eb2cfaac8" ON "__chart__hashtag" ("date") WHERE "group" IS NULL`); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_39ee857ab2f23493037c6b6631" ON "__chart__instance" ("date", "group") `); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_8111b817b9818c04d7eb8475b1" ON "__chart__instance" ("date") WHERE "group" IS NULL`); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_0a905b992fecd2b5c3fb98759e" ON "__chart__network" ("date", "group") `); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_2082327b2699ce924fa654afc5" ON "__chart__network" ("date") WHERE "group" IS NULL`); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_f09d543e3acb16c5976bdb31fa" ON "__chart__notes" ("date", "group") `); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_e60c358aaced5aab8900a4af31" ON "__chart__notes" ("date") WHERE "group" IS NULL`); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_30bf67687f483ace115c5ca642" ON "__chart__per_user_drive" ("date", "group") `); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_a9a806d466b314f253a1a611c4" ON "__chart__per_user_drive" ("date") WHERE "group" IS NULL`); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_b77d4dd9562c3a899d9a286fcd" ON "__chart__per_user_following" ("date", "group") `); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_dabbb38a51ab86ee3cab291326" ON "__chart__per_user_following" ("date") WHERE "group" IS NULL`); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_5048e9daccbbbc6d567bb142d3" ON "__chart__per_user_notes" ("date", "group") `); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_583a157ed0cf0ed1b5ec2a833f" ON "__chart__per_user_notes" ("date") WHERE "group" IS NULL`); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_229a41ad465f9205f1f5703291" ON "__chart__per_user_reaction" ("date", "group") `); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_3b7697a96f522d0478972e6d6f" ON "__chart__per_user_reaction" ("date") WHERE "group" IS NULL`); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_b14489029e4b3aaf4bba5fb524" ON "__chart__test_grouped" ("date", "group") `); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_da522b4008a9f5d7743b87ad55" ON "__chart__test_grouped" ("date") WHERE "group" IS NULL`); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_a0cd75442dd10d0643a17c4a49" ON "__chart__test_unique" ("date", "group") `); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_16effb2e888f6763673b579f80" ON "__chart__test_unique" ("date") WHERE "group" IS NULL`); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_a319e5dbf47e8a17497623beae" ON "__chart__test" ("date", "group") `); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_dab383a36f3c9db4a0c9b02cf3" ON "__chart__test" ("date") WHERE "group" IS NULL`); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_337e9599f278bd7537fe30876f" ON "__chart__users" ("date", "group") `); + await queryRunner.query(`CREATE UNIQUE INDEX "IDX_66feba81e1795d176d06c0b1e6" ON "__chart__users" ("date") WHERE "group" IS NULL`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DROP INDEX "IDX_66feba81e1795d176d06c0b1e6"`); + await queryRunner.query(`DROP INDEX "IDX_337e9599f278bd7537fe30876f"`); + await queryRunner.query(`DROP INDEX "IDX_dab383a36f3c9db4a0c9b02cf3"`); + await queryRunner.query(`DROP INDEX "IDX_a319e5dbf47e8a17497623beae"`); + await queryRunner.query(`DROP INDEX "IDX_16effb2e888f6763673b579f80"`); + await queryRunner.query(`DROP INDEX "IDX_a0cd75442dd10d0643a17c4a49"`); + await queryRunner.query(`DROP INDEX "IDX_da522b4008a9f5d7743b87ad55"`); + await queryRunner.query(`DROP INDEX "IDX_b14489029e4b3aaf4bba5fb524"`); + await queryRunner.query(`DROP INDEX "IDX_3b7697a96f522d0478972e6d6f"`); + await queryRunner.query(`DROP INDEX "IDX_229a41ad465f9205f1f5703291"`); + await queryRunner.query(`DROP INDEX "IDX_583a157ed0cf0ed1b5ec2a833f"`); + await queryRunner.query(`DROP INDEX "IDX_5048e9daccbbbc6d567bb142d3"`); + await queryRunner.query(`DROP INDEX "IDX_dabbb38a51ab86ee3cab291326"`); + await queryRunner.query(`DROP INDEX "IDX_b77d4dd9562c3a899d9a286fcd"`); + await queryRunner.query(`DROP INDEX "IDX_a9a806d466b314f253a1a611c4"`); + await queryRunner.query(`DROP INDEX "IDX_30bf67687f483ace115c5ca642"`); + await queryRunner.query(`DROP INDEX "IDX_e60c358aaced5aab8900a4af31"`); + await queryRunner.query(`DROP INDEX "IDX_f09d543e3acb16c5976bdb31fa"`); + await queryRunner.query(`DROP INDEX "IDX_2082327b2699ce924fa654afc5"`); + await queryRunner.query(`DROP INDEX "IDX_0a905b992fecd2b5c3fb98759e"`); + await queryRunner.query(`DROP INDEX "IDX_8111b817b9818c04d7eb8475b1"`); + await queryRunner.query(`DROP INDEX "IDX_39ee857ab2f23493037c6b6631"`); + await queryRunner.query(`DROP INDEX "IDX_53a3604b939e2b479eb2cfaac8"`); + await queryRunner.query(`DROP INDEX "IDX_25a97c02003338124b2b75fdbc"`); + await queryRunner.query(`DROP INDEX "IDX_eddfed8fb40305a04c6f941050"`); + await queryRunner.query(`DROP INDEX "IDX_dd907becf76104e4b656659e6b"`); + await queryRunner.query(`DROP INDEX "IDX_ceab80a6729f8e2e6f5b8a1a3d"`); + await queryRunner.query(`DROP INDEX "IDX_3313d7288855ec105b5bbf6c21"`); + await queryRunner.query(`DROP INDEX "IDX_60c5c6e7e538c09aa274ecd1cf"`); + await queryRunner.query(`DROP INDEX "IDX_9a3ed15a30ab7e3a37702e6e08"`); + await queryRunner.query(`DROP INDEX "IDX_a9021cc2e1feb5f72d3db6e9f5"`); + await queryRunner.query(`DROP INDEX "IDX_f22169eb10657bded6d875ac8f"`); + await queryRunner.query(`DROP INDEX "IDX_c8cc87bd0f2f4487d17c651fbf"`); + await queryRunner.query(`DROP INDEX "IDX_754499f9b2642336433769518d"`); + await queryRunner.query(`DROP INDEX "IDX_315c779174fe8247ab324f036e"`); + await queryRunner.query(`DROP INDEX "IDX_c5d46cbfda48b1c33ed852e21b"`); + await queryRunner.query(`CREATE INDEX "IDX_337e9599f278bd7537fe30876f" ON "__chart__users" ("date", "group") `); + await queryRunner.query(`CREATE INDEX "IDX_ed9b95919c672a13008e9487ee" ON "__chart__users" ("group") `); + await queryRunner.query(`CREATE INDEX "IDX_845254b3eaf708ae8a6cac3026" ON "__chart__users" ("date") `); + await queryRunner.query(`CREATE INDEX "IDX_a319e5dbf47e8a17497623beae" ON "__chart__test" ("date", "group") `); + await queryRunner.query(`CREATE INDEX "IDX_d41cce6aee1a50bfc062038f9b" ON "__chart__test" ("group") `); + await queryRunner.query(`CREATE INDEX "IDX_b070a906db04b44c67c6c2144d" ON "__chart__test" ("date") `); + await queryRunner.query(`CREATE INDEX "IDX_a0cd75442dd10d0643a17c4a49" ON "__chart__test_unique" ("date", "group") `); + await queryRunner.query(`CREATE INDEX "IDX_bbfa573a8181018851ed0b6357" ON "__chart__test_unique" ("group") `); + await queryRunner.query(`CREATE INDEX "IDX_437bab3c6061d90f6bb65fd2cc" ON "__chart__test_unique" ("date") `); + await queryRunner.query(`CREATE INDEX "IDX_b14489029e4b3aaf4bba5fb524" ON "__chart__test_grouped" ("date", "group") `); + await queryRunner.query(`CREATE INDEX "IDX_234dff3c0b56a6150b95431ab9" ON "__chart__test_grouped" ("group") `); + await queryRunner.query(`CREATE INDEX "IDX_0c641990ecf47d2545df4edb75" ON "__chart__test_grouped" ("date") `); + await queryRunner.query(`CREATE INDEX "IDX_229a41ad465f9205f1f5703291" ON "__chart__per_user_reaction" ("date", "group") `); + await queryRunner.query(`CREATE INDEX "IDX_8cf3156fd7a6b15c43459c6e3b" ON "__chart__per_user_reaction" ("group") `); + await queryRunner.query(`CREATE INDEX "IDX_f7bf4c62059764c2c2bb40fdab" ON "__chart__per_user_reaction" ("date") `); + await queryRunner.query(`CREATE INDEX "IDX_5048e9daccbbbc6d567bb142d3" ON "__chart__per_user_notes" ("date", "group") `); + await queryRunner.query(`CREATE INDEX "IDX_55bf20f366979f2436de99206b" ON "__chart__per_user_notes" ("group") `); + await queryRunner.query(`CREATE INDEX "IDX_84234bd1abb873f07329681c83" ON "__chart__per_user_notes" ("date") `); + await queryRunner.query(`CREATE INDEX "IDX_b77d4dd9562c3a899d9a286fcd" ON "__chart__per_user_following" ("date", "group") `); + await queryRunner.query(`CREATE INDEX "IDX_4b3593098b6edc9c5afe36b18b" ON "__chart__per_user_following" ("group") `); + await queryRunner.query(`CREATE INDEX "IDX_7af07790712aa3438ff6773f3b" ON "__chart__per_user_following" ("date") `); + await queryRunner.query(`CREATE INDEX "IDX_30bf67687f483ace115c5ca642" ON "__chart__per_user_drive" ("date", "group") `); + await queryRunner.query(`CREATE INDEX "IDX_e496ca8096d28f6b9b509264dc" ON "__chart__per_user_drive" ("group") `); + await queryRunner.query(`CREATE INDEX "IDX_5f86db6492274e07c1a3cdf286" ON "__chart__per_user_drive" ("date") `); + await queryRunner.query(`CREATE INDEX "IDX_f09d543e3acb16c5976bdb31fa" ON "__chart__notes" ("date", "group") `); + await queryRunner.query(`CREATE INDEX "IDX_7036f2957151588b813185c794" ON "__chart__notes" ("group") `); + await queryRunner.query(`CREATE INDEX "IDX_42eb716a37d381cdf566192b2b" ON "__chart__notes" ("date") `); + await queryRunner.query(`CREATE INDEX "IDX_0a905b992fecd2b5c3fb98759e" ON "__chart__network" ("date", "group") `); + await queryRunner.query(`CREATE INDEX "IDX_7b5da130992ec9df96712d4290" ON "__chart__network" ("group") `); + await queryRunner.query(`CREATE INDEX "IDX_a1efd3e0048a5f2793a47360dc" ON "__chart__network" ("date") `); + await queryRunner.query(`CREATE INDEX "IDX_39ee857ab2f23493037c6b6631" ON "__chart__instance" ("date", "group") `); + await queryRunner.query(`CREATE INDEX "IDX_da8a46ba84ca1d8bb5a29bfb63" ON "__chart__instance" ("group") `); + await queryRunner.query(`CREATE INDEX "IDX_6b8f34a1a64b06014b6fb66824" ON "__chart__instance" ("date") `); + await queryRunner.query(`CREATE INDEX "IDX_25a97c02003338124b2b75fdbc" ON "__chart__hashtag" ("date", "group") `); + await queryRunner.query(`CREATE INDEX "IDX_99a7d2faaef84a6f728d714ad6" ON "__chart__hashtag" ("group") `); + await queryRunner.query(`CREATE INDEX "IDX_07747a1038c05f532a718fe1de" ON "__chart__hashtag" ("date") `); + await queryRunner.query(`CREATE INDEX "IDX_dd907becf76104e4b656659e6b" ON "__chart__federation" ("date", "group") `); + await queryRunner.query(`CREATE INDEX "IDX_76e87c7bfc5d925fcbba405d84" ON "__chart__federation" ("group") `); + await queryRunner.query(`CREATE INDEX "IDX_36cb699c49580d4e6c2e6159f9" ON "__chart__federation" ("date") `); + await queryRunner.query(`CREATE INDEX "IDX_3313d7288855ec105b5bbf6c21" ON "__chart__drive" ("date", "group") `); + await queryRunner.query(`CREATE INDEX "IDX_7a170f67425e62a8fabb76c872" ON "__chart__drive" ("group") `); + await queryRunner.query(`CREATE INDEX "IDX_13565815f618a1ff53886c5b28" ON "__chart__drive" ("date") `); + await queryRunner.query(`CREATE INDEX "IDX_9a3ed15a30ab7e3a37702e6e08" ON "__chart__active_users" ("date", "group") `); + await queryRunner.query(`CREATE INDEX "IDX_00ed5f86db1f7efafb1978bf21" ON "__chart__active_users" ("group") `); + await queryRunner.query(`CREATE INDEX "IDX_0ad37b7ef50f4ddc84363d7ccc" ON "__chart__active_users" ("date") `); + } + +} diff --git a/migration/1629024377804-deepl-integration.ts b/migration/1629024377804-deepl-integration.ts new file mode 100644 index 0000000000..639f947c7d --- /dev/null +++ b/migration/1629024377804-deepl-integration.ts @@ -0,0 +1,14 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class deeplIntegration1629024377804 implements MigrationInterface { + name = 'deeplIntegration1629024377804' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "meta" ADD "deeplAuthKey" character varying(128)`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "deeplAuthKey"`); + } + +} diff --git a/migration/1629288472000-fix-channel-userId.ts b/migration/1629288472000-fix-channel-userId.ts new file mode 100644 index 0000000000..cd8f81bb01 --- /dev/null +++ b/migration/1629288472000-fix-channel-userId.ts @@ -0,0 +1,14 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class fixChannelUserId1629288472000 implements MigrationInterface { + name = 'fixChannelUserId1629288472000' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "channel" ALTER COLUMN "userId" DROP NOT NULL;`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "channel" ALTER COLUMN "userId" SET NOT NULL;`); + } + +} diff --git a/package.json b/package.json index c89fe96103..4135c47303 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "misskey", "author": "syuilo ", - "version": "12.84.3", + "version": "12.88.0", "codename": "indigo", "repository": { "type": "git", @@ -10,7 +10,8 @@ "main": "./index.js", "private": true, "scripts": { - "start": "node ./index.js", + "start": "node --experimental-json-modules ./index.js", + "start:test": "cross-env NODE_ENV=test node --experimental-json-modules ./index.js", "init": "npm run migrate", "ormconfig": "node ./built/ormconfig.js", "migrate": "ts-node ./node_modules/typeorm/cli.js migration:run", @@ -26,6 +27,9 @@ "clean": "gulp clean", "cleanall": "gulp cleanall", "lint": "tslint 'src/**/*.ts'", + "cy:open": "cypress open", + "cy:run": "cypress run", + "e2e": "start-server-and-test start:test http://localhost cy:run", "test": "cross-env TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT=\"./test/tsconfig.json\" mocha", "format": "gulp format" }, @@ -34,7 +38,6 @@ "lodash": "^4.17.21" }, "dependencies": { - "@babel/plugin-transform-runtime": "7.14.5", "@elastic/elasticsearch": "7.11.0", "@koa/cors": "3.1.0", "@koa/multer": "3.0.0", @@ -44,7 +47,7 @@ "@sinonjs/fake-timers": "7.1.2", "@syuilo/aiscript": "0.11.1", "@types/bcryptjs": "2.4.2", - "@types/bull": "3.15.2", + "@types/bull": "3.15.3", "@types/cbor": "6.0.0", "@types/dateformat": "3.0.1", "@types/escape-regexp": "0.0.0", @@ -57,8 +60,8 @@ "@types/jsonld": "1.5.6", "@types/katex": "0.11.1", "@types/koa": "2.13.4", - "@types/koa-bodyparser": "4.3.2", - "@types/koa-cors": "0.0.1", + "@types/koa-bodyparser": "4.3.3", + "@types/koa-cors": "0.0.2", "@types/koa-favicon": "2.0.21", "@types/koa-logger": "3.1.1", "@types/koa-mount": "4.0.0", @@ -68,10 +71,10 @@ "@types/koa__multer": "2.0.3", "@types/koa__router": "8.0.7", "@types/markdown-it": "12.0.3", - "@types/matter-js": "0.17.3", + "@types/matter-js": "0.17.5", "@types/mocha": "8.2.3", - "@types/node": "16.3.3", - "@types/node-fetch": "2.5.11", + "@types/node": "16.6.2", + "@types/node-fetch": "2.5.12", "@types/nodemailer": "6.4.4", "@types/nprogress": "0.2.0", "@types/oauth": "0.9.1", @@ -86,9 +89,9 @@ "@types/redis": "2.8.31", "@types/rename": "1.0.4", "@types/request-stats": "3.0.0", - "@types/rimraf": "3.0.1", + "@types/rimraf": "3.0.2", "@types/seedrandom": "2.4.28", - "@types/sharp": "0.28.4", + "@types/sharp": "0.28.5", "@types/sinonjs__fake-timers": "6.0.3", "@types/speakeasy": "2.0.6", "@types/throttle-debounce": "2.1.0", @@ -98,40 +101,40 @@ "@types/web-push": "3.3.2", "@types/webpack": "5.28.0", "@types/webpack-stream": "3.2.12", - "@types/websocket": "1.0.3", - "@types/ws": "7.4.6", - "@typescript-eslint/parser": "4.28.3", - "@vue/compiler-sfc": "3.1.5", + "@types/websocket": "1.0.4", + "@types/ws": "7.4.7", + "@typescript-eslint/parser": "4.29.2", + "@vue/compiler-sfc": "3.2.4", "abort-controller": "3.0.0", - "apexcharts": "3.27.2", + "apexcharts": "3.27.3", "autobind-decorator": "2.4.0", "autosize": "4.0.4", "autwh": "0.1.0", - "aws-sdk": "2.948.0", + "aws-sdk": "2.966.0", "bcryptjs": "2.4.3", - "blurhash": "1.1.3", - "broadcast-channel": "3.7.0", - "bull": "3.26.0", + "blurhash": "1.1.4", + "broadcast-channel": "4.2.0", + "bull": "3.28.1", + "cacheable-lookup": "6.0.0", "cafy": "15.2.1", - "cbor": "7.0.6", - "chalk": "4.1.1", + "cbor": "8.0.0", + "chalk": "4.1.2", "chart.js": "2.9.4", "cli-highlight": "2.1.11", - "commander": "7.2.0", - "concurrently": "6.2.0", + "commander": "8.1.0", + "compare-versions": "3.6.0", + "concurrently": "6.2.1", "content-disposition": "0.5.3", - "core-js": "3.15.2", "crc-32": "1.2.0", - "css-loader": "6.0.0", - "cssnano": "5.0.6", + "css-loader": "6.2.0", + "cssnano": "5.0.8", "dateformat": "4.5.1", - "diskusage": "1.1.3", "escape-regexp": "0.0.1", - "eslint": "7.30.0", - "eslint-plugin-vue": "7.13.0", + "eslint": "7.32.0", + "eslint-plugin-vue": "7.16.0", "eventemitter3": "4.0.7", "feed": "4.2.2", - "file-type": "16.5.1", + "file-type": "16.5.3", "fluent-ffmpeg": "2.1.2", "glob": "7.1.7", "got": "11.8.2", @@ -141,22 +144,18 @@ "gulp-replace": "1.1.3", "gulp-terser": "2.0.1", "gulp-tslint": "8.1.4", - "hard-source-webpack-plugin": "0.13.1", - "html-minifier": "4.0.0", - "http-proxy-agent": "4.0.1", + "hpagent": "0.1.2", "http-signature": "1.3.5", - "https-proxy-agent": "5.0.0", - "idb-keyval": "5.0.6", + "idb-keyval": "5.1.3", "insert-text-at-cursor": "0.3.0", - "is-root": "2.1.0", "is-svg": "4.3.1", "js-yaml": "4.1.0", - "jsdom": "16.6.0", + "jsdom": "16.7.0", "json5": "2.2.0", "json5-loader": "4.0.1", "jsonld": "5.2.0", "jsrsasign": "8.0.20", - "katex": "0.13.11", + "katex": "0.13.13", "koa": "2.13.1", "koa-bodyparser": "4.3.0", "koa-favicon": "2.1.0", @@ -167,30 +166,26 @@ "koa-slow": "2.1.0", "koa-views": "7.0.1", "langmap": "0.0.16", - "lookup-dns-cache": "2.1.0", - "markdown-it": "12.1.0", + "markdown-it": "12.2.0", "markdown-it-anchor": "7.1.0", "matter-js": "0.17.1", "mfm-js": "0.19.0", "misskey-js": "0.0.6", "mocha": "8.4.0", - "moji": "0.5.1", "ms": "2.1.3", - "multer": "1.4.2", + "multer": "1.4.3", "nested-property": "4.0.0", "node-fetch": "2.6.1", "nodemailer": "6.6.3", - "object-assign-deep": "0.4.0", "os-utils": "0.0.14", "parse5": "6.0.1", - "pg": "8.6.0", + "pg": "8.7.1", "portscanner": "2.2.0", - "postcss": "8.3.5", + "postcss": "8.3.6", "postcss-loader": "6.1.1", "prismjs": "1.24.1", "probe-image-size": "7.2.1", "promise-limit": "2.7.0", - "promise-sequential": "1.1.1", "pug": "3.0.2", "punycode": "2.1.1", "pureimage": "0.3.2", @@ -198,67 +193,62 @@ "random-seed": "0.3.0", "ratelimiter": "3.4.1", "re2": "1.16.0", - "reconnecting-websocket": "4.4.0", "redis": "3.1.2", "redis-lock": "0.1.4", "reflect-metadata": "0.1.13", - "regenerator-runtime": "0.13.7", "rename": "1.0.4", "request-stats": "3.0.0", "require-all": "3.0.0", "rimraf": "3.0.2", "rndstr": "1.0.0", "s-age": "1.1.2", - "sass": "1.35.2", + "sass": "1.38.0", "sass-loader": "12.1.0", "seedrandom": "3.0.5", - "sharp": "0.28.3", + "sharp": "0.29.0", "speakeasy": "2.0.0", "stringz": "2.1.0", - "style-loader": "3.1.0", - "summaly": "2.4.0", + "style-loader": "3.2.1", + "summaly": "2.4.1", "syslog-pro": "1.0.0", - "systeminformation": "5.7.7", + "systeminformation": "5.8.0", "syuilo-password-strength": "0.0.1", "textarea-caret": "3.1.0", "three": "0.117.1", "throttle-debounce": "3.0.1", "tinycolor2": "1.4.2", "tmp": "0.2.1", - "ts-loader": "9.2.3", - "ts-node": "10.1.0", - "tsc-alias": "1.3.7", + "ts-loader": "9.2.5", + "ts-node": "10.2.1", + "tsc-alias": "1.3.9", "tsconfig-paths": "3.10.1", "tslint": "6.1.3", "tslint-sonarts": "1.9.0", "twemoji-parser": "13.1.0", - "typeorm": "0.2.32", + "typeorm": "0.2.37", "typescript": "4.3.5", "ulid": "2.3.0", "uuid": "8.3.2", "v-debounce": "0.1.2", - "vanilla-tilt": "1.7.0", - "vue": "3.1.5", - "vue-color": "2.8.1", - "vue-json-pretty": "1.8.1", - "vue-loader": "16.3.1", + "vue": "3.2.4", + "vue-loader": "16.5.0", "vue-prism-editor": "2.0.0-alpha.2", "vue-router": "4.0.5", "vue-style-loader": "4.1.3", "vue-svg-loader": "0.17.0-beta.2", "vuedraggable": "4.0.1", "web-push": "3.4.5", - "webpack": "5.45.1", - "webpack-cli": "4.7.2", + "webpack": "5.51.0", + "webpack-cli": "4.8.0", "websocket": "1.0.34", - "ws": "7.5.3", + "ws": "8.2.0", "xev": "2.0.1" }, "devDependencies": { "@redocly/openapi-core": "1.0.0-beta.44", - "@types/chai": "4.2.16", "@types/fluent-ffmpeg": "2.1.17", - "chai": "4.3.4", - "cross-env": "7.0.3" + "cross-env": "7.0.3", + "cypress": "8.3.0", + "start-server-and-test": "1.13.1" } } diff --git a/src/@types/is-root.d.ts b/src/@types/is-root.d.ts deleted file mode 100644 index 3905a16c8d..0000000000 --- a/src/@types/is-root.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare module 'is-root' { - function isRoot(): boolean; - - namespace isRoot {} // Hack - - export = isRoot; -} diff --git a/src/@types/lookup-dns-cache.d.ts b/src/@types/lookup-dns-cache.d.ts deleted file mode 100644 index bae9df5faf..0000000000 --- a/src/@types/lookup-dns-cache.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -declare module 'lookup-dns-cache' { - import { LookupOneOptions, LookupAllOptions, LookupOptions, LookupAddress } from 'dns'; - - function lookup(hostname: string, family: number, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void; - function lookup(hostname: string, options: LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void; - function lookup(hostname: string, options: LookupAllOptions, callback: (err: NodeJS.ErrnoException | null, addresses: LookupAddress[]) => void): void; - function lookup(hostname: string, options: LookupOptions, callback: (err: NodeJS.ErrnoException | null, address: string | LookupAddress[], family: number) => void): void; - function lookup(hostname: string, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void; -} diff --git a/src/argv.ts b/src/argv.ts index ae6396129c..106ecf2675 100644 --- a/src/argv.ts +++ b/src/argv.ts @@ -1,24 +1,23 @@ import { Command } from 'commander'; -import config from '@/config'; +import config from '@/config/index'; const program = new Command(); -program - .version(config.version) - .option('--no-daemons', 'Disable daemon processes (for debbuging)') - .option('--disable-clustering', 'Disable clustering') - .option('--only-server', 'Run server only (without job queue processing)') - .option('--only-queue', 'Pocessing job queue only (without server)') - .option('--quiet', 'Suppress all logs') - .option('--verbose', 'Enable all logs') - .option('--with-log-time', 'Include timestamp for each logs') - .option('--slow', 'Delay all requests (for debbuging)') - .option('--color', 'This option is a dummy for some external program\'s (e.g. forever) issue.') - .parse(process.argv); +program.version(config.version); +program.option('--no-daemons', 'Disable daemon processes (for debbuging)'); +program.option('--disable-clustering', 'Disable clustering'); +program.option('--only-server', 'Run server only (without job queue processing)'); +program.option('--only-queue', 'Pocessing job queue only (without server)'); +program.option('--quiet', 'Suppress all logs'); +program.option('--verbose', 'Enable all logs'); +program.option('--with-log-time', 'Include timestamp for each logs'); +program.option('--slow', 'Delay all requests (for debbuging)'); +program.option('--color', 'This option is a dummy for some external program\'s (e.g. forever) issue.'); +program.parse(process.argv); if (process.env.MK_ONLY_QUEUE) program.onlyQueue = true; if (process.env.NODE_ENV === 'test') program.disableClustering = true; -if (process.env.NODE_ENV === 'test') program.quiet = true; +//if (process.env.NODE_ENV === 'test') program.quiet = true; if (process.env.NODE_ENV === 'test') program.noDaemons = true; export { program }; diff --git a/src/boot/index.ts b/src/boot/index.ts index 602f6b0e48..20c53a366c 100644 --- a/src/boot/index.ts +++ b/src/boot/index.ts @@ -2,7 +2,7 @@ import * as cluster from 'cluster'; import * as chalk from 'chalk'; import Xev from 'xev'; -import Logger from '../services/logger'; +import Logger from '@/services/logger'; import { program } from '../argv'; // for typeorm diff --git a/src/boot/master.ts b/src/boot/master.ts index 473e215bac..03a28c339b 100644 --- a/src/boot/master.ts +++ b/src/boot/master.ts @@ -2,17 +2,16 @@ import * as os from 'os'; import * as cluster from 'cluster'; import * as chalk from 'chalk'; import * as portscanner from 'portscanner'; -import * as isRoot from 'is-root'; import { getConnection } from 'typeorm'; -import Logger from '../services/logger'; +import Logger from '@/services/logger'; import loadConfig from '@/config/load'; import { Config } from '@/config/types'; -import { lessThan } from '../prelude/array'; +import { lessThan } from '@/prelude/array'; import { program } from '../argv'; import { showMachineInfo } from '@/misc/show-machine-info'; import { initDb } from '../db/postgre'; -const meta = require('../meta.json'); +import * as meta from '../meta.json'; const logger = new Logger('core', 'cyan'); const bootLogger = logger.createSubLogger('boot', 'magenta', false); @@ -39,6 +38,11 @@ function greet() { bootLogger.info(`Misskey v${meta.version}`, null, true); } +function isRoot() { + // maybe process.getuid will be undefined under not POSIX environment (e.g. Windows) + return process.getuid != null && process.getuid() === 0; +} + /** * Init master process */ diff --git a/src/client/components/abuse-report-window.vue b/src/client/components/abuse-report-window.vue index d9e1c3966b..266c0d566f 100644 --- a/src/client/components/abuse-report-window.vue +++ b/src/client/components/abuse-report-window.vue @@ -10,9 +10,9 @@
- - {{ $ts.details }} - + + +
diff --git a/src/client/components/autocomplete.vue b/src/client/components/autocomplete.vue index 35cfb77301..065ee6de2e 100644 --- a/src/client/components/autocomplete.vue +++ b/src/client/components/autocomplete.vue @@ -35,6 +35,7 @@ import { twemojiSvgBase } from '@/misc/twemoji-base'; import { getStaticImageUrl } from '@client/scripts/get-static-image-url'; import { acct } from '@client/filters/user'; import * as os from '@client/os'; +import { instance } from '@client/instance'; type EmojiDef = { emoji: string; @@ -75,6 +76,36 @@ for (const x of lib) { emjdb.sort((a, b) => a.name.length - b.name.length); +//#region Construct Emoji DB +const customEmojis = instance.emojis; +const emojiDefinitions: EmojiDef[] = []; + +for (const x of customEmojis) { + emojiDefinitions.push({ + name: x.name, + emoji: `:${x.name}:`, + url: x.url, + isCustomEmoji: true + }); + + if (x.aliases) { + for (const alias of x.aliases) { + emojiDefinitions.push({ + name: alias, + aliasOf: x.name, + emoji: `:${x.name}:`, + url: x.url, + isCustomEmoji: true + }); + } + } +} + +emojiDefinitions.sort((a, b) => a.name.length - b.name.length); + +const emojiDb = markRaw(emojiDefinitions.concat(emjdb)); +//#endregion + export default defineComponent({ props: { type: { @@ -124,7 +155,6 @@ export default defineComponent({ emojis: [], items: [], select: -1, - emojiDb: [] as EmojiDef[] } }, @@ -144,36 +174,6 @@ export default defineComponent({ mounted() { this.setPosition(); - //#region Construct Emoji DB - const customEmojis = this.$instance.emojis; - const emojiDefinitions: EmojiDef[] = []; - - for (const x of customEmojis) { - emojiDefinitions.push({ - name: x.name, - emoji: `:${x.name}:`, - url: x.url, - isCustomEmoji: true - }); - - if (x.aliases) { - for (const alias of x.aliases) { - emojiDefinitions.push({ - name: alias, - aliasOf: x.name, - emoji: `:${x.name}:`, - url: x.url, - isCustomEmoji: true - }); - } - } - } - - emojiDefinitions.sort((a, b) => a.name.length - b.name.length); - - this.emojiDb = markRaw(emojiDefinitions.concat(emjdb)); - //#endregion - this.textarea.addEventListener('keydown', this.onKeydown); for (const el of Array.from(document.querySelectorAll('body *'))) { @@ -203,6 +203,13 @@ export default defineComponent({ complete(type, value) { this.$emit('done', { type, value }); this.$emit('closed'); + + if (type === 'emoji') { + let recents = this.$store.state.recentlyUsedEmojis; + recents = recents.filter((e: any) => e !== value); + recents.unshift(value); + this.$store.set('recentlyUsedEmojis', recents.splice(0, 32)); + } }, setPosition() { @@ -281,29 +288,26 @@ export default defineComponent({ } } else if (this.type == 'emoji') { if (this.q == null || this.q == '') { - this.emojis = this.emojiDb.filter(x => x.isCustomEmoji && !x.aliasOf).sort((a, b) => { - var textA = a.name.toUpperCase(); - var textB = b.name.toUpperCase(); - return (textA < textB) ? -1 : (textA > textB) ? 1 : 0; - }); + // 最近使った絵文字をサジェスト + this.emojis = this.$store.state.recentlyUsedEmojis.map(emoji => emojiDb.find(e => e.emoji == emoji)).filter(x => x != null); return; } const matched = []; const max = 30; - this.emojiDb.some(x => { + emojiDb.some(x => { if (x.name.startsWith(this.q) && !x.aliasOf && !matched.some(y => y.emoji == x.emoji)) matched.push(x); return matched.length == max; }); if (matched.length < max) { - this.emojiDb.some(x => { + emojiDb.some(x => { if (x.name.startsWith(this.q) && !matched.some(y => y.emoji == x.emoji)) matched.push(x); return matched.length == max; }); } if (matched.length < max) { - this.emojiDb.some(x => { + emojiDb.some(x => { if (x.name.includes(this.q) && !matched.some(y => y.emoji == x.emoji)) matched.push(x); return matched.length == max; }); diff --git a/src/client/components/date-separated-list.vue b/src/client/components/date-separated-list.vue index 6a0c7f29f2..fa0b6d669c 100644 --- a/src/client/components/date-separated-list.vue +++ b/src/client/components/date-separated-list.vue @@ -48,15 +48,7 @@ export default defineComponent({ render() { if (this.items.length === 0) return; - return h(this.$store.state.animation ? TransitionGroup : 'div', this.$store.state.animation ? { - class: 'sqadhkmv' + (this.noGap ? ' noGap _block' : ''), - name: 'list', - tag: 'div', - 'data-direction': this.direction, - 'data-reversed': this.reversed ? 'true' : 'false', - } : { - class: 'sqadhkmv' + (this.noGap ? ' noGap _block' : ''), - }, this.items.map((item, i) => { + const renderChildren = () => this.items.map((item, i) => { const el = this.$slots.default({ item: item })[0]; @@ -98,7 +90,19 @@ export default defineComponent({ return el; } } - })); + }); + + return h(this.$store.state.animation ? TransitionGroup : 'div', this.$store.state.animation ? { + class: 'sqadhkmv' + (this.noGap ? ' noGap' : ''), + name: 'list', + tag: 'div', + 'data-direction': this.direction, + 'data-reversed': this.reversed ? 'true' : 'false', + } : { + class: 'sqadhkmv' + (this.noGap ? ' noGap' : ''), + }, { + default: renderChildren + }); }, }); diff --git a/src/client/components/dialog.vue b/src/client/components/dialog.vue index a673e827d6..f3611f050e 100644 --- a/src/client/components/dialog.vue +++ b/src/client/components/dialog.vue @@ -14,8 +14,8 @@
- - + + diff --git a/src/client/components/drive.file.vue b/src/client/components/drive.file.vue index 3d20de23e9..b1be3d0cab 100644 --- a/src/client/components/drive.file.vue +++ b/src/client/components/drive.file.vue @@ -114,7 +114,7 @@ export default defineComponent({ if (this.selectMode) { this.$emit('chosen', this.file); } else { - os.modalMenu(this.getMenu(), ev.currentTarget || ev.target); + os.popupMenu(this.getMenu(), ev.currentTarget || ev.target); } }, diff --git a/src/client/components/drive.vue b/src/client/components/drive.vue index 16aa9dc1a8..5dadf9a11f 100644 --- a/src/client/components/drive.vue +++ b/src/client/components/drive.vue @@ -10,6 +10,7 @@ {{ folder.name }}
+
nav { - display: block; + display: flex; z-index: 2; width: 100%; padding: 0 8px; @@ -696,6 +701,10 @@ export default defineComponent({ } } } + + > .menu { + margin-left: auto; + } } > .main { diff --git a/src/client/components/emoji-picker-dialog.vue b/src/client/components/emoji-picker-dialog.vue index 9400819a1f..aa17b8b250 100644 --- a/src/client/components/emoji-picker-dialog.vue +++ b/src/client/components/emoji-picker-dialog.vue @@ -1,17 +1,17 @@ diff --git a/src/client/components/notification-setting-window.vue b/src/client/components/notification-setting-window.vue index 5f16c042bf..c33106ae15 100644 --- a/src/client/components/notification-setting-window.vue +++ b/src/client/components/notification-setting-window.vue @@ -11,16 +11,16 @@
- + {{ $ts.useGlobalSetting }} - +
{{ $ts.notificationSettingDesc }} {{ $ts.disableAll }} {{ $ts.enableAll }} - {{ $t(`_notification._types.${type}`) }} + {{ $t(`_notification._types.${type}`) }}
diff --git a/src/client/components/notification.vue b/src/client/components/notification.vue index d4e6b65c70..bce6333d98 100644 --- a/src/client/components/notification.vue +++ b/src/client/components/notification.vue @@ -62,8 +62,8 @@ import { defineComponent, markRaw } from 'vue'; import { getNoteSummary } from '@/misc/get-note-summary'; import XReactionIcon from './reaction-icon.vue'; import MkFollowButton from './follow-button.vue'; -import notePage from '../filters/note'; -import { userPage } from '../filters/user'; +import notePage from '@client/filters/note'; +import { userPage } from '@client/filters/user'; import { i18n } from '@client/i18n'; import * as os from '@client/os'; diff --git a/src/client/components/page-preview.vue b/src/client/components/page-preview.vue index cd896445a7..090c4a6a6c 100644 --- a/src/client/components/page-preview.vue +++ b/src/client/components/page-preview.vue @@ -16,7 +16,7 @@ diff --git a/src/client/components/ui/menu.vue b/src/client/components/ui/menu.vue index eb96450774..d652d9b84f 100644 --- a/src/client/components/ui/menu.vue +++ b/src/client/components/ui/menu.vue @@ -1,5 +1,5 @@