{{ $ts._mfm.sparkleDescription }}
+diff --git a/.dockerignore b/.dockerignore index 7cef84d94..9ed558a25 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,6 +2,7 @@ .github .travis .vscode +.config Dockerfile build/ built/ diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 000000000..1c6ad343e --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,32 @@ +name: Publish Docker image + +on: + release: + types: [published] + workflow_dispatch: + +jobs: + push_to_registry: + name: Push Docker image to Docker Hub + runs-on: ubuntu-latest + + steps: + - name: Check out the repo + uses: actions/checkout@v2 + - name: Docker meta + id: meta + uses: docker/metadata-action@v3 + with: + images: misskey/misskey + - name: Log in to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Build and Push to Docker Hub + uses: docker/build-push-action@v2 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.gitignore b/.gitignore index 0786295cf..f8baa4384 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,10 @@ /node_modules report.*.json +# Cypress +cypress/screenshots +cypress/videos + # config /.config/* !/.config/example.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bf00b64e..f8331854c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,28 @@ --> +## 12.91.0 (2021/09/22) + +### Improvements +- ActivityPub: リモートユーザーのDeleteアクティビティに対応 +- ActivityPub: add resolver check for blocked instance +- ActivityPub: deliverキューのメモリ使用量を削減 +- API: 管理者用アカウント削除APIを実装(/admin/accounts/delete) + - リモートユーザーの削除も可能に +- アカウントが凍結された場合に、凍結された旨を表示してからログアウトするように +- 凍結されたアカウントにログインしようとしたときに、凍結されている旨を表示するように +- リスト、アンテナタイムラインを個別ページとして分割 +- UIの改善 +- MFMにsparklesエフェクトを追加 +- 非ログイン自は更新ダイアログを出さないように +- クライアント起動時、アップデートが利用可能な場合エラー表示およびダイアログ表示しないように + +### Bugfixes +- アカウントデータのエクスポート/インポート処理ができない問題を修正 +- アンテナの既読が付かない問題を修正 +- popupで設定ページを表示すると、アカウントの削除ページにアクセスすることができない問題を修正 +- "問題が発生しました"ウィンドウを開くと☓ボタンがなくて閉じれない問題を修正 + ## 12.90.1 (2021/09/05) ### Bugfixes diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ca0a841cc..72a7dc4b1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,42 +1,44 @@ # Contribution guide -**[✨ English version available](/docs/CONTRIBUTING.en.md)** +We're glad you're interested in contributing Misskey! In this document you will find the information you need to contribute to the project. -プロジェクトに興味を持っていただきありがとうございます! このドキュメントでは、プロジェクトに貢献する際に必要な情報をまとめています。 +**ℹ️ Important:** This project uses Japanese as its major language, **but you do not need to translate and write the Issues/PRs in Japanese.** +Also, you might receive comments on your Issue/PR in Japanese, but you do not need to reply to them in Japanese as well.\ +The accuracy of translation into Japanese is not high, so it will be easier for us to understand if you write it in the original language. +It will also allow the reader to use the translation tool of their preference if necessary. ## Issues -Issueを作成する前に、以下をご確認ください: -- 重複を防ぐため、既に同様の内容のIssueが作成されていないか検索してから新しいIssueを作ってください。 -- Issueを質問に使わないでください。 - - Issueは、要望、提案、問題の報告にのみ使用してください。 - - 質問は、[Misskey Forum](https://forum.misskey.io/)や[Discord](https://discord.gg/Wp8gVStHW3)でお願いします。 +Before creating an issue, please check the following: +- To avoid duplication, please search for similar issues before creating a new issue. +- Do not use Issues as a question. + - Issues should only be used to feature requests, suggestions, and report problems. + - Please ask questions in the [Misskey Forum](https://forum.misskey.io/) or [Discord](https://discord.gg/Wp8gVStHW3). -## 実装をする前に -機能追加やバグ修正をしたいときは、まずIssueで設計、方針をレビューしてもらいましょう(無い場合は作ってください)。このステップがないと、せっかく実装してもPRがマージされない可能性が高くなります。 +## Before implementation +When you want to add a feature or fix a bug, **first have the design and policy reviewed in an Issue** (if it is not there, please make one). Without this step, there is a high possibility that the PR will not be merged even if it is implemented. -また、実装に取り掛かるときは当該Issueに自分をアサインしてください(自分でできない場合は他メンバーに自分をアサインしてもらうようお願いしてください)。 -自分が実装するという意思表示をすることで、作業がバッティングするのを防ぎます。 +Also, when you start implementation, assign yourself to the Issue (if you cannot do it yourself, ask another member to assign you). By expressing your intention to work the Issue, you can prevent conflicts in the work. -## PRの作成 -PRありがとうございます! PRを作成する前に、以下をご確認ください: -- 可能であればタイトルに、以下で示すようなPRの種類が分かるキーワードをプリフィクスしてください。 - - `fix` / `refactor` / `feat` / `enhance` / `perf` / `chore` など - - また、PRの粒度が適切であることを確認してください。ひとつのPRに複数の種類の変更や関心を含めることは避けてください。 -- このPRによって解決されるIssueがある場合は、そのIssueへの参照を本文内に含めてください。 -- [`CHANGELOG.md`](/CHANGELOG.md)に変更点を追記してください。リファクタリングなど、利用者に影響を与えない変更についてはこの限りではありません。 -- この変更により新たに作成、もしくは更新すべきドキュメントがないか確認してください。 -- 機能追加やバグ修正をした場合は、可能であればテストケースを追加してください。 -- テスト、Lintが通っていることを予め確認してください。 - - `npm run test`、`npm run lint`でぞれぞれ実施可能です。[詳細](#testing) -- UIに変更がある場合はスクリーンショットを本文内に添付してください。 - -ご協力ありがとうございます🤗 - -## ブランチ +## Well-known branches - **`master`** branch is tracking the latest release and used for production purposes. - **`develop`** branch is where we work for the next release. - - PRを作成するときは、基本的にこのブランチに向けてください。 + - When you create a PR, basically target it to this branch. - **`l10n_develop`** branch is reserved for localization management. +## Creating a PR +Thank you for your PR! Before creating a PR, please check the following: +- If possible, prefix the title with a keyword that identifies the type of this PR, as shown below. + - `fix` / `refactor` / `feat` / `enhance` / `perf` / `chore` etc + - Also, make sure that the granularity of this PR is appropriate. Please do not include more than one type of change or interest in a single PR. +- If there is an Issue which will be resolved by this PR, please include a reference to the Issue in the text. +- Please add the summary of the changes to [`CHANGELOG.md`](/CHANGELOG.md). However, this is not necessary for changes that do not affect the users, such as refactoring. +- Check if there are any documents that need to be created or updated due to this change. +- If you have added a feature or fixed a bug, please add a test case if possible. +- Please make sure that tests and Lint are passed in advance. + - You can run it with `npm run test` and `npm run lint`. [See more info](#testing) +- If this PR includes UI changes, please attach a screenshot in the text. + +Thanks for your cooperation 🤗 + ## Localization (l10n) Misskey uses [Crowdin](https://crowdin.com/project/misskey) for localization management. You can improve our translations with your Crowdin account. diff --git a/README.md b/README.md index 816765af6..0aae1b332 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,12 @@ Related projects - [misskey.js](https://github.com/misskey-dev/misskey.js) - Misskey SDK for JavaScript - [mfm.js](https://github.com/misskey-dev/mfm.js) - MFM parser +Sponsors +---------------------------------------------------------------- +
+ :heart: Backers ---------------------------------------------------------------- diff --git a/assets/client/sparkle-spritesheet.png b/assets/client/sparkle-spritesheet.png new file mode 100644 index 000000000..0defccaf0 Binary files /dev/null and b/assets/client/sparkle-spritesheet.png differ diff --git a/cypress/integration/basic.js b/cypress/integration/basic.js index 69d59bc2c..182f70ff6 100644 --- a/cypress/integration/basic.js +++ b/cypress/integration/basic.js @@ -1,10 +1,14 @@ -describe('Basic', () => { - before(() => { - cy.request('POST', '/api/reset-db'); +describe('Before setup instance', () => { + beforeEach(() => { + cy.request('POST', '/api/reset-db').as('reset'); + cy.get('@reset').its('status').should('equal', 204); + cy.reload(true); }); - beforeEach(() => { - cy.reload(true); + afterEach(() => { + // テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。 + // waitを入れることでそれを防止できる + cy.wait(1000); }); it('successfully loads', () => { @@ -14,56 +18,172 @@ describe('Basic', () => { it('setup instance', () => { cy.visit('/'); + cy.intercept('POST', '/api/admin/accounts/create').as('signup'); + 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(); + + // なぜか動かない + //cy.wait('@signup').should('have.property', 'response.statusCode'); + cy.wait('@signup'); + }); +}); + +describe('After setup instance', () => { + beforeEach(() => { + cy.request('POST', '/api/reset-db').as('reset'); + cy.get('@reset').its('status').should('equal', 204); + cy.reload(true); + + // インスタンス初期セットアップ + cy.request('POST', '/api/admin/accounts/create', { + username: 'admin', + password: 'pass', + }).its('body').as('admin'); + + cy.get('@admin'); + }); + + afterEach(() => { + // テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。 + // waitを入れることでそれを防止できる + cy.wait(1000); + }); + + it('successfully loads', () => { + cy.visit('/'); }); it('signup', () => { - cy.visit('/'); + cy.visit('/'); + + cy.intercept('POST', '/api/signup').as('signup'); 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(); + + cy.wait('@signup'); + }); +}); + +describe('After user signup', () => { + beforeEach(() => { + cy.request('POST', '/api/reset-db').as('reset'); + cy.get('@reset').its('status').should('equal', 204); + cy.reload(true); + + // インスタンス初期セットアップ + cy.request('POST', '/api/admin/accounts/create', { + username: 'admin', + password: 'pass', + }).its('body').as('admin'); + + cy.get('@admin').then(() => { + // ユーザー作成 + cy.request('POST', '/api/signup', { + username: 'alice', + password: 'alice1234', + }).its('body').as('alice'); + }); + + cy.get('@alice'); + }); + + afterEach(() => { + // テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。 + // waitを入れることでそれを防止できる + cy.wait(1000); + }); + + it('successfully loads', () => { + cy.visit('/'); }); it('signin', () => { - cy.visit('/'); + cy.visit('/'); + + cy.intercept('POST', '/api/signin').as('signin'); 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}'); + + cy.wait('@signin'); + }); + + it('suspend', function() { + cy.request('POST', '/api/admin/suspend-user', { + i: this.admin.token, + userId: this.alice.id, + }); + + cy.visit('/'); + + cy.get('[data-cy-signin]').click(); + cy.get('[data-cy-signin-username] input').type('alice'); + cy.get('[data-cy-signin-password] input').type('alice1234{enter}'); + + cy.contains('アカウントが凍結されています'); + }); +}); + +describe('After user singed in', () => { + beforeEach(() => { + cy.request('POST', '/api/reset-db').as('reset'); + cy.get('@reset').its('status').should('equal', 204); + cy.reload(true); + + // インスタンス初期セットアップ + cy.request('POST', '/api/admin/accounts/create', { + username: 'admin', + password: 'pass', + }).its('body').as('admin'); + + cy.get('@admin').then(() => { + // ユーザー作成 + cy.request('POST', '/api/signup', { + username: 'alice', + password: 'alice1234', + }).its('body').as('alice'); + }); + + cy.get('@alice').then(() => { + cy.visit('/'); + + cy.intercept('POST', '/api/signin').as('signin'); + + cy.get('[data-cy-signin]').click(); + cy.get('[data-cy-signin-username] input').type('alice'); + cy.get('[data-cy-signin-password] input').type('alice1234{enter}'); + + cy.wait('@signin').as('signedIn'); + }); + + cy.get('@signedIn'); + }); + + afterEach(() => { + // テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。 + // waitを入れることでそれを防止できる + cy.wait(1000); + }); + + it('successfully loads', () => { + cy.visit('/'); }); 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: 投稿した文字列が画面内にあるか(=タイムラインに流れてきたか)のテスト + cy.contains('Hello, Misskey!'); }); }); diff --git a/docker-compose.yml b/docker-compose.yml index df648d291..717b756c7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,6 +15,7 @@ services: - external_network volumes: - ./files:/misskey/files + - ./.config:/misskey/.config:ro redis: restart: always diff --git a/docs/CONTRIBUTING.en.md b/docs/CONTRIBUTING.en.md deleted file mode 100644 index 21f2b591f..000000000 --- a/docs/CONTRIBUTING.en.md +++ /dev/null @@ -1,66 +0,0 @@ -# Contribution guide -:v: Thanks for your contributions :v: - -**ℹ️ Important:** This project uses Japanese as its major language, **but you do not need to translate and write the Issues/PRs in Japanese.** -Also, you might receive comments on your Issue/PR in Japanese, but you do not need to reply to them in Japanese as well.\ -The accuracy of translation into Japanese is not high, so it will be easier for us to understand if you write it in the original language. -It will also allow the reader to use the translation tool of their preference if necessary. - -## Issues -Before creating an issue, please check the following: -- To avoid duplication, please search for similar issues before creating a new issue. -- Do not use Issues as a question. - - Issues should only be used to feature requests, suggestions, and report problems. - - Please ask questions in the [Misskey Forum](https://forum.misskey.io/) or [Discord](https://discord.gg/Wp8gVStHW3). - -## Before implementation -When you want to add a feature or fix a bug, first have the design and policy reviewed in an Issue (if it is not there, please make one). Without this step, there is a high possibility that the PR will not be merged even if it is implemented. - -Also, when you start implementation, assign yourself to the Issue (if you cannot do it yourself, ask another member to assign you). By expressing your intention to work the Issue, you can prevent conflicts in the work. - -## Well-known branches -- **`master`** branch is tracking the latest release and used for production purposes. -- **`develop`** branch is where we work for the next release. - - When you create a PR, basically target it to this branch. -- **`l10n_develop`** branch is reserved for localization management. - -## Creating a PR -Thank you for your PR! Before creating a PR, please check the following: -- If possible, prefix the title with a keyword that identifies the type of this PR, as shown below. - - `fix` / `refactor` / `feat` / `enhance` / `perf` / `chore` etc - - Also, make sure that the granularity of this PR is appropriate. Please do not include more than one type of change or interest in a single PR. -- If there is an Issue which will be resolved by this PR, please include a reference to the Issue in the text. -- Please add the summary of the changes to [`CHANGELOG.md`](/CHANGELOG.md). However, this is not necessary for changes that do not affect the users, such as refactoring. -- Check if there are any documents that need to be created or updated due to this change. -- If you have added a feature or fixed a bug, please add a test case if possible. -- Please make sure that tests and Lint are passed in advance. - - You can run it with `npm run test` and `npm run lint`. [See more info](#testing) -- If this PR includes UI changes, please attach a screenshot in the text. - -Thanks for your cooperation 🤗 - -## Localization (l10n) -Misskey uses [Crowdin](https://crowdin.com/project/misskey) for localization management. -You can improve our translations with your Crowdin account. -Your changes in Crowdin are automatically submitted as a PR (with the title "New Crowdin translations") to the repository. -The owner [@syuilo](https://github.com/syuilo) merges the PR into the develop branch before the next release. - -If your language is not listed in Crowdin, please open an issue. - -![Crowdin](https://d322cqt584bo4o.cloudfront.net/misskey/localized.svg) - -## Testing -- Test codes are located in [`/test`](/test). - -### Run test -``` -npm run 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 -``` - -### e2e tests -TODO diff --git a/docs/push-docker-hub.ja.md b/docs/push-docker-hub.ja.md new file mode 100644 index 000000000..923e4c16e --- /dev/null +++ b/docs/push-docker-hub.ja.md @@ -0,0 +1,28 @@ +GitHub Actionsを使用してDocker Hubへpushする方法 +================================================================ + +[/.github/workflows/docker.yml](/.github/workflows/docker.yml) に +GitHub ActionによりDocker Hubへpushするワークフローが記述されています。 + +オリジナルリポジトリでは、リリースされたタイミングで `latest`, `<リリース名>` それぞれのタグでDocker Hubにpushされます。 +※ Docker Hub に`<ブランチ名>`のようなタグがあるかもしれませんが、こちらは自動push対象ではありません。 + +Fork先でこのワークフローを実行すると失敗します。 + +以下では、Fork先で自分のDocker Hubリポジトリにpushするようにする方法を記述します。 + +## 自分のDocker Hubリポジトリにpushするように設定する方法 + +1. Docker Hubでリポジトリを作成します。 +2. ワークフローファイルの [images](https://github.com/misskey-dev/misskey/blob/53f3b779bf16abcda4f6e026c51384f3b8fbcc62/.github/workflows/docker.yml#L20) を作成したリポジトリに置き換えます。 +3. GitHubにて [暗号化されたシークレット](https://docs.github.com/ja/actions/reference/encrypted-secrets#creating-encrypted-secrets-for-a-repository) を作成します。 + 作成が必要なのは `DOCKER_USERNAME` と `DOCKER_PASSWORD` で、それぞれDocker Hubのユーザーとパスワードになります。 + +## pushする方法 + +上記設定によりリリース時に自動的にDocker Hubにpushされるようになります。 +具体的には、GitHubのリリース機能でリリースしたタイミングで `latest`, `<リリース名>` それぞれのタグでDocker Hubにpushされます。 + +また、GitHub上から手動でpushすることも出来ます。 +それを行うには、Actions => Publish Docker image => Run workflow からbranchを選択してワークフローを実行します。 +ただし、この場合作成されるタグは`<ブランチ名>`になります。 diff --git a/locales/de-DE.yml b/locales/de-DE.yml index c5ce70dd6..8f7a4c24e 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -529,6 +529,8 @@ removeAllFollowing: "Allen gefolgten Benutzern entfolgen" 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." +yourAccountSuspendedTitle: "Dieses Benutzerkonto ist gesperrt" +yourAccountSuspendedDescription: "Dieses Benutzerkonto wurde gesperrt, da es gegen die Nutzungsbedingungen dieses Servers verstoßen hat. Trete mit dem Betreiber in Kontakt, falls du weitere Details erfahren möchtest. Bitte erstelle kein neues Benutzerkonto." menu: "Menü" divider: "Trenner" addItem: "Element hinzufügen" @@ -748,7 +750,7 @@ switch: "Wechseln" noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert." noBotProtectionWarning: "Bot-Schutz ist nicht konfiguriert." configure: "Konfigurieren" -postToGallery: "Beitrag zu Galerie hinzufügen" +postToGallery: "Neuen Galerie-Beitrag erstellen" gallery: "Galerie" recentPosts: "Neue Beiträge" popularPosts: "Beliebte Beiträge" @@ -874,19 +876,19 @@ _mfm: flip: "Spiegelung" flipDescription: "Inhalt horizontal oder vertikal gespiegelt anzeigen." jelly: "Animation (Dehnen)" - jellyDescription: "Verleiht eine sich dehnende Animation." + jellyDescription: "Verleiht dem Inhalt eine sich dehnende Animation." tada: "Animation (Tada)" tadaDescription: "Verleiht eine Animation mit \"Tada!\"-Gefühl" jump: "Animation (Sprung)" - jumpDescription: "Verleiht eine springende Animation." + jumpDescription: "Verleiht dem Inhalt eine springende Animation." bounce: "Animation (Federn)" - bounceDescription: "Verleiht eine federnde Animation." + bounceDescription: "Verleiht dem Inhalt eine federnde Animation." shake: "Animation (Zittern)" - shakeDescription: "Verleiht eine zitternde Animation." + shakeDescription: "Verleiht dem Inhalt eine zitternde Animation." twitch: "Animation (Zucken)" - twitchDescription: "Verleiht eine sehr stark zuckende Animation." + twitchDescription: "Verleiht dem Inhalt eine sehr stark zuckende Animation." spin: "Animation (Rotieren)" - spinDescription: "Verleiht eine rotierende Animation." + spinDescription: "Verleiht dem Inhalt eine rotierende Animation." x2: "Groß" x2Description: "Inhalte größer anzeigen." x3: "Sehr groß" @@ -1125,6 +1127,10 @@ _permissions: "write:user-groups": "Benutzergruppen bearbeiten oder löschen" "read:channels": "Kanäle lesen" "write:channels": "Kanäle bedienen" + "read:gallery": "Beiträge deiner Galerie lesen" + "write:gallery": "Deine Galerie bearbeiten" + "read:gallery-likes": "Liste deiner mit \"Gefällt mir\" markierten Galerie-Beiträge lesen" + "write:gallery-likes": "Liste deiner mit \"Gefällt mir\" markierten Galerie-Beiträge bearbeiten" _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?" diff --git a/locales/en-US.yml b/locales/en-US.yml index 5d33e35f5..4e843ce06 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -1,7 +1,7 @@ --- _lang_: "English" headlineMisskey: "A network connected by notes" -introMisskey: "Welcome! Misskey is an open source, decentralized microblogging service.\nCreate \"notes\" to share 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! 🚀" +introMisskey: "Welcome! Misskey is an open source, decentralized microblogging service.\nCreate \"notes\" to share what your thoughts with everyone around you. 📡\nWith \"reactions\", you can also quickly express your feelings about everyone's notes. 👍\nLet's explore a new world! 🚀" monthAndDay: "{month}/{day}" search: "Search" notifications: "Notifications" @@ -92,7 +92,7 @@ unfollow: "Unfollow" followRequestPending: "Pending follow request" enterEmoji: "Enter an emoji" renote: "Renote" -unrenote: "Take back Renote" +unrenote: "Take back renote" renoted: "Renoted." cantRenote: "This post can't be renoted." cantReRenote: "A renote can't be renoted." @@ -136,7 +136,7 @@ settingGuide: "Recommended settings" cacheRemoteFiles: "Cache remote files" cacheRemoteFilesDescription: "When this setting is disabled, remote files are loaded directly from the remote instance. Disabling this will decrease storage usage, but increase traffic, as thumbnails will not be generated." flagAsBot: "Mark this account as 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." +flagAsBotDescription: "Enable this option if this account is controlled by a program. If enabled, it will act as a flag for other developers to prevent endless interaction chains with other bots and adjust Misskey's internal systems to treat this account as a bot." 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" @@ -199,7 +199,7 @@ done: "Done" processing: "Processing..." preview: "Preview" default: "Default" -noCustomEmojis: "There are no emojis" +noCustomEmojis: "There are no emoji" noJobs: "There are no jobs" federating: "Federating" blocked: "Blocked" @@ -213,7 +213,7 @@ instanceFollowers: "Followers of instance" instanceUsers: "Users of this instance" changePassword: "Change password" security: "Security" -retypedNotMatch: "The inputs does not match." +retypedNotMatch: "The inputs do not match." currentPassword: "Current password" newPassword: "New password" newPasswordRetype: "Retype new password" @@ -429,7 +429,7 @@ invitationCode: "Invitation code" checking: "Checking..." available: "Available" unavailable: "Not available" -usernameInvalidFormat: "You can use upper- and lowercase letters, numbers as well as underscores." +usernameInvalidFormat: "You can use upper- and lowercase letters, numbers, and underscores." tooShort: "Too short" tooLong: "Too long" weakPassword: "Weak password" @@ -445,7 +445,7 @@ language: "Language" uiLanguage: "User interface language" groupInvited: "You've been invited to a group" aboutX: "About {x}" -useOsNativeEmojis: "Use OS native Emojis" +useOsNativeEmojis: "Use OS native Emoji" youHaveNoGroups: "You have no groups" joinOrCreateGroup: "Get invited to a group or create your own." noHistory: "No history available" @@ -482,7 +482,7 @@ objectStorageBaseUrlDesc: "URL used as reference. Specify the URL of your CDN or objectStorageBucket: "Bucket" objectStorageBucketDesc: "Please specify the bucket name used at your provider." objectStoragePrefix: "Prefix" -objectStoragePrefixDesc: "Files will stored under directories with this prefix." +objectStoragePrefixDesc: "Files will be stored under directories with this prefix." objectStorageEndpoint: "Endpoint" objectStorageEndpointDesc: "Leave this empty if you are using AWS S3, otherwise specify the endpoint as '{{ $ts._mfm.sparkleDescription }}
+