Merge branch 'develop' into enh-14810
This commit is contained in:
commit
9d32460e0b
|
@ -9,6 +9,10 @@ on:
|
||||||
paths:
|
paths:
|
||||||
- packages/misskey-js/**
|
- packages/misskey-js/**
|
||||||
- .github/workflows/api-misskey-js.yml
|
- .github/workflows/api-misskey-js.yml
|
||||||
|
|
||||||
|
env:
|
||||||
|
COREPACK_DEFAULT_TO_LATEST: 0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
report:
|
report:
|
||||||
|
|
||||||
|
@ -21,7 +25,7 @@ jobs:
|
||||||
- run: corepack enable
|
- run: corepack enable
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4.0.4
|
uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|
|
@ -14,7 +14,7 @@ jobs:
|
||||||
- name: Checkout head
|
- name: Checkout head
|
||||||
uses: actions/checkout@v4.1.1
|
uses: actions/checkout@v4.1.1
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4.0.4
|
uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ jobs:
|
||||||
|
|
||||||
- name: setup node
|
- name: setup node
|
||||||
id: setup-node
|
id: setup-node
|
||||||
uses: actions/setup-node@v4.0.4
|
uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: pnpm
|
cache: pnpm
|
||||||
|
|
|
@ -9,6 +9,10 @@ on:
|
||||||
paths:
|
paths:
|
||||||
- packages/backend/**
|
- packages/backend/**
|
||||||
- .github/workflows/get-api-diff.yml
|
- .github/workflows/get-api-diff.yml
|
||||||
|
|
||||||
|
env:
|
||||||
|
COREPACK_DEFAULT_TO_LATEST: 0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
get-from-misskey:
|
get-from-misskey:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
@ -33,7 +37,7 @@ jobs:
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4.0.4
|
uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|
|
@ -28,6 +28,10 @@ on:
|
||||||
- packages/misskey-reversi/**
|
- packages/misskey-reversi/**
|
||||||
- packages/shared/eslint.config.js
|
- packages/shared/eslint.config.js
|
||||||
- .github/workflows/lint.yml
|
- .github/workflows/lint.yml
|
||||||
|
|
||||||
|
env:
|
||||||
|
COREPACK_DEFAULT_TO_LATEST: 0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
pnpm_install:
|
pnpm_install:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
@ -37,7 +41,7 @@ jobs:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
- uses: pnpm/action-setup@v4
|
- uses: pnpm/action-setup@v4
|
||||||
- uses: actions/setup-node@v4.0.4
|
- uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
@ -68,14 +72,14 @@ jobs:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
- uses: pnpm/action-setup@v4
|
- uses: pnpm/action-setup@v4
|
||||||
- uses: actions/setup-node@v4.0.4
|
- uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
- run: corepack enable
|
- run: corepack enable
|
||||||
- run: pnpm i --frozen-lockfile
|
- run: pnpm i --frozen-lockfile
|
||||||
- name: Restore eslint cache
|
- name: Restore eslint cache
|
||||||
uses: actions/cache@v4.1.0
|
uses: actions/cache@v4.2.0
|
||||||
with:
|
with:
|
||||||
path: ${{ env.eslint-cache-path }}
|
path: ${{ env.eslint-cache-path }}
|
||||||
key: eslint-${{ env.eslint-cache-version }}-${{ matrix.workspace }}-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ github.ref_name }}-${{ github.sha }}
|
key: eslint-${{ env.eslint-cache-version }}-${{ matrix.workspace }}-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ github.ref_name }}-${{ github.sha }}
|
||||||
|
@ -98,7 +102,7 @@ jobs:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
- uses: pnpm/action-setup@v4
|
- uses: pnpm/action-setup@v4
|
||||||
- uses: actions/setup-node@v4.0.4
|
- uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|
|
@ -9,6 +9,10 @@ on:
|
||||||
paths:
|
paths:
|
||||||
- locales/**
|
- locales/**
|
||||||
- .github/workflows/locale.yml
|
- .github/workflows/locale.yml
|
||||||
|
|
||||||
|
env:
|
||||||
|
COREPACK_DEFAULT_TO_LATEST: 0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
locale_verify:
|
locale_verify:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
@ -19,7 +23,7 @@ jobs:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
- uses: pnpm/action-setup@v4
|
- uses: pnpm/action-setup@v4
|
||||||
- uses: actions/setup-node@v4.0.4
|
- uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|
|
@ -6,6 +6,9 @@ on:
|
||||||
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
|
env:
|
||||||
|
COREPACK_DEFAULT_TO_LATEST: 0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
publish-misskey-js:
|
publish-misskey-js:
|
||||||
name: Publish misskey-js
|
name: Publish misskey-js
|
||||||
|
@ -26,7 +29,7 @@ jobs:
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4.0.4
|
uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|
|
@ -13,6 +13,9 @@ on:
|
||||||
# This is a waste of chromatic build quota, so we don't run storybook CI on pull requests targets master.
|
# This is a waste of chromatic build quota, so we don't run storybook CI on pull requests targets master.
|
||||||
- master
|
- master
|
||||||
|
|
||||||
|
env:
|
||||||
|
COREPACK_DEFAULT_TO_LATEST: 0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
# chromatic is not likely to be available for fork repositories, so we disable for fork repositories.
|
# chromatic is not likely to be available for fork repositories, so we disable for fork repositories.
|
||||||
|
@ -43,7 +46,7 @@ jobs:
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
- name: Use Node.js 20.x
|
- name: Use Node.js 20.x
|
||||||
uses: actions/setup-node@v4.0.4
|
uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|
|
@ -18,6 +18,10 @@ on:
|
||||||
- packages/misskey-js/**
|
- packages/misskey-js/**
|
||||||
- .github/workflows/test-backend.yml
|
- .github/workflows/test-backend.yml
|
||||||
- .github/misskey/test.yml
|
- .github/misskey/test.yml
|
||||||
|
|
||||||
|
env:
|
||||||
|
COREPACK_DEFAULT_TO_LATEST: 0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
unit:
|
unit:
|
||||||
name: Unit tests (backend)
|
name: Unit tests (backend)
|
||||||
|
@ -62,7 +66,7 @@ jobs:
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4.0.4
|
uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
@ -110,7 +114,7 @@ jobs:
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4.0.4
|
uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|
|
@ -15,6 +15,9 @@ on:
|
||||||
- packages/misskey-js/**
|
- packages/misskey-js/**
|
||||||
- .github/workflows/test-federation.yml
|
- .github/workflows/test-federation.yml
|
||||||
|
|
||||||
|
env:
|
||||||
|
COREPACK_DEFAULT_TO_LATEST: 0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
name: Federation test
|
name: Federation test
|
||||||
|
@ -44,7 +47,7 @@ jobs:
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4.0.3
|
uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|
|
@ -22,6 +22,10 @@ on:
|
||||||
- packages/backend/**
|
- packages/backend/**
|
||||||
- .github/workflows/test-frontend.yml
|
- .github/workflows/test-frontend.yml
|
||||||
- .github/misskey/test.yml
|
- .github/misskey/test.yml
|
||||||
|
|
||||||
|
env:
|
||||||
|
COREPACK_DEFAULT_TO_LATEST: 0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
vitest:
|
vitest:
|
||||||
name: Unit tests (frontend)
|
name: Unit tests (frontend)
|
||||||
|
@ -38,7 +42,7 @@ jobs:
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4.0.4
|
uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
@ -94,7 +98,7 @@ jobs:
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4.0.4
|
uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|
|
@ -14,6 +14,10 @@ on:
|
||||||
paths:
|
paths:
|
||||||
- packages/misskey-js/**
|
- packages/misskey-js/**
|
||||||
- .github/workflows/test-misskey-js.yml
|
- .github/workflows/test-misskey-js.yml
|
||||||
|
|
||||||
|
env:
|
||||||
|
COREPACK_DEFAULT_TO_LATEST: 0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
name: Unit tests (misskey.js)
|
name: Unit tests (misskey.js)
|
||||||
|
@ -32,7 +36,7 @@ jobs:
|
||||||
- run: corepack enable
|
- run: corepack enable
|
||||||
|
|
||||||
- name: Setup Node.js ${{ matrix.node-version }}
|
- name: Setup Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4.0.4
|
uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|
|
@ -9,6 +9,7 @@ on:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
NODE_ENV: production
|
NODE_ENV: production
|
||||||
|
COREPACK_DEFAULT_TO_LATEST: 0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
production:
|
production:
|
||||||
|
@ -26,7 +27,7 @@ jobs:
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4.0.4
|
uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|
|
@ -12,6 +12,10 @@ on:
|
||||||
paths:
|
paths:
|
||||||
- packages/backend/**
|
- packages/backend/**
|
||||||
- .github/workflows/validate-api-json.yml
|
- .github/workflows/validate-api-json.yml
|
||||||
|
|
||||||
|
env:
|
||||||
|
COREPACK_DEFAULT_TO_LATEST: 0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
validate-api-json:
|
validate-api-json:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
@ -27,7 +31,7 @@ jobs:
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4.0.4
|
uses: actions/setup-node@v4.1.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|
41
CHANGELOG.md
41
CHANGELOG.md
|
@ -1,3 +1,36 @@
|
||||||
|
## Unreleased
|
||||||
|
|
||||||
|
### General
|
||||||
|
-
|
||||||
|
|
||||||
|
### Client
|
||||||
|
- Fix: デッキでリンクをダブルクリックすると、ウィンドウが2枚開いてしまう問題を修正
|
||||||
|
|
||||||
|
### Server
|
||||||
|
-
|
||||||
|
|
||||||
|
|
||||||
|
## 2025.2.0
|
||||||
|
|
||||||
|
### General
|
||||||
|
- Fix: Docker のビルドに失敗する問題を修正
|
||||||
|
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/883)
|
||||||
|
|
||||||
|
### Client
|
||||||
|
- Fix: パスキーでパスワードレスログインが出来ない問題を修正
|
||||||
|
- Fix: 一部環境でセンシティブなファイルを含むノートの非表示が効かない問題
|
||||||
|
- Fix: データセーバー有効時にもユーザーページの「ファイル」タブで画像が読み込まれてしまう問題を修正
|
||||||
|
- Fix: MFMの `sparkle` エフェクトが正しく表示されない問題を修正
|
||||||
|
- Fix: ページのURLにスラッシュが含まれている場合にページが正しく表示されない問題を修正
|
||||||
|
- Fix: デッキのプロファイルが新規作成できない問題を修正
|
||||||
|
- Fix: セキュリティに関する修正
|
||||||
|
- ローカライゼーションの更新
|
||||||
|
- Playが実装されたため、ページ機能の「ソースを見る」は削除されました
|
||||||
|
|
||||||
|
### Server
|
||||||
|
- Enhance: ページのURLに使用可能な文字を限定するように
|
||||||
|
- Fix: 個別お知らせページのmetaタグ出力の条件が間違っていたのを修正
|
||||||
|
|
||||||
## 2025.1.0
|
## 2025.1.0
|
||||||
|
|
||||||
### Note
|
### Note
|
||||||
|
@ -5,6 +38,7 @@
|
||||||
- 新しい設定項目"fulltextSearch.provider"が追加されました. sqlLike, sqlPgroonga, meilisearchのいずれかを設定出来ます.
|
- 新しい設定項目"fulltextSearch.provider"が追加されました. sqlLike, sqlPgroonga, meilisearchのいずれかを設定出来ます.
|
||||||
- すでにMeilisearchをお使いの場合、 **"fulltextSearch.provider"を"meilisearch"に設定する必要** があります.
|
- すでにMeilisearchをお使いの場合、 **"fulltextSearch.provider"を"meilisearch"に設定する必要** があります.
|
||||||
- 詳細は #14730 および `.config/example.yml` または `.config/docker_example.yml`の'Fulltext search configuration'をご参照願います.
|
- 詳細は #14730 および `.config/example.yml` または `.config/docker_example.yml`の'Fulltext search configuration'をご参照願います.
|
||||||
|
- 【開発者向け】従来の開発モードでHMRが機能しない問題が修正されたため、バックエンド・フロントエンド分離型の開発モードが削除されました。開発環境においてconfigの変更が必要となる可能性があります。
|
||||||
|
|
||||||
### General
|
### General
|
||||||
- Feat: カスタム絵文字管理画面をリニューアル #10996
|
- Feat: カスタム絵文字管理画面をリニューアル #10996
|
||||||
|
@ -22,6 +56,7 @@
|
||||||
(Based on https://github.com/Otaku-Social/maniakey/pull/14)
|
(Based on https://github.com/Otaku-Social/maniakey/pull/14)
|
||||||
- Enhance: AiScriptの拡張API関数において引数の型チェックをより厳格に
|
- Enhance: AiScriptの拡張API関数において引数の型チェックをより厳格に
|
||||||
- Enhance: クエリパラメータでuiを一時的に変更できるように #15240
|
- Enhance: クエリパラメータでuiを一時的に変更できるように #15240
|
||||||
|
- Enhance: リモート絵文字のインポート時に詳細を確認できるように #15336
|
||||||
- Fix: 画面サイズが変わった際にナビゲーションバーが自動で折りたたまれない問題を修正
|
- Fix: 画面サイズが変わった際にナビゲーションバーが自動で折りたたまれない問題を修正
|
||||||
- Fix: サーバー情報メニューに区切り線が不足していたのを修正
|
- Fix: サーバー情報メニューに区切り線が不足していたのを修正
|
||||||
- Fix: ノートがログインしているユーザーしか見れない場合にログインダイアログを閉じるとその後の動線がなくなる問題を修正
|
- Fix: ノートがログインしているユーザーしか見れない場合にログインダイアログを閉じるとその後の動線がなくなる問題を修正
|
||||||
|
@ -36,6 +71,7 @@
|
||||||
(Cherry-picked from https://github.com/TeamNijimiss/misskey/commit/800359623e41a662551d774de15b0437b6849bb4)
|
(Cherry-picked from https://github.com/TeamNijimiss/misskey/commit/800359623e41a662551d774de15b0437b6849bb4)
|
||||||
- Fix: ノート作成画面でファイルの添付可能個数を超えてもノートボタンが押せていた問題を修正
|
- Fix: ノート作成画面でファイルの添付可能個数を超えてもノートボタンが押せていた問題を修正
|
||||||
- Fix: 「アカウントを管理」画面で、ユーザー情報の取得に失敗したアカウント(削除されたアカウントなど)が表示されない問題を修正
|
- Fix: 「アカウントを管理」画面で、ユーザー情報の取得に失敗したアカウント(削除されたアカウントなど)が表示されない問題を修正
|
||||||
|
- Fix: MacOSでChrome系ブラウザを使用している場合に、Misskeyを閉じた際に他のタブのオーディオ機能と干渉する問題を修正
|
||||||
- Fix: 言語データのキャッシュ状況によっては、埋め込みウィジェットが正しく起動しない問題を修正
|
- Fix: 言語データのキャッシュ状況によっては、埋め込みウィジェットが正しく起動しない問題を修正
|
||||||
- Fix: 「削除して編集」でノートの引用を解除出来なかった問題を修正( #14476 )
|
- Fix: 「削除して編集」でノートの引用を解除出来なかった問題を修正( #14476 )
|
||||||
- Fix: RSSウィジェットが正しく表示されない問題を修正
|
- Fix: RSSウィジェットが正しく表示されない問題を修正
|
||||||
|
@ -45,7 +81,9 @@
|
||||||
(Cherry-picked from https://github.com/yojo-art/cherrypick/pull/153)
|
(Cherry-picked from https://github.com/yojo-art/cherrypick/pull/153)
|
||||||
- Fix: 非ログイン時のサーバー概要画面のメニューボタンが押せないことがあるのを修正
|
- Fix: 非ログイン時のサーバー概要画面のメニューボタンが押せないことがあるのを修正
|
||||||
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/656)
|
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/656)
|
||||||
- Fix: デッキでリンクをダブルクリックすると、ウィンドウが2枚開いてしまう問題を修正
|
- Fix: URLにはじめから`#pswp`が含まれている場合に画像ビューワーがブラウザの戻るボタンで閉じられない問題を修正
|
||||||
|
- Fix: ロール作成画面で設定できるアイコンデコレーションの最大取付個数を16に制限
|
||||||
|
- Fix: Firefox Nightlyなどでアイコンが読み込めない問題を修正
|
||||||
|
|
||||||
### Server
|
### Server
|
||||||
- Enhance: pg_bigmが利用できるよう、ノートの検索をILIKE演算子でなくLIKE演算子でLOWER()をかけたテキストに対して行うように
|
- Enhance: pg_bigmが利用できるよう、ノートの検索をILIKE演算子でなくLIKE演算子でLOWER()をかけたテキストに対して行うように
|
||||||
|
@ -56,6 +94,7 @@
|
||||||
- Fix: ユーザーのプロフィール画面をアドレス入力などで直接表示した際に概要タブの描画に失敗する問題の修正( #15032 )
|
- Fix: ユーザーのプロフィール画面をアドレス入力などで直接表示した際に概要タブの描画に失敗する問題の修正( #15032 )
|
||||||
- Fix: 起動前の疎通チェックが機能しなくなっていた問題を修正
|
- Fix: 起動前の疎通チェックが機能しなくなっていた問題を修正
|
||||||
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/737)
|
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/737)
|
||||||
|
- Fix: ノートの閲覧にログイン必須にしてもFeedでノートが表示されてしまう問題を修正
|
||||||
- Fix: 絵文字の連合でライセンス欄を相互にやり取りするように ( #10859, #14109 )
|
- Fix: 絵文字の連合でライセンス欄を相互にやり取りするように ( #10859, #14109 )
|
||||||
- Fix: ロックダウンされた期間指定のノートがStreaming経由でLTLに出現するのを修正 ( #15200 )
|
- Fix: ロックダウンされた期間指定のノートがStreaming経由でLTLに出現するのを修正 ( #15200 )
|
||||||
- Fix: disableClustering設定時の初期化ロジックを調整( #15223 )
|
- Fix: disableClustering設定時の初期化ロジックを調整( #15223 )
|
||||||
|
|
|
@ -197,25 +197,10 @@ pnpm dev
|
||||||
command.
|
command.
|
||||||
|
|
||||||
- Server-side source files and automatically builds them if they are modified. Automatically start the server process(es).
|
- Server-side source files and automatically builds them if they are modified. Automatically start the server process(es).
|
||||||
- Vite HMR (just the `vite` command) is available. The behavior may be different from production.
|
|
||||||
- Service Worker is watched by esbuild.
|
- Service Worker is watched by esbuild.
|
||||||
- The front end can be viewed by accessing `http://localhost:5173`.
|
- Vite HMR (just the `vite` command) is available. The behavior may be different from production.
|
||||||
- The backend listens on the port configured with `port` in .config/default.yml.
|
- Vite runs behind the backend (the backend will proxy Vite at /vite and /embed_vite except for websocket used for HMR).
|
||||||
If you have not changed it from the default, it will be "http://localhost:3000".
|
|
||||||
If "port" in .config/default.yml is set to something other than 3000, you need to change the proxy settings in packages/frontend/vite.config.local-dev.ts.
|
|
||||||
|
|
||||||
### `MK_DEV_PREFER=backend pnpm dev`
|
|
||||||
pnpm dev has another mode with `MK_DEV_PREFER=backend`.
|
|
||||||
|
|
||||||
```
|
|
||||||
MK_DEV_PREFER=backend pnpm dev
|
|
||||||
```
|
|
||||||
|
|
||||||
- This mode is closer to the production environment than the default mode.
|
|
||||||
- Vite runs behind the backend (the backend will proxy Vite at /vite).
|
|
||||||
- You can see Misskey by accessing `http://localhost:3000` (Replace `3000` with the port configured with `port` in .config/default.yml).
|
- You can see Misskey by accessing `http://localhost:3000` (Replace `3000` with the port configured with `port` in .config/default.yml).
|
||||||
- To change the port of Vite, specify with `VITE_PORT` environment variable.
|
|
||||||
- HMR may not work in some environments such as Windows.
|
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
You can run non-backend tests by executing following commands:
|
You can run non-backend tests by executing following commands:
|
||||||
|
@ -491,6 +476,11 @@ describe('test', () => {
|
||||||
コード上でMisskeyのドメイン固有の概念には`Mi`をprefixすることで、他のドメインの同様の概念と区別できるほか、名前の衝突を防ぐ。
|
コード上でMisskeyのドメイン固有の概念には`Mi`をprefixすることで、他のドメインの同様の概念と区別できるほか、名前の衝突を防ぐ。
|
||||||
ただし、文脈上Misskeyのものを指すことが明らかであり、名前の衝突の恐れがない場合は、一時的なローカル変数に限って`Mi`を省略してもよい。
|
ただし、文脈上Misskeyのものを指すことが明らかであり、名前の衝突の恐れがない場合は、一時的なローカル変数に限って`Mi`を省略してもよい。
|
||||||
|
|
||||||
|
### Misskey.jsの型生成
|
||||||
|
```bash
|
||||||
|
pnpm build-misskey-js-with-types
|
||||||
|
```
|
||||||
|
|
||||||
### How to resolve conflictions occurred at pnpm-lock.yaml?
|
### How to resolve conflictions occurred at pnpm-lock.yaml?
|
||||||
|
|
||||||
Just execute `pnpm` to fix it.
|
Just execute `pnpm` to fix it.
|
||||||
|
|
|
@ -6,6 +6,8 @@ ARG NODE_VERSION=22.11.0-bookworm
|
||||||
|
|
||||||
FROM --platform=$BUILDPLATFORM node:${NODE_VERSION} AS native-builder
|
FROM --platform=$BUILDPLATFORM node:${NODE_VERSION} AS native-builder
|
||||||
|
|
||||||
|
ENV COREPACK_DEFAULT_TO_LATEST=0
|
||||||
|
|
||||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||||
rm -f /etc/apt/apt.conf.d/docker-clean \
|
rm -f /etc/apt/apt.conf.d/docker-clean \
|
||||||
|
@ -44,6 +46,8 @@ RUN rm -rf .git/
|
||||||
|
|
||||||
FROM --platform=$TARGETPLATFORM node:${NODE_VERSION} AS target-builder
|
FROM --platform=$TARGETPLATFORM node:${NODE_VERSION} AS target-builder
|
||||||
|
|
||||||
|
ENV COREPACK_DEFAULT_TO_LATEST=0
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -yqq --no-install-recommends \
|
&& apt-get install -yqq --no-install-recommends \
|
||||||
build-essential
|
build-essential
|
||||||
|
@ -68,6 +72,7 @@ FROM --platform=$TARGETPLATFORM node:${NODE_VERSION}-slim AS runner
|
||||||
|
|
||||||
ARG UID="991"
|
ARG UID="991"
|
||||||
ARG GID="991"
|
ARG GID="991"
|
||||||
|
ENV COREPACK_DEFAULT_TO_LATEST=0
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y --no-install-recommends \
|
&& apt-get install -y --no-install-recommends \
|
||||||
|
|
|
@ -7,6 +7,11 @@ bug report to the GitHub repository.
|
||||||
|
|
||||||
Thanks for helping make Misskey safe for everyone.
|
Thanks for helping make Misskey safe for everyone.
|
||||||
|
|
||||||
|
> [!note]
|
||||||
|
> CNA [requires](https://www.cve.org/ResourcesSupport/AllResources/CNARules#section_5-2_Description) that CVEs include a description in English for inclusion in the CVE Catalog.
|
||||||
|
>
|
||||||
|
> When creating a security advisory, all content must be written in English (it is acceptable to include a non-English description along with the English one).
|
||||||
|
|
||||||
## When create a patch
|
## When create a patch
|
||||||
|
|
||||||
If you can also create a patch to fix the vulnerability, please create a PR on the private fork.
|
If you can also create a patch to fix the vulnerability, please create a PR on the private fork.
|
||||||
|
|
|
@ -1460,9 +1460,6 @@ _pages:
|
||||||
newPage: "أنشئ صفحة جديدة"
|
newPage: "أنشئ صفحة جديدة"
|
||||||
editPage: "عدّل الصفحة"
|
editPage: "عدّل الصفحة"
|
||||||
readPage: "نُشّط عرض المصدر"
|
readPage: "نُشّط عرض المصدر"
|
||||||
created: "نجح إنشاء الصفحة"
|
|
||||||
updated: "نجح تعديل الصفحة"
|
|
||||||
deleted: "نجح حذف الصفحة"
|
|
||||||
pageSetting: "إعدادات الصفحة"
|
pageSetting: "إعدادات الصفحة"
|
||||||
nameAlreadyExists: "رابط الصفحة موجود مسبقًا"
|
nameAlreadyExists: "رابط الصفحة موجود مسبقًا"
|
||||||
invalidNameTitle: "رابط الصفحة ليس صالحًا"
|
invalidNameTitle: "رابط الصفحة ليس صالحًا"
|
||||||
|
|
|
@ -1237,9 +1237,6 @@ _pages:
|
||||||
newPage: "নতুন পৃষ্ঠা বানান"
|
newPage: "নতুন পৃষ্ঠা বানান"
|
||||||
editPage: "পৃষ্ঠাটি সম্পাদনা করুন"
|
editPage: "পৃষ্ঠাটি সম্পাদনা করুন"
|
||||||
readPage: "উৎস দেখছেন"
|
readPage: "উৎস দেখছেন"
|
||||||
created: "পৃষ্ঠা তৈরি করা হয়েছে"
|
|
||||||
updated: "পৃষ্ঠা সম্পাদনা করা হয়েছে"
|
|
||||||
deleted: "পৃষ্ঠা মুছে ফেলা হয়েছে"
|
|
||||||
pageSetting: "পৃষ্ঠার সেটিংস"
|
pageSetting: "পৃষ্ঠার সেটিংস"
|
||||||
nameAlreadyExists: "পৃষ্ঠার URLটি ইতিমধ্যেই ব্যাবহার করা হয়েছে"
|
nameAlreadyExists: "পৃষ্ঠার URLটি ইতিমধ্যেই ব্যাবহার করা হয়েছে"
|
||||||
invalidNameTitle: "পৃষ্ঠার URL অবৈধ"
|
invalidNameTitle: "পৃষ্ঠার URL অবৈধ"
|
||||||
|
|
|
@ -5,6 +5,7 @@ introMisskey: "Benvingut! Misskey és un servei de microblogging descentralitzat
|
||||||
poweredByMisskeyDescription: "{name} És un dels serveis (anomenats instàncies de Misskey) que utilitzen la plataforma de codi obert <b>Misskey</b>."
|
poweredByMisskeyDescription: "{name} És un dels serveis (anomenats instàncies de Misskey) que utilitzen la plataforma de codi obert <b>Misskey</b>."
|
||||||
monthAndDay: "{day}/{month}"
|
monthAndDay: "{day}/{month}"
|
||||||
search: "Cercar"
|
search: "Cercar"
|
||||||
|
reset: "Reiniciar"
|
||||||
notifications: "Notificacions"
|
notifications: "Notificacions"
|
||||||
username: "Nom d'usuari"
|
username: "Nom d'usuari"
|
||||||
password: "Contrasenya"
|
password: "Contrasenya"
|
||||||
|
@ -48,6 +49,7 @@ pin: "Fixa al perfil"
|
||||||
unpin: "Para de fixar del perfil"
|
unpin: "Para de fixar del perfil"
|
||||||
copyContent: "Copia el contingut"
|
copyContent: "Copia el contingut"
|
||||||
copyLink: "Copia l'enllaç"
|
copyLink: "Copia l'enllaç"
|
||||||
|
copyRemoteLink: "Copiar l'enllaç remot"
|
||||||
copyLinkRenote: "Copiar l'enllaç de la renota"
|
copyLinkRenote: "Copiar l'enllaç de la renota"
|
||||||
delete: "Elimina"
|
delete: "Elimina"
|
||||||
deleteAndEdit: "Eliminar i editar"
|
deleteAndEdit: "Eliminar i editar"
|
||||||
|
@ -686,11 +688,13 @@ testEmail: "Prova l'enviament de correu "
|
||||||
wordMute: "Silenciar paraules "
|
wordMute: "Silenciar paraules "
|
||||||
wordMuteDescription: "Minimitza les notes que contenen la paraula o frase especificada. Les notes minimitzades poden visualitzar-se fent clic sobre elles."
|
wordMuteDescription: "Minimitza les notes que contenen la paraula o frase especificada. Les notes minimitzades poden visualitzar-se fent clic sobre elles."
|
||||||
hardWordMute: "Silenciar paraules fortes"
|
hardWordMute: "Silenciar paraules fortes"
|
||||||
|
showMutedWord: "Mostrar paraules silenciades"
|
||||||
hardWordMuteDescription: "Oculta les notes que contenen la paraula o frase especificada. A diferència de Silenciar paraula, la nota quedarà completament oculta a la vista."
|
hardWordMuteDescription: "Oculta les notes que contenen la paraula o frase especificada. A diferència de Silenciar paraula, la nota quedarà completament oculta a la vista."
|
||||||
regexpError: "Error de l'expressió regular "
|
regexpError: "Error de l'expressió regular "
|
||||||
regexpErrorDescription: "S'ha produït un error a l'expressió regular a la línia {line} de les paraules silenciades {tab}:"
|
regexpErrorDescription: "S'ha produït un error a l'expressió regular a la línia {line} de les paraules silenciades {tab}:"
|
||||||
instanceMute: "Silenciar servidor"
|
instanceMute: "Silenciar servidor"
|
||||||
userSaysSomething: "{name} n'ha dit alguna cosa"
|
userSaysSomething: "{name} n'ha dit alguna cosa"
|
||||||
|
userSaysSomethingAbout: "{name} està parlant sobre \"{word}\""
|
||||||
makeActive: "Activar"
|
makeActive: "Activar"
|
||||||
display: "Veure"
|
display: "Veure"
|
||||||
copy: "Copiar"
|
copy: "Copiar"
|
||||||
|
@ -1303,6 +1307,8 @@ lockdown: "Bloquejat"
|
||||||
pleaseSelectAccount: "Seleccionar un compte"
|
pleaseSelectAccount: "Seleccionar un compte"
|
||||||
availableRoles: "Roles disponibles "
|
availableRoles: "Roles disponibles "
|
||||||
acknowledgeNotesAndEnable: "Activa'l després de comprendre els possibles perills."
|
acknowledgeNotesAndEnable: "Activa'l després de comprendre els possibles perills."
|
||||||
|
federationSpecified: "Aquest servidor treballa amb una federació de llistes blanques. No pot interactuar amb altres servidors que no siguin els especificats per l'administrador."
|
||||||
|
federationDisabled: "La unió es troba deshabilitada en aquest servidor. No es pot interactuar amb usuaris d'altres servidors."
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "És obligatori l'inici de sessió per poder veure el contingut"
|
requireSigninToViewContents: "És obligatori l'inici de sessió per poder veure el contingut"
|
||||||
requireSigninToViewContentsDescription1: "Es requereix l'inici de sessió per poder veure totes les notes i el contingut que has creat. Amb això esperem evitar que els rastrejadors recopilin informació."
|
requireSigninToViewContentsDescription1: "Es requereix l'inici de sessió per poder veure totes les notes i el contingut que has creat. Amb això esperem evitar que els rastrejadors recopilin informació."
|
||||||
|
@ -2359,9 +2365,6 @@ _pages:
|
||||||
newPage: "pa"
|
newPage: "pa"
|
||||||
editPage: "Editar la pàgina"
|
editPage: "Editar la pàgina"
|
||||||
readPage: "Veure el codi font d'aquesta pàgina"
|
readPage: "Veure el codi font d'aquesta pàgina"
|
||||||
created: "La pàgina ha sigut creada correctament"
|
|
||||||
updated: "La pàgina s'ha editat correctament"
|
|
||||||
deleted: "La pàgina s'ha esborrat sense problemes"
|
|
||||||
pageSetting: "Configuració de la pàgina"
|
pageSetting: "Configuració de la pàgina"
|
||||||
nameAlreadyExists: "L'adreça URL de la pàgina ja existeix"
|
nameAlreadyExists: "L'adreça URL de la pàgina ja existeix"
|
||||||
invalidNameTitle: "L'adreça URL de la pàgina no és vàlida"
|
invalidNameTitle: "L'adreça URL de la pàgina no és vàlida"
|
||||||
|
@ -2723,6 +2726,66 @@ _contextMenu:
|
||||||
app: "Aplicació "
|
app: "Aplicació "
|
||||||
appWithShift: "Aplicació amb la tecla shift"
|
appWithShift: "Aplicació amb la tecla shift"
|
||||||
native: "Interfície del navegador"
|
native: "Interfície del navegador"
|
||||||
|
_gridComponent:
|
||||||
|
_error:
|
||||||
|
requiredValue: "Aquest camp és obligatori"
|
||||||
|
columnTypeNotSupport: "La validació d'expressions regulars només s'admet per columnes de tipus text."
|
||||||
|
patternNotMatch: "Aquest valor no coincideix amb {pattern}"
|
||||||
|
notUnique: "Aquest valor ha de ser únic "
|
||||||
|
_roleSelectDialog:
|
||||||
|
notSelected: "No seleccionat"
|
||||||
|
_customEmojisManager:
|
||||||
|
_gridCommon:
|
||||||
|
copySelectionRows: "Copiar línies seleccionades "
|
||||||
|
copySelectionRanges: "Copiar selecció "
|
||||||
|
deleteSelectionRows: "Esborrar línies seleccionades"
|
||||||
|
deleteSelectionRanges: "Esborrar files de la selecció "
|
||||||
|
searchSettings: "Configuració del cercador"
|
||||||
|
searchSettingCaption: "Defineix criteris de cerca detallats."
|
||||||
|
searchLimit: "Nombre de pantalles"
|
||||||
|
sortOrder: "Ordenar"
|
||||||
|
registrationLogs: "Registres d'inscripcions "
|
||||||
|
registrationLogsCaption: "Quan s'actualitzin o s'esborrin emojis es mostrarà un registre. Desapareixeran quan s'actualitzin, s'esborrin, visitis una nova pàgina o la recarreguis."
|
||||||
|
alertEmojisRegisterFailedDescription: "No s'ha pogut actualitzar o esborrar l'emoji. Si us plau, dona una ullada al registre per més detalls."
|
||||||
|
_logs:
|
||||||
|
showSuccessLogSwitch: "Mostrar el registre d'èxit "
|
||||||
|
failureLogNothing: "No hi ha registres de fallades."
|
||||||
|
logNothing: "No hi ha registres."
|
||||||
|
_remote:
|
||||||
|
selectionRowDetail: "Detall de la línia seleccionada"
|
||||||
|
importSelectionRows: "Importar les files seleccionades"
|
||||||
|
importSelectionRangesRows: "Importar les files de la selecció "
|
||||||
|
importEmojisButton: "Importar els Emojis marcats"
|
||||||
|
confirmImportEmojisTitle: "Importar Emojis"
|
||||||
|
confirmImportEmojisDescription: "Importar {count} Emojis d'una adreça remota. Tingues cura de les llicències dels Emojis. Vols importar-los?"
|
||||||
|
_local:
|
||||||
|
tabTitleList: "Llistar els Emojis registrats"
|
||||||
|
tabTitleRegister: "Registre d'Emojis"
|
||||||
|
_list:
|
||||||
|
emojisNothing: "No hi ha Emojis registrats"
|
||||||
|
markAsDeleteTargetRows: "Files seleccionades que s'han d'esborrar "
|
||||||
|
markAsDeleteTargetRanges: "Selecció de files per la seva eliminació "
|
||||||
|
alertUpdateEmojisNothingDescription: "No hi ha Emojis actualitzats."
|
||||||
|
alertDeleteEmojisNothingDescription: "No hi ha Emoji per esborrar."
|
||||||
|
confirmMovePage: "Vols canviar de pàgina?"
|
||||||
|
confirmChangeView: "Vols canviar la pantalla?"
|
||||||
|
confirmUpdateEmojisDescription: "Actualitzar {count} Emojis. Vols executar-ho?"
|
||||||
|
confirmDeleteEmojisDescription: "Esborrar {count} Emojis marcats. Vols continuar?"
|
||||||
|
confirmResetDescription: "Es restabliran tots els canvis fets fins ara."
|
||||||
|
confirmMovePageDesciption: "S'han fet canvis als Emojis d'aquesta pàgina. Si continues navegant sense guardar els canvis, es perdran tots els canvis fets en aquesta pàgina."
|
||||||
|
dialogSelectRoleTitle: "Buscar Emojis per rol"
|
||||||
|
_register:
|
||||||
|
uploadSettingTitle: "Actualitza la configuració "
|
||||||
|
uploadSettingDescription: "En aquesta pantalla pots configurar el que s'ha de fer quan es puja un Emoji."
|
||||||
|
directoryToCategoryLabel: "Escriu el nom del directori al camp de \"categoria\""
|
||||||
|
directoryToCategoryCaption: "Quan arrossegues un directori, escriu el nom del directori al camp categoria."
|
||||||
|
emojiInputAreaCaption: "Selecciona els Emojis que vols registrar gent servir un dels mètodes."
|
||||||
|
emojiInputAreaList1: "Arrossega i deixar anar fitxers o directoris dintre del quadrat."
|
||||||
|
emojiInputAreaList2: "Clica l'enllaç per seleccionar un fitxer des del teu ordinador."
|
||||||
|
emojiInputAreaList3: "Clica aquest enllaç per seleccionar del Disc"
|
||||||
|
confirmRegisterEmojisDescription: "Registrar els Emojis de la llista com a nous Emojis personalitzats. Vols continuar? (Per evitar una sobrecàrrega només {count} Emojis es poden registrar d'una sola vegada)"
|
||||||
|
confirmClearEmojisDescription: "Descartar els canvis i esborrar els Emojis de la llista. Vols continuar?"
|
||||||
|
confirmUploadEmojisDescription: "Pujar els {count} fitxers que has arrossegat al disc. Vols continuar?"
|
||||||
_embedCodeGen:
|
_embedCodeGen:
|
||||||
title: "Personalitza el codi per incrustar"
|
title: "Personalitza el codi per incrustar"
|
||||||
header: "Mostrar la capçalera"
|
header: "Mostrar la capçalera"
|
||||||
|
@ -2764,3 +2827,16 @@ _remoteLookupErrors:
|
||||||
_noSuchObject:
|
_noSuchObject:
|
||||||
title: "No s'ha trobat"
|
title: "No s'ha trobat"
|
||||||
description: "No es pot trobar el recurs sol·licitat, si us plau comprova l'adreça una altra vegada."
|
description: "No es pot trobar el recurs sol·licitat, si us plau comprova l'adreça una altra vegada."
|
||||||
|
_captcha:
|
||||||
|
verify: "Passar pel CAPTCHA"
|
||||||
|
testSiteKeyMessage: "Pots comprovar una vista prèvia introduïnt valors de prova per la clau del lloc i la clau secreta. Si vols més informació consulteu la següent pàgina."
|
||||||
|
_error:
|
||||||
|
_requestFailed:
|
||||||
|
title: "Ha fallat la sol·licitud del CAPTCHA"
|
||||||
|
text: "Si us plau, torna a intentar-ho d'aquí una estona o comprova els ajustos de nou."
|
||||||
|
_verificationFailed:
|
||||||
|
title: "Ha fallat la validació CAPTCHA"
|
||||||
|
text: "Comprova que els ajustos són els correctes."
|
||||||
|
_unknown:
|
||||||
|
title: "Error CAPTCHA"
|
||||||
|
text: "S'ha produït un error inesperat."
|
||||||
|
|
|
@ -1883,9 +1883,6 @@ _pages:
|
||||||
newPage: "Vytvořit novou stránku"
|
newPage: "Vytvořit novou stránku"
|
||||||
editPage: "Upravit stránku"
|
editPage: "Upravit stránku"
|
||||||
readPage: "Prohlížení zdroje této stránky"
|
readPage: "Prohlížení zdroje této stránky"
|
||||||
created: "Stránka byla úspěšně vytvořena"
|
|
||||||
updated: "Stránka byla úspěšně aktualizována"
|
|
||||||
deleted: "Stránka byla úspěšně smazána"
|
|
||||||
pageSetting: "Nastavení stránky"
|
pageSetting: "Nastavení stránky"
|
||||||
nameAlreadyExists: "Zadaná adresa URL stránky již existuje"
|
nameAlreadyExists: "Zadaná adresa URL stránky již existuje"
|
||||||
invalidNameTitle: "Zadaná adresa URL stránky je neplatná"
|
invalidNameTitle: "Zadaná adresa URL stránky je neplatná"
|
||||||
|
|
|
@ -5,6 +5,7 @@ introMisskey: "Willkommen! Misskey ist eine dezentralisierte Open-Source Microbl
|
||||||
poweredByMisskeyDescription: "{name} ist einer der durch die Open-Source-Plattform <b>Misskey</b> betriebenen Dienste."
|
poweredByMisskeyDescription: "{name} ist einer der durch die Open-Source-Plattform <b>Misskey</b> betriebenen Dienste."
|
||||||
monthAndDay: "{day}.{month}."
|
monthAndDay: "{day}.{month}."
|
||||||
search: "Suchen"
|
search: "Suchen"
|
||||||
|
reset: "Zurücksetzen"
|
||||||
notifications: "Benachrichtigungen"
|
notifications: "Benachrichtigungen"
|
||||||
username: "Benutzername"
|
username: "Benutzername"
|
||||||
password: "Passwort"
|
password: "Passwort"
|
||||||
|
@ -48,6 +49,7 @@ pin: "An dein Profil anheften"
|
||||||
unpin: "Von deinem Profil lösen"
|
unpin: "Von deinem Profil lösen"
|
||||||
copyContent: "Inhalt kopieren"
|
copyContent: "Inhalt kopieren"
|
||||||
copyLink: "Link kopieren"
|
copyLink: "Link kopieren"
|
||||||
|
copyRemoteLink: "Renote-Link kopieren"
|
||||||
copyLinkRenote: "Renote-Link kopieren"
|
copyLinkRenote: "Renote-Link kopieren"
|
||||||
delete: "Löschen"
|
delete: "Löschen"
|
||||||
deleteAndEdit: "Löschen und Bearbeiten"
|
deleteAndEdit: "Löschen und Bearbeiten"
|
||||||
|
@ -493,7 +495,7 @@ noMessagesYet: "Noch keine Nachrichten vorhanden"
|
||||||
newMessageExists: "Du hast eine neue Nachricht"
|
newMessageExists: "Du hast eine neue Nachricht"
|
||||||
onlyOneFileCanBeAttached: "Es kann pro Nachricht nur eine Datei angehängt werden"
|
onlyOneFileCanBeAttached: "Es kann pro Nachricht nur eine Datei angehängt werden"
|
||||||
signinRequired: "Bitte registriere oder melde dich an, um fortzufahren"
|
signinRequired: "Bitte registriere oder melde dich an, um fortzufahren"
|
||||||
signinOrContinueOnRemote: "Zum Weitermachen, melde dich mit einem bestehenden Account an oder erstelle einen neuen Account."
|
signinOrContinueOnRemote: "Um fortzufahren, gehe zu deiner Instanz oder registriere bzw. melde dich an dieser Instanz an. "
|
||||||
invitations: "Einladungen"
|
invitations: "Einladungen"
|
||||||
invitationCode: "Einladungscode"
|
invitationCode: "Einladungscode"
|
||||||
checking: "Wird überprüft …"
|
checking: "Wird überprüft …"
|
||||||
|
@ -517,6 +519,7 @@ emojiStyle: "Emoji-Stil"
|
||||||
native: "Nativ"
|
native: "Nativ"
|
||||||
menuStyle: "Menü Stil"
|
menuStyle: "Menü Stil"
|
||||||
style: "Stil"
|
style: "Stil"
|
||||||
|
drawer: "App-Übersicht"
|
||||||
popup: "Pop-up"
|
popup: "Pop-up"
|
||||||
showNoteActionsOnlyHover: "Notizmenü nur bei Mouseover anzeigen"
|
showNoteActionsOnlyHover: "Notizmenü nur bei Mouseover anzeigen"
|
||||||
showReactionsCount: "Zeige die Anzahl der Reaktionen auf Notizen an"
|
showReactionsCount: "Zeige die Anzahl der Reaktionen auf Notizen an"
|
||||||
|
@ -585,6 +588,7 @@ masterVolume: "Gesamtlautstärke"
|
||||||
notUseSound: "Gebe kein Ton aus"
|
notUseSound: "Gebe kein Ton aus"
|
||||||
useSoundOnlyWhenActive: "Gebe nur Ton aus, wenn Misskey aktiv ist"
|
useSoundOnlyWhenActive: "Gebe nur Ton aus, wenn Misskey aktiv ist"
|
||||||
details: "Details"
|
details: "Details"
|
||||||
|
renoteDetails: "Renote Details"
|
||||||
chooseEmoji: "Emoji auswählen"
|
chooseEmoji: "Emoji auswählen"
|
||||||
unableToProcess: "Der Vorgang konnte nicht abgeschlossen werden"
|
unableToProcess: "Der Vorgang konnte nicht abgeschlossen werden"
|
||||||
recentUsed: "Vor kurzem verwendet"
|
recentUsed: "Vor kurzem verwendet"
|
||||||
|
@ -682,12 +686,15 @@ smtpSecure: "Für SMTP-Verbindungen implizit SSL/TLS verwenden"
|
||||||
smtpSecureInfo: "Schalte dies aus, falls du STARTTLS verwendest."
|
smtpSecureInfo: "Schalte dies aus, falls du STARTTLS verwendest."
|
||||||
testEmail: "Emailversand testen"
|
testEmail: "Emailversand testen"
|
||||||
wordMute: "Wortstummschaltung"
|
wordMute: "Wortstummschaltung"
|
||||||
wordMuteDescription: ""
|
wordMuteDescription: "Minimiert Notizen, die das angegebene Wort oder den angegebenen Ausdruck enthalten. Minimierte Notizen können angezeigt werden, indem du auf sie klickst."
|
||||||
hardWordMute: "Harte Wort-Stummschaltung"
|
hardWordMute: "Harte Wortstummschaltung"
|
||||||
|
showMutedWord: "Stummgeschaltete Wörter anzeigen"
|
||||||
|
hardWordMuteDescription: "Blendet Notizen aus, die das angegebene Wort oder die angegebene Phrase enthalten. Im Gegensatz zur Wortstummschaltung wird die Notiz vollständig ausgeblendet."
|
||||||
regexpError: "Fehler in einem regulären Ausdruck"
|
regexpError: "Fehler in einem regulären Ausdruck"
|
||||||
regexpErrorDescription: "Im regulären Ausdruck deiner in Zeile {line} von {tab}en Wortstummschaltungen ist ein Fehler aufgetreten:"
|
regexpErrorDescription: "Im regulären Ausdruck deiner in Zeile {line} von {tab}en Wortstummschaltungen ist ein Fehler aufgetreten:"
|
||||||
instanceMute: "Instanzstummschaltungen"
|
instanceMute: "Instanzstummschaltungen"
|
||||||
userSaysSomething: "{name} hat etwas gesagt"
|
userSaysSomething: "{name} hat etwas gesagt"
|
||||||
|
userSaysSomethingAbout: "{name} sagt etwas über '{word}'"
|
||||||
makeActive: "Aktivieren"
|
makeActive: "Aktivieren"
|
||||||
display: "Anzeigeart"
|
display: "Anzeigeart"
|
||||||
copy: "Kopieren"
|
copy: "Kopieren"
|
||||||
|
@ -856,6 +863,7 @@ administration: "Verwaltung"
|
||||||
accounts: "Benutzerkonten"
|
accounts: "Benutzerkonten"
|
||||||
switch: "Wechseln"
|
switch: "Wechseln"
|
||||||
noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert."
|
noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert."
|
||||||
|
noInquiryUrlWarning: "Keine gültige URL."
|
||||||
noBotProtectionWarning: "Schutz vor Bots ist nicht konfiguriert."
|
noBotProtectionWarning: "Schutz vor Bots ist nicht konfiguriert."
|
||||||
configure: "Konfigurieren"
|
configure: "Konfigurieren"
|
||||||
postToGallery: "Neuen Galeriebeitrag erstellen"
|
postToGallery: "Neuen Galeriebeitrag erstellen"
|
||||||
|
@ -1088,6 +1096,7 @@ retryAllQueuesConfirmTitle: "Wirklich erneut versuchen?"
|
||||||
retryAllQueuesConfirmText: "Dies wird zu einer temporären Erhöhung der Serverlast führen."
|
retryAllQueuesConfirmText: "Dies wird zu einer temporären Erhöhung der Serverlast führen."
|
||||||
enableChartsForRemoteUser: "Diagramme für Nutzer fremder Instanzen erstellen"
|
enableChartsForRemoteUser: "Diagramme für Nutzer fremder Instanzen erstellen"
|
||||||
enableChartsForFederatedInstances: "Diagramme für fremde Instanzen erstellen"
|
enableChartsForFederatedInstances: "Diagramme für fremde Instanzen erstellen"
|
||||||
|
enableStatsForFederatedInstances: "Abruf von Informationen über förderierte Server"
|
||||||
showClipButtonInNoteFooter: "\"Clip\" zum Notizmenu hinzufügen"
|
showClipButtonInNoteFooter: "\"Clip\" zum Notizmenu hinzufügen"
|
||||||
reactionsDisplaySize: "Reaktionsanzeigegröße"
|
reactionsDisplaySize: "Reaktionsanzeigegröße"
|
||||||
limitWidthOfReaction: "Begrenze die Breite der Reaktion und zeige sie verkleinert an"
|
limitWidthOfReaction: "Begrenze die Breite der Reaktion und zeige sie verkleinert an"
|
||||||
|
@ -1136,6 +1145,8 @@ preventAiLearningDescription: "Fordert Crawler auf, gepostetes Text- oder Bildma
|
||||||
options: "Optionen"
|
options: "Optionen"
|
||||||
specifyUser: "Spezifischer Benutzer"
|
specifyUser: "Spezifischer Benutzer"
|
||||||
lookupConfirm: "Zustimmen?"
|
lookupConfirm: "Zustimmen?"
|
||||||
|
openTagPageConfirm: "Hashtag Seite wirklich öffnen?"
|
||||||
|
specifyHost: "Host"
|
||||||
failedToPreviewUrl: "Vorschau nicht anzeigbar"
|
failedToPreviewUrl: "Vorschau nicht anzeigbar"
|
||||||
update: "Aktualisieren"
|
update: "Aktualisieren"
|
||||||
rolesThatCanBeUsedThisEmojiAsReaction: "Rollen, die dieses Emoji als Reaktion verwenden können"
|
rolesThatCanBeUsedThisEmojiAsReaction: "Rollen, die dieses Emoji als Reaktion verwenden können"
|
||||||
|
@ -1194,6 +1205,7 @@ showRenotes: "Renotes anzeigen"
|
||||||
edited: "Bearbeitet"
|
edited: "Bearbeitet"
|
||||||
notificationRecieveConfig: "Benachrichtigungseinstellungen"
|
notificationRecieveConfig: "Benachrichtigungseinstellungen"
|
||||||
mutualFollow: "Gegenseitig gefolgt"
|
mutualFollow: "Gegenseitig gefolgt"
|
||||||
|
followingOrFollower: "Follow oder Follower"
|
||||||
fileAttachedOnly: "Nur Notizen mit Dateien"
|
fileAttachedOnly: "Nur Notizen mit Dateien"
|
||||||
showRepliesToOthersInTimeline: "Antworten in Chronik anzeigen"
|
showRepliesToOthersInTimeline: "Antworten in Chronik anzeigen"
|
||||||
hideRepliesToOthersInTimeline: "Antworten nicht in Chronik anzeigen"
|
hideRepliesToOthersInTimeline: "Antworten nicht in Chronik anzeigen"
|
||||||
|
@ -1231,7 +1243,7 @@ signupPendingError: "Beim Überprüfen der Mailadresse ist etwas schiefgelaufen.
|
||||||
cwNotationRequired: "Ist \"Inhaltswarnung verwenden\" aktiviert, muss eine Beschreibung gegeben werden."
|
cwNotationRequired: "Ist \"Inhaltswarnung verwenden\" aktiviert, muss eine Beschreibung gegeben werden."
|
||||||
doReaction: "Reagieren"
|
doReaction: "Reagieren"
|
||||||
code: "Code"
|
code: "Code"
|
||||||
reloadRequiredToApplySettings: "Ein Neustart ist erforderlich um die Einstellung zu übernehmen."
|
reloadRequiredToApplySettings: "Eine Aktualisierung ist erforderlich, um die Einstellungen zu übernehmen."
|
||||||
remainingN: "Verbleibend: {n}"
|
remainingN: "Verbleibend: {n}"
|
||||||
overwriteContentConfirm: "Bist du sicher, dass du den aktuellen Inhalt überschreiben willst?"
|
overwriteContentConfirm: "Bist du sicher, dass du den aktuellen Inhalt überschreiben willst?"
|
||||||
seasonalScreenEffect: "Saisonaler Bildschirmeffekt"
|
seasonalScreenEffect: "Saisonaler Bildschirmeffekt"
|
||||||
|
@ -1294,10 +1306,12 @@ thisContentsAreMarkedAsSigninRequiredByAuthor: "Logge dich ein, um weitere Inhal
|
||||||
lockdown: "Sperren"
|
lockdown: "Sperren"
|
||||||
pleaseSelectAccount: "Bitte Konto auswählen"
|
pleaseSelectAccount: "Bitte Konto auswählen"
|
||||||
availableRoles: "Verfügbare Rollen"
|
availableRoles: "Verfügbare Rollen"
|
||||||
|
federationSpecified: "Dieser Server arbeitet mit Whitelist-Föderation. Er kann nicht mit anderen als den vom Administrator angegebenen Servern interagieren."
|
||||||
|
federationDisabled: "Föderation ist auf diesem Server deaktiviert. Es ist nicht möglich, mit Benutzern auf anderen Servern zu interagieren."
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "Anmeldung erfordern, um Inhalte anzuzeigen"
|
requireSigninToViewContents: "Anmeldung erfordern, um Inhalte anzuzeigen"
|
||||||
requireSigninToViewContentsDescription1: "Erfordere eine Anmeldung, um alle Notizen und andere Inhalte anzuzeigen, die du erstellt hast. Dadurch wird verhindert, dass Crawler deine Informationen sammeln."
|
requireSigninToViewContentsDescription1: "Erfordere eine Anmeldung, um alle Notizen und andere Inhalte anzuzeigen, die du erstellt hast. Dadurch wird verhindert, dass Crawler deine Informationen sammeln."
|
||||||
requireSigninToViewContentsDescription2: ""
|
requireSigninToViewContentsDescription2: "Der Inhalt wird nicht in URL-Vorschauen (OGP), eingebettet in Webseiten oder auf Servern, die keine Zitate unterstützen, angezeigt."
|
||||||
requireSigninToViewContentsDescription3: "Diese Einschränkungen gelten möglicherweise nicht für föderierte Inhalte von anderen Servern."
|
requireSigninToViewContentsDescription3: "Diese Einschränkungen gelten möglicherweise nicht für föderierte Inhalte von anderen Servern."
|
||||||
makeNotesFollowersOnlyBefore: "Macht frühere Notizen nur für Follower sichtbar"
|
makeNotesFollowersOnlyBefore: "Macht frühere Notizen nur für Follower sichtbar"
|
||||||
makeNotesHiddenBefore: "Frühere Notizen privat machen"
|
makeNotesHiddenBefore: "Frühere Notizen privat machen"
|
||||||
|
@ -1417,6 +1431,7 @@ _serverSettings:
|
||||||
fanoutTimelineDescription: "Ist diese Option aktiviert, kann eine erhebliche Verbesserung im Abrufen von Chroniken und eine Reduzierung der Datenbankbelastung erzielt werden, im Gegenzug zu einer Steigerung in der Speichernutzung von Redis. Bei geringem Serverspeicher oder Serverinstabilität kann diese Option deaktiviert werden."
|
fanoutTimelineDescription: "Ist diese Option aktiviert, kann eine erhebliche Verbesserung im Abrufen von Chroniken und eine Reduzierung der Datenbankbelastung erzielt werden, im Gegenzug zu einer Steigerung in der Speichernutzung von Redis. Bei geringem Serverspeicher oder Serverinstabilität kann diese Option deaktiviert werden."
|
||||||
fanoutTimelineDbFallback: "Auf die Datenbank zurückfallen"
|
fanoutTimelineDbFallback: "Auf die Datenbank zurückfallen"
|
||||||
fanoutTimelineDbFallbackDescription: "Ist diese Option aktiviert, wird die Chronik auf zusätzliche Abfragen in der Datenbank zurückgreifen, wenn sich die Chronik nicht im Cache befindet. Eine Deaktivierung führt zu geringerer Serverlast, aber schränkt den Zeitraum der abrufbaren Chronik ein. "
|
fanoutTimelineDbFallbackDescription: "Ist diese Option aktiviert, wird die Chronik auf zusätzliche Abfragen in der Datenbank zurückgreifen, wenn sich die Chronik nicht im Cache befindet. Eine Deaktivierung führt zu geringerer Serverlast, aber schränkt den Zeitraum der abrufbaren Chronik ein. "
|
||||||
|
openRegistrationWarning: "Das Aktivieren von Registrierungen ist riskant. Es wird empfohlen, sie nur dann zu aktivieren, wenn der Server ständig überwacht wird und im Falle eines Problems sofort reagiert werden kann."
|
||||||
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "Wenn über einen bestimmten Zeitraum keine Moderatorenaktivität festgestellt wird, wird diese Einstellung automatisch deaktiviert, um Spam zu verhindern."
|
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "Wenn über einen bestimmten Zeitraum keine Moderatorenaktivität festgestellt wird, wird diese Einstellung automatisch deaktiviert, um Spam zu verhindern."
|
||||||
_accountMigration:
|
_accountMigration:
|
||||||
moveFrom: "Von einem anderen Konto zu diesem migrieren"
|
moveFrom: "Von einem anderen Konto zu diesem migrieren"
|
||||||
|
@ -1878,6 +1893,7 @@ _channel:
|
||||||
notesCount: "{n} Notizen"
|
notesCount: "{n} Notizen"
|
||||||
nameAndDescription: "Name und Beschreibung"
|
nameAndDescription: "Name und Beschreibung"
|
||||||
nameOnly: "Nur Name"
|
nameOnly: "Nur Name"
|
||||||
|
allowRenoteToExternal: "Renotes und Zitierungen außerhalb des Kanals erlauben"
|
||||||
_menuDisplay:
|
_menuDisplay:
|
||||||
sideFull: "Seitlich"
|
sideFull: "Seitlich"
|
||||||
sideIcon: "Seitlich (Icons)"
|
sideIcon: "Seitlich (Icons)"
|
||||||
|
@ -1966,6 +1982,7 @@ _sfx:
|
||||||
note: "Notizen"
|
note: "Notizen"
|
||||||
noteMy: "Meine Notizen"
|
noteMy: "Meine Notizen"
|
||||||
notification: "Benachrichtigungen"
|
notification: "Benachrichtigungen"
|
||||||
|
reaction: "Auswählen einer Reaktion"
|
||||||
_soundSettings:
|
_soundSettings:
|
||||||
driveFile: "Audiodatei aus dem Drive verwenden"
|
driveFile: "Audiodatei aus dem Drive verwenden"
|
||||||
driveFileWarn: "Wähle eine Audiodatei aus dem Drive"
|
driveFileWarn: "Wähle eine Audiodatei aus dem Drive"
|
||||||
|
@ -2064,12 +2081,22 @@ _permissions:
|
||||||
"read:admin:server-info": "Serverinformationen anzeigen"
|
"read:admin:server-info": "Serverinformationen anzeigen"
|
||||||
"read:admin:show-moderation-log": "Moderationsprotokoll einsehen"
|
"read:admin:show-moderation-log": "Moderationsprotokoll einsehen"
|
||||||
"read:admin:show-user": "Private Benutzerinformationen einsehen"
|
"read:admin:show-user": "Private Benutzerinformationen einsehen"
|
||||||
|
"write:admin:roles": "Rollen verwalten"
|
||||||
|
"read:admin:roles": "Rollen anzeigen"
|
||||||
|
"write:admin:relays": "Relays verwalten"
|
||||||
|
"read:admin:relays": "Relays anzeigen"
|
||||||
"write:admin:invite-codes": "Einladungscodes verwalten"
|
"write:admin:invite-codes": "Einladungscodes verwalten"
|
||||||
"read:admin:invite-codes": "Einladungscodes anzeigen"
|
"read:admin:invite-codes": "Einladungscodes anzeigen"
|
||||||
"write:admin:announcements": "Ankündigungen verwalten"
|
"write:admin:announcements": "Ankündigungen verwalten"
|
||||||
"read:admin:announcements": "Ankündigungen einsehen"
|
"read:admin:announcements": "Ankündigungen einsehen"
|
||||||
"write:admin:avatar-decorations": "Kann Avatar-Dekorationen verwalten"
|
"write:admin:avatar-decorations": "Kann Avatar-Dekorationen verwalten"
|
||||||
"read:admin:avatar-decorations": "Avatar-Dekorationen ansehen"
|
"read:admin:avatar-decorations": "Avatar-Dekorationen ansehen"
|
||||||
|
"write:admin:account": "Benutzerkonten verwalten"
|
||||||
|
"read:admin:account": "Benutzerkonten anzeigen"
|
||||||
|
"write:admin:emoji": "Emojis verwalten"
|
||||||
|
"read:admin:emoji": "Emojis anzeigen"
|
||||||
|
"write:admin:queue": "Job-Warteschlange verwalten"
|
||||||
|
"read:admin:queue": "Job-Warteschlange anzeigen"
|
||||||
_auth:
|
_auth:
|
||||||
shareAccessTitle: "Verteilung von App-Berechtigungen"
|
shareAccessTitle: "Verteilung von App-Berechtigungen"
|
||||||
shareAccess: "Möchtest du „{name}“ authorisieren, auf dieses Benutzerkonto zugreifen zu können?"
|
shareAccess: "Möchtest du „{name}“ authorisieren, auf dieses Benutzerkonto zugreifen zu können?"
|
||||||
|
@ -2187,6 +2214,8 @@ _profile:
|
||||||
changeAvatar: "Profilbild ändern"
|
changeAvatar: "Profilbild ändern"
|
||||||
changeBanner: "Banner ändern"
|
changeBanner: "Banner ändern"
|
||||||
verifiedLinkDescription: "Gibst du hier eine URL ein, die einen Link zu deinem Profile enthält, wird neben diesem Feld ein Icon zur Besitzbestätigung angezeigt."
|
verifiedLinkDescription: "Gibst du hier eine URL ein, die einen Link zu deinem Profile enthält, wird neben diesem Feld ein Icon zur Besitzbestätigung angezeigt."
|
||||||
|
avatarDecorationMax: "Du kannst bis zu {max} Dekorationen hinzufügen."
|
||||||
|
followedMessageDescription: "Du kannst eine kurze Nachricht festlegen, die dem Empfänger angezeigt wird, wenn er dir folgt."
|
||||||
_exportOrImport:
|
_exportOrImport:
|
||||||
allNotes: "Alle Notizen"
|
allNotes: "Alle Notizen"
|
||||||
favoritedNotes: "Als Favorit markierte Notizen"
|
favoritedNotes: "Als Favorit markierte Notizen"
|
||||||
|
@ -2248,9 +2277,6 @@ _pages:
|
||||||
newPage: "Seite erstellen"
|
newPage: "Seite erstellen"
|
||||||
editPage: "Seite bearbeiten"
|
editPage: "Seite bearbeiten"
|
||||||
readPage: "Quelltextansicht"
|
readPage: "Quelltextansicht"
|
||||||
created: "Seite erfolgreich erstellt"
|
|
||||||
updated: "Seite erfolgreich aktualisiert"
|
|
||||||
deleted: "Seite erfolgreich gelöscht"
|
|
||||||
pageSetting: "Seiteneinstellungen"
|
pageSetting: "Seiteneinstellungen"
|
||||||
nameAlreadyExists: "Die angegebene Seiten-URL existiert bereits"
|
nameAlreadyExists: "Die angegebene Seiten-URL existiert bereits"
|
||||||
invalidNameTitle: "Die angegebene Seiten-URL ist ungültig"
|
invalidNameTitle: "Die angegebene Seiten-URL ist ungültig"
|
||||||
|
@ -2319,6 +2345,7 @@ _notification:
|
||||||
reactedBySomeUsers: "{n} Benutzer haben eine Reaktion geschickt"
|
reactedBySomeUsers: "{n} Benutzer haben eine Reaktion geschickt"
|
||||||
renotedBySomeUsers: "Renote von {n} Benutzern"
|
renotedBySomeUsers: "Renote von {n} Benutzern"
|
||||||
followedBySomeUsers: "Von {n} Benutzern gefolgt"
|
followedBySomeUsers: "Von {n} Benutzern gefolgt"
|
||||||
|
login: "Neue Anmeldung erfolgt"
|
||||||
_types:
|
_types:
|
||||||
all: "Alle"
|
all: "Alle"
|
||||||
note: "Neue Notizen"
|
note: "Neue Notizen"
|
||||||
|
@ -2331,6 +2358,7 @@ _notification:
|
||||||
pollEnded: "Ende von Umfragen"
|
pollEnded: "Ende von Umfragen"
|
||||||
receiveFollowRequest: "Erhaltene Follow-Anfragen"
|
receiveFollowRequest: "Erhaltene Follow-Anfragen"
|
||||||
followRequestAccepted: "Akzeptierte Follow-Anfragen"
|
followRequestAccepted: "Akzeptierte Follow-Anfragen"
|
||||||
|
roleAssigned: "Rolle zugewiesen"
|
||||||
achievementEarned: "Errungenschaft freigeschaltet"
|
achievementEarned: "Errungenschaft freigeschaltet"
|
||||||
login: "Anmelden"
|
login: "Anmelden"
|
||||||
app: "Benachrichtigungen von Apps"
|
app: "Benachrichtigungen von Apps"
|
||||||
|
@ -2382,6 +2410,7 @@ _webhookSettings:
|
||||||
createWebhook: "Webhook erstellen"
|
createWebhook: "Webhook erstellen"
|
||||||
name: "Name"
|
name: "Name"
|
||||||
secret: "Secret"
|
secret: "Secret"
|
||||||
|
trigger: "Auslöser"
|
||||||
active: "Aktiviert"
|
active: "Aktiviert"
|
||||||
_events:
|
_events:
|
||||||
follow: "Wenn du jemandem folgst"
|
follow: "Wenn du jemandem folgst"
|
||||||
|
@ -2393,8 +2422,10 @@ _webhookSettings:
|
||||||
mention: "Wenn du erwähnt wirst"
|
mention: "Wenn du erwähnt wirst"
|
||||||
_abuseReport:
|
_abuseReport:
|
||||||
_notificationRecipient:
|
_notificationRecipient:
|
||||||
|
createRecipient: "Meldungsempfänger hinzufügen"
|
||||||
_recipientType:
|
_recipientType:
|
||||||
mail: "Email"
|
mail: "Email"
|
||||||
|
keywords: "Schlüsselwort"
|
||||||
_moderationLogTypes:
|
_moderationLogTypes:
|
||||||
createRole: "Rolle erstellt"
|
createRole: "Rolle erstellt"
|
||||||
deleteRole: "Rolle gelöscht"
|
deleteRole: "Rolle gelöscht"
|
||||||
|
@ -2429,6 +2460,13 @@ _moderationLogTypes:
|
||||||
createAvatarDecoration: "Profilbilddekoration erstellt"
|
createAvatarDecoration: "Profilbilddekoration erstellt"
|
||||||
updateAvatarDecoration: "Profilbilddekoration aktualisiert"
|
updateAvatarDecoration: "Profilbilddekoration aktualisiert"
|
||||||
deleteAvatarDecoration: "Profilbilddekoration gelöscht"
|
deleteAvatarDecoration: "Profilbilddekoration gelöscht"
|
||||||
|
unsetUserAvatar: "Profilbild zurückgesetzt"
|
||||||
|
unsetUserBanner: "Profilbanner zurückgesetzt"
|
||||||
|
createSystemWebhook: "System-Webhook erstellt"
|
||||||
|
updateSystemWebhook: "System-Webhook aktualisiert"
|
||||||
|
deleteSystemWebhook: "System-Webhook gelöscht"
|
||||||
|
deletePage: "Seite gelöscht"
|
||||||
|
deleteGalleryPost: "Galeriebeitrag gelöscht"
|
||||||
_fileViewer:
|
_fileViewer:
|
||||||
title: "Dateiinformationen"
|
title: "Dateiinformationen"
|
||||||
type: "Dateityp"
|
type: "Dateityp"
|
||||||
|
@ -2478,6 +2516,10 @@ _externalResourceInstaller:
|
||||||
_themeInstallFailed:
|
_themeInstallFailed:
|
||||||
title: "Das Farbschema konnte nicht installiert werden"
|
title: "Das Farbschema konnte nicht installiert werden"
|
||||||
description: "Während der Installation des Farbschemas ist ein Problem aufgetreten. Bitte versuche es erneut. Detaillierte Fehlerinformationen können über die Javascript-Konsole abgerufen werden."
|
description: "Während der Installation des Farbschemas ist ein Problem aufgetreten. Bitte versuche es erneut. Detaillierte Fehlerinformationen können über die Javascript-Konsole abgerufen werden."
|
||||||
|
_hemisphere:
|
||||||
|
N: "Nördliche Erdhalbkugel"
|
||||||
|
S: "Südliche Erdhalbkugel"
|
||||||
|
caption: "Wird in einigen Client-Einstellungen zur Bestimmung der Jahreszeit verwendet."
|
||||||
_reversi:
|
_reversi:
|
||||||
blackOrWhite: "Schwarz/Weiß"
|
blackOrWhite: "Schwarz/Weiß"
|
||||||
rules: "Regeln"
|
rules: "Regeln"
|
||||||
|
@ -2485,17 +2527,26 @@ _reversi:
|
||||||
white: "Weiß"
|
white: "Weiß"
|
||||||
total: "Gesamt"
|
total: "Gesamt"
|
||||||
_offlineScreen:
|
_offlineScreen:
|
||||||
|
title: "Offline - keine Verbindung zum Server möglich"
|
||||||
header: "Verbindung zum Server nicht möglich"
|
header: "Verbindung zum Server nicht möglich"
|
||||||
_urlPreviewSetting:
|
_urlPreviewSetting:
|
||||||
title: "Einstellungen der URL-Vorschau"
|
title: "Einstellungen der URL-Vorschau"
|
||||||
enable: "URL-Vorschau aktivieren"
|
enable: "URL-Vorschau aktivieren"
|
||||||
timeout: "Zeitüberschreitung beim Abrufen der Vorschau (ms)"
|
timeout: "Zeitüberschreitung beim Abrufen der Vorschau (ms)"
|
||||||
|
timeoutDescription: "Übersteigt die für die Vorschau benötigte Zeit diesen Wert, wird keine Vorschau generiert."
|
||||||
maximumContentLength: "Maximale Content-Length (Bytes)"
|
maximumContentLength: "Maximale Content-Length (Bytes)"
|
||||||
|
maximumContentLengthDescription: "Wenn die Content-Length diesen Wert überschreitet, wird keine Vorschau erzeugt."
|
||||||
|
requireContentLength: "Vorschau nur generieren, wenn Content-Length verfügbar ist"
|
||||||
|
requireContentLengthDescription: "Wenn der Server keine Content-Length zurückgibt, wird keine Vorschau erzeugt."
|
||||||
|
userAgent: "User-Agent"
|
||||||
_mediaControls:
|
_mediaControls:
|
||||||
playbackRate: "Wiedergabegeschwindigkeit"
|
playbackRate: "Wiedergabegeschwindigkeit"
|
||||||
_contextMenu:
|
_contextMenu:
|
||||||
title: "Kontextmenü"
|
title: "Kontextmenü"
|
||||||
app: "Anwendung"
|
app: "Anwendung"
|
||||||
|
_gridComponent:
|
||||||
|
_error:
|
||||||
|
requiredValue: "Dieser Wert ist ein Pflichtfeld"
|
||||||
_embedCodeGen:
|
_embedCodeGen:
|
||||||
title: "Einbettungscode anpassen"
|
title: "Einbettungscode anpassen"
|
||||||
header: "Kopfzeile anzeigen"
|
header: "Kopfzeile anzeigen"
|
||||||
|
@ -2513,5 +2564,12 @@ _selfXssPrevention:
|
||||||
description1: "Wenn du hier etwas einfügst, könnte ein böswilliger Benutzer dein Konto übernehmen oder deine persönlichen Daten stehlen."
|
description1: "Wenn du hier etwas einfügst, könnte ein böswilliger Benutzer dein Konto übernehmen oder deine persönlichen Daten stehlen."
|
||||||
description3: "Weitere Informationen findest du hier. {link}"
|
description3: "Weitere Informationen findest du hier. {link}"
|
||||||
_remoteLookupErrors:
|
_remoteLookupErrors:
|
||||||
|
_federationNotAllowed:
|
||||||
|
title: "Kommunikation mit diesem Server nicht möglich"
|
||||||
|
description: "Möglicherweise wurde die Kommunikation mit diesem Server deaktiviert oder dieser Server ist blockiert.\nWende dich bitte an den Serveradministrator."
|
||||||
|
_uriInvalid:
|
||||||
|
title: "URI ist fehlerhaft"
|
||||||
|
description: "Es gibt ein Problem mit der von dir eingegebenen URI. Bitte prüfe, ob du Zeichen eingegeben hast, die in der URI nicht verwendet werden können."
|
||||||
_noSuchObject:
|
_noSuchObject:
|
||||||
title: "Nicht gefunden"
|
title: "Nicht gefunden"
|
||||||
|
description: "Die angeforderte Ressource konnte nicht gefunden werden, bitte überprüfe die URI erneut."
|
||||||
|
|
|
@ -5,6 +5,7 @@ introMisskey: "Welcome! Misskey is an open source, decentralized microblogging s
|
||||||
poweredByMisskeyDescription: "{name} is one of the services powered by the open source platform <b>Misskey</b> (referred to as a \"Misskey instance\")."
|
poweredByMisskeyDescription: "{name} is one of the services powered by the open source platform <b>Misskey</b> (referred to as a \"Misskey instance\")."
|
||||||
monthAndDay: "{month}/{day}"
|
monthAndDay: "{month}/{day}"
|
||||||
search: "Search"
|
search: "Search"
|
||||||
|
reset: "Reset"
|
||||||
notifications: "Notifications"
|
notifications: "Notifications"
|
||||||
username: "Username"
|
username: "Username"
|
||||||
password: "Password"
|
password: "Password"
|
||||||
|
@ -48,6 +49,7 @@ pin: "Pin to profile"
|
||||||
unpin: "Unpin from profile"
|
unpin: "Unpin from profile"
|
||||||
copyContent: "Copy contents"
|
copyContent: "Copy contents"
|
||||||
copyLink: "Copy link"
|
copyLink: "Copy link"
|
||||||
|
copyRemoteLink: "Copy remote link"
|
||||||
copyLinkRenote: "Copy renote link"
|
copyLinkRenote: "Copy renote link"
|
||||||
delete: "Delete"
|
delete: "Delete"
|
||||||
deleteAndEdit: "Delete and edit"
|
deleteAndEdit: "Delete and edit"
|
||||||
|
@ -686,11 +688,13 @@ testEmail: "Test email delivery"
|
||||||
wordMute: "Word mute"
|
wordMute: "Word mute"
|
||||||
wordMuteDescription: "Minimize notes that contain the specified word or phrase. Minimized notes can be displayed by clicking on them."
|
wordMuteDescription: "Minimize notes that contain the specified word or phrase. Minimized notes can be displayed by clicking on them."
|
||||||
hardWordMute: "Hard word mute"
|
hardWordMute: "Hard word mute"
|
||||||
|
showMutedWord: "Show muted words"
|
||||||
hardWordMuteDescription: "Hide notes that contain the specified word or phrase. Unlike word mute, the note will be completely hidden from view."
|
hardWordMuteDescription: "Hide notes that contain the specified word or phrase. Unlike word mute, the note will be completely hidden from view."
|
||||||
regexpError: "Regular Expression error"
|
regexpError: "Regular Expression error"
|
||||||
regexpErrorDescription: "An error occurred in the regular expression on line {line} of your {tab} word mutes:"
|
regexpErrorDescription: "An error occurred in the regular expression on line {line} of your {tab} word mutes:"
|
||||||
instanceMute: "Instance Mutes"
|
instanceMute: "Instance Mutes"
|
||||||
userSaysSomething: "{name} said something"
|
userSaysSomething: "{name} said something"
|
||||||
|
userSaysSomethingAbout: "{name} said something about \"{word}\""
|
||||||
makeActive: "Activate"
|
makeActive: "Activate"
|
||||||
display: "Display"
|
display: "Display"
|
||||||
copy: "Copy"
|
copy: "Copy"
|
||||||
|
@ -1303,6 +1307,8 @@ lockdown: "Lockdown"
|
||||||
pleaseSelectAccount: "Select an account"
|
pleaseSelectAccount: "Select an account"
|
||||||
availableRoles: "Available roles"
|
availableRoles: "Available roles"
|
||||||
acknowledgeNotesAndEnable: "Turn on after understanding the precautions."
|
acknowledgeNotesAndEnable: "Turn on after understanding the precautions."
|
||||||
|
federationSpecified: "This server is operated in a whitelist federation. Interacting with servers other than those designated by the administrator is not allowed."
|
||||||
|
federationDisabled: "Federation is disabled on this server. You cannot interact with users on other servers."
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "Require sign-in to view contents"
|
requireSigninToViewContents: "Require sign-in to view contents"
|
||||||
requireSigninToViewContentsDescription1: "Require login to view all notes and other content you have created. This will have the effect of preventing crawlers from collecting your information."
|
requireSigninToViewContentsDescription1: "Require login to view all notes and other content you have created. This will have the effect of preventing crawlers from collecting your information."
|
||||||
|
@ -2359,9 +2365,6 @@ _pages:
|
||||||
newPage: "Create a new Page"
|
newPage: "Create a new Page"
|
||||||
editPage: "Edit this Page"
|
editPage: "Edit this Page"
|
||||||
readPage: "Viewing this Page's source"
|
readPage: "Viewing this Page's source"
|
||||||
created: "Page successfully created"
|
|
||||||
updated: "Page successfully edited"
|
|
||||||
deleted: "Page successfully deleted"
|
|
||||||
pageSetting: "Page settings"
|
pageSetting: "Page settings"
|
||||||
nameAlreadyExists: "The specified Page URL already exists"
|
nameAlreadyExists: "The specified Page URL already exists"
|
||||||
invalidNameTitle: "The specified Page URL is invalid"
|
invalidNameTitle: "The specified Page URL is invalid"
|
||||||
|
@ -2723,6 +2726,66 @@ _contextMenu:
|
||||||
app: "Application"
|
app: "Application"
|
||||||
appWithShift: "Application with shift key"
|
appWithShift: "Application with shift key"
|
||||||
native: "Native"
|
native: "Native"
|
||||||
|
_gridComponent:
|
||||||
|
_error:
|
||||||
|
requiredValue: "This value is required"
|
||||||
|
columnTypeNotSupport: "Validation with regular expression is supported only for type:text columns."
|
||||||
|
patternNotMatch: "This value doesn't match the pattern in {pattern}"
|
||||||
|
notUnique: "This value must be unique"
|
||||||
|
_roleSelectDialog:
|
||||||
|
notSelected: "Not selected"
|
||||||
|
_customEmojisManager:
|
||||||
|
_gridCommon:
|
||||||
|
copySelectionRows: "Copy selected rows"
|
||||||
|
copySelectionRanges: "Copy selected ranges"
|
||||||
|
deleteSelectionRows: "Delete selected rows"
|
||||||
|
deleteSelectionRanges: "Delete rows in the selection"
|
||||||
|
searchSettings: "Search settings"
|
||||||
|
searchSettingCaption: "Set detailed search criteria."
|
||||||
|
searchLimit: ""
|
||||||
|
sortOrder: "Sort order"
|
||||||
|
registrationLogs: "Registration log"
|
||||||
|
registrationLogsCaption: "Logs will be displayed when updating or deleting Emojis. They will disappear after updating or deleting them, moving to a new page, or reloading."
|
||||||
|
alertEmojisRegisterFailedDescription: "Failed to update or delete Emojis. Please check the registration log for details."
|
||||||
|
_logs:
|
||||||
|
showSuccessLogSwitch: "Show success log"
|
||||||
|
failureLogNothing: "There is no failure log."
|
||||||
|
logNothing: "There is no log."
|
||||||
|
_remote:
|
||||||
|
selectionRowDetail: "Selected row's detail"
|
||||||
|
importSelectionRows: "Import selected rows"
|
||||||
|
importSelectionRangesRows: "Import rows in the selection"
|
||||||
|
importEmojisButton: "Import checked Emojis"
|
||||||
|
confirmImportEmojisTitle: "Import Emojis"
|
||||||
|
confirmImportEmojisDescription: "Import {count} Emoji(s) received from the remote server. Please pay close attention to the license of the Emoji. Are you sure to continue?"
|
||||||
|
_local:
|
||||||
|
tabTitleList: "List of registered Emojis"
|
||||||
|
tabTitleRegister: "Emoji registration"
|
||||||
|
_list:
|
||||||
|
emojisNothing: "There are no registered Emojis."
|
||||||
|
markAsDeleteTargetRows: "Mark selected rows as a target to delete"
|
||||||
|
markAsDeleteTargetRanges: "Mark rows in the selection as a target to delete"
|
||||||
|
alertUpdateEmojisNothingDescription: "There are no updated Emojis."
|
||||||
|
alertDeleteEmojisNothingDescription: "There are no Emojis to be deleted."
|
||||||
|
confirmMovePage: ""
|
||||||
|
confirmChangeView: ""
|
||||||
|
confirmUpdateEmojisDescription: "Update {count} Emoji(s). Are you sure to continue?"
|
||||||
|
confirmDeleteEmojisDescription: "Delete checked {count} Emoji(s). Are you sure to continue?"
|
||||||
|
confirmResetDescription: ""
|
||||||
|
confirmMovePageDesciption: "Changes have been made to the Emojis on this page.\nIf you leave the page without saving, all changes made on this page will be discarded."
|
||||||
|
dialogSelectRoleTitle: "Search by roll set in Emojis"
|
||||||
|
_register:
|
||||||
|
uploadSettingTitle: "Upload settings"
|
||||||
|
uploadSettingDescription: "On this screen, you can configure the behavior when uploading Emojis."
|
||||||
|
directoryToCategoryLabel: "Enter the directory name in the \"category\" field"
|
||||||
|
directoryToCategoryCaption: "When you drag and drop a directory, enter the directory name in the \"category\" field."
|
||||||
|
emojiInputAreaCaption: "Select the Emojis you wish to register using one of the methods."
|
||||||
|
emojiInputAreaList1: "Drag and drop image files or a directory into this frame"
|
||||||
|
emojiInputAreaList2: "Click this link to select from your computer"
|
||||||
|
emojiInputAreaList3: "Click this link to select from the drive"
|
||||||
|
confirmRegisterEmojisDescription: "Register the Emojis from the list as new custom Emojis. Are you sure to continue? (To avoid overload, only {count} Emoji(s) can be registered in a single operation)"
|
||||||
|
confirmClearEmojisDescription: "Discard the edits and clear the Emojis from the list. Are you sure to continue?"
|
||||||
|
confirmUploadEmojisDescription: "Upload the dragged and dropped {count} file(s) to the drive. Are you sure to continue?"
|
||||||
_embedCodeGen:
|
_embedCodeGen:
|
||||||
title: "Customize embed code"
|
title: "Customize embed code"
|
||||||
header: "Show header"
|
header: "Show header"
|
||||||
|
@ -2764,3 +2827,16 @@ _remoteLookupErrors:
|
||||||
_noSuchObject:
|
_noSuchObject:
|
||||||
title: "Not found"
|
title: "Not found"
|
||||||
description: "The requested resource was not found, please recheck the URI."
|
description: "The requested resource was not found, please recheck the URI."
|
||||||
|
_captcha:
|
||||||
|
verify: "Please verify the CAPTCHA"
|
||||||
|
testSiteKeyMessage: "You can check the preview by entering the test values for the site and secret keys.\nPlease see the following page for details."
|
||||||
|
_error:
|
||||||
|
_requestFailed:
|
||||||
|
title: "Failed to request CAPTCHA"
|
||||||
|
text: "Please run it after a while or check the settings again."
|
||||||
|
_verificationFailed:
|
||||||
|
title: "Failed to validate CAPTCHA"
|
||||||
|
text: "Please check again if the settings are correct."
|
||||||
|
_unknown:
|
||||||
|
title: "CAPTCHA error"
|
||||||
|
text: "An unexpected error occurred."
|
||||||
|
|
|
@ -5,6 +5,7 @@ introMisskey: "¡Bienvenido/a! Misskey es un servicio de microblogging descentra
|
||||||
poweredByMisskeyDescription: "{name} es uno de los servicios (también llamado instancia) que usa la plataforma de código abierto <b>Misskey</b>"
|
poweredByMisskeyDescription: "{name} es uno de los servicios (también llamado instancia) que usa la plataforma de código abierto <b>Misskey</b>"
|
||||||
monthAndDay: "{day}/{month}"
|
monthAndDay: "{day}/{month}"
|
||||||
search: "Buscar"
|
search: "Buscar"
|
||||||
|
reset: "Reiniciar"
|
||||||
notifications: "Notificaciones"
|
notifications: "Notificaciones"
|
||||||
username: "Nombre de usuario"
|
username: "Nombre de usuario"
|
||||||
password: "Contraseña"
|
password: "Contraseña"
|
||||||
|
@ -48,6 +49,7 @@ pin: "Fijar al perfil"
|
||||||
unpin: "Desfijar"
|
unpin: "Desfijar"
|
||||||
copyContent: "Copiar contenido"
|
copyContent: "Copiar contenido"
|
||||||
copyLink: "Copiar enlace"
|
copyLink: "Copiar enlace"
|
||||||
|
copyRemoteLink: "Copiar enlace remoto"
|
||||||
copyLinkRenote: "Copiar enlace de renota"
|
copyLinkRenote: "Copiar enlace de renota"
|
||||||
delete: "Borrar"
|
delete: "Borrar"
|
||||||
deleteAndEdit: "Borrar y editar"
|
deleteAndEdit: "Borrar y editar"
|
||||||
|
@ -199,6 +201,7 @@ followConfirm: "¿Desea seguir a {name}?"
|
||||||
proxyAccount: "Cuenta proxy"
|
proxyAccount: "Cuenta proxy"
|
||||||
proxyAccountDescription: "Una cuenta proxy es una cuenta que actúa como un seguidor remoto de un usuario bajo ciertas condiciones. Por ejemplo, cuando un usuario añade un usuario remoto a una lista, si ningún usuario local sigue al usuario agregado a la lista, la instancia no puede obtener su actividad. Así que la cuenta proxy sigue al usuario añadido a la lista"
|
proxyAccountDescription: "Una cuenta proxy es una cuenta que actúa como un seguidor remoto de un usuario bajo ciertas condiciones. Por ejemplo, cuando un usuario añade un usuario remoto a una lista, si ningún usuario local sigue al usuario agregado a la lista, la instancia no puede obtener su actividad. Así que la cuenta proxy sigue al usuario añadido a la lista"
|
||||||
host: "Host"
|
host: "Host"
|
||||||
|
selectSelf: "Elígete a ti mismo"
|
||||||
selectUser: "Elegir usuario"
|
selectUser: "Elegir usuario"
|
||||||
recipient: "Recipiente"
|
recipient: "Recipiente"
|
||||||
annotation: "Anotación"
|
annotation: "Anotación"
|
||||||
|
@ -452,6 +455,7 @@ totpDescription: "Ingresa una contaseña de un sólo uso usando la aplicación a
|
||||||
moderator: "Moderador"
|
moderator: "Moderador"
|
||||||
moderation: "Moderación"
|
moderation: "Moderación"
|
||||||
moderationNote: "Nota de moderación"
|
moderationNote: "Nota de moderación"
|
||||||
|
moderationNoteDescription: "Puedes rellenar notas que solo se comparten entre moderadores."
|
||||||
addModerationNote: "Añadir nota de moderación"
|
addModerationNote: "Añadir nota de moderación"
|
||||||
moderationLogs: "Log de moderación"
|
moderationLogs: "Log de moderación"
|
||||||
nUsersMentioned: "{n} usuarios mencionados"
|
nUsersMentioned: "{n} usuarios mencionados"
|
||||||
|
@ -486,10 +490,12 @@ retype: "Ingrese de nuevo"
|
||||||
noteOf: "Notas de {user}"
|
noteOf: "Notas de {user}"
|
||||||
quoteAttached: "Cita añadida"
|
quoteAttached: "Cita añadida"
|
||||||
quoteQuestion: "¿Quiere añadir una cita?"
|
quoteQuestion: "¿Quiere añadir una cita?"
|
||||||
|
attachAsFileQuestion: "El texto del portapapeles es demasiado grande ¿Desea adjuntarlo como archivo de texto?"
|
||||||
noMessagesYet: "Aún no hay chat"
|
noMessagesYet: "Aún no hay chat"
|
||||||
newMessageExists: "Tienes un mensaje nuevo"
|
newMessageExists: "Tienes un mensaje nuevo"
|
||||||
onlyOneFileCanBeAttached: "Solo se puede añadir un archivo al mensaje"
|
onlyOneFileCanBeAttached: "Solo se puede añadir un archivo al mensaje"
|
||||||
signinRequired: "Iniciar sesión"
|
signinRequired: "Iniciar sesión"
|
||||||
|
signinOrContinueOnRemote: "Para continuar, tendrá que ir a su servidor o registrarse e iniciar sesión en este servidor"
|
||||||
invitations: "Invitar"
|
invitations: "Invitar"
|
||||||
invitationCode: "Código de invitación"
|
invitationCode: "Código de invitación"
|
||||||
checking: "Comprobando"
|
checking: "Comprobando"
|
||||||
|
@ -513,6 +519,8 @@ emojiStyle: "Estilo de emoji"
|
||||||
native: "Nativo"
|
native: "Nativo"
|
||||||
menuStyle: "Diseño del menú"
|
menuStyle: "Diseño del menú"
|
||||||
style: "Diseño"
|
style: "Diseño"
|
||||||
|
drawer: "Cajón de Aplicaciones"
|
||||||
|
popup: "Ventana emergente"
|
||||||
showNoteActionsOnlyHover: "Mostrar acciones de la nota sólo al pasar el cursor"
|
showNoteActionsOnlyHover: "Mostrar acciones de la nota sólo al pasar el cursor"
|
||||||
showReactionsCount: "Mostrar el número de reacciones en las notas"
|
showReactionsCount: "Mostrar el número de reacciones en las notas"
|
||||||
noHistory: "No hay datos en el historial"
|
noHistory: "No hay datos en el historial"
|
||||||
|
@ -580,6 +588,7 @@ masterVolume: "Volumen principal"
|
||||||
notUseSound: "Sin sonido"
|
notUseSound: "Sin sonido"
|
||||||
useSoundOnlyWhenActive: "Sonar solo cuando Misskey esté activo"
|
useSoundOnlyWhenActive: "Sonar solo cuando Misskey esté activo"
|
||||||
details: "Detalles"
|
details: "Detalles"
|
||||||
|
renoteDetails: "Detalles(Renota)"
|
||||||
chooseEmoji: "Elije un emoji"
|
chooseEmoji: "Elije un emoji"
|
||||||
unableToProcess: "La operación no se puede llevar a cabo"
|
unableToProcess: "La operación no se puede llevar a cabo"
|
||||||
recentUsed: "Usado recientemente"
|
recentUsed: "Usado recientemente"
|
||||||
|
@ -595,6 +604,7 @@ ascendingOrder: "Ascendente"
|
||||||
descendingOrder: "Descendente"
|
descendingOrder: "Descendente"
|
||||||
scratchpad: "Scratch pad"
|
scratchpad: "Scratch pad"
|
||||||
scratchpadDescription: "Scratchpad proporciona un entorno experimental para AiScript. Puede escribir, ejecutar y verificar los resultados que interactúan con Misskey."
|
scratchpadDescription: "Scratchpad proporciona un entorno experimental para AiScript. Puede escribir, ejecutar y verificar los resultados que interactúan con Misskey."
|
||||||
|
uiInspector: "Inspector de UI"
|
||||||
output: "Salida"
|
output: "Salida"
|
||||||
script: "Script"
|
script: "Script"
|
||||||
disablePagesScript: "Deshabilitar AiScript en Páginas"
|
disablePagesScript: "Deshabilitar AiScript en Páginas"
|
||||||
|
@ -675,7 +685,10 @@ smtpSecure: "Usar SSL/TLS implícito en la conexión SMTP"
|
||||||
smtpSecureInfo: "Apagar cuando se use STARTTLS"
|
smtpSecureInfo: "Apagar cuando se use STARTTLS"
|
||||||
testEmail: "Prueba de envío"
|
testEmail: "Prueba de envío"
|
||||||
wordMute: "Silenciar palabras"
|
wordMute: "Silenciar palabras"
|
||||||
|
wordMuteDescription: "Minimiza las notas que contienen la palabra o frase especificada. Las notas minimizadas pueden visualizarse haciendo clic sobre ellas."
|
||||||
hardWordMute: "Filtro de palabra fuerte"
|
hardWordMute: "Filtro de palabra fuerte"
|
||||||
|
showMutedWord: "Mostrar palabras silenciadas."
|
||||||
|
hardWordMuteDescription: "Oculta las notas que contienen la palabra o frase especificada. A diferencia de Silenciar palabra, la nota quedará completamente oculta a la vista."
|
||||||
regexpError: "Error de la expresión regular"
|
regexpError: "Error de la expresión regular"
|
||||||
regexpErrorDescription: "Ocurrió un error en la expresión regular en la linea {line} de las palabras muteadas {tab}"
|
regexpErrorDescription: "Ocurrió un error en la expresión regular en la linea {line} de las palabras muteadas {tab}"
|
||||||
instanceMute: "Instancias silenciadas"
|
instanceMute: "Instancias silenciadas"
|
||||||
|
@ -1126,6 +1139,7 @@ preventAiLearningDescription: "Pedirle a las arañas (crawlers) no usar los text
|
||||||
options: "Opción"
|
options: "Opción"
|
||||||
specifyUser: "Especificar usuario"
|
specifyUser: "Especificar usuario"
|
||||||
lookupConfirm: "¿Quiere informarse?"
|
lookupConfirm: "¿Quiere informarse?"
|
||||||
|
specifyHost: "Especificar Host"
|
||||||
failedToPreviewUrl: "No se pudo generar la vista previa"
|
failedToPreviewUrl: "No se pudo generar la vista previa"
|
||||||
update: "Actualizar"
|
update: "Actualizar"
|
||||||
rolesThatCanBeUsedThisEmojiAsReaction: "Roles que pueden usar este emoji como reacción"
|
rolesThatCanBeUsedThisEmojiAsReaction: "Roles que pueden usar este emoji como reacción"
|
||||||
|
@ -1260,6 +1274,11 @@ tryAgain: "Por favor , inténtalo de nuevo"
|
||||||
performance: "Rendimiento"
|
performance: "Rendimiento"
|
||||||
unknownWebAuthnKey: "Esto no se ha registrado llave maestra."
|
unknownWebAuthnKey: "Esto no se ha registrado llave maestra."
|
||||||
messageToFollower: "Mensaje a seguidores"
|
messageToFollower: "Mensaje a seguidores"
|
||||||
|
federationSpecified: "Este servidor opera en una federación de listas blancas. No puede interactuar con otros servidores que no sean los especificados por el administrador."
|
||||||
|
federationDisabled: "La federación está desactivada en este servidor. No puede interactuar con usuarios de otros servidores"
|
||||||
|
_accountSettings:
|
||||||
|
requireSigninToViewContents: "Se requiere iniciar sesión para ver el contenido"
|
||||||
|
requireSigninToViewContentsDescription1: "Requiere iniciar sesión para ver todas las notas y otros contenidos que hayas creado. Se espera que esto evite que los rastreadores recopilen información."
|
||||||
_abuseUserReport:
|
_abuseUserReport:
|
||||||
accept: "Acepte"
|
accept: "Acepte"
|
||||||
reject: "repudio"
|
reject: "repudio"
|
||||||
|
@ -2275,9 +2294,6 @@ _pages:
|
||||||
newPage: "Crear página"
|
newPage: "Crear página"
|
||||||
editPage: "Editar página"
|
editPage: "Editar página"
|
||||||
readPage: "Viendo la fuente"
|
readPage: "Viendo la fuente"
|
||||||
created: "La página fue creada"
|
|
||||||
updated: "La página fue actualizada"
|
|
||||||
deleted: "La página borrada"
|
|
||||||
pageSetting: "Configurar página"
|
pageSetting: "Configurar página"
|
||||||
nameAlreadyExists: "La URL de la página especificada ya existe"
|
nameAlreadyExists: "La URL de la página especificada ya existe"
|
||||||
invalidNameTitle: "URL inválida"
|
invalidNameTitle: "URL inválida"
|
||||||
|
|
|
@ -2118,9 +2118,6 @@ _pages:
|
||||||
newPage: "Créer une page"
|
newPage: "Créer une page"
|
||||||
editPage: "Modifier une page"
|
editPage: "Modifier une page"
|
||||||
readPage: "Affichage de la source en cours"
|
readPage: "Affichage de la source en cours"
|
||||||
created: "La page a été créée !"
|
|
||||||
updated: "La page a été mise à jour !"
|
|
||||||
deleted: "La page a été supprimée"
|
|
||||||
pageSetting: "Paramètres de la Page"
|
pageSetting: "Paramètres de la Page"
|
||||||
nameAlreadyExists: "L'URL de page spécifiée existe déjà"
|
nameAlreadyExists: "L'URL de page spécifiée existe déjà"
|
||||||
invalidNameTitle: "L'URL de page spécifiée n’est pas valide"
|
invalidNameTitle: "L'URL de page spécifiée n’est pas valide"
|
||||||
|
|
|
@ -2285,9 +2285,6 @@ _pages:
|
||||||
newPage: "Buat halaman baru"
|
newPage: "Buat halaman baru"
|
||||||
editPage: "Sunting halaman"
|
editPage: "Sunting halaman"
|
||||||
readPage: "Lihat sumber kode aktif"
|
readPage: "Lihat sumber kode aktif"
|
||||||
created: "Halaman berhasil dibuat"
|
|
||||||
updated: "Halaman berhasil diperbaharui!"
|
|
||||||
deleted: "Halaman telah dihapus"
|
|
||||||
pageSetting: "Pengaturan Halaman"
|
pageSetting: "Pengaturan Halaman"
|
||||||
nameAlreadyExists: "URL Halaman yang ditentukan sudah ada"
|
nameAlreadyExists: "URL Halaman yang ditentukan sudah ada"
|
||||||
invalidNameTitle: "URL Halaman yang ditentukan tidak valid"
|
invalidNameTitle: "URL Halaman yang ditentukan tidak valid"
|
||||||
|
|
|
@ -4195,7 +4195,7 @@ export interface Locale extends ILocale {
|
||||||
*/
|
*/
|
||||||
"invalidParamError": string;
|
"invalidParamError": string;
|
||||||
/**
|
/**
|
||||||
* リクエストパラメータに問題があります。通常これはバグですが、入力した文字数が多すぎる等の可能性もあります。
|
* リクエストパラメータに問題があります。通常これはバグですが、入力した文字数が多すぎる・許可されていない文字を入力している等の可能性もあります。
|
||||||
*/
|
*/
|
||||||
"invalidParamErrorDescription": string;
|
"invalidParamErrorDescription": string;
|
||||||
/**
|
/**
|
||||||
|
@ -9180,18 +9180,6 @@ export interface Locale extends ILocale {
|
||||||
* ソースを表示中
|
* ソースを表示中
|
||||||
*/
|
*/
|
||||||
"readPage": string;
|
"readPage": string;
|
||||||
/**
|
|
||||||
* ページを作成しました
|
|
||||||
*/
|
|
||||||
"created": string;
|
|
||||||
/**
|
|
||||||
* ページを更新しました
|
|
||||||
*/
|
|
||||||
"updated": string;
|
|
||||||
/**
|
|
||||||
* ページを削除しました
|
|
||||||
*/
|
|
||||||
"deleted": string;
|
|
||||||
/**
|
/**
|
||||||
* ページ設定
|
* ページ設定
|
||||||
*/
|
*/
|
||||||
|
@ -10588,7 +10576,7 @@ export interface Locale extends ILocale {
|
||||||
*/
|
*/
|
||||||
"deleteSelectionRows": string;
|
"deleteSelectionRows": string;
|
||||||
/**
|
/**
|
||||||
* 選択範囲の行を削除
|
* 選択範囲の値をクリア
|
||||||
*/
|
*/
|
||||||
"deleteSelectionRanges": string;
|
"deleteSelectionRanges": string;
|
||||||
/**
|
/**
|
||||||
|
@ -10599,6 +10587,10 @@ export interface Locale extends ILocale {
|
||||||
* 検索条件を詳細に設定します。
|
* 検索条件を詳細に設定します。
|
||||||
*/
|
*/
|
||||||
"searchSettingCaption": string;
|
"searchSettingCaption": string;
|
||||||
|
/**
|
||||||
|
* 表示件数
|
||||||
|
*/
|
||||||
|
"searchLimit": string;
|
||||||
/**
|
/**
|
||||||
* 並び順
|
* 並び順
|
||||||
*/
|
*/
|
||||||
|
@ -10611,10 +10603,6 @@ export interface Locale extends ILocale {
|
||||||
* 絵文字更新・削除時のログが表示されます。更新・削除操作を行ったり、ページを遷移・リロードすると消えます。
|
* 絵文字更新・削除時のログが表示されます。更新・削除操作を行ったり、ページを遷移・リロードすると消えます。
|
||||||
*/
|
*/
|
||||||
"registrationLogsCaption": string;
|
"registrationLogsCaption": string;
|
||||||
/**
|
|
||||||
* エラー
|
|
||||||
*/
|
|
||||||
"alertEmojisRegisterFailedTitle": string;
|
|
||||||
/**
|
/**
|
||||||
* 絵文字の更新・削除に失敗しました。詳細は登録ログをご確認ください。
|
* 絵文字の更新・削除に失敗しました。詳細は登録ログをご確認ください。
|
||||||
*/
|
*/
|
||||||
|
@ -10635,6 +10623,10 @@ export interface Locale extends ILocale {
|
||||||
"logNothing": string;
|
"logNothing": string;
|
||||||
};
|
};
|
||||||
"_remote": {
|
"_remote": {
|
||||||
|
/**
|
||||||
|
* 選択行の詳細
|
||||||
|
*/
|
||||||
|
"selectionRowDetail": string;
|
||||||
/**
|
/**
|
||||||
* 選択行をインポート
|
* 選択行をインポート
|
||||||
*/
|
*/
|
||||||
|
@ -10687,21 +10679,30 @@ export interface Locale extends ILocale {
|
||||||
*/
|
*/
|
||||||
"alertDeleteEmojisNothingDescription": string;
|
"alertDeleteEmojisNothingDescription": string;
|
||||||
/**
|
/**
|
||||||
* 確認
|
* ページを移動しますか?
|
||||||
*/
|
*/
|
||||||
"confirmUpdateEmojisTitle": string;
|
"confirmMovePage": string;
|
||||||
|
/**
|
||||||
|
* 表示を変更しますか?
|
||||||
|
*/
|
||||||
|
"confirmChangeView": string;
|
||||||
/**
|
/**
|
||||||
* {count}個の絵文字を更新します。実行しますか?
|
* {count}個の絵文字を更新します。実行しますか?
|
||||||
*/
|
*/
|
||||||
"confirmUpdateEmojisDescription": ParameterizedString<"count">;
|
"confirmUpdateEmojisDescription": ParameterizedString<"count">;
|
||||||
/**
|
|
||||||
* 確認
|
|
||||||
*/
|
|
||||||
"confirmDeleteEmojisTitle": string;
|
|
||||||
/**
|
/**
|
||||||
* チェックがつけられた{count}個の絵文字を削除します。実行しますか?
|
* チェックがつけられた{count}個の絵文字を削除します。実行しますか?
|
||||||
*/
|
*/
|
||||||
"confirmDeleteEmojisDescription": ParameterizedString<"count">;
|
"confirmDeleteEmojisDescription": ParameterizedString<"count">;
|
||||||
|
/**
|
||||||
|
* 今までに加えた変更がすべてリセットされます。
|
||||||
|
*/
|
||||||
|
"confirmResetDescription": string;
|
||||||
|
/**
|
||||||
|
* このページの絵文字に変更が加えられています。
|
||||||
|
* 保存せずにこのままページを移動すると、このページで加えた変更はすべて破棄されます。
|
||||||
|
*/
|
||||||
|
"confirmMovePageDesciption": string;
|
||||||
/**
|
/**
|
||||||
* 絵文字に設定されたロールで検索
|
* 絵文字に設定されたロールで検索
|
||||||
*/
|
*/
|
||||||
|
@ -10740,26 +10741,14 @@ export interface Locale extends ILocale {
|
||||||
* このリンクをクリックしてドライブから選択する
|
* このリンクをクリックしてドライブから選択する
|
||||||
*/
|
*/
|
||||||
"emojiInputAreaList3": string;
|
"emojiInputAreaList3": string;
|
||||||
/**
|
|
||||||
* 確認
|
|
||||||
*/
|
|
||||||
"confirmRegisterEmojisTitle": string;
|
|
||||||
/**
|
/**
|
||||||
* リストに表示されている絵文字を新たなカスタム絵文字として登録します。よろしいですか?(負荷を避けるため、一度の操作で登録可能な絵文字は{count}件までです)
|
* リストに表示されている絵文字を新たなカスタム絵文字として登録します。よろしいですか?(負荷を避けるため、一度の操作で登録可能な絵文字は{count}件までです)
|
||||||
*/
|
*/
|
||||||
"confirmRegisterEmojisDescription": ParameterizedString<"count">;
|
"confirmRegisterEmojisDescription": ParameterizedString<"count">;
|
||||||
/**
|
|
||||||
* 確認
|
|
||||||
*/
|
|
||||||
"confirmClearEmojisTitle": string;
|
|
||||||
/**
|
/**
|
||||||
* 編集内容を破棄し、リストに表示されている絵文字をクリアします。よろしいですか?
|
* 編集内容を破棄し、リストに表示されている絵文字をクリアします。よろしいですか?
|
||||||
*/
|
*/
|
||||||
"confirmClearEmojisDescription": string;
|
"confirmClearEmojisDescription": string;
|
||||||
/**
|
|
||||||
* 確認
|
|
||||||
*/
|
|
||||||
"confirmUploadEmojisTitle": string;
|
|
||||||
/**
|
/**
|
||||||
* ドラッグ&ドロップされた{count}個のファイルをドライブにアップロードします。実行しますか?
|
* ドラッグ&ドロップされた{count}個のファイルをドライブにアップロードします。実行しますか?
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -5,6 +5,7 @@ introMisskey: "Eccoci! Misskey è un servizio di microblogging decentralizzato,
|
||||||
poweredByMisskeyDescription: "{name} è uno dei servizi (chiamati istanze) che utilizzano la piattaforma open source <b>Misskey</b>."
|
poweredByMisskeyDescription: "{name} è uno dei servizi (chiamati istanze) che utilizzano la piattaforma open source <b>Misskey</b>."
|
||||||
monthAndDay: "{day}/{month}"
|
monthAndDay: "{day}/{month}"
|
||||||
search: "Cerca"
|
search: "Cerca"
|
||||||
|
reset: "Ripristinare"
|
||||||
notifications: "Notifiche"
|
notifications: "Notifiche"
|
||||||
username: "Nome utente"
|
username: "Nome utente"
|
||||||
password: "Password"
|
password: "Password"
|
||||||
|
@ -106,7 +107,7 @@ makeFollowManuallyApprove: "Approva i follower manualmente"
|
||||||
defaultNoteVisibility: "Privacy predefinita delle note"
|
defaultNoteVisibility: "Privacy predefinita delle note"
|
||||||
follow: "Segui"
|
follow: "Segui"
|
||||||
followRequest: "Richiesta di follow"
|
followRequest: "Richiesta di follow"
|
||||||
followRequests: "Richieste di follow"
|
followRequests: "Relazioni"
|
||||||
unfollow: "Togli Following"
|
unfollow: "Togli Following"
|
||||||
followRequestPending: "Richiesta in approvazione"
|
followRequestPending: "Richiesta in approvazione"
|
||||||
enterEmoji: "Inserisci emoji"
|
enterEmoji: "Inserisci emoji"
|
||||||
|
@ -536,7 +537,7 @@ regenerate: "Generare di nuovo"
|
||||||
fontSize: "Dimensione carattere"
|
fontSize: "Dimensione carattere"
|
||||||
mediaListWithOneImageAppearance: "Altezza dell'elenco media con una sola immagine "
|
mediaListWithOneImageAppearance: "Altezza dell'elenco media con una sola immagine "
|
||||||
limitTo: "Limita a {x}"
|
limitTo: "Limita a {x}"
|
||||||
noFollowRequests: "Non hai alcuna richiesta di follow"
|
noFollowRequests: "Non ci sono richieste di relazione"
|
||||||
openImageInNewTab: "Apri le immagini in un nuovo tab"
|
openImageInNewTab: "Apri le immagini in un nuovo tab"
|
||||||
dashboard: "Pannello di controllo"
|
dashboard: "Pannello di controllo"
|
||||||
local: "Locale"
|
local: "Locale"
|
||||||
|
@ -1932,7 +1933,7 @@ _serverDisconnectedBehavior:
|
||||||
quiet: "Visualizza avviso in modo discreto"
|
quiet: "Visualizza avviso in modo discreto"
|
||||||
_channel:
|
_channel:
|
||||||
create: "Nuovo canale"
|
create: "Nuovo canale"
|
||||||
edit: "Gerisci canale"
|
edit: "Modifica il canale"
|
||||||
setBanner: "Scegli intestazione"
|
setBanner: "Scegli intestazione"
|
||||||
removeBanner: "Rimuovi intestazione"
|
removeBanner: "Rimuovi intestazione"
|
||||||
featured: "Popolari nel canale"
|
featured: "Popolari nel canale"
|
||||||
|
@ -1960,7 +1961,7 @@ _instanceMute:
|
||||||
_theme:
|
_theme:
|
||||||
explore: "Esplora temi"
|
explore: "Esplora temi"
|
||||||
install: "Installa un tema"
|
install: "Installa un tema"
|
||||||
manage: "Gestione temi"
|
manage: "Gestione dei temi"
|
||||||
code: "Codice tema"
|
code: "Codice tema"
|
||||||
description: "Descrizione"
|
description: "Descrizione"
|
||||||
installed: "{name} è installato"
|
installed: "{name} è installato"
|
||||||
|
@ -2107,12 +2108,12 @@ _permissions:
|
||||||
"read:messaging": "Visualizzare la chat"
|
"read:messaging": "Visualizzare la chat"
|
||||||
"write:messaging": "Gestire la chat"
|
"write:messaging": "Gestire la chat"
|
||||||
"read:mutes": "Vedi i profili silenziati"
|
"read:mutes": "Vedi i profili silenziati"
|
||||||
"write:mutes": "Gestisci i profili silenziati"
|
"write:mutes": "Gestione dei profili silenziati"
|
||||||
"write:notes": "Creare / Eliminare note"
|
"write:notes": "Creare / Eliminare note"
|
||||||
"read:notifications": "Visualizzare notifiche"
|
"read:notifications": "Visualizzare notifiche"
|
||||||
"write:notifications": "Gestire notifiche"
|
"write:notifications": "Gestione delle notifiche"
|
||||||
"read:reactions": "Vedi reazioni"
|
"read:reactions": "Vedi reazioni"
|
||||||
"write:reactions": "Gerisci reazioni"
|
"write:reactions": "Gestione delle reazioni"
|
||||||
"write:votes": "Votare"
|
"write:votes": "Votare"
|
||||||
"read:pages": "Visualizzare pagine"
|
"read:pages": "Visualizzare pagine"
|
||||||
"write:pages": "Gestire pagine"
|
"write:pages": "Gestire pagine"
|
||||||
|
@ -2121,7 +2122,7 @@ _permissions:
|
||||||
"read:user-groups": "Vedere i gruppi di utenti"
|
"read:user-groups": "Vedere i gruppi di utenti"
|
||||||
"write:user-groups": "Gestire i gruppi di utenti"
|
"write:user-groups": "Gestire i gruppi di utenti"
|
||||||
"read:channels": "Visualizza canali"
|
"read:channels": "Visualizza canali"
|
||||||
"write:channels": "Gerisci canali"
|
"write:channels": "Gestione dei canali"
|
||||||
"read:gallery": "Visualizza la galleria."
|
"read:gallery": "Visualizza la galleria."
|
||||||
"write:gallery": "Gestione della galleria"
|
"write:gallery": "Gestione della galleria"
|
||||||
"read:gallery-likes": "Visualizza i contenuti della galleria."
|
"read:gallery-likes": "Visualizza i contenuti della galleria."
|
||||||
|
@ -2364,9 +2365,6 @@ _pages:
|
||||||
newPage: "Crea pagina"
|
newPage: "Crea pagina"
|
||||||
editPage: "Modifica pagina"
|
editPage: "Modifica pagina"
|
||||||
readPage: "Visualizzando fonte "
|
readPage: "Visualizzando fonte "
|
||||||
created: "Pagina creata!"
|
|
||||||
updated: "Pagina aggiornata con successo!"
|
|
||||||
deleted: "Pagina eliminata"
|
|
||||||
pageSetting: "Impostazioni pagina"
|
pageSetting: "Impostazioni pagina"
|
||||||
nameAlreadyExists: "Esiste già una pagina con lo stesso URL."
|
nameAlreadyExists: "Esiste già una pagina con lo stesso URL."
|
||||||
invalidNameTitle: "L'URL di pagina definito non è valido"
|
invalidNameTitle: "L'URL di pagina definito non è valido"
|
||||||
|
@ -2728,6 +2726,66 @@ _contextMenu:
|
||||||
app: "Applicazione"
|
app: "Applicazione"
|
||||||
appWithShift: "Applicazione Shift+Tasto"
|
appWithShift: "Applicazione Shift+Tasto"
|
||||||
native: "Interfaccia utente del browser"
|
native: "Interfaccia utente del browser"
|
||||||
|
_gridComponent:
|
||||||
|
_error:
|
||||||
|
requiredValue: "Campo obbligatorio"
|
||||||
|
columnTypeNotSupport: "Solo le colonne type:text permettono la convalida delle Espresioni Regolari"
|
||||||
|
patternNotMatch: "Il valore non coincide con {pattern}"
|
||||||
|
notUnique: "Il valore deve essere univoco"
|
||||||
|
_roleSelectDialog:
|
||||||
|
notSelected: "Niente selezioato"
|
||||||
|
_customEmojisManager:
|
||||||
|
_gridCommon:
|
||||||
|
copySelectionRows: "Copia le righe selezionate"
|
||||||
|
copySelectionRanges: "Copia l'intervallo selezionato"
|
||||||
|
deleteSelectionRows: "Elimina le righe selezionate"
|
||||||
|
deleteSelectionRanges: "Elimina le righe nell'intervallo selezionato"
|
||||||
|
searchSettings: "Impostazioni di ricerca"
|
||||||
|
searchSettingCaption: "Imposta condizioni di ricerca dettagliate."
|
||||||
|
searchLimit: "Risultati visualizzati"
|
||||||
|
sortOrder: "Ordine"
|
||||||
|
registrationLogs: "Storico della registrazione"
|
||||||
|
registrationLogsCaption: "Lo storico verrà visualizzato in base alla attività sulle emoji. Scompare quando si esegue un'operazione di aggiornamento/eliminazione o si modifica/ricarica la pagina."
|
||||||
|
alertEmojisRegisterFailedDescription: "Attenzione, è impossibile modificare la emoji. Si prega di controllare lo storico per ulteriori dettagli."
|
||||||
|
_logs:
|
||||||
|
showSuccessLogSwitch: "Mostra le azioni a buon fine"
|
||||||
|
failureLogNothing: "Non ci sono errori nello storico delle emoji"
|
||||||
|
logNothing: "Lo storico è vuoto."
|
||||||
|
_remote:
|
||||||
|
selectionRowDetail: "Dettagli della riga selezionata"
|
||||||
|
importSelectionRows: "Importa le righe selezionate"
|
||||||
|
importSelectionRangesRows: "Importa le righe nell'intervallo selezionato"
|
||||||
|
importEmojisButton: "Importa le emoji selezionate"
|
||||||
|
confirmImportEmojisTitle: "Importazione emoji"
|
||||||
|
confirmImportEmojisDescription: "Importazione di {count} emoji ricevute da remoto. Si prega di prestare molta attenzione al tipo di licenza delle emoji. Vuoi confermare?"
|
||||||
|
_local:
|
||||||
|
tabTitleList: "Elenco delle emoji registrate"
|
||||||
|
tabTitleRegister: "Registrazione emoji"
|
||||||
|
_list:
|
||||||
|
emojisNothing: "Non ci sono emoji registrate."
|
||||||
|
markAsDeleteTargetRows: "Selezionare le righe come eliminabili"
|
||||||
|
markAsDeleteTargetRanges: "Selezionare le righe nell'intervallo come eliminabili"
|
||||||
|
alertUpdateEmojisNothingDescription: "Non ci sono emoji aggiornate."
|
||||||
|
alertDeleteEmojisNothingDescription: "Non ci sono emoji da eliminare."
|
||||||
|
confirmMovePage: "Vuoi davvero spostare la pagina?"
|
||||||
|
confirmChangeView: "Vuoi davvero cambiare la vista?"
|
||||||
|
confirmUpdateEmojisDescription: "Aggiornamento di {count} emoji. Vuoi davvero continuare?"
|
||||||
|
confirmDeleteEmojisDescription: "Eliminazione delle {count} emoji selezionate. Vuoi davvero continuare?"
|
||||||
|
confirmResetDescription: "Verranno ripristinate tutte le modifiche apportate finora."
|
||||||
|
confirmMovePageDesciption: "Sono state modificate le emoji in questa pagina.\nUscendo senza salvare, tutte le modifiche verranno ignorate."
|
||||||
|
dialogSelectRoleTitle: "Cerca emoji per ruolo"
|
||||||
|
_register:
|
||||||
|
uploadSettingTitle: "Caricamento impostazioni"
|
||||||
|
uploadSettingDescription: "Questa schermata ti permette di scegliere il comportamento durante il caricamento delle emoji."
|
||||||
|
directoryToCategoryLabel: "Inseriscile in una cartella omonima alla categoria"
|
||||||
|
directoryToCategoryCaption: "Crea il campo categoria in base alla cartella."
|
||||||
|
emojiInputAreaCaption: "Seleziona l'emoji da registrare utilizzando uno dei metodi."
|
||||||
|
emojiInputAreaList1: "Trascina una immagine o una cartella in quest'area"
|
||||||
|
emojiInputAreaList2: "Clicca per scegliere file dal tuo dispositivo"
|
||||||
|
emojiInputAreaList3: "Clicca per selezionare dal Drive"
|
||||||
|
confirmRegisterEmojisDescription: "Registrazione delle emoji elencate come nuove emoji personalizzate. Vuoi davvero procedere? (Per evitare sovraccarichi, puoi registrare al massimo {count} emoji per volta)"
|
||||||
|
confirmClearEmojisDescription: "Annullare le modifiche e cancella le emoji nell'elenco. Confermi?"
|
||||||
|
confirmUploadEmojisDescription: "Caricamento sul Drive di {count} file locali. Vuoi davvero procedere?"
|
||||||
_embedCodeGen:
|
_embedCodeGen:
|
||||||
title: "Personalizza il codice di incorporamento"
|
title: "Personalizza il codice di incorporamento"
|
||||||
header: "Mostra la testata"
|
header: "Mostra la testata"
|
||||||
|
|
|
@ -1044,7 +1044,7 @@ youCannotCreateAnymore: "これ以上作成することはできません。"
|
||||||
cannotPerformTemporary: "一時的に利用できません"
|
cannotPerformTemporary: "一時的に利用できません"
|
||||||
cannotPerformTemporaryDescription: "操作回数が制限を超過するため一時的に利用できません。しばらく時間を置いてから再度お試しください。"
|
cannotPerformTemporaryDescription: "操作回数が制限を超過するため一時的に利用できません。しばらく時間を置いてから再度お試しください。"
|
||||||
invalidParamError: "パラメータエラー"
|
invalidParamError: "パラメータエラー"
|
||||||
invalidParamErrorDescription: "リクエストパラメータに問題があります。通常これはバグですが、入力した文字数が多すぎる等の可能性もあります。"
|
invalidParamErrorDescription: "リクエストパラメータに問題があります。通常これはバグですが、入力した文字数が多すぎる・許可されていない文字を入力している等の可能性もあります。"
|
||||||
permissionDeniedError: "操作が拒否されました"
|
permissionDeniedError: "操作が拒否されました"
|
||||||
permissionDeniedErrorDescription: "このアカウントにはこの操作を行うための権限がありません。"
|
permissionDeniedErrorDescription: "このアカウントにはこの操作を行うための権限がありません。"
|
||||||
preset: "プリセット"
|
preset: "プリセット"
|
||||||
|
@ -2422,9 +2422,6 @@ _pages:
|
||||||
newPage: "ページの作成"
|
newPage: "ページの作成"
|
||||||
editPage: "ページの編集"
|
editPage: "ページの編集"
|
||||||
readPage: "ソースを表示中"
|
readPage: "ソースを表示中"
|
||||||
created: "ページを作成しました"
|
|
||||||
updated: "ページを更新しました"
|
|
||||||
deleted: "ページを削除しました"
|
|
||||||
pageSetting: "ページ設定"
|
pageSetting: "ページ設定"
|
||||||
nameAlreadyExists: "指定されたページURLは既に存在しています"
|
nameAlreadyExists: "指定されたページURLは既に存在しています"
|
||||||
invalidNameTitle: "不正なページURLです"
|
invalidNameTitle: "不正なページURLです"
|
||||||
|
@ -2824,19 +2821,20 @@ _customEmojisManager:
|
||||||
copySelectionRows: "選択行をコピー"
|
copySelectionRows: "選択行をコピー"
|
||||||
copySelectionRanges: "選択範囲をコピー"
|
copySelectionRanges: "選択範囲をコピー"
|
||||||
deleteSelectionRows: "選択行を削除"
|
deleteSelectionRows: "選択行を削除"
|
||||||
deleteSelectionRanges: "選択範囲の行を削除"
|
deleteSelectionRanges: "選択範囲の値をクリア"
|
||||||
searchSettings: "検索設定"
|
searchSettings: "検索設定"
|
||||||
searchSettingCaption: "検索条件を詳細に設定します。"
|
searchSettingCaption: "検索条件を詳細に設定します。"
|
||||||
|
searchLimit: "表示件数"
|
||||||
sortOrder: "並び順"
|
sortOrder: "並び順"
|
||||||
registrationLogs: "登録ログ"
|
registrationLogs: "登録ログ"
|
||||||
registrationLogsCaption: "絵文字更新・削除時のログが表示されます。更新・削除操作を行ったり、ページを遷移・リロードすると消えます。"
|
registrationLogsCaption: "絵文字更新・削除時のログが表示されます。更新・削除操作を行ったり、ページを遷移・リロードすると消えます。"
|
||||||
alertEmojisRegisterFailedTitle: "エラー"
|
|
||||||
alertEmojisRegisterFailedDescription: "絵文字の更新・削除に失敗しました。詳細は登録ログをご確認ください。"
|
alertEmojisRegisterFailedDescription: "絵文字の更新・削除に失敗しました。詳細は登録ログをご確認ください。"
|
||||||
_logs:
|
_logs:
|
||||||
showSuccessLogSwitch: "成功ログを表示"
|
showSuccessLogSwitch: "成功ログを表示"
|
||||||
failureLogNothing: "失敗ログはありません。"
|
failureLogNothing: "失敗ログはありません。"
|
||||||
logNothing: "ログはありません。"
|
logNothing: "ログはありません。"
|
||||||
_remote:
|
_remote:
|
||||||
|
selectionRowDetail: "選択行の詳細"
|
||||||
importSelectionRows: "選択行をインポート"
|
importSelectionRows: "選択行をインポート"
|
||||||
importSelectionRangesRows: "選択範囲の行をインポート"
|
importSelectionRangesRows: "選択範囲の行をインポート"
|
||||||
importEmojisButton: "チェックされた絵文字をインポート"
|
importEmojisButton: "チェックされた絵文字をインポート"
|
||||||
|
@ -2851,10 +2849,12 @@ _customEmojisManager:
|
||||||
markAsDeleteTargetRanges: "選択範囲の行を削除対象にする"
|
markAsDeleteTargetRanges: "選択範囲の行を削除対象にする"
|
||||||
alertUpdateEmojisNothingDescription: "変更された絵文字はありません。"
|
alertUpdateEmojisNothingDescription: "変更された絵文字はありません。"
|
||||||
alertDeleteEmojisNothingDescription: "削除対象の絵文字はありません。"
|
alertDeleteEmojisNothingDescription: "削除対象の絵文字はありません。"
|
||||||
confirmUpdateEmojisTitle: "確認"
|
confirmMovePage: "ページを移動しますか?"
|
||||||
|
confirmChangeView: "表示を変更しますか?"
|
||||||
confirmUpdateEmojisDescription: "{count}個の絵文字を更新します。実行しますか?"
|
confirmUpdateEmojisDescription: "{count}個の絵文字を更新します。実行しますか?"
|
||||||
confirmDeleteEmojisTitle: "確認"
|
|
||||||
confirmDeleteEmojisDescription: "チェックがつけられた{count}個の絵文字を削除します。実行しますか?"
|
confirmDeleteEmojisDescription: "チェックがつけられた{count}個の絵文字を削除します。実行しますか?"
|
||||||
|
confirmResetDescription: "今までに加えた変更がすべてリセットされます。"
|
||||||
|
confirmMovePageDesciption: "このページの絵文字に変更が加えられています。\n保存せずにこのままページを移動すると、このページで加えた変更はすべて破棄されます。"
|
||||||
dialogSelectRoleTitle: "絵文字に設定されたロールで検索"
|
dialogSelectRoleTitle: "絵文字に設定されたロールで検索"
|
||||||
_register:
|
_register:
|
||||||
uploadSettingTitle: "アップロード設定"
|
uploadSettingTitle: "アップロード設定"
|
||||||
|
@ -2865,11 +2865,8 @@ _customEmojisManager:
|
||||||
emojiInputAreaList1: "この枠に画像ファイルまたはディレクトリをドラッグ&ドロップ"
|
emojiInputAreaList1: "この枠に画像ファイルまたはディレクトリをドラッグ&ドロップ"
|
||||||
emojiInputAreaList2: "このリンクをクリックしてPCから選択する"
|
emojiInputAreaList2: "このリンクをクリックしてPCから選択する"
|
||||||
emojiInputAreaList3: "このリンクをクリックしてドライブから選択する"
|
emojiInputAreaList3: "このリンクをクリックしてドライブから選択する"
|
||||||
confirmRegisterEmojisTitle: "確認"
|
|
||||||
confirmRegisterEmojisDescription: "リストに表示されている絵文字を新たなカスタム絵文字として登録します。よろしいですか?(負荷を避けるため、一度の操作で登録可能な絵文字は{count}件までです)"
|
confirmRegisterEmojisDescription: "リストに表示されている絵文字を新たなカスタム絵文字として登録します。よろしいですか?(負荷を避けるため、一度の操作で登録可能な絵文字は{count}件までです)"
|
||||||
confirmClearEmojisTitle: "確認"
|
|
||||||
confirmClearEmojisDescription: "編集内容を破棄し、リストに表示されている絵文字をクリアします。よろしいですか?"
|
confirmClearEmojisDescription: "編集内容を破棄し、リストに表示されている絵文字をクリアします。よろしいですか?"
|
||||||
confirmUploadEmojisTitle: "確認"
|
|
||||||
confirmUploadEmojisDescription: "ドラッグ&ドロップされた{count}個のファイルをドライブにアップロードします。実行しますか?"
|
confirmUploadEmojisDescription: "ドラッグ&ドロップされた{count}個のファイルをドライブにアップロードします。実行しますか?"
|
||||||
|
|
||||||
_embedCodeGen:
|
_embedCodeGen:
|
||||||
|
|
|
@ -2357,9 +2357,6 @@ _pages:
|
||||||
newPage: "ページを作る"
|
newPage: "ページを作る"
|
||||||
editPage: "ページの編集"
|
editPage: "ページの編集"
|
||||||
readPage: "ソースを表示中"
|
readPage: "ソースを表示中"
|
||||||
created: "ページを作成したで"
|
|
||||||
updated: "ページを更新したで"
|
|
||||||
deleted: "ページを削除したで"
|
|
||||||
pageSetting: "ページ設定"
|
pageSetting: "ページ設定"
|
||||||
nameAlreadyExists: "指定されたページURLはもうあるみたいや"
|
nameAlreadyExists: "指定されたページURLはもうあるみたいや"
|
||||||
invalidNameTitle: "正しくないページURLみたいやで"
|
invalidNameTitle: "正しくないページURLみたいやで"
|
||||||
|
|
|
@ -5,6 +5,7 @@ introMisskey: "환영합니다! Misskey는 오픈 소스 분산형 마이크로
|
||||||
poweredByMisskeyDescription: "{name} 서버는 오픈소스 플랫폼 <b>Misskey</b>의 서버 가운데 하나입니다."
|
poweredByMisskeyDescription: "{name} 서버는 오픈소스 플랫폼 <b>Misskey</b>의 서버 가운데 하나입니다."
|
||||||
monthAndDay: "{month}월 {day}일"
|
monthAndDay: "{month}월 {day}일"
|
||||||
search: "검색"
|
search: "검색"
|
||||||
|
reset: "초기화"
|
||||||
notifications: "알림"
|
notifications: "알림"
|
||||||
username: "유저명"
|
username: "유저명"
|
||||||
password: "비밀번호"
|
password: "비밀번호"
|
||||||
|
@ -48,6 +49,7 @@ pin: "프로필에 고정"
|
||||||
unpin: "프로필에서 고정 해제"
|
unpin: "프로필에서 고정 해제"
|
||||||
copyContent: "내용 복사"
|
copyContent: "내용 복사"
|
||||||
copyLink: "링크 복사"
|
copyLink: "링크 복사"
|
||||||
|
copyRemoteLink: "리모트 서버의 링크로 복사하기"
|
||||||
copyLinkRenote: "리노트 링크 복사"
|
copyLinkRenote: "리노트 링크 복사"
|
||||||
delete: "삭제"
|
delete: "삭제"
|
||||||
deleteAndEdit: "삭제 후 편집"
|
deleteAndEdit: "삭제 후 편집"
|
||||||
|
@ -686,11 +688,13 @@ testEmail: "이메일 전송 테스트"
|
||||||
wordMute: "단어 뮤트"
|
wordMute: "단어 뮤트"
|
||||||
wordMuteDescription: "정해진 단어가 포함된 노트를 최소화 한 상태로 표시합니다. 최소화 된 노트는 클릭해서 표시할 수 있습니다."
|
wordMuteDescription: "정해진 단어가 포함된 노트를 최소화 한 상태로 표시합니다. 최소화 된 노트는 클릭해서 표시할 수 있습니다."
|
||||||
hardWordMute: "하드 단어 뮤트"
|
hardWordMute: "하드 단어 뮤트"
|
||||||
|
showMutedWord: "뮤트한 단어를 표시하기"
|
||||||
hardWordMuteDescription: "정한 단어가 들어간 노트를 숨깁니다. 단어 뮤트와 차이점은 노트가 아예 보이지 않습니다."
|
hardWordMuteDescription: "정한 단어가 들어간 노트를 숨깁니다. 단어 뮤트와 차이점은 노트가 아예 보이지 않습니다."
|
||||||
regexpError: "정규 표현식 오류"
|
regexpError: "정규 표현식 오류"
|
||||||
regexpErrorDescription: "{tab}단어 뮤트 {line}행의 정규 표현식에 오류가 발생했습니다:"
|
regexpErrorDescription: "{tab}단어 뮤트 {line}행의 정규 표현식에 오류가 발생했습니다:"
|
||||||
instanceMute: "서버 뮤트"
|
instanceMute: "서버 뮤트"
|
||||||
userSaysSomething: "{name}님이 무언가를 말했습니다"
|
userSaysSomething: "{name}님이 무언가를 말했습니다"
|
||||||
|
userSaysSomethingAbout: "{name}님이 \"{word}\"를 언급했습니다."
|
||||||
makeActive: "활성화"
|
makeActive: "활성화"
|
||||||
display: "보기"
|
display: "보기"
|
||||||
copy: "복사"
|
copy: "복사"
|
||||||
|
@ -1279,7 +1283,7 @@ confirmWhenRevealingSensitiveMedia: "민감한 미디어를 열 때 두 번 확
|
||||||
sensitiveMediaRevealConfirm: "민감한 미디어입니다. 표시할까요?"
|
sensitiveMediaRevealConfirm: "민감한 미디어입니다. 표시할까요?"
|
||||||
createdLists: "만든 리스트"
|
createdLists: "만든 리스트"
|
||||||
createdAntennas: "만든 안테나"
|
createdAntennas: "만든 안테나"
|
||||||
fromX: "{x}부터"
|
fromX: "{x}에서"
|
||||||
genEmbedCode: "임베디드 코드 만들기"
|
genEmbedCode: "임베디드 코드 만들기"
|
||||||
noteOfThisUser: "이 유저의 노트 목록"
|
noteOfThisUser: "이 유저의 노트 목록"
|
||||||
clipNoteLimitExceeded: "더 이상 이 클립에 노트를 추가 할 수 없습니다."
|
clipNoteLimitExceeded: "더 이상 이 클립에 노트를 추가 할 수 없습니다."
|
||||||
|
@ -1303,6 +1307,8 @@ lockdown: "잠금"
|
||||||
pleaseSelectAccount: "계정을 선택해주세요."
|
pleaseSelectAccount: "계정을 선택해주세요."
|
||||||
availableRoles: "사용 가능한 역할"
|
availableRoles: "사용 가능한 역할"
|
||||||
acknowledgeNotesAndEnable: "활성화 하기 전에 주의 사항을 확인했습니다."
|
acknowledgeNotesAndEnable: "활성화 하기 전에 주의 사항을 확인했습니다."
|
||||||
|
federationSpecified: "이 서버는 화이트 리스트 제도로 운영 중 입니다. 정해진 리모트 서버가 아닌 경우 연합되지 않습니다."
|
||||||
|
federationDisabled: "이 서버는 연합을 하지 않고 있습니다. 리모트 서버 유저와 통신을 할 수 없습니다."
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "콘텐츠 열람을 위해 로그인을 필수로 설정하기"
|
requireSigninToViewContents: "콘텐츠 열람을 위해 로그인을 필수로 설정하기"
|
||||||
requireSigninToViewContentsDescription1: "자신이 작성한 모든 노트 등의 콘텐츠를 보기 위해 로그인을 필수로 설정합니다. 크롤러가 정보 수집하는 것을 방지하는 효과를 기대할 수 있습니다."
|
requireSigninToViewContentsDescription1: "자신이 작성한 모든 노트 등의 콘텐츠를 보기 위해 로그인을 필수로 설정합니다. 크롤러가 정보 수집하는 것을 방지하는 효과를 기대할 수 있습니다."
|
||||||
|
@ -2359,9 +2365,6 @@ _pages:
|
||||||
newPage: "페이지 만들기"
|
newPage: "페이지 만들기"
|
||||||
editPage: "페이지 수정"
|
editPage: "페이지 수정"
|
||||||
readPage: "소스 표시 중"
|
readPage: "소스 표시 중"
|
||||||
created: "페이지를 만들었습니다"
|
|
||||||
updated: "페이지를 수정했습니다"
|
|
||||||
deleted: "페이지가 삭제되었습니다"
|
|
||||||
pageSetting: "페이지 설정"
|
pageSetting: "페이지 설정"
|
||||||
nameAlreadyExists: "지정한 페이지 URL이 이미 존재합니다"
|
nameAlreadyExists: "지정한 페이지 URL이 이미 존재합니다"
|
||||||
invalidNameTitle: "유효하지 않은 페이지 URL입니다"
|
invalidNameTitle: "유효하지 않은 페이지 URL입니다"
|
||||||
|
@ -2723,6 +2726,66 @@ _contextMenu:
|
||||||
app: "애플리케이션"
|
app: "애플리케이션"
|
||||||
appWithShift: "Shift 키로 애플리케이션"
|
appWithShift: "Shift 키로 애플리케이션"
|
||||||
native: "브라우저의 UI"
|
native: "브라우저의 UI"
|
||||||
|
_gridComponent:
|
||||||
|
_error:
|
||||||
|
requiredValue: "이 값은 필수 항목입니다."
|
||||||
|
columnTypeNotSupport: "정규표현 규칙이 type:text인 칼럼만 지원합니다."
|
||||||
|
patternNotMatch: "이 값은 {pattern} 패턴과 일치하지 않습니다."
|
||||||
|
notUnique: "이 값은 다른 값과 중복되지 않아야 합니다."
|
||||||
|
_roleSelectDialog:
|
||||||
|
notSelected: "선택하지 않았습니다."
|
||||||
|
_customEmojisManager:
|
||||||
|
_gridCommon:
|
||||||
|
copySelectionRows: "선택한 행을 복사하기"
|
||||||
|
copySelectionRanges: "선택범위를 복사하기"
|
||||||
|
deleteSelectionRows: "선택한 행을 삭제"
|
||||||
|
deleteSelectionRanges: "선택한 행을 삭제"
|
||||||
|
searchSettings: "검색 설정"
|
||||||
|
searchSettingCaption: "고급 검색을 설정합니다."
|
||||||
|
searchLimit: "표시 건수"
|
||||||
|
sortOrder: "정렬 순서"
|
||||||
|
registrationLogs: "등록 로그"
|
||||||
|
registrationLogsCaption: "이모지를 갱신하거나 삭제할 때 로그가 표시됩니다. 갱신 또는 삭제하거나, 페이지 이동, 새로 고침하면 삭제됩니다."
|
||||||
|
alertEmojisRegisterFailedDescription: "이모지를 갱신 또는 삭제하지 못했습니다. 자세한 내용은 등록 로그를 확인해주세요."
|
||||||
|
_logs:
|
||||||
|
showSuccessLogSwitch: "성공 로그를 표시"
|
||||||
|
failureLogNothing: "실패 로그가 없습니다."
|
||||||
|
logNothing: "로그가 없습니다."
|
||||||
|
_remote:
|
||||||
|
selectionRowDetail: "선택 행 (상세)"
|
||||||
|
importSelectionRows: "선택 행을 가져오기"
|
||||||
|
importSelectionRangesRows: "선택한 범위 안의 행을 가져오기"
|
||||||
|
importEmojisButton: "선택한 이모지를 가져오기"
|
||||||
|
confirmImportEmojisTitle: "이모지 가져오기"
|
||||||
|
confirmImportEmojisDescription: "리모트 서버에서 받아온 이모지 {count}개를 이 서버로 가져옵니다. 이모지의 저작권, 라이선스를 확실히 확인하셨다면 실행해주세요."
|
||||||
|
_local:
|
||||||
|
tabTitleList: "등록한 이모지 리스트"
|
||||||
|
tabTitleRegister: "이모지 등록"
|
||||||
|
_list:
|
||||||
|
emojisNothing: "등록한 이모지가 없습니다."
|
||||||
|
markAsDeleteTargetRows: "선택한 행을 삭제할 대상으로 하기"
|
||||||
|
markAsDeleteTargetRanges: "선택한 범위의 행을 삭제 대상으로 하기"
|
||||||
|
alertUpdateEmojisNothingDescription: "변경할 이모지가 없습니다."
|
||||||
|
alertDeleteEmojisNothingDescription: "삭제 대상의 이모지는 없습니다."
|
||||||
|
confirmMovePage: "페이지를 이동할까요?"
|
||||||
|
confirmChangeView: "표시를 바꿀까요?"
|
||||||
|
confirmUpdateEmojisDescription: "{count}개의 이모지를 갱신합니다. 실행할까요?"
|
||||||
|
confirmDeleteEmojisDescription: "선택한 이모지 {count}개를 삭제합니다. 실행할까요?"
|
||||||
|
confirmResetDescription: "지금까지 했던 변경 내용이 모두 초기화됩니다."
|
||||||
|
confirmMovePageDesciption: "이 페이지의 이모지에 변경이 있습니다.\n저장하지 않은 상태로 페이지를 이동하면, 이 페이지에서 바꾼 변경 내용이 모두 지워집니다."
|
||||||
|
dialogSelectRoleTitle: "이모지에 설정된 역할을 검색"
|
||||||
|
_register:
|
||||||
|
uploadSettingTitle: "업로드 설정"
|
||||||
|
uploadSettingDescription: "여기서 이모지를 업로드 할 때의 동작을 설정할 수 있습니다."
|
||||||
|
directoryToCategoryLabel: "디렉토리 이름을 \"category\"로 입력하기"
|
||||||
|
directoryToCategoryCaption: "디렉토리를 드래그 앤 드롭한 경우, 디렉토리 이름을 \"category\"로 입력합니다."
|
||||||
|
emojiInputAreaCaption: "이모지를 등록할 방법을 선택해주세요."
|
||||||
|
emojiInputAreaList1: "이 틀 안에 이미지 파일 또는 디렉토리를 끌어서 가져오기"
|
||||||
|
emojiInputAreaList2: "이 링크를 클릭해서 PC에서 선택하기"
|
||||||
|
emojiInputAreaList3: "이 링크를 클릭해서 드라이브에서 선택하기"
|
||||||
|
confirmRegisterEmojisDescription: "리스트에 표시되어진 이모지를 새로운 커스텀 이모지로 등록합니다. 실행할까요? (부하를 피하기 위해, 한 번에 등록할 수 있는 이모지는 {count}건까지 입니다.)"
|
||||||
|
confirmClearEmojisDescription: "편집 내용을 지우고, 목록에 표시되어진 이모지를 지웁니다. 실행할까요?"
|
||||||
|
confirmUploadEmojisDescription: "드래그 앤 드롭한 {count}개의 파일을 드라이브에 업로드 합니다. 실행할까요?"
|
||||||
_embedCodeGen:
|
_embedCodeGen:
|
||||||
title: "임베디드 코드를 커스터마이즈"
|
title: "임베디드 코드를 커스터마이즈"
|
||||||
header: "해더를 표시"
|
header: "해더를 표시"
|
||||||
|
@ -2756,5 +2819,24 @@ _remoteLookupErrors:
|
||||||
_requestFailed:
|
_requestFailed:
|
||||||
title: "요청을 실패했습니다."
|
title: "요청을 실패했습니다."
|
||||||
description: "해당 서버와 통신을 실패했습니다. 상대방 서버에 접속 불가능한 상태일 수도 있습니다. 또는 잘못된 URI 또는 없는 URI를 입력했는지 확인해보세요."
|
description: "해당 서버와 통신을 실패했습니다. 상대방 서버에 접속 불가능한 상태일 수도 있습니다. 또는 잘못된 URI 또는 없는 URI를 입력했는지 확인해보세요."
|
||||||
|
_responseInvalid:
|
||||||
|
title: "유효하지 않은 반응입니다."
|
||||||
|
description: "이 서버와 통신할 수 있지만, 데이터가 올바르지 않습니다."
|
||||||
|
_responseInvalidIdHostNotMatch:
|
||||||
|
description: "입력된 URI과 실제 URI가 다릅니다. 제 3자 서버를 통한 리모트 컨텐츠를 조회하는 경우, 원래 서버 측에서 받아올 수 있는 URI를 사용하여 조회하시길 바랍니다."
|
||||||
_noSuchObject:
|
_noSuchObject:
|
||||||
title: "찾을 수 없습니다"
|
title: "찾을 수 없습니다"
|
||||||
|
description: "요구된 리소스를 찾을 수 없습니다. URI를 다시 한 번 확인해보세요."
|
||||||
|
_captcha:
|
||||||
|
verify: "CAPTCHA를 먼저 해결하세요."
|
||||||
|
testSiteKeyMessage: "사이트 키와 비밀 키에 테스트용 값을 입력하여 미리보기를 확인할 수 있습니다.\n자세한 내용은 아래 페이지를 확인해보세요."
|
||||||
|
_error:
|
||||||
|
_requestFailed:
|
||||||
|
title: "CAPTCHA 요구에 실패했습니다."
|
||||||
|
text: "잠시 후에 다시 실행하거나, 설정을 다시 한 번 확인해보세요."
|
||||||
|
_verificationFailed:
|
||||||
|
title: "CAPTCHA 검증을 실패했습니다."
|
||||||
|
text: "설정이 올바른지 다시 한 번 확인해보세요."
|
||||||
|
_unknown:
|
||||||
|
title: "CAPTCHA 에러"
|
||||||
|
text: "알 수 없는 에러가 발생했습니다."
|
||||||
|
|
|
@ -1459,9 +1459,6 @@ _pages:
|
||||||
newPage: "Utwórz stronę"
|
newPage: "Utwórz stronę"
|
||||||
editPage: "Edytuj tę stronę"
|
editPage: "Edytuj tę stronę"
|
||||||
readPage: "Aktywowano widok źródła"
|
readPage: "Aktywowano widok źródła"
|
||||||
created: "Pomyślnie utworzono stronę!"
|
|
||||||
updated: "Pomyślnie zaktualizowano stronę!"
|
|
||||||
deleted: "Strona została usunięta"
|
|
||||||
pageSetting: "Ustawienia strony"
|
pageSetting: "Ustawienia strony"
|
||||||
nameAlreadyExists: "Określony adres URL strony już istnieje"
|
nameAlreadyExists: "Określony adres URL strony już istnieje"
|
||||||
invalidNameTitle: "Podany adres URL strony jest nieprawidłowy"
|
invalidNameTitle: "Podany adres URL strony jest nieprawidłowy"
|
||||||
|
|
|
@ -2357,9 +2357,6 @@ _pages:
|
||||||
newPage: "Criar uma Página"
|
newPage: "Criar uma Página"
|
||||||
editPage: "Editar essa Página"
|
editPage: "Editar essa Página"
|
||||||
readPage: "Ver a fonte dessa Página"
|
readPage: "Ver a fonte dessa Página"
|
||||||
created: "Página criada com sucesso"
|
|
||||||
updated: "Página atualizada com sucesso"
|
|
||||||
deleted: "Página excluída com sucesso"
|
|
||||||
pageSetting: "Configurações da página"
|
pageSetting: "Configurações da página"
|
||||||
nameAlreadyExists: "O URL de Página especificado já existe"
|
nameAlreadyExists: "O URL de Página especificado já existe"
|
||||||
invalidNameTitle: "O URL de Página especificado é inválido"
|
invalidNameTitle: "O URL de Página especificado é inválido"
|
||||||
|
|
|
@ -1063,7 +1063,7 @@ hiddenTags: "Скрытые хештеги"
|
||||||
notesSearchNotAvailable: "Поиск заметок недоступен"
|
notesSearchNotAvailable: "Поиск заметок недоступен"
|
||||||
license: "Лицензия"
|
license: "Лицензия"
|
||||||
unfavoriteConfirm: "Удалить избранное?"
|
unfavoriteConfirm: "Удалить избранное?"
|
||||||
myClips: "Мои клипы"
|
myClips: "Мои подборки"
|
||||||
drivecleaner: "Очиститель дисков"
|
drivecleaner: "Очиститель дисков"
|
||||||
retryAllQueuesNow: "Повторить все очереди сейчас"
|
retryAllQueuesNow: "Повторить все очереди сейчас"
|
||||||
retryAllQueuesConfirmTitle: "Хотите попробовать ещё раз?"
|
retryAllQueuesConfirmTitle: "Хотите попробовать ещё раз?"
|
||||||
|
@ -1976,9 +1976,6 @@ _pages:
|
||||||
newPage: "Создать страницу"
|
newPage: "Создать страницу"
|
||||||
editPage: "Править страницу"
|
editPage: "Править страницу"
|
||||||
readPage: "Читать страницу"
|
readPage: "Читать страницу"
|
||||||
created: "Страница успешно создана."
|
|
||||||
updated: "Страница успешно обновлена."
|
|
||||||
deleted: "Страница успешно удалена."
|
|
||||||
pageSetting: "Настройки страницы"
|
pageSetting: "Настройки страницы"
|
||||||
nameAlreadyExists: "Указанный адрес страницы уже существует."
|
nameAlreadyExists: "Указанный адрес страницы уже существует."
|
||||||
invalidNameTitle: "Указанный адрес страницы недопустим."
|
invalidNameTitle: "Указанный адрес страницы недопустим."
|
||||||
|
|
|
@ -1332,9 +1332,6 @@ _pages:
|
||||||
newPage: "Vytvoriť novú stránku"
|
newPage: "Vytvoriť novú stránku"
|
||||||
editPage: "Upraviť túto stránku"
|
editPage: "Upraviť túto stránku"
|
||||||
readPage: "Zobrazenie zdroja aktívne"
|
readPage: "Zobrazenie zdroja aktívne"
|
||||||
created: "Stránka úspešne vytvorená"
|
|
||||||
updated: "Stránka úspešne upravená"
|
|
||||||
deleted: "Stránka úspešne odstránená"
|
|
||||||
pageSetting: "Nastavenia stránky"
|
pageSetting: "Nastavenia stránky"
|
||||||
nameAlreadyExists: "Zadaná URL stránku už existuje"
|
nameAlreadyExists: "Zadaná URL stránku už existuje"
|
||||||
invalidNameTitle: "Zadaná URL stránku je nesprávna"
|
invalidNameTitle: "Zadaná URL stránku je nesprávna"
|
||||||
|
|
|
@ -2331,9 +2331,6 @@ _pages:
|
||||||
newPage: "สร้างหน้าเพจใหม่"
|
newPage: "สร้างหน้าเพจใหม่"
|
||||||
editPage: "แก้ไขหน้าเพจ"
|
editPage: "แก้ไขหน้าเพจ"
|
||||||
readPage: "กำลังดูแหล่งที่มาของเพจนี้"
|
readPage: "กำลังดูแหล่งที่มาของเพจนี้"
|
||||||
created: "สร้างหน้าเพจสำเร็จเรียบร้อยแล้ว"
|
|
||||||
updated: "แก้ไขหน้าเพจสำเร็จเรียบร้อยแล้ว"
|
|
||||||
deleted: "ลบหน้าเพจสำเร็จเรียบร้อยแล้ว"
|
|
||||||
pageSetting: "การตั้งค่าหน้าเพจ"
|
pageSetting: "การตั้งค่าหน้าเพจ"
|
||||||
nameAlreadyExists: "URL ของหน้าที่ระบุนั้นมีอยู่แล้ว"
|
nameAlreadyExists: "URL ของหน้าที่ระบุนั้นมีอยู่แล้ว"
|
||||||
invalidNameTitle: "URL ของหน้าที่ระบุนั้นไม่ถูกต้อง"
|
invalidNameTitle: "URL ของหน้าที่ระบุนั้นไม่ถูกต้อง"
|
||||||
|
|
|
@ -1513,9 +1513,6 @@ _pages:
|
||||||
newPage: "Створити сторінку"
|
newPage: "Створити сторінку"
|
||||||
editPage: "Редагувати сторінку"
|
editPage: "Редагувати сторінку"
|
||||||
readPage: "Перегляд вихідного коду"
|
readPage: "Перегляд вихідного коду"
|
||||||
created: "Сторінка успішно створена."
|
|
||||||
updated: "Сторінка успішно оновлена."
|
|
||||||
deleted: "Сторінку видалено"
|
|
||||||
pageSetting: "Налаштування сторінки"
|
pageSetting: "Налаштування сторінки"
|
||||||
nameAlreadyExists: "Вказана адреса сторінки вже існує."
|
nameAlreadyExists: "Вказана адреса сторінки вже існує."
|
||||||
invalidNameTitle: "Вказана адреса сторінки неприпустима."
|
invalidNameTitle: "Вказана адреса сторінки неприпустима."
|
||||||
|
|
|
@ -1004,9 +1004,6 @@ _play:
|
||||||
_pages:
|
_pages:
|
||||||
newPage: "Yangi Sahifa yaratish"
|
newPage: "Yangi Sahifa yaratish"
|
||||||
editPage: "Ushbu Sahifani tahrirlash"
|
editPage: "Ushbu Sahifani tahrirlash"
|
||||||
created: "Sahifa muvaffaqiyatli yaratildi"
|
|
||||||
updated: "Sahifa muvaffaqiyatli tahrirlandi"
|
|
||||||
deleted: "Sahifa muvaffaqiyatli o'chirildi"
|
|
||||||
pageSetting: "Sahifa sozlamalari"
|
pageSetting: "Sahifa sozlamalari"
|
||||||
nameAlreadyExists: "Ko'rsatilgan Sahifa URL'i allaqachon mavjud"
|
nameAlreadyExists: "Ko'rsatilgan Sahifa URL'i allaqachon mavjud"
|
||||||
invalidNameTitle: "Ko'rsatilgan Sahifa URL'i yaroqsiz"
|
invalidNameTitle: "Ko'rsatilgan Sahifa URL'i yaroqsiz"
|
||||||
|
|
|
@ -1802,9 +1802,6 @@ _pages:
|
||||||
newPage: "Tạo Trang mới"
|
newPage: "Tạo Trang mới"
|
||||||
editPage: "Sửa Trang này"
|
editPage: "Sửa Trang này"
|
||||||
readPage: "Xem mã nguồn Trang này"
|
readPage: "Xem mã nguồn Trang này"
|
||||||
created: "Trang đã được tạo thành công"
|
|
||||||
updated: "Trang đã được cập nhật thành công"
|
|
||||||
deleted: "Trang đã được xóa thành công"
|
|
||||||
pageSetting: "Cài đặt trang"
|
pageSetting: "Cài đặt trang"
|
||||||
nameAlreadyExists: "URL Trang đã tồn tại"
|
nameAlreadyExists: "URL Trang đã tồn tại"
|
||||||
invalidNameTitle: "URL Trang không hợp lệ"
|
invalidNameTitle: "URL Trang không hợp lệ"
|
||||||
|
|
|
@ -5,6 +5,7 @@ introMisskey: "欢迎!Misskey是一个开源的、去中心化的“微博客
|
||||||
poweredByMisskeyDescription: "{name} 是开源平台 <b>Misskey</b> 的服务器之一。"
|
poweredByMisskeyDescription: "{name} 是开源平台 <b>Misskey</b> 的服务器之一。"
|
||||||
monthAndDay: "{month}月 {day}日"
|
monthAndDay: "{month}月 {day}日"
|
||||||
search: "搜索"
|
search: "搜索"
|
||||||
|
reset: "重置"
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
username: "用户名"
|
username: "用户名"
|
||||||
password: "密码"
|
password: "密码"
|
||||||
|
@ -48,7 +49,7 @@ pin: "置顶"
|
||||||
unpin: "取消置顶"
|
unpin: "取消置顶"
|
||||||
copyContent: "复制内容"
|
copyContent: "复制内容"
|
||||||
copyLink: "复制链接"
|
copyLink: "复制链接"
|
||||||
copyRemoteLink: "复制远程连接"
|
copyRemoteLink: "复制远程链接"
|
||||||
copyLinkRenote: "复制转帖链接"
|
copyLinkRenote: "复制转帖链接"
|
||||||
delete: "删除"
|
delete: "删除"
|
||||||
deleteAndEdit: "删除并编辑"
|
deleteAndEdit: "删除并编辑"
|
||||||
|
@ -196,7 +197,7 @@ setWallpaper: "设置壁纸"
|
||||||
removeWallpaper: "移除壁纸"
|
removeWallpaper: "移除壁纸"
|
||||||
searchWith: "搜索:{q}"
|
searchWith: "搜索:{q}"
|
||||||
youHaveNoLists: "列表为空"
|
youHaveNoLists: "列表为空"
|
||||||
followConfirm: "你确定要关注 {name} 吗?"
|
followConfirm: "确定要关注 {name} 吗?"
|
||||||
proxyAccount: "代理账户"
|
proxyAccount: "代理账户"
|
||||||
proxyAccountDescription: "代理账户是在某些情况下替代用户进行远程关注用的账户。 例如说,当用户将一位远程用户放入一个列表中时,如果本地服务器上没有任何人关注这位远程用户,则这位远程用户的账户活动将不会被送到本地服务器上。作为替代,此时将使用代理账户进行关注。"
|
proxyAccountDescription: "代理账户是在某些情况下替代用户进行远程关注用的账户。 例如说,当用户将一位远程用户放入一个列表中时,如果本地服务器上没有任何人关注这位远程用户,则这位远程用户的账户活动将不会被送到本地服务器上。作为替代,此时将使用代理账户进行关注。"
|
||||||
host: "主机名"
|
host: "主机名"
|
||||||
|
@ -230,10 +231,10 @@ disk: "存储"
|
||||||
instanceInfo: "服务器信息"
|
instanceInfo: "服务器信息"
|
||||||
statistics: "统计"
|
statistics: "统计"
|
||||||
clearQueue: "清除队列"
|
clearQueue: "清除队列"
|
||||||
clearQueueConfirmTitle: "确定清除队列?"
|
clearQueueConfirmTitle: "确定要清除队列吗?"
|
||||||
clearQueueConfirmText: "未送达的帖子将不会被投递。 通常无需执行此操作。"
|
clearQueueConfirmText: "未送达的帖子将不会被投递。 通常无需执行此操作。"
|
||||||
clearCachedFiles: "清除缓存"
|
clearCachedFiles: "清除缓存"
|
||||||
clearCachedFilesConfirm: "确定要清除所有缓存的远程文件?"
|
clearCachedFilesConfirm: "确定要清除所有缓存的远程文件吗?"
|
||||||
blockedInstances: "被屏蔽的服务器"
|
blockedInstances: "被屏蔽的服务器"
|
||||||
blockedInstancesDescription: "设定要屏蔽的服务器,以换行分隔。被屏蔽的服务器将无法与本服务器进行交换通讯。子域名也同样会被屏蔽。"
|
blockedInstancesDescription: "设定要屏蔽的服务器,以换行分隔。被屏蔽的服务器将无法与本服务器进行交换通讯。子域名也同样会被屏蔽。"
|
||||||
silencedInstances: "被静音的服务器"
|
silencedInstances: "被静音的服务器"
|
||||||
|
@ -247,7 +248,7 @@ mutedUsers: "已隐藏用户"
|
||||||
blockedUsers: "已屏蔽的用户"
|
blockedUsers: "已屏蔽的用户"
|
||||||
noUsers: "无用户"
|
noUsers: "无用户"
|
||||||
editProfile: "编辑资料"
|
editProfile: "编辑资料"
|
||||||
noteDeleteConfirm: "要删除该帖子吗?"
|
noteDeleteConfirm: "确定要删除该帖子吗?"
|
||||||
pinLimitExceeded: "无法置顶更多了"
|
pinLimitExceeded: "无法置顶更多了"
|
||||||
intro: "Misskey 的部署结束啦!创建管理员账号吧!"
|
intro: "Misskey 的部署结束啦!创建管理员账号吧!"
|
||||||
done: "完成"
|
done: "完成"
|
||||||
|
@ -567,7 +568,7 @@ objectStorageRegionDesc: "指定一个可用区,例如“xx-east-1”。 如
|
||||||
objectStorageUseSSL: "使用 SSL"
|
objectStorageUseSSL: "使用 SSL"
|
||||||
objectStorageUseSSLDesc: "如果不使用 https 进行 API 连接,请关闭。"
|
objectStorageUseSSLDesc: "如果不使用 https 进行 API 连接,请关闭。"
|
||||||
objectStorageUseProxy: "使用代理"
|
objectStorageUseProxy: "使用代理"
|
||||||
objectStorageUseProxyDesc: "如果您不使用代理进行 API 连接,请将其关闭。"
|
objectStorageUseProxyDesc: "如果不使用代理进行 API 连接,请关闭。"
|
||||||
objectStorageSetPublicRead: "上传时设置为 public-read"
|
objectStorageSetPublicRead: "上传时设置为 public-read"
|
||||||
s3ForcePathStyleDesc: "启用 s3ForcePathStyle 会强制将存储桶名称指定为 URL 中路径的一部分,而不是主机名。使用自托管 Minio 等时可能需要启用。"
|
s3ForcePathStyleDesc: "启用 s3ForcePathStyle 会强制将存储桶名称指定为 URL 中路径的一部分,而不是主机名。使用自托管 Minio 等时可能需要启用。"
|
||||||
serverLogs: "服务器日志"
|
serverLogs: "服务器日志"
|
||||||
|
@ -764,7 +765,7 @@ driveFilesCount: "网盘的文件数"
|
||||||
driveUsage: "网盘的空间用量"
|
driveUsage: "网盘的空间用量"
|
||||||
noCrawle: "要求搜索引擎不索引该用户"
|
noCrawle: "要求搜索引擎不索引该用户"
|
||||||
noCrawleDescription: "要求搜索引擎不要收录(索引)您的用户页面,帖子,页面等。"
|
noCrawleDescription: "要求搜索引擎不要收录(索引)您的用户页面,帖子,页面等。"
|
||||||
lockedAccountInfo: "即使启用该功能,只要您不将帖子可见范围设置为“仅关注者”,任何人都还是可以看到您的帖子。"
|
lockedAccountInfo: "即使启用该功能,只要帖子可见范围不是「仅关注者」,任何人都可以看到您的帖子。"
|
||||||
alwaysMarkSensitive: "默认将媒体文件标记为敏感内容"
|
alwaysMarkSensitive: "默认将媒体文件标记为敏感内容"
|
||||||
loadRawImages: "添加附件图像的缩略图时使用原始图像质量"
|
loadRawImages: "添加附件图像的缩略图时使用原始图像质量"
|
||||||
disableShowingAnimatedImages: "不播放动画"
|
disableShowingAnimatedImages: "不播放动画"
|
||||||
|
@ -1326,7 +1327,7 @@ _abuseUserReport:
|
||||||
resolve: "解决"
|
resolve: "解决"
|
||||||
accept: "确认"
|
accept: "确认"
|
||||||
reject: "拒绝"
|
reject: "拒绝"
|
||||||
resolveTutorial: "如果举报内容有理且已解决,选择「确认」将案件以肯定的态度标记为已解决。\n如果举报内容站不住脚,选择「拒绝」将案件以否定的态度标记为已解决。"
|
resolveTutorial: "如果认可举报并已解决,选择「确认」将案件以肯定的态度标记为已解决。\n如果不认可举报,选择「拒绝」将案件以否定的态度标记为已解决。"
|
||||||
_delivery:
|
_delivery:
|
||||||
status: "投递状态"
|
status: "投递状态"
|
||||||
stop: "停止投递"
|
stop: "停止投递"
|
||||||
|
@ -2081,7 +2082,7 @@ _2fa:
|
||||||
securityKeyName: "输入密钥名称"
|
securityKeyName: "输入密钥名称"
|
||||||
tapSecurityKey: "请按照浏览器说明操作来注册安全密钥或 Passkey。"
|
tapSecurityKey: "请按照浏览器说明操作来注册安全密钥或 Passkey。"
|
||||||
removeKey: "删除安全密钥"
|
removeKey: "删除安全密钥"
|
||||||
removeKeyConfirm: "您确定要删除 {name} 吗?"
|
removeKeyConfirm: "确定要删除 {name} 吗?"
|
||||||
whyTOTPOnlyRenew: "当注册了安全密钥时,无法取消使用验证器。"
|
whyTOTPOnlyRenew: "当注册了安全密钥时,无法取消使用验证器。"
|
||||||
renewTOTP: "重置验证器"
|
renewTOTP: "重置验证器"
|
||||||
renewTOTPConfirm: "当前验证器的验证码及备用代码已失效"
|
renewTOTPConfirm: "当前验证器的验证码及备用代码已失效"
|
||||||
|
@ -2289,7 +2290,7 @@ _profile:
|
||||||
name: "昵称"
|
name: "昵称"
|
||||||
username: "用户名"
|
username: "用户名"
|
||||||
description: "个人简介"
|
description: "个人简介"
|
||||||
youCanIncludeHashtags: "你可以在个人简介中包含一些#标签。"
|
youCanIncludeHashtags: "可以在个人简介中包含 #标签。"
|
||||||
metadata: "附加信息"
|
metadata: "附加信息"
|
||||||
metadataEdit: "附加信息编辑"
|
metadataEdit: "附加信息编辑"
|
||||||
metadataDescription: "最多可以在个人资料中以表格形式显示四条其他信息。"
|
metadataDescription: "最多可以在个人资料中以表格形式显示四条其他信息。"
|
||||||
|
@ -2364,9 +2365,6 @@ _pages:
|
||||||
newPage: "创建页面"
|
newPage: "创建页面"
|
||||||
editPage: "编辑页面"
|
editPage: "编辑页面"
|
||||||
readPage: "查看页面"
|
readPage: "查看页面"
|
||||||
created: "页面已创建"
|
|
||||||
updated: "页面已更新"
|
|
||||||
deleted: "该页面已被删除"
|
|
||||||
pageSetting: "页面设置"
|
pageSetting: "页面设置"
|
||||||
nameAlreadyExists: "该页面 URL 已存在"
|
nameAlreadyExists: "该页面 URL 已存在"
|
||||||
invalidNameTitle: "无效的页面 URL"
|
invalidNameTitle: "无效的页面 URL"
|
||||||
|
@ -2728,6 +2726,66 @@ _contextMenu:
|
||||||
app: "应用"
|
app: "应用"
|
||||||
appWithShift: "Shift 键应用"
|
appWithShift: "Shift 键应用"
|
||||||
native: "浏览器的用户界面"
|
native: "浏览器的用户界面"
|
||||||
|
_gridComponent:
|
||||||
|
_error:
|
||||||
|
requiredValue: "此值为必填项"
|
||||||
|
columnTypeNotSupport: "正则表达式验证仅支持 type:text 列。"
|
||||||
|
patternNotMatch: "此值与 {pattern} 的模式不一致"
|
||||||
|
notUnique: "此值必须唯一"
|
||||||
|
_roleSelectDialog:
|
||||||
|
notSelected: "未选中"
|
||||||
|
_customEmojisManager:
|
||||||
|
_gridCommon:
|
||||||
|
copySelectionRows: "复制所选行"
|
||||||
|
copySelectionRanges: "复制所选范围"
|
||||||
|
deleteSelectionRows: "删除所选行"
|
||||||
|
deleteSelectionRanges: "删除所选范围的行"
|
||||||
|
searchSettings: "搜索设置"
|
||||||
|
searchSettingCaption: "设置详细的搜索条件。"
|
||||||
|
searchLimit: "显示项目数"
|
||||||
|
sortOrder: "排序方式"
|
||||||
|
registrationLogs: "注册日志"
|
||||||
|
registrationLogsCaption: "将显示更新和删除表情符号的日志。执行更新或删除操作,又或者更改或重新加载页面时会消失。"
|
||||||
|
alertEmojisRegisterFailedDescription: "更新或删除表情符号失败。详情请确认注册日志。"
|
||||||
|
_logs:
|
||||||
|
showSuccessLogSwitch: "显示成功日志"
|
||||||
|
failureLogNothing: "没有失败日志。"
|
||||||
|
logNothing: "没有日志"
|
||||||
|
_remote:
|
||||||
|
selectionRowDetail: "所选行的详细信息"
|
||||||
|
importSelectionRows: "导入所选行"
|
||||||
|
importSelectionRangesRows: "导入所选范围的行"
|
||||||
|
importEmojisButton: "导入已选择的表情符号"
|
||||||
|
confirmImportEmojisTitle: "导入表情符号"
|
||||||
|
confirmImportEmojisDescription: "是否导入从远程服务器接收的 {count} 个表情符号?请密切关注表情符号的许可协议。"
|
||||||
|
_local:
|
||||||
|
tabTitleList: "已注册的表情符号列表"
|
||||||
|
tabTitleRegister: "注册表情符号"
|
||||||
|
_list:
|
||||||
|
emojisNothing: "没有已注册的表情符号。"
|
||||||
|
markAsDeleteTargetRows: "将所选行标记为删除对象"
|
||||||
|
markAsDeleteTargetRanges: "将所选范围的行标记为删除对象"
|
||||||
|
alertUpdateEmojisNothingDescription: "没有已更改的表情符号。"
|
||||||
|
alertDeleteEmojisNothingDescription: "没有被标记为删除对象的表情符号。"
|
||||||
|
confirmMovePage: "要离开此页吗?"
|
||||||
|
confirmChangeView: "要更改显示吗?"
|
||||||
|
confirmUpdateEmojisDescription: "要更新 {count} 个表情符号吗?"
|
||||||
|
confirmDeleteEmojisDescription: "要删除已选择的 {count} 个表情符号吗?"
|
||||||
|
confirmResetDescription: "至今为止所做的所有修改都将被重置。"
|
||||||
|
confirmMovePageDesciption: "此页面上的表情符号已更改。\n若不保存就离开此页,此页面上所有的更改都将丢失。"
|
||||||
|
dialogSelectRoleTitle: "按角色搜索表情符号"
|
||||||
|
_register:
|
||||||
|
uploadSettingTitle: "上传设置"
|
||||||
|
uploadSettingDescription: "可以在此页面设置上传表情符号时的行为。"
|
||||||
|
directoryToCategoryLabel: "目录名请输入「category」"
|
||||||
|
directoryToCategoryCaption: "拖放目录时,目录名请输入「category」"
|
||||||
|
emojiInputAreaCaption: "请使用其中一种方法选择要注册的表情符号。"
|
||||||
|
emojiInputAreaList1: "在此区域内拖放图像文件或者目录"
|
||||||
|
emojiInputAreaList2: "单击此链接以从电脑中选择"
|
||||||
|
emojiInputAreaList3: "单击此链接以从网盘中选择"
|
||||||
|
confirmRegisterEmojisDescription: "要将列表内显示的表情符号替换为新的自定义表情符号吗?(为降低服务器负载,一次操作最多只能注册 {count} 个表情符号)"
|
||||||
|
confirmClearEmojisDescription: "要放弃编辑并将列表内表示的表情符号清空吗?"
|
||||||
|
confirmUploadEmojisDescription: "要将拖放的 {count} 个文件上传到网盘上吗?"
|
||||||
_embedCodeGen:
|
_embedCodeGen:
|
||||||
title: "自定义嵌入代码"
|
title: "自定义嵌入代码"
|
||||||
header: "显示标题"
|
header: "显示标题"
|
||||||
|
|
|
@ -5,6 +5,7 @@ introMisskey: "歡迎!Misskey 是一個開放原始碼且去中心化的社群
|
||||||
poweredByMisskeyDescription: "{name}是開放原始碼平臺 <b>Misskey</b> 的伺服器之一。"
|
poweredByMisskeyDescription: "{name}是開放原始碼平臺 <b>Misskey</b> 的伺服器之一。"
|
||||||
monthAndDay: "{month} 月 {day} 日"
|
monthAndDay: "{month} 月 {day} 日"
|
||||||
search: "搜尋"
|
search: "搜尋"
|
||||||
|
reset: "重設"
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
username: "使用者名稱"
|
username: "使用者名稱"
|
||||||
password: "密碼"
|
password: "密碼"
|
||||||
|
@ -48,6 +49,7 @@ pin: "置頂"
|
||||||
unpin: "取消置頂"
|
unpin: "取消置頂"
|
||||||
copyContent: "複製內容"
|
copyContent: "複製內容"
|
||||||
copyLink: "複製連結"
|
copyLink: "複製連結"
|
||||||
|
copyRemoteLink: "複製遠端的連結"
|
||||||
copyLinkRenote: "複製轉發的連結"
|
copyLinkRenote: "複製轉發的連結"
|
||||||
delete: "刪除"
|
delete: "刪除"
|
||||||
deleteAndEdit: "刪除並編輯"
|
deleteAndEdit: "刪除並編輯"
|
||||||
|
@ -686,11 +688,13 @@ testEmail: "測試郵件發送"
|
||||||
wordMute: "被靜音的文字"
|
wordMute: "被靜音的文字"
|
||||||
wordMuteDescription: "將包含指定語句的貼文最小化。 點擊最小化的貼文即可顯示。"
|
wordMuteDescription: "將包含指定語句的貼文最小化。 點擊最小化的貼文即可顯示。"
|
||||||
hardWordMute: "硬文字靜音"
|
hardWordMute: "硬文字靜音"
|
||||||
|
showMutedWord: "顯示靜音字"
|
||||||
hardWordMuteDescription: "隱藏含有指定語句的貼文。 與詞彙靜音不同的是,貼文將完全隱藏不見。"
|
hardWordMuteDescription: "隱藏含有指定語句的貼文。 與詞彙靜音不同的是,貼文將完全隱藏不見。"
|
||||||
regexpError: "正規表達式錯誤"
|
regexpError: "正規表達式錯誤"
|
||||||
regexpErrorDescription: "{tab} 靜音文字的第 {line} 行的正規表達式有錯誤:"
|
regexpErrorDescription: "{tab} 靜音文字的第 {line} 行的正規表達式有錯誤:"
|
||||||
instanceMute: "被靜音的實例"
|
instanceMute: "被靜音的實例"
|
||||||
userSaysSomething: "{name}說了什麼"
|
userSaysSomething: "{name}說了什麼"
|
||||||
|
userSaysSomethingAbout: "{name} 說了一些關於「{word}」的話"
|
||||||
makeActive: "啟用"
|
makeActive: "啟用"
|
||||||
display: "檢視"
|
display: "檢視"
|
||||||
copy: "複製"
|
copy: "複製"
|
||||||
|
@ -1303,6 +1307,8 @@ lockdown: "鎖定"
|
||||||
pleaseSelectAccount: "請選擇帳戶"
|
pleaseSelectAccount: "請選擇帳戶"
|
||||||
availableRoles: "可用角色"
|
availableRoles: "可用角色"
|
||||||
acknowledgeNotesAndEnable: "了解注意事項後再開啟。"
|
acknowledgeNotesAndEnable: "了解注意事項後再開啟。"
|
||||||
|
federationSpecified: "此伺服器以白名單聯邦的方式運作。除了管理員指定的伺服器外,它無法與其他伺服器互動。"
|
||||||
|
federationDisabled: "此伺服器未開啟站台聯邦。無法與其他伺服器上的使用者互動。"
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "須登入以顯示內容"
|
requireSigninToViewContents: "須登入以顯示內容"
|
||||||
requireSigninToViewContentsDescription1: "必須登入才會顯示您建立的貼文等內容。可望有效防止資訊被爬蟲蒐集。"
|
requireSigninToViewContentsDescription1: "必須登入才會顯示您建立的貼文等內容。可望有效防止資訊被爬蟲蒐集。"
|
||||||
|
@ -2359,9 +2365,6 @@ _pages:
|
||||||
newPage: "建立頁面"
|
newPage: "建立頁面"
|
||||||
editPage: "編輯頁面"
|
editPage: "編輯頁面"
|
||||||
readPage: "正在檢視原始碼"
|
readPage: "正在檢視原始碼"
|
||||||
created: "頁面已建立"
|
|
||||||
updated: "頁面已更新"
|
|
||||||
deleted: "頁面已被刪除"
|
|
||||||
pageSetting: "頁面設定"
|
pageSetting: "頁面設定"
|
||||||
nameAlreadyExists: "該頁面 URL 已存在"
|
nameAlreadyExists: "該頁面 URL 已存在"
|
||||||
invalidNameTitle: "無效的頁面 URL"
|
invalidNameTitle: "無效的頁面 URL"
|
||||||
|
@ -2723,6 +2726,66 @@ _contextMenu:
|
||||||
app: "應用程式"
|
app: "應用程式"
|
||||||
appWithShift: "Shift 鍵應用程式"
|
appWithShift: "Shift 鍵應用程式"
|
||||||
native: "瀏覽器的使用者介面"
|
native: "瀏覽器的使用者介面"
|
||||||
|
_gridComponent:
|
||||||
|
_error:
|
||||||
|
requiredValue: "此值為必填欄位"
|
||||||
|
columnTypeNotSupport: "正規表達式驗證僅支援 type:text 的欄位。"
|
||||||
|
patternNotMatch: "此值不符合 {pattern} 中的樣式。"
|
||||||
|
notUnique: "此值必須是唯一的"
|
||||||
|
_roleSelectDialog:
|
||||||
|
notSelected: "未選擇"
|
||||||
|
_customEmojisManager:
|
||||||
|
_gridCommon:
|
||||||
|
copySelectionRows: "複製選取的行"
|
||||||
|
copySelectionRanges: "複製選取的範圍"
|
||||||
|
deleteSelectionRows: "刪除所選的行"
|
||||||
|
deleteSelectionRanges: "刪除選取範圍的行"
|
||||||
|
searchSettings: "搜尋設定"
|
||||||
|
searchSettingCaption: "詳細設定搜尋條件。"
|
||||||
|
searchLimit: "顯示的數量"
|
||||||
|
sortOrder: "排序"
|
||||||
|
registrationLogs: "登錄日誌"
|
||||||
|
registrationLogsCaption: "會顯示更新或刪除表情符號時的日誌。進行更新或刪除操作,或切換頁面、重新載入後,日誌將會消失。"
|
||||||
|
alertEmojisRegisterFailedDescription: "更新或刪除表情符號失敗。詳情請查看登錄日誌。"
|
||||||
|
_logs:
|
||||||
|
showSuccessLogSwitch: "顯示成功日誌"
|
||||||
|
failureLogNothing: "沒有失敗的日誌。"
|
||||||
|
logNothing: "沒有日誌。"
|
||||||
|
_remote:
|
||||||
|
selectionRowDetail: "選取行的詳細資訊"
|
||||||
|
importSelectionRows: "匯入選取的行"
|
||||||
|
importSelectionRangesRows: "匯入選取範圍的行"
|
||||||
|
importEmojisButton: "匯入勾選的表情符號"
|
||||||
|
confirmImportEmojisTitle: "匯入表情符號"
|
||||||
|
confirmImportEmojisDescription: "將從遠端接收的{count}個表情符號進行匯入。請務必注意表情符號的授權。是否執行此操作?"
|
||||||
|
_local:
|
||||||
|
tabTitleList: "已登錄的表情符號列表"
|
||||||
|
tabTitleRegister: "登錄表情符號"
|
||||||
|
_list:
|
||||||
|
emojisNothing: "沒有登錄的表情符號。"
|
||||||
|
markAsDeleteTargetRows: "將選取的行設為刪除對象"
|
||||||
|
markAsDeleteTargetRanges: "將選取範圍的行設為刪除對象\n"
|
||||||
|
alertUpdateEmojisNothingDescription: "沒有選取需要變更的表情符號。"
|
||||||
|
alertDeleteEmojisNothingDescription: "沒有選取需要刪除的表情符號。"
|
||||||
|
confirmMovePage: "要移動到其他頁面嗎?"
|
||||||
|
confirmChangeView: "要更改顯示方式嗎?"
|
||||||
|
confirmUpdateEmojisDescription: "將更新{count}個表情符號。是否執行此操作?"
|
||||||
|
confirmDeleteEmojisDescription: "將刪除勾選的{count}個表情符號。是否執行此操作?"
|
||||||
|
confirmResetDescription: "目前所做的所有變更都會重設。"
|
||||||
|
confirmMovePageDesciption: "此頁面的表情符號已被更改。 \n若未儲存就直接離開此頁面,則在此頁面進行的所有更改將會被捨棄。"
|
||||||
|
dialogSelectRoleTitle: "根據表情符號設定的角色進行搜尋"
|
||||||
|
_register:
|
||||||
|
uploadSettingTitle: "上傳設定"
|
||||||
|
uploadSettingDescription: "您可以在此畫面設定表情符號上傳時的操作。"
|
||||||
|
directoryToCategoryLabel: "在「類別」欄位中輸入目錄名稱"
|
||||||
|
directoryToCategoryCaption: "拖放目錄時,請在「類別」欄位中輸入目錄名稱。"
|
||||||
|
emojiInputAreaCaption: "以下列其中一種方式選擇您想要註冊的表情符號"
|
||||||
|
emojiInputAreaList1: "將圖片檔案或目錄拖放到此框中"
|
||||||
|
emojiInputAreaList2: "點擊此連結從電腦中選擇"
|
||||||
|
emojiInputAreaList3: "點擊此連結從雲端硬碟中選擇"
|
||||||
|
confirmRegisterEmojisDescription: "將列表中顯示的表情符號登錄為新的自定表情符號。是否確定?(為避免過高負荷,每次操作最多可登錄{count}個表情符號)"
|
||||||
|
confirmClearEmojisDescription: "放棄編輯內容並清除列表中顯示的表情符號。是否確定?"
|
||||||
|
confirmUploadEmojisDescription: "將拖放的{count}個檔案上傳到雲端硬碟。是否執行此操作?"
|
||||||
_embedCodeGen:
|
_embedCodeGen:
|
||||||
title: "自訂嵌入程式碼"
|
title: "自訂嵌入程式碼"
|
||||||
header: "檢視標頭 "
|
header: "檢視標頭 "
|
||||||
|
@ -2764,3 +2827,16 @@ _remoteLookupErrors:
|
||||||
_noSuchObject:
|
_noSuchObject:
|
||||||
title: "查無項目"
|
title: "查無項目"
|
||||||
description: "無法找到所要求的資源,請再次檢查 URI。"
|
description: "無法找到所要求的資源,請再次檢查 URI。"
|
||||||
|
_captcha:
|
||||||
|
verify: "請通過 CAPTCHA 驗證"
|
||||||
|
testSiteKeyMessage: "可以輸入網站金鑰和秘密金鑰的測試值來檢查預覽。\n詳細資訊請參閱以下頁面。"
|
||||||
|
_error:
|
||||||
|
_requestFailed:
|
||||||
|
title: "CAPTCHA 請求失敗"
|
||||||
|
text: "請過一段時間後再執行,或再次檢查設定。"
|
||||||
|
_verificationFailed:
|
||||||
|
title: "CAPTCHA 驗證失敗"
|
||||||
|
text: "請再次檢查設定是否正確。"
|
||||||
|
_unknown:
|
||||||
|
title: "CAPTCHA 錯誤"
|
||||||
|
text: "發生了意外的錯誤。"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"version": "2025.1.0-beta.2",
|
"version": "2025.2.0",
|
||||||
"codename": "nasubi",
|
"codename": "nasubi",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|
|
@ -92,7 +92,7 @@ export async function masterMain() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bootLogger.info(
|
bootLogger.info(
|
||||||
`mode: [disableClustering: ${envOption.disableClustering}, onlyServer: ${envOption.onlyServer}, onlyQueue: ${envOption.onlyQueue}]`
|
`mode: [disableClustering: ${envOption.disableClustering}, onlyServer: ${envOption.onlyServer}, onlyQueue: ${envOption.onlyQueue}]`,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!envOption.disableClustering) {
|
if (!envOption.disableClustering) {
|
||||||
|
@ -107,7 +107,6 @@ export async function masterMain() {
|
||||||
await jobQueue();
|
await jobQueue();
|
||||||
} else {
|
} else {
|
||||||
await server();
|
await server();
|
||||||
await jobQueue();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await spawnWorkers(config.clusterLimit);
|
await spawnWorkers(config.clusterLimit);
|
||||||
|
|
|
@ -118,3 +118,5 @@ export class MiPage {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const pageNameSchema = { type: 'string', pattern: /^[^\s:\/?#\[\]@!$&'()*+,;=\\%\x00-\x20]{1,256}$/.source } as const;
|
||||||
|
|
|
@ -7,7 +7,7 @@ import ms from 'ms';
|
||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
import type { DriveFilesRepository, PagesRepository } from '@/models/_.js';
|
import type { DriveFilesRepository, PagesRepository } from '@/models/_.js';
|
||||||
import { IdService } from '@/core/IdService.js';
|
import { IdService } from '@/core/IdService.js';
|
||||||
import { MiPage } from '@/models/Page.js';
|
import { MiPage, pageNameSchema } from '@/models/Page.js';
|
||||||
import { Endpoint } from '@/server/api/endpoint-base.js';
|
import { Endpoint } from '@/server/api/endpoint-base.js';
|
||||||
import { PageEntityService } from '@/core/entities/PageEntityService.js';
|
import { PageEntityService } from '@/core/entities/PageEntityService.js';
|
||||||
import { DI } from '@/di-symbols.js';
|
import { DI } from '@/di-symbols.js';
|
||||||
|
@ -51,7 +51,7 @@ export const paramDef = {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
properties: {
|
properties: {
|
||||||
title: { type: 'string' },
|
title: { type: 'string' },
|
||||||
name: { type: 'string', minLength: 1 },
|
name: { ...pageNameSchema, minLength: 1 },
|
||||||
summary: { type: 'string', nullable: true },
|
summary: { type: 'string', nullable: true },
|
||||||
content: { type: 'array', items: {
|
content: { type: 'array', items: {
|
||||||
type: 'object', additionalProperties: true,
|
type: 'object', additionalProperties: true,
|
||||||
|
|
|
@ -10,6 +10,7 @@ import type { PagesRepository, DriveFilesRepository } from '@/models/_.js';
|
||||||
import { Endpoint } from '@/server/api/endpoint-base.js';
|
import { Endpoint } from '@/server/api/endpoint-base.js';
|
||||||
import { DI } from '@/di-symbols.js';
|
import { DI } from '@/di-symbols.js';
|
||||||
import { ApiError } from '../../error.js';
|
import { ApiError } from '../../error.js';
|
||||||
|
import { pageNameSchema } from '@/models/Page.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['pages'],
|
tags: ['pages'],
|
||||||
|
@ -31,13 +32,11 @@ export const meta = {
|
||||||
code: 'NO_SUCH_PAGE',
|
code: 'NO_SUCH_PAGE',
|
||||||
id: '21149b9e-3616-4778-9592-c4ce89f5a864',
|
id: '21149b9e-3616-4778-9592-c4ce89f5a864',
|
||||||
},
|
},
|
||||||
|
|
||||||
accessDenied: {
|
accessDenied: {
|
||||||
message: 'Access denied.',
|
message: 'Access denied.',
|
||||||
code: 'ACCESS_DENIED',
|
code: 'ACCESS_DENIED',
|
||||||
id: '3c15cd52-3b4b-4274-967d-6456fc4f792b',
|
id: '3c15cd52-3b4b-4274-967d-6456fc4f792b',
|
||||||
},
|
},
|
||||||
|
|
||||||
noSuchFile: {
|
noSuchFile: {
|
||||||
message: 'No such file.',
|
message: 'No such file.',
|
||||||
code: 'NO_SUCH_FILE',
|
code: 'NO_SUCH_FILE',
|
||||||
|
@ -56,7 +55,7 @@ export const paramDef = {
|
||||||
properties: {
|
properties: {
|
||||||
pageId: { type: 'string', format: 'misskey:id' },
|
pageId: { type: 'string', format: 'misskey:id' },
|
||||||
title: { type: 'string' },
|
title: { type: 'string' },
|
||||||
name: { type: 'string', minLength: 1 },
|
name: { ...pageNameSchema, minLength: 1 },
|
||||||
summary: { type: 'string', nullable: true },
|
summary: { type: 'string', nullable: true },
|
||||||
content: { type: 'array', items: {
|
content: { type: 'array', items: {
|
||||||
type: 'object', additionalProperties: true,
|
type: 'object', additionalProperties: true,
|
||||||
|
|
|
@ -317,16 +317,19 @@ export class ClientServerService {
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
const configUrl = new URL(this.config.url);
|
||||||
|
const urlOriginWithoutPort = configUrl.origin.replace(/:\d+$/, '');
|
||||||
|
|
||||||
const port = (process.env.VITE_PORT ?? '5173');
|
const port = (process.env.VITE_PORT ?? '5173');
|
||||||
fastify.register(fastifyProxy, {
|
fastify.register(fastifyProxy, {
|
||||||
upstream: 'http://localhost:' + port,
|
upstream: urlOriginWithoutPort + ':' + port,
|
||||||
prefix: '/vite',
|
prefix: '/vite',
|
||||||
rewritePrefix: '/vite',
|
rewritePrefix: '/vite',
|
||||||
});
|
});
|
||||||
|
|
||||||
const embedPort = (process.env.EMBED_VITE_PORT ?? '5174');
|
const embedPort = (process.env.EMBED_VITE_PORT ?? '5174');
|
||||||
fastify.register(fastifyProxy, {
|
fastify.register(fastifyProxy, {
|
||||||
upstream: 'http://localhost:' + embedPort,
|
upstream: urlOriginWithoutPort + ':' + embedPort,
|
||||||
prefix: '/embed_vite',
|
prefix: '/embed_vite',
|
||||||
rewritePrefix: '/embed_vite',
|
rewritePrefix: '/embed_vite',
|
||||||
});
|
});
|
||||||
|
@ -509,6 +512,7 @@ export class ClientServerService {
|
||||||
usernameLower: username.toLowerCase(),
|
usernameLower: username.toLowerCase(),
|
||||||
host: host ?? IsNull(),
|
host: host ?? IsNull(),
|
||||||
isSuspended: false,
|
isSuspended: false,
|
||||||
|
requireSigninToViewContents: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
return user && await this.feedService.packFeed(user);
|
return user && await this.feedService.packFeed(user);
|
||||||
|
@ -813,6 +817,7 @@ export class ClientServerService {
|
||||||
fastify.get<{ Params: { announcementId: string; } }>('/announcements/:announcementId', async (request, reply) => {
|
fastify.get<{ Params: { announcementId: string; } }>('/announcements/:announcementId', async (request, reply) => {
|
||||||
const announcement = await this.announcementsRepository.findOneBy({
|
const announcement = await this.announcementsRepository.findOneBy({
|
||||||
id: request.params.announcementId,
|
id: request.params.announcementId,
|
||||||
|
userId: IsNull(),
|
||||||
});
|
});
|
||||||
|
|
||||||
if (announcement) {
|
if (announcement) {
|
||||||
|
|
|
@ -17,6 +17,7 @@ services:
|
||||||
- ./.config/docker.env
|
- ./.config/docker.env
|
||||||
environment:
|
environment:
|
||||||
- NODE_ENV=production
|
- NODE_ENV=production
|
||||||
|
- COREPACK_DEFAULT_TO_LATEST=0
|
||||||
volumes:
|
volumes:
|
||||||
- type: bind
|
- type: bind
|
||||||
source: ../../../built
|
source: ../../../built
|
||||||
|
|
|
@ -25,6 +25,7 @@ services:
|
||||||
environment:
|
environment:
|
||||||
- NODE_ENV=development
|
- NODE_ENV=development
|
||||||
- NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/rootCA.crt
|
- NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/rootCA.crt
|
||||||
|
- COREPACK_DEFAULT_TO_LATEST=0
|
||||||
volumes:
|
volumes:
|
||||||
- type: bind
|
- type: bind
|
||||||
source: ../package.json
|
source: ../package.json
|
||||||
|
@ -85,6 +86,8 @@ services:
|
||||||
depends_on:
|
depends_on:
|
||||||
redis.test:
|
redis.test:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
environment:
|
||||||
|
- COREPACK_DEFAULT_TO_LATEST=0
|
||||||
volumes:
|
volumes:
|
||||||
- type: bind
|
- type: bind
|
||||||
source: ../package.json
|
source: ../package.json
|
||||||
|
|
|
@ -47,6 +47,7 @@ export default [
|
||||||
'@typescript-eslint/no-empty-interface': ['error', {
|
'@typescript-eslint/no-empty-interface': ['error', {
|
||||||
allowSingleExtends: true,
|
allowSingleExtends: true,
|
||||||
}],
|
}],
|
||||||
|
'import/consistent-type-specifier-style': ['error', 'prefer-top-level'],
|
||||||
// window の禁止理由: グローバルスコープと衝突し、予期せぬ結果を招くため
|
// window の禁止理由: グローバルスコープと衝突し、予期せぬ結果を招くため
|
||||||
// e の禁止理由: error や event など、複数のキーワードの頭文字であり分かりにくいため
|
// e の禁止理由: error や event など、複数のキーワードの頭文字であり分かりにくいため
|
||||||
'id-denylist': ['error', 'window', 'e'],
|
'id-denylist': ['error', 'window', 'e'],
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"watch": "vite",
|
"watch": "vite",
|
||||||
"dev": "vite --config vite.config.local-dev.ts --debug hmr",
|
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"typecheck": "vue-tsc --noEmit",
|
"typecheck": "vue-tsc --noEmit",
|
||||||
"eslint": "eslint --quiet \"src/**/*.{ts,vue}\"",
|
"eslint": "eslint --quiet \"src/**/*.{ts,vue}\"",
|
||||||
|
@ -15,7 +14,7 @@
|
||||||
"@rollup/plugin-json": "6.1.0",
|
"@rollup/plugin-json": "6.1.0",
|
||||||
"@rollup/plugin-replace": "5.0.7",
|
"@rollup/plugin-replace": "5.0.7",
|
||||||
"@rollup/pluginutils": "5.1.3",
|
"@rollup/pluginutils": "5.1.3",
|
||||||
"@tabler/icons-webfont": "3.3.0",
|
"@tabler/icons-webfont": "https://github.com/misskey-dev/tabler-icons/archive/refs/tags/3.29.0-mi.1913+5921534bc.tar.gz",
|
||||||
"@twemoji/parser": "15.1.1",
|
"@twemoji/parser": "15.1.1",
|
||||||
"@vitejs/plugin-vue": "5.2.0",
|
"@vitejs/plugin-vue": "5.2.0",
|
||||||
"@vue/compiler-sfc": "3.5.12",
|
"@vue/compiler-sfc": "3.5.12",
|
||||||
|
|
|
@ -3,7 +3,8 @@
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { VNode, h, SetupContext, provide } from 'vue';
|
import { h, provide } from 'vue';
|
||||||
|
import type { VNode, SetupContext } from 'vue';
|
||||||
import * as mfm from 'mfm-js';
|
import * as mfm from 'mfm-js';
|
||||||
import * as Misskey from 'misskey-js';
|
import * as Misskey from 'misskey-js';
|
||||||
import { host } from '@@/js/config.js';
|
import { host } from '@@/js/config.js';
|
||||||
|
|
|
@ -22,7 +22,8 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { useTemplateRef } from 'vue';
|
import { useTemplateRef } from 'vue';
|
||||||
import EmNote from '@/components/EmNote.vue';
|
import EmNote from '@/components/EmNote.vue';
|
||||||
import EmPagination, { Paging } from '@/components/EmPagination.vue';
|
import EmPagination from '@/components/EmPagination.vue';
|
||||||
|
import type { Paging } from '@/components/EmPagination.vue';
|
||||||
import { i18n } from '@/i18n.js';
|
import { i18n } from '@/i18n.js';
|
||||||
import * as Misskey from 'misskey-js';
|
import * as Misskey from 'misskey-js';
|
||||||
|
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
<!--
|
|
||||||
SPDX-FileCopyrightText: syuilo and misskey-project
|
|
||||||
SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!--
|
|
||||||
開発モードのviteはこのファイルを起点にサーバーを起動します。
|
|
||||||
このファイルに書かれた [t]js のリンクと (s)cssのリンクと、その依存関係にあるファイルはビルドされます
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<title>[DEV] Loading...</title>
|
|
||||||
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
|
|
||||||
<meta
|
|
||||||
http-equiv="Content-Security-Policy"
|
|
||||||
content="default-src 'self' https://newassets.hcaptcha.com/ https://challenges.cloudflare.com/ http://localhost:7493/;
|
|
||||||
worker-src 'self';
|
|
||||||
script-src 'self' 'unsafe-eval' https://*.hcaptcha.com https://challenges.cloudflare.com https://esm.sh;
|
|
||||||
style-src 'self' 'unsafe-inline';
|
|
||||||
img-src 'self' data: blob: www.google.com xn--931a.moe localhost:3000 localhost:5173 127.0.0.1:5173 127.0.0.1:3000;
|
|
||||||
media-src 'self' localhost:3000 localhost:5173 127.0.0.1:5173 127.0.0.1:3000;
|
|
||||||
connect-src 'self' localhost:3000 localhost:5173 127.0.0.1:5173 127.0.0.1:3000 https://newassets.hcaptcha.com;
|
|
||||||
frame-src *;"
|
|
||||||
/>
|
|
||||||
<meta property="og:site_name" content="[DEV BUILD] Misskey" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div id="misskey_app"></div>
|
|
||||||
<script type="module" src="./boot.ts"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -21,6 +21,7 @@
|
||||||
"allowSyntheticDefaultImports": true,
|
"allowSyntheticDefaultImports": true,
|
||||||
"isolatedModules": true,
|
"isolatedModules": true,
|
||||||
"useDefineForClassFields": true,
|
"useDefineForClassFields": true,
|
||||||
|
"verbatimModuleSyntax": true,
|
||||||
"baseUrl": ".",
|
"baseUrl": ".",
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/*": ["./src/*"],
|
"@/*": ["./src/*"],
|
||||||
|
|
|
@ -1,96 +0,0 @@
|
||||||
import dns from 'dns';
|
|
||||||
import { readFile } from 'node:fs/promises';
|
|
||||||
import type { IncomingMessage } from 'node:http';
|
|
||||||
import { defineConfig } from 'vite';
|
|
||||||
import type { UserConfig } from 'vite';
|
|
||||||
import * as yaml from 'js-yaml';
|
|
||||||
import locales from '../../locales/index.js';
|
|
||||||
import { getConfig } from './vite.config.js';
|
|
||||||
|
|
||||||
dns.setDefaultResultOrder('ipv4first');
|
|
||||||
|
|
||||||
const defaultConfig = getConfig();
|
|
||||||
|
|
||||||
const { port } = yaml.load(await readFile('../../.config/default.yml', 'utf-8'));
|
|
||||||
|
|
||||||
const httpUrl = `http://localhost:${port}/`;
|
|
||||||
const websocketUrl = `ws://localhost:${port}/`;
|
|
||||||
|
|
||||||
// activitypubリクエストはProxyを通し、それ以外はViteの開発サーバーを返す
|
|
||||||
function varyHandler(req: IncomingMessage) {
|
|
||||||
if (req.headers.accept?.includes('application/activity+json')) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return '/index.html';
|
|
||||||
}
|
|
||||||
|
|
||||||
const devConfig: UserConfig = {
|
|
||||||
// 基本の設定は vite.config.js から引き継ぐ
|
|
||||||
...defaultConfig,
|
|
||||||
root: 'src',
|
|
||||||
publicDir: '../assets',
|
|
||||||
base: '/embed',
|
|
||||||
server: {
|
|
||||||
host: 'localhost',
|
|
||||||
port: 5174,
|
|
||||||
proxy: {
|
|
||||||
'/api': {
|
|
||||||
changeOrigin: true,
|
|
||||||
target: httpUrl,
|
|
||||||
},
|
|
||||||
'/assets': httpUrl,
|
|
||||||
'/static-assets': httpUrl,
|
|
||||||
'/client-assets': httpUrl,
|
|
||||||
'/files': httpUrl,
|
|
||||||
'/twemoji': httpUrl,
|
|
||||||
'/fluent-emoji': httpUrl,
|
|
||||||
'/sw.js': httpUrl,
|
|
||||||
'/streaming': {
|
|
||||||
target: websocketUrl,
|
|
||||||
ws: true,
|
|
||||||
},
|
|
||||||
'/favicon.ico': httpUrl,
|
|
||||||
'/robots.txt': httpUrl,
|
|
||||||
'/embed.js': httpUrl,
|
|
||||||
'/identicon': {
|
|
||||||
target: httpUrl,
|
|
||||||
rewrite(path) {
|
|
||||||
return path.replace('@localhost:5173', '');
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'/url': httpUrl,
|
|
||||||
'/proxy': httpUrl,
|
|
||||||
'/_info_card_': httpUrl,
|
|
||||||
'/bios': httpUrl,
|
|
||||||
'/cli': httpUrl,
|
|
||||||
'/inbox': httpUrl,
|
|
||||||
'/emoji/': httpUrl,
|
|
||||||
'/notes': {
|
|
||||||
target: httpUrl,
|
|
||||||
bypass: varyHandler,
|
|
||||||
},
|
|
||||||
'/users': {
|
|
||||||
target: httpUrl,
|
|
||||||
bypass: varyHandler,
|
|
||||||
},
|
|
||||||
'/.well-known': {
|
|
||||||
target: httpUrl,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
build: {
|
|
||||||
...defaultConfig.build,
|
|
||||||
rollupOptions: {
|
|
||||||
...defaultConfig.build?.rollupOptions,
|
|
||||||
input: 'index.html',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
define: {
|
|
||||||
...defaultConfig.define,
|
|
||||||
_LANGS_FULL_: JSON.stringify(Object.entries(locales)),
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
export default defineConfig(({ command, mode }) => devConfig);
|
|
||||||
|
|
|
@ -1,12 +1,17 @@
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import pluginVue from '@vitejs/plugin-vue';
|
import pluginVue from '@vitejs/plugin-vue';
|
||||||
import { type UserConfig, defineConfig } from 'vite';
|
import { type UserConfig, defineConfig } from 'vite';
|
||||||
|
import * as yaml from 'js-yaml';
|
||||||
|
import { promises as fsp } from 'fs';
|
||||||
|
|
||||||
import locales from '../../locales/index.js';
|
import locales from '../../locales/index.js';
|
||||||
import meta from '../../package.json';
|
import meta from '../../package.json';
|
||||||
import packageInfo from './package.json' with { type: 'json' };
|
import packageInfo from './package.json' with { type: 'json' };
|
||||||
import pluginJson5 from './vite.json5.js';
|
import pluginJson5 from './vite.json5.js';
|
||||||
|
|
||||||
|
const url = process.env.NODE_ENV === 'development' ? yaml.load(await fsp.readFile('../../.config/default.yml', 'utf-8')).url : null;
|
||||||
|
const host = url ? (new URL(url)).hostname : undefined;
|
||||||
|
|
||||||
const extensions = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.json', '.json5', '.svg', '.sass', '.scss', '.css', '.vue'];
|
const extensions = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.json', '.json5', '.svg', '.sass', '.scss', '.css', '.vue'];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -62,6 +67,7 @@ export function getConfig(): UserConfig {
|
||||||
base: '/embed_vite/',
|
base: '/embed_vite/',
|
||||||
|
|
||||||
server: {
|
server: {
|
||||||
|
host,
|
||||||
port: 5174,
|
port: 5174,
|
||||||
hmr: {
|
hmr: {
|
||||||
// バックエンド経由での起動時、Viteは5174経由でアセットを参照していると思い込んでいるが実際は3000から配信される
|
// バックエンド経由での起動時、Viteは5174経由でアセットを参照していると思い込んでいるが実際は3000から配信される
|
||||||
|
|
|
@ -23,10 +23,14 @@ const options = {
|
||||||
sourcemap: 'linked',
|
sourcemap: 'linked',
|
||||||
};
|
};
|
||||||
|
|
||||||
// js-built配下をすべて削除する
|
const args = process.argv.slice(2).map(arg => arg.toLowerCase());
|
||||||
fs.rmSync('./js-built', { recursive: true, force: true });
|
|
||||||
|
|
||||||
if (process.argv.map(arg => arg.toLowerCase()).includes('--watch')) {
|
// js-built配下をすべて削除する
|
||||||
|
if (!args.includes('--no-clean')) {
|
||||||
|
fs.rmSync('./js-built', { recursive: true, force: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.includes('--watch')) {
|
||||||
await watchSrc();
|
await watchSrc();
|
||||||
} else {
|
} else {
|
||||||
await buildSrc();
|
await buildSrc();
|
||||||
|
|
|
@ -52,6 +52,7 @@ export default [
|
||||||
'@typescript-eslint/no-empty-interface': ['error', {
|
'@typescript-eslint/no-empty-interface': ['error', {
|
||||||
allowSingleExtends: true,
|
allowSingleExtends: true,
|
||||||
}],
|
}],
|
||||||
|
'import/consistent-type-specifier-style': ['error', 'prefer-top-level'],
|
||||||
// window の禁止理由: グローバルスコープと衝突し、予期せぬ結果を招くため
|
// window の禁止理由: グローバルスコープと衝突し、予期せぬ結果を招くため
|
||||||
// e の禁止理由: error や event など、複数のキーワードの頭文字であり分かりにくいため
|
// e の禁止理由: error や event など、複数のキーワードの頭文字であり分かりにくいため
|
||||||
'id-denylist': ['error', 'window', 'e'],
|
'id-denylist': ['error', 'window', 'e'],
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
"noImplicitReturns": true,
|
"noImplicitReturns": true,
|
||||||
"esModuleInterop": true,
|
"esModuleInterop": true,
|
||||||
|
"verbatimModuleSyntax": true,
|
||||||
"baseUrl": ".",
|
"baseUrl": ".",
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/*": ["./*"],
|
"@/*": ["./*"],
|
||||||
|
|
|
@ -3,7 +3,8 @@
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { DefaultBodyType, HttpResponse, HttpResponseResolver, JsonBodyType, PathParams, http } from 'msw';
|
import { HttpResponse, http } from 'msw';
|
||||||
|
import type { DefaultBodyType, HttpResponseResolver, JsonBodyType, PathParams } from 'msw';
|
||||||
import seedrandom from 'seedrandom';
|
import seedrandom from 'seedrandom';
|
||||||
import { action } from '@storybook/addon-actions';
|
import { action } from '@storybook/addon-actions';
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@ export default [
|
||||||
'@typescript-eslint/no-empty-interface': ['error', {
|
'@typescript-eslint/no-empty-interface': ['error', {
|
||||||
allowSingleExtends: true,
|
allowSingleExtends: true,
|
||||||
}],
|
}],
|
||||||
|
'import/consistent-type-specifier-style': ['error', 'prefer-top-level'],
|
||||||
// window の禁止理由: グローバルスコープと衝突し、予期せぬ結果を招くため
|
// window の禁止理由: グローバルスコープと衝突し、予期せぬ結果を招くため
|
||||||
// e の禁止理由: error や event など、複数のキーワードの頭文字であり分かりにくいため
|
// e の禁止理由: error や event など、複数のキーワードの頭文字であり分かりにくいため
|
||||||
'id-denylist': ['error', 'window', 'e'],
|
'id-denylist': ['error', 'window', 'e'],
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { generate } from 'astring';
|
import { generate } from 'astring';
|
||||||
import * as estree from 'estree';
|
|
||||||
import { walk } from '../node_modules/estree-walker/src/index.js';
|
import { walk } from '../node_modules/estree-walker/src/index.js';
|
||||||
|
import type * as estree from 'estree';
|
||||||
import type * as estreeWalker from 'estree-walker';
|
import type * as estreeWalker from 'estree-walker';
|
||||||
import type { Plugin } from 'vite';
|
import type { Plugin } from 'vite';
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"watch": "vite",
|
"watch": "vite",
|
||||||
"dev": "vite --config vite.config.local-dev.ts --debug hmr",
|
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"storybook-dev": "nodemon --verbose --watch src --ext \"mdx,ts,vue\" --ignore \"*.stories.ts\" --exec \"pnpm build-storybook-pre && pnpm exec storybook dev -p 6006 --ci\"",
|
"storybook-dev": "nodemon --verbose --watch src --ext \"mdx,ts,vue\" --ignore \"*.stories.ts\" --exec \"pnpm build-storybook-pre && pnpm exec storybook dev -p 6006 --ci\"",
|
||||||
"build-storybook-pre": "(tsc -p .storybook || echo done.) && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js",
|
"build-storybook-pre": "(tsc -p .storybook || echo done.) && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js",
|
||||||
|
@ -25,7 +24,7 @@
|
||||||
"@rollup/plugin-replace": "5.0.7",
|
"@rollup/plugin-replace": "5.0.7",
|
||||||
"@rollup/pluginutils": "5.1.3",
|
"@rollup/pluginutils": "5.1.3",
|
||||||
"@syuilo/aiscript": "0.19.0",
|
"@syuilo/aiscript": "0.19.0",
|
||||||
"@tabler/icons-webfont": "3.3.0",
|
"@tabler/icons-webfont": "https://github.com/misskey-dev/tabler-icons/archive/refs/tags/3.29.0-mi.1913+5921534bc.tar.gz",
|
||||||
"@twemoji/parser": "15.1.1",
|
"@twemoji/parser": "15.1.1",
|
||||||
"@vitejs/plugin-vue": "5.2.0",
|
"@vitejs/plugin-vue": "5.2.0",
|
||||||
"@vue/compiler-sfc": "3.5.12",
|
"@vue/compiler-sfc": "3.5.12",
|
||||||
|
|
|
@ -1,90 +0,0 @@
|
||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: syuilo and misskey-project
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
await main();
|
|
||||||
|
|
||||||
import('@/_boot_.js');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* backend/src/server/web/boot.jsで差し込まれている起動処理のうち、最低限必要なものを模倣するための処理
|
|
||||||
*/
|
|
||||||
async function main() {
|
|
||||||
const forceError = localStorage.getItem('forceError');
|
|
||||||
if (forceError != null) {
|
|
||||||
renderError('FORCED_ERROR', 'This error is forced by having forceError in local storage.');
|
|
||||||
}
|
|
||||||
|
|
||||||
//#region Detect language & fetch translations
|
|
||||||
|
|
||||||
// dev-modeの場合は常に取り直す
|
|
||||||
const supportedLangs = _LANGS_.map(it => it[0]);
|
|
||||||
let lang: string | null | undefined = localStorage.getItem('lang');
|
|
||||||
if (lang == null || !supportedLangs.includes(lang)) {
|
|
||||||
if (supportedLangs.includes(navigator.language)) {
|
|
||||||
lang = navigator.language;
|
|
||||||
} else {
|
|
||||||
lang = supportedLangs.find(x => x.split('-')[0] === navigator.language);
|
|
||||||
|
|
||||||
// Fallback
|
|
||||||
if (lang == null) lang = 'en-US';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO:今のままだと言語ファイル変更後はpnpm devをリスタートする必要があるので、chokidarを使ったり等で対応できるようにする
|
|
||||||
const locale = _LANGS_FULL_.find(it => it[0] === lang);
|
|
||||||
localStorage.setItem('lang', lang);
|
|
||||||
localStorage.setItem('locale', JSON.stringify(locale[1]));
|
|
||||||
localStorage.setItem('localeVersion', _VERSION_);
|
|
||||||
//#endregion
|
|
||||||
|
|
||||||
//#region Theme
|
|
||||||
const theme = localStorage.getItem('theme');
|
|
||||||
if (theme) {
|
|
||||||
for (const [k, v] of Object.entries(JSON.parse(theme))) {
|
|
||||||
document.documentElement.style.setProperty(`--MI_THEME-${k}`, v.toString());
|
|
||||||
|
|
||||||
// HTMLの theme-color 適用
|
|
||||||
if (k === 'htmlThemeColor') {
|
|
||||||
for (const tag of document.head.children) {
|
|
||||||
if (tag.tagName === 'META' && tag.getAttribute('name') === 'theme-color') {
|
|
||||||
tag.setAttribute('content', v);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const colorScheme = localStorage.getItem('colorScheme');
|
|
||||||
if (colorScheme) {
|
|
||||||
document.documentElement.style.setProperty('color-scheme', colorScheme);
|
|
||||||
}
|
|
||||||
//#endregion
|
|
||||||
|
|
||||||
const fontSize = localStorage.getItem('fontSize');
|
|
||||||
if (fontSize) {
|
|
||||||
document.documentElement.classList.add('f-' + fontSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
const useSystemFont = localStorage.getItem('useSystemFont');
|
|
||||||
if (useSystemFont) {
|
|
||||||
document.documentElement.classList.add('useSystemFont');
|
|
||||||
}
|
|
||||||
|
|
||||||
const wallpaper = localStorage.getItem('wallpaper');
|
|
||||||
if (wallpaper) {
|
|
||||||
document.documentElement.style.backgroundImage = `url(${wallpaper})`;
|
|
||||||
}
|
|
||||||
|
|
||||||
const customCss = localStorage.getItem('customCss');
|
|
||||||
if (customCss && customCss.length > 0) {
|
|
||||||
const style = document.createElement('style');
|
|
||||||
style.innerHTML = customCss;
|
|
||||||
document.head.appendChild(style);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderError(code: string, details?: string) {
|
|
||||||
console.log(code, details);
|
|
||||||
}
|
|
|
@ -41,6 +41,12 @@ export async function signout() {
|
||||||
if (!$i) return;
|
if (!$i) return;
|
||||||
|
|
||||||
waiting();
|
waiting();
|
||||||
|
document.cookie.split(';').forEach((cookie) => {
|
||||||
|
const cookieName = cookie.split('=')[0].trim();
|
||||||
|
if (cookieName === 'token') {
|
||||||
|
document.cookie = `${cookieName}=; max-age=0; path=/`;
|
||||||
|
}
|
||||||
|
});
|
||||||
miLocalStorage.removeItem('account');
|
miLocalStorage.removeItem('account');
|
||||||
await removeAccount($i.id);
|
await removeAccount($i.id);
|
||||||
const accounts = await getAccounts();
|
const accounts = await getAccounts();
|
||||||
|
@ -101,6 +107,9 @@ export async function removeAccount(idOrToken: Account['id']) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function fetchAccount(token: string, id?: string, forceShowDialog?: boolean): Promise<Account> {
|
function fetchAccount(token: string, id?: string, forceShowDialog?: boolean): Promise<Account> {
|
||||||
|
document.cookie = "token=; path=/; max-age=0";
|
||||||
|
document.cookie = `token=${token}; path=/queue; max-age=86400; SameSite=Strict; Secure`; // bull dashboardの認証とかで使う
|
||||||
|
|
||||||
return new Promise((done, fail) => {
|
return new Promise((done, fail) => {
|
||||||
window.fetch(`${apiUrl}/i`, {
|
window.fetch(`${apiUrl}/i`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
|
@ -213,7 +222,6 @@ export async function login(token: Account['token'], redirect?: string) {
|
||||||
throw reason;
|
throw reason;
|
||||||
});
|
});
|
||||||
miLocalStorage.setItem('account', JSON.stringify(me));
|
miLocalStorage.setItem('account', JSON.stringify(me));
|
||||||
document.cookie = `token=${token}; path=/; max-age=31536000`; // bull dashboardの認証とかで使う
|
|
||||||
await addAccount(me.id, token);
|
await addAccount(me.id, token);
|
||||||
|
|
||||||
if (redirect) {
|
if (redirect) {
|
||||||
|
|
|
@ -3,7 +3,8 @@
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { computed, watch, version as vueVersion, App } from 'vue';
|
import { computed, watch, version as vueVersion } from 'vue';
|
||||||
|
import type { App } from 'vue';
|
||||||
import { compareVersions } from 'compare-versions';
|
import { compareVersions } from 'compare-versions';
|
||||||
import { version, lang, updateLocale, locale } from '@@/js/config.js';
|
import { version, lang, updateLocale, locale } from '@@/js/config.js';
|
||||||
import widgets from '@/widgets/index.js';
|
import widgets from '@/widgets/index.js';
|
||||||
|
@ -98,6 +99,11 @@ export async function common(createVue: () => App<Element>) {
|
||||||
// タッチデバイスでCSSの:hoverを機能させる
|
// タッチデバイスでCSSの:hoverを機能させる
|
||||||
document.addEventListener('touchend', () => {}, { passive: true });
|
document.addEventListener('touchend', () => {}, { passive: true });
|
||||||
|
|
||||||
|
// URLに#pswpを含む場合は取り除く
|
||||||
|
if (location.hash === '#pswp') {
|
||||||
|
history.replaceState(null, '', location.href.replace('#pswp', ''));
|
||||||
|
}
|
||||||
|
|
||||||
// 一斉リロード
|
// 一斉リロード
|
||||||
reloadChannel.addEventListener('message', path => {
|
reloadChannel.addEventListener('message', path => {
|
||||||
if (path !== null) location.href = path;
|
if (path !== null) location.href = path;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
import { createApp, defineAsyncComponent, markRaw } from 'vue';
|
import { createApp, defineAsyncComponent, markRaw } from 'vue';
|
||||||
import { ui } from '@@/js/config.js';
|
import { ui } from '@@/js/config.js';
|
||||||
import { common } from './common.js';
|
import { common } from './common.js';
|
||||||
import type * as Misskey from 'misskey-js';
|
import * as Misskey from 'misskey-js';
|
||||||
import type { Component } from 'vue';
|
import type { Component } from 'vue';
|
||||||
import { i18n } from '@/i18n.js';
|
import { i18n } from '@/i18n.js';
|
||||||
import { alert, confirm, popup, post, toast } from '@/os.js';
|
import { alert, confirm, popup, post, toast } from '@/os.js';
|
||||||
|
@ -22,7 +22,8 @@ import { initializeSw } from '@/scripts/initialize-sw.js';
|
||||||
import { deckStore } from '@/ui/deck/deck-store.js';
|
import { deckStore } from '@/ui/deck/deck-store.js';
|
||||||
import { emojiPicker } from '@/scripts/emoji-picker.js';
|
import { emojiPicker } from '@/scripts/emoji-picker.js';
|
||||||
import { mainRouter } from '@/router/main.js';
|
import { mainRouter } from '@/router/main.js';
|
||||||
import { type Keymap, makeHotkey } from '@/scripts/hotkey.js';
|
import { makeHotkey } from '@/scripts/hotkey.js';
|
||||||
|
import type { Keymap } from '@/scripts/hotkey.js';
|
||||||
import { addCustomEmoji, removeCustomEmojis, updateCustomEmojis } from '@/custom-emojis.js';
|
import { addCustomEmoji, removeCustomEmojis, updateCustomEmojis } from '@/custom-emojis.js';
|
||||||
|
|
||||||
export async function mainBoot() {
|
export async function mainBoot() {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
import { action } from '@storybook/addon-actions';
|
import { action } from '@storybook/addon-actions';
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { HttpResponse, http } from 'msw';
|
import { HttpResponse, http } from 'msw';
|
||||||
import { userDetailed } from '../../.storybook/fakes.js';
|
import { userDetailed } from '../../.storybook/fakes.js';
|
||||||
import { commonHandlers } from '../../.storybook/mocks.js';
|
import { commonHandlers } from '../../.storybook/mocks.js';
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
import { action } from '@storybook/addon-actions';
|
import { action } from '@storybook/addon-actions';
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { HttpResponse, http } from 'msw';
|
import { HttpResponse, http } from 'msw';
|
||||||
import { commonHandlers } from '../../.storybook/mocks.js';
|
import { commonHandlers } from '../../.storybook/mocks.js';
|
||||||
import { userDetailed } from '../../.storybook/fakes.js';
|
import { userDetailed } from '../../.storybook/fakes.js';
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { HttpResponse, http } from 'msw';
|
import { HttpResponse, http } from 'msw';
|
||||||
import { userDetailed } from '../../.storybook/fakes.js';
|
import { userDetailed } from '../../.storybook/fakes.js';
|
||||||
import { commonHandlers } from '../../.storybook/mocks.js';
|
import { commonHandlers } from '../../.storybook/mocks.js';
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import isChromatic from 'chromatic/isChromatic';
|
import isChromatic from 'chromatic/isChromatic';
|
||||||
import MkAnalogClock from './MkAnalogClock.vue';
|
import MkAnalogClock from './MkAnalogClock.vue';
|
||||||
export const Default = {
|
export const Default = {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
import { action } from '@storybook/addon-actions';
|
import { action } from '@storybook/addon-actions';
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { HttpResponse, http } from 'msw';
|
import { HttpResponse, http } from 'msw';
|
||||||
import { commonHandlers } from '../../.storybook/mocks.js';
|
import { commonHandlers } from '../../.storybook/mocks.js';
|
||||||
import MkAnnouncementDialog from './MkAnnouncementDialog.vue';
|
import MkAnnouncementDialog from './MkAnnouncementDialog.vue';
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
import { action } from '@storybook/addon-actions';
|
import { action } from '@storybook/addon-actions';
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { HttpResponse, http } from 'msw';
|
import { HttpResponse, http } from 'msw';
|
||||||
import { commonHandlers } from '../../.storybook/mocks.js';
|
import { commonHandlers } from '../../.storybook/mocks.js';
|
||||||
import MkAntennaEditor from './MkAntennaEditor.vue';
|
import MkAntennaEditor from './MkAntennaEditor.vue';
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
import { action } from '@storybook/addon-actions';
|
import { action } from '@storybook/addon-actions';
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { HttpResponse, http } from 'msw';
|
import { HttpResponse, http } from 'msw';
|
||||||
import { commonHandlers } from '../../.storybook/mocks.js';
|
import { commonHandlers } from '../../.storybook/mocks.js';
|
||||||
import MkAntennaEditorDialog from './MkAntennaEditorDialog.vue';
|
import MkAntennaEditorDialog from './MkAntennaEditorDialog.vue';
|
||||||
|
|
|
@ -63,14 +63,15 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { Ref, ref, computed } from 'vue';
|
import { ref, computed } from 'vue';
|
||||||
|
import type { Ref } from 'vue';
|
||||||
import * as os from '@/os.js';
|
import * as os from '@/os.js';
|
||||||
import MkButton from '@/components/MkButton.vue';
|
import MkButton from '@/components/MkButton.vue';
|
||||||
import MkInput from '@/components/MkInput.vue';
|
import MkInput from '@/components/MkInput.vue';
|
||||||
import MkSwitch from '@/components/MkSwitch.vue';
|
import MkSwitch from '@/components/MkSwitch.vue';
|
||||||
import MkTextarea from '@/components/MkTextarea.vue';
|
import MkTextarea from '@/components/MkTextarea.vue';
|
||||||
import MkSelect from '@/components/MkSelect.vue';
|
import MkSelect from '@/components/MkSelect.vue';
|
||||||
import { AsUiComponent, AsUiRoot, AsUiPostFormButton } from '@/scripts/aiscript/ui.js';
|
import type { AsUiComponent, AsUiRoot, AsUiPostFormButton } from '@/scripts/aiscript/ui.js';
|
||||||
import MkFolder from '@/components/MkFolder.vue';
|
import MkFolder from '@/components/MkFolder.vue';
|
||||||
import MkPostForm from '@/components/MkPostForm.vue';
|
import MkPostForm from '@/components/MkPostForm.vue';
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
import { action } from '@storybook/addon-actions';
|
import { action } from '@storybook/addon-actions';
|
||||||
import { expect, userEvent, waitFor, within } from '@storybook/test';
|
import { expect, userEvent, waitFor, within } from '@storybook/test';
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { HttpResponse, http } from 'msw';
|
import { HttpResponse, http } from 'msw';
|
||||||
import { userDetailed } from '../../.storybook/fakes.js';
|
import { userDetailed } from '../../.storybook/fakes.js';
|
||||||
import { commonHandlers } from '../../.storybook/mocks.js';
|
import { commonHandlers } from '../../.storybook/mocks.js';
|
||||||
|
|
|
@ -57,7 +57,8 @@ import { i18n } from '@/i18n.js';
|
||||||
import { miLocalStorage } from '@/local-storage.js';
|
import { miLocalStorage } from '@/local-storage.js';
|
||||||
import { customEmojis } from '@/custom-emojis.js';
|
import { customEmojis } from '@/custom-emojis.js';
|
||||||
import { MFM_TAGS, MFM_PARAMS } from '@@/js/const.js';
|
import { MFM_TAGS, MFM_PARAMS } from '@@/js/const.js';
|
||||||
import { searchEmoji, EmojiDef } from '@/scripts/search-emoji.js';
|
import { searchEmoji } from '@/scripts/search-emoji.js';
|
||||||
|
import type { EmojiDef } from '@/scripts/search-emoji.js';
|
||||||
|
|
||||||
const lib = emojilist.filter(x => x.category !== 'flags');
|
const lib = emojilist.filter(x => x.category !== 'flags');
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { HttpResponse, http } from 'msw';
|
import { HttpResponse, http } from 'msw';
|
||||||
import { userDetailed } from '../../.storybook/fakes.js';
|
import { userDetailed } from '../../.storybook/fakes.js';
|
||||||
import { commonHandlers } from '../../.storybook/mocks.js';
|
import { commonHandlers } from '../../.storybook/mocks.js';
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
/* eslint-disable import/no-default-export */
|
/* eslint-disable import/no-default-export */
|
||||||
import { action } from '@storybook/addon-actions';
|
import { action } from '@storybook/addon-actions';
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import MkButton from './MkButton.vue';
|
import MkButton from './MkButton.vue';
|
||||||
export const Default = {
|
export const Default = {
|
||||||
render(args) {
|
render(args) {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
/* eslint-disable import/no-default-export */
|
/* eslint-disable import/no-default-export */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { HttpResponse, http } from 'msw';
|
import { HttpResponse, http } from 'msw';
|
||||||
import { action } from '@storybook/addon-actions';
|
import { action } from '@storybook/addon-actions';
|
||||||
import { expect, userEvent, within } from '@storybook/test';
|
import { expect, userEvent, within } from '@storybook/test';
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
/* eslint-disable import/no-default-export */
|
/* eslint-disable import/no-default-export */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { HttpResponse, http } from 'msw';
|
import { HttpResponse, http } from 'msw';
|
||||||
import { action } from '@storybook/addon-actions';
|
import { action } from '@storybook/addon-actions';
|
||||||
import { channel } from '../../.storybook/fakes.js';
|
import { channel } from '../../.storybook/fakes.js';
|
||||||
|
|
|
@ -20,7 +20,8 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import MkChannelPreview from '@/components/MkChannelPreview.vue';
|
import MkChannelPreview from '@/components/MkChannelPreview.vue';
|
||||||
import MkPagination, { Paging } from '@/components/MkPagination.vue';
|
import MkPagination from '@/components/MkPagination.vue';
|
||||||
|
import type { Paging } from '@/components/MkPagination.vue';
|
||||||
import { i18n } from '@/i18n.js';
|
import { i18n } from '@/i18n.js';
|
||||||
import { infoImageUrl } from '@/instance.js';
|
import { infoImageUrl } from '@/instance.js';
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
/* eslint-disable import/no-default-export */
|
/* eslint-disable import/no-default-export */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { channel } from '../../.storybook/fakes.js';
|
import { channel } from '../../.storybook/fakes.js';
|
||||||
import MkChannelPreview from './MkChannelPreview.vue';
|
import MkChannelPreview from './MkChannelPreview.vue';
|
||||||
export const Default = {
|
export const Default = {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
/* eslint-disable import/no-default-export */
|
/* eslint-disable import/no-default-export */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { http } from 'msw';
|
import { http } from 'msw';
|
||||||
import { commonHandlers } from '../../.storybook/mocks.js';
|
import { commonHandlers } from '../../.storybook/mocks.js';
|
||||||
import { getChartResolver } from '../../.storybook/charts.js';
|
import { getChartResolver } from '../../.storybook/charts.js';
|
||||||
|
|
|
@ -14,7 +14,8 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { shallowRef } from 'vue';
|
import { shallowRef } from 'vue';
|
||||||
import { Chart, LegendItem } from 'chart.js';
|
import { Chart } from 'chart.js';
|
||||||
|
import type { LegendItem } from 'chart.js';
|
||||||
|
|
||||||
const chart = shallowRef<Chart>();
|
const chart = shallowRef<Chart>();
|
||||||
const type = shallowRef<string>();
|
const type = shallowRef<string>();
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
/* eslint-disable import/no-default-export */
|
/* eslint-disable import/no-default-export */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { HttpResponse, http } from 'msw';
|
import { HttpResponse, http } from 'msw';
|
||||||
import { action } from '@storybook/addon-actions';
|
import { action } from '@storybook/addon-actions';
|
||||||
import { expect, userEvent, within } from '@storybook/test';
|
import { expect, userEvent, within } from '@storybook/test';
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
/* eslint-disable import/no-default-export */
|
/* eslint-disable import/no-default-export */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { clip } from '../../.storybook/fakes.js';
|
import { clip } from '../../.storybook/fakes.js';
|
||||||
import MkClipPreview from './MkClipPreview.vue';
|
import MkClipPreview from './MkClipPreview.vue';
|
||||||
export const Default = {
|
export const Default = {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
/* eslint-disable import/no-default-export */
|
/* eslint-disable import/no-default-export */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import MkCode from './MkCode.vue';
|
import MkCode from './MkCode.vue';
|
||||||
const code = `for (let i, 100) {
|
const code = `for (let i, 100) {
|
||||||
<: if (i % 15 == 0) "FizzBuzz"
|
<: if (i % 15 == 0) "FizzBuzz"
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
/* eslint-disable import/no-default-export */
|
/* eslint-disable import/no-default-export */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { action } from '@storybook/addon-actions';
|
import { action } from '@storybook/addon-actions';
|
||||||
import MkCodeEditor from './MkCodeEditor.vue';
|
import MkCodeEditor from './MkCodeEditor.vue';
|
||||||
const code = `for (let i, 100) {
|
const code = `for (let i, 100) {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
/* eslint-disable import/no-default-export */
|
/* eslint-disable import/no-default-export */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import MkCodeInline from './MkCodeInline.vue';
|
import MkCodeInline from './MkCodeInline.vue';
|
||||||
export const Default = {
|
export const Default = {
|
||||||
render(args) {
|
render(args) {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
/* eslint-disable import/no-default-export */
|
/* eslint-disable import/no-default-export */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { action } from '@storybook/addon-actions';
|
import { action } from '@storybook/addon-actions';
|
||||||
import MkColorInput from './MkColorInput.vue';
|
import MkColorInput from './MkColorInput.vue';
|
||||||
export const Default = {
|
export const Default = {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
/* eslint-disable import/no-default-export */
|
/* eslint-disable import/no-default-export */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { userEvent, within } from '@storybook/test';
|
import { userEvent, within } from '@storybook/test';
|
||||||
import MkContextMenu from './MkContextMenu.vue';
|
import MkContextMenu from './MkContextMenu.vue';
|
||||||
import * as os from '@/os.js';
|
import * as os from '@/os.js';
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
/* eslint-disable import/no-default-export */
|
/* eslint-disable import/no-default-export */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { HttpResponse, http } from 'msw';
|
import { HttpResponse, http } from 'msw';
|
||||||
import { action } from '@storybook/addon-actions';
|
import { action } from '@storybook/addon-actions';
|
||||||
import { file } from '../../.storybook/fakes.js';
|
import { file } from '../../.storybook/fakes.js';
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
/* eslint-disable import/no-default-export */
|
/* eslint-disable import/no-default-export */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { emojiDetailed } from '../../.storybook/fakes.js';
|
import { emojiDetailed } from '../../.storybook/fakes.js';
|
||||||
import MkCustomEmojiDetailedDialog from './MkCustomEmojiDetailedDialog.vue';
|
import MkCustomEmojiDetailedDialog from './MkCustomEmojiDetailedDialog.vue';
|
||||||
export const Default = {
|
export const Default = {
|
||||||
|
|
|
@ -57,7 +57,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as Misskey from 'misskey-js';
|
import * as Misskey from 'misskey-js';
|
||||||
import { defineProps, shallowRef } from 'vue';
|
import { shallowRef } from 'vue';
|
||||||
import MkLink from '@/components/MkLink.vue';
|
import MkLink from '@/components/MkLink.vue';
|
||||||
import { i18n } from '@/i18n.js';
|
import { i18n } from '@/i18n.js';
|
||||||
import MkModalWindow from '@/components/MkModalWindow.vue';
|
import MkModalWindow from '@/components/MkModalWindow.vue';
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||||
/* eslint-disable import/no-default-export */
|
/* eslint-disable import/no-default-export */
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { action } from '@storybook/addon-actions';
|
import { action } from '@storybook/addon-actions';
|
||||||
import { expect, userEvent, within } from '@storybook/test';
|
import { expect, userEvent, within } from '@storybook/test';
|
||||||
import { file } from '../../.storybook/fakes.js';
|
import { file } from '../../.storybook/fakes.js';
|
||||||
|
|
|
@ -4,14 +4,15 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, h, PropType, TransitionGroup, useCssModule } from 'vue';
|
import { defineComponent, h, TransitionGroup, useCssModule } from 'vue';
|
||||||
|
import type { PropType } from 'vue';
|
||||||
import MkAd from '@/components/global/MkAd.vue';
|
import MkAd from '@/components/global/MkAd.vue';
|
||||||
import { isDebuggerEnabled, stackTraceInstances } from '@/debug.js';
|
import { isDebuggerEnabled, stackTraceInstances } from '@/debug.js';
|
||||||
import { i18n } from '@/i18n.js';
|
import { i18n } from '@/i18n.js';
|
||||||
import * as os from '@/os.js';
|
import * as os from '@/os.js';
|
||||||
import { instance } from '@/instance.js';
|
import { instance } from '@/instance.js';
|
||||||
import { defaultStore } from '@/store.js';
|
import { defaultStore } from '@/store.js';
|
||||||
import { MisskeyEntity } from '@/types/date-separated-list.js';
|
import type { MisskeyEntity } from '@/types/date-separated-list.js';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
props: {
|
props: {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
import { action } from '@storybook/addon-actions';
|
import { action } from '@storybook/addon-actions';
|
||||||
import { expect, userEvent, waitFor, within } from '@storybook/test';
|
import { expect, userEvent, waitFor, within } from '@storybook/test';
|
||||||
import { StoryObj } from '@storybook/vue3';
|
import type { StoryObj } from '@storybook/vue3';
|
||||||
import { i18n } from '@/i18n.js';
|
import { i18n } from '@/i18n.js';
|
||||||
import MkDialog from './MkDialog.vue';
|
import MkDialog from './MkDialog.vue';
|
||||||
const Base = {
|
const Base = {
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue