Compare commits
226 Commits
11.0.0-bet
...
11.3.0
Author | SHA1 | Date | |
---|---|---|---|
723d3e6871 | |||
f063dee12a | |||
db4b315d3d | |||
64d00b08a3 | |||
74736a941e | |||
c40366f20a | |||
d73e52ac2a | |||
9fac8a611f | |||
9c774a50f8 | |||
4f20ee1909 | |||
1440c5bc65 | |||
5829b2a7c1 | |||
e3c4bc18d0 | |||
8555ec2f72 | |||
8d7cefbbbe | |||
5aa5896b22 | |||
8a55bdd89d | |||
6444ef6444 | |||
701ab6cc68 | |||
3c6ce7a943 | |||
1e54afd217 | |||
4e90fd3a06 | |||
0463c6bb0f | |||
f31f986d66 | |||
c203c8302b | |||
dea4a7b389 | |||
0caf9b0706 | |||
5f655c9fd7 | |||
44aed53998 | |||
f9ff621d4a | |||
23a5a75778 | |||
a78475844a | |||
575cf2935e | |||
ae43aa1bc0 | |||
0ba71c6a47 | |||
643f7d1803 | |||
5d06da4db2 | |||
2934b09361 | |||
97341d3fa0 | |||
a95546ede0 | |||
7b44727b23 | |||
debe648a98 | |||
fda8cf77ed | |||
8aaab195c6 | |||
4096ddcbd0 | |||
ae6cc11ad2 | |||
dab7e527de | |||
8b92feac71 | |||
4beb3e5755 | |||
55f63229cd | |||
7827aeb695 | |||
cce768aaac | |||
80b83c0624 | |||
73b683bb4d | |||
d78a5c0863 | |||
683e5b6abe | |||
653b8f6352 | |||
9ec6afa375 | |||
adff5382ca | |||
704aabd703 | |||
f7b1ef0690 | |||
929982117f | |||
56a530d769 | |||
7ef75fb06b | |||
112a72abdf | |||
71813e03ee | |||
9b05b6ef28 | |||
54a87b25b3 | |||
55e97864bd | |||
95733c9490 | |||
e19ae644f1 | |||
ac4ea25267 | |||
611e4f34dc | |||
faf017f333 | |||
5eec896615 | |||
17f35174ea | |||
bf71b31123 | |||
9399a44c82 | |||
c96418806f | |||
7945eddef6 | |||
0ede390fef | |||
85959a3b9b | |||
946c3a25b9 | |||
f9d697128a | |||
532ef744f4 | |||
27a961814b | |||
5a5b65e9bf | |||
96673ad610 | |||
a9025aea0d | |||
f38ab0b973 | |||
150dac00cf | |||
bcb1a9c5d3 | |||
2e55aea584 | |||
4f5a3f0df5 | |||
e265b538cc | |||
b186504718 | |||
fc27890f13 | |||
a583939767 | |||
52e3bcfd29 | |||
85d29a3f9d | |||
18944d389d | |||
e90ac5d6a4 | |||
cb9a6ae774 | |||
3ef09aa6b2 | |||
4db22e45a2 | |||
f966d0b32c | |||
ba3879a95a | |||
c6cef0162d | |||
6d09aa86e9 | |||
b711f0f9c6 | |||
8fefb3a4c9 | |||
400cdf0f26 | |||
bce8c5a315 | |||
f44dc2dd05 | |||
df950d2fc5 | |||
5e1f804dd1 | |||
15de89f2f9 | |||
df647a415c | |||
fc66231f8e | |||
71df3e1566 | |||
168c22fc98 | |||
792ec23d7a | |||
ff625253ce | |||
8c872c6b22 | |||
541f5bc0a6 | |||
77ff7b9df0 | |||
203cc5075e | |||
7abfcd06da | |||
724f81c7f3 | |||
4d2e98af7b | |||
08221fdda7 | |||
c0f72970b9 | |||
18bc4a49e8 | |||
f90b6dbed4 | |||
d2d991ff34 | |||
190a5e175b | |||
a05f5a91b8 | |||
4d02ff27be | |||
df92b41d25 | |||
075af96338 | |||
64bbc55336 | |||
06c621acc1 | |||
d040dc19bc | |||
a38ae4a402 | |||
772063aade | |||
31c26354c5 | |||
64b331c5b2 | |||
94f8a145ec | |||
b357afa30a | |||
fee0437493 | |||
663b8864c1 | |||
c6eafdde30 | |||
f32ff95256 | |||
0452b75c3e | |||
97efd23ec8 | |||
ea3e311528 | |||
0565454419 | |||
35c79c2f29 | |||
e6089aec48 | |||
dd3f7834c3 | |||
f8cf18d880 | |||
2ac7e242b6 | |||
d8b604a94f | |||
a1f7b00981 | |||
b7ee42198c | |||
d66e4b7ff9 | |||
7f9789cf65 | |||
b41c18e033 | |||
3c73a7ec6d | |||
182c09d952 | |||
9fb86aed04 | |||
b8f7b13b05 | |||
1ee1d5b6d1 | |||
154c38c314 | |||
3c0626752a | |||
511ef77fb7 | |||
4df3ede500 | |||
e83c080af8 | |||
054220db70 | |||
97bff010a8 | |||
487a3079cd | |||
2d5158c680 | |||
837be06b72 | |||
7e0d8dd4d7 | |||
146fb23d7d | |||
61455ffe29 | |||
c267baafdc | |||
42248a306a | |||
694ec7ebe1 | |||
e3b3f8fac1 | |||
b390363b25 | |||
f6f8cdbcf2 | |||
f46f53b8a3 | |||
a2fcae4383 | |||
483f043768 | |||
f8e0f4f21f | |||
9c3613e96d | |||
d9cacdc86d | |||
aa3d2deeaa | |||
e64912545a | |||
b247be80cc | |||
343f2f1f33 | |||
2d590df900 | |||
ba56b2b9fd | |||
bf472b0c5e | |||
f7961f34c5 | |||
e369031a28 | |||
186d7bbfd9 | |||
60a11f8da5 | |||
1181fcdceb | |||
8cb9852058 | |||
53d46d1cbe | |||
275e1c8de9 | |||
d46eca4c87 | |||
2927fb1597 | |||
8c72e011d2 | |||
69662e24c3 | |||
83b7010d6a | |||
71654cbe47 | |||
e8f96e848a | |||
251abf21d4 | |||
d103427932 | |||
592cdfa910 | |||
f2ad1a0406 | |||
82af9320c0 | |||
fceebf7388 |
@ -5,12 +5,6 @@ executors:
|
||||
working_directory: /tmp/workspace
|
||||
docker:
|
||||
- image: misskey/ci:latest
|
||||
- image: circleci/mongo:latest
|
||||
with-redis:
|
||||
working_directory: /tmp/workspace
|
||||
docker:
|
||||
- image: misskey/ci:latest
|
||||
- image: circleci/mongo:latest
|
||||
- image: circleci/redis:latest
|
||||
docker:
|
||||
working_directory: /tmp/workspace
|
||||
@ -62,22 +56,10 @@ jobs:
|
||||
executor:
|
||||
type: string
|
||||
default: "default"
|
||||
without_redis:
|
||||
type: boolean
|
||||
default: false
|
||||
executor: <<parameters.executor>>
|
||||
steps:
|
||||
- attach_workspace:
|
||||
at: /tmp/workspace
|
||||
- when:
|
||||
condition: <<parameters.without_redis>>
|
||||
steps:
|
||||
- run:
|
||||
name: Configure
|
||||
command: |
|
||||
mv .config/test.yml .config/test_redis.yml
|
||||
touch .config/test.yml
|
||||
cat .config/test_redis.yml | while IFS= read line; do if [[ "$line" = '# __REDIS__' ]]; then break; else echo "$line" >> .config/test.yml; fi; done
|
||||
- run:
|
||||
name: Test
|
||||
command: |
|
||||
@ -140,32 +122,14 @@ workflows:
|
||||
branches:
|
||||
only: master
|
||||
- test:
|
||||
name: manual-test-with-redis
|
||||
executor: with-redis
|
||||
name: manual-test
|
||||
requires:
|
||||
- manual-build
|
||||
filters:
|
||||
branches:
|
||||
ignore: master
|
||||
- test:
|
||||
name: auto-test-without-redis
|
||||
executor: with-redis
|
||||
requires:
|
||||
- auto-build
|
||||
filters:
|
||||
branches:
|
||||
only: master
|
||||
- test:
|
||||
name: manual-test-with-redis
|
||||
without_redis: true
|
||||
requires:
|
||||
- manual-build
|
||||
filters:
|
||||
branches:
|
||||
ignore: master
|
||||
- test:
|
||||
name: auto-test-without-redis
|
||||
without_redis: true
|
||||
name: auto-test
|
||||
requires:
|
||||
- auto-build
|
||||
filters:
|
||||
|
@ -1,5 +1,4 @@
|
||||
# db settings
|
||||
POSTGRES_PASSWORD="example-misskey-pass"
|
||||
POSTGRES_USER="example-misskey-user"
|
||||
POSTGRES_DB="misskey"
|
||||
|
||||
POSTGRES_PASSWORD=example-misskey-pass
|
||||
POSTGRES_USER=example-misskey-user
|
||||
POSTGRES_DB=misskey
|
||||
|
@ -65,10 +65,10 @@ db:
|
||||
# ┌─────────────────────┐
|
||||
#───┘ Redis configuration └─────────────────────────────────────
|
||||
|
||||
#redis:
|
||||
# host: localhost
|
||||
# port: 6379
|
||||
# pass: example-pass
|
||||
redis:
|
||||
host: localhost
|
||||
port: 6379
|
||||
#pass: example-pass
|
||||
|
||||
# ┌─────────────────────────────┐
|
||||
#───┘ Elasticsearch configuration └─────────────────────────────
|
||||
@ -127,28 +127,12 @@ drive:
|
||||
# change it according to your preferences.
|
||||
|
||||
# Available methods:
|
||||
# aid1 ... Use AID for ID generation (with random 1 char)
|
||||
# aid2 ... Use AID for ID generation (with random 2 chars)
|
||||
# aid3 ... Use AID for ID generation (with random 3 chars)
|
||||
# aid4 ... Use AID for ID generation (with random 4 chars)
|
||||
# ulid ... Use ulid for ID generation
|
||||
# objectid ... This is left for backward compatibility.
|
||||
# aid ... Short, Millisecond accuracy
|
||||
# meid ... Similar to ObjectID, Millisecond accuracy
|
||||
# ulid ... Millisecond accuracy
|
||||
# objectid ... This is left for backward compatibility
|
||||
|
||||
# AID(n) is the original ID generation method.
|
||||
# The trailing n represents the number of random characters that
|
||||
# will be suffixed.
|
||||
# The larger n is the safer. If n is small, the possibility of
|
||||
# collision at the same time increases, but there are also
|
||||
# advantages such as shortening of the URL.
|
||||
|
||||
# ULID: Universally Unique Lexicographically Sortable Identifier.
|
||||
# for more details: https://github.com/ulid/spec
|
||||
# * Normally, AID should be sufficient.
|
||||
|
||||
# ObjectID is the method used in previous versions of Misskey.
|
||||
# * Choose this if you are migrating from a previous Misskey.
|
||||
|
||||
id: 'aid2'
|
||||
id: 'aid'
|
||||
|
||||
# ┌─────────────────────┐
|
||||
#───┘ Other configuration └─────────────────────────────────────
|
||||
|
4
.github/CODEOWNERS
vendored
4
.github/CODEOWNERS
vendored
@ -1,7 +1,7 @@
|
||||
# PATH OWNERS
|
||||
/.autogen/ @acid-chicken
|
||||
/.circleci/ @syuilo @acid-chicken
|
||||
/.config/ @syuilo @AyaMorisawa @mei23 @acid-chicken
|
||||
/.config/ @syuilo @AyaMorisawa @mei23 @acid-chicken @rinsuki
|
||||
# /.config/mongo_initdb_example.js @khws4v1
|
||||
/.github/ @syuilo @AyaMorisawa @acid-chicken
|
||||
/.vscode/ @acid-chicken
|
||||
@ -12,7 +12,7 @@
|
||||
# /docs/*.fr.md @BoFFire
|
||||
# /docs/docker.*.md @khws4v1
|
||||
/locales/ @syuilo
|
||||
/src/ @syuilo @AyaMorisawa @mei23 @acid-chicken
|
||||
/src/ @syuilo @AyaMorisawa @mei23 @acid-chicken @rinsuki
|
||||
# /src/crypto_key.cc @akihikodaki
|
||||
# /src/crypto_key.d.ts @akihikodaki
|
||||
/.dockerignore @syuilo # @khws4v1
|
||||
|
168
CHANGELOG.md
168
CHANGELOG.md
@ -5,11 +5,164 @@ If you encounter any problems with updating, please try the following:
|
||||
1. `npm run clean` or `npm run cleanall`
|
||||
2. Retry update (Don't forget `npm i`)
|
||||
|
||||
11.0.0
|
||||
----------
|
||||
* データベースがMongoDBからPostgreSQLに変更されました
|
||||
How to migrate to v11 from v10
|
||||
------------------------------
|
||||
1. v11をインストールしたい場所に syuilo/misskey をクローン
|
||||
2. config を設定する
|
||||
* PostgreSQL(`db`)の設定とは別に、v10からMongoDBの設定をコピペしてくる(例は下にあります)
|
||||
* `id`の設定を`meid`または`objectid`にする
|
||||
|
||||
``` yml
|
||||
db:
|
||||
host: localhost
|
||||
port: 5432
|
||||
db: misskey
|
||||
user: x
|
||||
pass: x
|
||||
|
||||
mongodb:
|
||||
user: x
|
||||
pass: x
|
||||
host: localhost
|
||||
port: 27017
|
||||
db: misskey
|
||||
```
|
||||
3. migration ブランチに切り替え
|
||||
4. `npm i`
|
||||
5. `npm run build`
|
||||
6. `npm run init`
|
||||
7. `npm run migrate`
|
||||
8. master ブランチに戻す
|
||||
9. enjoy
|
||||
|
||||
11.3.0 (2019/04/24)
|
||||
-------------------
|
||||
### Improvements
|
||||
* お知らせにMFMを使えるように
|
||||
* お知らせに画像を添付できるように
|
||||
|
||||
### Fixes
|
||||
* 投稿のタグ検索APIで大文字小文字が区別されていたのを修正
|
||||
* 公開範囲がホームの投稿がグローバルTLに流れる問題を修正
|
||||
* モバイルビューの投稿詳細にて acct が長いとアイコンが圧迫面接される問題を修正
|
||||
|
||||
11.2.2 (2019/04/22)
|
||||
-------------------
|
||||
### Fixes
|
||||
* 2段階認証を有効にするとログインできない問題を修正
|
||||
* リモートユーザーの修復処理が自動的に実行されない問題を修正
|
||||
* リモートユーザー情報が更新されない問題を修正
|
||||
|
||||
11.2.1 (2019/04/21)
|
||||
-------------------
|
||||
### Fixes
|
||||
* MEIDが25桁になっているのを修正
|
||||
* リモートユーザー情報が更新されない問題を修正
|
||||
|
||||
11.2.0 (2019/04/18)
|
||||
-------------------
|
||||
### Improvements
|
||||
* 検索で日付(日時)を入力するとタイムラインをその時点まで遡るように
|
||||
* APIコンソールでエンドポイントをサジェストするように
|
||||
* モバイル版でドライブのメニューを使いやすく
|
||||
* サイレンス時に確認を表示するように
|
||||
* ユーザーメニューでブロックなどの操作を行う時に確認するように
|
||||
|
||||
### Fixes
|
||||
* アプリケーション連携画面でパーミッションが表示されない問題を修正
|
||||
* アンケートウィジットでもMFMを使用するように
|
||||
* フォローしてないユーザーのホーム投稿がSTLに流れてくる問題を修正
|
||||
* モバイル版でウィジェットを設定できない問題を修正
|
||||
* スプラッシュがクリックに反応するように
|
||||
|
||||
11.1.6 (2019/04/18)
|
||||
-------------------
|
||||
### Fixes
|
||||
* 未認知ユーザーからActivityが飛んできた場合に処理できない問題を修正
|
||||
* その投稿を見たのにも関わらずメンションインジケーターが点灯し続ける問題を修正
|
||||
* ハッシュタグの判定を改善
|
||||
* サーバーのエラーハンドリングを改善
|
||||
|
||||
11.1.5 (2019/04/17)
|
||||
-------------------
|
||||
### Fixes
|
||||
* ユーザー名に含まれているカスタム絵文字が表示されないことがある問題を修正
|
||||
* 壁紙の設定ができない問題を修正
|
||||
* デザインの調整
|
||||
|
||||
11.1.4 (2019/04/17)
|
||||
-------------------
|
||||
### Fixes
|
||||
* タイムライン取得時に削除されたファイルを添付している投稿が含まれているとサーバーでエラーになる問題を修正
|
||||
* 管理画面のインスタンスメニューで変更前の設定が読み込まれないことがある問題を修正
|
||||
* 猫ではないのに猫のままで表示される問題を修正
|
||||
* admin/driveのアイコンがずれてる問題を修正
|
||||
* チャートで大きな数値を扱えない問題を修正
|
||||
* UIの修正
|
||||
|
||||
11.1.3 (2019/04/16)
|
||||
-------------------
|
||||
### Fixes
|
||||
* アプリからAPIにリクエストするときにランダムなユーザーがリクエストしたことになる問題を修正
|
||||
|
||||
11.1.2 (2019/04/15)
|
||||
-------------------
|
||||
### Fixes
|
||||
* 画像描画の依存関係を変更
|
||||
* リモートユーザーのファイルを削除するときに古い方からではなく新しい方から削除されるのを修正
|
||||
* リアクションしてないのにリアクションしたことになる問題を修正
|
||||
* APIドキュメントの修正
|
||||
|
||||
11.1.1 (2019/04/15)
|
||||
-------------------
|
||||
### Fixes
|
||||
* Metaタグの application-name を Misskey で固定するように修正
|
||||
* トークメッセージが既読にならない問題を修正
|
||||
* デフォルトでHTLを表示するように
|
||||
|
||||
11.1.0 (2019/04/15)
|
||||
-------------------
|
||||
### Improvements
|
||||
* アイコン未設定時にランダムな画像を表示するように
|
||||
* 管理者やモデレーターはレートリミット無効に
|
||||
|
||||
### Fixes
|
||||
* メンションの「あなた」インジケーターが表示されない問題を修正
|
||||
* ブロックAPIでエラーが発生する問題を修正
|
||||
* プッシュ通知の購読に失敗する問題を修正
|
||||
|
||||
11.0.3 (2019/04/15)
|
||||
-------------------
|
||||
### Fixes
|
||||
* ハッシュタグ検索APIが動作しない問題を修正
|
||||
* モデレーターなのにアカウントメニューに「管理」が表示されない問題を修正
|
||||
* プッシュ通知の購読に失敗する問題を修正
|
||||
* ユーザー取得APIでユーザーを指定しない場合エラーになる問題を修正
|
||||
|
||||
11.0.2 (2019/04/15)
|
||||
-------------------
|
||||
### Fixes
|
||||
* アプリが作成できない問題を修正
|
||||
* 「ハイライト」が表示されない問題を修正
|
||||
* リモートの投稿に添付されている画像が小さい問題を修正
|
||||
* モバイル版でリストの名前が表示されない問題を修正
|
||||
* APIドキュメントにパーミッション一覧を追加
|
||||
|
||||
11.0.1 (2019/04/15)
|
||||
-------------------
|
||||
### Improvements
|
||||
* 不要な依存関係を削除
|
||||
|
||||
11.0.0 daybreak (2019/04/14)
|
||||
----------------------------
|
||||
### Improvements
|
||||
* **データベースがMongoDBからPostgreSQLに変更されました**
|
||||
* **Redisが必須に**
|
||||
* アカウントを完全に削除できるように
|
||||
* 投稿フォームで添付ファイルの閲覧注意を確認/設定できるように
|
||||
* ミュート/ブロック時にそのユーザーの投稿のウォッチをすべて解除するように
|
||||
|
||||
### Fixes
|
||||
* フォロー申請数が実際より1すくなくなる問題を修正
|
||||
* リストからアカウント削除したユーザーを削除できない問題を修正
|
||||
* リストTLでフォローしていないユーザーの非公開投稿が流れる問題を修正
|
||||
@ -19,6 +172,15 @@ If you encounter any problems with updating, please try the following:
|
||||
### APIの破壊的変更
|
||||
* v10時点で deprecated だったパラメータなどを削除
|
||||
* ユーザーリストの title が name に
|
||||
* リバーシの対局の`settings`プロパティがなくなり、その中にあったプロパティがすべて上の階層に
|
||||
* 例えば`game.settings.map`は`game.map`になる
|
||||
|
||||
### 既知の問題
|
||||
* ユーザー認証無しでのアプリが作成できない
|
||||
* 依存ライブラリの問題と思わるため、対応が難しい
|
||||
|
||||
### Migration
|
||||
coming soon...
|
||||
|
||||
10.100.0
|
||||
----------
|
||||
|
@ -46,10 +46,40 @@ Convert な(na) to にゃ(nya)
|
||||
Revert Nyaize
|
||||
|
||||
## Code style
|
||||
### Use semicolon
|
||||
To avoid ASI Hazard
|
||||
### セミコロンを省略しない
|
||||
ASI Hazardを避けるためでもある
|
||||
|
||||
### 中括弧を省略しない
|
||||
Bad:
|
||||
``` ts
|
||||
if (foo)
|
||||
bar;
|
||||
else
|
||||
baz;
|
||||
```
|
||||
|
||||
Good:
|
||||
``` ts
|
||||
if (foo) {
|
||||
bar;
|
||||
} else {
|
||||
baz;
|
||||
}
|
||||
```
|
||||
|
||||
ただし**`if`が一行**の時だけは省略しても良い
|
||||
Good:
|
||||
``` ts
|
||||
if (foo) bar;
|
||||
```
|
||||
|
||||
### `export default`を使わない
|
||||
インテリセンスと相性が悪かったりするため
|
||||
|
||||
参考:
|
||||
* https://gfx.hatenablog.com/entry/2017/11/24/135343
|
||||
* https://basarat.gitbooks.io/typescript/docs/tips/defaultIsBad.html
|
||||
|
||||
### Don't use `export default`
|
||||
Bad:
|
||||
``` ts
|
||||
export default function(foo: string): string {
|
||||
|
@ -21,12 +21,11 @@ RUN apk add --no-cache \
|
||||
pkgconfig \
|
||||
python \
|
||||
zlib-dev
|
||||
RUN npm i -g yarn
|
||||
|
||||
COPY package.json ./
|
||||
RUN yarn install
|
||||
RUN npm i
|
||||
COPY . ./
|
||||
RUN yarn build
|
||||
RUN npm run build
|
||||
|
||||
FROM base AS runner
|
||||
|
||||
|
57
README.md
57
README.md
@ -59,7 +59,7 @@ Organize and store your files! Want to post a picture you have already uploaded?
|
||||
|
||||
---
|
||||
|
||||
...and more! Experience Misskey with your own eyes at [misskey.xyz](https://misskey.xyz) or join one of the [other instances](https://joinmisskey.github.io/) that are available.
|
||||
...and more! Experience Misskey with your own eyes at [misskey.io](https://misskey.io/) or join one of the [other instances](https://joinmisskey.github.io/) that are available.
|
||||
|
||||
Screen shots
|
||||
----------------------------------------------------------------
|
||||
@ -88,12 +88,14 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
|
||||
<td><img src="https://avatars0.githubusercontent.com/u/10798641?s=460&v=4" alt="AyaMorisawa" width="100"></td>
|
||||
<td><img src="https://avatars1.githubusercontent.com/u/30769358?s=460&v=4" alt="mei23" width="100"></td>
|
||||
<td><img src="https://avatars2.githubusercontent.com/u/20679825?s=460&v=4" alt="acid-chicken" width="100"></td>
|
||||
<td><img src="https://avatars2.githubusercontent.com/u/6533808?s=460&v=4" alt="rinsuki" width="100"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/syuilo">@syuilo</a></td>
|
||||
<td align="center"><a href="https://github.com/AyaMorisawa">@AyaMorisawa</a></td>
|
||||
<td align="center"><a href="https://github.com/mei23">@mei23</a></td>
|
||||
<td align="center"><a href="https://github.com/acid-chicken">@acid-chicken</a></td>
|
||||
<td align="center"><a href="https://github.com/rinsuki">@rinsuki</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@ -101,30 +103,31 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
|
||||
----------------------------------------------------------------
|
||||
<!-- PATREON_START -->
|
||||
<table><tr>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5888816/36da0f7c15954df0ab13f9abdf227f66/1?token-time=2145916800&token-hash=HGkZJ7s4bSaQVoOJ5q30mTWHTxDLiw1LuyaogKPLy24%3D" alt="Hiroshi Seki" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12190916/fb7fa7983c14425f890369535b1506a4/3?token-time=2145916800&token-hash=gr7DF8BuwflHvNoP24He4aa-5j8_KycrAQe3fHwQIUE%3D" alt="weep" width="100"></td>
|
||||
<td><img src="https://c8.patreon.com/2/200/12059069" alt="naga_rus" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/4?token-time=2145916800&token-hash=vZdDTTF-ahiKBjjgppS2ev4rkD8H7TTKkXXoxsucs6Y%3D" alt="Melilot" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5670915/ee175f0bfb6347ffa4ea101a8c097bff/1?token-time=2145916800&token-hash=ubqJzjhBQUo8Nw6h_8jMDlJ5ocIO46EflpiRkp2jIw4%3D" alt="osapon" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5888816/36da0f7c15954df0ab13f9abdf227f66/1.jpeg?token-time=2145916800&token-hash=at8QpJXJ8C0zINY_NmoMKv-MhXVoUK-YzTgaJPJzJYU%3D" alt="Hiroshi Seki" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12190916/fb7fa7983c14425f890369535b1506a4/3.png?token-time=2145916800&token-hash=oH_i7gJjNT7Ot6j9JiVwy7ZJIBqACVnzLqlz4YrDAZA%3D" alt="weepjp" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13099460/43cecdbaa63a40d79bf50a96b9910b9d/1.jpe?token-time=2145916800&token-hash=bqwLTk0Wo0hUJJ8J5y7ii05bLzz-_CDA7Bo0Mp4RFU0%3D" alt="ne_moni" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/4.jpe?token-time=2145916800&token-hash=zEyJqVM7u9d8Ri-65fJYSJcWF1jBH1nJ5a3taRzrTmw%3D" alt="Melilot" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5670915/ee175f0bfb6347ffa4ea101a8c097bff/1.jpg?token-time=2145916800&token-hash=mPLM9CA-riFHx-myr3bLZJuH2xBRHA9se5VbHhLIOuA%3D" alt="osapon" width="100"></td>
|
||||
<td><img src="https://c8.patreon.com/2/200/16869916" alt="見当かなみ" width="100"></td>
|
||||
</tr><tr>
|
||||
<td><a href="https://www.patreon.com/rane_hs">Hiroshi Seki</a></td>
|
||||
<td><a href="https://www.patreon.com/weepjp">weep</a></td>
|
||||
<td><a href="https://www.patreon.com/user?u=12059069">naga_rus</a></td>
|
||||
<td><a href="https://www.patreon.com/weepjp">weepjp</a></td>
|
||||
<td><a href="https://www.patreon.com/user?u=13099460">ne_moni</a></td>
|
||||
<td><a href="https://www.patreon.com/user?u=12913507">Melilot</a></td>
|
||||
<td><a href="https://www.patreon.com/osapon">osapon</a></td>
|
||||
<td><a href="https://www.patreon.com/user?u=16869916">見当かなみ</a></td>
|
||||
</tr></table>
|
||||
<table><tr>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1?token-time=2145916800&token-hash=1FlxS9MEgmNGH_RHUVHbO5hIXB5I1z0lvA33CTvYvjA%3D" alt="gutfuckllc" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/11357794/923ce94cd8c44ba788ee931907881839/1?token-time=2145916800&token-hash=0xgcpqvFDqRcV_YIEhcPNVH7gs9sLg_BBnTJXCkN4ao%3D" alt="mydarkstar" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1.png?token-time=2145916800&token-hash=FMV7cPKBD1TU2WTbl1jg6AcdKSvTb2BSFcDhgc-EO8w%3D" alt="gutfuckllc" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/11357794/923ce94cd8c44ba788ee931907881839/1.png?token-time=2145916800&token-hash=9nEQje_eMvUjq9a7L3uBqW-MQbS-rRMaMgd7UYVoFNM%3D" alt="mydarkstar" width="100"></td>
|
||||
<td><img src="https://c8.patreon.com/2/200/12718187" alt="Peter G." width="100"></td>
|
||||
<td><img src="https://c8.patreon.com/2/200/18833336" alt="itiradi" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13039004/509d0c412eb14ae08d6a812a3054f7d6/1?token-time=2145916800&token-hash=2PsbFNw0tnubZzgSXD01R6hIgncfiElG7H7HX2Y3dyo%3D" alt="nemu" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13039004/509d0c412eb14ae08d6a812a3054f7d6/1.jpe?token-time=2145916800&token-hash=UQRWf01TwHDV4Cls1K0YAOAjM29ssif7hLVq0ESQ0hs%3D" alt="nemu" width="100"></td>
|
||||
<td><img src="https://c8.patreon.com/2/200/17866454" alt="sikyosyounin" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/3?token-time=2145916800&token-hash=9JtETp0X8gI280Ne1E8bxn6j4Lw5o2k4mJkICx97V_k%3D" alt="YUKIMOCHI" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/3.png?token-time=2145916800&token-hash=KjfQL8nf3AIf6WqzLshBYAyX44piAqOAZiYXgZS_H6A%3D" alt="YUKIMOCHI" width="100"></td>
|
||||
<td><img src="https://c8.patreon.com/2/200/17463605" alt="Sampot" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17880724/311738c8a48f4a6b9443c2445a75adde/1?token-time=2145916800&token-hash=95p8VdGX45E8BitZR_eOcDlqCjumjzNLBPQJrJdeCpI%3D" alt="takimura" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/19356899/496b4681d33b4520bd7688e0fd19c04d/2.jpeg?token-time=2145916800&token-hash=_sTj3dUBOhn9qwiJ7F19Qd-yWWfUqJC_0jG1h0agEqQ%3D" alt="sheeta.s" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13737140/1adf7835017d479280d90fe8d30aade2/1.png?token-time=2145916800&token-hash=0pdle8h5pDZrww0BDOjdz6zO-HudeGTh36a3qi1biVU%3D" alt="Satsuki Yanagi" width="100"></td>
|
||||
</tr><tr>
|
||||
<td><a href="https://www.patreon.com/gutfuckllc">gutfuckllc</a></td>
|
||||
<td><a href="https://www.patreon.com/mydarkstar">mydarkstar</a></td>
|
||||
@ -134,19 +137,21 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
|
||||
<td><a href="https://www.patreon.com/user?u=17866454">sikyosyounin</a></td>
|
||||
<td><a href="https://www.patreon.com/yukimochi">YUKIMOCHI</a></td>
|
||||
<td><a href="https://www.patreon.com/user?u=17463605">Sampot</a></td>
|
||||
<td><a href="https://www.patreon.com/takimura">takimura</a></td>
|
||||
<td><a href="https://www.patreon.com/user?u=19356899">sheeta.s</a></td>
|
||||
<td><a href="https://www.patreon.com/user?u=13737140">Satsuki Yanagi</a></td>
|
||||
</tr></table>
|
||||
<table><tr>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17195955/be45e5e14c3e48b2bee0456c84e19df4/4?token-time=2145916800&token-hash=SbdZeN5SmsuT9stD6v0jN1z0hftg0FmRiCTxysU0Ihw%3D" alt="Damillora" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/16900731/935a10339daa4ede8e555903a0707060/1?token-time=2145916800&token-hash=3CrpqH-XtKs_NoIlSsTyVs8wCzP1WFCsG2xwps1IJq0%3D" alt="Atsuko Tominaga" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4389829/9f709180ac714651a70f74a82f3ffdb9/3?token-time=2145916800&token-hash=-iJszBqgYBhsM5qMdA1knf9wvprhEfESzKfR2oh7mIA%3D" alt="natalie" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1?token-time=2145916800&token-hash=5T8XcaAf9Zyzfg3QubR06s_kJZkArVEM2dwObrBVAU4%3D" alt="Hiratake" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/18072312/98e894d960314fa7bc236a72a39488fe/1?token-time=2145916800&token-hash=D6QK3fPyqiYKJfOzc-QqaSSairUrWdjld-ewp2waj6s%3D" alt="Hekovic" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=Ksk_2l3gjPDbnzMUOCSW1E-hdPJsNs2tSR4_RAakRK8%3D" alt="dansup" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/619786/32cf01444db24e578cd1982c197f6fc6/1?token-time=2145916800&token-hash=CXe9AqlZy9AsYfiWd3OBYVOzvODoN47Litz0Tu4BFpU%3D" alt="Gargron" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5731881/4b6038e6cda34c04b83a5fcce3806a93/1?token-time=2145916800&token-hash=xhR1n6NAAyEb-IUXLD6_dshkFa3mefU5ZZuk1L8qKTs%3D" alt="Nokotaro Takeda" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=uR-48MQ0A4j0irQSrCAQZJ-sJUSs_Fkihlg3-l59b7c%3D" alt="Takashi Shibuya" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17880724/311738c8a48f4a6b9443c2445a75adde/1.jpe?token-time=2145916800&token-hash=CPxGQhKIlEaa6WUcgbyHixyKEhakiw9RFdOhsIJBQ_o%3D" alt="takimura" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17195955/be45e5e14c3e48b2bee0456c84e19df4/4.jpe?token-time=2145916800&token-hash=UslrPVM-8TXOe8AapuNiaFYjcIJgPNcU-fKpGbfGJNI%3D" alt="Damillora" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/16900731/83884b38afc74d4cbe83c30a13b10edd/1.png?token-time=2145916800&token-hash=R5Tog8RWg0rguRoCIoir3lThokrdPvs8Utfikhc0nhY%3D" alt="Atsuko Tominaga" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4389829/9f709180ac714651a70f74a82f3ffdb9/3.png?token-time=2145916800&token-hash=FTm3WVom4dJ9NwWMU4OpCL_8Yc13WiwEbKrDPyTZTPs%3D" alt="natalie" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1.jpe?token-time=2145916800&token-hash=EWxXhVbZYH7KB4IDT3joc8TbIg8zPO40x1r5IDn3R7c%3D" alt="Hiratake" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/18072312/98e894d960314fa7bc236a72a39488fe/1.jpe?token-time=2145916800&token-hash=qA8j97lIZNc-74AuZ0p4F3ms6sKPeKjtNt2vEuwpsyo%3D" alt="Hekovic" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1.jpeg?token-time=2145916800&token-hash=L55UhJ0rcuNAH3w_ryeeGN4hC6taoOixyAhraEi0bzw%3D" alt="dansup" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/619786/32cf01444db24e578cd1982c197f6fc6/1.jpeg?token-time=2145916800&token-hash=d8jBQLMOHD87KtXs5C9fk1o58DMF73pQ-dYH3uZJPBE%3D" alt="Gargron" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5731881/4b6038e6cda34c04b83a5fcce3806a93/1.png?token-time=2145916800&token-hash=hBayGfOmQH3kRMdNnDe4oCZD_9fsJWSt29xXR3KRMVk%3D" alt="Nokotaro Takeda" width="100"></td>
|
||||
</tr><tr>
|
||||
<td><a href="https://www.patreon.com/takimura">takimura</a></td>
|
||||
<td><a href="https://www.patreon.com/damillora">Damillora</a></td>
|
||||
<td><a href="https://www.patreon.com/user?u=16900731">Atsuko Tominaga</a></td>
|
||||
<td><a href="https://www.patreon.com/user?u=4389829">natalie</a></td>
|
||||
@ -155,10 +160,14 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
|
||||
<td><a href="https://www.patreon.com/dansup">dansup</a></td>
|
||||
<td><a href="https://www.patreon.com/mastodon">Gargron</a></td>
|
||||
<td><a href="https://www.patreon.com/takenoko">Nokotaro Takeda</a></td>
|
||||
</tr></table>
|
||||
<table><tr>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1.jpeg?token-time=2145916800&token-hash=vGe7wXGqmA8Q7m-kDNb6fyGdwk-Dxk4F-ut8ZZu51RM%3D" alt="Takashi Shibuya" width="100"></td>
|
||||
</tr><tr>
|
||||
<td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
|
||||
</tr></table>
|
||||
|
||||
**Last updated:** Sun, 07 Apr 2019 19:21:08 UTC
|
||||
**Last updated:** Wed, 24 Apr 2019 05:56:07 UTC
|
||||
<!-- PATREON_END -->
|
||||
|
||||
:four_leaf_clover: Copyright
|
||||
|
@ -1,9 +0,0 @@
|
||||
{
|
||||
'targets': [
|
||||
{
|
||||
'target_name': 'crypto_key',
|
||||
'sources': ['src/crypto_key.cc'],
|
||||
'include_dirs': ['<!(node -e "require(\'nan\')")']
|
||||
}
|
||||
]
|
||||
}
|
@ -6,7 +6,7 @@ services:
|
||||
restart: always
|
||||
links:
|
||||
- db
|
||||
# - redis
|
||||
- redis
|
||||
# - es
|
||||
ports:
|
||||
- "127.0.0.1:3000:3000"
|
||||
@ -14,13 +14,13 @@ services:
|
||||
- internal_network
|
||||
- external_network
|
||||
|
||||
# redis:
|
||||
# restart: always
|
||||
# image: redis:4.0-alpine
|
||||
# networks:
|
||||
# - internal_network
|
||||
# volumes:
|
||||
# - ./redis:/data
|
||||
redis:
|
||||
restart: always
|
||||
image: redis:4.0-alpine
|
||||
networks:
|
||||
- internal_network
|
||||
volumes:
|
||||
- ./redis:/data
|
||||
|
||||
db:
|
||||
restart: always
|
||||
|
@ -9,9 +9,17 @@ This guide describes how to install and setup Misskey with Docker.
|
||||
|
||||
*1.* Download Misskey
|
||||
----------------------------------------------------------------
|
||||
1. `git clone -b master git://github.com/syuilo/misskey.git` Clone Misskey repository's master branch.
|
||||
2. `cd misskey` Move to misskey directory.
|
||||
3. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest) tag.
|
||||
1. Clone Misskey repository's master branch.
|
||||
|
||||
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||
|
||||
2. Move to misskey directory.
|
||||
|
||||
`cd misskey`
|
||||
|
||||
3. Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest) tag.
|
||||
|
||||
`git checkout master`
|
||||
|
||||
*2.* Configure Misskey
|
||||
----------------------------------------------------------------
|
||||
@ -57,7 +65,13 @@ Build misskey with the following:
|
||||
|
||||
`docker-compose build`
|
||||
|
||||
*5.* That is it.
|
||||
*5.* Init DB
|
||||
----------------------------------------------------------------
|
||||
``` shell
|
||||
docker-compose run --rm web npm run init
|
||||
```
|
||||
|
||||
*6.* That is it.
|
||||
----------------------------------------------------------------
|
||||
Well done! Now you have an environment to run Misskey.
|
||||
|
||||
@ -65,9 +79,9 @@ Well done! Now you have an environment to run Misskey.
|
||||
Just `docker-compose up -d`. GLHF!
|
||||
|
||||
### How to update your Misskey server to the latest version
|
||||
1. `git fetch`
|
||||
2. `git stash`
|
||||
3. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)`
|
||||
1. `git stash`
|
||||
2. `git checkout master`
|
||||
3. `git pull`
|
||||
4. `git stash pop`
|
||||
5. `docker-compose build`
|
||||
6. Check [ChangeLog](../CHANGELOG.md) for migration information
|
||||
|
@ -10,9 +10,17 @@ Ce guide explique comment installer et configurer Misskey avec Docker.
|
||||
|
||||
*1.* Télécharger Misskey
|
||||
----------------------------------------------------------------
|
||||
1. `git clone -b master git://github.com/syuilo/misskey.git` Clone le dépôt de Misskey sur la branche master.
|
||||
2. `cd misskey` Naviguez dans le dossier du dépôt.
|
||||
3. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` Checkout sur le tag de la [dernière version](https://github.com/syuilo/misskey/releases/latest).
|
||||
1. Clone le dépôt de Misskey sur la branche master.
|
||||
|
||||
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||
|
||||
2. Naviguez dans le dossier du dépôt.
|
||||
|
||||
`cd misskey`
|
||||
|
||||
3. Checkout sur le tag de la [dernière version](https://github.com/syuilo/misskey/releases/latest).
|
||||
|
||||
`git checkout master`
|
||||
|
||||
*2.* Configuration de Misskey
|
||||
----------------------------------------------------------------
|
||||
@ -38,9 +46,9 @@ Parfait, Vous avez un environnement prêt pour démarrer Misskey.
|
||||
Utilisez la commande `docker-compose up -d`. GLHF!
|
||||
|
||||
### How to update your Misskey server to the latest version
|
||||
1. `git fetch`
|
||||
2. `git stash`
|
||||
3. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)`
|
||||
1. `git stash`
|
||||
2. `git checkout master`
|
||||
3. `git pull`
|
||||
4. `git stash pop`
|
||||
5. `docker-compose build`
|
||||
6. Consultez le [ChangeLog](../CHANGELOG.md) pour avoir les éventuelles informations de migration
|
||||
@ -52,14 +60,28 @@ Utilisez la commande `docker-compose up -d`. GLHF!
|
||||
### Configuration d'ElasticSearch (pour la fonction de recherche)
|
||||
*1.* Préparation de l'environnement
|
||||
----------------------------------------------------------------
|
||||
1. `mkdir elasticsearch && chown 1000:1000 elasticsearch` Permet de créer le dossier d'accueil de la base ElasticSearch aves les bons droits
|
||||
2. `sysctl -w vm.max_map_count=262144` Augmente la valeur max du paramètre map_count du système (valeur minimum pour pouvoir lancer ES)
|
||||
1. Permet de créer le dossier d'accueil de la base ElasticSearch aves les bons droits
|
||||
|
||||
`mkdir elasticsearch && chown 1000:1000 elasticsearch`
|
||||
|
||||
2. Augmente la valeur max du paramètre map_count du système (valeur minimum pour pouvoir lancer ES)
|
||||
|
||||
`sysctl -w vm.max_map_count=262144`
|
||||
|
||||
*2.* Après lancement du docker-compose, initialisation de la base ElasticSearch
|
||||
----------------------------------------------------------------
|
||||
1. `docker-compose -it web /bin/sh` Connexion dans le conteneur web
|
||||
2. `apk add curl` Ajout du paquet curl
|
||||
3. `curl -X PUT "es:9200/misskey" -H 'Content-Type: application/json' -d'{ "settings" : { "index" : { } }}'` Création de la base ES
|
||||
1. Connexion dans le conteneur web
|
||||
|
||||
`docker-compose -it web /bin/sh`
|
||||
|
||||
2. Ajout du paquet curl
|
||||
|
||||
`apk add curl`
|
||||
|
||||
3. Création de la base ES
|
||||
|
||||
`curl -X PUT "es:9200/misskey" -H 'Content-Type: application/json' -d'{ "settings" : { "index" : { } }}'`
|
||||
|
||||
4. `exit`
|
||||
|
||||
----------------------------------------------------------------
|
||||
|
@ -9,9 +9,17 @@ Dockerを使ったMisskey構築方法
|
||||
|
||||
*1.* Misskeyのダウンロード
|
||||
----------------------------------------------------------------
|
||||
1. `git clone -b master git://github.com/syuilo/misskey.git` masterブランチからMisskeyレポジトリをクローン
|
||||
2. `cd misskey` misskeyディレクトリに移動
|
||||
3. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
|
||||
1. masterブランチからMisskeyレポジトリをクローン
|
||||
|
||||
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||
|
||||
2. misskeyディレクトリに移動
|
||||
|
||||
`cd misskey`
|
||||
|
||||
3. [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
|
||||
|
||||
`git checkout master`
|
||||
|
||||
*2.* 設定ファイルの作成と編集
|
||||
----------------------------------------------------------------
|
||||
@ -57,7 +65,13 @@ cp docker_example.env docker.env
|
||||
|
||||
`docker-compose build`
|
||||
|
||||
*5.* 以上です!
|
||||
*5.* データベースを初期化
|
||||
----------------------------------------------------------------
|
||||
``` shell
|
||||
docker-compose run --rm web npm run init
|
||||
```
|
||||
|
||||
*6.* 以上です!
|
||||
----------------------------------------------------------------
|
||||
お疲れ様でした。これでMisskeyを動かす準備は整いました。
|
||||
|
||||
@ -65,9 +79,9 @@ cp docker_example.env docker.env
|
||||
`docker-compose up -d`するだけです。GLHF!
|
||||
|
||||
### Misskeyを最新バージョンにアップデートする方法:
|
||||
1. `git fetch`
|
||||
2. `git stash`
|
||||
3. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)`
|
||||
1. `git stash`
|
||||
2. `git checkout master`
|
||||
3. `git pull`
|
||||
4. `git stash pop`
|
||||
5. `docker-compose build`
|
||||
6. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する
|
||||
|
@ -29,7 +29,7 @@ server {
|
||||
listen [::]:443 http2;
|
||||
server_name example.tld;
|
||||
ssl on;
|
||||
ssl_session_cache shared:ssl_session_cache:10m;
|
||||
ssl_session_cache shared:ssl_session_cache:10m;
|
||||
|
||||
# To use Let's Encrypt certificate
|
||||
ssl_certificate /etc/letsencrypt/live/example.tld/fullchain.pem;
|
||||
|
@ -24,31 +24,43 @@ Please install and setup these softwares:
|
||||
#### Dependencies :package:
|
||||
* **[Node.js](https://nodejs.org/en/)** >= 11.7.0
|
||||
* **[PostgreSQL](https://www.postgresql.org/)** >= 10
|
||||
* **[Redis](https://redis.io/)**
|
||||
|
||||
##### Optional
|
||||
* [Redis](https://redis.io/)
|
||||
* Redis is optional, but we strongly recommended to install it
|
||||
* [Elasticsearch](https://www.elastic.co/) - required to enable the search feature
|
||||
* [FFmpeg](https://www.ffmpeg.org/)
|
||||
|
||||
*3.* Setup PostgreSQL
|
||||
*3.* Install Misskey
|
||||
----------------------------------------------------------------
|
||||
:)
|
||||
1. Connect to misskey user.
|
||||
|
||||
*4.* Install Misskey
|
||||
----------------------------------------------------------------
|
||||
1. `su - misskey` Connect to misskey user.
|
||||
2. `git clone -b master git://github.com/syuilo/misskey.git` Clone the misskey repo from master branch.
|
||||
3. `cd misskey` Navigate to misskey directory
|
||||
4. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest)
|
||||
5. `npm install` Install misskey dependencies.
|
||||
`su - misskey`
|
||||
|
||||
*5.* Configure Misskey
|
||||
2. Clone the misskey repo from master branch.
|
||||
|
||||
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||
|
||||
3. Navigate to misskey directory
|
||||
|
||||
`cd misskey`
|
||||
|
||||
4. Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest)
|
||||
|
||||
`git checkout master`
|
||||
|
||||
5. Install misskey dependencies.
|
||||
|
||||
`npm install`
|
||||
|
||||
*4.* Configure Misskey
|
||||
----------------------------------------------------------------
|
||||
1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`.
|
||||
1. Copy the `.config/example.yml` and rename it to `default.yml`.
|
||||
|
||||
`cp .config/example.yml .config/default.yml`
|
||||
|
||||
2. Edit `default.yml`
|
||||
|
||||
*6.* Build Misskey
|
||||
*5.* Build Misskey
|
||||
----------------------------------------------------------------
|
||||
|
||||
Build misskey with the following:
|
||||
@ -64,13 +76,13 @@ If you're still encountering errors about some modules, use node-gyp:
|
||||
3. `node-gyp build`
|
||||
4. `NODE_ENV=production npm run build`
|
||||
|
||||
*7.* Init DB
|
||||
*6.* Init DB
|
||||
----------------------------------------------------------------
|
||||
``` shell
|
||||
npm run init
|
||||
```
|
||||
|
||||
*8.* That is it.
|
||||
*7.* That is it.
|
||||
----------------------------------------------------------------
|
||||
Well done! Now, you have an environment that run to Misskey.
|
||||
|
||||
@ -79,37 +91,45 @@ Just `NODE_ENV=production npm start`. GLHF!
|
||||
|
||||
### Launch with systemd
|
||||
|
||||
1. Create a systemd service here: `/etc/systemd/system/misskey.service`
|
||||
1. Create a systemd service here
|
||||
|
||||
`/etc/systemd/system/misskey.service`
|
||||
|
||||
2. Edit it, and paste this and save:
|
||||
|
||||
```
|
||||
[Unit]
|
||||
Description=Misskey daemon
|
||||
```
|
||||
[Unit]
|
||||
Description=Misskey daemon
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=misskey
|
||||
ExecStart=/usr/bin/npm start
|
||||
WorkingDirectory=/home/misskey/misskey
|
||||
Environment="NODE_ENV=production"
|
||||
TimeoutSec=60
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
SyslogIdentifier=misskey
|
||||
Restart=always
|
||||
[Service]
|
||||
Type=simple
|
||||
User=misskey
|
||||
ExecStart=/usr/bin/npm start
|
||||
WorkingDirectory=/home/misskey/misskey
|
||||
Environment="NODE_ENV=production"
|
||||
TimeoutSec=60
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
SyslogIdentifier=misskey
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
3. `systemctl daemon-reload ; systemctl enable misskey` Reload systemd and enable the misskey service.
|
||||
4. `systemctl start misskey` Start the misskey service.
|
||||
3. Reload systemd and enable the misskey service.
|
||||
|
||||
`systemctl daemon-reload ; systemctl enable misskey`
|
||||
|
||||
4. Start the misskey service.
|
||||
|
||||
`systemctl start misskey`
|
||||
|
||||
You can check if the service is running with `systemctl status misskey`.
|
||||
|
||||
### How to update your Misskey server to the latest version
|
||||
1. `git fetch`
|
||||
2. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)`
|
||||
1. `git checkout master`
|
||||
2. `git pull`
|
||||
3. `npm install`
|
||||
4. `NODE_ENV=production npm run build`
|
||||
5. Check [ChangeLog](../CHANGELOG.md) for migration information
|
||||
|
@ -24,31 +24,43 @@ Installez les paquets suivants :
|
||||
#### Dépendences :package:
|
||||
* **[Node.js](https://nodejs.org/en/)** >= 11.7.0
|
||||
* **[PostgreSQL](https://www.postgresql.org/)** >= 10
|
||||
* **[Redis](https://redis.io/)**
|
||||
|
||||
##### Optionnels
|
||||
* [Redis](https://redis.io/)
|
||||
* Redis est optionnel mais nous vous recommandons vivement de l'installer
|
||||
* [Elasticsearch](https://www.elastic.co/) - requis pour pouvoir activer la fonctionnalité de recherche
|
||||
* [FFmpeg](https://www.ffmpeg.org/)
|
||||
|
||||
*3.* Paramètrage de PostgreSQL
|
||||
*3.* Installation de Misskey
|
||||
----------------------------------------------------------------
|
||||
:)
|
||||
1. Basculez vers l'utilisateur misskey.
|
||||
|
||||
*4.* Installation de Misskey
|
||||
----------------------------------------------------------------
|
||||
1. `su - misskey` Basculez vers l'utilisateur misskey.
|
||||
2. `git clone -b master git://github.com/syuilo/misskey.git` Clonez la branche master du dépôt misskey.
|
||||
3. `cd misskey` Accédez au dossier misskey.
|
||||
4. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` Checkout sur le tag de la [version la plus récente](https://github.com/syuilo/misskey/releases/latest)
|
||||
5. `npm install` Installez les dépendances de misskey.
|
||||
`su - misskey`
|
||||
|
||||
*5.* Création du fichier de configuration
|
||||
2. Clonez la branche master du dépôt misskey.
|
||||
|
||||
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||
|
||||
3. Accédez au dossier misskey.
|
||||
|
||||
`cd misskey`
|
||||
|
||||
4. Checkout sur le tag de la [version la plus récente](https://github.com/syuilo/misskey/releases/latest)
|
||||
|
||||
`git checkout master`
|
||||
|
||||
5. Installez les dépendances de misskey.
|
||||
|
||||
`npm install`
|
||||
|
||||
*4.* Création du fichier de configuration
|
||||
----------------------------------------------------------------
|
||||
1. `cp .config/example.yml .config/default.yml` Copiez le fichier `.config/example.yml` et renommez-le`default.yml`.
|
||||
1. Copiez le fichier `.config/example.yml` et renommez-le`default.yml`.
|
||||
|
||||
`cp .config/example.yml .config/default.yml`
|
||||
|
||||
2. Editez le fichier `default.yml`
|
||||
|
||||
*6.* Construction de Misskey
|
||||
*5.* Construction de Misskey
|
||||
----------------------------------------------------------------
|
||||
|
||||
Construisez Misskey comme ceci :
|
||||
@ -64,7 +76,7 @@ Si vous rencontrez des erreurs concernant certains modules, utilisez node-gyp:
|
||||
3. `node-gyp build`
|
||||
4. `NODE_ENV=production npm run build`
|
||||
|
||||
*7.* C'est tout.
|
||||
*6.* C'est tout.
|
||||
----------------------------------------------------------------
|
||||
Excellent ! Maintenant, vous avez un environnement prêt pour lancer Misskey
|
||||
|
||||
@ -73,37 +85,45 @@ Lancez tout simplement `NODE_ENV=production npm start`. Bonne chance et amusez-v
|
||||
|
||||
### Démarrage avec systemd
|
||||
|
||||
1. Créez un service systemd sur : `/etc/systemd/system/misskey.service`
|
||||
1. Créez un service systemd sur
|
||||
|
||||
`/etc/systemd/system/misskey.service`
|
||||
|
||||
2. Editez-le puis copiez et coller ceci dans le fichier :
|
||||
|
||||
```
|
||||
[Unit]
|
||||
Description=Misskey daemon
|
||||
```
|
||||
[Unit]
|
||||
Description=Misskey daemon
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=misskey
|
||||
ExecStart=/usr/bin/npm start
|
||||
WorkingDirectory=/home/misskey/misskey
|
||||
Environment="NODE_ENV=production"
|
||||
TimeoutSec=60
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
SyslogIdentifier=misskey
|
||||
Restart=always
|
||||
[Service]
|
||||
Type=simple
|
||||
User=misskey
|
||||
ExecStart=/usr/bin/npm start
|
||||
WorkingDirectory=/home/misskey/misskey
|
||||
Environment="NODE_ENV=production"
|
||||
TimeoutSec=60
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
SyslogIdentifier=misskey
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
3. `systemctl daemon-reload ; systemctl enable misskey` Redémarre systemd et active le service misskey.
|
||||
4. `systemctl start misskey` Démarre le service misskey.
|
||||
3. Redémarre systemd et active le service misskey.
|
||||
|
||||
`systemctl daemon-reload ; systemctl enable misskey`
|
||||
|
||||
4. Démarre le service misskey.
|
||||
|
||||
`systemctl start misskey`
|
||||
|
||||
Vous pouvez vérifier si le service a démarré en utilisant la commande `systemctl status misskey`.
|
||||
|
||||
### Méthode de mise à jour vers la plus récente version de Misskey
|
||||
1. `git fetch`
|
||||
2. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)`
|
||||
1. `git checkout master`
|
||||
2. `git pull`
|
||||
3. `npm install`
|
||||
4. `NODE_ENV=production npm run build`
|
||||
5. Consultez [ChangeLog](../CHANGELOG.md) pour les information de migration.
|
||||
|
105
docs/setup.ja.md
105
docs/setup.ja.md
@ -24,38 +24,44 @@ adduser --disabled-password --disabled-login misskey
|
||||
#### 依存関係 :package:
|
||||
* **[Node.js](https://nodejs.org/en/)** (11.7.0以上)
|
||||
* **[PostgreSQL](https://www.postgresql.org/)** (10以上)
|
||||
* **[Redis](https://redis.io/)**
|
||||
|
||||
##### オプション
|
||||
* [Redis](https://redis.io/)
|
||||
* Redisはオプションですが、インストールすることを強く推奨します。
|
||||
* インストールしなくていいのは、あなたのインスタンスが自分専用のときだけとお考えください。
|
||||
* 具体的には、Redisをインストールしないと、次の事が出来なくなります:
|
||||
* Misskeyプロセスを複数起動しての負荷分散
|
||||
* レートリミット
|
||||
* ジョブキュー
|
||||
* Twitter連携
|
||||
* [Elasticsearch](https://www.elastic.co/)
|
||||
* 検索機能を有効にするためにはインストールが必要です。
|
||||
* [FFmpeg](https://www.ffmpeg.org/)
|
||||
|
||||
*3.* PostgreSQLの設定
|
||||
*3.* Misskeyのインストール
|
||||
----------------------------------------------------------------
|
||||
:)
|
||||
1. misskeyユーザーを使用
|
||||
|
||||
*4.* Misskeyのインストール
|
||||
----------------------------------------------------------------
|
||||
1. `su - misskey` misskeyユーザーを使用
|
||||
2. `git clone -b master git://github.com/syuilo/misskey.git` masterブランチからMisskeyレポジトリをクローン
|
||||
3. `cd misskey` misskeyディレクトリに移動
|
||||
4. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
|
||||
5. `npm install` Misskeyの依存パッケージをインストール
|
||||
`su - misskey`
|
||||
|
||||
*5.* 設定ファイルを作成する
|
||||
2. masterブランチからMisskeyレポジトリをクローン
|
||||
|
||||
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||
|
||||
3. misskeyディレクトリに移動
|
||||
|
||||
`cd misskey`
|
||||
|
||||
4. [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
|
||||
|
||||
`git checkout master`
|
||||
|
||||
5. Misskeyの依存パッケージをインストール
|
||||
|
||||
`npm install`
|
||||
|
||||
*4.* 設定ファイルを作成する
|
||||
----------------------------------------------------------------
|
||||
1. `cp .config/example.yml .config/default.yml` `.config/example.yml`をコピーし名前を`default.yml`にする。
|
||||
1. `.config/example.yml`をコピーし名前を`default.yml`にする。
|
||||
|
||||
`cp .config/example.yml .config/default.yml`
|
||||
|
||||
2. `default.yml` を編集する。
|
||||
|
||||
*6.* Misskeyのビルド
|
||||
*5.* Misskeyのビルド
|
||||
----------------------------------------------------------------
|
||||
|
||||
次のコマンドでMisskeyをビルドしてください:
|
||||
@ -70,13 +76,13 @@ Debianをお使いであれば、`build-essential`パッケージをインスト
|
||||
3. `node-gyp build`
|
||||
4. `NODE_ENV=production npm run build`
|
||||
|
||||
*7.* データベースを初期化
|
||||
*6.* データベースを初期化
|
||||
----------------------------------------------------------------
|
||||
``` shell
|
||||
npm run init
|
||||
```
|
||||
|
||||
*8.* 以上です!
|
||||
*7.* 以上です!
|
||||
----------------------------------------------------------------
|
||||
お疲れ様でした。これでMisskeyを動かす準備は整いました。
|
||||
|
||||
@ -84,38 +90,47 @@ npm run init
|
||||
`NODE_ENV=production npm start`するだけです。GLHF!
|
||||
|
||||
### systemdを用いた起動
|
||||
1. systemdサービスのファイルを作成: `/etc/systemd/system/misskey.service`
|
||||
1. systemdサービスのファイルを作成
|
||||
|
||||
`/etc/systemd/system/misskey.service`
|
||||
|
||||
2. エディタで開き、以下のコードを貼り付けて保存:
|
||||
|
||||
```
|
||||
[Unit]
|
||||
Description=Misskey daemon
|
||||
```
|
||||
[Unit]
|
||||
Description=Misskey daemon
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=misskey
|
||||
ExecStart=/usr/bin/npm start
|
||||
WorkingDirectory=/home/misskey/misskey
|
||||
Environment="NODE_ENV=production"
|
||||
TimeoutSec=60
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
SyslogIdentifier=misskey
|
||||
Restart=always
|
||||
[Service]
|
||||
Type=simple
|
||||
User=misskey
|
||||
ExecStart=/usr/bin/npm start
|
||||
WorkingDirectory=/home/misskey/misskey
|
||||
Environment="NODE_ENV=production"
|
||||
TimeoutSec=60
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
SyslogIdentifier=misskey
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
CentOSで1024以下のポートを使用してMisskeyを使用する場合は`ExecStart=/usr/bin/sudo /usr/bin/npm start`に変更する必要があります。
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
3. `systemctl daemon-reload ; systemctl enable misskey` systemdを再読み込みしmisskeyサービスを有効化
|
||||
4. `systemctl start misskey` misskeyサービスの起動
|
||||
CentOSで1024以下のポートを使用してMisskeyを使用する場合は`ExecStart=/usr/bin/sudo /usr/bin/npm start`に変更する必要があります。
|
||||
|
||||
3. systemdを再読み込みしmisskeyサービスを有効化
|
||||
|
||||
`systemctl daemon-reload ; systemctl enable misskey`
|
||||
|
||||
4. misskeyサービスの起動
|
||||
|
||||
`systemctl start misskey`
|
||||
|
||||
`systemctl status misskey`と入力すると、サービスの状態を調べることができます。
|
||||
|
||||
### Misskeyを最新バージョンにアップデートする方法:
|
||||
1. `git fetch`
|
||||
2. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)`
|
||||
1. `git checkout master`
|
||||
2. `git pull`
|
||||
3. `npm install`
|
||||
4. `NODE_ENV=production npm run build`
|
||||
5. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する
|
||||
|
@ -49,7 +49,6 @@ gulp.task('build:copy:views', () =>
|
||||
|
||||
gulp.task('build:copy', gulp.parallel('build:copy:views', () =>
|
||||
gulp.src([
|
||||
'./build/Release/crypto_key.node',
|
||||
'./src/const.json',
|
||||
'./src/server/web/views/**/*',
|
||||
'./src/**/assets/**/*',
|
||||
|
@ -20,7 +20,7 @@ common:
|
||||
outro: "Podívejte se na unikátní vlastnosti Misskey vlastníma očima! Pokud si myslíte, že tato instance není pro vás, zkuste jiné instance, neboť Misskey je decentralizovaná sociální síť, takže můžete snadno najít své přátele. Hodně štěstí a zábavy!"
|
||||
adblock:
|
||||
detected: "Prosím vypněte svůj blokovač reklam"
|
||||
warning: "<strong>Misskey nepoužívá reklamy</strong>, některé vlastnosti však mohou být nedostupné nebo mohou způsobovat chyby, pokud máte povolený blokovač reklam."
|
||||
warning: "Některé vlastnosti mohou být nedostupné nebo mohou způsobovat chyby, pokud máte povolený blokovač reklam. <strong>Misskey nepoužívá reklamy</strong>."
|
||||
application-authorization: "Autorizované aplikace"
|
||||
close: "Zavřít"
|
||||
do-not-copy-paste: "Prosím nezadávejte ani nevkládejte sem kód. Váš účet může být kompromitován."
|
||||
@ -69,6 +69,18 @@ common:
|
||||
following: "Sledovaní"
|
||||
followers: "Sledující"
|
||||
favorites: "Oblíbené"
|
||||
permissions:
|
||||
"read:account": "Zobrazit informace o účtu"
|
||||
"read:drive": "Prohlížet Disk"
|
||||
"write:drive": "Pracovat s Diskem"
|
||||
"read:favorites": "Prohlížet oblíbené"
|
||||
"read:messaging": "Prohlížet konverzaci"
|
||||
"write:messaging": "Pracovat s konverzaci"
|
||||
"read:mutes": "Prohlížet ztlumené"
|
||||
"read:notifications": "Prohlížet oznámení"
|
||||
"write:notifications": "Pracovat s oznámeními"
|
||||
"read:reactions": "Prohlížet reakce"
|
||||
"write:votes": "Hlasovat"
|
||||
empty-timeline-info:
|
||||
follow-users-to-make-your-timeline: "Poznámky sledujících se zobrazí ve vaší časové ose"
|
||||
explore: "Najít uživatele"
|
||||
@ -227,6 +239,7 @@ common:
|
||||
cancel: "Zrušit"
|
||||
update-available-title: "Aktualizace k dispozici"
|
||||
update-available: "Je k dispozici nová verze Misskey ({newer},vaše verze je {current}). Pro aplikování nové verze znovunačtěte stránku."
|
||||
my-token-regenerated: "Váš token byl regenerován, proto budete odhlášen/a."
|
||||
verified-user: "Ověřené účty"
|
||||
hide-password: "Skrýt heslo"
|
||||
show-password: "Zobrazit heslo"
|
||||
@ -275,18 +288,13 @@ common:
|
||||
nav: "Navigace"
|
||||
tips: "Tipy"
|
||||
hashtags: "Hashtagy"
|
||||
queue: "Ve frontě"
|
||||
dev: "Nepodařilo se vytvořit aplikace. Prosím zkuste to znovu."
|
||||
ai-chan-kawaii: "Ai-chan kawaii!"
|
||||
you: "Vy"
|
||||
auth/views/form.vue:
|
||||
share-access: "Chcete dovolit aplikaci <i>{name}</i> přístup k vašemu účtu?"
|
||||
permission-ask: "Tato aplikace vyžaduje následující oprávnění:"
|
||||
account-read: "Zobrazit informace účtu"
|
||||
note-write: "Odeslat."
|
||||
following-write: "Sledovat a přestat sledovat"
|
||||
drive-read: "Přečíst váš Disk"
|
||||
notification-read: "Sledovat oznámení."
|
||||
notification-write: "Zpravovat notifikace."
|
||||
cancel: "Zrušit"
|
||||
accept: "Povolit přístup"
|
||||
auth/views/index.vue:
|
||||
@ -302,6 +310,7 @@ common/views/pages/explore.vue:
|
||||
popular-tags: "Populární tagy"
|
||||
federated: "Z fedivesmíru"
|
||||
explore: "Prozkoumat {host}"
|
||||
users-info: "Aktuálně je zde registrováno {users} uživatelů"
|
||||
common/views/components/url-preview.vue:
|
||||
enable-player: "Otevřít v přehrávači"
|
||||
disable-player: "Zavřít přehrávač"
|
||||
@ -354,19 +363,23 @@ common/views/components/connect-failed.troubleshooter.vue:
|
||||
no-network-desc: "Ujistěte se že jste připojeni k Internetu."
|
||||
no-internet: "Nejste připojeni k internetu"
|
||||
no-internet-desc: "Jste připojen k síti, ale zdá se že stále chybí připojení k Internetu. Prosím zkontrolujte Vaše připojení k Internetu."
|
||||
no-server: "Nelze se připojit k serveru Misskey"
|
||||
common/views/components/media-banner.vue:
|
||||
click-to-show: "Klikněte pro zobrazení"
|
||||
common/views/components/theme.vue:
|
||||
light-theme: "Šablona pro použití ve světlém vzhledu"
|
||||
dark-theme: "Šablona pro použití v tmavém vzhledu"
|
||||
light-theme: "Motiv pro použití ve světlém vzhledu"
|
||||
dark-theme: "Motiv pro použití v tmavém vzhledu"
|
||||
light-themes: "Světlý vzhled"
|
||||
dark-themes: "Tmavý vzhled"
|
||||
install-a-theme: "Nainstalovat šablonu"
|
||||
theme-code: "Kód šablony"
|
||||
install-a-theme: "Nainstalovat motiv"
|
||||
theme-code: "Kód motivu"
|
||||
install: "Nainstalovat"
|
||||
installed: "\"{}\" byl nainstalován"
|
||||
create-a-theme: "Vytvořit motiv"
|
||||
save-created-theme: "Uložit motiv"
|
||||
base-theme: "Základní vzhled"
|
||||
base-theme-light: "Světlý"
|
||||
base-theme-dark: "Tmavý"
|
||||
find-more-theme: "Najít další vzhledy"
|
||||
theme-name: "Jméno vzhledu"
|
||||
preview-created-theme: "Náhled"
|
||||
@ -435,6 +448,7 @@ common/views/components/user-menu.vue:
|
||||
unblock: "Odblokovat"
|
||||
push-to-list: "Přidat do seznamu"
|
||||
select-list: "Vyberte seznam"
|
||||
report-abuse: "Nahlásit spam"
|
||||
report-abuse-reported: "Problém byl nahlášen administrátorovi. Děkujeme za Vaší kooperaci."
|
||||
silence: "Ztlumit"
|
||||
suspend: "Zmrazit"
|
||||
@ -583,6 +597,8 @@ common/views/components/user-list-editor.vue:
|
||||
remove-user: "Odebrat z tohoto seznamu"
|
||||
delete-are-you-sure: "Smazat seznam \"$1\"?"
|
||||
deleted: "Smazáno"
|
||||
common/views/components/user-lists.vue:
|
||||
list-name: "Název seznamu"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "Načítám"
|
||||
next: "Další"
|
||||
@ -793,8 +809,6 @@ desktop/views/components/settings.tags.vue:
|
||||
title: "Tagy"
|
||||
add: "Přidat"
|
||||
save: "Uložit"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "Správce úloh"
|
||||
desktop/views/components/timeline.vue:
|
||||
home: "Domů"
|
||||
local: "Lokální"
|
||||
@ -824,8 +838,6 @@ desktop/views/components/received-follow-requests-window.vue:
|
||||
reject: "Odmítnout"
|
||||
desktop/views/components/user-lists-window.vue:
|
||||
title: "Seznamy uživatelů"
|
||||
create-list: "Vytvořit seznam"
|
||||
list-name: "Název seznamu"
|
||||
desktop/views/components/user-preview.vue:
|
||||
notes: "Příspěvky"
|
||||
desktop/views/components/users-list.vue:
|
||||
@ -839,7 +851,7 @@ admin/views/index.vue:
|
||||
emoji: "Emoji"
|
||||
moderators: "Moderátoři"
|
||||
users: "Uživatelé"
|
||||
federation: "Federovaná"
|
||||
federation: "Z fedivesmíru"
|
||||
announcements: "Oznámení"
|
||||
hashtags: "Hashtagy"
|
||||
queue: "Fronta úloh"
|
||||
@ -851,7 +863,7 @@ admin/views/dashboard.vue:
|
||||
drive: "Disk"
|
||||
instances: "Instance"
|
||||
this-instance: "Tato instance"
|
||||
federated: "Federovaná"
|
||||
federated: "Z fedivesmíru"
|
||||
admin/views/abuse.vue:
|
||||
details: "Popis"
|
||||
remove-report: "Odstranit"
|
||||
@ -1006,7 +1018,7 @@ admin/views/federation.vue:
|
||||
status: "Status"
|
||||
latest-request-received-at: "Poslední požadavek přijat"
|
||||
block: "Blokován"
|
||||
instances: "Federovaná"
|
||||
instances: "Z fedivesmíru"
|
||||
states:
|
||||
all: "Všechny"
|
||||
blocked: "Blokován"
|
||||
@ -1070,7 +1082,6 @@ mobile/views/components/drive.vue:
|
||||
used: "využito"
|
||||
file-count: "Soubor(ů)"
|
||||
folder-is-empty: "Tato složka je prázdná"
|
||||
deletion-alert: "Omlouváme se, ale mazání složek ještě nebylo implementováno."
|
||||
folder-name: "Název složky"
|
||||
url-prompt: "URL adresa souboru, který chcete nahrát"
|
||||
uploading: "Byl zahájen upload. Může chvilku trvat než bude dokončen."
|
||||
@ -1112,7 +1123,7 @@ mobile/views/components/post-form.vue:
|
||||
reply: "Odpovědět"
|
||||
renote: "Renotovat"
|
||||
reply-placeholder: "Odpovědět na tento příspěvěk"
|
||||
location-alert: "Vaše zařízení nepodporuje lokační službu"
|
||||
geolocation-alert: "Vaše zařízení nepodporuje lokační službu"
|
||||
error: "Chyba"
|
||||
username-prompt: "Zadejte uživatelské jméno"
|
||||
mobile/views/components/sub-note-content.vue:
|
||||
@ -1131,6 +1142,10 @@ mobile/views/components/ui.nav.vue:
|
||||
game: "Hry"
|
||||
admin: "Administrace"
|
||||
about: "O Misskey"
|
||||
mobile/views/pages/drive.vue:
|
||||
contextmenu:
|
||||
upload: "Nahrát soubor"
|
||||
create-folder: "Vytvořit složku"
|
||||
mobile/views/pages/user-lists.vue:
|
||||
title: "Seznamy"
|
||||
mobile/views/pages/signup.vue:
|
||||
@ -1183,11 +1198,3 @@ deck/deck.user-column.vue:
|
||||
activity: "Aktivita"
|
||||
dev/views/new-app.vue:
|
||||
app-name-desc: "Jméno vaší aplikace"
|
||||
app-desc: "Stručný popis nebo představení vaší aplikace."
|
||||
account-read: "Zobrazit informace účtu"
|
||||
note-write: "Odeslat."
|
||||
reaction-write: "Přidat nebo odebrat reakce."
|
||||
following-write: "Sledovat a přestat sledovat"
|
||||
drive-read: "Přečíst váš Disk"
|
||||
notification-read: "Sledovat oznámení."
|
||||
notification-write: "Zpravovat notifikace."
|
||||
|
@ -7,6 +7,7 @@ common:
|
||||
about: "Danke, dass Du Misskey gefunden hast. Misskey ist eine <b>dezentralisierte Microblogging-Plattform</b>, welche auf der ganzen Welt verteilt ist. Da es innerhalb es Fediversums existiert (ein Universum, in dem verschiedene Soziale Netzwerke organisiert sind), ist es unmittelbar mit anderen sozialen Netzwerken verbunden. Warum nimmst du dir nicht einmal eine Auszeit von dem Trubel der Stadt und tauchst in das neue Internet hinein?"
|
||||
intro:
|
||||
title: "Was ist Misskey?"
|
||||
about: "Misskey ist eine Quelloffene, <b>dezentralisierte microblogging Software</b>. Es bietet eine erweiterbare Benutzeroberfläche, verschiedenste Möglichkeiten auf Beiträge zu reagieren, kostenlosen Datenspeicher, und andere fortschrittliche Funktionen. Zusätzlich ist Misskey dazu in der Lage, sich mittels des Fediverse mit beliebig vielen anderen ActivityPub-kompatiblen Diensten zu verbinden. Wenn du zum Beispiel einen Betrag mit Misskey abschickst, wird dieser auch für Nutzer von Mastodon oder Pleroma sichtbar sein. So ähnlich wie eine Radioübertragung zwischen Planeten."
|
||||
features: "Funktionen"
|
||||
rich-contents: "Notizen"
|
||||
reaction: "Reaktionen"
|
||||
@ -19,6 +20,13 @@ common:
|
||||
load-more: "Mehr laden"
|
||||
enter-password: "Bitte Passwort eingeben"
|
||||
2fa: "Zwei-Faktor-Authentifizierung"
|
||||
customize-home: "Layout Anpassen"
|
||||
featured-notes: "Hervorgehobene Beiträge"
|
||||
dark-mode: "Dunkler Modus"
|
||||
signin: "Einloggen"
|
||||
signup: "Registrieren"
|
||||
signout: "Ausloggen"
|
||||
reload-to-apply-the-setting: "Die Seite muss zum Übernehmen dieser Einstellung aktualisiert werden. Soll die Seite jetzt neu geladen werden?"
|
||||
got-it: "Verstanden!"
|
||||
customization-tips:
|
||||
title: "Anpassung-Tipps"
|
||||
@ -26,6 +34,7 @@ common:
|
||||
notification:
|
||||
file-uploaded: "Datei hochgeladen!"
|
||||
message-from: "Nachricht von {}:"
|
||||
reversi-invited: "Zu einem Spiel eingeladen"
|
||||
reversi-invited-by: "Eingeladen von {}:"
|
||||
notified-by: "Benachrichtigt von {}:"
|
||||
reply-from: "Antwort von {}:"
|
||||
@ -46,7 +55,24 @@ common:
|
||||
drive: "Drive"
|
||||
messaging: "Unterhaltungen"
|
||||
home: "Home"
|
||||
favorites: "Diese Notiz favorisieren"
|
||||
deck: "Stapel"
|
||||
timeline: "Zeitleiste"
|
||||
explore: "Entdecken"
|
||||
following: "Folgt"
|
||||
followers: "Folgende"
|
||||
favorites: "Diesen Beitrag favorisieren"
|
||||
permissions:
|
||||
"read:account": "Accountinformationen anzeigen."
|
||||
"write:account": "Accountinformationen bearbeiten."
|
||||
"read:drive": "Dateien anzeigen"
|
||||
"write:drive": "Dateien bearbeiten"
|
||||
"read:favorites": "Favoriten anzeigen"
|
||||
"read:messaging": "Unterhaltung anzeigen"
|
||||
"write:messaging": "Unterhaltung bearbeiten"
|
||||
"write:votes": "Abstimmen"
|
||||
empty-timeline-info:
|
||||
follow-users-to-make-your-timeline: "Beiträge von Benutzern, denen du folgst, werden in der Zeitleiste angezeigt."
|
||||
explore: "Benutzer finden"
|
||||
weekday-short:
|
||||
sunday: "So"
|
||||
monday: "Mo"
|
||||
@ -77,11 +103,11 @@ common:
|
||||
note-visibility:
|
||||
public: "Öffentlich"
|
||||
home: "Startseite"
|
||||
home-desc: "Nur auf die Startseite posten"
|
||||
home-desc: "Auf die Startseite posten"
|
||||
followers: "Abonnenten"
|
||||
followers-desc: "Nur für diejenigen sichtbar, die dir folgen"
|
||||
specified: "Direkt"
|
||||
specified-desc: "Nur für bestimmte Benutzer posten"
|
||||
specified-desc: "Nur für bestimmte Benutzer sichtbar"
|
||||
local-public: "Öffentlich (nur lokal)"
|
||||
local-home: "Home (nur lokal)"
|
||||
local-followers: "Follower (nur lokal)"
|
||||
@ -91,11 +117,34 @@ common:
|
||||
c: "Was geht dir durch den Kopf?"
|
||||
d: "Willst du etwas sagen?"
|
||||
e: "Schreib hier etwas!"
|
||||
f: "Warte darauf, das du schreibst."
|
||||
f: "Warte darauf, das du schreibst..."
|
||||
settings: "Einstellungen"
|
||||
_settings:
|
||||
profile: "Dein Profil"
|
||||
notification: "Benachrichtigungen"
|
||||
apps: "Anwendungen"
|
||||
tags: "Hashtags"
|
||||
mute-and-block: "Stummschalten/Blocken"
|
||||
blocking: "Blocken"
|
||||
security: "Sicherheit"
|
||||
signin: "Login-Verlauf"
|
||||
password: "Passwort"
|
||||
other: "Mehr"
|
||||
appearance: "Designs"
|
||||
behavior: "Verhalten"
|
||||
fetch-on-scroll: "Unendliches laden beim scrollen"
|
||||
fetch-on-scroll-desc: "Wenn beim scrollen das Ende erreicht wird, lädt die Anwendung automatisch neue Inhalte nach."
|
||||
note-visibility: "Sichtbarkeit von Beiträgen"
|
||||
default-note-visibility: "Die Standardsichtbarkeit"
|
||||
remember-note-visibility: "Erinnerung an Sichtbarkeit von Beiträgen"
|
||||
web-search-engine: "Web-Suchmaschine"
|
||||
web-search-engine-desc: "Beispiel: https://www.google.de/search?q={{query}}"
|
||||
keep-cw: "Inhaltswarnung beibehalten"
|
||||
keep-cw-desc: "Wenn auf einen Beitrag geantwortet wird, wird die Inhaltswarnung des Originalbeitrags übernommen."
|
||||
i-like-sushi: "Ich bevorzuge Sushi anstelle von Pudding"
|
||||
show-reversi-board-labels: "Zeige Reihen- und Spaltenbeschreibungen in Reversi an"
|
||||
use-avatar-reversi-stones: "Avatar als Stein in Reversi anzeigen"
|
||||
disable-animated-mfm: "Animierten Text in Beiträgen deaktivieren"
|
||||
search: "Suche"
|
||||
delete: "Löschen"
|
||||
loading: "Laden"
|
||||
@ -103,7 +152,7 @@ common:
|
||||
update-available: "Eine neue Version von Misskey ist verfügbar ({newer}, aktuell ist {current}). Lade die Seite neu um die aktuelle Version zu laden"
|
||||
my-token-regenerated: "Dein Token wurde generiert. Du wirst jetzt abgemeldet."
|
||||
verified-user: "Verifizierter Benutzer"
|
||||
do-not-use-in-production: "Dies ist eine Entwicklungsversion. Nicht in einer Produktionsumgebung verwenden."
|
||||
do-not-use-in-production: "Dies ist eine Entwicklungsversion. Nicht in einer Produktivumgebung verwenden."
|
||||
error:
|
||||
retry: "Erneut versuchen"
|
||||
reversi:
|
||||
@ -117,7 +166,7 @@ common:
|
||||
analog-clock: "Analoge Uhr"
|
||||
profile: "Profil"
|
||||
calendar: "Kalender"
|
||||
timemachine: "Kalender (Zeitmaschiene)"
|
||||
timemachine: "Kalender (Zeitmaschine)"
|
||||
activity: "Aktivitäten"
|
||||
rss: "RSS Leser"
|
||||
memo: "Notizen"
|
||||
@ -128,7 +177,7 @@ common:
|
||||
notifications: "Benachrichtigungen"
|
||||
users: "Empfohlene Benutzer"
|
||||
polls: "Umfrage"
|
||||
post-form: "Beitragsform"
|
||||
post-form: "\"Neuer Beitrag\"-Formular"
|
||||
server: "Server-Info"
|
||||
nav: "Navigation"
|
||||
tips: "Tipps"
|
||||
@ -138,13 +187,6 @@ common:
|
||||
auth/views/form.vue:
|
||||
share-access: "Erlaubst Du <i>{name}</i> auf deinen Account zuzugreifen?"
|
||||
permission-ask: "Diese Applikation benötigt folgende Berechtigungen:"
|
||||
account-read: "Accountinformationen anzeigen."
|
||||
account-write: "Accountinformationen bearbeiten."
|
||||
note-write: "Senden."
|
||||
like-write: "Auf Beiträge reagieren."
|
||||
following-write: "Folgen oder entfolgen."
|
||||
notification-read: "Siehe deine Benachrichtigungen."
|
||||
notification-write: "Benachrichtigungen verwalten."
|
||||
cancel: "Abbrechen"
|
||||
accept: "Zugriff erlauben."
|
||||
auth/views/index.vue:
|
||||
@ -185,7 +227,7 @@ common/views/components/games/reversi/reversi.room.vue:
|
||||
ready: "Bereit"
|
||||
common/views/components/connect-failed.vue:
|
||||
title: "Verbindung zum Server ist fehlgeschlagen"
|
||||
description: "Es gibt entweder ein Problem mit deiner Internetverbindung, der Server ist nicht erreichbar oder wird gerade gewartet. Bitte versuche es später noch einmal."
|
||||
description: "Entweder gibt es ein Problem mit deiner Internetverbindung oder der Server ist zur Zeit nicht erreichbar oder wird gewartet. Bitte versuche es später noch einmal."
|
||||
thanks: "Vielen Dank für das nutzen von Misskey."
|
||||
troubleshoot: "Problembehandlung"
|
||||
common/views/components/connect-failed.troubleshooter.vue:
|
||||
@ -202,8 +244,8 @@ common/views/components/connect-failed.troubleshooter.vue:
|
||||
no-internet: "Keine Internetverbindung"
|
||||
no-internet-desc: "Bitte vergewissere dich, dass du mit dem Internet verbunden bist."
|
||||
no-server: "Verbindung mit dem Server nicht möglich"
|
||||
no-server-desc: "Die Internetverbindung scheint in Ordnung zu sein, aber eine Verbindung mit dem Misskey Server konnte nicht hergestellt werden. Möglicherweise ist dieser zur Zeit offline oder in der Wartung, bitte versuche es später noch einmal."
|
||||
success: "Erfolgreich mit dem Misskey Server verbunden"
|
||||
no-server-desc: "Die Internetverbindung scheint in Ordnung zu sein, aber eine Verbindung mit dem Misskey-Server konnte nicht hergestellt werden. Möglicherweise ist dieser zur Zeit offline oder wird gewartet. Bitte versuche es später noch einmal."
|
||||
success: "Erfolgreich mit dem Misskey-Server verbunden"
|
||||
success-desc: "Die Verbindung scheint zu funktionieren. Bitte lade die Seite neu."
|
||||
flush: "Cache leeren"
|
||||
set-version: "Version angeben"
|
||||
@ -230,6 +272,7 @@ common/views/components/theme.vue:
|
||||
invalid-theme: "Thema ist ungültig"
|
||||
already-installed: "Thema ist bereits installiert"
|
||||
author: "Autor"
|
||||
desc: "Beschreibung"
|
||||
export: "Exportieren"
|
||||
import: "Importieren"
|
||||
common/views/components/cw-button.vue:
|
||||
@ -257,15 +300,15 @@ common/views/components/nav.vue:
|
||||
status: "Status"
|
||||
wiki: "Wiki"
|
||||
donors: "Spender"
|
||||
repository: "Projektarchiv"
|
||||
repository: "Quellcode"
|
||||
develop: "Entwickler"
|
||||
feedback: "Feedback"
|
||||
common/views/components/note-menu.vue:
|
||||
favorite: "Diese Notiz favorisieren"
|
||||
favorite: "Diesen Beitrag favorisieren"
|
||||
unfavorite: "Aus Favoriten entfernen"
|
||||
pin: "An die Profilseite pinnen"
|
||||
delete: "Löschen"
|
||||
delete-confirm: "Diesen Post löschen?"
|
||||
delete-confirm: "Diesen Beitrag löschen?"
|
||||
remote: "Auf Quelle anzeigen"
|
||||
common/views/components/poll.vue:
|
||||
vote-to: "Stimme für '{}'"
|
||||
@ -302,8 +345,8 @@ common/views/components/signup.vue:
|
||||
password: "Passwort"
|
||||
password-placeholder: "Wir empfehlen mindestens 8 Zeichen"
|
||||
weak-password: "Schwaches Passwort"
|
||||
normal-password: "Faires Passwort"
|
||||
strong-password: "Schwaches Passwort"
|
||||
normal-password: "Normales Passwort"
|
||||
strong-password: "Starkes Passwort"
|
||||
retype: "Wiederholen"
|
||||
retype-placeholder: "Bitte das Passwort erneut eingeben"
|
||||
password-matched: "OK"
|
||||
@ -325,16 +368,17 @@ common/views/components/uploader.vue:
|
||||
common/views/components/visibility-chooser.vue:
|
||||
public: "Öffentlich"
|
||||
home: "Home"
|
||||
home-desc: "Nur auf die Startseite posten"
|
||||
home-desc: "Auf die Startseite posten"
|
||||
followers: "Folgende"
|
||||
followers-desc: "Nur für diejenigen sichtbar, die dir folgen"
|
||||
specified: "Direkt"
|
||||
specified-desc: "Poste nur für bestimmte Benutzer"
|
||||
specified-desc: "Nur für bestimmte Benutzer sichtbar"
|
||||
local-public: "Öffentlich (nur lokal)"
|
||||
local-home: "Home (nur lokal)"
|
||||
local-followers: "Follower (nur lokal)"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "Dein Profil"
|
||||
name: "Name"
|
||||
avatar: "Avatar"
|
||||
banner: "Banner"
|
||||
save: "Speichern"
|
||||
@ -406,8 +450,8 @@ desktop/views/components/drive.file.vue:
|
||||
copied: "Kopieren erfolgreich"
|
||||
copied-url-to-clipboard: "URL wurde in die Zwischenablage kopiert"
|
||||
desktop/views/components/drive.folder.vue:
|
||||
unable-to-process: "Der Vorgang konnte nicht beendet werden"
|
||||
circular-reference-detected: "Das Zielverzeichnis ist ein Unterverzeichnis des Verzeichnisses welches du verschieben möchtest"
|
||||
unable-to-process: "Der Vorgang konnte nicht abgeschlossen werden"
|
||||
circular-reference-detected: "Das Zielverzeichnis ist innerhalb des Verzeichnisses, dass du verschieben möchtest"
|
||||
unhandled-error: "Unbekannter Fehler"
|
||||
contextmenu:
|
||||
move-to-this-folder: "Verschiebe in diesen Ordner"
|
||||
@ -422,7 +466,7 @@ desktop/views/components/drive.vue:
|
||||
empty-drive-description: "Du kannst rechts klicken und \"Datei hochladen\" auswählen oder eine Datei per Drag and Drop auf das Fenster ziehen."
|
||||
empty-folder: "Dieser Ordner ist leer"
|
||||
unable-to-process: "Der Vorgang konnte nicht beendet werden"
|
||||
circular-reference-detected: "Das Zielverzeichnis ist ein Unterverzeichnis des Verzeichnisses welches du verschieben möchtest"
|
||||
circular-reference-detected: "Das Zielverzeichnis ist innerhalb des Verzeichnisses, dass du verschieben möchtest"
|
||||
unhandled-error: "Unbekannter Fehler"
|
||||
url-upload: "Von einer URL hochladen"
|
||||
url-of-file: "URL der Datei, welche du hochladen möchtest"
|
||||
@ -446,15 +490,15 @@ desktop/views/input-dialog.vue:
|
||||
cancel: "Abbrechen"
|
||||
ok: "OK"
|
||||
desktop/views/components/note-detail.vue:
|
||||
private: "Dieser Post ist privat"
|
||||
private: "Dieser Beitrag ist privat"
|
||||
deleted: "Dieser Beitrag wurde entfernt"
|
||||
location: "Ort"
|
||||
renote: "Anmerkung"
|
||||
add-reaction: "Reaktion hinzufügen"
|
||||
desktop/views/components/note.vue:
|
||||
reply: "Antworten"
|
||||
renote: "Anmerkung"
|
||||
private: "Dieser Post ist privat"
|
||||
renote: "Anmerken"
|
||||
private: "Dieser Beitrag ist privat"
|
||||
deleted: "Dieser Beitrag wurde entfernt"
|
||||
desktop/views/components/notes.vue:
|
||||
error: "Laden fehlgeschlagen."
|
||||
@ -466,9 +510,9 @@ desktop/views/components/post-form.vue:
|
||||
hide-contents: "Inhalt verstecken"
|
||||
reply-placeholder: "Antworte auf diese Anmerkung..."
|
||||
quote-placeholder: "Zitiere diese Anmerkung..."
|
||||
submit: "Beitragsform"
|
||||
submit: "Abschicken"
|
||||
reply: "Antworten"
|
||||
renote: "Anmerkung"
|
||||
renote: "Anmerken"
|
||||
posted: "Gepostet!"
|
||||
replied: "Geantwortet!"
|
||||
reposted: "Weitergesagt!"
|
||||
@ -478,14 +522,13 @@ desktop/views/components/post-form.vue:
|
||||
posting: "Posting"
|
||||
attach-media-from-local: "Medien von deinem PC hinzufügen"
|
||||
attach-media-from-drive: "Medien von deinem Speicher hinzufügen"
|
||||
attach-cancel: "Hinzufügen abbrechen"
|
||||
create-poll: "Eine Abstimmung erstellen"
|
||||
text-remain: "{} Zeichen verbleibend"
|
||||
visibility: "Sichtbarkeit"
|
||||
error: "Fehler"
|
||||
enter-username: "Bitte gib einen Benutzernamen ein..."
|
||||
desktop/views/components/post-form-window.vue:
|
||||
note: "Neue Notiz"
|
||||
note: "Neuer Beitrag"
|
||||
reply: "Antworten"
|
||||
attaches: "{} Medien hinzugefügt"
|
||||
uploading-media: "Lade {} Medien hoch"
|
||||
@ -499,7 +542,7 @@ desktop/views/components/renote-form.vue:
|
||||
success: "Weitergesagt!"
|
||||
failure: "Weitersagen fehlgeschlagen"
|
||||
desktop/views/components/renote-form-window.vue:
|
||||
title: "Bist du dir sicher, dass du das reposten willst?"
|
||||
title: "Bist du dir sicher, dass du das weitersagen willst?"
|
||||
desktop/views/components/settings.2fa.vue:
|
||||
url: "https://www.google.de/intl/de/landing/2step/"
|
||||
register: "Ein Gerät registrieren"
|
||||
@ -511,6 +554,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
common/views/components/api-settings.vue:
|
||||
enter-password: "Bitte Passwort eingeben"
|
||||
console:
|
||||
parameter: "Parameter"
|
||||
send: "Senden"
|
||||
common/views/components/drive-settings.vue:
|
||||
in-use: "benutzt"
|
||||
@ -518,14 +562,12 @@ common/views/components/drive-settings.vue:
|
||||
common/views/components/mute-and-block.vue:
|
||||
save: "Speichern"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "Dieser Post ist privat"
|
||||
private: "Dieser Beitrag ist privat"
|
||||
deleted: "Dieser Beitrag wurde entfernt"
|
||||
poll: "Umfrage"
|
||||
desktop/views/components/settings.tags.vue:
|
||||
add: "Hinzufügen"
|
||||
save: "Speichern"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "Taskmanager"
|
||||
desktop/views/components/timeline.vue:
|
||||
home: "Home"
|
||||
local: "Lokal"
|
||||
@ -610,22 +652,22 @@ mobile/views/components/drive.file-detail.vue:
|
||||
download: "Download"
|
||||
rename: "Umbenennen"
|
||||
mobile/views/components/note.vue:
|
||||
private: "Dieser Post ist privat"
|
||||
private: "Dieser Beitrag ist privat"
|
||||
deleted: "Dieser Beitrag wurde entfernt"
|
||||
location: "Ort"
|
||||
mobile/views/components/note-detail.vue:
|
||||
reply: "Antworten"
|
||||
private: "Dieser Post ist privat"
|
||||
private: "Dieser Beitrag ist privat"
|
||||
deleted: "Dieser Beitrag wurde entfernt"
|
||||
location: "Ort"
|
||||
mobile/views/components/notifications.vue:
|
||||
empty: "Keine Benachrichtigungen"
|
||||
mobile/views/components/post-form.vue:
|
||||
reply: "Antworten"
|
||||
renote: "Anmerkung"
|
||||
renote: "Anmerken"
|
||||
reply-placeholder: "Antworte auf diese Anmerkung..."
|
||||
mobile/views/components/sub-note-content.vue:
|
||||
private: "Dieser Post ist privat"
|
||||
private: "Dieser Beitrag ist privat"
|
||||
deleted: "Dieser Beitrag wurde entfernt"
|
||||
poll: "Umfrage"
|
||||
mobile/views/components/ui.nav.vue:
|
||||
@ -634,6 +676,10 @@ mobile/views/components/ui.nav.vue:
|
||||
user-lists: "Listen"
|
||||
game: "Spielen"
|
||||
about: "Über"
|
||||
mobile/views/pages/drive.vue:
|
||||
contextmenu:
|
||||
upload: "Eine Datei hochladen"
|
||||
create-folder: "Ein Verzeichnis erstellen"
|
||||
mobile/views/pages/user-lists.vue:
|
||||
title: "Listen"
|
||||
mobile/views/pages/home.vue:
|
||||
@ -642,7 +688,7 @@ mobile/views/pages/home.vue:
|
||||
global: "Global"
|
||||
mobile/views/pages/widgets.vue:
|
||||
add-widget: "Hinzufügen"
|
||||
customization-tips: "Anpassung-Tipps"
|
||||
customization-tips: "Anpassungs-Tipps"
|
||||
mobile/views/pages/widgets/activity.vue:
|
||||
activity: "Aktivität"
|
||||
mobile/views/pages/note.vue:
|
||||
@ -663,11 +709,47 @@ deck:
|
||||
list: "Listen"
|
||||
rename: "Umbenennen"
|
||||
deck/deck.user-column.vue:
|
||||
following: "Folgen"
|
||||
followers: "Folgende"
|
||||
images: "Bilder"
|
||||
activity: "Aktivität"
|
||||
timeline: "Zeitleiste"
|
||||
pinned-notes: "Angeheftete Beiträge"
|
||||
docs:
|
||||
edit-this-page-on-github: "Hast Du einen Fehler gefunden oder Lust, diese Dokumentation zu verbessern?"
|
||||
edit-this-page-on-github-link: "Seite auf GitHub bearbeiten!"
|
||||
api:
|
||||
entities:
|
||||
properties: "Eigenschaften"
|
||||
endpoints:
|
||||
params: "Parameter"
|
||||
no-params: "Keine Parameter."
|
||||
res: "Antwort"
|
||||
require-credential: "Dieser Endpunkt erfordert eine Authentifizierung."
|
||||
require-permission: "Dieser Endpunkt erfordert die {permission} Berechtigung."
|
||||
has-limit: "Es gibt eine Ratenbegrenzung."
|
||||
duration-limit: "Es sind maximal {max} Anfragen pro {duration} Millisekunden möglich."
|
||||
min-interval-limit: "Es ist nur eine Anfrage alle {interval} Millisekunden möglich."
|
||||
show-src: "Quellcode anzeigen."
|
||||
show-src-link: "Quellcode auf GitHub anzeigen"
|
||||
generated: "Dieses Dokument wird automatisch anhand der API-Definition generiert."
|
||||
props:
|
||||
name: "Name"
|
||||
type: "Typ"
|
||||
description: "Beschreibung"
|
||||
dev/views/index.vue:
|
||||
manage-apps: "Anwendungen verwalten"
|
||||
dev/views/apps.vue:
|
||||
manage-apps: "Anwendungen verwalten"
|
||||
create-app: "Anwendung erstellen"
|
||||
app-missing: "Keine Anwendungen"
|
||||
dev/views/new-app.vue:
|
||||
account-read: "Accountinformationen anzeigen."
|
||||
account-write: "Accountinformationen bearbeiten."
|
||||
note-write: "Senden."
|
||||
following-write: "Folgen oder entfolgen."
|
||||
notification-read: "Siehe deine Benachrichtigungen."
|
||||
notification-write: "Benachrichtigungen verwalten."
|
||||
create-app: "Erstelle Anwendung"
|
||||
app-name: "Name der Anwendung"
|
||||
app-name-desc: "Der Name der Anwendung"
|
||||
app-overview: "Beschreibung der Anwendung"
|
||||
callback-url: "Callback-URL (optional)"
|
||||
callback-url-desc: "Die URL, auf die nach erfolgreicher Authentifizierung umgeleitet werden soll."
|
||||
authority: "Berechtigungen"
|
||||
authority-desc: "Nur die hier eingetragenen Berechtigungen, werden per API zur Verfügung stehen."
|
||||
authority-warning: "Dies kann auch nach dem erstellen der Anwendung geändert werden, allerdings werden dann alle bisher generierten Token ungültig."
|
||||
|
@ -69,6 +69,27 @@ common:
|
||||
following: "Following"
|
||||
followers: "Followers"
|
||||
favorites: "Favorites"
|
||||
permissions:
|
||||
"read:account": "View account information"
|
||||
"write:account": "Update your account information"
|
||||
"read:blocks": "View Blocks"
|
||||
"write:blocks": "Work with Blocks"
|
||||
"read:drive": "Browse the Drive"
|
||||
"write:drive": "Work with the Drive"
|
||||
"read:favorites": "View Favorites"
|
||||
"write:favorites": "Work with Favorites"
|
||||
"read:following": "View Follower info"
|
||||
"write:following": "Work with Follow info"
|
||||
"read:messaging": "View Messaging"
|
||||
"write:messaging": "Work with Messaging"
|
||||
"read:mutes": "View Muted"
|
||||
"write:mutes": "Work with Muted"
|
||||
"write:notes": "Create and delete posts"
|
||||
"read:notifications": "View notifications"
|
||||
"write:notifications": "Work with notifications"
|
||||
"read:reactions": "View reactions"
|
||||
"write:reactions": "Work with reactions"
|
||||
"write:votes": "Vote"
|
||||
empty-timeline-info:
|
||||
follow-users-to-make-your-timeline: "Following users will show their posts in your timeline."
|
||||
explore: "Find users"
|
||||
@ -276,21 +297,13 @@ common:
|
||||
nav: "Navigation"
|
||||
tips: "Tips"
|
||||
hashtags: "Hashtags"
|
||||
queue: "Queue"
|
||||
dev: "Failed to create the application. Please try again."
|
||||
ai-chan-kawaii: "Ai-chan kawaii!"
|
||||
you: "You"
|
||||
auth/views/form.vue:
|
||||
share-access: "Would you allow <i>{name}</i> to access your account?"
|
||||
permission-ask: "This application requires the following permissions:"
|
||||
account-read: "View account information."
|
||||
account-write: "Modify account information."
|
||||
note-write: "Post."
|
||||
like-write: "Express yourself about this post."
|
||||
following-write: "Follow and unfollow."
|
||||
drive-read: "Read your drive."
|
||||
drive-write: "Upload/delete files in your drive."
|
||||
notification-read: "Read your notifications."
|
||||
notification-write: "Manage your notifications."
|
||||
cancel: "Cancel"
|
||||
accept: "Allow access."
|
||||
auth/views/index.vue:
|
||||
@ -476,8 +489,12 @@ common/views/components/user-menu.vue:
|
||||
mention: "Mention"
|
||||
mute: "Mute"
|
||||
unmute: "Unmute"
|
||||
mute-confirm: "Are you sure you want to mute this user?"
|
||||
unmute-confirm: "Are you certain that you want to unmute this user?"
|
||||
block: "Block"
|
||||
unblock: "Unblock"
|
||||
block-confirm: "Are you sure you want to block this user?"
|
||||
unblock-confirm: "Are you certain that you want to unblock this user?"
|
||||
push-to-list: "Add to list"
|
||||
select-list: "Select a list"
|
||||
report-abuse: "Report abuse"
|
||||
@ -485,8 +502,12 @@ common/views/components/user-menu.vue:
|
||||
report-abuse-reported: "The issue has been reported to the administrator. Your cooperation is much appreciated."
|
||||
silence: "Silence"
|
||||
unsilence: "Unsilence"
|
||||
silence-confirm: "Are you sure that you want to silence this user?"
|
||||
unsilence-confirm: "Are you sure that you want to stop silencing this user?"
|
||||
suspend: "Suspend"
|
||||
unsuspend: "Unsuspend"
|
||||
suspend-confirm: "Are you sure that you want to suspend this user?"
|
||||
unsuspend-confirm: "Are you sure that you want to unsuspend this user?"
|
||||
common/views/components/poll.vue:
|
||||
vote-to: "Vote for '{}'"
|
||||
vote-count: "{} votes"
|
||||
@ -669,6 +690,9 @@ common/views/components/user-list-editor.vue:
|
||||
remove-user: "Remove from this list"
|
||||
delete-are-you-sure: "Delete list \"$1\"?"
|
||||
deleted: "Deleted successfully"
|
||||
common/views/components/user-lists.vue:
|
||||
create-list: "Create a list"
|
||||
list-name: "List name"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "Checking"
|
||||
no-broadcasts: "No announcements"
|
||||
@ -877,7 +901,6 @@ desktop/views/components/post-form.vue:
|
||||
posting: "Posting"
|
||||
attach-media-from-local: "Attach media from your device"
|
||||
attach-media-from-drive: "Attach media from your Drive"
|
||||
attach-cancel: "Cancel attachment"
|
||||
insert-a-kao: "v('ω')v"
|
||||
create-poll: "Create a poll"
|
||||
text-remain: "{} characters remaining"
|
||||
@ -970,6 +993,10 @@ common/views/components/password-settings.vue:
|
||||
not-match: "The new passwords do not match"
|
||||
changed: "Password changed"
|
||||
failed: "Failed to change password"
|
||||
common/views/components/post-form-attaches.vue:
|
||||
attach-cancel: "Remove Attachment"
|
||||
mark-as-sensitive: "Mark as 'sensitive'"
|
||||
unmark-as-sensitive: "Unmark as 'sensitive'"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "This post is private"
|
||||
deleted: "This post has been deleted"
|
||||
@ -980,8 +1007,6 @@ desktop/views/components/settings.tags.vue:
|
||||
query: "Query (optional)"
|
||||
add: "Add"
|
||||
save: "Save"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "Task Manager"
|
||||
desktop/views/components/timeline.vue:
|
||||
home: "Home"
|
||||
local: "Local"
|
||||
@ -1016,8 +1041,6 @@ desktop/views/components/received-follow-requests-window.vue:
|
||||
reject: "Reject"
|
||||
desktop/views/components/user-lists-window.vue:
|
||||
title: "User lists"
|
||||
create-list: "Create a list"
|
||||
list-name: "List name"
|
||||
desktop/views/components/user-preview.vue:
|
||||
notes: "Posts"
|
||||
following: "Following"
|
||||
@ -1115,11 +1138,6 @@ admin/views/instance.vue:
|
||||
save: "Save"
|
||||
saved: "Saved"
|
||||
user-recommendation-config: "Recommended users"
|
||||
enable-external-user-recommendation: "Enable external user recommendations"
|
||||
external-user-recommendation-engine: "Engine"
|
||||
external-user-recommendation-engine-desc: "Example : https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
||||
external-user-recommendation-timeout: "Timeout"
|
||||
external-user-recommendation-timeout-desc: "Number of milliseconds (ex. 300,000)"
|
||||
email-config: "Email server settings"
|
||||
email-config-info: "Used to confirm email and password reset etc."
|
||||
enable-email: "Enable email delivery"
|
||||
@ -1200,7 +1218,9 @@ admin/views/users.vue:
|
||||
unsuspend-confirm: "Are you sure you want to unsuspend this account?"
|
||||
unsuspended: "The user has successfully unsuspended."
|
||||
make-silence: "Silence"
|
||||
silence-confirm: "Silence user?"
|
||||
unmake-silence: "Unsilence"
|
||||
unsilence-confirm: "Are you certain that you want to stop silencing this user?"
|
||||
verify: "Verify account"
|
||||
verify-confirm: "Do you want this to be a verified account?"
|
||||
verified: "The account is now being verified"
|
||||
@ -1394,6 +1414,7 @@ desktop/views/widgets/polls.vue:
|
||||
desktop/views/widgets/post-form.vue:
|
||||
title: "Post"
|
||||
note: "Post"
|
||||
something-happened: "Could not be posted in this circumstance."
|
||||
desktop/views/widgets/profile.vue:
|
||||
update-banner: "Click to edit your banner"
|
||||
update-avatar: "Click to edit your avatar"
|
||||
@ -1412,12 +1433,11 @@ mobile/views/components/drive.vue:
|
||||
file-count: "File(s)"
|
||||
nothing-in-drive: "There's nothing stored."
|
||||
folder-is-empty: "This folder is empty"
|
||||
prompt: "What do you want to do? (Please enter a number): <1 → Upload a file | 2 → Upload a file from a URL | 3 → Create a folder | 4 → Change this folder's name | 5 → Move this folder | 6 → Delete this folder>"
|
||||
deletion-alert: "Sorry! Deleting a folder is not yet implemented."
|
||||
folder-name: "Folder name"
|
||||
here-is-root: "Currently, you are on the root, not inside of any folder."
|
||||
url-prompt: "URL of the file you want to upload"
|
||||
uploading: "Upload requested. It may take a while for the upload to finish."
|
||||
folder-name-cannot-empty: "Folder name cannot be blank."
|
||||
mobile/views/components/drive-file-chooser.vue:
|
||||
select-file: "Choose files"
|
||||
mobile/views/components/drive-folder-chooser.vue:
|
||||
@ -1470,7 +1490,7 @@ mobile/views/components/post-form.vue:
|
||||
quote-placeholder: "Quote this post... (optional)"
|
||||
reply-placeholder: "Reply to this note..."
|
||||
cw-placeholder: "Comments for the post (optional)"
|
||||
location-alert: "Your device does not provide location services"
|
||||
geolocation-alert: "Your device does not provide location services."
|
||||
error: "Error"
|
||||
username-prompt: "Enter user name"
|
||||
mobile/views/components/sub-note-content.vue:
|
||||
@ -1491,9 +1511,16 @@ mobile/views/components/ui.nav.vue:
|
||||
game: "Games"
|
||||
admin: "Admin"
|
||||
about: "About Misskey"
|
||||
mobile/views/pages/drive.vue:
|
||||
contextmenu:
|
||||
upload: "Upload a file"
|
||||
url-upload: "Upload file from a URL"
|
||||
create-folder: "Create a folder"
|
||||
rename-folder: "Rename folder"
|
||||
move-folder: "Move this folder"
|
||||
delete-folder: "Delete this folder"
|
||||
mobile/views/pages/user-lists.vue:
|
||||
title: "Lists"
|
||||
enter-list-name: "Enter a name of the list to make"
|
||||
mobile/views/pages/signup.vue:
|
||||
lets-start: "Your account is now ready! 📦"
|
||||
mobile/views/pages/followers.vue:
|
||||
@ -1620,24 +1647,14 @@ dev/views/apps.vue:
|
||||
create-app: "Create app"
|
||||
app-missing: "No apps"
|
||||
dev/views/new-app.vue:
|
||||
new-app: "New Application"
|
||||
create-app: "Creating application"
|
||||
app-name: "Application name"
|
||||
app-name-desc: "The name of your app"
|
||||
app-name-ex: "ex) Misskey for iOS"
|
||||
app-overview: "Application summary"
|
||||
app-desc: "A brief description or introduction of your app."
|
||||
app-desc-ex: "ex) Misskey iOS client."
|
||||
app-overview-desc: "A brief description, or an introduction of your app."
|
||||
callback-url: "The callback URL (optional)"
|
||||
callback-url-desc: "The URL to redirect to after the user is authenticated via the authentication form."
|
||||
authority: "Permissions"
|
||||
authority-desc: "Only the functions requested here can be accessed via the API."
|
||||
authority-warning: "You can change it even after creating the application, but if you give different permissions, all user keys associated at that time will be invalidated."
|
||||
account-read: "View account information."
|
||||
account-write: "Modify account information."
|
||||
note-write: "Post."
|
||||
reaction-write: "Add or remove reactions."
|
||||
following-write: "Follow and unfollow."
|
||||
drive-read: "Read the drive."
|
||||
drive-write: "Upload/delete files in the drive."
|
||||
notification-read: "Read your notifications."
|
||||
notification-write: "Manage your notifications."
|
||||
|
@ -20,8 +20,15 @@ common:
|
||||
application-authorization: "Autorizaciones de la aplicación."
|
||||
close: "Cerrar"
|
||||
do-not-copy-paste: "Por favor no copies código aquí. Tu cuenta puede resultar comprometida."
|
||||
load-more: "Leer más"
|
||||
enter-password: "Escribe una contraseña"
|
||||
2fa: "Autenticación de dos factores"
|
||||
customize-home: "Personaliza la página principal"
|
||||
featured-notes: "Destacados"
|
||||
dark-mode: "Modo oscuro"
|
||||
signin: "Iniciar sesión"
|
||||
signup: "¡Regístrate!"
|
||||
signout: "Cerrar sesión"
|
||||
got-it: "¡Listo!"
|
||||
customization-tips:
|
||||
title: "Consejos de personalización"
|
||||
@ -50,8 +57,22 @@ common:
|
||||
drive: "Drive"
|
||||
messaging: "Conversación"
|
||||
home: "Inicio"
|
||||
deck: "Deck"
|
||||
timeline: "Timeline"
|
||||
explore: "Explorar"
|
||||
following: "Siguiendo"
|
||||
followers: "Seguidores"
|
||||
favorites: "Me gusta esta nota"
|
||||
permissions:
|
||||
"read:account": "Ver información de la cuenta"
|
||||
"write:account": "Editar información de la cuenta"
|
||||
"read:blocks": "Ver bloques"
|
||||
"write:blocks": "Editar bloques"
|
||||
"read:favorites": "Ver favoritos"
|
||||
"write:favorites": "Editar favoritos"
|
||||
"read:messaging": "Ver conversación"
|
||||
"read:notifications": "Ver notificaciones"
|
||||
"write:votes": "Vota"
|
||||
weekday-short:
|
||||
sunday: "domingo"
|
||||
monday: "lunes"
|
||||
@ -97,12 +118,24 @@ common:
|
||||
d: "¿Quieres decir algo?"
|
||||
e: "¡Escribe aquí!"
|
||||
f: "Esperando a que escribas algo..."
|
||||
settings: "Configuración"
|
||||
_settings:
|
||||
profile: "Tu perfil"
|
||||
notification: "Notificaciones"
|
||||
apps: "Aplicaciones"
|
||||
tags: "Etiquetas"
|
||||
mute-and-block: "Silenciar/Bloquear"
|
||||
blocking: "Bloquear"
|
||||
security: "Seguridad"
|
||||
password: "Contraseña"
|
||||
other: "Otros"
|
||||
appearance: "Diseño"
|
||||
behavior: "Comportamiento"
|
||||
fetch-on-scroll-desc: "Cuando te deslizas al final de la página nuevo contenido se carga automáticamente."
|
||||
note-visibility: "Visibilidad de la publicación"
|
||||
default-note-visibility: "Rango de publicación predeterminado"
|
||||
web-search-engine: "Buscador web"
|
||||
web-search-engine-desc: "Ejemplo: https://www.google.com/?#q={{query}}"
|
||||
use-os-default-emojis: "Usar los emoticonos estándar del sistema operativo"
|
||||
line-width: "Grosor de línea"
|
||||
line-width-thick: "Grosor"
|
||||
@ -128,6 +161,19 @@ common:
|
||||
contrasted-acct: "Añadir contraste al nombre de usuario"
|
||||
wallpaper: "Fondo de pantalla"
|
||||
choose-wallpaper: "Escoge un fondo de pantalla"
|
||||
delete-wallpaper: "Quitar fondo de pantalla"
|
||||
show-clock-on-header: "Muestra el reloj en la parte superior derecha"
|
||||
timeline: "Timeline"
|
||||
sound: "Sonido"
|
||||
enable-sounds: "Habilitar sonido"
|
||||
volume: "Volúmen"
|
||||
test: "Prueba"
|
||||
version: "Versión"
|
||||
no-updates: "No hay actualizaciones disponibles"
|
||||
no-updates-desc: "Tu Misskey está actualizado"
|
||||
update-available: "¡Una nueva versión está disponible!"
|
||||
update-available-desc: "Las actualizaciones se aplicarán cuando la página se vuelva a cargar."
|
||||
advanced-settings: "Configuraciones avanzadas"
|
||||
navbar-position-left: "Izquierda"
|
||||
search: "Buscar"
|
||||
delete: "eliminar"
|
||||
@ -169,15 +215,6 @@ common:
|
||||
you: "Tú"
|
||||
auth/views/form.vue:
|
||||
permission-ask: "La aplicación requiere los siguientes permisos:"
|
||||
account-read: "Viendo información de la cuenta:"
|
||||
account-write: "Modificar información de la cuenta:"
|
||||
note-write: "Publicación."
|
||||
like-write: "Para reaccionar a las publicaciones."
|
||||
following-write: "Seguir o dejar de seguir"
|
||||
drive-read: "Leer tu unidad."
|
||||
drive-write: "Cargar o borrar archivos de tu unidad."
|
||||
notification-read: "Leer tus notificaciones."
|
||||
notification-write: "Administrar tus notificaciones."
|
||||
cancel: "Cancelar"
|
||||
accept: "Garantizar acceso."
|
||||
auth/views/index.vue:
|
||||
@ -429,6 +466,8 @@ common/views/components/profile-editor.vue:
|
||||
enter-password: "Escribe una contraseña"
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "Usuarios"
|
||||
common/views/components/user-lists.vue:
|
||||
list-name: "Nombre de lista"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "Recuperando"
|
||||
no-broadcasts: "Sin emisión"
|
||||
@ -631,7 +670,6 @@ desktop/views/components/post-form.vue:
|
||||
posting: "Publicando"
|
||||
attach-media-from-local: "Agregar medios de tu dispositivo"
|
||||
attach-media-from-drive: "Adjunta multimedia desde tu Disco"
|
||||
attach-cancel: "Quitar el archivo adjunto"
|
||||
create-poll: "Crea una encuesta"
|
||||
text-remain: "quedan {} caracteres"
|
||||
recent-tags: "Reciente"
|
||||
@ -697,6 +735,9 @@ common/views/components/mute-and-block.vue:
|
||||
mute: "Silenciar"
|
||||
block: "Bloquear"
|
||||
save: "Guardar"
|
||||
common/views/components/post-form-attaches.vue:
|
||||
mark-as-sensitive: "Marcar como 'sensible'"
|
||||
unmark-as-sensitive: "Desmarcar como 'sensible'"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "Esta publicación es privada"
|
||||
deleted: "Esta publicación ha sido removida"
|
||||
@ -708,7 +749,6 @@ desktop/views/components/settings.tags.vue:
|
||||
desktop/views/components/timeline.vue:
|
||||
home: "Inicio"
|
||||
local: "Local"
|
||||
hybrid: "Social"
|
||||
global: "Global"
|
||||
list: "Listas"
|
||||
hashtag: "Hashtags"
|
||||
@ -735,8 +775,6 @@ desktop/views/components/received-follow-requests-window.vue:
|
||||
reject: "Rechazar"
|
||||
desktop/views/components/user-lists-window.vue:
|
||||
title: "Listas de usuario"
|
||||
create-list: "Crear lista"
|
||||
list-name: "Nombre de lista"
|
||||
desktop/views/components/user-preview.vue:
|
||||
notes: "Publicaciones"
|
||||
following: "Sigue"
|
||||
@ -768,7 +806,6 @@ admin/views/instance.vue:
|
||||
recaptcha-secret-key: "clave secreta reCAPTCHA"
|
||||
invite: "Invitar"
|
||||
save: "Guardar"
|
||||
external-user-recommendation-timeout: "Tiempo de espera"
|
||||
email: "Correo electrónico"
|
||||
smtp-host: "Host SMTP"
|
||||
smtp-port: "Puerto SMTP"
|
||||
@ -878,6 +915,7 @@ mobile/views/components/post-form.vue:
|
||||
reply: "Responder"
|
||||
renote: "Republicar"
|
||||
reply-placeholder: "Responder a esta nota..."
|
||||
geolocation-alert: "Tu dispositivo no tiene soporte de geolocalización."
|
||||
mobile/views/components/sub-note-content.vue:
|
||||
private: "Esta publicación es privada"
|
||||
deleted: "Esta publicación ha sido removida"
|
||||
@ -893,12 +931,15 @@ mobile/views/components/ui.nav.vue:
|
||||
game: "Juegos"
|
||||
admin: "Admin"
|
||||
about: "Sobre"
|
||||
mobile/views/pages/drive.vue:
|
||||
contextmenu:
|
||||
upload: "Subir fichero"
|
||||
create-folder: "Crear una carpeta"
|
||||
mobile/views/pages/user-lists.vue:
|
||||
title: "Listas"
|
||||
mobile/views/pages/home.vue:
|
||||
home: "Inicio"
|
||||
local: "Local"
|
||||
hybrid: "Social"
|
||||
global: "Global"
|
||||
mobile/views/pages/widgets.vue:
|
||||
dashboard: "Panel de control"
|
||||
@ -921,7 +962,6 @@ mobile/views/pages/user/home.photos.vue:
|
||||
deck:
|
||||
home: "Inicio"
|
||||
local: "Local"
|
||||
hybrid: "Social"
|
||||
hashtag: "Etiquetas"
|
||||
global: "Global"
|
||||
notifications: "Notificaciones"
|
||||
@ -929,12 +969,3 @@ deck:
|
||||
rename: "Renombrar"
|
||||
deck/deck.user-column.vue:
|
||||
activity: "Actividad"
|
||||
dev/views/new-app.vue:
|
||||
account-read: "Viendo información de la cuenta:"
|
||||
account-write: "Modificar información de la cuenta:"
|
||||
note-write: "Publicación."
|
||||
following-write: "Seguir o dejar de seguir"
|
||||
drive-read: "Leer tu unidad."
|
||||
drive-write: "Cargar o borrar archivos de tu unidad."
|
||||
notification-read: "Leer tus notificaciones."
|
||||
notification-write: "Administrar tus notificaciones."
|
||||
|
@ -13,7 +13,7 @@ common:
|
||||
rich-contents-desc: "Partagez vos idées, les événements et les sujets qui vous tiennent à cœur ainsi que tout autre chose que vous souhaitez partager avec les autres. Si vous le désirez, vous pouvez décorer vos messages en utilisant une syntaxe différente ou en y joignant des sondages et des fichiers, tels que les photos ou les vidéos que vous aimez."
|
||||
reaction: "Réactions"
|
||||
reaction-desc: "Une manière simple d'exprimer vos émotions. Misskey peut attacher diverses réactions aux publications des autres utilisateurs. Si vous essayez les réactions sur Misskey, vous ne pourrez plus retourner sur une autre plateforme de réseaux sociaux n'offrant que des « J'aime »."
|
||||
ui: "Interface utilisateur"
|
||||
ui: "Interface"
|
||||
ui-desc: "Aucune interface graphique ne peut plaire à tout le monde. Par conséquent, Misskey possède une interface utilisateur hautement personnalisable selon vos goûts. Vous pouvez rendre votre page d'accueil originale en modifiant la mise en page de votre fil et en déplaçant les widgets que vous pouvez facilement ajuster pour vous approprier cet espace."
|
||||
drive: "Drive"
|
||||
drive-desc: "Vous voulez poster une photo que vous avez déjà transférée ? Vous souhaitez organiser, nommer et créer un dossier pour vos fichiers téléversés ? Misskey Drive est la meilleure solution pour vous. Très facile de partager vos fichiers en ligne."
|
||||
@ -33,6 +33,7 @@ common:
|
||||
signin: "Se connecter"
|
||||
signup: "S'enregistrer"
|
||||
signout: "Se déconnecter"
|
||||
reload-to-apply-the-setting: "Le rechargement de la page est nécessaire pour appliquer ces paramètres. Désirez-vous la recharger maintenant ?"
|
||||
got-it: "J’ai compris !"
|
||||
customization-tips:
|
||||
title: "Conseils de personnalisation"
|
||||
@ -67,6 +68,16 @@ common:
|
||||
following: "Suit"
|
||||
followers: "Abonné·e·s"
|
||||
favorites: "Mettre cette note en favoris"
|
||||
permissions:
|
||||
"read:account": "Afficher les informations du compte"
|
||||
"write:account": "Mettre à jour les informations de votre compte"
|
||||
"read:drive": "Parcourir le Drive"
|
||||
"write:drive": "Écrire sur le Drive"
|
||||
"read:favorites": "Afficher les favoris"
|
||||
"write:notes": "Créer ou supprimer des publications"
|
||||
"read:notifications": "Afficher les notifications"
|
||||
"read:reactions": "Lire les réactions"
|
||||
"write:votes": "Vote"
|
||||
empty-timeline-info:
|
||||
follow-users-to-make-your-timeline: "Les utilisateurs suivants afficheront leurs publications sur votre fil."
|
||||
explore: "Trouver des utilisateurs"
|
||||
@ -121,6 +132,7 @@ common:
|
||||
notification: "Notifications"
|
||||
apps: "Applications"
|
||||
tags: "Hashtags"
|
||||
mute-and-block: "Silencer / Bloquer"
|
||||
blocking: "En cours blocage"
|
||||
security: "Sécurité"
|
||||
signin: "Historique des connexions"
|
||||
@ -129,11 +141,22 @@ common:
|
||||
appearance: "Apparence"
|
||||
behavior: "Comportement"
|
||||
fetch-on-scroll: "Chargement automatique lors du défilement"
|
||||
fetch-on-scroll-desc: "Chargement automatique du contenu lors du défilement de la page."
|
||||
note-visibility: "Visibilité de la publication"
|
||||
default-note-visibility: "Visibilité par défaut"
|
||||
remember-note-visibility: "Se souvenir du mode de visibilité de la publication"
|
||||
web-search-engine: "Moteur de recherche Web"
|
||||
web-search-engine-desc: "Exemple : https://www.google.com/?#q={{query}}"
|
||||
keep-cw: "Maintenir l'avertissement de contenu"
|
||||
i-like-sushi: "Je préfère les sushis plutôt que le pudding"
|
||||
show-reversi-board-labels: "Afficher les étiquettes des lignes et colonnes dans Reversi"
|
||||
use-avatar-reversi-stones: "Utiliser l’avatar comme pion dans Reversi"
|
||||
disable-animated-mfm: "Désactiver les textes animés dans les publications"
|
||||
disable-showing-animated-images: "Désactiver l'animation des images"
|
||||
suggest-recent-hashtags: "Afficher les hashtags populaires dans le champs de saisie"
|
||||
always-show-nsfw: "Toujours afficher les contenus sensibles"
|
||||
always-mark-nsfw: "Toujours marquer les notes ayant des médias comme sensibles"
|
||||
show-full-acct: "Afficher l’adresse complète de l’utilisateur"
|
||||
show-via: "Afficher via"
|
||||
reduce-motion: "Réduire les animations dans l’interface utilisateur"
|
||||
this-setting-is-this-device-only: "Uniquement sur cet appareil"
|
||||
@ -143,25 +166,69 @@ common:
|
||||
line-width-normal: "Normale"
|
||||
line-width-thick: "Épaisse"
|
||||
font-size: "Taille du texte"
|
||||
font-size-x-small: "Très petit"
|
||||
font-size-small: "Petite"
|
||||
font-size-medium: "Normale"
|
||||
font-size-large: "Grande"
|
||||
font-size-x-large: "Large"
|
||||
deck-column-align: "Alignement des colonnes du Deck"
|
||||
deck-column-align-center: "Centrer"
|
||||
deck-column-align-left: "À gauche"
|
||||
deck-column-align-flexible: "Flexible"
|
||||
deck-column-width: "Largeur des colonnes du Deck"
|
||||
deck-column-width-narrow: "Étroite"
|
||||
deck-column-width-narrower: "Légèrement étroite"
|
||||
deck-column-width-normal: "Normale"
|
||||
deck-column-width-wider: "Légèrement large"
|
||||
deck-column-width-wide: "Large"
|
||||
use-shadow: "Utiliser les ombres dans l'interface utilisateur"
|
||||
rounded-corners: "Coins arrondis de l'interface utilisateur"
|
||||
circle-icons: "Utiliser des icônes circulaires"
|
||||
contrasted-acct: "Ajouter du contraste au nom de l’utilisateur"
|
||||
wallpaper: "Image du fond d'écran"
|
||||
choose-wallpaper: "Sélectionner un fond d'écran"
|
||||
delete-wallpaper: "Supprimer le fond d'écran"
|
||||
post-form-on-timeline: "Afficher le champs de saisie en haut du fil"
|
||||
show-clock-on-header: "Afficher l'horloge sur le coté supérieur droit"
|
||||
timeline: "Fil d’actualité"
|
||||
navbar-position-top: "en haut"
|
||||
show-my-renotes: "Afficher mes republications dans le fil"
|
||||
remain-deleted-note: "Continuer à afficher les notes supprimées"
|
||||
sound: "Son"
|
||||
enable-sounds: "Activer les sons"
|
||||
enable-sounds-desc: "Jouer un son lorsque vous recevez un message/publication. Ce paramètre est sauvegardé dans le navigateur."
|
||||
volume: "Volume"
|
||||
test: "Test"
|
||||
update: "Mise à jour de Misskey"
|
||||
version: "Version actuelle :"
|
||||
latest-version: "Dernière version :"
|
||||
update-checking: "Recherche de mises à jour"
|
||||
do-update: "Rechercher des mises à jour"
|
||||
update-settings: "Paramètres avancés"
|
||||
no-updates: "Aucune mise à jour disponible"
|
||||
no-updates-desc: "Votre Misskey est à jour."
|
||||
update-available: "Nouvelle version disponible !"
|
||||
update-available-desc: "Les mises à jour seront appliquées une fois la page est rechargée."
|
||||
advanced-settings: "Paramètres avancés"
|
||||
debug-mode: "Activer le mode débogage"
|
||||
debug-mode-desc: "Ce paramètre est stocké dans le navigateur."
|
||||
navbar-position: "Position de la barre de navigation"
|
||||
navbar-position-top: "En haut"
|
||||
navbar-position-left: "À gauche"
|
||||
navbar-position-right: "à droite"
|
||||
navbar-position-right: "À droite"
|
||||
i-am-under-limited-internet: "J'ai un accès Internet limité"
|
||||
post-style: "Style d'affichage des notes"
|
||||
post-style-standard: "Standard"
|
||||
post-style-smart: "Intelligent"
|
||||
notification-position: "Afficher les notifications"
|
||||
notification-position-bottom: "en bas"
|
||||
notification-position-top: "en haut"
|
||||
notification-position-top: "En haut"
|
||||
disable-via-mobile: "Enlever la mention publié via 'mobile'"
|
||||
load-raw-images: "Afficher les photos jointes dans leur qualité originale"
|
||||
load-remote-media: "Afficher les médias depuis le serveur distant"
|
||||
search: "Recherche"
|
||||
delete: "Supprimer"
|
||||
loading: "Chargement en cours …"
|
||||
ok: "Confirmer"
|
||||
cancel: "Quitter"
|
||||
update-available-title: "Mise à jour disponible"
|
||||
update-available: "Une nouvelle version de Misskey est disponible ({newer}, version actuelle: {current}). Veuillez recharger la page pour appliquer la mise à jour."
|
||||
@ -176,7 +243,7 @@ common:
|
||||
view-on-remote: " Consulter le profil complet"
|
||||
renoted-by: "Renoté par {user}"
|
||||
no-notes: "Sans aucune note"
|
||||
turn-on-darkmode: "Basculer vers le mode nuit"
|
||||
turn-on-darkmode: "Mode nuit"
|
||||
turn-off-darkmode: "Mode jour"
|
||||
error:
|
||||
title: "Une erreur est survenue"
|
||||
@ -214,21 +281,13 @@ common:
|
||||
nav: "Navigation"
|
||||
tips: "Conseils"
|
||||
hashtags: "Hashtags"
|
||||
queue: "File d'attente"
|
||||
dev: "Échec lors de la création de l’application. Veuillez réessayer."
|
||||
ai-chan-kawaii: "Ai-Chan est mignonne !"
|
||||
you: "Vous"
|
||||
auth/views/form.vue:
|
||||
share-access: "Désirez-vous autoriser <i>{name}</i> à avoir accès à votre compte ?"
|
||||
permission-ask: "Cette application nécessite les autorisations suivantes :"
|
||||
account-read: "Afficher les informations du compte."
|
||||
account-write: "Modifications des informations du compte."
|
||||
note-write: "Publier."
|
||||
like-write: "Réagir aux publications."
|
||||
following-write: "Suivre des comptes et se désabonner."
|
||||
drive-read: "Lire votre Drive"
|
||||
drive-write: "Téléverser/supprimer des fichiers dans votre Drive."
|
||||
notification-read: "Lire vos notifications."
|
||||
notification-write: "Gérer vos notifications."
|
||||
cancel: "Annuler"
|
||||
accept: "Autoriser l’accès"
|
||||
auth/views/index.vue:
|
||||
@ -250,6 +309,9 @@ common/views/pages/explore.vue:
|
||||
federated: "Du Fédiverse"
|
||||
explore: "Explorer {host}"
|
||||
users-info: "Actuellement, {users} utilisateurs se sont inscrit ici"
|
||||
common/views/components/url-preview.vue:
|
||||
enable-player: "Activer la lecture"
|
||||
disable-player: "Fermer le lecteur"
|
||||
common/views/components/user-list.vue:
|
||||
no-users: "Il n'y a aucun utilisateur"
|
||||
common/views/components/games/reversi/reversi.vue:
|
||||
@ -424,19 +486,32 @@ common/views/components/user-menu.vue:
|
||||
common/views/components/poll.vue:
|
||||
vote-to: "Voter pour '{}'"
|
||||
vote-count: "{} votes"
|
||||
total-votes: "{} Total des votes"
|
||||
vote: "Vote"
|
||||
show-result: "Montrer les résultats"
|
||||
voted: "Voté"
|
||||
closed: "Terminé"
|
||||
remaining-days: "{d} jours, {h} heures restantes"
|
||||
remaining-hours: "{h} heures et {m} minutes restantes"
|
||||
remaining-minutes: "{m} minutes et {s} secondes restantes"
|
||||
remaining-seconds: "{s} secondes restantes"
|
||||
common/views/components/poll-editor.vue:
|
||||
no-only-one-choice: "Vous devez saisir au moins deux choix."
|
||||
choice-n: "Choix {}"
|
||||
remove: "Supprimer ce choix"
|
||||
add: "+ Ajouter un choix"
|
||||
destroy: "Annuler ce sondage"
|
||||
expiration: "Valide jusqu'à"
|
||||
infinite: "Illimité"
|
||||
at: "Choisir une date et une durée"
|
||||
no-more: "Vous ne pouvez pas en ajouter davantage"
|
||||
deadline-date: "Date d’échéance"
|
||||
deadline-time: "Durée"
|
||||
interval: "Durée"
|
||||
unit: "Unité"
|
||||
second: "secondes"
|
||||
minute: "Minutes"
|
||||
hour: "Heures"
|
||||
day: "D"
|
||||
common/views/components/reaction-picker.vue:
|
||||
choose-reaction: "Choisissez votre réaction"
|
||||
@ -568,6 +643,7 @@ common/views/components/profile-editor.vue:
|
||||
email-not-verified: "Adresse de courriel n’est pas confirmée. Veuillez vérifier votre boite de réception."
|
||||
export: "Exporter"
|
||||
import: "Importer"
|
||||
export-and-import: "Exportation et importation"
|
||||
export-targets:
|
||||
all-notes: "Toutes les notes publiées"
|
||||
following-list: "Liste des abonnements"
|
||||
@ -575,6 +651,7 @@ common/views/components/profile-editor.vue:
|
||||
blocking-list: "Liste des comptes bloqués"
|
||||
user-lists: "Listes"
|
||||
export-requested: "Vous avez demandé une exportation. Cela peut prendre un certain temps. Une fois l'exportation terminée, le fichier résultant sera ajouté dans le Drive."
|
||||
import-requested: "Vous avez initié un import. Ceci peut prendre un peu de temps."
|
||||
enter-password: "Veuillez saisir votre mot de passe"
|
||||
danger-zone: "Zone de danger"
|
||||
delete-account: "Supprimer le compte"
|
||||
@ -586,6 +663,9 @@ common/views/components/user-list-editor.vue:
|
||||
remove-user: "Retirer de cette liste"
|
||||
delete-are-you-sure: "Voulez-vous vraiment supprimer la liste « $1 » ?"
|
||||
deleted: "Supprimé"
|
||||
common/views/components/user-lists.vue:
|
||||
create-list: "Créer une liste"
|
||||
list-name: "Nom de la liste"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "Récupération"
|
||||
no-broadcasts: "Aucune annonce"
|
||||
@ -793,7 +873,6 @@ desktop/views/components/post-form.vue:
|
||||
posting: "Publication …"
|
||||
attach-media-from-local: "Joindre un média depuis votre appareil"
|
||||
attach-media-from-drive: "Joindre un média depuis votre Drive"
|
||||
attach-cancel: "Annuler le fichier attaché"
|
||||
insert-a-kao: "v('ω')v"
|
||||
create-poll: "Créer un sondage"
|
||||
text-remain: "{} caractères restants"
|
||||
@ -886,6 +965,10 @@ common/views/components/password-settings.vue:
|
||||
not-match: "Les nouveaux mots de passe ne sont pas identiques"
|
||||
changed: "Mot de passe modifié avec succès"
|
||||
failed: "Échec lors de la modification du mot de passe"
|
||||
common/views/components/post-form-attaches.vue:
|
||||
attach-cancel: "Enlever le fichier attaché"
|
||||
mark-as-sensitive: "Marquer comme sensible"
|
||||
unmark-as-sensitive: "Ne pas marquer comme sensible"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "cette publication est privée"
|
||||
deleted: "cette publication a été supprimée"
|
||||
@ -896,8 +979,6 @@ desktop/views/components/settings.tags.vue:
|
||||
query: "Requête (optionnelle)"
|
||||
add: "Ajouter"
|
||||
save: "Enregistrer"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "Gestionnaire de tâches"
|
||||
desktop/views/components/timeline.vue:
|
||||
home: "Accueil"
|
||||
local: "Local"
|
||||
@ -932,8 +1013,6 @@ desktop/views/components/received-follow-requests-window.vue:
|
||||
reject: "Refuser"
|
||||
desktop/views/components/user-lists-window.vue:
|
||||
title: "Listes de l'utilisateur"
|
||||
create-list: "Créer une liste"
|
||||
list-name: "Nom de la liste"
|
||||
desktop/views/components/user-preview.vue:
|
||||
notes: "Publications"
|
||||
following: "Abonné à"
|
||||
@ -958,6 +1037,7 @@ admin/views/index.vue:
|
||||
hashtags: "Hashtags"
|
||||
abuse: "Abus"
|
||||
queue: "File d’attente"
|
||||
logs: "Journaux"
|
||||
back-to-misskey: "Retour vers Misskey"
|
||||
admin/views/dashboard.vue:
|
||||
dashboard: "Tableau de bord"
|
||||
@ -1026,11 +1106,6 @@ admin/views/instance.vue:
|
||||
save: "Sauvegarder"
|
||||
saved: "Enregistré"
|
||||
user-recommendation-config: "Utilisateurs"
|
||||
enable-external-user-recommendation: "Activer la recommandation des utilisateurs distants"
|
||||
external-user-recommendation-engine: "Moteur"
|
||||
external-user-recommendation-engine-desc: "Exemple : https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
||||
external-user-recommendation-timeout: "Délai d’expiration"
|
||||
external-user-recommendation-timeout-desc: "En millisecondes (par exemple : 300000)"
|
||||
email-config: "Paramètres du serveur de messagerie"
|
||||
email-config-info: "Utilisé pour confirmer votre adresse de courrier électronique et la réinitialisation de votre mot de passe."
|
||||
enable-email: "Activation de la distribution du courrier"
|
||||
@ -1199,6 +1274,7 @@ admin/views/federation.vue:
|
||||
marked-as-closed: "Marquées comme fermées"
|
||||
lookup: "Recherche"
|
||||
instances: "Fédérées"
|
||||
instance-not-registered: "L’instance n’a pas encore été découverte"
|
||||
sort: "Trier par"
|
||||
sorts:
|
||||
caughtAtAsc: "Date d’inscription (Ascendant)"
|
||||
@ -1206,6 +1282,7 @@ admin/views/federation.vue:
|
||||
lastCommunicatedAtAsc: "La date et l'heure des interactions plus anciennes"
|
||||
lastCommunicatedAtDesc: "La date et l'heure des nouvelles interactions"
|
||||
notesDesc: "Description des notes"
|
||||
usersAsc: "Peu d'abonnés"
|
||||
followingAsc: "Les moins suivies"
|
||||
followingDesc: "Ayant le plus d'abonné·e·s"
|
||||
followersAsc: "Ayant le moins d'abonné·e·s"
|
||||
@ -1312,8 +1389,6 @@ mobile/views/components/drive.vue:
|
||||
file-count: "Fichier·s"
|
||||
nothing-in-drive: "Rien"
|
||||
folder-is-empty: "Ce dossier est vide"
|
||||
prompt: "Que veux-tu faire ? (Entrez un nombre): <1 → Télécharger le fichier | 2 → Télécharger le fichier avec l'URL | 3 → Créer le dossier | 4 → Modifier le nom du dossier | 5 → Déplacer ce dossier | 6 → Supprimer ce dossier >"
|
||||
deletion-alert: "Désolé ! La suppression d’un dossier n’est pas encore implémentée."
|
||||
folder-name: "Nom du dossier"
|
||||
url-prompt: "URL du fichier que vous souhaitez téléverser"
|
||||
uploading: "Envoi demandé. Le téléversement pourrait prendre un certain temps avant de s'achever."
|
||||
@ -1369,7 +1444,7 @@ mobile/views/components/post-form.vue:
|
||||
quote-placeholder: "Citer ce billet ... (Facultatif)"
|
||||
reply-placeholder: "Répondre à cette note"
|
||||
cw-placeholder: "Commenter le contenu (optionnel)"
|
||||
location-alert: "Votre appareil ne prend pas en charge les services de localisation"
|
||||
geolocation-alert: "Votre appareil ne prend pas en charge les services de localisation"
|
||||
error: "Erreur"
|
||||
username-prompt: "Saisir un nom d'utilisateur"
|
||||
mobile/views/components/sub-note-content.vue:
|
||||
@ -1390,9 +1465,12 @@ mobile/views/components/ui.nav.vue:
|
||||
game: "Jeux"
|
||||
admin: "Admin"
|
||||
about: "À propos de Misskey"
|
||||
mobile/views/pages/drive.vue:
|
||||
contextmenu:
|
||||
upload: "Téléverser un fichier"
|
||||
create-folder: "Créer un dossier"
|
||||
mobile/views/pages/user-lists.vue:
|
||||
title: "Listes"
|
||||
enter-list-name: "Nom de la liste"
|
||||
mobile/views/pages/signup.vue:
|
||||
lets-start: "Votre compte est prêt ! 📦"
|
||||
mobile/views/pages/followers.vue:
|
||||
@ -1521,21 +1599,9 @@ dev/views/new-app.vue:
|
||||
create-app: "Création d’une application"
|
||||
app-name: "Nom de l’application"
|
||||
app-name-desc: "Le nom de votre application"
|
||||
app-name-ex: "p. ex. Misskey pour iOS"
|
||||
app-overview: "Description courte de l’application"
|
||||
app-desc: "Brève description introductive à votre application."
|
||||
app-desc-ex: "p. ex) Misskey pour iOS"
|
||||
callback-url: "L’Url de callback (facultatif)"
|
||||
callback-url-desc: "Vous pouvez définir l’URL de redirection lorsque l’utilisateur s’est authentifié via formulaire d’authentification."
|
||||
authority: "Autorisations "
|
||||
authority-desc: "Sont accessibles via l’API, uniquement les fonctionnalités demandées ici."
|
||||
authority-warning: "Vous pouvez le changer même après avoir créé l'application, mais si vous attribuez une nouvelle permission, toutes les clés utilisateur associées seront dès lors invalides."
|
||||
account-read: "Afficher les informations du compte"
|
||||
account-write: "Modifications des informations du compte"
|
||||
note-write: "Publications."
|
||||
reaction-write: "Ajout et suppression de réactions."
|
||||
following-write: "S’abonner et se désabonner."
|
||||
drive-read: "Lecture du Drive."
|
||||
drive-write: "Téléversement/suppression des fichiers de votre Lecteur."
|
||||
notification-read: "Lire vos notifications."
|
||||
notification-write: "Gestion de vos notifications."
|
||||
|
@ -35,6 +35,7 @@ common:
|
||||
signup: "新規登録"
|
||||
signout: "ログアウト"
|
||||
reload-to-apply-the-setting: "この設定を反映するにはページをリロードする必要があります。今すぐリロードしますか?"
|
||||
fetching-as-ap-object: "連合に照会中"
|
||||
|
||||
got-it: "わかった"
|
||||
customization-tips:
|
||||
@ -74,10 +75,26 @@ common:
|
||||
favorites: "お気に入り"
|
||||
|
||||
permissions:
|
||||
'read:account': "アカウントの情報を見る"
|
||||
'write:account': "アカウントの情報を変更する"
|
||||
'read:drive': "ドライブを見る"
|
||||
'write:drive': "ドライブを操作する"
|
||||
"read:account": "アカウントの情報を見る"
|
||||
"write:account": "アカウントの情報を変更する"
|
||||
"read:blocks": "ブロックを見る"
|
||||
"write:blocks": "ブロックを操作する"
|
||||
"read:drive": "ドライブを見る"
|
||||
"write:drive": "ドライブを操作する"
|
||||
"read:favorites": "お気に入りを見る"
|
||||
"write:favorites": "お気に入りを操作する"
|
||||
"read:following": "フォローの情報を見る"
|
||||
"write:following": "フォロー・フォロー解除する"
|
||||
"read:messaging": "トークを見る"
|
||||
"write:messaging": "トークを操作する"
|
||||
"read:mutes": "ミュートを見る"
|
||||
"write:mutes": "ミュートを操作する"
|
||||
"write:notes": "投稿を作成・削除する"
|
||||
"read:notifications": "通知を見る"
|
||||
"write:notifications": "通知を操作する"
|
||||
"read:reactions": "リアクションを見る"
|
||||
"write:reactions": "リアクションを操作する"
|
||||
"write:votes": "投票する"
|
||||
|
||||
empty-timeline-info:
|
||||
follow-users-to-make-your-timeline: "ユーザーをフォローすると投稿がタイムラインに表示されます。"
|
||||
@ -297,6 +314,7 @@ common:
|
||||
nav: "ナビゲーション"
|
||||
tips: "ヒント"
|
||||
hashtags: "ハッシュタグ"
|
||||
queue: "キュー"
|
||||
|
||||
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||
ai-chan-kawaii: "藍ちゃかわいい"
|
||||
@ -510,8 +528,12 @@ common/views/components/user-menu.vue:
|
||||
mention: "メンション"
|
||||
mute: "ミュート"
|
||||
unmute: "ミュート解除"
|
||||
mute-confirm: "このユーザーをミュートしますか?"
|
||||
unmute-confirm: "このユーザーをミュート解除しますか?"
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
block-confirm: "このユーザーをブロックしますか?"
|
||||
unblock-confirm: "このユーザーをブロック解除しますか?"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
report-abuse: "スパムを報告"
|
||||
@ -519,8 +541,12 @@ common/views/components/user-menu.vue:
|
||||
report-abuse-reported: "管理者に報告されました。ご協力ありがとうございました。"
|
||||
silence: "サイレンス"
|
||||
unsilence: "サイレンス解除"
|
||||
silence-confirm: "このユーザーをサイレンスしますか?"
|
||||
unsilence-confirm: "このユーザーをサイレンス解除しますか?"
|
||||
suspend: "凍結"
|
||||
unsuspend: "凍結解除"
|
||||
suspend-confirm: "このユーザーを凍結しますか?"
|
||||
unsuspend-confirm: "このユーザーを凍結解除しますか?"
|
||||
|
||||
common/views/components/poll.vue:
|
||||
vote-to: "「{}」に投票する"
|
||||
@ -722,6 +748,10 @@ common/views/components/user-list-editor.vue:
|
||||
delete-are-you-sure: "リスト「$1」を削除しますか?"
|
||||
deleted: "削除しました"
|
||||
|
||||
common/views/components/user-lists.vue:
|
||||
create-list: "リストを作成"
|
||||
list-name: "リスト名"
|
||||
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "確認中"
|
||||
no-broadcasts: "お知らせはありません"
|
||||
@ -964,7 +994,6 @@ desktop/views/components/post-form.vue:
|
||||
posting: "投稿中"
|
||||
attach-media-from-local: "PCからメディアを添付"
|
||||
attach-media-from-drive: "ドライブからメディアを添付"
|
||||
attach-cancel: "添付取り消し"
|
||||
insert-a-kao: "v('ω')v"
|
||||
create-poll: "アンケートを作成"
|
||||
text-remain: "残り{}文字"
|
||||
@ -1070,6 +1099,11 @@ common/views/components/password-settings.vue:
|
||||
changed: "パスワードを変更しました"
|
||||
failed: "パスワード変更に失敗しました"
|
||||
|
||||
common/views/components/post-form-attaches.vue:
|
||||
attach-cancel: "添付取り消し"
|
||||
mark-as-sensitive: "閲覧注意に設定"
|
||||
unmark-as-sensitive: "閲覧注意を解除"
|
||||
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "この投稿は非公開です"
|
||||
deleted: "この投稿は削除されました"
|
||||
@ -1124,8 +1158,6 @@ desktop/views/components/received-follow-requests-window.vue:
|
||||
|
||||
desktop/views/components/user-lists-window.vue:
|
||||
title: "リスト"
|
||||
create-list: "リストを作成"
|
||||
list-name: "リスト名"
|
||||
|
||||
desktop/views/components/user-preview.vue:
|
||||
notes: "投稿"
|
||||
@ -1315,7 +1347,9 @@ admin/views/users.vue:
|
||||
unsuspend-confirm: "凍結を解除しますか?"
|
||||
unsuspended: "凍結を解除しました"
|
||||
make-silence: "サイレンス"
|
||||
silence-confirm: "サイレンスしますか?"
|
||||
unmake-silence: "サイレンスの解除"
|
||||
unsilence-confirm: "サイレンスを解除しますか?"
|
||||
verify: "公式アカウントにする"
|
||||
verify-confirm: "公式アカウントにしますか?"
|
||||
verified: "公式アカウントにしました"
|
||||
@ -1529,6 +1563,7 @@ desktop/views/widgets/polls.vue:
|
||||
desktop/views/widgets/post-form.vue:
|
||||
title: "投稿"
|
||||
note: "投稿"
|
||||
something-happened: "何らかの事情で投稿できませんでした。"
|
||||
|
||||
desktop/views/widgets/profile.vue:
|
||||
update-banner: "クリックでバナー編集"
|
||||
@ -1551,12 +1586,11 @@ mobile/views/components/drive.vue:
|
||||
file-count: "ファイル"
|
||||
nothing-in-drive: "ドライブには何もありません"
|
||||
folder-is-empty: "このフォルダは空です"
|
||||
prompt: "何をしますか?(数字を入力してください): <1 → ファイルをアップロード | 2 → ファイルをURLでアップロード | 3 → フォルダ作成 | 4 → このフォルダ名を変更 | 5 → このフォルダを移動 | 6 → このフォルダを削除>"
|
||||
deletion-alert: "ごめんなさい!フォルダの削除は未実装です...。"
|
||||
folder-name: "フォルダー名"
|
||||
here-is-root: "現在いる場所はルートで、フォルダではありません。"
|
||||
url-prompt: "アップロードしたいファイルのURL"
|
||||
uploading: "アップロードをリクエストしました。アップロードが完了するまで時間がかかる場合があります。"
|
||||
folder-name-cannot-empty: "フォルダ名を空白にすることはできません。"
|
||||
|
||||
mobile/views/components/drive-file-chooser.vue:
|
||||
select-file: "ファイルを選択"
|
||||
@ -1621,7 +1655,7 @@ mobile/views/components/post-form.vue:
|
||||
quote-placeholder: "この投稿を引用... (オプション)"
|
||||
reply-placeholder: "この投稿への返信..."
|
||||
cw-placeholder: "内容への注釈 (オプション)"
|
||||
location-alert: "お使いの端末は位置情報に対応していません"
|
||||
geolocation-alert: "お使いの端末は位置情報に対応していません"
|
||||
error: "エラー"
|
||||
username-prompt: "ユーザー名を入力してください"
|
||||
|
||||
@ -1646,9 +1680,17 @@ mobile/views/components/ui.nav.vue:
|
||||
admin: "管理"
|
||||
about: "Misskeyについて"
|
||||
|
||||
mobile/views/pages/drive.vue:
|
||||
contextmenu:
|
||||
upload: "ファイルをアップロード"
|
||||
url-upload: "ファイルをURLでアップロード"
|
||||
create-folder: "フォルダーを作成"
|
||||
rename-folder: "フォルダー名を変更"
|
||||
move-folder: "このフォルダを移動"
|
||||
delete-folder: "このフォルダを削除"
|
||||
|
||||
mobile/views/pages/user-lists.vue:
|
||||
title: "リスト"
|
||||
enter-list-name: "リスト名を入力してください"
|
||||
|
||||
mobile/views/pages/signup.vue:
|
||||
lets-start: "📦 始めましょう"
|
||||
@ -1800,14 +1842,17 @@ dev/views/apps.vue:
|
||||
app-missing: "アプリなし"
|
||||
|
||||
dev/views/new-app.vue:
|
||||
new-app: "新しいアプリケーション"
|
||||
new-app-info: "アプリケーションはAPIからでも作成できます。 (app/create)"
|
||||
create-app: "アプリケーションの作成"
|
||||
app-name: "アプリケーション名"
|
||||
app-name-placeholder: "ex) Misskey for iOS"
|
||||
app-name-desc: "あなたのアプリの名称。"
|
||||
app-name-ex: "ex) Misskey for iOS"
|
||||
app-overview: "アプリの概要"
|
||||
app-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||
app-desc-ex: "ex) Misskey iOSクライアント。"
|
||||
app-overview-placeholder: " ex) Misskey iOSクライアント。"
|
||||
app-overview-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||
callback-url: "コールバックURL (オプション)"
|
||||
callback-url-placeholder: "ex) https://your.app.example.com/callback.php"
|
||||
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
||||
authority: "権限"
|
||||
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
||||
|
@ -60,6 +60,8 @@ common:
|
||||
following: "フォローしとる"
|
||||
followers: "フォロワー"
|
||||
favorites: "お気に入り"
|
||||
permissions:
|
||||
"write:votes": "投票するで"
|
||||
weekday-short:
|
||||
sunday: "日"
|
||||
monday: "月"
|
||||
@ -166,15 +168,6 @@ common:
|
||||
auth/views/form.vue:
|
||||
share-access: "あんたのアカウントに<i>{name}</i>がアクセスしようとしてるで?ええか?"
|
||||
permission-ask: "このアプリは次の権限を要求してんで:"
|
||||
account-read: "アカウントの情報を見させてもらうで。"
|
||||
account-write: "アカウントの情報を操作させてもらうで。"
|
||||
note-write: "投稿させてもらうで。"
|
||||
like-write: "いいねしたりいいね解除させてもらうで。"
|
||||
following-write: "フォローしたりフォロー解除させてもらうで。"
|
||||
drive-read: "ドライブを見させてもらうで。"
|
||||
drive-write: "ドライブを操作させてもらうで。"
|
||||
notification-read: "通知を見させてもらうで。"
|
||||
notification-write: "通知を操作させてもらうで。"
|
||||
cancel: "やめとくわ"
|
||||
accept: "アクセスを許可や!"
|
||||
auth/views/index.vue:
|
||||
@ -485,6 +478,8 @@ common/views/components/profile-editor.vue:
|
||||
enter-password: "パスワードを入れてや"
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "ユーザー"
|
||||
common/views/components/user-lists.vue:
|
||||
list-name: "リスト名"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "見てみるわ…"
|
||||
no-broadcasts: "お知らせはあらへんで"
|
||||
@ -688,7 +683,6 @@ desktop/views/components/post-form.vue:
|
||||
posting: "投稿中"
|
||||
attach-media-from-local: "PCからメディア持ってくる"
|
||||
attach-media-from-drive: "ドライブからメディア持ってくる"
|
||||
attach-cancel: "くっつけるのやめよか"
|
||||
create-poll: "アンケートを作成"
|
||||
text-remain: "残り{}文字"
|
||||
recent-tags: "最近のタグ"
|
||||
@ -779,6 +773,9 @@ common/views/components/password-settings.vue:
|
||||
enter-new-password-again: "もっぺん入れてや"
|
||||
not-match: "パスワードがおうとらん"
|
||||
changed: "パスワード変えたわ"
|
||||
common/views/components/post-form-attaches.vue:
|
||||
mark-as-sensitive: "見たらあかん感じにしとく"
|
||||
unmark-as-sensitive: "やっぱ見せたるわ"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "この投稿は見せられへんわ"
|
||||
deleted: "この投稿なんか無くなってもうたわ"
|
||||
@ -787,12 +784,9 @@ desktop/views/components/sub-note-content.vue:
|
||||
desktop/views/components/settings.tags.vue:
|
||||
add: "増やす"
|
||||
save: "保存"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "タスクマネージャ"
|
||||
desktop/views/components/timeline.vue:
|
||||
home: "ホーム"
|
||||
local: "ローカル"
|
||||
hybrid: "ソーシャル"
|
||||
global: "グローバル"
|
||||
mentions: "あんた宛て"
|
||||
messages: "ダイレクト投稿"
|
||||
@ -823,8 +817,6 @@ desktop/views/components/received-follow-requests-window.vue:
|
||||
reject: "許さん"
|
||||
desktop/views/components/user-lists-window.vue:
|
||||
title: "リスト"
|
||||
create-list: "新しいリストを作成"
|
||||
list-name: "リスト名"
|
||||
desktop/views/components/user-preview.vue:
|
||||
notes: "投稿"
|
||||
following: "フォロー"
|
||||
@ -908,11 +900,6 @@ admin/views/instance.vue:
|
||||
save: "保存"
|
||||
saved: "保存したで!"
|
||||
user-recommendation-config: "このユーザーええで"
|
||||
enable-external-user-recommendation: "外部ユーザーレコメンデーションを使えるようにする"
|
||||
external-user-recommendation-engine: "エンジン"
|
||||
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
||||
external-user-recommendation-timeout: "タイムアウト"
|
||||
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
|
||||
email-config: "メールサーバーの設定"
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使うで。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
@ -1084,8 +1071,6 @@ mobile/views/components/drive.vue:
|
||||
file-count: "ファイル"
|
||||
nothing-in-drive: "ドライブには何もあらへんで。"
|
||||
folder-is-empty: "このフォルダ何もないわ"
|
||||
prompt: "何すんの?(数字を入れてや): <1 → ファイルをアップロード | 2 → ファイルをURLでアップロード | 3 → フォルダ作成 | 4 → このフォルダ名を変更 | 5 → このフォルダを移動 | 6 → このフォルダを削除>"
|
||||
deletion-alert: "フォルダの削除は未実装やねん...。堪忍な!"
|
||||
folder-name: "フォルダー名"
|
||||
url-prompt: "このURLのファイルをアップロードしたいねん"
|
||||
uploading: "アップロードをリクエストしたで。アップロードが完了するまで時間がかかるかも分からん、知らんけど。"
|
||||
@ -1141,7 +1126,7 @@ mobile/views/components/post-form.vue:
|
||||
quote-placeholder: "この投稿を持ってくる(オプション)"
|
||||
reply-placeholder: "この投稿への返信..."
|
||||
cw-placeholder: "内容への注釈 (オプション)"
|
||||
location-alert: "あんさんのつことる端末は位置情報に対応しとらんみたいやわ、知らんけど。"
|
||||
geolocation-alert: "あんさんのつことる端末は位置情報に対応しとらんみたいやわ、知らんけど。"
|
||||
error: "エラー"
|
||||
username-prompt: "ユーザー名を入力してや"
|
||||
mobile/views/components/sub-note-content.vue:
|
||||
@ -1162,9 +1147,12 @@ mobile/views/components/ui.nav.vue:
|
||||
game: "ゲーム"
|
||||
admin: "管理"
|
||||
about: "Misskeyってなんや?"
|
||||
mobile/views/pages/drive.vue:
|
||||
contextmenu:
|
||||
upload: "ファイル上げる"
|
||||
create-folder: "フォルダー作る"
|
||||
mobile/views/pages/user-lists.vue:
|
||||
title: "リスト"
|
||||
enter-list-name: "リスト名を入力してや"
|
||||
mobile/views/pages/signup.vue:
|
||||
lets-start: "📦 始めようや"
|
||||
mobile/views/pages/followers.vue:
|
||||
@ -1174,7 +1162,6 @@ mobile/views/pages/following.vue:
|
||||
mobile/views/pages/home.vue:
|
||||
home: "ホーム"
|
||||
local: "ローカル"
|
||||
hybrid: "ソーシャル"
|
||||
global: "グローバル"
|
||||
mentions: "あんた宛て"
|
||||
messages: "ダイレクト投稿"
|
||||
@ -1229,7 +1216,6 @@ deck:
|
||||
widgets: "ウィジェット"
|
||||
home: "ホーム"
|
||||
local: "ローカル"
|
||||
hybrid: "ソーシャル"
|
||||
hashtag: "ハッシュタグ"
|
||||
global: "グローバル"
|
||||
mentions: "あんた宛て"
|
||||
@ -1289,21 +1275,9 @@ dev/views/new-app.vue:
|
||||
create-app: "アプリケーション作る"
|
||||
app-name: "アプリケーションの名前"
|
||||
app-name-desc: "あんたのアプリの名前。"
|
||||
app-name-ex: "ex) 関西ミスキー保安協会"
|
||||
app-overview: "このアプリどんなん?"
|
||||
app-desc: "あんたのアプリどんなんか教えて"
|
||||
app-desc-ex: "ex) 関西人なら誰でも口ずさめるこのCMがついにMisskeyへ。"
|
||||
callback-url: "コールバックURL (無くてもええで)"
|
||||
callback-url-desc: "ユーザーが認証フォームで認証した後どこに連れてくかを設定できるで"
|
||||
authority: "権限"
|
||||
authority-desc: "ここにチェックした機能しかAPIからアクセスできひんから気ぃつけてな"
|
||||
authority-warning: "アプリ作った後でも変えれるけど、新しいやつ追加したらそん時関連付いてるユーザーキーは全部ほかされるで。"
|
||||
account-read: "アカウントの情報見せて"
|
||||
account-write: "アカウントの情報いじらせて"
|
||||
note-write: "投稿させて"
|
||||
reaction-write: "リアクションしたりそれをキャンセルさせて"
|
||||
following-write: "フォローとかフォロー解除させて"
|
||||
drive-read: "ドライブ見せて"
|
||||
drive-write: "ドライブいじらせて"
|
||||
notification-read: "通知見せて"
|
||||
notification-write: "通知いじらせて"
|
||||
|
@ -69,6 +69,12 @@ common:
|
||||
following: "팔로우 중"
|
||||
followers: "팔로워"
|
||||
favorites: "즐겨찾기"
|
||||
permissions:
|
||||
"read:account": "계정 정보 보기"
|
||||
"write:account": "계정 정보 변경"
|
||||
"read:drive": "드라이브 보기"
|
||||
"write:drive": "드라이브 수정"
|
||||
"write:votes": "투표하기"
|
||||
empty-timeline-info:
|
||||
follow-users-to-make-your-timeline: "사용자를 팔로우하면 글이 타임라인에 표시됩니다."
|
||||
explore: "사용자 탐색"
|
||||
@ -276,21 +282,13 @@ common:
|
||||
nav: "내비게이션"
|
||||
tips: "팁"
|
||||
hashtags: "해시태그"
|
||||
queue: "큐"
|
||||
dev: "앱을 만드는 데 실패했습니다. 다시 시도하시기 바랍니다."
|
||||
ai-chan-kawaii: "아이쨩 귀여워"
|
||||
you: "당신"
|
||||
auth/views/form.vue:
|
||||
share-access: "<i>{name}</i>가 당신의 계정에 엑세스하도록 허용하시겠습니까?"
|
||||
permission-ask: "이 앱은 다음의 권한을 요청합니다:"
|
||||
account-read: "계정 정보 보기."
|
||||
account-write: "계정 정보의 수정."
|
||||
note-write: "게시하기."
|
||||
like-write: "좋아요 하거나 좋아요 해제하기."
|
||||
following-write: "팔로우하거나 팔로우를 취소하기."
|
||||
drive-read: "드라이브 보기."
|
||||
drive-write: "드라이브의 수정."
|
||||
notification-read: "알림 읽기."
|
||||
notification-write: "알림 수정하기."
|
||||
cancel: "취소"
|
||||
accept: "접근 권한 허용"
|
||||
auth/views/index.vue:
|
||||
@ -669,6 +667,8 @@ common/views/components/user-list-editor.vue:
|
||||
remove-user: "이 리스트에서 제거"
|
||||
delete-are-you-sure: "리스트 \"$1\"을 삭제하시겠습니까?"
|
||||
deleted: "삭제하였습니다"
|
||||
common/views/components/user-lists.vue:
|
||||
list-name: "리스트 이름"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "확인중"
|
||||
no-broadcasts: "공지사항이 없습니다"
|
||||
@ -877,7 +877,6 @@ desktop/views/components/post-form.vue:
|
||||
posting: "게시중"
|
||||
attach-media-from-local: "PC에서 미디어 첨부"
|
||||
attach-media-from-drive: "드라이브에서 미디어 첨부"
|
||||
attach-cancel: "첨부 취소"
|
||||
insert-a-kao: "v('ω')v"
|
||||
create-poll: "투표 만들기"
|
||||
text-remain: "{}문자 남음"
|
||||
@ -970,6 +969,10 @@ common/views/components/password-settings.vue:
|
||||
not-match: "새 비밀번호가 일치하지 않습니다"
|
||||
changed: "비밀번호를 변경하였습니다"
|
||||
failed: "비밀번호 변경을 실패하였습니다."
|
||||
common/views/components/post-form-attaches.vue:
|
||||
attach-cancel: "첨부 취소"
|
||||
mark-as-sensitive: "열람주의로 설정"
|
||||
unmark-as-sensitive: "열람주의 해제"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "이 글은 비공개입니다"
|
||||
deleted: "이 글은 삭제되었습니다"
|
||||
@ -980,8 +983,6 @@ desktop/views/components/settings.tags.vue:
|
||||
query: "쿼리 (생략 가능)"
|
||||
add: "추가"
|
||||
save: "저장"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "작업 관리자"
|
||||
desktop/views/components/timeline.vue:
|
||||
home: "홈"
|
||||
local: "로컬"
|
||||
@ -1016,8 +1017,6 @@ desktop/views/components/received-follow-requests-window.vue:
|
||||
reject: "거부"
|
||||
desktop/views/components/user-lists-window.vue:
|
||||
title: "리스트"
|
||||
create-list: "리스트 만들기"
|
||||
list-name: "리스트 이름"
|
||||
desktop/views/components/user-preview.vue:
|
||||
notes: "글"
|
||||
following: "팔로잉"
|
||||
@ -1115,11 +1114,6 @@ admin/views/instance.vue:
|
||||
save: "저장"
|
||||
saved: "저장하였습니다"
|
||||
user-recommendation-config: "추천 사용자"
|
||||
enable-external-user-recommendation: "외부 사용자 추천 활성화"
|
||||
external-user-recommendation-engine: "엔진"
|
||||
external-user-recommendation-engine-desc: "예: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
||||
external-user-recommendation-timeout: "타임 아웃"
|
||||
external-user-recommendation-timeout-desc: "밀리초 (예: 300000)"
|
||||
email-config: "메일 서버 설정"
|
||||
email-config-info: "메일 주소 확인 혹은 비밀번호 재설정에 사용 됩니다."
|
||||
enable-email: "메일 발신 활성화"
|
||||
@ -1412,8 +1406,6 @@ mobile/views/components/drive.vue:
|
||||
file-count: "파일"
|
||||
nothing-in-drive: "드라이브에 아무것도 없습니다"
|
||||
folder-is-empty: "폴더가 비어있습니다"
|
||||
prompt: "무엇을 하시겠습니까? (숫자를 입력하여 주십시오): <1 → 파일 업로드 | 2 → 파일을 URL에서 업로드 | 3 → 폴더 만들기 | 4 → 이 폴더의 이름을 변경 | 5 → 현재 폴더 이동| 6 → 현재 폴더 삭제>"
|
||||
deletion-alert: "죄송합니다! 폴더 삭제는 아직 구현되지 않았습니다..."
|
||||
folder-name: "폴더 이름"
|
||||
here-is-root: "현재 경로는 루트 경로로 폴더가 아닙니다."
|
||||
url-prompt: "업로드 하려는 파일의 URL"
|
||||
@ -1470,7 +1462,7 @@ mobile/views/components/post-form.vue:
|
||||
quote-placeholder: "이 글을 인용... (선택적)"
|
||||
reply-placeholder: "이 글에 답글..."
|
||||
cw-placeholder: "내용 주석 (선택적)"
|
||||
location-alert: "사용하시는 장치가 위치정보 기능에 대응하지 않습니다"
|
||||
geolocation-alert: "사용하시는 장치가 위치정보 기능에 대응하지 않습니다"
|
||||
error: "오류"
|
||||
username-prompt: "사용자명을 입력하여 주십시오"
|
||||
mobile/views/components/sub-note-content.vue:
|
||||
@ -1491,9 +1483,12 @@ mobile/views/components/ui.nav.vue:
|
||||
game: "게임"
|
||||
admin: "관리"
|
||||
about: "Misskey에 대하여"
|
||||
mobile/views/pages/drive.vue:
|
||||
contextmenu:
|
||||
upload: "파일 업로드"
|
||||
create-folder: "폴더 만들기"
|
||||
mobile/views/pages/user-lists.vue:
|
||||
title: "리스트"
|
||||
enter-list-name: "리스트명을 입력하십시오"
|
||||
mobile/views/pages/signup.vue:
|
||||
lets-start: "📦 이제 시작해도 됩니다"
|
||||
mobile/views/pages/followers.vue:
|
||||
@ -1623,21 +1618,9 @@ dev/views/new-app.vue:
|
||||
create-app: "어플리케이션 생성"
|
||||
app-name: "어플리케이션 이름"
|
||||
app-name-desc: "앱의 이름."
|
||||
app-name-ex: "ex) Misskey for iOS"
|
||||
app-overview: "앱 개요"
|
||||
app-desc: "어플리케이션에 대한 간단한 설명."
|
||||
app-desc-ex: "ex) Misskey iOS 클라이언트."
|
||||
callback-url: "콜백 URL (옵션)"
|
||||
callback-url-desc: "사용자가 인증 폼에서 인증한 뒤 리다이렉트할 URL을 설정합니다."
|
||||
authority: "권한"
|
||||
authority-desc: "이곳에서 요청한 권한에 한정하여 API로 액세스할 수 있습니다."
|
||||
authority-warning: "앱을 생성한 뒤에도 변경할 수 있지만, 새로운 권한을 설정하는 경우 그 시점부터 예전에 발급받았던 유저 키는 모두 무효화됩니다."
|
||||
account-read: "계정 정보 보기."
|
||||
account-write: "계정 정보 편집."
|
||||
note-write: "글 쓰기."
|
||||
reaction-write: "리액션을 하거나 리액션을 취소할 수 있음."
|
||||
following-write: "팔로우하거나 팔로우 해제하기."
|
||||
drive-read: "드라이브 보기."
|
||||
drive-write: "드라이브를 조작."
|
||||
notification-read: "알림 보기."
|
||||
notification-write: "알림 조작."
|
||||
|
@ -23,6 +23,8 @@ common:
|
||||
timeline: "Tijdlijn"
|
||||
followers: "Volgers"
|
||||
favorites: "Deze notitie toevoegen aan favorieten"
|
||||
permissions:
|
||||
"write:votes": "Stemmen"
|
||||
weekday-short:
|
||||
sunday: "Z"
|
||||
monday: "M"
|
||||
@ -334,7 +336,6 @@ desktop/views/components/post-form.vue:
|
||||
posting: "Bezig met plaatsen"
|
||||
attach-media-from-local: "Media bijvoegen van je computer"
|
||||
attach-media-from-drive: "Media bijvoegen uit je Drive"
|
||||
attach-cancel: "Bijlage annuleren"
|
||||
create-poll: "Peiling creëren"
|
||||
text-remain: "{} resterende tekens"
|
||||
desktop/views/components/post-form-window.vue:
|
||||
@ -384,8 +385,6 @@ desktop/views/components/sub-note-content.vue:
|
||||
poll: "Peilingen"
|
||||
desktop/views/components/settings.tags.vue:
|
||||
add: "Toevoegen"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "Taakbeheer"
|
||||
desktop/views/components/timeline.vue:
|
||||
home: "Startpagina"
|
||||
local: "Lokaal"
|
||||
@ -404,7 +403,6 @@ desktop/views/components/ui.header.search.vue:
|
||||
placeholder: "Zoeken"
|
||||
desktop/views/components/user-lists-window.vue:
|
||||
title: "Lijsten"
|
||||
create-list: "Lijst creëren"
|
||||
desktop/views/components/user-preview.vue:
|
||||
notes: "Berichten"
|
||||
following: "Volgend"
|
||||
@ -558,6 +556,10 @@ mobile/views/components/ui.nav.vue:
|
||||
user-lists: "Lijsten"
|
||||
game: "Othello spelen"
|
||||
about: "Over Misskey"
|
||||
mobile/views/pages/drive.vue:
|
||||
contextmenu:
|
||||
upload: "Bestand uploaden"
|
||||
create-folder: "Map creëren"
|
||||
mobile/views/pages/user-lists.vue:
|
||||
title: "Lijsten"
|
||||
mobile/views/pages/home.vue:
|
||||
|
@ -37,6 +37,8 @@ common:
|
||||
home: "Hjem"
|
||||
followers: "Følgere"
|
||||
favorites: "Merket som favoritt"
|
||||
permissions:
|
||||
"write:votes": "Stem"
|
||||
weekday-short:
|
||||
sunday: "S"
|
||||
monday: "M"
|
||||
@ -190,6 +192,8 @@ common/views/components/profile-editor.vue:
|
||||
user-lists: "Lister"
|
||||
common/views/components/user-list-editor.vue:
|
||||
users: "Bruker"
|
||||
common/views/components/user-lists.vue:
|
||||
list-name: "Liste navn"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "Henter"
|
||||
next: "Neste"
|
||||
@ -308,7 +312,6 @@ desktop/views/components/received-follow-requests-window.vue:
|
||||
reject: "Avslå"
|
||||
desktop/views/components/user-lists-window.vue:
|
||||
title: "Brukerlister"
|
||||
list-name: "Liste navn"
|
||||
desktop/views/components/user-preview.vue:
|
||||
notes: "Innlegg"
|
||||
following: "Følger"
|
||||
|
@ -23,6 +23,7 @@ common:
|
||||
enter-password: "Wprowadź Hasło"
|
||||
2fa: "Uwierzytelnienie dwuetapowe"
|
||||
customize-home: "Dostosuj stronę główną"
|
||||
featured-notes: "Wyróżnienia"
|
||||
dark-mode: "Tryb ciemny"
|
||||
signin: "Zaloguj się"
|
||||
signup: "Rejestracja"
|
||||
@ -61,6 +62,9 @@ common:
|
||||
following: "Śledzisz"
|
||||
followers: "Śledzący"
|
||||
favorites: "Moje ulubione"
|
||||
permissions:
|
||||
"read:drive": "Wyświetl dysk"
|
||||
"write:votes": "Zagłosuj"
|
||||
empty-timeline-info:
|
||||
explore: "Poznaj"
|
||||
weekday-short:
|
||||
@ -201,15 +205,6 @@ common:
|
||||
you: "Ty"
|
||||
auth/views/form.vue:
|
||||
permission-ask: "Ta aplikacja wymaga następujących uprawnień:"
|
||||
account-read: "Wyświetlanie informacji o koncie:"
|
||||
account-write: "Modyfikowanie informacji o koncie:"
|
||||
note-write: "Publikacja."
|
||||
like-write: "Reagowanie na wpisy."
|
||||
following-write: "Śledzenie i cofanie śledzenia."
|
||||
drive-read: "Odczytywanie Twojego dysku."
|
||||
drive-write: "Wysyłanie i usuwanie plików na Twoim dysku."
|
||||
notification-read: "Odczytywanie Twoich powiadomień."
|
||||
notification-write: "Zarządzanie Twoimi powiadomieniami."
|
||||
cancel: "Anuluj"
|
||||
accept: "Przyznaj dostęp."
|
||||
auth/views/index.vue:
|
||||
@ -517,6 +512,8 @@ common/views/components/user-list-editor.vue:
|
||||
remove-user: "Usuń z tej listy"
|
||||
delete-are-you-sure: "Usunąć listę \"$1\"?"
|
||||
deleted: "Usunięto"
|
||||
common/views/components/user-lists.vue:
|
||||
list-name: "Nazwa listy"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "Sprawdzanie"
|
||||
no-broadcasts: "Brak transmisji"
|
||||
@ -715,7 +712,6 @@ desktop/views/components/post-form.vue:
|
||||
posting: "Wysyłanie"
|
||||
attach-media-from-local: "Załącz zawartość multimedialną z komputera"
|
||||
attach-media-from-drive: "Załącz zawartość multimedialną z dysku"
|
||||
attach-cancel: "Usuń załącznik"
|
||||
insert-a-kao: "v('ω')v"
|
||||
create-poll: "Utwórz ankietę"
|
||||
text-remain: "pozostałe znaki: {}"
|
||||
@ -795,6 +791,9 @@ common/views/components/password-settings.vue:
|
||||
enter-current-password: "Wprowadź obecne hasło"
|
||||
enter-new-password: "Wprowadź nowe hasło"
|
||||
enter-new-password-again: "Wprowadź ponownie nowe hasło"
|
||||
common/views/components/post-form-attaches.vue:
|
||||
mark-as-sensitive: "Oznacz jako zawartość wrażliwą"
|
||||
unmark-as-sensitive: "Cofnij oznaczenie jako zawartość wrażliwą"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "ten wpis jest prywatny"
|
||||
deleted: "ten wpis został usunięty"
|
||||
@ -805,12 +804,9 @@ desktop/views/components/settings.tags.vue:
|
||||
query: "Zapytanie (opcjonalne)"
|
||||
add: "Dodaj"
|
||||
save: "Zapisz"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "Menedżer zadań"
|
||||
desktop/views/components/timeline.vue:
|
||||
home: "Strona główna"
|
||||
local: "Lokalne"
|
||||
hybrid: "Społeczność"
|
||||
global: "Globalne"
|
||||
mentions: "Wspomnienia"
|
||||
messages: "Bezpośrednie wpisy"
|
||||
@ -840,8 +836,6 @@ desktop/views/components/received-follow-requests-window.vue:
|
||||
reject: "Odmów"
|
||||
desktop/views/components/user-lists-window.vue:
|
||||
title: "Listy"
|
||||
create-list: "Utwórz listę"
|
||||
list-name: "Nazwa listy"
|
||||
desktop/views/components/user-preview.vue:
|
||||
notes: "Wpisy"
|
||||
following: "Śledzeni"
|
||||
@ -882,8 +876,6 @@ admin/views/instance.vue:
|
||||
save: "Zapisz"
|
||||
saved: "Zapisano"
|
||||
user-recommendation-config: "Polecani użytkownicy"
|
||||
external-user-recommendation-engine: "Silnik"
|
||||
external-user-recommendation-engine-desc: "Np: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
||||
email: "Adres e-mail"
|
||||
admin/views/charts.vue:
|
||||
notes: "Wpisy"
|
||||
@ -1034,8 +1026,6 @@ mobile/views/components/drive.vue:
|
||||
file-count: "Plik(i)"
|
||||
nothing-in-drive: "Pusto"
|
||||
folder-is-empty: "Ten katalog jest pusty"
|
||||
prompt: "Co chcesz zrobić? (wprowadź odpowiednią cyfrę): <1 → Wysłać plik | 2 → Wysłać plik z adresu URL | 3 → Utworzyć katalog | 4 → Zmienić nazwę tego katalogu | 5 → Przenieść ten katalog | 6 → Usunąć ten katalog>"
|
||||
deletion-alert: "Przepraszamy. Usuwanie katalogów nie zostało jeszcze zaimplementowane."
|
||||
folder-name: "Nazwa katalogu"
|
||||
url-prompt: "Adres URL pliku, który chcesz wysłać"
|
||||
uploading: "Rozpoczęto wysyłanie. Może to trochę potrwać."
|
||||
@ -1091,7 +1081,7 @@ mobile/views/components/post-form.vue:
|
||||
quote-placeholder: "Zacytuj ten wpis… (nieobowiązkowe)"
|
||||
reply-placeholder: "Odpowiedź na ten wpis…"
|
||||
cw-placeholder: "Treść ostrzeżenia (opcjonalnie)"
|
||||
location-alert: "Twoje urządzenie nie pozwala na przekazywanie informacji o lokalizacji"
|
||||
geolocation-alert: "Twoje urządzenie nie obsługuje geolokalizacji."
|
||||
error: "Błąd"
|
||||
username-prompt: "Wprowadź nazwę użytkownika"
|
||||
mobile/views/components/sub-note-content.vue:
|
||||
@ -1111,15 +1101,17 @@ mobile/views/components/ui.nav.vue:
|
||||
game: "Gry"
|
||||
admin: "Admin"
|
||||
about: "O Misskey"
|
||||
mobile/views/pages/drive.vue:
|
||||
contextmenu:
|
||||
upload: "Wyślij plik"
|
||||
create-folder: "Utwórz katalog"
|
||||
mobile/views/pages/user-lists.vue:
|
||||
title: "Listy"
|
||||
enter-list-name: "Wprowadź nazwę listy"
|
||||
mobile/views/pages/signup.vue:
|
||||
lets-start: "Rozpocznijmy! 📦"
|
||||
mobile/views/pages/home.vue:
|
||||
home: "Strona główna"
|
||||
local: "Lokalne"
|
||||
hybrid: "Społeczność"
|
||||
global: "Globalne"
|
||||
mentions: "Wspomnienia"
|
||||
messages: "Bezpośrednie wpisy"
|
||||
@ -1169,7 +1161,6 @@ deck:
|
||||
widgets: "Widżety"
|
||||
home: "Strona główna"
|
||||
local: "Lokalne"
|
||||
hybrid: "Społeczność"
|
||||
hashtag: "Hashtag"
|
||||
global: "Globalne"
|
||||
mentions: "Wspomnienia"
|
||||
@ -1224,11 +1215,3 @@ dev/views/apps.vue:
|
||||
dev/views/new-app.vue:
|
||||
app-name: "Nazwa Aplikacji"
|
||||
authority: "Uprawnienia"
|
||||
account-read: "Wyświetlanie informacji o koncie:"
|
||||
account-write: "Modyfikowanie informacji o koncie:"
|
||||
note-write: "Publikacja."
|
||||
following-write: "Śledzenie i cofanie śledzenia."
|
||||
drive-read: "Odczytywanie Twojego dysku."
|
||||
drive-write: "Wysyłanie i usuwanie plików na Twoim dysku."
|
||||
notification-read: "Odczytywanie Twoich powiadomień."
|
||||
notification-write: "Zarządzanie Twoimi powiadomieniami."
|
||||
|
@ -119,9 +119,6 @@ common:
|
||||
you: "Você"
|
||||
auth/views/form.vue:
|
||||
permission-ask: "Este aplicativo precisa das seguintes permissões:"
|
||||
account-read: "Ver informações da conta."
|
||||
account-write: "Modificar informações da conta."
|
||||
note-write: "Publicar"
|
||||
cancel: "Cancelar"
|
||||
accept: "Permitir acesso"
|
||||
auth/views/index.vue:
|
||||
@ -292,7 +289,3 @@ docs:
|
||||
description: "Descrição"
|
||||
dev/views/index.vue:
|
||||
manage-apps: "Gerenciar aplicativos"
|
||||
dev/views/new-app.vue:
|
||||
account-read: "Ver informações da conta."
|
||||
account-write: "Modificar informações da conta."
|
||||
note-write: "Publicar"
|
||||
|
@ -34,6 +34,7 @@ common:
|
||||
signup: "注册"
|
||||
signout: "退出"
|
||||
reload-to-apply-the-setting: "必须重新加载页面以应用此设置。 确实要立即重新加载吗?"
|
||||
fetching-as-ap-object: "联合查询"
|
||||
got-it: "知道了"
|
||||
customization-tips:
|
||||
title: "自定义提示"
|
||||
@ -69,6 +70,27 @@ common:
|
||||
following: "正在关注"
|
||||
followers: "关注者"
|
||||
favorites: "最爱"
|
||||
permissions:
|
||||
"read:account": "查看账户信息"
|
||||
"write:account": "更改我的帐户信息"
|
||||
"read:blocks": "查看黑名单"
|
||||
"write:blocks": "编辑黑名单"
|
||||
"read:drive": "查看网盘"
|
||||
"write:drive": "管理网盘文件"
|
||||
"read:favorites": "查看收藏夹"
|
||||
"write:favorites": "编辑收藏夹"
|
||||
"read:following": "查看关注信息"
|
||||
"write:following": "关注/取消关注"
|
||||
"read:messaging": "查看对话"
|
||||
"write:messaging": "对话操作"
|
||||
"read:mutes": "查看屏蔽列表"
|
||||
"write:mutes": "编辑屏蔽列表"
|
||||
"write:notes": "创建或删除帖子"
|
||||
"read:notifications": "查看通知"
|
||||
"write:notifications": "管理通知"
|
||||
"read:reactions": "查看回应"
|
||||
"write:reactions": "回应操作"
|
||||
"write:votes": "投票"
|
||||
empty-timeline-info:
|
||||
follow-users-to-make-your-timeline: "关注其他用户时,帖子将显示在时间线中。"
|
||||
explore: "查找用户"
|
||||
@ -124,7 +146,7 @@ common:
|
||||
apps: "应用程序"
|
||||
tags: "标签"
|
||||
mute-and-block: "屏蔽/拉黑"
|
||||
blocking: "屏蔽"
|
||||
blocking: "拉黑"
|
||||
security: "安全性"
|
||||
signin: "登录历史"
|
||||
password: "密码"
|
||||
@ -141,7 +163,7 @@ common:
|
||||
keep-cw: "保留内容警告"
|
||||
keep-cw-desc: "在回复帖子时,如果原帖设置了内容警告,默认情况下回帖也会设置相同的内容警告。"
|
||||
i-like-sushi: "相比于布丁来说, 我更喜欢寿司。"
|
||||
show-reversi-board-labels: "在 Reversi 中显示行和列表签"
|
||||
show-reversi-board-labels: "在黑白棋中显示行和列表签"
|
||||
use-avatar-reversi-stones: "用头像作为黑白棋的棋子"
|
||||
disable-animated-mfm: "在帖子中禁用动画文本"
|
||||
disable-showing-animated-images: "不播放动画"
|
||||
@ -184,9 +206,9 @@ common:
|
||||
show-clock-on-header: "在右上角显示时钟"
|
||||
show-reply-target: "显示回复目标"
|
||||
timeline: "时间线"
|
||||
show-my-renotes: "在时间线上显示我的Renote"
|
||||
show-renoted-my-notes: "在时间线上显示我的帖子的Renote"
|
||||
show-local-renotes: "在时间线上显示本地帖子的Renote"
|
||||
show-my-renotes: "在时间线上显示我的转推"
|
||||
show-renoted-my-notes: "在时间线上显示我的帖子的转推"
|
||||
show-local-renotes: "在时间线上显示本地帖子的转推"
|
||||
remain-deleted-note: "继续显示已删除的帖子"
|
||||
sound: "声音"
|
||||
enable-sounds: "开启声音"
|
||||
@ -236,7 +258,7 @@ common:
|
||||
is-remote-user: "此用户信息可能不准确。"
|
||||
is-remote-post: "该投稿已被复制."
|
||||
view-on-remote: "查看准确的信息"
|
||||
renoted-by: "由 {user} Renote"
|
||||
renoted-by: "由 {user} 转推"
|
||||
no-notes: "没有帖子"
|
||||
turn-on-darkmode: "切换暗色主题"
|
||||
turn-off-darkmode: "切换亮色主题"
|
||||
@ -276,21 +298,13 @@ common:
|
||||
nav: "导航"
|
||||
tips: "提示"
|
||||
hashtags: "标签"
|
||||
queue: "队列"
|
||||
dev: "构建应用程序失败,请再试一次。"
|
||||
ai-chan-kawaii: "小蓝真可爱"
|
||||
you: "您"
|
||||
auth/views/form.vue:
|
||||
share-access: "您要允许<i>{name}</i>来访问您的账户吗?"
|
||||
permission-ask: "这个应用程序需要以下权限:"
|
||||
account-read: "查看账户信息"
|
||||
account-write: "修改账户信息"
|
||||
note-write: "投稿。"
|
||||
like-write: "点赞或取消赞。"
|
||||
following-write: "关注或取消关注。"
|
||||
drive-read: "查看您的网盘"
|
||||
drive-write: "管理网盘文件。"
|
||||
notification-read: "查看通知。"
|
||||
notification-write: "管理通知。"
|
||||
cancel: "取消"
|
||||
accept: "允许访问。"
|
||||
auth/views/index.vue:
|
||||
@ -325,8 +339,8 @@ common/views/components/games/reversi/reversi.game.vue:
|
||||
surrender: "认输"
|
||||
surrendered: "已认输"
|
||||
is-llotheo: "棋子较少一方获胜(LLoTheO规则)"
|
||||
looped-map: "环形棋盘"
|
||||
can-put-everywhere: "可以下在任意放置"
|
||||
looped-map: "循环棋盘"
|
||||
can-put-everywhere: "可以下在任意位置"
|
||||
common/views/components/games/reversi/reversi.index.vue:
|
||||
title: "Misskey 黑白棋"
|
||||
sub-title: "和其他人一起来玩Misskey黑白棋"
|
||||
@ -350,8 +364,8 @@ common/views/components/games/reversi/reversi.room.vue:
|
||||
black-is: "{}是黑"
|
||||
rules: "规则"
|
||||
is-llotheo: "棋子较少一方获胜(LLoTheO规则)"
|
||||
looped-map: "环形棋盘"
|
||||
can-put-everywhere: "可以下在任意放置"
|
||||
looped-map: "循环棋盘"
|
||||
can-put-everywhere: "可以下在任意位置"
|
||||
settings-of-the-bot: "机器人设定"
|
||||
this-game-is-started-soon: "游戏即将在数秒后开始"
|
||||
waiting-for-other: "等待对手准备"
|
||||
@ -467,8 +481,8 @@ common/views/components/note-menu.vue:
|
||||
unfavorite: "取消收藏"
|
||||
watch: "关注"
|
||||
unwatch: "取消关注"
|
||||
pin: "固定个人资料"
|
||||
unpin: "解除固定"
|
||||
pin: "置顶"
|
||||
unpin: "取消置顶"
|
||||
delete: "删除"
|
||||
delete-confirm: "确定删除这个投稿吗?"
|
||||
remote: "显示原始投稿"
|
||||
@ -476,8 +490,12 @@ common/views/components/user-menu.vue:
|
||||
mention: "提到"
|
||||
mute: "屏蔽"
|
||||
unmute: "解除屏蔽"
|
||||
mute-confirm: "屏蔽此用户?"
|
||||
unmute-confirm: "取消屏蔽用户?"
|
||||
block: "拉黑"
|
||||
unblock: "取消拉黑"
|
||||
block-confirm: "确定拉黑此用户?"
|
||||
unblock-confirm: "取消拉黑此用户?"
|
||||
push-to-list: "添加至列表"
|
||||
select-list: "请选择一个列表"
|
||||
report-abuse: "举报骚扰"
|
||||
@ -485,8 +503,12 @@ common/views/components/user-menu.vue:
|
||||
report-abuse-reported: "已报告给管理员。 非常感谢你的合作。"
|
||||
silence: "禁言"
|
||||
unsilence: "解除禁言"
|
||||
silence-confirm: "确认屏蔽此用户?"
|
||||
unsilence-confirm: "取消屏蔽此用户?"
|
||||
suspend: "冻结"
|
||||
unsuspend: "解除冻结"
|
||||
suspend-confirm: "确认冻结此用户?"
|
||||
unsuspend-confirm: "确认解冻此用户?"
|
||||
common/views/components/poll.vue:
|
||||
vote-to: "为\"{}\"投票"
|
||||
vote-count: "{}票"
|
||||
@ -669,6 +691,9 @@ common/views/components/user-list-editor.vue:
|
||||
remove-user: "从此列表中删除"
|
||||
delete-are-you-sure: "删除列表“$1”?"
|
||||
deleted: "已删除"
|
||||
common/views/components/user-lists.vue:
|
||||
create-list: "创建列表"
|
||||
list-name: "列表名称"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "确认中"
|
||||
no-broadcasts: "没有公告"
|
||||
@ -711,7 +736,7 @@ common/views/widgets/tips.vue:
|
||||
tips-line8: "可以从设置中定制主页。"
|
||||
tips-line9: "Misskey 根据 AGPLv3 获得许可。"
|
||||
tips-line10: "使用Time Machine(时光机)小部件可以轻松追溯到过去的时间轴。"
|
||||
tips-line11: "您可以点击“...”将帖子固定到用户页面"
|
||||
tips-line11: "您可以点击“...”将帖子置顶到用户页面"
|
||||
tips-line13: "附在帖子上的所有文件都会保存到网盘中。"
|
||||
tips-line14: "在自定义首页布局时,您可以右键单击窗口小部件以更改其设计。"
|
||||
tips-line17: "用“**”围绕文本将突出显示它。"
|
||||
@ -746,7 +771,7 @@ desktop/views/components/activity.chart.vue:
|
||||
total: "黑 ... 总计"
|
||||
notes: "蓝 ... 投稿"
|
||||
replies: "红 ... 回复"
|
||||
renotes: "绿 ... 转发"
|
||||
renotes: "绿 ... 转推"
|
||||
desktop/views/components/activity.vue:
|
||||
title: "活动"
|
||||
toggle: "切换显示"
|
||||
@ -843,12 +868,12 @@ desktop/views/components/note-detail.vue:
|
||||
private: "私密投稿"
|
||||
deleted: "投稿已删除"
|
||||
location: "位置信息"
|
||||
renote: "转发"
|
||||
renote: "转推"
|
||||
add-reaction: "回应"
|
||||
undo-reaction: "取消回应"
|
||||
desktop/views/components/note.vue:
|
||||
reply: "回复"
|
||||
renote: "Renote"
|
||||
renote: "转推"
|
||||
add-reaction: "回应"
|
||||
undo-reaction: "取消回应"
|
||||
detail: "详细信息"
|
||||
@ -867,17 +892,16 @@ desktop/views/components/post-form.vue:
|
||||
quote-placeholder: "引用这个帖子…"
|
||||
submit: "投稿"
|
||||
reply: "回复"
|
||||
renote: "转发"
|
||||
renote: "转推"
|
||||
posted: "已发送投稿!"
|
||||
replied: "已回复!"
|
||||
reposted: "已转发!"
|
||||
reposted: "已转推!"
|
||||
note-failed: "发帖失败"
|
||||
reply-failed: "回复失败"
|
||||
renote-failed: "转发失败"
|
||||
renote-failed: "转推失败"
|
||||
posting: "发送中"
|
||||
attach-media-from-local: "从设备中添加媒体文件"
|
||||
attach-media-from-drive: "从网盘中添加媒体文件"
|
||||
attach-cancel: "删除附件"
|
||||
insert-a-kao: "v('ω')v"
|
||||
create-poll: "创建一个投票"
|
||||
text-remain: "还剩{}字"
|
||||
@ -899,13 +923,13 @@ desktop/views/components/progress-dialog.vue:
|
||||
desktop/views/components/renote-form.vue:
|
||||
quote: "引用..."
|
||||
cancel: "取消"
|
||||
renote: "重新发送"
|
||||
renote-home: "重新发送(首页)"
|
||||
renote: "转推"
|
||||
renote-home: "转推(首页)"
|
||||
reposting: "重新发送中..."
|
||||
success: "已重新发送!"
|
||||
failure: "重新发送失败"
|
||||
success: "已转推!"
|
||||
failure: "转推失败"
|
||||
desktop/views/components/renote-form-window.vue:
|
||||
title: "您是否要重新发送?"
|
||||
title: "您是否要转推?"
|
||||
desktop/views/pages/user-following-or-followers.vue:
|
||||
following: "{user}的正在关注"
|
||||
followers: "{user}的关注者"
|
||||
@ -955,7 +979,7 @@ common/views/components/drive-settings.vue:
|
||||
common/views/components/mute-and-block.vue:
|
||||
mute-and-block: "屏蔽/拉黑"
|
||||
mute: "屏蔽"
|
||||
block: "拉黑中"
|
||||
block: "拉黑"
|
||||
no-muted-users: "无屏蔽用户"
|
||||
no-blocked-users: "无拉黑的用户"
|
||||
word-mute: "文字屏蔽"
|
||||
@ -970,6 +994,10 @@ common/views/components/password-settings.vue:
|
||||
not-match: "新密码不匹配"
|
||||
changed: "密码已更改"
|
||||
failed: "更改密码失败"
|
||||
common/views/components/post-form-attaches.vue:
|
||||
attach-cancel: "删除附件"
|
||||
mark-as-sensitive: "标记为“敏感”"
|
||||
unmark-as-sensitive: "取消标记为“敏感”"
|
||||
desktop/views/components/sub-note-content.vue:
|
||||
private: "这个帖子是私密的"
|
||||
deleted: "帖子已删除"
|
||||
@ -980,8 +1008,6 @@ desktop/views/components/settings.tags.vue:
|
||||
query: "查询 (可选)"
|
||||
add: "添加"
|
||||
save: "保存"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
title: "任务管理器"
|
||||
desktop/views/components/timeline.vue:
|
||||
home: "首页"
|
||||
local: "本地"
|
||||
@ -1016,8 +1042,6 @@ desktop/views/components/received-follow-requests-window.vue:
|
||||
reject: "拒绝"
|
||||
desktop/views/components/user-lists-window.vue:
|
||||
title: "用户列表"
|
||||
create-list: "创建列表"
|
||||
list-name: "列表名称"
|
||||
desktop/views/components/user-preview.vue:
|
||||
notes: "帖子"
|
||||
following: "关注中"
|
||||
@ -1115,11 +1139,6 @@ admin/views/instance.vue:
|
||||
save: "保存"
|
||||
saved: "保存完毕"
|
||||
user-recommendation-config: "推荐用户"
|
||||
enable-external-user-recommendation: "启用外部用户推荐"
|
||||
external-user-recommendation-engine: "引擎"
|
||||
external-user-recommendation-engine-desc: "例如: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
||||
external-user-recommendation-timeout: "超时"
|
||||
external-user-recommendation-timeout-desc: "单位为毫秒 (例如:300000)"
|
||||
email-config: "电子邮件服务器设置"
|
||||
email-config-info: "用于确认电子邮件和密码重置等。"
|
||||
enable-email: "启用电子邮件送递"
|
||||
@ -1200,7 +1219,9 @@ admin/views/users.vue:
|
||||
unsuspend-confirm: "是否解除冻结?"
|
||||
unsuspended: "已成功解除用户冻结"
|
||||
make-silence: "禁言"
|
||||
silence-confirm: "确认屏蔽?"
|
||||
unmake-silence: "解除禁言"
|
||||
unsilence-confirm: "解除屏蔽?"
|
||||
verify: "认证用户"
|
||||
verify-confirm: "是否官方账号?"
|
||||
verified: "此账户已被认证"
|
||||
@ -1394,6 +1415,7 @@ desktop/views/widgets/polls.vue:
|
||||
desktop/views/widgets/post-form.vue:
|
||||
title: "帖子"
|
||||
note: "帖子"
|
||||
something-happened: "由于某种原因无法发帖。"
|
||||
desktop/views/widgets/profile.vue:
|
||||
update-banner: "点击来剪辑背景"
|
||||
update-avatar: "点击来剪辑头像"
|
||||
@ -1412,12 +1434,11 @@ mobile/views/components/drive.vue:
|
||||
file-count: "文件"
|
||||
nothing-in-drive: "网盘为空"
|
||||
folder-is-empty: "这文件夹是空的"
|
||||
prompt: "您想要干什么呢?(请输入数字):<1 → 上传文件 | 2 → 从URL上传文件 | 3 → 创建新文件夹 | 4 → 更改这个文件夹的名称 | 5 → 移动这个文件夹 | 6 → 删除这个文件夹>"
|
||||
deletion-alert: "抱歉! 删除文件夹功能尚未实现。"
|
||||
folder-name: "文件夹名称"
|
||||
here-is-root: "当前位置为根目录。"
|
||||
url-prompt: "要上传的文件的URL"
|
||||
uploading: "已请求上传。 上传完成可能需要一段时间。"
|
||||
folder-name-cannot-empty: "文件夹名不能为空。"
|
||||
mobile/views/components/drive-file-chooser.vue:
|
||||
select-file: "选择文件"
|
||||
mobile/views/components/drive-folder-chooser.vue:
|
||||
@ -1466,11 +1487,11 @@ mobile/views/components/post-form.vue:
|
||||
add-visible-user: "添加用户"
|
||||
submit: "帖子"
|
||||
reply: "回复"
|
||||
renote: "Renote"
|
||||
renote: "转推"
|
||||
quote-placeholder: "引用这个帖子t... (可选)"
|
||||
reply-placeholder: "回复这个帖子"
|
||||
cw-placeholder: "评论帖子(可选)"
|
||||
location-alert: "您的设备不提供定位服务"
|
||||
geolocation-alert: "您的设备不提供位置服务"
|
||||
error: "错误"
|
||||
username-prompt: "请输入用户名"
|
||||
mobile/views/components/sub-note-content.vue:
|
||||
@ -1491,9 +1512,16 @@ mobile/views/components/ui.nav.vue:
|
||||
game: "游戏"
|
||||
admin: "管理"
|
||||
about: "关于 Misskey"
|
||||
mobile/views/pages/drive.vue:
|
||||
contextmenu:
|
||||
upload: "上传文件"
|
||||
url-upload: "从URL上传文件"
|
||||
create-folder: "创建文件夹"
|
||||
rename-folder: "重命名文件夹"
|
||||
move-folder: "移动此文件夹"
|
||||
delete-folder: "删除此文件夹"
|
||||
mobile/views/pages/user-lists.vue:
|
||||
title: "列表"
|
||||
enter-list-name: "输入要列出的列表的名称"
|
||||
mobile/views/pages/signup.vue:
|
||||
lets-start: "您的账户现已准备就绪! 📦"
|
||||
mobile/views/pages/followers.vue:
|
||||
@ -1503,7 +1531,7 @@ mobile/views/pages/following.vue:
|
||||
mobile/views/pages/home.vue:
|
||||
home: "首页"
|
||||
local: "Local"
|
||||
hybrid: "Social"
|
||||
hybrid: "社交"
|
||||
global: "Global"
|
||||
mentions: "Mentions"
|
||||
messages: "直接发布"
|
||||
@ -1559,7 +1587,7 @@ deck:
|
||||
widgets: "小部件"
|
||||
home: "首页"
|
||||
local: "Local"
|
||||
hybrid: "Social"
|
||||
hybrid: "社交"
|
||||
hashtag: "标签"
|
||||
global: "Global"
|
||||
mentions: "Mentions"
|
||||
@ -1590,7 +1618,7 @@ deck/deck.user-column.vue:
|
||||
images: "图片"
|
||||
activity: "活动"
|
||||
timeline: "时间线"
|
||||
pinned-notes: "标记投稿"
|
||||
pinned-notes: "置顶帖"
|
||||
docs:
|
||||
edit-this-page-on-github: "发现错误或想要为文档做出贡献?"
|
||||
edit-this-page-on-github-link: "在GitHub上编辑这个页面。"
|
||||
@ -1620,24 +1648,18 @@ dev/views/apps.vue:
|
||||
create-app: "创建应用"
|
||||
app-missing: "没有应用"
|
||||
dev/views/new-app.vue:
|
||||
new-app: "新应用"
|
||||
new-app-info: "可以从 API 中创建应用。 (app/create)"
|
||||
create-app: "正在创建应用"
|
||||
app-name: "应用名称"
|
||||
app-name-placeholder: "ex) iOS版Misskey"
|
||||
app-name-desc: "您应用的名称"
|
||||
app-name-ex: "ex) iOS版本的Misskey"
|
||||
app-overview: "应用摘要"
|
||||
app-desc: "您的应用的简要说明或介绍。"
|
||||
app-desc-ex: "ex) iOS版Misskey客户端."
|
||||
app-overview-placeholder: " ex) iOS版Misskey客户端."
|
||||
app-overview-desc: "您的应用的简要说明或介绍。"
|
||||
callback-url: "回应URL (optional)"
|
||||
callback-url-placeholder: "ex) https://your.app.example.com/callback.php"
|
||||
callback-url-desc: "通过身份验证表单对用户进行身份验证后重定向到的URL。"
|
||||
authority: "权限"
|
||||
authority-desc: "只能通过API访问此处请求的功能。"
|
||||
authority-warning: "您可以在创建应用程序后对其进行更改,但如果您授予不同的权限,则当时关联的所有用户密钥都将失效。"
|
||||
account-read: "查看账户信息"
|
||||
account-write: "修改账户信息"
|
||||
note-write: "投稿。"
|
||||
reaction-write: "添加或删除回应。"
|
||||
following-write: "关注和不关注"
|
||||
drive-read: "查看网盘"
|
||||
drive-write: "管理网盘文件。"
|
||||
notification-read: "阅读您的通知"
|
||||
notification-write: "管理通知"
|
||||
|
89
package.json
89
package.json
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "misskey",
|
||||
"author": "syuilo <i@syuilo.com>",
|
||||
"version": "11.0.0-beta.8",
|
||||
"version": "11.3.0",
|
||||
"codename": "daybreak",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -12,8 +12,6 @@
|
||||
"scripts": {
|
||||
"start": "node ./index.js",
|
||||
"init": "node ./built/init.js",
|
||||
"migrate": "node ./built/migrate.js",
|
||||
"debug": "DEBUG=misskey:* node ./index.js",
|
||||
"build": "webpack && gulp build",
|
||||
"webpack": "webpack",
|
||||
"watch": "webpack --watch",
|
||||
@ -31,17 +29,15 @@
|
||||
"@fortawesome/free-solid-svg-icons": "5.7.2",
|
||||
"@fortawesome/vue-fontawesome": "0.1.5",
|
||||
"@koa/cors": "2.2.3",
|
||||
"@prezzemolo/rap": "0.1.2",
|
||||
"@prezzemolo/zip": "0.0.3",
|
||||
"@types/bcryptjs": "2.4.2",
|
||||
"@types/bull": "3.5.8",
|
||||
"@types/chai-http": "3.0.5",
|
||||
"@types/bull": "3.5.11",
|
||||
"@types/dateformat": "3.0.0",
|
||||
"@types/deep-equal": "1.0.1",
|
||||
"@types/double-ended-queue": "2.1.0",
|
||||
"@types/elasticsearch": "5.0.30",
|
||||
"@types/file-type": "10.6.0",
|
||||
"@types/gulp": "4.0.5",
|
||||
"@types/elasticsearch": "5.0.32",
|
||||
"@types/file-type": "10.9.1",
|
||||
"@types/gulp": "4.0.6",
|
||||
"@types/gulp-mocha": "0.0.32",
|
||||
"@types/gulp-rename": "0.0.33",
|
||||
"@types/gulp-replace": "0.0.31",
|
||||
@ -49,57 +45,55 @@
|
||||
"@types/gulp-util": "3.0.34",
|
||||
"@types/is-root": "1.0.0",
|
||||
"@types/is-url": "1.2.28",
|
||||
"@types/js-yaml": "3.12.0",
|
||||
"@types/js-yaml": "3.12.1",
|
||||
"@types/jsdom": "12.2.3",
|
||||
"@types/katex": "0.10.1",
|
||||
"@types/koa": "2.0.48",
|
||||
"@types/koa-bodyparser": "5.0.2",
|
||||
"@types/koa-compress": "2.0.8",
|
||||
"@types/koa-compress": "2.0.9",
|
||||
"@types/koa-cors": "0.0.0",
|
||||
"@types/koa-favicon": "2.0.19",
|
||||
"@types/koa-logger": "3.1.1",
|
||||
"@types/koa-mount": "3.0.1",
|
||||
"@types/koa-multer": "1.0.0",
|
||||
"@types/koa-router": "7.0.40",
|
||||
"@types/koa-send": "4.1.1",
|
||||
"@types/koa-send": "4.1.2",
|
||||
"@types/koa-views": "2.0.3",
|
||||
"@types/koa__cors": "2.2.3",
|
||||
"@types/lolex": "3.1.1",
|
||||
"@types/minio": "7.0.1",
|
||||
"@types/mocha": "5.2.6",
|
||||
"@types/mongodb": "3.1.22",
|
||||
"@types/monk": "6.0.0",
|
||||
"@types/node": "11.10.4",
|
||||
"@types/nodemailer": "4.6.6",
|
||||
"@types/node": "11.13.4",
|
||||
"@types/nodemailer": "4.6.7",
|
||||
"@types/nprogress": "0.0.29",
|
||||
"@types/oauth": "0.9.1",
|
||||
"@types/parse5": "5.0.0",
|
||||
"@types/parsimmon": "1.10.0",
|
||||
"@types/portscanner": "2.1.0",
|
||||
"@types/pug": "2.0.4",
|
||||
"@types/qrcode": "1.3.0",
|
||||
"@types/qrcode": "1.3.2",
|
||||
"@types/random-seed": "0.3.3",
|
||||
"@types/ratelimiter": "2.1.28",
|
||||
"@types/redis": "2.8.10",
|
||||
"@types/redis": "2.8.12",
|
||||
"@types/rename": "1.0.1",
|
||||
"@types/request": "2.48.1",
|
||||
"@types/request-promise-native": "1.0.15",
|
||||
"@types/request-stats": "3.0.0",
|
||||
"@types/rimraf": "2.0.2",
|
||||
"@types/seedrandom": "2.4.27",
|
||||
"@types/sharp": "0.21.2",
|
||||
"@types/sharp": "0.22.1",
|
||||
"@types/showdown": "1.9.2",
|
||||
"@types/speakeasy": "2.0.4",
|
||||
"@types/systeminformation": "3.23.1",
|
||||
"@types/tinycolor2": "1.4.1",
|
||||
"@types/tmp": "0.0.33",
|
||||
"@types/tmp": "0.1.0",
|
||||
"@types/uuid": "3.4.4",
|
||||
"@types/web-push": "3.3.0",
|
||||
"@types/webpack": "4.4.24",
|
||||
"@types/webpack": "4.4.27",
|
||||
"@types/webpack-stream": "3.2.10",
|
||||
"@types/websocket": "0.0.40",
|
||||
"@types/ws": "6.0.1",
|
||||
"animejs": "3.0.1",
|
||||
"apexcharts": "3.6.6",
|
||||
"apexcharts": "3.6.8",
|
||||
"autobind-decorator": "2.4.0",
|
||||
"autosize": "4.0.2",
|
||||
"autwh": "0.1.0",
|
||||
@ -108,7 +102,6 @@
|
||||
"bull": "3.7.0",
|
||||
"cafy": "15.1.1",
|
||||
"chai": "4.2.0",
|
||||
"chai-http": "4.2.1",
|
||||
"chalk": "2.4.2",
|
||||
"cli-highlight": "2.1.0",
|
||||
"commander": "2.20.0",
|
||||
@ -118,15 +111,15 @@
|
||||
"cssnano": "4.1.10",
|
||||
"dateformat": "3.0.3",
|
||||
"deep-equal": "1.0.1",
|
||||
"diskusage": "1.0.0",
|
||||
"diskusage": "1.1.0",
|
||||
"double-ended-queue": "2.1.0-0",
|
||||
"elasticsearch": "15.4.1",
|
||||
"emojilib": "2.4.0",
|
||||
"eslint": "5.15.1",
|
||||
"eslint": "5.16.0",
|
||||
"eslint-plugin-vue": "5.2.2",
|
||||
"eventemitter3": "3.1.0",
|
||||
"feed": "2.0.4",
|
||||
"file-type": "10.10.0",
|
||||
"file-type": "10.11.0",
|
||||
"fuckadblock": "3.2.1",
|
||||
"gulp": "4.0.0",
|
||||
"gulp-cssnano": "2.1.3",
|
||||
@ -137,19 +130,19 @@
|
||||
"gulp-sourcemaps": "2.6.5",
|
||||
"gulp-stylus": "2.7.0",
|
||||
"gulp-tslint": "8.1.4",
|
||||
"gulp-typescript": "5.0.0",
|
||||
"gulp-typescript": "5.0.1",
|
||||
"gulp-uglify": "3.0.2",
|
||||
"gulp-util": "3.0.8",
|
||||
"hard-source-webpack-plugin": "0.13.1",
|
||||
"html-minifier": "3.5.21",
|
||||
"html-minifier": "4.0.0",
|
||||
"http-signature": "1.2.0",
|
||||
"insert-text-at-cursor": "0.1.2",
|
||||
"is-root": "2.0.0",
|
||||
"is-svg": "4.0.0",
|
||||
"js-yaml": "3.13.0",
|
||||
"jsdom": "14.0.0",
|
||||
"insert-text-at-cursor": "0.2.0",
|
||||
"is-root": "2.1.0",
|
||||
"is-svg": "4.1.0",
|
||||
"js-yaml": "3.13.1",
|
||||
"jsdom": "14.1.0",
|
||||
"json5": "2.1.0",
|
||||
"json5-loader": "1.0.1",
|
||||
"json5-loader": "2.0.0",
|
||||
"katex": "0.10.1",
|
||||
"koa": "2.7.0",
|
||||
"koa-bodyparser": "4.2.1",
|
||||
@ -167,23 +160,20 @@
|
||||
"loader-utils": "1.2.3",
|
||||
"lolex": "3.1.0",
|
||||
"lookup-dns-cache": "2.1.0",
|
||||
"minio": "7.0.5",
|
||||
"mocha": "6.0.2",
|
||||
"minio": "7.0.6",
|
||||
"mocha": "6.1.3",
|
||||
"moji": "0.5.1",
|
||||
"moment": "2.24.0",
|
||||
"mongodb": "3.2.3",
|
||||
"monk": "6.0.6",
|
||||
"ms": "2.1.1",
|
||||
"nan": "2.12.1",
|
||||
"nested-property": "0.0.7",
|
||||
"node-fetch": "2.3.0",
|
||||
"nodemailer": "5.1.1",
|
||||
"nodemailer": "6.1.1",
|
||||
"nprogress": "0.2.0",
|
||||
"object-assign-deep": "0.4.0",
|
||||
"os-utils": "0.0.14",
|
||||
"parse5": "5.1.0",
|
||||
"parsimmon": "1.12.0",
|
||||
"pg": "7.9.0",
|
||||
"pg": "7.10.0",
|
||||
"portscanner": "2.2.0",
|
||||
"postcss-loader": "3.0.0",
|
||||
"prismjs": "1.16.0",
|
||||
@ -193,7 +183,9 @@
|
||||
"promise-sequential": "1.1.1",
|
||||
"pug": "2.0.3",
|
||||
"punycode": "2.1.1",
|
||||
"pureimage": "0.1.6",
|
||||
"qrcode": "1.3.3",
|
||||
"random-seed": "0.3.0",
|
||||
"randomcolor": "0.5.4",
|
||||
"ratelimiter": "3.3.0",
|
||||
"recaptcha-promise": "0.1.3",
|
||||
@ -208,7 +200,6 @@
|
||||
"rimraf": "2.6.3",
|
||||
"rndstr": "1.0.0",
|
||||
"s-age": "1.1.2",
|
||||
"seedrandom": "2.4.4",
|
||||
"sharp": "0.22.0",
|
||||
"showdown": "1.9.0",
|
||||
"showdown-highlightjs-extension": "0.1.2",
|
||||
@ -218,15 +209,15 @@
|
||||
"stylus": "0.54.5",
|
||||
"stylus-loader": "3.0.2",
|
||||
"summaly": "2.2.0",
|
||||
"systeminformation": "4.0.16",
|
||||
"systeminformation": "4.1.5",
|
||||
"syuilo-password-strength": "0.0.1",
|
||||
"terser-webpack-plugin": "1.2.3",
|
||||
"textarea-caret": "3.1.0",
|
||||
"tinycolor2": "1.4.1",
|
||||
"tmp": "0.0.33",
|
||||
"tmp": "0.1.0",
|
||||
"ts-loader": "5.3.3",
|
||||
"ts-node": "7.0.1",
|
||||
"tslint": "5.13.1",
|
||||
"tslint": "5.15.0",
|
||||
"tslint-sonarts": "1.9.0",
|
||||
"typeorm": "0.2.16-rc.1",
|
||||
"typescript": "3.3.3333",
|
||||
@ -248,7 +239,7 @@
|
||||
"vue-loader": "15.7.0",
|
||||
"vue-marquee-text-component": "1.1.1",
|
||||
"vue-prism-component": "1.1.1",
|
||||
"vue-router": "3.0.3",
|
||||
"vue-router": "3.0.6",
|
||||
"vue-sequential-entrance": "1.1.3",
|
||||
"vue-style-loader": "4.1.2",
|
||||
"vue-svg-inline-loader": "1.2.15",
|
||||
@ -258,8 +249,8 @@
|
||||
"vuex": "3.1.0",
|
||||
"vuex-persistedstate": "2.5.4",
|
||||
"web-push": "3.3.3",
|
||||
"webpack": "4.28.4",
|
||||
"webpack-cli": "3.2.3",
|
||||
"webpack": "4.30.0",
|
||||
"webpack-cli": "3.3.0",
|
||||
"websocket": "1.0.28",
|
||||
"ws": "6.2.1",
|
||||
"xev": "2.0.1"
|
||||
|
@ -27,7 +27,7 @@ function greet() {
|
||||
console.log(' ' + chalk.gray(v) + (' |___|\n'.substr(v.length)));
|
||||
//#endregion
|
||||
|
||||
console.log(' Misskey is maintained by @syuilo, @AyaMorisawa, @mei23, and @acid-chicken.');
|
||||
console.log(' Misskey is maintained by @syuilo, @AyaMorisawa, @mei23, @acid-chicken, and @rinsuki.');
|
||||
console.log(chalk.keyword('orange')(' If you like Misskey, please donate to support development. https://www.patreon.com/syuilo'));
|
||||
|
||||
console.log('');
|
||||
|
@ -9,6 +9,9 @@
|
||||
<ui-textarea v-model="announcement.text">
|
||||
<span>{{ $t('text') }}</span>
|
||||
</ui-textarea>
|
||||
<ui-input v-model="announcement.image">
|
||||
<span>{{ $t('image-url') }}</span>
|
||||
</ui-input>
|
||||
<ui-horizon-group class="fit-bottom">
|
||||
<ui-button @click="save()"><fa :icon="['far', 'save']"/> {{ $t('save') }}</ui-button>
|
||||
<ui-button @click="remove(i)"><fa :icon="['far', 'trash-alt']"/> {{ $t('remove') }}</ui-button>
|
||||
@ -43,7 +46,8 @@ export default Vue.extend({
|
||||
add() {
|
||||
this.announcements.unshift({
|
||||
title: '',
|
||||
text: ''
|
||||
text: '',
|
||||
image: null
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -38,7 +38,7 @@
|
||||
<div class="kidvdlkg" v-for="file in files">
|
||||
<div @click="file._open = !file._open">
|
||||
<div>
|
||||
<div class="thumbnail" :style="thumbnail(file)"></div>
|
||||
<x-file-thumbnail class="thumbnail" :file="file" fit="contain" @click="showFileMenu(file)"/>
|
||||
</div>
|
||||
<div>
|
||||
<header>
|
||||
@ -75,10 +75,15 @@ import Vue from 'vue';
|
||||
import i18n from '../../i18n';
|
||||
import { faCloud, faTerminal, faSearch } from '@fortawesome/free-solid-svg-icons';
|
||||
import { faTrashAlt, faEye, faEyeSlash } from '@fortawesome/free-regular-svg-icons';
|
||||
import XFileThumbnail from '../../common/views/components/drive-file-thumbnail.vue';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('admin/views/drive.vue'),
|
||||
|
||||
components: {
|
||||
XFileThumbnail
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
file: null,
|
||||
@ -151,13 +156,6 @@ export default Vue.extend({
|
||||
});
|
||||
},
|
||||
|
||||
thumbnail(file: any): any {
|
||||
return {
|
||||
'background-color': file.properties.avgColor || 'transparent',
|
||||
'background-image': `url(${file.thumbnailUrl})`
|
||||
};
|
||||
},
|
||||
|
||||
async del(file: any) {
|
||||
const process = async () => {
|
||||
await this.$root.api('drive/files/delete', { fileId: file.id });
|
||||
@ -179,9 +177,9 @@ export default Vue.extend({
|
||||
this.$root.api('drive/files/update', {
|
||||
fileId: file.id,
|
||||
isSensitive: !file.isSensitive
|
||||
}).then(() => {
|
||||
file.isSensitive = !file.isSensitive;
|
||||
});
|
||||
|
||||
file.isSensitive = !file.isSensitive;
|
||||
},
|
||||
|
||||
async show() {
|
||||
@ -244,7 +242,7 @@ export default Vue.extend({
|
||||
|
||||
> div:nth-child(1)
|
||||
> .thumbnail
|
||||
display block
|
||||
display flex
|
||||
width 64px
|
||||
height 64px
|
||||
background-size cover
|
||||
|
@ -195,7 +195,7 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
created() {
|
||||
this.$root.getMeta().then(meta => {
|
||||
this.$root.getMeta(true).then(meta => {
|
||||
this.maintainerName = meta.maintainerName;
|
||||
this.maintainerEmail = meta.maintainerEmail;
|
||||
this.disableRegistration = meta.disableRegistration;
|
||||
|
@ -232,6 +232,8 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
async silenceUser() {
|
||||
if (!await this.getConfirmed(this.$t('silence-confirm'))) return;
|
||||
|
||||
const process = async () => {
|
||||
await this.$root.api('admin/silence-user', { userId: this.user.id });
|
||||
this.$root.dialog({
|
||||
@ -251,6 +253,8 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
async unsilenceUser() {
|
||||
if (!await this.getConfirmed(this.$t('unsilence-confirm'))) return;
|
||||
|
||||
const process = async () => {
|
||||
await this.$root.api('admin/unsilence-user', { userId: this.user.id });
|
||||
this.$root.dialog({
|
||||
|
@ -134,7 +134,7 @@ export default (opts: Opts = {}) => ({
|
||||
},
|
||||
|
||||
reactDirectly(reaction) {
|
||||
(this.$root.api('notes/reactions/create', {
|
||||
this.$root.api('notes/reactions/create', {
|
||||
noteId: this.appearNote.id,
|
||||
reaction: reaction
|
||||
});
|
||||
|
@ -137,7 +137,6 @@ export default prop => ({
|
||||
Vue.set(this.$_ns_target, 'deletedAt', body.deletedAt);
|
||||
Vue.set(this.$_ns_target, 'renote', null);
|
||||
this.$_ns_target.text = null;
|
||||
this.$_ns_target.tags = [];
|
||||
this.$_ns_target.fileIds = [];
|
||||
this.$_ns_target.poll = null;
|
||||
this.$_ns_target.geo = null;
|
||||
|
64
src/client/app/common/scripts/search.ts
Normal file
64
src/client/app/common/scripts/search.ts
Normal file
@ -0,0 +1,64 @@
|
||||
import { faHistory } from '@fortawesome/free-solid-svg-icons';
|
||||
|
||||
export async function search(v: any, q: string) {
|
||||
q = q.trim();
|
||||
|
||||
if (q.startsWith('@')) {
|
||||
v.$router.push(`/${q}`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (q.startsWith('#')) {
|
||||
v.$router.push(`/tags/${encodeURIComponent(q.substr(1))}`);
|
||||
return;
|
||||
}
|
||||
|
||||
// like 2018/03/12
|
||||
if (/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}/.test(q.replace(/-/g, '/'))) {
|
||||
const date = new Date(q.replace(/-/g, '/'));
|
||||
|
||||
// 日付しか指定されてない場合、例えば 2018/03/12 ならユーザーは
|
||||
// 2018/03/12 のコンテンツを「含む」結果になることを期待するはずなので
|
||||
// 23時間59分進める(そのままだと 2018/03/12 00:00:00 「まで」の
|
||||
// 結果になってしまい、2018/03/12 のコンテンツは含まれない)
|
||||
if (q.replace(/-/g, '/').match(/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}$/)) {
|
||||
date.setHours(23, 59, 59, 999);
|
||||
}
|
||||
|
||||
v.$root.$emit('warp', date);
|
||||
v.$root.dialog({
|
||||
icon: faHistory,
|
||||
splash: true,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (q.startsWith('https://')) {
|
||||
const dialog = v.$root.dialog({
|
||||
type: 'waiting',
|
||||
text: v.$t('@.fetching-as-ap-object'),
|
||||
showOkButton: false,
|
||||
showCancelButton: false,
|
||||
cancelableByBgClick: false
|
||||
});
|
||||
|
||||
try {
|
||||
const res = await v.$root.api('ap/show', {
|
||||
uri: q
|
||||
});
|
||||
dialog.close();
|
||||
if (res.type == 'User') {
|
||||
v.$router.push(`/@${res.object.username}@${res.object.host}`);
|
||||
} else if (res.type == 'Note') {
|
||||
v.$router.push(`/notes/${res.object.id}`);
|
||||
}
|
||||
} catch (e) {
|
||||
dialog.close();
|
||||
// TODO: Show error
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
v.$router.push(`/search?q=${encodeURIComponent(q)}`);
|
||||
}
|
@ -78,6 +78,7 @@ export default Vue.extend({
|
||||
.mk-avatar
|
||||
display inline-block
|
||||
vertical-align bottom
|
||||
flex-shrink 0
|
||||
|
||||
&:not(.cat)
|
||||
overflow hidden
|
||||
|
@ -6,7 +6,17 @@
|
||||
<mk-signin/>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="icon" v-if="!input && !select && !user" :class="type"><fa :icon="icon"/></div>
|
||||
<div class="icon" v-if="icon">
|
||||
<fa :icon="icon"/>
|
||||
</div>
|
||||
<div class="icon" v-else-if="!input && !select && !user" :class="type">
|
||||
<fa icon="check" v-if="type === 'success'"/>
|
||||
<fa :icon="faTimesCircle" v-if="type === 'error'"/>
|
||||
<fa icon="exclamation-triangle" v-if="type === 'warning'"/>
|
||||
<fa icon="info-circle" v-if="type === 'info'"/>
|
||||
<fa :icon="faQuestionCircle" v-if="type === 'question'"/>
|
||||
<fa icon="spinner" pulse v-if="type === 'waiting'"/>
|
||||
</div>
|
||||
<header v-if="title" v-html="title"></header>
|
||||
<div class="body" v-if="text" v-html="text"></div>
|
||||
<ui-input v-if="input" v-model="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder" @keydown="onInputKeydown"></ui-input>
|
||||
@ -14,8 +24,8 @@
|
||||
<ui-select v-if="select" v-model="selectedValue" autofocus>
|
||||
<option v-for="item in select.items" :value="item.value">{{ item.text }}</option>
|
||||
</ui-select>
|
||||
<ui-horizon-group no-grow class="buttons fit-bottom" v-if="!splash">
|
||||
<ui-button @click="ok" primary :autofocus="!input && !select && !user">{{ (showCancelButton || input || select || user) ? $t('@.ok') : $t('@.got-it') }}</ui-button>
|
||||
<ui-horizon-group no-grow class="buttons fit-bottom" v-if="!splash && (showOkButton || showCancelButton)">
|
||||
<ui-button @click="ok" v-if="showOkButton" primary :autofocus="!input && !select && !user">{{ (showCancelButton || input || select || user) ? $t('@.ok') : $t('@.got-it') }}</ui-button>
|
||||
<ui-button @click="cancel" v-if="showCancelButton || input || select || user">{{ $t('@.cancel') }}</ui-button>
|
||||
</ui-horizon-group>
|
||||
</template>
|
||||
@ -55,10 +65,21 @@ export default Vue.extend({
|
||||
user: {
|
||||
required: false
|
||||
},
|
||||
icon: {
|
||||
required: false
|
||||
},
|
||||
showOkButton: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
showCancelButton: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
cancelableByBgClick: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
splash: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
@ -69,22 +90,11 @@ export default Vue.extend({
|
||||
return {
|
||||
inputValue: this.input && this.input.default ? this.input.default : null,
|
||||
userInputValue: null,
|
||||
selectedValue: null
|
||||
selectedValue: null,
|
||||
faTimesCircle, faQuestionCircle
|
||||
};
|
||||
},
|
||||
|
||||
computed: {
|
||||
icon(): any {
|
||||
switch (this.type) {
|
||||
case 'success': return 'check';
|
||||
case 'error': return faTimesCircle;
|
||||
case 'warning': return 'exclamation-triangle';
|
||||
case 'info': return 'info-circle';
|
||||
case 'question': return faQuestionCircle;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
(this.$refs.bg as any).style.pointerEvents = 'auto';
|
||||
@ -113,6 +123,8 @@ export default Vue.extend({
|
||||
|
||||
methods: {
|
||||
async ok() {
|
||||
if (!this.showOkButton) return;
|
||||
|
||||
if (this.user) {
|
||||
const user = await this.$root.api('users/show', parseAcct(this.userInputValue));
|
||||
if (user) {
|
||||
@ -156,7 +168,9 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
onBgClick() {
|
||||
this.cancel();
|
||||
if (this.cancelableByBgClick) {
|
||||
this.cancel();
|
||||
}
|
||||
},
|
||||
|
||||
onInputKeydown(e) {
|
||||
@ -183,9 +197,6 @@ export default Vue.extend({
|
||||
height 100%
|
||||
|
||||
&.splash
|
||||
&, *
|
||||
pointer-events none !important
|
||||
|
||||
> .main
|
||||
min-width 0
|
||||
width initial
|
||||
@ -243,7 +254,7 @@ export default Vue.extend({
|
||||
margin-top 8px
|
||||
|
||||
> .body
|
||||
margin 16px 0
|
||||
margin 16px 0 0 0
|
||||
|
||||
> .buttons
|
||||
margin-top 16px
|
||||
|
@ -105,9 +105,7 @@ export default Vue.extend({
|
||||
},
|
||||
isThumbnailAvailable(): boolean {
|
||||
return this.file.thumbnailUrl
|
||||
? this.file.thumbnailUrl.endsWith('?thumbnail')
|
||||
? (this.is === 'image' || this.is === 'video')
|
||||
: true
|
||||
? (this.is === 'image' || this.is === 'video')
|
||||
: false;
|
||||
},
|
||||
background(): string {
|
||||
@ -123,7 +121,7 @@ export default Vue.extend({
|
||||
if (this.file.properties.avgColor) {
|
||||
anime({
|
||||
targets: this.$refs.thumbnail,
|
||||
backgroundColor: this.file.properties.avgColor.replace('255)', '0)'),
|
||||
backgroundColor: 'transparent', // TODO fade
|
||||
duration: 100,
|
||||
easing: 'linear'
|
||||
});
|
||||
|
@ -36,7 +36,9 @@ export default Vue.extend({
|
||||
return this.host === localHost ? `@${this.username}` : `@${this.username}@${toUnicode(this.host)}`;
|
||||
},
|
||||
isMe(): boolean {
|
||||
return this.$store.getters.isSignedIn && this.canonical.toLowerCase() === `@${this.$store.state.i.username}@${toUnicode(localHost)}`.toLowerCase();
|
||||
return this.$store.getters.isSignedIn && (
|
||||
`@${this.username}@${toUnicode(this.host)}` === `@${this.$store.state.i.username}@${toUnicode(localHost)}`.toLowerCase()
|
||||
);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
@ -85,7 +85,10 @@ export default Vue.extend({
|
||||
}
|
||||
} else {
|
||||
if (items[0].kind == 'file') {
|
||||
alert(this.$t('only-one-file-attached'));
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('only-one-file-attached')
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -107,7 +110,10 @@ export default Vue.extend({
|
||||
return;
|
||||
} else if (e.dataTransfer.files.length > 1) {
|
||||
e.preventDefault();
|
||||
alert(this.$t('only-one-file-attached'));
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('only-one-file-attached')
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
<div class="body">
|
||||
<p class="init" v-if="init"><fa icon="spinner .spin"/>{{ $t('@.loading') }}</p>
|
||||
<p class="empty" v-if="!init && messages.length == 0"><fa icon="info-circle"/>{{ $t('empty') }}</p>
|
||||
<p class="no-history" v-if="!init && messages.length > 0 && !existMoreMessages"><fa icon="flag"/>{{ $t('no-history') }}</p>
|
||||
<p class="no-history" v-if="!init && messages.length > 0 && !existMoreMessages"><fa :icon="faFlag"/>{{ $t('no-history') }}</p>
|
||||
<button class="more" :class="{ fetching: fetchingMoreMessages }" v-if="existMoreMessages" @click="fetchMoreMessages" :disabled="fetchingMoreMessages">
|
||||
<template v-if="fetchingMoreMessages"><fa icon="spinner" pulse fixed-width/></template>{{ fetchingMoreMessages ? $t('@.loading') : $t('@.load-more') }}
|
||||
</button>
|
||||
@ -35,6 +35,7 @@ import XMessage from './messaging-room.message.vue';
|
||||
import XForm from './messaging-room.form.vue';
|
||||
import { url } from '../../../config';
|
||||
import { faArrowCircleDown } from '@fortawesome/free-solid-svg-icons';
|
||||
import { faFlag } from '@fortawesome/free-regular-svg-icons';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/messaging-room.vue'),
|
||||
@ -54,7 +55,7 @@ export default Vue.extend({
|
||||
connection: null,
|
||||
showIndicator: false,
|
||||
timer: null,
|
||||
faArrowCircleDown
|
||||
faArrowCircleDown, faFlag
|
||||
};
|
||||
},
|
||||
|
||||
@ -125,7 +126,10 @@ export default Vue.extend({
|
||||
this.form.upload(e.dataTransfer.files[0]);
|
||||
return;
|
||||
} else if (e.dataTransfer.files.length > 1) {
|
||||
alert(this.$t('only-one-file-attached'));
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('only-one-file-attached')
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
|
139
src/client/app/common/views/components/post-form-attaches.vue
Normal file
139
src/client/app/common/views/components/post-form-attaches.vue
Normal file
@ -0,0 +1,139 @@
|
||||
<template>
|
||||
<div class="skeikyzd" v-show="files.length != 0">
|
||||
<x-draggable class="files" :list="files" animation="150">
|
||||
<div v-for="file in files" :key="file.id" @click="showFileMenu(file, $event)" @contextmenu.prevent="showFileMenu(file, $event)">
|
||||
<x-file-thumbnail :data-id="file.id" class="thumbnail" :file="file" fit="cover"/>
|
||||
<img class="remove" @click.stop="detachMedia(file.id)" src="/assets/desktop/remove.png" :title="$t('attach-cancel')" alt=""/>
|
||||
<div class="sensitive" v-if="file.isSensitive">
|
||||
<fa class="icon" :icon="faExclamationTriangle"/>
|
||||
</div>
|
||||
</div>
|
||||
</x-draggable>
|
||||
<p class="remain">{{ 4 - files.length }}/4</p>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import * as XDraggable from 'vuedraggable';
|
||||
import XMenu from '../../../common/views/components/menu.vue';
|
||||
import { faTimesCircle, faEye, faEyeSlash } from '@fortawesome/free-regular-svg-icons';
|
||||
import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';
|
||||
import XFileThumbnail from './drive-file-thumbnail.vue'
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/post-form-attaches.vue'),
|
||||
|
||||
components: {
|
||||
XDraggable,
|
||||
XFileThumbnail
|
||||
},
|
||||
|
||||
props: {
|
||||
files: {
|
||||
type: Array,
|
||||
required: true
|
||||
},
|
||||
detachMediaFn: {
|
||||
type: Object,
|
||||
required: false
|
||||
}
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
faExclamationTriangle
|
||||
};
|
||||
},
|
||||
|
||||
methods: {
|
||||
detachMedia(id) {
|
||||
if (this.detachMediaFn) this.detachMediaFn(id)
|
||||
else if (this.$parent.detachMedia) this.$parent.detachMedia(id)
|
||||
},
|
||||
toggleSensitive(file) {
|
||||
this.$root.api('drive/files/update', {
|
||||
fileId: file.id,
|
||||
isSensitive: !file.isSensitive
|
||||
}).then(() => {
|
||||
file.isSensitive = !file.isSensitive;
|
||||
});
|
||||
},
|
||||
showFileMenu(file, ev: MouseEvent) {
|
||||
this.$root.new(XMenu, {
|
||||
items: [{
|
||||
type: 'item',
|
||||
text: file.isSensitive ? this.$t('unmark-as-sensitive') : this.$t('mark-as-sensitive'),
|
||||
icon: file.isSensitive ? faEyeSlash : faEye,
|
||||
action: () => { this.toggleSensitive(file) }
|
||||
}, {
|
||||
type: 'item',
|
||||
text: this.$t('attach-cancel'),
|
||||
icon: faTimesCircle,
|
||||
action: () => { this.detachMedia(file.id) }
|
||||
}],
|
||||
source: ev.currentTarget || ev.target
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.skeikyzd
|
||||
padding 4px
|
||||
|
||||
> .files
|
||||
display flex
|
||||
flex-wrap wrap
|
||||
|
||||
> div
|
||||
width 64px
|
||||
height 64px
|
||||
margin 4px
|
||||
cursor move
|
||||
|
||||
&:hover > .remove
|
||||
display block
|
||||
|
||||
> .thumbnail
|
||||
width 100%
|
||||
height 100%
|
||||
z-index 1
|
||||
color var(--text)
|
||||
|
||||
> .remove
|
||||
display none
|
||||
position absolute
|
||||
top -6px
|
||||
right -6px
|
||||
width 16px
|
||||
height 16px
|
||||
cursor pointer
|
||||
z-index 1000
|
||||
|
||||
> .sensitive
|
||||
display flex
|
||||
position absolute
|
||||
width 64px
|
||||
height 64px
|
||||
top 0
|
||||
left 0
|
||||
z-index 2
|
||||
background rgba(17, 17, 17, .7)
|
||||
color #fff
|
||||
|
||||
> .icon
|
||||
margin auto
|
||||
|
||||
> .remain
|
||||
display block
|
||||
position absolute
|
||||
top 8px
|
||||
right 8px
|
||||
margin 0
|
||||
padding 0
|
||||
color var(--primaryAlpha04)
|
||||
|
||||
</style>
|
@ -14,7 +14,7 @@
|
||||
|
||||
<section>
|
||||
<header><fa icon="terminal"/> {{ $t('console.title') }}</header>
|
||||
<ui-input v-model="endpoint">
|
||||
<ui-input v-model="endpoint" :datalist="endpoints">
|
||||
<span>{{ $t('console.endpoint') }}</span>
|
||||
</ui-input>
|
||||
<ui-textarea v-model="body">
|
||||
@ -39,15 +39,23 @@ import * as JSON5 from 'json5';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/api-settings.vue'),
|
||||
|
||||
data() {
|
||||
return {
|
||||
endpoint: '',
|
||||
body: '{}',
|
||||
res: null,
|
||||
sending: false
|
||||
sending: false,
|
||||
endpoints: []
|
||||
};
|
||||
},
|
||||
|
||||
created() {
|
||||
this.$root.api('endpoints').then(endpoints => {
|
||||
this.endpoints = endpoints;
|
||||
});
|
||||
},
|
||||
|
||||
methods: {
|
||||
regenerateToken() {
|
||||
this.$root.dialog({
|
||||
|
@ -84,7 +84,7 @@
|
||||
<ui-info v-else warn>{{ $t('email-not-verified') }}</ui-info>
|
||||
</template>
|
||||
<ui-input v-model="email" type="email"><span>{{ $t('email-address') }}</span></ui-input>
|
||||
<ui-button @click="updateEmail()"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
|
||||
<ui-button @click="updateEmail()" :disabled="email === $store.state.i.email"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
@ -525,15 +525,11 @@ export default Vue.extend({
|
||||
this.$chooseDriveFile({
|
||||
multiple: false
|
||||
}).then(file => {
|
||||
this.$root.api('i/update', {
|
||||
wallpaperId: file.id
|
||||
});
|
||||
this.$store.dispatch('settings/set', { key: 'wallpaper', value: file.url });
|
||||
});
|
||||
},
|
||||
deleteWallpaper() {
|
||||
this.$root.api('i/update', {
|
||||
wallpaperId: null
|
||||
});
|
||||
this.$store.dispatch('settings/set', { key: 'wallpaper', value: null });
|
||||
},
|
||||
checkForUpdate() {
|
||||
this.checkingForUpdate = true;
|
||||
@ -542,8 +538,8 @@ export default Vue.extend({
|
||||
this.latestVersion = newer;
|
||||
if (newer == null) {
|
||||
this.$root.dialog({
|
||||
title: this.$t('no-updates'),
|
||||
text: this.$t('no-updates-desc')
|
||||
title: this.$t('@._settings.no-updates'),
|
||||
text: this.$t('@._settings.no-updates-desc')
|
||||
});
|
||||
} else {
|
||||
this.$root.dialog({
|
||||
|
@ -79,7 +79,10 @@ export default Vue.extend({
|
||||
localStorage.setItem('i', res.i);
|
||||
location.reload();
|
||||
}).catch(() => {
|
||||
alert(this.$t('login-failed'));
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('login-failed')
|
||||
});
|
||||
this.signing = false;
|
||||
});
|
||||
}
|
||||
|
@ -153,7 +153,10 @@ export default Vue.extend({
|
||||
location.href = '/';
|
||||
});
|
||||
}).catch(() => {
|
||||
alert(this.$t('some-error'));
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('some-error')
|
||||
});
|
||||
|
||||
if (this.meta.enableRecaptcha) {
|
||||
(window as any).grecaptcha.reset();
|
||||
|
@ -23,6 +23,7 @@
|
||||
@focus="focused = true"
|
||||
@blur="focused = false"
|
||||
@keydown="$emit('keydown', $event)"
|
||||
:list="id"
|
||||
>
|
||||
<input v-else ref="input"
|
||||
:type="type"
|
||||
@ -37,7 +38,11 @@
|
||||
@focus="focused = true"
|
||||
@blur="focused = false"
|
||||
@keydown="$emit('keydown', $event)"
|
||||
:list="id"
|
||||
>
|
||||
<datalist :id="id" v-if="datalist">
|
||||
<option v-for="data in datalist" :value="data"/>
|
||||
</datalist>
|
||||
</template>
|
||||
<template v-else>
|
||||
<input ref="input"
|
||||
@ -130,6 +135,10 @@ export default Vue.extend({
|
||||
required: false,
|
||||
default: false
|
||||
},
|
||||
datalist: {
|
||||
type: Array,
|
||||
required: false,
|
||||
},
|
||||
inline: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
@ -147,7 +156,8 @@ export default Vue.extend({
|
||||
return {
|
||||
v: this.value,
|
||||
focused: false,
|
||||
passwordStrength: ''
|
||||
passwordStrength: '',
|
||||
id: Math.random().toString()
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
|
@ -77,11 +77,11 @@ export default Vue.extend({
|
||||
input: {
|
||||
default: this.list.name
|
||||
}
|
||||
}).then(({ canceled, result: title }) => {
|
||||
}).then(({ canceled, result: name }) => {
|
||||
if (canceled) return;
|
||||
this.$root.api('users/lists/update', {
|
||||
listId: this.list.id,
|
||||
title: title
|
||||
name: name
|
||||
});
|
||||
});
|
||||
},
|
||||
|
95
src/client/app/common/views/components/user-lists.vue
Normal file
95
src/client/app/common/views/components/user-lists.vue
Normal file
@ -0,0 +1,95 @@
|
||||
<template>
|
||||
<div class="xkxvokkjlptzyewouewmceqcxhpgzprp">
|
||||
<button class="ui" @click="add">{{ $t('create-list') }}</button>
|
||||
<a v-for="list in lists" :key="list.id" @click="choice(list)">{{ list.name }}</a>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/user-lists.vue'),
|
||||
data() {
|
||||
return {
|
||||
fetching: true,
|
||||
lists: []
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.$root.api('users/lists/list').then(lists => {
|
||||
this.fetching = false;
|
||||
this.lists = lists;
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
add() {
|
||||
this.$root.dialog({
|
||||
title: this.$t('list-name'),
|
||||
input: true
|
||||
}).then(async ({ canceled, result: name }) => {
|
||||
if (canceled) return;
|
||||
const list = await this.$root.api('users/lists/create', {
|
||||
name
|
||||
});
|
||||
|
||||
this.lists.push(list)
|
||||
this.$emit('choosen', list);
|
||||
});
|
||||
},
|
||||
choice(list) {
|
||||
this.$emit('choosen', list);
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.xkxvokkjlptzyewouewmceqcxhpgzprp
|
||||
padding 16px
|
||||
background: var(--bg)
|
||||
|
||||
> button
|
||||
display block
|
||||
margin-bottom 16px
|
||||
color var(--primaryForeground)
|
||||
background var(--primary)
|
||||
width 100%
|
||||
border-radius 38px
|
||||
user-select none
|
||||
cursor pointer
|
||||
padding 0 16px
|
||||
min-width 100px
|
||||
line-height 38px
|
||||
font-size 14px
|
||||
font-weight 700
|
||||
|
||||
&:hover
|
||||
background var(--primaryLighten10)
|
||||
|
||||
&:active
|
||||
background var(--primaryDarken10)
|
||||
|
||||
a
|
||||
display block
|
||||
margin 8px 0
|
||||
padding 8px
|
||||
color var(--text)
|
||||
background var(--face)
|
||||
box-shadow 0 2px 16px var(--reversiListItemShadow)
|
||||
border-radius 6px
|
||||
cursor pointer
|
||||
line-height 32px
|
||||
|
||||
*
|
||||
pointer-events none
|
||||
user-select none
|
||||
|
||||
&:hover
|
||||
box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.05)
|
||||
|
||||
&:active
|
||||
box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.1)
|
||||
|
||||
</style>
|
@ -89,8 +89,10 @@ export default Vue.extend({
|
||||
});
|
||||
},
|
||||
|
||||
toggleMute() {
|
||||
async toggleMute() {
|
||||
if (this.user.isMuted) {
|
||||
if (!await this.getConfirmed(this.$t('unmute-confirm'))) return;
|
||||
|
||||
this.$root.api('mute/delete', {
|
||||
userId: this.user.id
|
||||
}).then(() => {
|
||||
@ -102,6 +104,8 @@ export default Vue.extend({
|
||||
});
|
||||
});
|
||||
} else {
|
||||
if (!await this.getConfirmed(this.$t('mute-confirm'))) return;
|
||||
|
||||
this.$root.api('mute/create', {
|
||||
userId: this.user.id
|
||||
}).then(() => {
|
||||
@ -115,8 +119,10 @@ export default Vue.extend({
|
||||
}
|
||||
},
|
||||
|
||||
toggleBlock() {
|
||||
async toggleBlock() {
|
||||
if (this.user.isBlocking) {
|
||||
if (!await this.getConfirmed(this.$t('unblock-confirm'))) return;
|
||||
|
||||
this.$root.api('blocking/delete', {
|
||||
userId: this.user.id
|
||||
}).then(() => {
|
||||
@ -128,6 +134,8 @@ export default Vue.extend({
|
||||
});
|
||||
});
|
||||
} else {
|
||||
if (!await this.getConfirmed(this.$t('block-confirm'))) return;
|
||||
|
||||
this.$root.api('blocking/create', {
|
||||
userId: this.user.id
|
||||
}).then(() => {
|
||||
@ -164,7 +172,9 @@ export default Vue.extend({
|
||||
});
|
||||
},
|
||||
|
||||
toggleSilence() {
|
||||
async toggleSilence() {
|
||||
if (!await this.getConfirmed(this.$t(this.user.isSilenced ? 'unsilence-confirm' : 'silence-confirm'))) return;
|
||||
|
||||
this.$root.api(this.user.isSilenced ? 'admin/unsilence-user' : 'admin/silence-user', {
|
||||
userId: this.user.id
|
||||
}).then(() => {
|
||||
@ -181,7 +191,9 @@ export default Vue.extend({
|
||||
});
|
||||
},
|
||||
|
||||
toggleSuspend() {
|
||||
async toggleSuspend() {
|
||||
if (!await this.getConfirmed(this.$t(this.user.isSuspended ? 'unsuspend-confirm' : 'suspend-confirm'))) return;
|
||||
|
||||
this.$root.api(this.user.isSuspended ? 'admin/unsuspend-user' : 'admin/suspend-user', {
|
||||
userId: this.user.id
|
||||
}).then(() => {
|
||||
@ -196,7 +208,18 @@ export default Vue.extend({
|
||||
text: e
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
async getConfirmed(text: string): Promise<Boolean> {
|
||||
const confirm = await this.$root.dialog({
|
||||
type: 'warning',
|
||||
showCancelButton: true,
|
||||
title: 'confirm',
|
||||
text,
|
||||
});
|
||||
|
||||
return !confirm.canceled;
|
||||
},
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
@ -166,6 +166,7 @@ export default Vue.extend({
|
||||
|
||||
append(note) {
|
||||
this.notes.push(note);
|
||||
this.cursor = this.notes[this.notes.length - 1].id
|
||||
},
|
||||
|
||||
releaseQueue() {
|
||||
|
@ -85,7 +85,7 @@ export default Vue.extend({
|
||||
this.makePromise = cursor => this.$root.api('users/notes', {
|
||||
userId: this.user.id,
|
||||
limit: fetchLimit + 1,
|
||||
untilId: cursor ? cursor : undefined,
|
||||
untilDate: cursor ? cursor : new Date().getTime() + 1000 * 86400 * 365,
|
||||
withFiles: this.withFiles,
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
||||
@ -118,7 +118,6 @@ export default Vue.extend({
|
||||
fileType: image,
|
||||
excludeNsfw: !this.$store.state.device.alwaysShowNsfw,
|
||||
limit: 9,
|
||||
untilDate: new Date().getTime() + 1000 * 86400 * 365
|
||||
}).then(notes => {
|
||||
for (const note of notes) {
|
||||
for (const file of note.files) {
|
||||
|
@ -21,7 +21,7 @@
|
||||
<option value="users">{{ $t('@.widgets.users') }}</option>
|
||||
<option value="polls">{{ $t('@.widgets.polls') }}</option>
|
||||
<option value="post-form">{{ $t('@.widgets.post-form') }}</option>
|
||||
<option value="messaging">{{ $t('@.widgets.messaging') }}</option>
|
||||
<option value="messaging">{{ $t('@.messaging') }}</option>
|
||||
<option value="memo">{{ $t('@.widgets.memo') }}</option>
|
||||
<option value="hashtags">{{ $t('@.widgets.hashtags') }}</option>
|
||||
<option value="posts-monitor">{{ $t('@.widgets.posts-monitor') }}</option>
|
||||
@ -33,7 +33,7 @@
|
||||
</header>
|
||||
<x-draggable
|
||||
:list="column.widgets"
|
||||
:options="{ animation: 150 }"
|
||||
animation="150"
|
||||
@sort="onWidgetSort"
|
||||
>
|
||||
<div v-for="widget in column.widgets" class="customize-container" :key="widget.id" @contextmenu.stop.prevent="widgetFunc(widget.id)">
|
||||
|
@ -18,7 +18,8 @@
|
||||
<p class="fetching" v-if="fetching">{{ $t('fetching') }}<mk-ellipsis/></p>
|
||||
<h1 v-if="!fetching">{{ announcements.length == 0 ? $t('no-broadcasts') : announcements[i].title }}</h1>
|
||||
<p v-if="!fetching">
|
||||
<span v-if="announcements.length != 0" v-html="announcements[i].text"></span>
|
||||
<mfm v-if="announcements.length != 0" :text="announcements[i].text"/>
|
||||
<img v-if="announcements.length != 0 && announcements[i].image" :src="announcements[i].image" alt="" style="display: block; max-height: 130px; max-width: 100%;"/>
|
||||
<template v-if="announcements.length == 0">{{ $t('have-a-nice-day') }}</template>
|
||||
</p>
|
||||
<a v-if="announcements.length > 1" @click="next">{{ $t('next') }} >></a>
|
||||
|
@ -21,14 +21,7 @@
|
||||
<fa :icon="['far', 'laugh']"/>
|
||||
</button>
|
||||
</div>
|
||||
<div class="files" v-show="files.length != 0">
|
||||
<x-draggable :list="files" :options="{ animation: 150 }">
|
||||
<div v-for="file in files" :key="file.id">
|
||||
<div class="img" :style="{ backgroundImage: `url(${file.thumbnailUrl})` }" :title="file.name"></div>
|
||||
<img class="remove" @click="detachMedia(file.id)" src="/assets/desktop/remove.png" :title="$t('attach-cancel')" alt=""/>
|
||||
</div>
|
||||
</x-draggable>
|
||||
</div>
|
||||
<x-post-form-attaches class="files" :files="files" :detach-media-fn="detachMedia"/>
|
||||
<input ref="file" type="file" multiple="multiple" tabindex="-1" @change="onChangeFile"/>
|
||||
<mk-uploader ref="uploader" @uploaded="attachMedia"/>
|
||||
<footer>
|
||||
@ -45,7 +38,7 @@
|
||||
import define from '../../../common/define-widget';
|
||||
import i18n from '../../../i18n';
|
||||
import insertTextAtCursor from 'insert-text-at-cursor';
|
||||
import * as XDraggable from 'vuedraggable';
|
||||
import XPostFormAttaches from '../components/post-form-attaches.vue';
|
||||
|
||||
export default define({
|
||||
name: 'post-form',
|
||||
@ -56,7 +49,7 @@ export default define({
|
||||
i18n: i18n('desktop/views/widgets/post-form.vue'),
|
||||
|
||||
components: {
|
||||
XDraggable
|
||||
XPostFormAttaches
|
||||
},
|
||||
|
||||
data() {
|
||||
@ -195,7 +188,10 @@ export default define({
|
||||
}).then(data => {
|
||||
this.clear();
|
||||
}).catch(err => {
|
||||
alert('Something happened');
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('something-happened')
|
||||
});
|
||||
}).then(() => {
|
||||
this.posting = false;
|
||||
this.$nextTick(() => {
|
||||
@ -249,38 +245,6 @@ export default define({
|
||||
& + .emoji
|
||||
opacity 0.7
|
||||
|
||||
> .files
|
||||
> div
|
||||
padding 4px
|
||||
|
||||
&:after
|
||||
content ""
|
||||
display block
|
||||
clear both
|
||||
|
||||
> div
|
||||
float left
|
||||
border solid 4px transparent
|
||||
cursor move
|
||||
|
||||
&:hover > .remove
|
||||
display block
|
||||
|
||||
> .img
|
||||
width 64px
|
||||
height 64px
|
||||
background-size cover
|
||||
background-position center center
|
||||
|
||||
> .remove
|
||||
display none
|
||||
position absolute
|
||||
top -6px
|
||||
right -6px
|
||||
width 16px
|
||||
height 16px
|
||||
cursor pointer
|
||||
|
||||
> input[type=file]
|
||||
display none
|
||||
|
||||
|
@ -142,7 +142,7 @@ export default Vue.extend({
|
||||
if (this.file.properties.avgColor) {
|
||||
anime({
|
||||
targets: this.$refs.thumbnail,
|
||||
backgroundColor: this.file.properties.avgColor.replace('255)', '0)'),
|
||||
backgroundColor: 'transparent', // TODO fade
|
||||
duration: 100,
|
||||
easing: 'linear'
|
||||
});
|
||||
|
@ -161,7 +161,10 @@ export default Vue.extend({
|
||||
});
|
||||
break;
|
||||
default:
|
||||
alert(this.$t('unhandled-error'));
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('unhandled-error')
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -320,7 +320,10 @@ export default Vue.extend({
|
||||
});
|
||||
break;
|
||||
default:
|
||||
alert(this.$t('unhandled-error'));
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('unhandled-error')
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -769,7 +772,6 @@ export default Vue.extend({
|
||||
> .mk-uploader
|
||||
height 100px
|
||||
padding 16px
|
||||
background #fff
|
||||
|
||||
> input
|
||||
display none
|
||||
|
@ -123,7 +123,7 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
fetchMore() {
|
||||
if (!this.more || this.moreFetching) return;
|
||||
if (!this.more || this.moreFetching || this.notes.length === 0) return;
|
||||
this.moreFetching = true;
|
||||
this.makePromise(this.notes[this.notes.length - 1].id).then(x => {
|
||||
this.notes = this.notes.concat(x.notes);
|
||||
@ -166,6 +166,7 @@ export default Vue.extend({
|
||||
|
||||
append(note) {
|
||||
this.notes.push(note);
|
||||
this.cursor = this.notes[this.notes.length - 1].id
|
||||
},
|
||||
|
||||
releaseQueue() {
|
||||
|
@ -27,15 +27,7 @@
|
||||
<button class="emoji" @click="emoji" ref="emoji">
|
||||
<fa :icon="['far', 'laugh']"/>
|
||||
</button>
|
||||
<div class="files" :class="{ with: poll }" v-show="files.length != 0">
|
||||
<x-draggable :list="files" :options="{ animation: 150 }">
|
||||
<div v-for="file in files" :key="file.id">
|
||||
<div class="img" :style="{ backgroundImage: `url(${file.thumbnailUrl})` }" :title="file.name"></div>
|
||||
<img class="remove" @click="detachMedia(file.id)" src="/assets/desktop/remove.png" :title="$t('attach-cancel')" alt=""/>
|
||||
</div>
|
||||
</x-draggable>
|
||||
<p class="remain">{{ 4 - files.length }}/4</p>
|
||||
</div>
|
||||
<x-post-form-attaches class="files" :class="{ with: poll }" :files="files"/>
|
||||
<mk-poll-editor v-if="poll" ref="poll" @destroyed="poll = false" @updated="onPollUpdate()"/>
|
||||
</div>
|
||||
</div>
|
||||
@ -65,7 +57,6 @@
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import insertTextAtCursor from 'insert-text-at-cursor';
|
||||
import * as XDraggable from 'vuedraggable';
|
||||
import getFace from '../../../common/scripts/get-face';
|
||||
import MkVisibilityChooser from '../../../common/views/components/visibility-chooser.vue';
|
||||
import { parse } from '../../../../../mfm/parse';
|
||||
@ -74,13 +65,14 @@ import { erase, unique } from '../../../../../prelude/array';
|
||||
import { length } from 'stringz';
|
||||
import { toASCII } from 'punycode';
|
||||
import extractMentions from '../../../../../misc/extract-mentions';
|
||||
import XPostFormAttaches from '../../../common/views/components/post-form-attaches.vue';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('desktop/views/components/post-form.vue'),
|
||||
|
||||
components: {
|
||||
XDraggable,
|
||||
MkVisibilityChooser
|
||||
MkVisibilityChooser,
|
||||
XPostFormAttaches
|
||||
},
|
||||
|
||||
props: {
|
||||
@ -372,7 +364,10 @@ export default Vue.extend({
|
||||
|
||||
setGeo() {
|
||||
if (navigator.geolocation == null) {
|
||||
alert(this.$t('geolocation-alert'));
|
||||
this.$root.dialog({
|
||||
type: 'warning',
|
||||
text: this.$t('geolocation-alert')
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
@ -380,7 +375,11 @@ export default Vue.extend({
|
||||
this.geo = pos.coords;
|
||||
this.$emit('geo-attached', this.geo);
|
||||
}, err => {
|
||||
alert(`%i18n:@error%: ${err.message}`);
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
title: this.$t('error')
|
||||
text: err.message
|
||||
});
|
||||
}, {
|
||||
enableHighAccuracy: true
|
||||
});
|
||||
@ -513,7 +512,7 @@ export default Vue.extend({
|
||||
|
||||
kao() {
|
||||
this.text += getFace();
|
||||
}
|
||||
},
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@ -618,46 +617,6 @@ export default Vue.extend({
|
||||
border-bottom solid 1px var(--primaryAlpha01) !important
|
||||
border-radius 0
|
||||
|
||||
> .remain
|
||||
display block
|
||||
position absolute
|
||||
top 8px
|
||||
right 8px
|
||||
margin 0
|
||||
padding 0
|
||||
color var(--primaryAlpha04)
|
||||
|
||||
> div
|
||||
padding 4px
|
||||
|
||||
&:after
|
||||
content ""
|
||||
display block
|
||||
clear both
|
||||
|
||||
> div
|
||||
float left
|
||||
border solid 4px transparent
|
||||
cursor move
|
||||
|
||||
&:hover > .remove
|
||||
display block
|
||||
|
||||
> .img
|
||||
width 64px
|
||||
height 64px
|
||||
background-size cover
|
||||
background-position center center
|
||||
|
||||
> .remove
|
||||
display none
|
||||
position absolute
|
||||
top -6px
|
||||
right -6px
|
||||
width 16px
|
||||
height 16px
|
||||
cursor pointer
|
||||
|
||||
> .mk-poll-editor
|
||||
background var(--desktopPostFormTextareaBg)
|
||||
border solid 1px var(--primaryAlpha01)
|
||||
|
@ -87,6 +87,5 @@ export default Vue.extend({
|
||||
height 100%
|
||||
flex auto
|
||||
overflow auto
|
||||
background var(--bg)
|
||||
|
||||
</style>
|
||||
|
@ -90,9 +90,8 @@
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import MkUserListsWindow from './user-lists-window.vue';
|
||||
import MkUserListWindow from './user-list-window.vue';
|
||||
import MkFollowRequestsWindow from './received-follow-requests-window.vue';
|
||||
import MkSettingsWindow from './settings-window.vue';
|
||||
// import MkSettingsWindow from './settings-window.vue';
|
||||
import MkDriveWindow from './drive-window.vue';
|
||||
import contains from '../../../common/scripts/contains';
|
||||
import { faHome, faColumns } from '@fortawesome/free-solid-svg-icons';
|
||||
@ -143,12 +142,7 @@ export default Vue.extend({
|
||||
},
|
||||
list() {
|
||||
this.close();
|
||||
const w = this.$root.new(MkUserListsWindow);
|
||||
w.$once('choosen', list => {
|
||||
this.$root.new(MkUserListWindow, {
|
||||
list
|
||||
});
|
||||
});
|
||||
this.$root.new(MkUserListsWindow);
|
||||
},
|
||||
followRequests() {
|
||||
this.close();
|
||||
|
@ -9,6 +9,7 @@
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import { search } from '../../../common/scripts/search';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('desktop/views/components/ui.header.search.vue'),
|
||||
@ -22,29 +23,11 @@ export default Vue.extend({
|
||||
async onSubmit() {
|
||||
if (this.wait) return;
|
||||
|
||||
const q = this.q.trim();
|
||||
if (q.startsWith('@')) {
|
||||
this.$router.push(`/${q}`);
|
||||
} else if (q.startsWith('#')) {
|
||||
this.$router.push(`/tags/${encodeURIComponent(q.substr(1))}`);
|
||||
} else if (q.startsWith('https://')) {
|
||||
this.wait = true;
|
||||
try {
|
||||
const res = await this.$root.api('ap/show', {
|
||||
uri: q
|
||||
});
|
||||
if (res.type == 'User') {
|
||||
this.$router.push(`/@${res.object.username}@${res.object.host}`);
|
||||
} else if (res.type == 'Note') {
|
||||
this.$router.push(`/notes/${res.object.id}`);
|
||||
}
|
||||
} catch (e) {
|
||||
// TODO
|
||||
}
|
||||
this.wait = true;
|
||||
search(this, this.q).finally(() => {
|
||||
this.wait = false;
|
||||
} else {
|
||||
this.$router.push(`/search?q=${encodeURIComponent(q)}`);
|
||||
}
|
||||
this.q = '';
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -148,10 +148,7 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
list() {
|
||||
const w = this.$root.new(MkUserListsWindow);
|
||||
w.$once('choosen', list => {
|
||||
this.$router.push(`i/lists/${ list.id }`);
|
||||
});
|
||||
this.$root.new(MkUserListsWindow);
|
||||
},
|
||||
|
||||
followRequests() {
|
||||
|
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="mk-ui" v-hotkey.global="keymap">
|
||||
<div class="bg" v-if="$store.getters.isSignedIn && $store.state.i.wallpaperUrl" :style="style"></div>
|
||||
<div class="bg" v-if="$store.getters.isSignedIn && $store.state.settings.wallpaper" :style="style"></div>
|
||||
<x-header class="header" v-if="navbar == 'top'" v-show="!zenMode" ref="header"/>
|
||||
<x-sidebar class="sidebar" v-if="navbar != 'top'" v-show="!zenMode" ref="sidebar"/>
|
||||
<div class="content" :class="[{ sidebar: navbar != 'top', zen: zenMode }, navbar]">
|
||||
@ -33,10 +33,9 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
style(): any {
|
||||
if (!this.$store.getters.isSignedIn || this.$store.state.i.wallpaperUrl == null) return {};
|
||||
if (!this.$store.getters.isSignedIn || this.$store.state.settings.wallpaper == null) return {};
|
||||
return {
|
||||
backgroundColor: this.$store.state.i.wallpaperColor && this.$store.state.i.wallpaperColor.length == 3 ? `rgb(${ this.$store.state.i.wallpaperColor.join(',') })` : null,
|
||||
backgroundImage: `url(${ this.$store.state.i.wallpaperUrl })`
|
||||
backgroundImage: `url(${ this.$store.state.settings.wallpaper })`
|
||||
};
|
||||
},
|
||||
|
||||
@ -96,7 +95,6 @@ export default Vue.extend({
|
||||
background-size cover
|
||||
background-position center
|
||||
background-attachment fixed
|
||||
opacity 0.3
|
||||
|
||||
> .content.sidebar.left
|
||||
padding-left 68px
|
||||
|
@ -18,10 +18,12 @@ export default Vue.extend({
|
||||
data() {
|
||||
return {
|
||||
connection: null,
|
||||
date: null,
|
||||
makePromise: cursor => this.$root.api('notes/user-list-timeline', {
|
||||
listId: this.list.id,
|
||||
limit: fetchLimit + 1,
|
||||
untilId: cursor ? cursor : undefined,
|
||||
untilDate: cursor ? undefined : (this.date ? this.date.getTime() : undefined),
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
||||
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
|
||||
@ -46,6 +48,10 @@ export default Vue.extend({
|
||||
},
|
||||
mounted() {
|
||||
this.init();
|
||||
this.$root.$on('warp', this.warp);
|
||||
this.$once('hook:beforeDestroy', () => {
|
||||
this.$root.$off('warp', this.warp);
|
||||
});
|
||||
},
|
||||
beforeDestroy() {
|
||||
this.connection.dispose();
|
||||
@ -68,6 +74,10 @@ export default Vue.extend({
|
||||
},
|
||||
onUserRemoved() {
|
||||
(this.$refs.timeline as any).reload();
|
||||
},
|
||||
warp(date) {
|
||||
this.date = date;
|
||||
(this.$refs.timeline as any).reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -1,85 +1,36 @@
|
||||
<template>
|
||||
<mk-window ref="window" width="450px" height="500px" @closed="destroyDom">
|
||||
<template #header><fa icon="list"/> {{ $t('title') }}</template>
|
||||
|
||||
<div class="xkxvokkjlptzyewouewmceqcxhpgzprp">
|
||||
<button class="ui" @click="add">{{ $t('create-list') }}</button>
|
||||
<a v-for="list in lists" :key="list.id" @click="choice(list)">{{ list.name }}</a>
|
||||
</div>
|
||||
<x-lists :class="$style.content" @choosen="choosen"/>
|
||||
</mk-window>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import MkUserListWindow from './user-list-window.vue';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('desktop/views/components/user-lists-window.vue'),
|
||||
data() {
|
||||
return {
|
||||
fetching: true,
|
||||
lists: []
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.$root.api('users/lists/list').then(lists => {
|
||||
this.fetching = false;
|
||||
this.lists = lists;
|
||||
});
|
||||
components: {
|
||||
XLists: () => import('../../../common/views/components/user-lists.vue').then(m => m.default)
|
||||
},
|
||||
methods: {
|
||||
add() {
|
||||
this.$root.dialog({
|
||||
title: this.$t('list-name'),
|
||||
input: true
|
||||
}).then(async ({ canceled, result: title }) => {
|
||||
if (canceled) return;
|
||||
const list = await this.$root.api('users/lists/create', {
|
||||
title
|
||||
});
|
||||
|
||||
this.$emit('choosen', list);
|
||||
});
|
||||
},
|
||||
choice(list) {
|
||||
this.$emit('choosen', list);
|
||||
},
|
||||
close() {
|
||||
(this as any).$refs.window.close();
|
||||
},
|
||||
choosen(list) {
|
||||
this.$root.new(MkUserListWindow, {
|
||||
list
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.xkxvokkjlptzyewouewmceqcxhpgzprp
|
||||
padding 16px
|
||||
|
||||
> button
|
||||
display block
|
||||
margin-bottom 16px
|
||||
color var(--primaryForeground)
|
||||
background var(--primary)
|
||||
width 100%
|
||||
border-radius 38px
|
||||
user-select none
|
||||
cursor pointer
|
||||
padding 0 16px
|
||||
min-width 100px
|
||||
line-height 38px
|
||||
font-size 14px
|
||||
font-weight 700
|
||||
|
||||
&:hover
|
||||
background var(--primaryLighten10)
|
||||
|
||||
&:active
|
||||
background var(--primaryDarken10)
|
||||
|
||||
> a
|
||||
display block
|
||||
padding 16px
|
||||
border solid 1px var(--faceDivider)
|
||||
border-radius 4px
|
||||
<style lang="stylus" module>
|
||||
.content
|
||||
height 100%
|
||||
overflow auto
|
||||
|
||||
</style>
|
||||
|
@ -34,7 +34,7 @@
|
||||
<button @click="addWidget">{{ $t('add') }}</button>
|
||||
</div>
|
||||
<div class="trash">
|
||||
<x-draggable v-model="trash" :options="{ group: 'x' }" @add="onTrash"></x-draggable>
|
||||
<x-draggable v-model="trash" group="x" @add="onTrash"></x-draggable>
|
||||
<p>{{ $t('@.trash') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
@ -45,7 +45,8 @@
|
||||
:list="widgets[place]"
|
||||
:class="place"
|
||||
:data-place="place"
|
||||
:options="{ group: 'x', animation: 150 }"
|
||||
group="x"
|
||||
animation="150"
|
||||
@sort="onWidgetSort"
|
||||
:key="place"
|
||||
>
|
||||
|
@ -53,6 +53,12 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
created() {
|
||||
this.$root.$on('warp', this.warp);
|
||||
this.$once('hook:beforeDestroy', () => {
|
||||
this.$root.$off('warp', this.warp);
|
||||
this.connection.dispose();
|
||||
});
|
||||
|
||||
const prepend = note => {
|
||||
(this.$refs.timeline as any).prepend(note);
|
||||
};
|
||||
@ -124,13 +130,14 @@ export default Vue.extend({
|
||||
});
|
||||
},
|
||||
|
||||
beforeDestroy() {
|
||||
this.connection.dispose();
|
||||
},
|
||||
|
||||
methods: {
|
||||
focus() {
|
||||
(this.$refs.timeline as any).focus();
|
||||
},
|
||||
|
||||
warp(date) {
|
||||
this.date = date;
|
||||
(this.$refs.timeline as any).reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -88,8 +88,6 @@ export default Vue.extend({
|
||||
} else if (this.src == 'tag') {
|
||||
this.tagTl = this.$store.state.device.tl.arg;
|
||||
}
|
||||
} else if (this.$store.state.i.followingCount == 0) {
|
||||
this.src = 'hybrid';
|
||||
}
|
||||
},
|
||||
|
||||
@ -125,10 +123,10 @@ export default Vue.extend({
|
||||
this.$root.dialog({
|
||||
title: this.$t('list-name'),
|
||||
input: true
|
||||
}).then(async ({ canceled, result: title }) => {
|
||||
}).then(async ({ canceled, result: name }) => {
|
||||
if (canceled) return;
|
||||
const list = await this.$root.api('users/lists/create', {
|
||||
title
|
||||
name
|
||||
});
|
||||
|
||||
this.list = list;
|
||||
|
@ -46,7 +46,6 @@ export default Vue.extend({
|
||||
fileType: image,
|
||||
excludeNsfw: !this.$store.state.device.alwaysShowNsfw,
|
||||
limit: 9,
|
||||
untilDate: new Date().getTime() + 1000 * 86400 * 365
|
||||
}).then(notes => {
|
||||
for (const note of notes) {
|
||||
for (const file of note.files) {
|
||||
|
@ -36,6 +36,7 @@ export default Vue.extend({
|
||||
includeReplies: this.mode == 'with-replies',
|
||||
includeMyRenotes: this.mode != 'my-posts',
|
||||
withFiles: this.mode == 'with-media',
|
||||
untilDate: cursor ? undefined : (this.date ? this.date.getTime() : undefined),
|
||||
untilId: cursor ? cursor : undefined
|
||||
}).then(notes => {
|
||||
if (notes.length == fetchLimit + 1) {
|
||||
@ -62,10 +63,11 @@ export default Vue.extend({
|
||||
|
||||
mounted() {
|
||||
document.addEventListener('keydown', this.onDocumentKeydown);
|
||||
},
|
||||
|
||||
beforeDestroy() {
|
||||
document.removeEventListener('keydown', this.onDocumentKeydown);
|
||||
this.$root.$on('warp', this.warp);
|
||||
this.$once('hook:beforeDestroy', () => {
|
||||
this.$root.$off('warp', this.warp);
|
||||
document.removeEventListener('keydown', this.onDocumentKeydown);
|
||||
});
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
@ -34,7 +34,7 @@ export default Vue.extend({
|
||||
document.title = title;
|
||||
},
|
||||
onOpenFolder(folder) {
|
||||
const title = folder.name + ' | %i18n:@title%';
|
||||
const title = `${folder.name} | ${this.$t('title')}`;
|
||||
|
||||
// Rewrite URL
|
||||
history.pushState(null, title, `/i/drive/folder/${folder.id}`);
|
||||
|
@ -44,7 +44,8 @@
|
||||
<div v-if="announcements && announcements.length > 0">
|
||||
<div v-for="announcement in announcements">
|
||||
<h1 v-html="announcement.title"></h1>
|
||||
<div v-html="announcement.text"></div>
|
||||
<mfm :text="announcement.text"/>
|
||||
<img v-if="announcement.image" :src="announcement.image" alt="" style="display: block; max-height: 130px; max-width: 100%;"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -11,7 +11,9 @@
|
||||
|
||||
<div class="mkw-polls--body">
|
||||
<div class="poll" v-if="!fetching && poll != null">
|
||||
<p v-if="poll.text"><router-link :to="poll | notePage">{{ poll.text }}</router-link></p>
|
||||
<p v-if="poll.text"><router-link :to="poll | notePage">
|
||||
<mfm :text="poll.text" :author="poll.user" :custom-emojis="poll.emojis"/>
|
||||
</router-link></p>
|
||||
<p v-if="!poll.text"><router-link :to="poll | notePage"><fa icon="link"/></router-link></p>
|
||||
<mk-poll :note="poll"/>
|
||||
</div>
|
||||
|
@ -14,7 +14,7 @@ export default define({
|
||||
}).extend({
|
||||
methods: {
|
||||
chosen(date) {
|
||||
this.$emit('chosen', date);
|
||||
this.$root.$emit('warp', date);
|
||||
},
|
||||
func() {
|
||||
if (this.props.design == 5) {
|
||||
|
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<mk-ui>
|
||||
<b-card :header="$t('header')">
|
||||
<b-card :header="$t('manage-apps')">
|
||||
<b-button to="/app/new" variant="primary">{{ $t('create-app') }}</b-button>
|
||||
<hr>
|
||||
<div class="apps">
|
||||
|
@ -1,35 +1,22 @@
|
||||
<template>
|
||||
<mk-ui>
|
||||
<b-card :header="$t('header')">
|
||||
<b-card :header="$t('new-app')">
|
||||
<b-alert show variant="info"><fa icon="info-circle"/> {{ $t('new-app-info') }}</b-alert>
|
||||
<b-form @submit.prevent="onSubmit" autocomplete="off">
|
||||
<b-form-group :label="$t('app-name')" :description="$t('description')">
|
||||
<b-form-input v-model="name" type="text" :placeholder="$t('placeholder')" autocomplete="off" required/>
|
||||
<b-form-group :label="$t('app-name')" :description="$t('app-name-desc')">
|
||||
<b-form-input v-model="name" type="text" :placeholder="$t('app-name-placeholder')" autocomplete="off" required/>
|
||||
</b-form-group>
|
||||
<b-form-group :label="$t('app-overview')" :description="$t('description')">
|
||||
<b-textarea v-model="description" :placeholder="$t('placeholder')" autocomplete="off" required></b-textarea>
|
||||
<b-form-group :label="$t('app-overview')" :description="$t('app-overview-desc')">
|
||||
<b-textarea v-model="description" :placeholder="$t('app-overview-placeholder')" autocomplete="off" required></b-textarea>
|
||||
</b-form-group>
|
||||
<b-form-group :label="$t('callback-url')" :description="$t('description')">
|
||||
<b-input v-model="cb" type="url" placeholder="ex) https://your.app.example.com/callback.php" autocomplete="off"/>
|
||||
<b-form-group :label="$t('callback-url')" :description="$t('callback-url-desc')">
|
||||
<b-input v-model="cb" type="url" :placeholder="$t('callback-url-placeholder')" autocomplete="off"/>
|
||||
</b-form-group>
|
||||
<b-card :header="$t('header')">
|
||||
<b-form-group :description="$t('description')">
|
||||
<b-card :header="$t('authority')">
|
||||
<b-form-group :description="$t('authority-desc')">
|
||||
<b-alert show variant="warning"><fa icon="exclamation-triangle"/> {{ $t('authority-warning') }}</b-alert>
|
||||
<b-form-checkbox-group v-model="permission" stacked>
|
||||
<b-form-checkbox value="read:account">{{ $t('read:account') }}</b-form-checkbox>
|
||||
<b-form-checkbox value="write:account">{{ $t('write:account') }}</b-form-checkbox>
|
||||
<b-form-checkbox value="write:notes">{{ $t('write:notes') }}</b-form-checkbox>
|
||||
<b-form-checkbox value="read:reactions">{{ $t('read:reactions') }}</b-form-checkbox>
|
||||
<b-form-checkbox value="write:reactions">{{ $t('write:reactions') }}</b-form-checkbox>
|
||||
<b-form-checkbox value="read:following">{{ $t('read:following') }}</b-form-checkbox>
|
||||
<b-form-checkbox value="write:following">{{ $t('write:following') }}</b-form-checkbox>
|
||||
<b-form-checkbox value="read:mutes">{{ $t('read:mutes') }}</b-form-checkbox>
|
||||
<b-form-checkbox value="write:mutes">{{ $t('write:mutes') }}</b-form-checkbox>
|
||||
<b-form-checkbox value="read:blocks">{{ $t('read:blocks') }}</b-form-checkbox>
|
||||
<b-form-checkbox value="write:blocks">{{ $t('write:blocks') }}</b-form-checkbox>
|
||||
<b-form-checkbox value="read:drive">{{ $t('read:drive') }}</b-form-checkbox>
|
||||
<b-form-checkbox value="write:drive">{{ $t('write:drive') }}</b-form-checkbox>
|
||||
<b-form-checkbox value="read:notifications">{{ $t('read:notifications') }}</b-form-checkbox>
|
||||
<b-form-checkbox value="write:notifications">{{ $t('write:notifications') }}</b-form-checkbox>
|
||||
<b-form-checkbox v-for="v in permissionsList" :value="v" :key="v">{{ $t(`@.permissions.${v}`) }} ({{ v }})</b-form-checkbox>
|
||||
</b-form-checkbox-group>
|
||||
</b-form-group>
|
||||
</b-card>
|
||||
@ -43,6 +30,8 @@
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../i18n';
|
||||
import { kinds } from '../../../../server/api/kinds';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('dev/views/new-app.vue'),
|
||||
data() {
|
||||
@ -51,7 +40,8 @@ export default Vue.extend({
|
||||
description: '',
|
||||
cb: '',
|
||||
nidState: null,
|
||||
permission: []
|
||||
permission: [],
|
||||
permissionsList: kinds
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
|
@ -458,10 +458,14 @@ export default (callback: (launch: (router: VueRouter) => [Vue, MiOS], os: MiOS)
|
||||
},
|
||||
dialog(opts) {
|
||||
const vm = this.new(Dialog, opts);
|
||||
return new Promise((res) => {
|
||||
const p: any = new Promise((res) => {
|
||||
vm.$once('ok', result => res({ canceled: false, result }));
|
||||
vm.$once('cancel', () => res({ canceled: true }));
|
||||
});
|
||||
p.close = () => {
|
||||
vm.close();
|
||||
};
|
||||
return p;
|
||||
}
|
||||
},
|
||||
router,
|
||||
|
@ -4,7 +4,7 @@ import { EventEmitter } from 'eventemitter3';
|
||||
import * as uuid from 'uuid';
|
||||
|
||||
import initStore from './store';
|
||||
import { apiUrl, version } from './config';
|
||||
import { apiUrl, version, locale } from './config';
|
||||
import Progress from './common/scripts/loading';
|
||||
|
||||
import Err from './common/views/components/connect-failed.vue';
|
||||
@ -28,7 +28,7 @@ export default class MiOS extends EventEmitter {
|
||||
};
|
||||
|
||||
public get instanceName() {
|
||||
return this.meta ? this.meta.data.name : 'Misskey';
|
||||
return this.meta ? (this.meta.data.name || 'Misskey') : 'Misskey';
|
||||
}
|
||||
|
||||
private isMetaFetching = false;
|
||||
@ -281,7 +281,7 @@ export default class MiOS extends EventEmitter {
|
||||
// トークンが再生成されたとき
|
||||
// このままではMisskeyが利用できないので強制的にサインアウトさせる
|
||||
main.on('myTokenRegenerated', () => {
|
||||
alert('%i18n:common.my-token-regenerated%');
|
||||
alert(locale['common']['my-token-regenerated'])
|
||||
this.signout();
|
||||
});
|
||||
}
|
||||
|
@ -136,7 +136,10 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
showCreatedAt() {
|
||||
alert(new Date(this.file.createdAt).toLocaleString());
|
||||
this.$root.dialog({
|
||||
type: 'info',
|
||||
text: (new Date(this.file.createdAt)).toLocaleString()
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -150,11 +153,13 @@ export default Vue.extend({
|
||||
|
||||
> .preview
|
||||
width fit-content
|
||||
width -moz-fit-content
|
||||
max-width 100%
|
||||
margin 0 auto
|
||||
box-shadow 1px 1px 4px rgba(#000, 0.2)
|
||||
overflow hidden
|
||||
color var(--driveFileIcon)
|
||||
justify-content center
|
||||
|
||||
> footer
|
||||
padding 8px 8px 0 8px
|
||||
|
@ -379,43 +379,30 @@ export default Vue.extend({
|
||||
});
|
||||
},
|
||||
|
||||
openContextMenu() {
|
||||
const fn = window.prompt(this.$t('prompt'));
|
||||
if (fn == null || fn == '') return;
|
||||
switch (fn) {
|
||||
case '1':
|
||||
this.selectLocalFile();
|
||||
break;
|
||||
case '2':
|
||||
this.urlUpload();
|
||||
break;
|
||||
case '3':
|
||||
this.createFolder();
|
||||
break;
|
||||
case '4':
|
||||
this.renameFolder();
|
||||
break;
|
||||
case '5':
|
||||
this.moveFolder();
|
||||
break;
|
||||
case '6':
|
||||
this.deleteFolder();
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
selectLocalFile() {
|
||||
(this.$refs.file as any).click();
|
||||
},
|
||||
|
||||
createFolder() {
|
||||
const name = window.prompt(this.$t('folder-name'));
|
||||
if (name == null || name == '') return;
|
||||
this.$root.api('drive/folders/create', {
|
||||
name: name,
|
||||
parentId: this.folder ? this.folder.id : undefined
|
||||
}).then(folder => {
|
||||
this.addFolder(folder, true);
|
||||
this.$root.dialog({
|
||||
title: this.$t('folder-name')
|
||||
input: {
|
||||
default: this.folder.name
|
||||
}
|
||||
}).then(({ result: name }) => {
|
||||
if (!name) {
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('folder-name-cannot-empty')
|
||||
});
|
||||
return;
|
||||
}
|
||||
this.$root.api('drive/folders/create', {
|
||||
name: name,
|
||||
parentId: this.folder ? this.folder.id : undefined
|
||||
}).then(folder => {
|
||||
this.addFolder(folder, true);
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
@ -427,13 +414,25 @@ export default Vue.extend({
|
||||
});
|
||||
return;
|
||||
}
|
||||
const name = window.prompt(this.$t('folder-name'), this.folder.name);
|
||||
if (name == null || name == '') return;
|
||||
this.$root.api('drive/folders/update', {
|
||||
name: name,
|
||||
folderId: this.folder.id
|
||||
}).then(folder => {
|
||||
this.cd(folder);
|
||||
this.$root.dialog({
|
||||
title: this.$t('folder-name')
|
||||
input: {
|
||||
default: this.folder.name
|
||||
}
|
||||
}).then(({ result: name }) => {
|
||||
if (!name) {
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('cannot-empty')
|
||||
});
|
||||
return;
|
||||
}
|
||||
this.$root.api('drive/folders/update', {
|
||||
name: name,
|
||||
folderId: this.folder.id
|
||||
}).then(folder => {
|
||||
this.cd(folder);
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -215,11 +215,6 @@ export default Vue.extend({
|
||||
@media (min-width 500px)
|
||||
padding 28px 32px 18px 32px
|
||||
|
||||
&:after
|
||||
content ""
|
||||
display block
|
||||
clear both
|
||||
|
||||
> header
|
||||
display flex
|
||||
line-height 1.1em
|
||||
@ -236,6 +231,7 @@ export default Vue.extend({
|
||||
height 60px
|
||||
|
||||
> div
|
||||
min-width 0
|
||||
|
||||
> .name
|
||||
display inline-block
|
||||
|
@ -124,7 +124,7 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
fetchMore() {
|
||||
if (!this.more || this.moreFetching) return;
|
||||
if (!this.more || this.moreFetching || this.notes.length === 0) return;
|
||||
this.moreFetching = true;
|
||||
this.makePromise(this.notes[this.notes.length - 1].id).then(x => {
|
||||
this.notes = this.notes.concat(x.notes);
|
||||
@ -160,6 +160,7 @@ export default Vue.extend({
|
||||
|
||||
append(note) {
|
||||
this.notes.push(note);
|
||||
this.cursor = this.notes[this.notes.length - 1].id
|
||||
},
|
||||
|
||||
releaseQueue() {
|
||||
|
@ -21,13 +21,7 @@
|
||||
</div>
|
||||
<input v-show="useCw" ref="cw" v-model="cw" :placeholder="$t('annotations')" v-autocomplete="{ model: 'cw' }">
|
||||
<textarea v-model="text" ref="text" :disabled="posting" :placeholder="placeholder" v-autocomplete="{ model: 'text' }"></textarea>
|
||||
<div class="attaches" v-show="files.length != 0">
|
||||
<x-draggable class="files" :list="files" :options="{ animation: 150 }">
|
||||
<div class="file" v-for="file in files" :key="file.id">
|
||||
<div class="img" :style="`background-image: url(${file.thumbnailUrl})`" @click="detachMedia(file)"></div>
|
||||
</div>
|
||||
</x-draggable>
|
||||
</div>
|
||||
<x-post-form-attaches class="attaches" :files="files"/>
|
||||
<mk-poll-editor v-if="poll" ref="poll" @destroyed="poll = false" @updated="onPollUpdate()"/>
|
||||
<mk-uploader ref="uploader" @uploaded="attachMedia" @change="onChangeUploadings"/>
|
||||
<footer>
|
||||
@ -57,7 +51,6 @@
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import insertTextAtCursor from 'insert-text-at-cursor';
|
||||
import * as XDraggable from 'vuedraggable';
|
||||
import MkVisibilityChooser from '../../../common/views/components/visibility-chooser.vue';
|
||||
import getFace from '../../../common/scripts/get-face';
|
||||
import { parse } from '../../../../../mfm/parse';
|
||||
@ -66,11 +59,12 @@ import { erase, unique } from '../../../../../prelude/array';
|
||||
import { length } from 'stringz';
|
||||
import { toASCII } from 'punycode';
|
||||
import extractMentions from '../../../../../misc/extract-mentions';
|
||||
import XPostFormAttaches from '../../../common/views/components/post-form-attaches.vue';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('mobile/views/components/post-form.vue'),
|
||||
components: {
|
||||
XDraggable
|
||||
XPostFormAttaches
|
||||
},
|
||||
|
||||
props: {
|
||||
@ -264,8 +258,8 @@ export default Vue.extend({
|
||||
this.$emit('change-attached-files', this.files);
|
||||
},
|
||||
|
||||
detachMedia(file) {
|
||||
this.files = this.files.filter(x => x.id != file.id);
|
||||
detachMedia(id) {
|
||||
this.files = this.files.filter(x => x.id != id);
|
||||
this.$emit('change-attached-files', this.files);
|
||||
},
|
||||
|
||||
@ -289,14 +283,21 @@ export default Vue.extend({
|
||||
|
||||
setGeo() {
|
||||
if (navigator.geolocation == null) {
|
||||
alert(this.$t('location-alert'));
|
||||
this.$root.dialog({
|
||||
type: 'warning',
|
||||
text: this.$t('geolocation-alert')
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
navigator.geolocation.getCurrentPosition(pos => {
|
||||
this.geo = pos.coords;
|
||||
}, err => {
|
||||
alert(`%i18n:@error%: ${err.message}`);
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
title: this.$t('error')
|
||||
text: err.message
|
||||
});
|
||||
}, {
|
||||
enableHighAccuracy: true
|
||||
});
|
||||
@ -481,32 +482,6 @@ export default Vue.extend({
|
||||
min-width 100%
|
||||
min-height 80px
|
||||
|
||||
> .attaches
|
||||
|
||||
> .files
|
||||
display block
|
||||
margin 0
|
||||
padding 4px
|
||||
list-style none
|
||||
|
||||
&:after
|
||||
content ""
|
||||
display block
|
||||
clear both
|
||||
|
||||
> .file
|
||||
display block
|
||||
float left
|
||||
margin 0
|
||||
padding 0
|
||||
border solid 4px transparent
|
||||
|
||||
> .img
|
||||
width 64px
|
||||
height 64px
|
||||
background-size cover
|
||||
background-position center center
|
||||
|
||||
> .mk-uploader
|
||||
margin 8px 0 0 0
|
||||
padding 8px
|
||||
|
@ -43,7 +43,8 @@
|
||||
<div class="announcements" v-if="announcements && announcements.length > 0">
|
||||
<article v-for="announcement in announcements">
|
||||
<span v-html="announcement.title" class="title"></span>
|
||||
<div v-html="announcement.text"></div>
|
||||
<mfm :text="announcement.text"/>
|
||||
<img v-if="announcement.image" :src="announcement.image" alt="" style="display: block; max-height: 120px; max-width: 100%;"/>
|
||||
</article>
|
||||
</div>
|
||||
<a :href="aboutUrl"><p class="about">{{ $t('about') }}</p></a>
|
||||
@ -66,6 +67,7 @@ import i18n from '../../../i18n';
|
||||
import { lang } from '../../../config';
|
||||
import { faNewspaper, faHashtag, faHome, faColumns } from '@fortawesome/free-solid-svg-icons';
|
||||
import { faMoon, faSun } from '@fortawesome/free-regular-svg-icons';
|
||||
import { search } from '../../../common/scripts/search';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('mobile/views/components/ui.nav.vue'),
|
||||
@ -133,29 +135,10 @@ export default Vue.extend({
|
||||
}).then(async ({ canceled, result: query }) => {
|
||||
if (canceled) return;
|
||||
|
||||
const q = query.trim();
|
||||
if (q.startsWith('@')) {
|
||||
this.$router.push(`/${q}`);
|
||||
} else if (q.startsWith('#')) {
|
||||
this.$router.push(`/tags/${encodeURIComponent(q.substr(1))}`);
|
||||
} else if (q.startsWith('https://')) {
|
||||
this.searching = true;
|
||||
try {
|
||||
const res = await this.$root.api('ap/show', {
|
||||
uri: q
|
||||
});
|
||||
if (res.type == 'User') {
|
||||
this.$router.push(`/@${res.object.username}@${res.object.host}`);
|
||||
} else if (res.type == 'Note') {
|
||||
this.$router.push(`/notes/${res.object.id}`);
|
||||
}
|
||||
} catch (e) {
|
||||
// TODO
|
||||
}
|
||||
this.searching = true;
|
||||
search(this, query).finally(() => {
|
||||
this.searching = false;
|
||||
} else {
|
||||
this.$router.push(`/search?q=${encodeURIComponent(q)}`);
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -15,10 +15,12 @@ export default Vue.extend({
|
||||
data() {
|
||||
return {
|
||||
connection: null,
|
||||
date: null,
|
||||
makePromise: cursor => this.$root.api('notes/user-list-timeline', {
|
||||
listId: this.list.id,
|
||||
limit: fetchLimit + 1,
|
||||
untilId: cursor ? cursor : undefined,
|
||||
untilDate: cursor ? undefined : (this.date ? this.date.getTime() : undefined),
|
||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
||||
includeLocalRenotes: this.$store.state.settings.showLocalRenotes
|
||||
@ -45,6 +47,11 @@ export default Vue.extend({
|
||||
|
||||
mounted() {
|
||||
this.init();
|
||||
|
||||
this.$root.$on('warp', this.warp);
|
||||
this.$once('hook:beforeDestroy', () => {
|
||||
this.$root.$off('warp', this.warp);
|
||||
});
|
||||
},
|
||||
|
||||
beforeDestroy() {
|
||||
@ -73,6 +80,11 @@ export default Vue.extend({
|
||||
|
||||
onUserRemoved() {
|
||||
(this.$refs.timeline as any).reload();
|
||||
},
|
||||
|
||||
warp(date) {
|
||||
this.date = date;
|
||||
(this.$refs.timeline as any).reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -17,10 +17,12 @@ export default Vue.extend({
|
||||
|
||||
data() {
|
||||
return {
|
||||
date: null,
|
||||
makePromise: cursor => this.$root.api('users/notes', {
|
||||
userId: this.user.id,
|
||||
limit: fetchLimit + 1,
|
||||
withFiles: this.withMedia,
|
||||
untilDate: cursor ? undefined : (this.date ? this.date.getTime() : undefined),
|
||||
untilId: cursor ? cursor : undefined
|
||||
}).then(notes => {
|
||||
if (notes.length == fetchLimit + 1) {
|
||||
@ -37,6 +39,20 @@ export default Vue.extend({
|
||||
}
|
||||
})
|
||||
};
|
||||
},
|
||||
|
||||
created() {
|
||||
this.$root.$on('warp', this.warp);
|
||||
this.$once('hook:beforeDestroy', () => {
|
||||
this.$root.$off('warp', this.warp);
|
||||
});
|
||||
},
|
||||
|
||||
methods: {
|
||||
warp(date) {
|
||||
this.date = date;
|
||||
(this.$refs.timeline as any).reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<template v-if="file"><mk-file-type-icon data-icon :type="file.type" style="margin-right:4px;"/>{{ file.name }}</template>
|
||||
<template v-if="!folder && !file"><span style="margin-right:4px;"><fa icon="cloud"/></span>{{ $t('@.drive') }}</template>
|
||||
</template>
|
||||
<template #func><button @click="fn"><fa icon="ellipsis-h"/></button></template>
|
||||
<template #func v-if="folder || (!folder && !file)"><button @click="openContextMenu" ref="contextSource"><fa icon="ellipsis-h"/></button></template>
|
||||
<x-drive
|
||||
ref="browser"
|
||||
:init-folder="initFolder"
|
||||
@ -26,9 +26,12 @@
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import Progress from '../../../common/scripts/loading';
|
||||
import XMenu from '../../../common/views/components/menu.vue';
|
||||
import { faTrashAlt } from '@fortawesome/free-regular-svg-icons';
|
||||
import { faCloudUploadAlt } from '@fortawesome/free-solid-svg-icons';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n(),
|
||||
i18n: i18n('mobile/views/pages/drive.vue'),
|
||||
components: {
|
||||
XDrive: () => import('../components/drive.vue').then(m => m.default),
|
||||
},
|
||||
@ -63,9 +66,6 @@ export default Vue.extend({
|
||||
(this.$refs as any).browser.goRoot(true);
|
||||
}
|
||||
},
|
||||
fn() {
|
||||
(this.$refs as any).browser.openContextMenu();
|
||||
},
|
||||
onMoveRoot(silent) {
|
||||
const title = `${this.$root.instanceName} Drive`;
|
||||
|
||||
@ -104,6 +104,42 @@ export default Vue.extend({
|
||||
|
||||
this.file = file;
|
||||
this.folder = null;
|
||||
},
|
||||
openContextMenu() {
|
||||
this.$root.new(XMenu, {
|
||||
items: [{
|
||||
type: 'item',
|
||||
text: this.$t('contextmenu.upload'),
|
||||
icon: 'upload',
|
||||
action: this.$refs.browser.selectLocalFile
|
||||
}, {
|
||||
type: 'item',
|
||||
text: this.$t('contextmenu.url-upload'),
|
||||
icon: faCloudUploadAlt,
|
||||
action: this.$refs.browser.urlUpload
|
||||
}, {
|
||||
type: 'item',
|
||||
text: this.$t('contextmenu.create-folder'),
|
||||
icon: ['far', 'folder'],
|
||||
action: this.$refs.browser.createFolder
|
||||
}, ...(this.folder ? [{
|
||||
type: 'item',
|
||||
text: this.$t('contextmenu.rename-folder'),
|
||||
icon: 'i-cursor',
|
||||
action: this.$refs.browser.renameFolder
|
||||
}, {
|
||||
type: 'item',
|
||||
text: this.$t('contextmenu.move-folder'),
|
||||
icon: ['far', 'folder-open'],
|
||||
action: this.$refs.browser.moveFolder
|
||||
}, {
|
||||
type: 'item',
|
||||
text: this.$t('contextmenu.delete-folder'),
|
||||
icon: faTrashAlt,
|
||||
action: this.$refs.browser.deleteFolder
|
||||
}] : [])],
|
||||
source: this.$refs.contextSource,
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -32,7 +32,7 @@ export default Vue.extend({
|
||||
this.fetch();
|
||||
},
|
||||
mounted() {
|
||||
document.title = `${this.$root.instanceName} | %i18n:@notifications%`;
|
||||
document.title = `${this.$root.instanceName} | ${this.$t('@.favorites')}`;
|
||||
},
|
||||
methods: {
|
||||
fetch() {
|
||||
|
@ -15,7 +15,7 @@ export default Vue.extend({
|
||||
XReversi: () => import('../../../../common/views/components/games/reversi/reversi.vue').then(m => m.default)
|
||||
},
|
||||
mounted() {
|
||||
document.title = `${this.$root.instanceName} %i18n:@reversi%`;
|
||||
document.title = `${this.$root.instanceName} | ${this.$t('reversi')}`;
|
||||
},
|
||||
methods: {
|
||||
nav(game, actualNav) {
|
||||
|
@ -54,6 +54,12 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
created() {
|
||||
this.$root.$on('warp', this.warp);
|
||||
this.$once('hook:beforeDestroy', () => {
|
||||
this.$root.$off('warp', this.warp);
|
||||
this.connection.dispose();
|
||||
});
|
||||
|
||||
const prepend = note => {
|
||||
(this.$refs.timeline as any).prepend(note);
|
||||
};
|
||||
@ -125,10 +131,6 @@ export default Vue.extend({
|
||||
});
|
||||
},
|
||||
|
||||
beforeDestroy() {
|
||||
this.connection.dispose();
|
||||
},
|
||||
|
||||
methods: {
|
||||
focus() {
|
||||
(this.$refs.timeline as any).focus();
|
||||
|
@ -39,7 +39,7 @@
|
||||
<span :data-active="src == 'messages'" @click="src = 'messages'"><fa :icon="['far', 'envelope']"/> {{ $t('messages') }}<i class="badge" v-if="$store.state.i.hasUnreadSpecifiedNotes"><fa icon="circle"/></i></span>
|
||||
<template v-if="lists">
|
||||
<div class="hr" v-if="lists.length > 0"></div>
|
||||
<span v-for="l in lists" :data-active="src == 'list' && list == l" @click="src = 'list'; list = l" :key="l.id"><fa icon="list"/> {{ l.title }}</span>
|
||||
<span v-for="l in lists" :data-active="src == 'list' && list == l" @click="src = 'list'; list = l" :key="l.id"><fa icon="list"/> {{ l.name }}</span>
|
||||
</template>
|
||||
<div class="hr" v-if="$store.state.settings.tagTimelines && $store.state.settings.tagTimelines.length > 0"></div>
|
||||
<span v-for="tl in $store.state.settings.tagTimelines" :data-active="src == 'tag' && tagTl == tl" @click="src = 'tag'; tagTl = tl" :key="tl.id"><fa icon="hashtag"/> {{ tl.title }}</span>
|
||||
@ -130,8 +130,6 @@ export default Vue.extend({
|
||||
} else if (this.src == 'tag') {
|
||||
this.tagTl = this.$store.state.device.tl.arg;
|
||||
}
|
||||
} else if (this.$store.state.i.followingCount == 0) {
|
||||
this.src = 'hybrid';
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -50,7 +50,7 @@ export default Vue.extend({
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
document.title = `%i18n:@search%: ${this.q} | ${this.$root.instanceName}`;
|
||||
document.title = `${this.$t('search')}: ${this.q} | ${this.$root.instanceName}`;
|
||||
},
|
||||
methods: {
|
||||
inited() {
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user